[Python]Sphinxと改行
最近Sphinxでドキュメントを書いてみている。 でも、emacsで72文字で改行をしていると、そこで空白が入ってしまう。 これはよろしくない。
一応、(0x5c)を改行の前、つまり行末に入れれば空白はなくなるのだけれども、いちいち書いていくのはめんどくさい。TeXみたいにしてくれないだろうか。
ぐぐると、 <a href=”http://ggutter.blogspot.com/2009/12/sphinx-doctree.html“>sphinx doc tree</a> という記事が出てきた。docutils/parsers/rst/states.py のRSTState class のparagraph って method でこの辺りの処理をしているとか。
sphinxじゃなくて、docutilsの問題なのかー。同記事には、ptexでは、「日本語で終わって日本語が始まったら改行無視でその他の場合は空白を入れるっぽい」と書かれている。
というわけで、ASCIIではない == 日本語であるという強引な前提の元、patchを書いてみた。空白を入れる必要はないかなぁと思ったのと、元のコードを尊重して、ASCIIの場合は”n”を入れるようにしてみた。
--- states.py.orig 2010-04-12 22:13:42.000000000 +0900
+++ states.py 2010-04-13 00:03:15.000000000 +0900
@@ -395,11 +395,28 @@
# reset section_level; next pass will detect it properly
memo.section_level = mylevel
+ def is_nonascii(self, char):
+ """return true if non ascii character
+ """
+ if char:
+ return max([ord(char)]) > 128
+ return True
+
def paragraph(self, lines, lineno):
"""
Return a list (paragraph & messages) & a boolean: literal_block next?
"""
- data = '\n'.join(lines).rstrip()
+ data = ""
+ for i in range(0,len(lines)):
+ data += lines[i]
+ if i == len(lines) -1:
+ break
+ if (self.is_nonascii(lines[i][-1])) and (self.is_nonascii(lines[i+1][0])):
+ continue
+ else:
+ data += '\n'
+ data = data.rstrip()
+
こんな感じでいいのかなぁ。もっとうまい書き方はありそうだけど。ていうか、レイアウトが崩れてるなぁ。
追記
日本語でSphinxを使う時のストレスを減らす拡張機能 および japanesesupport.pyの改造 を使うことで、問題は解決しました。ありがたや。