aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-dot.js
blob: c6cd1708acd775e9dd614e78ff24e712c49bdf05 (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
84
85
86
// https://www.graphviz.org/doc/info/lang.html

(function (Prism) {
  var ID =
    '(?:' +
    [
      // an identifier
      /[a-zA-Z_\x80-\uFFFF][\w\x80-\uFFFF]*/.source,
      // a number
      /-?(?:\.\d+|\d+(?:\.\d*)?)/.source,
      // a double-quoted string
      /"[^"\\]*(?:\\[\s\S][^"\\]*)*"/.source,
      // HTML-like string
      /<(?:[^<>]|(?!<!--)<(?:[^<>"']|"[^"]*"|'[^']*')+>|<!--(?:[^-]|-(?!->))*-->)*>/
        .source,
    ].join('|') +
    ')';

  var IDInside = {
    markup: {
      pattern: /(^<)[\s\S]+(?=>$)/,
      lookbehind: true,
      alias: ['language-markup', 'language-html', 'language-xml'],
      inside: Prism.languages.markup,
    },
  };

  /**
   * @param {string} source
   * @param {string} flags
   * @returns {RegExp}
   */
  function withID(source, flags) {
    return RegExp(
      source.replace(/<ID>/g, function () {
        return ID;
      }),
      flags
    );
  }

  Prism.languages.dot = {
    comment: {
      pattern: /\/\/.*|\/\*[\s\S]*?\*\/|^#.*/m,
      greedy: true,
    },
    'graph-name': {
      pattern: withID(
        /(\b(?:digraph|graph|subgraph)[ \t\r\n]+)<ID>/.source,
        'i'
      ),
      lookbehind: true,
      greedy: true,
      alias: 'class-name',
      inside: IDInside,
    },
    'attr-value': {
      pattern: withID(/(=[ \t\r\n]*)<ID>/.source),
      lookbehind: true,
      greedy: true,
      inside: IDInside,
    },
    'attr-name': {
      pattern: withID(/([\[;, \t\r\n])<ID>(?=[ \t\r\n]*=)/.source),
      lookbehind: true,
      greedy: true,
      inside: IDInside,
    },
    keyword: /\b(?:digraph|edge|graph|node|strict|subgraph)\b/i,
    'compass-point': {
      pattern: /(:[ \t\r\n]*)(?:[ewc_]|[ns][ew]?)(?![\w\x80-\uFFFF])/,
      lookbehind: true,
      alias: 'builtin',
    },
    node: {
      pattern: withID(/(^|[^-.\w\x80-\uFFFF\\])<ID>/.source),
      lookbehind: true,
      greedy: true,
      inside: IDInside,
    },
    operator: /[=:]|-[->]/,
    punctuation: /[\[\]{};,]/,
  };

  Prism.languages.gv = Prism.languages.dot;
})(Prism);