0

私はDocBook5XMLのバンドルに取り組んでいます。これには、次のようなコンテンツが含まれていることがよくあります。

<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

他の興味深いもの(図のような)は正式なタイトルを持つ傾向があるので、これだけの機能に満足していますが、1つの問題があります。

タグの内容は、残りの言語文法titleに従って解析および認識されません。text.xml上記の言語文法のコメントアウトされたpatternsセクションには、この問題を修正するという望ましい効果はありません。すべてがmeta.tag.xml.docbook5.titleスコープに含まれます。

ここで欲しいものを手に入れる方法はありますか?つまり、関数ポップアップ内のtitle要素のコンテンツ(オプションでタイトルのみ)は、パーサーによって通常のXMLコンテンツとして認識されますsection

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 に答える