#! /usr/local/bin/perl ## ------------------------------------------------------------ ## 「駅から」などのデータのコピペを、うまいこと LaTeX の tabular ## 形式に変換してくれる ad hok なスクリプト。 ## ------------------------------------------------------------ ## 駅名一覧、各電車のデータが1レコードで区切りは「空行」、 ## 各フィールドの区切りは「改行」です。 ## フィールドの足りないデータは、末尾に合わせます。 ## (意味わかるかな?) ## 入力の文字コードは euc-jp であることが何気に想定されてます ## ------------------------------------------------------------ ## v07.06.14 aiba ## ------------------------------------------------------------ while(<>) { s/[ \t\r\n]*$//; if(/^$/) { &my_proc; } else { push(@stack, $_); } } &my_proc; &my_write; exit; sub my_write { local($ob); $ob = join("\n", ('\documentclass{jarticle}', '\begin{document}', '{\footnotesize', '\begin{tabular}{*COLUMNS*}', '\hline')) . "\n"; foreach $i ( 0 .. $#Xbuf ) { local($zz) = substr($Xbuf[$i],1); $zz =~ s/\t/ \& /g; if($zz =~ /^〃/) { $ob .= '\hline' . "\n"; } $ob .= "$zz \\\\\n"; } $ob .= join("\n", (('\hline', '\end{tabular}', '}', '\end{document}',,))) . "\n"; local($cbar) = '|' . 'l|' x $maxxx; $ob =~ s/\*COLUMNS\*/$cbar/; print $ob; } sub my_proc { if($#stack < 0) { return; } local($start) = 0; if($#stack <= $#Xbuf) { $start = $#Xbuf - $#stack; } local($i,$j); $j = 0; local($maxi) = $#Xbuf; if($#Xbuf < 1) { $maxi = $#stack; } foreach $i ( 0 .. $maxi ) { if($i == 0) { $maxxx++; } if($i < $start) { $Xbuf[$i] .= "\t"; } else { $Xbuf[$i] .= "\t$stack[$j]"; $j++; } } undef @stack; }