我正在尝试在 TLF 中插入一个链接。通常你只需简单地使用
var linkElement:LinkElement = textArea.textFlow.interactionManager.applyLink( ... );
问题是,如果我创建一个跨越不同格式文本(粗体、斜体等)的链接,或者天堂禁止跨段落和列出项目,它会完全崩溃和烧毁。链接格式完全丢失,列表结构崩溃。
如果我们要保留所选文本中的格式和结构,那么简单地通过 addChild() 添加 LinkElement 也不起作用。
使用interactionManager.cutTextScrap(...) 为选择撕掉textFlow,使用interactionManager.applyLink(...) 将其包装在LinkElement 中,然后“粘贴”回... 也会造成混乱。
所以我必须创建自己的链接插入例程。
我决定做的是:
1)将文本流标签转换为字符串
2)在文本流字符串中找到选择的开始和结束索引
3) 在起始索引处插入以下字符串:
</span><a href="[hrefVar]" target="[targetVar]"><span>
4) 在结束索引处插入以下字符串:
</span></a><span>
5) 将文本流字符串重新转换为 TextArea 的文本流对象
瞧!即时 RTF 链接!
唯一的问题是......我不知道如何编写一个正则表达式解析方程,它可以在 XML 标记中找到字符串匹配的开始和结束索引,结果可能分布在多个标签中。
例如,如果 TextFlow 是(缩写):
<TextFlow><p><span>Lorem Ip</span><span fontWeight="bold">sum do</span><span>
lor sit am</span><span fontStyle="italic">et, consectetur adipiscing elit.
</span></p></TextFlow>
例如,假设用户选择了“Ipsum dolor sit amet”以转换为链接。我需要在该 RTF 标记中找到“Ipsum dolor sit amet”的第一个和最后一个索引,然后插入上面 3) 和 4) 中指示的字符串,以便最终结果如下所示:
<TextFlow><p><span>Lorem </span><a href="http://www.google.ca" target="_blank">
<span>Ip</span><span fontWeight="bold">sum do</span><span>lor sit am</span>
<span fontStyle="italic">et</span></a><span>, consectetur adipiscing elit.
</span></p></TextFlow>
您可能会丢失一些样式格式,但我可以稍后通过文本流格式进行解析来修复它。
我需要的是执行第 2 步的正则表达式)。
我知道正则表达式忽略标签并去除标签之间的文本,以及如何在剥离的文本流文本中找到所选文本的字符串匹配...但不知道如何在原始(未剥离的)文本流字符串中找到匹配索引.
任何人?