OmegaTでHTMLを扱う際に悩まされる数々のバグ
十分再現条件を追試してないんでアレですが、OmegaTにHTMLを食わせるたびに頭を抱えているのでメモ。
少しバグ再現条件のチェックがぬるかったので、もう少しクリアにしてみたり。
1. script
要素の直後にstyle
開始タグを記述すると、そのstyle
要素が丸ごと無視される。
たとえば、
... <head><meta charset="utf-8" /><script>{}</script><style> body {...} </style></head> ...
という元HTMLファイルの場合、targetディレクトリに生成されるHTMLファイルにおいて、style
要素はすべてなかったものとして扱われます(要素が丸ごとスキップされる)。
これを回避するには、sourceディレクトリに置くHTMLファイルを
... <head><meta charset="utf-8" /><script>{}</script> <style> body {...} </style></head> ...
というように行の前に別のタグが存在しないようにしなければならない、と。
2.style
要素の直後にbody
開始タグを記述すると、そのbody
要素が丸ごと無視される。
1.の類似パターンでhead
終了タグを省略すると、body
要素もこの法則が当てはまるらしく、
<html><meta charset="utf-8" /><title>test</title><style type="text/css"> body {line-height:1.4;} </style><body><p>hello!
と書こうものなら、問答無用でbody
要素をすべてスキップしてくれます♪orz
3. 要素内にコメントが出現すると、そこで文の終端と認識される。
<p>私は<b>犬<!-- まあ本当は猫だけどね --></b>が大好きです。その理由は、<a href="http://example.com">なんたら</a>にあるように…</p>
とかいう文があるとすると、OmegaT上での翻訳作業時に、
私は<b0>犬</b0>が大好きです。その理由は、<a1>なんたら</a1>にあるように…
とはならず、
私は<b0>犬
でぶった切られる。これを回避するには、sourceディレクトリに置くHTMLファイルでコメントを適宜作業しなければならないという…
4. object
要素を認識しない
SVGをこういう風に埋め込むとすると、
<p><object data="images/content.svg" height="288" width="1000"><img alt="" height="288" src="content.png" width="512"></object></p>
昔ここで書いたけど、ファイルフィルタの関係で、OmegaT上に出現しない(のでURLを書き換えられない)。これをどうにかするには自力でOmegaTのファイルフィルタソースを小細工した上で(修正とも言う)自力でコンパイルすればいいのだけど、そんなことやる労力があったら元ファイルを直接書き換え…(以下省略)。
5. ファイルフィルタで特定の属性-値を翻訳しないよう設定した場合、テーブルで終了タグを省略するとそれ以降のテーブルが壊れる
たとえば(X)HTMLフィルター設定でclass="impl"
を翻訳しないように設定した場合、テーブル要素で、
<table><tbody> <tr> <td>aaaa</td> <td>bbbb</td> </tr> <tr class="impl"> <td>cccc</td> <td>dddd</td> </tr> </tbody></table>
これを
<table><tbody> <tr> <td>aaaa <td>bbbb <tr class="impl"> <td>cccc <td>dddd </tbody></table>
みたいに終了タグを省略すると、cccc以降をOmegaT上で認識しない(なお、後者は妥当なHTML素片)。
ちなみにこれらのバグは、HTML5翻訳時にぶち当たっていて、中の人が泣いているらしい。(LatestなOmegaT 3.0.4 Update02@Win32で再現するはず)
ただまあいつの間にか<meta chraset>
のエンコーディングを読みにいかなかった問題とかいつのまにか修正されてたし、そのうちバグ修正来る(略)。
仕方ないのでバグレポをhttp://sourceforge.net/p/omegat/bugs/?source=navbarに投げた…