aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-qml.js
blob: 7182280eddcdb1539ad248f38bc1385a3cbe8952 (plain)
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
(function (Prism) {
  var jsString = /"(?:\\.|[^\\"\r\n])*"|'(?:\\.|[^\\'\r\n])*'/.source;
  var jsComment = /\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))*\*\//.source;

  var jsExpr =
    /(?:[^\\()[\]{}"'/]|<string>|\/(?![*/])|<comment>|\(<expr>*\)|\[<expr>*\]|\{<expr>*\}|\\[\s\S])/.source
      .replace(/<string>/g, function () {
        return jsString;
      })
      .replace(/<comment>/g, function () {
        return jsComment;
      });

  // the pattern will blow up, so only a few iterations
  for (var i = 0; i < 2; i++) {
    jsExpr = jsExpr.replace(/<expr>/g, function () {
      return jsExpr;
    });
  }
  jsExpr = jsExpr.replace(/<expr>/g, '[^\\s\\S]');

  Prism.languages.qml = {
    comment: {
      pattern: /\/\/.*|\/\*[\s\S]*?\*\//,
      greedy: true,
    },
    'javascript-function': {
      pattern: RegExp(
        /((?:^|;)[ \t]*)function\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*\(<js>*\)\s*\{<js>*\}/.source.replace(
          /<js>/g,
          function () {
            return jsExpr;
          }
        ),
        'm'
      ),
      lookbehind: true,
      greedy: true,
      alias: 'language-javascript',
      inside: Prism.languages.javascript,
    },
    'class-name': {
      pattern: /((?:^|[:;])[ \t]*)(?!\d)\w+(?=[ \t]*\{|[ \t]+on\b)/m,
      lookbehind: true,
    },
    property: [
      {
        pattern: /((?:^|[;{])[ \t]*)(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,
        lookbehind: true,
      },
      {
        pattern:
          /((?:^|[;{])[ \t]*)property[ \t]+(?!\d)\w+(?:\.\w+)*[ \t]+(?!\d)\w+(?:\.\w+)*(?=[ \t]*:)/m,
        lookbehind: true,
        inside: {
          keyword: /^property/,
          property: /\w+(?:\.\w+)*/,
        },
      },
    ],
    'javascript-expression': {
      pattern: RegExp(
        /(:[ \t]*)(?![\s;}[])(?:(?!$|[;}])<js>)+/.source.replace(
          /<js>/g,
          function () {
            return jsExpr;
          }
        ),
        'm'
      ),
      lookbehind: true,
      greedy: true,
      alias: 'language-javascript',
      inside: Prism.languages.javascript,
    },
    string: {
      pattern: /"(?:\\.|[^\\"\r\n])*"/,
      greedy: true,
    },
    keyword: /\b(?:as|import|on)\b/,
    punctuation: /[{}[\]:;,]/,
  };
})(Prism);