HatenaNotationConverter(勝手に命名)
JAVAで正規表現を使う方法はjava.util.regexをimportするか
org.apache.oro.text.perlをimportする2種類あるらしー。
今回はperlの正規表現にも慣れておこうと後者で実装。
入力してある文章を表示させるときに噛ませたいだけなので
getAsObject()は放置(こっちは入力時のConverter)して
getAsString()のみいぢくることに。
まずはスーパープレ記法にちゃれんじ。
一番悩んだのが正規表現でmatchした文字列の中のさらに特定の字を指定すること。
とりあえずはこんな風にしてみた。
public String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException { String entryBody = (String) value; Perl5Util reg = new Perl5Util(); while (reg.match("/>\\|\\|([^\\|]*)\\|\\|</s", entryBody)) { MatchResult mr = reg.getMatch(); String pre = reg.preMatch(); String post = reg.postMatch(); String superPre = mr.group(0); superPre = reg.substitute("s/</</g", superPre); superPre = reg.substitute("s/\"/"/g", superPre); superPre = reg.substitute("s/>/>/g", superPre); superPre = reg.substitute("s/>\\|\\|/<pre class='superPre'>/g", superPre); superPre = reg.substitute("s/\\|\\|</<\\/pre>/g", superPre); entryBody = pre + superPre + post; } }
>||〜||<の中の「<」と「>」を指定したかったわけですが、コレ一文づつじゃ無理なのかなあ。
次の課題はリスト記法だ…。