XML::XSLT による xsl ファイルを使用した XML のコンバートをやってみて感
じたことです。
<table>
<tr>
<td rowspan='2'> 1x2 </td><td> 1 </td>
<td rowspan='2' colspan='2' width='5cm'> 2x2。
このように複数行にまたがるセルは width 属性が必要。</td>
</tr>
<tr>
<td rowspan='2' align='center'> 1x2 </td>
</tr>
<tr>
<td> 1 </td>
<td align='center'> center </td>
<td align='right'> right </td>
</tr>
</table>
上のような HTML ソースがあったとして、これを XSL を使って下のような
LaTeX ソースに変換できるでしょうか? はなはだ疑問と言わざるを得ません。
あるいはとても面倒である、ということです。
\begin{tabular}{|l|l|l|l|}\hline
\multicolumn{1}{|l|}{\multirow{2}{*}{ 1x2 }}&
1 & \multicolumn{2}{|l|}{\multirow{2}{*}{\parbox{5cm}{\vspace{4pt} 2x2。このように複数行にまたがるセルは width 属性が必要。\vspace{4pt}}}}
\\\cline{2-2}
&\multicolumn{1}{|c|}{\multirow{2}{*}{ 1x2 }}&\multicolumn{2}{|l|}{}
\\\cline{1-1}\cline{3-3}\cline{4-4}
1 & &\multicolumn{1}{|c|}{ center }& \multicolumn{1}{|r|}{ right }
\\\cline{1-1}\cline{2-2}\cline{3-3}\cline{4-4}
\end{tabular}
これは私が昔 James Clark 氏(現在フリーの XML パーサ作成の中心)の
SGML パーサを使っていたころ、その中間コードを Perl でかなり加工した上で
再びパーサに戻さないといけなかったのと同じ問題を含んでいます。XSL はかな
り賢くはなったけれど、やはり万能ではないと感じます。とすると、ある程度自
分が書き代えるという前提はあるものの、Perl に全てやらせた方が簡単。日本
語化なども考えなくていいし。
私の考えでは、news2html.rep のような置換規則を書いたファイルを用意し、
標準関数で置換した上で、単純な置換で済まない部分(目次とか索引みたいな部
分)を Perl が直接処理する、そういう仕掛けが必要です。
<ts_news> <html>\n
</ts_news> </html>\n
<title> <head><title>\n
</title> </head><body>\n
...
あまり余計なことを考えなければ、XML のパーシングは簡単なので、ちょっと
書いてみようかな;-)。
--
本田博通(閑舎)
Hiromichi Honda <raku@...>