reStructuredTextで、テーブルを記述する方法に、SimpleTableとかGridTableがある。SimpleTableならこんな感じ。
==== ==== ほげ ほげ ==== ==== がお がお ---- ---- ふー ふー ==== ====
で、reStructuredTextの標準処理系であるdocutilsのparserは、east_asian_widthを利用することで、「ほ」が全角文字だと判断している。
だが、このeast_asian_widthは、全角記号に対しては'W'(幅広文字)でも'F'(全角文字)でもなく、'A'(あいまい)を返し、docutils 0.4 では半角文字と同じ幅として処理されてしまっている。
これは設計者の意図通りの動作*1なのだが、日本では使いにくい。
で、'A'も全角文字にするには、docutils/statemachine.pyの StringList::pad_double_width() で、
- if east_asian_width(char) in 'WF': # 'W'ide & 'F'ull-width + if east_asian_width(char) in 'WFA': # 'W'ide & 'F'ull-width
utils.pyで、
east_asian_widths = {'W': 2, # Wide 'F': 2, # Full-width (wide) 'Na': 1, # Narrow 'H': 1, # Half-width (narrow) 'N': 1, # Neutral (not East Asian, treated as narrow) - 'A': 1} # Ambiguous (s/b wide in East Asian context, + 'A': 2} # Ambiguous (s/b wide in East Asian context, # narrow otherwise, but that doesn't work)
とすれば良い。
TODO: 全角文字判定をstatemachine.pyからlanguageに移動し、jaでは east_asian_width(char) in 'WFA' とするパッチを作って送る。
*1:探してみたら、このパッチを実装された方のBlogが見つかった。 http://city.plala.jp/blog/Python