我有一個自定義文件格式的圖形,看起來像這樣:自定義語法VIM高亮鏈接
node1.link1 : node2
node1.attribute1 : an_attribute_for_node1
node2.my_attribute1 : an_attribute_for_node2
(沒有什麼特別的屬性名稱,屬性是當且僅當一個可以找到它的一個鏈接因此node2
是一個鏈接,因爲文件中有一行以node2.<something>
開頭)。
我想,如果他們的聯繫,突出的屬性值(所以我想強調節點2,但不attribute_for_node1
)。
顯然,這種語法高亮的不能僅基於線寬的正則表達式,因爲需要讀取整個文件做正確的高亮顯示。
我已經有這種類型的文件(可提供字典string -> (string -> string)
的字典)一個python解析器,但我不知道是否Python可以用語法高亮VIM 7
編輯 互動作爲澄清,對於這個實施例製造的詞典是:
d = { 'node1': {'link1' : 'node2', 'attribute1' : 'an_attribute_for_node1'}, 'node2': {'attribute2': 'an_attribute_for_node2'} }
根據定義,l
爲節點n
鏈路當且僅當:
d[n][l] in d
名稱是沒有意義的,該格式僅依賴於結構,並沒有語言的關鍵字。 我想在第一行中突出顯示node2
,因爲它是節點的名稱。
我希望這是更清晰了。
有人有想法嗎?
我很抱歉沒有清楚。 僞(-pseudo)BNF格式的語法是 line:= node'。'屬性':'link |屬性 節點:= [AZ] + 鏈路:=節點 屬性:= [AZ] + 屬性:= [AZ] + ,其從屬性判別的節點的唯一的是,它可以是名稱一個節點 像這樣的我的python字典是{'node1':{'link1':'node1','attribute1':'an_attribute_for_node_1'},'node2':{'my_attribute1':'an_attribute_for_node2'}} l是鏈接節點n iff d [n] [l] in d 因此,node1根本沒有意義。實際上,該語法不是基於關鍵字的。希望這更清楚。 – LeMiz 2009-08-26 12:20:20
我並不是建議您使用基於語言文件的關鍵字,而是基於對當前文件的解析。例如,在我的C代碼中,如果我有一個名爲GetCurrentValue()的函數,我希望GetCurrentValue可以在整個代碼中高亮顯示,儘管它不是C關鍵字。如果我打開一個不同的項目,我不希望GetCurrentValue被突出顯示。我想我要問的是:「在這個文件中,具體來說,'node2'應該在第1行的末尾和第3行的開始,還是第一行中突出顯示?」。 – DrAl 2009-08-26 13:11:46
我已經添加了一個更明確的例子,但是如果我仍然錯了,也許你可以給一個更詳細的例子,用一個示例文件以及爲該文件突出顯示的特定部分和位置? – DrAl 2009-08-26 13:25:12