0

我正在为 DocBook 5 XML 制作一个捆绑包,其中经常包含以下内容:

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

我希望部分的标题出现在窗口底部的功能弹出窗口中。我使用以下捆绑项目部分工作。

语言语法:

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

具有范围选择器的设置/首选项项目meta.tag.xml.docbook5.title

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

这样做的最终效果是文档中的所有标题元素都匹配并出现在函数弹出窗口中,不包括<title></title>基于symbolTransformation.

我会对这么多功能感到满意,因为其他有趣的东西(如数字)往往有正式的标题,但有一个问题。

标签的内容title不会根据text.xml语言语法的其余部分进行解析和识别。上述语言语法中被注释掉的patterns部分并没有解决这个问题的预期效果——它把所有东西都放在了meta.tag.xml.docbook5.title范围内。

有没有办法在这里得到我想要的?也就是说,元素的内容title,可选地仅用于section标题,在函数弹出窗口中并被解析器识别为正常的 XML 内容。

4

1 回答 1

1

在 TextMate 语法中,如果您想“在匹配中匹配”,则需要使用开始/结束类型规则而不是匹配类型规则。(您实际上也可以使用匹配,但是您需要使用当前未记录的行为,仅适用于 TextMate 2)

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

这具有允许<title>...</title>跨越多行的额外好处。

于 2012-12-14T08:46:18.287 回答