前两天,有位大佬问我这个富文本它支不支持嵌套。 本来就想过开发嵌套功能和解析嵌套功能的富文本,既然这样,索性就干吧。 经过我这两天的奋斗,总算是把这解析和嵌套功能给搞出来了,并且兼容到了之前的富文本之上。 顺便调试了一番,调试过程当然很不顺利,练手作品哪有尽善尽美的,调试过程也顺手修复了很多bug吧! 总结一下,问题出的最多的地方就在解析和容错。 现在这个功能插件虽然好用不少,可依旧还是有很多的bug,有时间或者有哪位热心的朋友一起改吧!
先说一下我解析这块的思路吧!
解析代码的文件组织结构:
// 经过分析,发现能够嵌套的类型就只有label和URL类型
// 先检查txt的开始类型是否是url 或者是 label类型
// 如果是就这一部分的数据压进栈里,并且剪切出剩下部分的数据,并且解析剩下数据
// 如果发现不是嵌套类型,就查看栈里面的嵌套类型,并且把嵌套类型的属性复制到这个元素上面。
// 关键的迭代代码部分 在 DisintegrateUrlAndLabel 里
// Class RichString
public void Disintegrate(string txt)
{
txt = txt.TrimStart(' ').TrimEnd(' ');
if (string.IsNullOrEmpty(txt)) return;
// 截取自己的那一串字符串
// 如果是基础类型,就压栈处理,在尾部需要出栈操作
m_string_type = RichStringTools.CheckType(txt);
m_text = RichStringTools.SpliteRichStringByType(m_string_type, txt);
var temp_txt = txt;
var new_txt = RichStringTools.RemoveRichStringByType(m_string_type, txt, m_text);
if (m_string_type == RichStringType.Lab || m_string_type == RichStringType.Url) DisintegrateUrlAndLabel(temp_txt, new_txt);
else DisntegarateOtherSign(new_txt);
}
// Class RichString