Skip to content

Instantly share code, notes, and snippets.

@forivall
Created May 7, 2021 00:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save forivall/d6a1fbc1ca902670ad51973b974ac177 to your computer and use it in GitHub Desktop.
Save forivall/d6a1fbc1ca902670ad51973b974ac177 to your computer and use it in GitHub Desktop.
{
"$schema": "https://raw.githubusercontent.com/Septh/tmlanguage/master/tmLanguage.schema.json",
"name": "Embedded Javascript",
"scopeName": "text.html.ejs",
"injectionSelector": "L:text.html",
"injections": {
"text.html.ejs - (meta.embedded.block.ejs | meta.embedded.line.ejs | meta.tag | comment), L:meta.tag, L:source.js.embedded.html": {
"patterns": [
{
"begin": "(^\\s*)(?=<%+#(?![^%]*%>))",
"beginCaptures": {
"0": {
"name": "punctuation.whitespace.comment.leading.ejs"
}
},
"end": "(?!\\G)(\\s*$\\n)?",
"endCaptures": {
"0": {
"name": "punctuation.whitespace.comment.trailing.ejs"
}
},
"patterns": [
{
"include": "#comment"
}
]
},
{
"begin": "(^\\s*)(?=<%(?![^%]*%>))",
"beginCaptures": {
"0": {
"name": "punctuation.whitespace.embedded.leading.ejs"
}
},
"end": "(?!\\G)(\\s*$\\n)?",
"endCaptures": {
"0": {
"name": "punctuation.whitespace.embedded.trailing.ejs"
}
},
"patterns": [
{
"include":"#tag-ejs-single-line"
},
{
"include":"#tag-ejs-multi-line"
}
]
},
{
"include": "#tag-block-comment"
},
{
"include": "#tag-single-line-section-comment"
},
{
"include":"#tag-section-comment"
},
{
"include":"#tag-ejs-single-line"
},
{
"include":"#tag-ejs-multi-line"
}
]
},
"meta.block.js - (comment.block, text.html.ejs.override-js)": {
"patterns": [
{
"begin": "\\G[_-]?([%?])(>)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.tag.end.ejs"
},
"1": {
"name": "text.html.ejs.override-js"
}
},
"end": "(<)(%|\\?)(?![%#])[_=-]?",
"endCaptures": {
"0": {
"name": "punctuation.definition.tag.begin.ejs"
},
"1": {
"name": "text.html.ejs.override-js"
}
},
"contentName": "text.html.ejs.override-js",
"patterns": [
{
"include": "text.html.ejs"
}
]
}
]
}
},
"patterns": [
{
"include": "#tag-block-comment"
},
{
"include": "#tag-single-line-section-comment"
},
{
"include":"#tag-section-comment"
},
{
"include":"#tag-ejs-single-line"
},
{
"include":"#tag-ejs-multi-line"
},
],
"repository": {
"tag-block-comment": {
"begin": "<[%?]#",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.ejs"
}
},
"end": "[%?]>",
"endCaptures": {
"0": {
"name": "punctuation.definition.comment.ejs"
}
},
"name": "comment.block.ejs"
},
"tag-single-line-section-comment": {
"begin": "(<[%?](?:(?!php))[%_=-]?)\\s*((\/\\*)(.*)(\\*\/))(?=(\\s*([%?]>)))",
"captures": {
"1": {
"name": "punctuation.section.embedded.begin.ejs"
},
"3": {
"name": "punctuation.definition.comment.ejs"
},
"5": {
"name": "punctuation.definition.comment.ejs"
},
"2": {
"name": "comment.block.ejs"
}
},
"end": "([%?]>)",
"endCaptures": {
"1": {
"name": "punctuation.section.embedded.end.ejs"
}
},
"contentName": "comment.block.ejs",
"name":"meta.block.single.comment.ejs"
},
"tag-section-comment": {
"name":"comment.block.ejs",
"begin":"(<[%?](?:(?!php)))\\s*((?=(\/\\*)))",
"beginCaptures": {
"1": {
"name": "punctuation.section.embedded.begin.ejs"
}
},
"end": "(\\*\/)\\s*([%?]>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.comment.ejs"
},
"2": {
"name": "punctuation.section.embedded.end.ejs"
}
},
"patterns":[
{
"name":"ejs-end-tag",
"match":"([%?]>)",
"captures":{
"1":{
"name":"punctuation.section.embedded.end.ejs"
}
}
},
{
"name":"ejs-begin-tag",
"match":"(<[%?](?:(?!php)))",
"captures":{
"1":{
"name":"punctuation.section.embedded.begin.ejs"
}
}
},
{
"include":"text.html.ejs"
}
]
},
"tag-ejs-single-line": {
"name": "meta.tag.metadata.script.ejs",
"begin":"(<[%?](?:(?!php))[%_=-]?)(?!(\\s*\\*\/))(((?!([_-]?[%?]>)).)+)(?=([_-]?[%?]>))",
"beginCaptures": {
"0": {
"contentName":"source.js",
"name": "meta.embedded.*"
},
"1": {
"name": "punctuation.section.embedded.begin.ejs"
},
"3": {
"name": "meta.embedded.ejs",
"contentName": "source.js",
"patterns":[
{
"include":"source.js"
}
]
},
"6": {
"name": "keyword.operator.relational.js"
}
},
"end": "(([_-]?[%?]>))",
"endCaptures": {
"1": {
"name": "punctuation.section.embedded.end.ejs"
}
}
},
"tag-ejs-multi-line": {
"contentName":"source.js",
"name": "meta.embedded.block.ejs",
"begin":"(<[%?](?:(?!php))[%_=-]?)(?!([^%]*?[_-]?[%?]>))",
"beginCaptures": {
"1": {
"name": "punctuation.section.embedded.begin.ejs"
},
"3": {
"name": "meta.embedded.ejs",
"contentName": "source.js",
"patterns":[
{
"include":"source.js"
}
]
}
},
"end": "(([_-]?[%?]>))",
"endCaptures": {
"1": {
"name": "punctuation.section.embedded.end.ejs"
}
},
"patterns":[
{
"name": "meta.embedded.ejs.override-js",
"match": "(.(?![_-]?[%?]>))+",
"captures": {
"0": {
"patterns": [{
"include": "source.js"
}]
}
}
}, {
"include": "source.js"
}
]
}
}
}
@forivall
Copy link
Author

forivall commented May 7, 2021

package.json
contributions.grammars:

{
	"language": "ejs",
	"scopeName": "text.html.ejs",
	"path": "./syntaxes/ejs.json",
	"embeddedLanguages": {
		"meta.embedded.block.ejs": "ejs",
		"meta.embedded.block.javascript": "source.js"
	}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment