1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
/*
Language: Ducktype
Author: Shaun McCance <shaunm@gnome.org>
Website: https://twitter.com/shaunm
Category: markup
*/
/** @type LanguageFn */
export default 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
]
}
]
};
}
|