2010年08月08日

日本語でSphinxを使う時のストレスを減らす拡張機能

Umeboshi
Taken by mismisimos under CC BY-NC-SA

Sphinxで日本語を書くときに、日本語の途中で改行を入れると、そこに空欄の文字が入ってしまい、ブラウザで見るときにちょっと見た目が悪くなったりします。まぁ、これはSphinxのせいというよりも、ブラウザのせいですが。

あと、Sphinxというか、docutilsは欧米の言語を対象としている仕様のため、太字にしたり、インラインマークアップを使うときには前後にスペースが必要となります。レンダリング後もこのスペースが残ってしまうため、ブラウザで見るとやはり改行と同じ悪さをします。バックスラッシュというか円記号でエスケープしたスペースを挟めばなんとかなりますが、面倒ですよね?

ということで、軽く作ってみたSphinx拡張。テキストノード中の改行やら、テキストノード前後のスペースを削除します。ぱっと見はうまくいっているけど、どこかに悪影響がないかはよく分かってないけど。これをjapanesesupport.pyとか適当な名前で保存して、Sphinxのconf.pyのextensionsに"japanesesupport"を足してください。デフォルトでTrueだけど、この機能をon/offするオプションもあります。

extensions = ['sphinx.ext.todo', 'translation', 'japanesesupport']

japanesesupport_trunc_whitespace = True

翻訳の訳語置き換えとか、これとか、色々作って組み合わせて日本語サポートパッケージとしてまとめたいところ。

def trunc_whitespace(app, doctree, docname):
    from docutils.nodes import Text
    if not app.config.japanesesupport_trunc_whitespace:
        return
    for node in doctree.traverse(Text):
        newtext = node.astext()
        for c in "\n\r\t":
            newtext = newtext.replace(c, "")
        newtext = newtext.strip()
        node.parent.replace(node, Text(newtext))


def setup(app):
    app.add_config_value('japanesesupport_trunc_whitespace', True, True)
    app.connect("doctree-resolved", trunc_whitespace)
posted by @shibukawa at 14:20 | Comment(295) | TrackBack(0) | Python はてなブックマーク - 日本語でSphinxを使う時のストレスを減らす拡張機能
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/40049067
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
検索ボックス

Twitter

Counter

Profile by iddy

www.flickr.com
This is a Flickr badge showing public photos and videos from shibukawa.yoshiki. Make your own badge here.
<< 2016年03月 >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
最近の記事
カテゴリ
過去ログ
Powered by さくらのブログ