[BACK]Return to jptexindex CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-doc / jtexindex / Perl

Annotation of OpenXM/src/asir-doc/jtexindex/Perl/jptexindex, Revision 1.1.1.1

1.1       noro        1: #!/usr/bin/jperl
                      2: # jptexindex -- 日本語対応 texindex
                      3: # Copyright (C) 1996, 1997 Mikio Nakajima <gy2m-nkjm@asahi-net.or.jp>
                      4:
                      5: # Author: Mikio Nakajima <gy2m-nkjm@asahi-net.or.jp>
                      6: # Created: Dec 12, 1996
                      7: # Last Modified: Sat Jan 25 18:15:08 1997
                      8: # Keywords: Texinfo, TeX, japanese
                      9: $Version = 0.5;
                     10: # This program is free software; you can redistribute it and/or modify
                     11: # it under the terms of the GNU General Public License as published by
                     12: # the Free Software Foundation; either versions 2, or (at your option)
                     13: # any later version.
                     14:
                     15: # This program is distributed in the hope that it will be useful
                     16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: # GNU General Public License for more details.
                     19:
                     20: # You should have received a copy of the GNU General Public License
                     21: # along with SKK, see the file COPYING.  If not, write to the Free
                     22: # Software Foundation Inc., 59 Temple Place - Suite 330, Boston,
                     23: # MA 02111-1307, USA.
                     24:
                     25: # Commentary:
                     26: #
                     27: # 日本語対応 (というか Perl が split 関数を対応させている言語なら多分どんな言
                     28: # 語でも対応) の texindex です。
                     29: # Texinfo のインデクスコマンド (@cindex など) の引数に日本語を使うときは、
                     30: #
                     31: #   @cindex インデクス[いんてくす]
                     32: #   @cindex 言語[けんこ]
                     33: #
                     34: # などのように `@cindex 項目[よみ]' の形式で書くとこの texindex でソートして索
                     35: # 引を作ってくれます。
                     36:
                     37: # texindex.c の仕様を良く読んだわけではないので、何か忘れている仕事があるかも
                     38: # しれません。お気付きの点は是非お知らせ下さい。特に TeX コマンドでクォートさ
                     39: # れる文字は、
                     40: #
                     41: #   `_' -> {\_}
                     42: #   `^' -> {\tt\hat}
                     43: #   `>' -> {\tt\gtr}
                     44: #   `<' -> {\tt\less}
                     45: #   `"' -> {\tt\char '042}
                     46: #   `+' -> {\tt\char 43}
                     47: #   `=' -> {\\tt\\char 61} #NTT jTeX only?
                     48: #   `@' -> {\\tt\\char '100} #NTT jTeX only?
                     49: #   `{' -> {\tt\char '173}
                     50: #   `|' -> {\tt\char '174}
                     51: #   `}' -> {\tt\char '175}
                     52: #   `~' -> {\tt\char '176}
                     53: #   `\' -> {\tt\indexbackslash }
                     54: #
                     55: #
                     56: # しか知らないので、漏れがあるかもしれません。
                     57:
                     58: # Change log:
                     59:
                     60: # Code:
                     61:
                     62: $CONVERTER = "nkf -e";
                     63: $Version .= " (January 25, 1997)";
                     64:
                     65: require "getopts.pl";
                     66: &Getopts(':v');
                     67:
                     68: die "jptexindex $Version\n" if $opt_v;
                     69:
                     70: foreach $rawfile (@ARGV){
                     71:     $processedfile = $rawfile . "s";
                     72:     # nkf を使う必要のない方は、下記 2 行をコメントアウトの上、85 行目の
                     73:     # while(<IN>) を while(<>) に変更して下さい。
                     74:     open(IN, "$CONVERTER $rawfile |") || die "Cannot run $CONVERTER: $!\n";
                     75:     open(OUT, "> $processedfile") || die "Cannot open $processedfile: $!\n";
                     76:
                     77: #
                     78: # \entry{Makefile}{10}{\file {Makefile}}
                     79: #   -> $item := Makefile, $page := 10, $realitem := {\file {Makefile}}
                     80: #
                     81:     #initialize
                     82:     %entries = ();
                     83:     while(<IN>){
                     84:     #while(<>){
                     85:         ($item, $page, $realitem) = m/^\\entry(.+){([0-9]+)}(.+)$/o;
                     86:         $item =~ s/{\\_}/_/o || $item =~ s/{\\tt\\hat}/^/o || $item =~ s/{\\tt\\gtr}/>/o ||
                     87:         $item =~ s/{\\tt\\less}/</o || $item =~ s/{\\tt\\char *'042}/"/o ||
                     88:         $item =~ s/{\\tt\\char *43}/+/o ||
                     89:         $item =~ s/{\\tt\\char *61}/=/o || # NTT/jTeX only?
                     90:         $item =~ s/{\\tt\\char *'100}/@/o || # NTT/jTeX only?
                     91:         $item =~ s/{\\tt\\char *'173}/{/o ||
                     92:         $item =~ s/{\\tt\\char *'174}/|/o || $item =~ s/{\\tt\\char *'175}/}/o ||
                     93:         $item =~ s/{\\tt\\char *'176}/~/o || $item =~ s/{\\tt\\indexbackslash }/\\/o;
                     94:         # {hogehoge} -> hogehoge
                     95:         substr($item, 0, 2) = "";
                     96:         chop($item);
                     97:         # hogehoge -> HOGEHOGE
                     98:         $item =~ tr/a-z/A-Z/;
                     99:         # HOGEHOGE[ほげほげ] -> ほげほげ
                    100:         if ($item =~ /^[^[]+\[([^]]+)\]$/o) {
                    101:             $item = $1;
                    102:         }
                    103:         #print "\$item is ", $item, "\n";
                    104:         if ($entries{$item} ne "") {
                    105:             chop($entries{$item});
                    106:             # \\entry{HOGEHOGE}{page1, page2}
                    107:             $entries{$item} .= ", " . $page . "}";
                    108:         }else {
                    109:             if ($realitem =~ /^{([^[]+)\[[^]]+\]}$/o) {
                    110:                 # {HOGEHOGE[ほげほげ]} -> {HOGEHOGE}
                    111:                 $realitem = "{" . $1 . "}";
                    112:             }
                    113:             # \\entry{HOGEHOGE}{page}
                    114:             $entries{$item} = "\\entry " . $realitem . "{" . $page . "}";
                    115:         }
                    116:     }
                    117:     @chars= ();
                    118:     # 見出し語でソート
                    119:     foreach $key (sort keys(%entries)) {
                    120:         # $key == HOGEHOGE
                    121:         @chars = split(//, $key);
                    122:         # $thisheadchar == $chars[0] == H
                    123:         #print "\$chars[0] is ", $chars[0], "\n";
                    124:         $thisheadchar = $chars[0];
                    125:         $thisheadchar =~ s/_/{\\_}/o || $thisheadchar =~ s/\^/{\\tt\\hat}/o ||
                    126:         $thisheadchar =~ s/>/{\\tt\\gtr}/o || $thisheadchar =~ s/</{\\tt\\less}/o ||
                    127:         $thisheadchar =~ s/"/{\\tt\\char '042}/o || $thisheadchar =~ s/\+/{\\tt\\char 43}/o ||
                    128:         $thisheadchar =~ s/=/{\\tt\\char 61}/o || $thisheadchar =~ s/@/{\\tt\\char '100}/o ||
                    129:         $thisheadchar =~ s/{/{\\tt\\char '173}/o || $thisheadchar =~ s/\|/{\\tt\\char '174}/o ||
                    130:         $thisheadchar =~ s/}/{\\tt\\char '175}/o || $thisheadchar =~ s/~/{\\tt\\char '176}/o ||
                    131:         $thisheadchar =~ s/\\/{\\tt\\indexbackslash }/o;
                    132:         #print "\$thisheadchar is ", $thisheadchar, "\n";
                    133:         #print "\$headchar is", $headchar, "\n";
                    134:         if ($thisheadchar ne $headchar){
                    135:             print OUT "\\initial {", $thisheadchar, "}", "\n";
                    136:             $headchar = $thisheadchar;
                    137:         }
                    138:         print OUT $entries{$key}, "\n";
                    139:       }
                    140: }
                    141: # end of jtexindex

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>