summaryrefslogtreecommitdiff
path: root/js/ducktype.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/ducktype.js')
-rw-r--r--js/ducktype.js112
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
+ ]
+ }
+ ]
+ };
+}