如何在Sublime Text 3中从HTML语法继承XML文件中的CDATA语法?

时间:2016-01-24 03:35:09

标签: html xml sublimetext3 sublimetext

我正在尝试为XML文件创建一个新的sublime语法,它将CDATA中的标签视为HTML。 我创建了一个新的sublime-syntax文件,复制了原始XML规则(通过PackageResourceViewer打开它们)并找到了我感兴趣的部分:

contexts:
  main: 
    - match: '<!\[CDATA\['
    captures:
      0: punctuation.definition.string.begin.xml
    push:
      - match: "]]>"
        captures:
          0: punctuation.definition.string.end.xml
        pop: true

以下是我想在push:

下立即添加的两行
      - meta_scope: text.html.basic
      - include: text.html.basic

我希望继承所有text.html.basic规则,但我发现行为或颜色语法没有变化。按行为我的意思是我希望自动关闭标签遵循HTML规则。也就是说,如果我的光标位于下面示例中John Q. Public的末尾,我按下标签,我希望得到一个结束</p>标记,而不是</Body>(这是发生了什么事。)

<Body><![CDATA[
  <div class="to">
    <p>John Q. Public|
  </div>
]]></Body>

我错了什么?

1 个答案:

答案 0 :(得分:2)

感谢@MattDMo,这种方法很有效。以下是我提出的建议:

- match: <!
  captures:
    0: punctuation.definition.tag.html
  push:
    - meta_scope: meta.tag.sgml.html
    - match: ">"
      pop: true
    - match: '\[CDATA\['
      push:
        - include: 'HTML.sublime-syntax'
        - meta_scope: text.html.basic
        - match: "]](?=>)"
          pop: true
    - match: (\s*)(?!--|>)\S(\s*)
      scope: text.html.basic