2012-12-13 54 views
0

我正在捆綁一些DocBook 5 XML,這經常包括內容,如:顯示Docbook的章節標題

<section> 
    <title>This is my awesome Java Class called <classname>FunBunny</classname></title> 
    <para>FunBunny is your friend.</para> 
</section> 

我想的標題爲部分出現在該函數彈出窗戶底部。我有這部分工作使用下面的捆綁項目。

語言語法:

{ showInSymbolList = 1; 
symbolTransformation = 's/^\s*<title\s?.*?>\s*(.*)\s*<\/title>/$1/'; 
} 

這樣做的淨效果是文檔中的所有 title元素相匹配,並出現在:與範圍選擇meta.tag.xml.docbook5.title

{ patterns = (
    { name = 'meta.tag.xml.docbook5.title'; 
     match = '<title>(.*?)</title>'; 
     /* patterns = ({ include = 'text.xml'; }); */ 
    }, 
    { include = 'text.xml'; }, 
); 
} 

設置/首項該功能彈出,不包括基於symbolTransformation<title></title>標籤內容。

我會很滿意這個功能,因爲其他有趣的東西(如數字)往往有正式的標題,但有一個問題。

根據text.xml語言語法的其餘部分,title標記的內容未被分析和識別。上述語言語法中註釋掉的patterns部分沒有解決此問題的預期效果 - 它將所有內容放入meta.tag.xml.docbook5.title範圍內。

有沒有辦法讓我想要的東西在這裏?也就是說,功能彈出框中的title元素的內容(可選地僅用於section標題)由解析器識別爲正常的XML內容。

回答

1

在TextMate語法中,如果您想'在匹配內匹配',您需要使用開始/結束類型規則而不是匹配類型規則。 (實際上,你可以用一根火柴爲好,但你需要使用目前無證行爲,僅適用於TextMate中2)

{ patterns = (
    { name = 'meta.tag.xml.docbook5.title'; 
     begin = '<title>'; 
     end = '</title>'; 
     patterns = ({ include = 'text.xml'; }); 
    }, 
    { include = 'text.xml'; }, 
); 
} 

這樣具有允許<title>...</title>跨越多行的好處。

+0

謝謝,這很有幫助。它仍然有一個副作用,即對標題標籤的內容進行不同的處理,以使文本以不同的顏色顯示。 (在我的主題中,它是白色的,現在是藍色的)。圍繞這個問題的任何方法? – lyricsboy