2012-07-09 87 views
2

我正在爲改進emacs主模式UnrealScript而努力。一項所述的(多)怪異的是,它允許語法像這樣在虛幻編輯指定工具提示:是否可以根據上下文更改emacs語法表?

var() int MyEditorVar <Foo=Bar|Tooltip=My tooltip text isn't quoted>; 

變量聲明後的尖括號表示鍵=值的元數據對一個管分隔的列表,並元數據未被引用,但可以包含引號 - 管道(|)或右尖括號(>)表示結束。

有沒有一種方法可以讓emacs語法表以一種有用的方式識別這種依賴於上下文的語法?我希望除了管道和右尖括號之外的所有內容都以某種方式在這些可變元數據聲明中突出顯示,但保留其正常高亮顯示。

現在,單引號字符被設置爲引號分隔符(語法標識符"),所以font-lock-mode將這樣的引用解釋爲引用一個帶引號的字符串,它不在這個特定的實例中,所以它一切都很好,直到找到另一個可能匹配的單引號。

+0

你使用什麼主要模式? – Thomas 2012-07-11 05:46:43

+0

@Thomas:[This major mode](http://badbyteblues.blogspot.com/2010/12/unrealscript-mode-for-emacs-reloaded.html),以及一些修改(額外的關鍵字等)。 – 2012-07-17 13:32:58

回答

2

您需要設置一個syntax-propertize-function,它允許您將不同的語法指示符應用於緩衝區中的不同字符,具體取決於其上下文。

Grep for syntax-propertize-function在Emacs的lisp目錄中看到各種示例(從簡單到非常複雜的示例)。

您可能希望在您的「Foo」之後和「Tooltip」之後將「=」字符標記爲「通用字符串分隔符」,然後執行相應的終止「|」和「>」。另一種方法是將「>」之前的字符標記爲(關閉)通用字符串分隔符,以便您可以將「<」和「>」標記爲開放的&關閉元素。

相關問題