血統の森+はてな

旧はてなダイアリーの自動インポートによるアーカイブです。

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に投げた…