TextFlowにテキストをインポート/変換する際に、要素を生成するRegExベースのパーサーを定義する方法はありますか?例えばFlex TLF - 正規表現マッチを使用してリンクを作成する機能はありますか?
:
- 私は、電子メールアドレスが一致するたびのLinkElementを作成したいです。私はスマイリー:)は、私の知っている
よろしく、
マーティ
TextFlowにテキストをインポート/変換する際に、要素を生成するRegExベースのパーサーを定義する方法はありますか?例えばFlex TLF - 正規表現マッチを使用してリンクを作成する機能はありますか?
:
よろしく、
マーティ
最も簡単な方法は、テキストを取るとする正規表現のシーケンスを使用することで一致した時はいつでもにInlineGraphicElementを作成したい
private function emailClickedHandler(event:FlowElementMouseEvent):void {
var emailAddress:String = LinkElement(event.flowElement).getFirstLeaf().text;
// do something with emailAddress
}
:
var emailRE:RegExp = /^[a-zA-Z0-9._%+-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
var smileyRE:RegExp = /:\)/g;
var sample:String = "Email [email protected] with smiley :) example.";
var result:String = '';
while (emailRE.test(sample)) {
result = sample.replace(emailRE, "<a href='event:emailClicked'><font color='0x0000DD'>$&</font></a>");
}
if (result.length > 0) {
sample = result;
}
var result2:String = '';
while (smileyRE.test(sample)) {
result2 = sample.replace(smileyRE, "<img src='smiley.png'/>");
}
if (result2.length > 0) {
sample = result2;
}
richEditableTextComponent.textFlow = TextConverter.importToFlow(sample, TextConverter.TEXT_FIELD_HTML_FORMAT);
richEditableTextComponent.textFlow.addEventListener("emailClicked", emailClickedHandler, false, 0, true);
次にクリックハンドラのようなものになるだろう、InlineGraphicElementなどがありますが、これはプログラマーにとっては面倒ですが、特にRichEditableTextを使用する必要があります。スマイリーが一致しているかどうかを確認するために、ユーザーがキーを入力してグラフィックを置き換えるためにSpanElementを解析する必要があります。ここではHTMLは役に立たないでしょう。なぜなら、あなたがTextFlowオブジェクト全体を再割り当てしたくないからです。 1つのSpanElementが一連のSpanElement - InlineGraphicElement - SpanElementに分割されるなど、更新する必要があるものだけを更新するのではなく、フロー全体を完全に再描画することになります。
希望すると便利です。
ジャスティン