是否可以使用正則表達式來定義Scintilla中的語法高亮?如果是這樣,怎麼做?Scintilla.NET基於正則表達式的語法highlighing
我必須處理一個自定義的語言,無法在關鍵字和分隔符的簡單的術語來描述。這種語言中特定結構的含義僅取決於它們相對於關鍵字的位置。我有這種格式的基於正則表達式的解析器,我需要的是將正則表達式定義的規則應用爲文本樣式。
我的意思是,如果匹配的東西regex1的,它應該有STYLE1。可能嗎?怎麼樣?
如果沒有 - 我可以設置手動選擇範圍樣式?我的意思是在編輯器中將樣式編號分配給指定的字符範圍。怎麼做?
是否有可能定義Scintilla的樣式代碼,而不是在xml文件?
編輯: OK,我已經找到一種方法。
foreach (Match m in Patterns.Keyword0.Matches(Encoding.ASCII.GetString(e.RawText)))
e.GetRange(m.Index, m.Index + m.Length).SetStyle(1);
問題是RawText屬性。它是UTF-8編碼文本的字節緩衝區。 text屬性包含漂亮的UTF-16文本,但GetRage方法接受字節偏移量而不是字符偏移量。如果我在每個TextChanged事件上使用轉換,我會放棄使用Scintilla的幾乎所有速度優勢。
當然,最簡單的方法是將內部編碼更改爲UTF-16,但是當我這樣做時,我收到異常說這種編碼不受支持。唯一支持的一個似乎是UTF-8,這是難以處理的(很慢)。
我在這裏打牆。
看起來我不得不再次嘗試Scintilla。在我的第一次嘗試中,我在編輯突出顯示的文本時遇到了難以接受的滯後。目前我與FTCB保持聯繫,當解析器被編譯到外部DLL時,事實證明它非常快。他們兩人的工作非常相似。幾乎相同的功能。 – Harry 2014-11-26 11:06:09