チケットの文末改行をそのまま表示する

久しぶりに書き込んだ目的はTrac備忘録を残したかったため。
ちなみに俺はpythonのfor文の使い方を知ったのが三日前という初心者であり、以下の内容は全く保証できないためあしからず。


Tracは基本的にWiki文法を使うため、改行は明示的なタグ(BR)を入力しなければならない。
改行を二個いれることでも改行表示されるが、これはあくまでパラグラフ分けが目的であるため、空行が強制的に入力されてしまう。
個人で使用するにはそれ程問題にはならないものの、プロジェクトにおいて、それ程Wiki文法に慣れていない人もチケットを書かなければならない状況下では結構な障害となる。


どうにかならんもんかと調べていると、本家のプロジェクトに関連するチケットが存在していた。
(http://projects.edgewall.com/trac/ticket/1507)
このチケットは、タイトルに反して上記の内容と同等らしい。
上のチケットに書いてあるとおり、wiki_to_html関数の引数として、"escape_newlines=True"をセットすれば、入力した改行位置にBRタグがセットされる。
ただし、このチケットにある修正のみだと、コメント追加のプレビュー画面と、コメント表示でこの機能が有効にならないため、さらに二箇所追加する必要がある。

trac-0.9.5-ja-1/trac/ticket
web_ui.pyに以下のパッチを当てる。

--- web_ui.py	2006-06-20 14:52:15.663000000 +0000
+++ web_ui_new.py	2006-06-20 14:41:29.413000000 +0000
@@ -87,7 +87,7 @@
         ticket.values.setdefault('reporter', util.get_reporter_id(req))
 
         if ticket.values.has_key('description'):
-            description = wiki_to_html(ticket['description'], self.env, req, db)
+            description = wiki_to_html(ticket['description'], self.env, req, db, escape_newlines=True)
             req.hdf['newticket.description_preview'] = description
 
         req.hdf['title'] = 'チケット登録'
@@ -200,7 +200,7 @@
                     # Wiki format a preview of comment
                     req.hdf['ticket.comment_preview'] = wiki_to_html(comment,
                                                                      self.env,
-                                                                     req, db)
+                                                                     req, db, escape_newlines=True)
         else:
             req.hdf['ticket.reassign_owner'] = req.authname
             # Store a timestamp in order to detect "mid air collisions"
@@ -379,7 +379,7 @@
         req.hdf['ticket.reporter_id'] = reporter_id
         req.hdf['title'] = '#%d (%s)' % (ticket.id, ticket['summary'])
         req.hdf['ticket.description.formatted'] = wiki_to_html(ticket['description'],
-                                                               self.env, req, db)
+                                                               self.env, req, db, escape_newlines=True)
 
         req.hdf['ticket.opened'] = util.format_datetime(ticket.time_created)
         req.hdf['ticket.opened_delta'] = util.pretty_timedelta(ticket.time_created)
@@ -401,7 +401,7 @@
                 curr_date = date
                 curr_author = author
             if field == 'comment':
-                changes[-1]['comment'] = wiki_to_html(new, self.env, req, db)
+                changes[-1]['comment'] = wiki_to_html(new, self.env, req, db, escape_newlines=True)
             elif field == 'description':
                 changes[-1]['fields'][field] = ''
             else:

これで、チケットに入力したとおり改行が挿入される。

ちなみに、この機能をチェックボックスでON/OFFできるようにしてほしいというチケットが本家で作られている。
(http://projects.edgewall.com/trac/ticket/2914)
しかし、3ヶ月たってもコメントすらついていない所をみると、改行がらみの機能は英語圏ではそれ程切実ではないのかも。
というわけで、英語に達者な方はコメントを書くなりプラグイン作るなりしてあげて下さい。<他力本願