I’m writing a custom syntax highlighting file (for LS-DYNA input files), and I’m having problems with a particular issue. Keywords are denoted by a star (*), but if the keyword *COMMENT is provided, it should comment out all the input until the next keyword. I’ve been unable to replicate this functionality exactly - see my example here.
The current code which produces the example above:
%YAML 1.2
---
name: LSDYNA
file_extensions:
  - k
scope: source.lsdyna
contexts:
  main:
    - include: comment
    - include: keyword
  comment:
    - match: \$
      scope: punctuation.definiton.comment.lsdyna
      push:
        - meta_scope: comment.line.lsdyna
        - match: \n
          pop: true
  key_comment_1:
    - meta_scope: comment.block.lsdyna
    - match: (\*COMMENT )
      set: key_comment_2
  key_comment_2:
    - meta_scope: comment.block.lsdyna
    - match: \n
      set: key_comment_3
  key_comment_3:
    - meta_content_scope: comment.block.lsdyna
    - match: ^\*
      pop: true
  keyword:
    - include: key_comment_1
    - match: ^\*[A-Za-z0-9_]*
      scope: keyword.control.lsdyna
      pop: true
I’ve also tried using lookaheads as follows:
  key_comment_1:
    - match: (\*COMMENT)
      scope: punctuation.definiton.comment.lsdyna
      push:
        - meta_scope: comment.block.lsdyna
        - match: \n(?=\*)
          pop: true
But that doesn’t work either, it just causes everything after *COMMENT (including other keywords) to be commented out.