当从Delphi 2006转换到Delphi XE2时,我们学到的一件事是RichEdit 2.0用CRLF单个CR字符替换内部对.这会导致基于VCL端的实际文本字符串丢弃所有字符索引计算的不幸影响.
通过跟踪VCL代码我可以看到的行为如下:
WM_GETTEXT消息(完成TControl.GetTextBuf)将返回包含CRLF对的文本缓冲区.WM_GETTEXTLENGTH消息(完成TControl.GetTextLen)将返回一个值,就像文本仍包含CRLF字符一样.EM_SETSELEX消息(即设置SelStart)会将输入值视为文本仅 包含CR字符.这会导致我们的应用程序中的各种事情失败(例如语法突出显示).正如你所知道的那样,到目前为止,每一条新线都只有一个字符.
显然,由于这是不一致的行为,我们必须遗漏某些东西或做一些非常错误的事情.
有没有其他人有从RichEdit 1.0到RichEdit 2.0控件的过渡经验,你是如何解决这个问题的?最后,有没有办法强制RichEdit 2.0 CRLF像RichEdit 1.0一样使用对?
我一直在使用DOMParser对象将文本字符串解析为XML树.但是,它在Web Worker的上下文中不可用(当然,也不是document.ELEMENT_NODE或者需要的各种其他常量).还有其他办法吗?
请注意,我不想操纵当前页面的DOM.XML文件不包含HTML元素或任何类型的元素.实际上,我根本不想触摸文档对象.我只想提供如下文本字符串:
<car color="blue"><driver/></car>
Run Code Online (Sandbox Code Playgroud)
...并找回合适的树形结构和遍历它的方法.我也不关心模式验证或任何花哨的东西.我知道<SCRIPT>的XML,许多人可能觉得它很有用(因此我在这里链接到它),但是它的许可并不适合我.我不确定jQuery是否包含XML解析器(我对这个东西很新),但即使它确实(并且它可以在Worker中使用),我也不会包含额外的~50K代码行这个功能.
我想我可以在JavaScript中编写一个简单的XML解析器,我只是想知道我是否错过了更快的选项.
delphi ×1
delphi-xe2 ×1
domparser ×1
javascript ×1
newline ×1
richedit ×1
web-worker ×1
xml ×1