diff options
Diffstat (limited to 'js/ducktype.js')
-rw-r--r-- | js/ducktype.js | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/js/ducktype.js b/js/ducktype.js new file mode 100644 index 00000000..6e2ebe9c --- /dev/null +++ b/js/ducktype.js @@ -0,0 +1,112 @@ +/* +Language: Ducktype +Author: Shaun McCance <shaunm@gnome.org> +Website: https://twitter.com/shaunm +Category: markup +*/ + +function(hljs) { + var ATTRLIST = { + endsWithParent: true, + relevance: 0, + contains: [ + { + className: 'attr', + begin: />>[^\]\s]+/ + }, + { + className: 'attr', + begin: /(\.|#|>)?[A-Za-z0-9\._:#-]+/ + }, + { + begin: /=/, + relevance: 0, + contains: [ + { + className: 'string', + endsParent: true, + variants: [ + { begin: /"/, end: /"/ }, + { begin: /'/, end: /'/ }, + {begin: /[^\s"'\]]+/} + ] + } + ] + } + ] + }; + return { + aliases: ['duck'], + contains: [ + { + className: 'section', + variants: [ + { begin: /^=+ /, end: /$/ }, + { begin: /^-+ /, end: /$/ }, + ] + }, + /* comments come in two forms: [-- fenced --] and [-] line */ + hljs.COMMENT( + /^ *\[--/, + /^ *--\]$/, + { relevance: 10 } + ), + hljs.COMMENT( + /^ *\[-\]/, + /$/, + { relevance: 10 } + ), + /* no-parse fences are enclosed in [[[ triple brackets ]]] */ + { + className: 'code', + begin: /^ *\[\[\[$/, + end: /^ *\]\]\]$/, + relevance: 10 + }, + /* block tags [look like=this] */ + { + className: 'tag', + begin: /^ *\[/, + end: /\]$/, + contains: [ + { + className: 'name', + begin: /[A-Za-z0-9\._:-]+/, + relevance: 0 + }, + ATTRLIST + ] + }, + /* entity $references; */ + { + className: 'tag', + begin: /\$[a-zA-Z0-9][a-zA-Z0-9:]*;/ + }, + /* info elements are tagged @like[this] */ + { + className: 'tag', + begin: /^ *@[a-zA-Z][a-zA-Z:]*\[/, + end: /\]/, + contains: [ + ATTRLIST + ] + }, + /* parser directives look like info elements, but have a looser + syntax. need to match them after info elements */ + { + className: 'tag', + begin: /^ *@/, + end: /$/ + }, + /* inline element are tagged $like[this](and this) */ + { + className: 'tag', + begin: /\$[a-zA-Z][a-zA-Z:]*\[/, + end: /\]/, + contains: [ + ATTRLIST + ] + } + ] + }; +} |