Redmineのテキストの自動リンク(チケット番号など)で、日本語が前後に入ってもリンクになるようにする

Redmineのチケットの説明や注記に入れたテキストで、チケット番号やリビジョン番号は、自動的にリンクが設定されます。

ただし、下記のようにチケット番号の前後に空白やデリミタ(カンマ等)が無いと、識別してくれません。そのため、適宜スペースをいれるなどしてリンクとなるように調整してあげる必要が出てくる場合があります。

f:id:onozaty:20151029004801p:plain

どうやら区切りの判断が、英語圏を基準に考えられており、スペースやカンマ、ピリオドなどといったASCIIの範囲の文字で判断しているようです。

結構忘れがちなので、ちょっとどうにかならないかなぁとRedmineのソースを眺めました。 該当の処理は、app/helpers/application_helper.rbparse_redmine_linksでやっており、正規表現にて区切りを判断していました。

思い切って区切りの条件をASCII以外といった判定にすることよにり、日本語から英語に切り替わっているところも区切りとして判断されると思うので、そのように変えてみました。

これで日本語の文中にリンクにしたいものが出てきても適宜ハンドリングされるようになったようです。

f:id:onozaty:20151029005802p:plain

ただこの方法だと、区切りとして判断される文字が多くなり、パフォーマンスに多少影響がでるかもしれません。また、デグレがちょっと怖いです(ぱっと問題となるパターンは思いついていませんので、大丈夫だとは思っていますが、、)。

助詞と句読点だけ追加すれば、対象の文字の範囲を狭めて、それなりにカバーできそうなきもしています。