Skip to content
/ tmglel Public

TextMate Grammars for Labeled Embedded Languages

License

Notifications You must be signed in to change notification settings

ejaa3/tmglel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TMGLEL

Stands for TextMate Grammars for Labeled Embedded Languages, a hacky way to have code chunks with a different syntax highlighting than the original language, like in Markdown fenced code blocks.

Requirements:

  • Cargo (Rust).
  • VS Code or maybe another code editor with support for TextMate grammars.
  • For VS Code, a theme that does not color string directly, but a derivative like string.quoted, or alternatively disable semantic highlighting.

Testing:

  1. Clone the repository and enter its directory.

  2. Create a file called TMGLEL.toml with the following structure:

    '<language_id>' = ['<labels_id>', ...]
    ...: ...

    For example, to highlight CSS and JSON in Rust, and XML in TOML, it would be:

    rust = ['css', 'json'] # Use only the labels you
    toml = ['xml']         # need for best performance
  3. Execute cargo run and check file package.json and directory syntaxes/.
    Or cargo run toml to also generate corresponding TOML files.

  4. For use in VS Code, see packaging extensions.

Usage

For most languages ​​a comment starting with a case-insensitive label should highlight the next string in the same scope, not in the external or internal one:

 /* SQL */  "SELECT * FROM some_table" ; // is highlighted
 /* SQL */ ["SELECT * FROM some_table"]; // is not highlighted
[/* SQL */  "SELECT * FROM some_table"]; // is highlighted

Supported languages

Name: ID Notice
JavaScript: javascript
  • Any ${...} is highlighted as an interpolation (template expression) even if it is not, so that it is more likely to be highlighted in the labeled string.
  • The comment must be just before the string. See below.
Rhai: rhai Same as the first point of JavaScript.
Rust: rust Interpolations in labeled strings could be highlighted as Rust-like if there is no space between the brace and the content. For example: {var} is likely to be highlighted, but { var } never is.
TOML: toml Strings at the beginning of a line are unhighlightable. See below.
YAML: yaml It is not possible to highlight quoted strings or comment before the field. See below.

JavaScript

// SQL (VS Code's JS grammar gets in the way)
let not_highlighted = "SELECT * FROM some_table";

let highlighted = // SQL
	"SELECT * FROM some_table";

let alternative = /* SQL */ "SELECT * FROM some_table";

TOML

# SQL
query = 'SELECT * FROM some_table'

# JavaScript
code = '''
console.log('Hello world!');
'''

# CSS (not within the scope of the array, so its string is ignored)
styles.light = ['body { background: white }']

[styles]
# the above commented label will highlight this:
dark = 'body { color: red }'

not_highlighted = [ # CSS       the string is at the
'body { background: white }'] # beginning of the line

highlighted = [ # CSS is highlighted by the indent
	'body { background: white }']

YAML

query: # SQL
  SELECT * FROM some_table

style: > # CSS (can be `|`)
  body { color: red }

script: # JavaScript
  "console.log('Hello world!');"
  # the above line is highlighted as a JS string
  # instead of highlighting what is in quotes as JS

# JavaScript (will not be highlighted even without quotes)
unsupported: "console.log('Hello world!');"

Language labels

Should be the same as markdown code blocks, among others:

ID Labels
bibtex bibtex
c c, h
clojure clj, cljs, clojure
coffee coffee, Cakefile, coffee.erb
cpp cpp, c++, cxx
csharp cs, csharp, c#
css css, css.erb
dart dart
diff patch, diff, rej
dockerfile dockerfile, Dockerfile
dosbatch bat, batch
elixir elixir
erlang erlang
fsharp fs, fsharp, f#
git_commit COMMIT_EDITMSG, MERGE_MSG
git_rebase git-rebase-todo
go go, golang
groovy groovy, gvy
handlebars handlebars, hbs
html html, htm, shtml, xhtml, inc, tmpl, tpl
ini ini, conf
java java, bsh
javascript js, jsx, javascript, es6, mjs, cjs, dataviewjs, {.js.*}
js_regexp regexp
json json, json5, sublime-settings, sublime-menu, sublime-keymap, sublime-mousemap, sublime-theme, sublime-build, sublime-project, sublime-completions
jsonc jsonc
julia julia, {.julia.*}
latex latex, tex
less less
log log
lua lua
makefile Makefile, makefile, GNUmakefile, OCamlMakefile
markdown markdown, md
objc objectivec, objective-c, mm, objc, obj-c, m, h
perl perl, pl, pm, pod, t, PL, psgi, vcl
perl6 perl6, p6, pl6, pm6, nqp
php php, php3, php4, php5, phpt, phtml, aw, ctp
powershell powershell, ps1, psm1, psd1, pwsh
pug jade, pug
python python, py, py3, rpy, pyw, cpy, SConstruct, Sconstruct, sconstruct, SConscript, gyp, gypi, {.python.*}
r R, r, s, S, Rprofile, {.r.*}
reaper reaper
regexp_python re
rhai rhai
ruby ruby, rb, rbx, rjs, Rakefile, rake, cgi, fcgi, gemspec, irbrc, Capfile, ru, prawn, Cheffile, Gemfile, Guardfile, Hobofile, Vagrantfile, Appraisals, Rantfile, Berksfile, Berksfile.lock, Thorfile, Puppetfile
rust rust, rs, {.rust.*}
scala scala, sbt
scss scss
shellscript shell, sh, bash, zsh, bashrc, bash_profile, bash_login, profile, bash_logout, .textmate_init, {.bash.*}
sql sql, ddl, dml
swift swift
toml toml
twig twig
typescript typescript, ts
typescriptreact tsx
vs_net vb
xml xml, xsd, tld, jsp, pt, cpt, dtml, rss, opml
xsl xsl, xslt
yaml yaml, yml

About

TextMate Grammars for Labeled Embedded Languages

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published