[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