-
-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathjavadoclike.js
91 lines (88 loc) · 2.72 KB
/
javadoclike.js
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
// @ts-nocheck
javadoclike.displayName = 'javadoclike'
javadoclike.aliases = []
/** @type {import('../core.js').Syntax} */
export default function javadoclike(Prism) {
;(function (Prism) {
var javaDocLike = (Prism.languages.javadoclike = {
parameter: {
pattern:
/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,
lookbehind: true
},
keyword: {
// keywords are the first word in a line preceded be an `@` or surrounded by curly braces.
// @word, {@word}
pattern: /(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,
lookbehind: true
},
punctuation: /[{}]/
})
/**
* Adds doc comment support to the given language and calls a given callback on each doc comment pattern.
*
* @param {string} lang the language add doc comment support to.
* @param {(pattern: {inside: {rest: undefined}}) => void} callback the function called with each doc comment pattern as argument.
*/
function docCommentSupport(lang, callback) {
var tokenName = 'doc-comment'
var grammar = Prism.languages[lang]
if (!grammar) {
return
}
var token = grammar[tokenName]
if (!token) {
// add doc comment: /** */
var definition = {}
definition[tokenName] = {
pattern: /(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,
lookbehind: true,
alias: 'comment'
}
grammar = Prism.languages.insertBefore(lang, 'comment', definition)
token = grammar[tokenName]
}
if (token instanceof RegExp) {
// convert regex to object
token = grammar[tokenName] = {
pattern: token
}
}
if (Array.isArray(token)) {
for (var i = 0, l = token.length; i < l; i++) {
if (token[i] instanceof RegExp) {
token[i] = {
pattern: token[i]
}
}
callback(token[i])
}
} else {
callback(token)
}
}
/**
* Adds doc-comment support to the given languages for the given documentation language.
*
* @param {string[]|string} languages
* @param {Object} docLanguage
*/
function addSupport(languages, docLanguage) {
if (typeof languages === 'string') {
languages = [languages]
}
languages.forEach(function (lang) {
docCommentSupport(lang, function (pattern) {
if (!pattern.inside) {
pattern.inside = {}
}
pattern.inside.rest = docLanguage
})
})
}
Object.defineProperty(javaDocLike, 'addSupport', {
value: addSupport
})
javaDocLike.addSupport(['java', 'javascript', 'php'], javaDocLike)
})(Prism)
}