source: node_modules/refractor/lang/javadoclike.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 2.7 KB
Line 
1'use strict'
2
3module.exports = javadoclike
4javadoclike.displayName = 'javadoclike'
5javadoclike.aliases = []
6function javadoclike(Prism) {
7 ;(function (Prism) {
8 var javaDocLike = (Prism.languages.javadoclike = {
9 parameter: {
10 pattern:
11 /(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,
12 lookbehind: true
13 },
14 keyword: {
15 // keywords are the first word in a line preceded be an `@` or surrounded by curly braces.
16 // @word, {@word}
17 pattern: /(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,
18 lookbehind: true
19 },
20 punctuation: /[{}]/
21 })
22 /**
23 * Adds doc comment support to the given language and calls a given callback on each doc comment pattern.
24 *
25 * @param {string} lang the language add doc comment support to.
26 * @param {(pattern: {inside: {rest: undefined}}) => void} callback the function called with each doc comment pattern as argument.
27 */
28 function docCommentSupport(lang, callback) {
29 var tokenName = 'doc-comment'
30 var grammar = Prism.languages[lang]
31 if (!grammar) {
32 return
33 }
34 var token = grammar[tokenName]
35 if (!token) {
36 // add doc comment: /** */
37 var definition = {}
38 definition[tokenName] = {
39 pattern: /(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,
40 lookbehind: true,
41 alias: 'comment'
42 }
43 grammar = Prism.languages.insertBefore(lang, 'comment', definition)
44 token = grammar[tokenName]
45 }
46 if (token instanceof RegExp) {
47 // convert regex to object
48 token = grammar[tokenName] = {
49 pattern: token
50 }
51 }
52 if (Array.isArray(token)) {
53 for (var i = 0, l = token.length; i < l; i++) {
54 if (token[i] instanceof RegExp) {
55 token[i] = {
56 pattern: token[i]
57 }
58 }
59 callback(token[i])
60 }
61 } else {
62 callback(token)
63 }
64 }
65 /**
66 * Adds doc-comment support to the given languages for the given documentation language.
67 *
68 * @param {string[]|string} languages
69 * @param {Object} docLanguage
70 */
71 function addSupport(languages, docLanguage) {
72 if (typeof languages === 'string') {
73 languages = [languages]
74 }
75 languages.forEach(function (lang) {
76 docCommentSupport(lang, function (pattern) {
77 if (!pattern.inside) {
78 pattern.inside = {}
79 }
80 pattern.inside.rest = docLanguage
81 })
82 })
83 }
84 Object.defineProperty(javaDocLike, 'addSupport', {
85 value: addSupport
86 })
87 javaDocLike.addSupport(['java', 'javascript', 'php'], javaDocLike)
88 })(Prism)
89}
Note: See TracBrowser for help on using the repository browser.