diff --git a/grammar.js b/grammar.js index 06900c3..77e6d16 100644 --- a/grammar.js +++ b/grammar.js @@ -567,21 +567,33 @@ module.exports = grammar({ // Comments comment: ($) => choice($.template_comment, $.html_comment), - // Template comments: @* ... *@ (simple form only for syntax highlighting) + // Template comments: @* ... *@ template_comment: ($) => - seq("@", /\*+/, optional(/([^*]|\*+[^@])*/), /\*+/, "@"), + seq( + alias("@*", $.comment_start), + optional($.comment_content), + alias("*@", $.comment_end) + ), + comment_content: ($) => /([^*]|\*[^@])*/, + // HTML comment: html_comment: ($) => seq(""), html_comment_content: ($) => /([^-]|-[^-]|--[^>])*/, - // Raw blocks: @#...#@ (simple form only for syntax highlighting) + // Raw blocks: @# ... #@ raw_block: ($) => - seq("@", /#+/, optional(/([^#]|#+[^@])*/), /#+/, "@"), + seq( + alias("@#", $.raw_start), + optional($.raw_content), + alias("#@", $.raw_end) + ), + raw_content: ($) => /([^#]|#[^@])*/, // Embedded language blocks: @```lang ... ```@ embedded_language: ($) => - seq("@", /`+/, $.language_name, optional(/([^`]|`+[^@])*/), /`+/, "@"), + seq("@```", $.language_name, optional($.embedded_content), "```@"), + embedded_content: ($) => /([^`]|`[^`]|``[^`]|```[^@])*/, language_name: ($) => choice("html", "css", "js", "javascript", "json", "alpine", "style"),