【问题标题】:Displaying Docbook section titles in TextMate's function popup在 TextMate 的函数弹出窗口中显示 Docbook 章节标题
【发布时间】:2012-12-13 16:58:11
【问题描述】:

我正在为 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/';
}

这样做的最终效果是文档中的所有标题元素都匹配并出现在函数弹出窗口中,不包括基于symbolTransformation&lt;title&gt;&lt;/title&gt;标签内容。

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

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

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

【问题讨论】:

    标签: textmate textmatebundles textmate2


    【解决方案1】:

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

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

    这还有一个额外的好处是允许&lt;title&gt;...&lt;/title&gt; 跨越多行。

    【讨论】:

    • 谢谢,这很有帮助。它仍然有一个副作用,就是以不同的方式处理标题标签的内容,以使文本以不同的颜色显示。 (在我的主题中,它是白色的,现在是蓝色的。)有什么办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    相关资源
    最近更新 更多