Article View: fj.editor.emacs
Article #409Re: a simple tategaki typesetter
From: Satoru Takabayashi
Date: Mon, 15 Mar 1999 00:00
Date: Mon, 15 Mar 1999 00:00
111 lines
6588 bytes
6588 bytes
hiroki-t@is.aist-nara.ac.jp wrote:
> $B!!(B $B!!$+(B $B%\(B $B$9(B $B$$(B $B4V(B $B5!(B $B2=(B $B;H(B $B2=(B $B$J(B $BMh(B $B!!(B $B!!$+(B $B$&(B $B:n(B $B$K(B $B!!(B $B!!Bg(B $B$3(B
> $B8f(B $B!!!)(B $B!C(B $B!,$^(B $B$N(B $B$r(B $B$9(B $B$&(B $B$K(B $B$$(B $B$J(B $B$3(B $B!!$C(B $B$J(B $B$C(B $B$O(B $BEv(B $B!!3X(B $B$s(B
> $B0U(B $B!!(B $B!!%I(B $B?M(B $B$9(B $B$3(B $B$H(B $B$k(B $B?M(B $B4X(B $B]f(B $B$$(B $B$l(B $B!!$?(B $B$b(B $B$F(B $B$J(B $BJ,(B $B!!$G(B $B$K(B
> $B8+(B $B!!(B $B!!$,(B $B4V(B $B!,$H(B $B$j(B $B$J(B $B$,(B $B$9(B $B$,(B $B$H(B $B$r(B $B!!$N(B $B$N(B $B$_(B $B$i(B $B!!(B $B!!$9(B $B$A(B
> $B8f(B $B!!(B $B!!$I(B $B9)(B $B%-(B $B$r(B $B$^(B $B$j(B $B?M(B $B$k(B $B$7(B $B??(B $B:n(B $B!!$G(B $B$G(B $B$^(B $B$J(B E$B!!(B $B!!(B $B!,$O(B
> $B46(B $B!!(B $B!!$&(B $B3X(B $B!C(B $B9M(B $B$/(B $B$7(B $B4V(B $B$3(B $B$F(B $B$K(B $B$j(B $B!!>/(B $B$9(B $B$7(B $B$=(B m$B!!(B $B!!(B $B!!(B $B!,(B
> $BA[(B $B!!(B $B!!$7(B $B$K(B $B%\(B $B$((B $B4D(B $B$F(B $B$G(B $B$H(B $B$-(B $BF|(B $B;O(B $B!!$J(B $B$,(B $B$?(B $B$&(B a$B!!(B $B!!(B $B!!6L(B
> $B$J(B $B!!(B $B!!$F(B $BB'(B $B!C(B $B$F(B $B6-(B $BM_(B $B$"(B $B$O(B $B$^(B $BK\(B $B$a(B $B!!$+(B $B!.(B $B!,$J(B c$B!!(B $B!!(B $B!!1[(B
> $B$I(B $B!!(B $B!!I8(B $B$C(B $B%I(B $B$$(B $B$,(B $B$7(B $B$k(B $BC1(B $B$7(B $B8l(B $B$F(B $B!!$i(B $B$A(B $B@d(B $B$N(B s$B!!(B $B!!(B $B!!!w(B
> $B!.(B $B!!(B $B!!=`(B $B$?(B $B$d(B $B$J(B $B;H(B $B$$(B $B$H(B $B$K(B $B$?(B $B=h(B $B$+(B $B!!$:(B $B$g(B $BBP(B $B$G(B $B!!(B $B!!(B $B!!F`(B
> $B$*(B $B!!(B $B!!$K(B $B!.%^(B $B$$(B $B$$(B $B$b(B $B$$(B $B5;(B $B!,M}(B $B$i(B $B!!6C(B $B$C(B $BC/(B $B!.$O(B $B!!(B $B!!NI(B
> $B5$(B $B!!(B $B!!$J(B $B$b(B $B%&(B $B$+(B $B$K(B $B$N(B $B$&(B $B=Q(B $B=D(B $B$r(B $B!.(B $B!!$$(B $B$H(B $B$+(B $BM7(B $B=D(B $B!!(B $B!!@h(B
> $B7Z(B $B!!(B $B!!$i(B $B$C(B $B%9(B $B$i(B $B$/(B $B$G(B $B$3(B $BE*(B $B=q(B $B$7(B $B$d(B $B!!$F(B $BC5(B $B$,(B $B$S(B $B=q(B $B!!(B $B!!C<(B
> $B$K(B $B!!(B $B!!$J(B $B$H(B $B$J(B $B$G(B $B$$(B $B$9(B $B$H(B $B$J(B $B$-(B $B$F(B $B$O(B $B!!$$(B $B$7(B $B4{(B $B$G(B $B$-(B $B!!(B $B!!2J(B
> $B$I(B $B!!(B $B!!$$(B $B;H(B $B$I(B $B$O(B $B$N(B $B!,$r(B $B$3(B $B$K(B $B$$(B $B$j(B $B!!$^(B $B$?(B $B$K(B $B$3(B $B$,(B $B!!(B $B!!3X(B
> $B$&(B $B!!(B $B!!$N(B $B$$(B $B$O(B $B$J(B $B$O(B $B8=(B $B9M(B $B$H(B $B8B(B $B$k(B $B=D(B $B!!$9(B $B8B(B $B:n(B $B$s(B $B=P(B $B!!(B $B!!5;(B
> $B$>(B $B!!(B $B!!$G(B $B0W(B $B$=(B $B$$(B $B!.:_(B $B$((B $B$G(B $B$i(B $B$H(B $B=q(B $B!!(B $B!,$j(B $B$C(B $B$J(B $BMh(B $B!!(B $B!!=Q(B
> $B!,(B $B!!(B $B!!$7(B $B$$(B $B$N(B $B$+(B $B;H(B $B$N(B $B$F(B $B$O(B $B$:(B $B$O(B $B$-(B $B!!(B $B!!$G(B $B$F(B $B$b(B $B$k(B $B!!(B $B!!Bg(B
> $B!!(B $B!!(B $B!!$g(B $B%-(B $BNc(B $B$H(B $B$&(B $B7W(B $B5,(B $B$J(B $B!.8@(B $B$,(B $B!!(B $B!!$O(B $B$$(B $B$N(B $B$h(B $B!!(B $B!!3X(B
> $B!!(B $B!!(B $B!!$&(B $B!C(B $B$G(B $B;W(B $B?M(B $B;;(B $B3J(B $B$/(B $BJ8(B $B$((B $B=P(B $B!!(B $B!!$J(B $B$=(B $B$r(B $B$&(B $B!!(B $B!!1!(B
tategaki.el $B$N%3%a%s%H$K$h$k$H(B
| * emacs-version $B$,(B 20.x $B0J>e$G$J$$$HF0$-$^$;$s!#(B
$B$H$N$3$H$G!"<j85$N4D6-$G$OF0$+$;$^$;$s!#$/$d$7$$$N$G(B perl $B$G(B
$B;w$?$h$&$J%U%#%k%?$r:n$C$F$_$^$7$?!#(B
% nkf -e foobar.txt | perl tategaki.pl
$B$N$h$&$K;H$$$^$9!#2K$J?M$O$I$&$>!#(B :)
# $B2#J}8~$K(B scroll $B$9$k=D=q$-(B less $B$,$"$k$HLLGr$$$+$b(B
-- Satoru Takabayashi
#! /usr/bin/perl -w
#
# usage: nkf -e foobar.txt | perl tategaki.pl
#
use strict;
my $KANJI = "[\xa1-\xfe][\xa1-\xfe]";
my $column = 20;
my $line = 20;
my %tateyoko = (
"$B!#(B" => "$B!,(B",
"$B!"(B" => "$B!.(B",
"$B!<(B" => "$B!C(B",
"$B!C(B" => "$B!=(B",
"$B"*(B" => "$B"-(B",
"$B"+(B" => "$B",(B",
"$B",(B" => "$B"*(B",
"$B"-(B" => "$B"+(B",
"$B!V(B" => "$B($(B",
"$B!W(B" => "$B(&(B",
"$B!c(B" => "$B"J(B",
"$B!d(B" => "$B"K(B",
": " => "$B!E(B",
"$B!'(B" => "$B!E(B",
"$B!E(B" => "$B!'(B"
);
main();
sub main () {
my $content = join '', <>;
$content =~ s/^[ \t]+//mg;
$content =~ s/($KANJI)\n($KANJI)/$1$2/go;
$content =~ s/\s/ /g;
my @matrix = ();
my $full = $column * $line - 1;
for (my $i = 0; $content =~ /($KANJI|([\x20-\x7e]))/go;) {
my $char = $1;
$char .= " " if defined $2;
$matrix[$i / $column][$i % $column] = $char;
if ($i == $full) {
print_tategaki(@matrix);
$i = 0;
@matrix = ();
} else {
$i++;
}
}
if (@matrix) {
print_tategaki(@matrix);
}
}
sub print_tategaki (@) {
my @matrix = @_;
for (my $x = 0; $x < $column; $x++) {
for (my $y = $line - 1; $y >= 0; $y--) {
if (defined $matrix[$y][$x]) {
my $char = $matrix[$y][$x];
$char = $tateyoko{$char} if defined $tateyoko{$char};
print $char, " ";
} else {
print " ";
}
}
print "\n";
}
print "\n";
}
Technical Details
Message-ID:
<7cie2i$jpd$1@vega2.aichi-u.ac.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<lzovhg3ewcq.fsf@kmserver.aist-nara.ac.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 10eba4,31ca5aaa33f2e671 X-Google-Attributes: gid10eba4,public X-Google-Thread: f9898,3ba4fd057be66f09,start X-Google-Attributes: gidf9898,public X-Google-Thread: 1107f7,31ca5aaa33f2e671 X-Google-Attributes: gid1107f7,public X-Google-Thread: ff358,31ca5aaa33f2e671 X-Google-Attributes: gidff358,public From: satoru@isoternet.org (Satoru Takabayashi) Subject: Re: a simple tategaki typesetter Date: 1999/03/15 Message-ID: <7cie2i$jpd$1@vega2.aichi-u.ac.jp> X-Deja-AN: 455137833 References: <lzovhg3ewcq.fsf@kmserver.aist-nara.ac.jp> Followup-To: fj.comp.lang.perl Organization: ISOTERNET ASSOCIATION JAPAN Newsgroups: fj.editor.emacs,fj.editor.mule,fj.editor.xemacs,fj.comp.lang.perl