[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:05560] debiandoc2text for japanese
やなぎはらです。
debiandoc-sgml についている debiandoc2text で日本語を
それらしく扱うように修正しました。
あまり、需要はないのかもしれませんが、とりあえず版で公開します。
/usr/lib/debiandoc-sgml/spec/text に
以下のパッチを適用すると、漢字混じりのドキュメントで
文字化けがなくなりますし、程よいところで改行してくれるように
なります。
対応している漢字コードは、EUC だけで、さらに
コードセット1
しか正しく処理しませんが、要望があれば適宜対応していきます。
#自分では、とりあえず上記のコードが処理できればよかったので...
-------
--- text.org Wed Oct 14 13:27:24 1998
+++ text Thu Oct 15 12:14:17 1998
@@ -776,7 +776,9 @@
my $nobreak, $code, $reducedwidth, $indentdone, $lhs;
my $centre = ( $fmt eq 'centre' || $fmt eq 'centre-underdash' );
my $udash = ( $fmt eq 'underdash' || $fmt eq 'centre-underdash' );
+ $euc = 0;
$maxwidth = 0;
+
return if $pd !~ m/\S/ && ( $lhtagdefer || ! length( $paralhtag ) );
if ( length( $paralhtag ) )
{
@@ -799,56 +801,63 @@
$ls_pis = -1;
while ( $pis < length( $pd ) && ( $nobreak || $pil <= $av ) )
{
- $here = substr( $pd, $pis, 1 );
- if ( $here eq "\0" )
- {
- $code = substr( $pd, $pis + 1, 2 );
- if ( $code eq '=o' )
- {
- last if $pis;
- $nobreak = 1;
- $lhs = 0;
- }
- elsif ( $code eq '=l' )
- {
- last if $pis || $indentdone;
- $nobreak = 1;
- $lhs = 1;
- }
- elsif ( $code eq '=c' )
- {
- last if $pis;
- $nobreak = 0;
- $lhs = 0;
- }
- elsif ( $code eq '=n' )
- {
- $pis += 4;
- last;
- }
- else
- {
- $pis += 4;
- next;
- }
- $pd = substr( $pd, 4 );
- next outer;
- }
- if ( ! $nobreak && $here =~ m/^\s$/ )
- {
- $here = substr( $pd, $pis );
- $here =~ s/^\s+/ /;
- $pd = substr( $pd, 0, $pis ) . $here;
- $ls_pis = $pis;
- $ls_pil = $pil;
- }
- if ( $ls_pis < 0 && $pil >= $av - $unbreakbackoff )
+ $here = substr( $pd, $pis, 1 );
+ if ( $here eq "\0" ) {
+ $code = substr( $pd, $pis + 1, 2 );
+ if ( $code eq '=o' ) {
+ last if $pis;
+ $nobreak = 1;
+ $lhs = 0;
+ } elsif ( $code eq '=l' ) {
+ last if $pis || $indentdone;
+ $nobreak = 1;
+ $lhs = 1;
+ } elsif ( $code eq '=c' ) {
+ last if $pis;
+ $nobreak = 0;
+ $lhs = 0;
+ } elsif ( $code eq '=n' ) {
+ $pis += 4;
+ last;
+ } else {
+ $pis += 4;
+ next;
+ }
+ $pd = substr( $pd, 4 );
+ next outer;
+ }
+
+ if ( ! $nobreak && $here =~ m/^\s$/ ) {
+ $here = substr( $pd, $pis );
+ $here =~ s/^\s+/ /;
+ $here2 = substr($here, 1, 4);
+ if ($here2 =~ /^[\xa1-\xfe]/) {
+ $here =~ s/^ //;
+ }
+ $pd = substr( $pd, 0, $pis ) . $here;
+ $ls_pis = $pis;
+ $ls_pil = $pil;
+ }
+
+ if ($here =~ /^[\xa1-\xfe]/) {
+ $euc_kanji = 1; # カレント文字が漢字(codeset=1)
+ $pis += 2;
+ $pil += 2;
+
+ if ($pil < $av) {
+ $ls_pis = $pis;
+ $ls_pil = $pil;
+ }
+ next;
+ }
+
+ if ( $ls_pis < 0 && $pil >= $av - $unbreakbackoff )
{
- $ls_pis = $pis;
- $ls_pil = $pil;
+ $ls_pis = $pis;
+ $ls_pil = $pil;
}
- $pis++;
- $pil++;
+ $pis++;
+ $pil++;
}
if ( ! $nobreak && $pil > $av )
{
@@ -878,6 +887,7 @@
{
my ( $string ) = @_;
my $i, $here, $ar, $sv;
+
for ( $i = 0; $i < length( $string ); $i++ )
{
$here = substr( $string,$i, 1 );
---------------
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Yoshiaki Yanagihara (Debian JP Project Leader)
E-mail: yochi@debian.or.jp
yochi@debian.org