ll-plus 2.10.24 → 2.10.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/theme-chalk/code-editor-vue3/addon/comment/comment.js +211 -0
- package/theme-chalk/code-editor-vue3/addon/comment/continuecomment.js +114 -0
- package/theme-chalk/code-editor-vue3/addon/dialog/dialog.css +32 -0
- package/theme-chalk/code-editor-vue3/addon/dialog/dialog.js +163 -0
- package/theme-chalk/code-editor-vue3/addon/display/autorefresh.js +47 -0
- package/theme-chalk/code-editor-vue3/addon/display/fullscreen.css +6 -0
- package/theme-chalk/code-editor-vue3/addon/display/fullscreen.js +41 -0
- package/theme-chalk/code-editor-vue3/addon/display/panel.js +133 -0
- package/theme-chalk/code-editor-vue3/addon/display/placeholder.js +78 -0
- package/theme-chalk/code-editor-vue3/addon/display/rulers.js +51 -0
- package/theme-chalk/code-editor-vue3/addon/edit/closebrackets.js +201 -0
- package/theme-chalk/code-editor-vue3/addon/edit/closetag.js +185 -0
- package/theme-chalk/code-editor-vue3/addon/edit/continuelist.js +101 -0
- package/theme-chalk/code-editor-vue3/addon/edit/matchbrackets.js +160 -0
- package/theme-chalk/code-editor-vue3/addon/edit/matchtags.js +66 -0
- package/theme-chalk/code-editor-vue3/addon/edit/trailingspace.js +27 -0
- package/theme-chalk/code-editor-vue3/addon/fold/brace-fold.js +119 -0
- package/theme-chalk/code-editor-vue3/addon/fold/comment-fold.js +59 -0
- package/theme-chalk/code-editor-vue3/addon/fold/foldcode.js +159 -0
- package/theme-chalk/code-editor-vue3/addon/fold/foldgutter.css +20 -0
- package/theme-chalk/code-editor-vue3/addon/fold/foldgutter.js +169 -0
- package/theme-chalk/code-editor-vue3/addon/fold/indent-fold.js +48 -0
- package/theme-chalk/code-editor-vue3/addon/fold/markdown-fold.js +49 -0
- package/theme-chalk/code-editor-vue3/addon/fold/xml-fold.js +184 -0
- package/theme-chalk/code-editor-vue3/addon/hint/anyword-hint.js +41 -0
- package/theme-chalk/code-editor-vue3/addon/hint/css-hint.js +66 -0
- package/theme-chalk/code-editor-vue3/addon/hint/html-hint.js +351 -0
- package/theme-chalk/code-editor-vue3/addon/hint/javascript-hint.js +162 -0
- package/theme-chalk/code-editor-vue3/addon/hint/show-hint.css +37 -0
- package/theme-chalk/code-editor-vue3/addon/hint/show-hint.js +523 -0
- package/theme-chalk/code-editor-vue3/addon/hint/sql-hint.js +304 -0
- package/theme-chalk/code-editor-vue3/addon/hint/xml-hint.js +132 -0
- package/theme-chalk/code-editor-vue3/addon/lint/coffeescript-lint.js +47 -0
- package/theme-chalk/code-editor-vue3/addon/lint/css-lint.js +40 -0
- package/theme-chalk/code-editor-vue3/addon/lint/html-lint.js +59 -0
- package/theme-chalk/code-editor-vue3/addon/lint/javascript-lint.js +65 -0
- package/theme-chalk/code-editor-vue3/addon/lint/json-lint.js +40 -0
- package/theme-chalk/code-editor-vue3/addon/lint/lint.css +79 -0
- package/theme-chalk/code-editor-vue3/addon/lint/lint.js +288 -0
- package/theme-chalk/code-editor-vue3/addon/lint/yaml-lint.js +41 -0
- package/theme-chalk/code-editor-vue3/addon/merge/merge.css +119 -0
- package/theme-chalk/code-editor-vue3/addon/merge/merge.js +1018 -0
- package/theme-chalk/code-editor-vue3/addon/mode/loadmode.js +66 -0
- package/theme-chalk/code-editor-vue3/addon/mode/multiplex.js +136 -0
- package/theme-chalk/code-editor-vue3/addon/mode/multiplex_test.js +49 -0
- package/theme-chalk/code-editor-vue3/addon/mode/overlay.js +90 -0
- package/theme-chalk/code-editor-vue3/addon/mode/simple.js +216 -0
- package/theme-chalk/code-editor-vue3/addon/runmode/colorize.js +40 -0
- package/theme-chalk/code-editor-vue3/addon/runmode/runmode-standalone.js +334 -0
- package/theme-chalk/code-editor-vue3/addon/runmode/runmode.js +76 -0
- package/theme-chalk/code-editor-vue3/addon/runmode/runmode.node.js +329 -0
- package/theme-chalk/code-editor-vue3/addon/scroll/annotatescrollbar.js +128 -0
- package/theme-chalk/code-editor-vue3/addon/scroll/scrollpastend.js +48 -0
- package/theme-chalk/code-editor-vue3/addon/scroll/simplescrollbars.css +66 -0
- package/theme-chalk/code-editor-vue3/addon/scroll/simplescrollbars.js +152 -0
- package/theme-chalk/code-editor-vue3/addon/search/jump-to-line.js +53 -0
- package/theme-chalk/code-editor-vue3/addon/search/match-highlighter.js +167 -0
- package/theme-chalk/code-editor-vue3/addon/search/matchesonscrollbar.css +8 -0
- package/theme-chalk/code-editor-vue3/addon/search/matchesonscrollbar.js +97 -0
- package/theme-chalk/code-editor-vue3/addon/search/search.js +295 -0
- package/theme-chalk/code-editor-vue3/addon/search/searchcursor.js +305 -0
- package/theme-chalk/code-editor-vue3/addon/selection/active-line.js +72 -0
- package/theme-chalk/code-editor-vue3/addon/selection/mark-selection.js +119 -0
- package/theme-chalk/code-editor-vue3/addon/selection/selection-pointer.js +98 -0
- package/theme-chalk/code-editor-vue3/addon/tern/tern.css +87 -0
- package/theme-chalk/code-editor-vue3/addon/tern/tern.js +756 -0
- package/theme-chalk/code-editor-vue3/addon/tern/worker.js +44 -0
- package/theme-chalk/code-editor-vue3/addon/wrap/hardwrap.js +160 -0
- package/theme-chalk/code-editor-vue3/lib/codemirror.css +344 -0
- package/theme-chalk/code-editor-vue3/lib/codemirror.js +9884 -0
- package/theme-chalk/code-editor-vue3/mode/apl/apl.js +174 -0
- package/theme-chalk/code-editor-vue3/mode/asciiarmor/asciiarmor.js +74 -0
- package/theme-chalk/code-editor-vue3/mode/asn.1/asn.1.js +204 -0
- package/theme-chalk/code-editor-vue3/mode/asterisk/asterisk.js +220 -0
- package/theme-chalk/code-editor-vue3/mode/brainfuck/brainfuck.js +85 -0
- package/theme-chalk/code-editor-vue3/mode/clike/clike.js +942 -0
- package/theme-chalk/code-editor-vue3/mode/clojure/clojure.js +293 -0
- package/theme-chalk/code-editor-vue3/mode/cmake/cmake.js +97 -0
- package/theme-chalk/code-editor-vue3/mode/cobol/cobol.js +255 -0
- package/theme-chalk/code-editor-vue3/mode/coffeescript/coffeescript.js +359 -0
- package/theme-chalk/code-editor-vue3/mode/commonlisp/commonlisp.js +125 -0
- package/theme-chalk/code-editor-vue3/mode/crystal/crystal.js +433 -0
- package/theme-chalk/code-editor-vue3/mode/cypher/cypher.js +152 -0
- package/theme-chalk/code-editor-vue3/mode/d/d.js +223 -0
- package/theme-chalk/code-editor-vue3/mode/dart/dart.js +168 -0
- package/theme-chalk/code-editor-vue3/mode/diff/diff.js +47 -0
- package/theme-chalk/code-editor-vue3/mode/django/django.js +356 -0
- package/theme-chalk/code-editor-vue3/mode/dockerfile/dockerfile.js +211 -0
- package/theme-chalk/code-editor-vue3/mode/dtd/dtd.js +142 -0
- package/theme-chalk/code-editor-vue3/mode/dylan/dylan.js +352 -0
- package/theme-chalk/code-editor-vue3/mode/ebnf/ebnf.js +195 -0
- package/theme-chalk/code-editor-vue3/mode/ecl/ecl.js +206 -0
- package/theme-chalk/code-editor-vue3/mode/eiffel/eiffel.js +160 -0
- package/theme-chalk/code-editor-vue3/mode/elm/elm.js +245 -0
- package/theme-chalk/code-editor-vue3/mode/erlang/erlang.js +619 -0
- package/theme-chalk/code-editor-vue3/mode/factor/factor.js +85 -0
- package/theme-chalk/code-editor-vue3/mode/fcl/fcl.js +173 -0
- package/theme-chalk/code-editor-vue3/mode/forth/forth.js +180 -0
- package/theme-chalk/code-editor-vue3/mode/fortran/fortran.js +188 -0
- package/theme-chalk/code-editor-vue3/mode/gas/gas.js +353 -0
- package/theme-chalk/code-editor-vue3/mode/gfm/gfm.js +129 -0
- package/theme-chalk/code-editor-vue3/mode/gherkin/gherkin.js +178 -0
- package/theme-chalk/code-editor-vue3/mode/go/go.js +187 -0
- package/theme-chalk/code-editor-vue3/mode/groovy/groovy.js +245 -0
- package/theme-chalk/code-editor-vue3/mode/haml/haml.js +161 -0
- package/theme-chalk/code-editor-vue3/mode/handlebars/handlebars.js +70 -0
- package/theme-chalk/code-editor-vue3/mode/haskell/haskell.js +268 -0
- package/theme-chalk/code-editor-vue3/mode/haskell-literate/haskell-literate.js +43 -0
- package/theme-chalk/code-editor-vue3/mode/haxe/haxe.js +515 -0
- package/theme-chalk/code-editor-vue3/mode/htmlmixed/htmlmixed.js +153 -0
- package/theme-chalk/code-editor-vue3/mode/http/http.js +113 -0
- package/theme-chalk/code-editor-vue3/mode/idl/idl.js +290 -0
- package/theme-chalk/code-editor-vue3/mode/jinja2/jinja2.js +193 -0
- package/theme-chalk/code-editor-vue3/mode/julia/julia.js +390 -0
- package/theme-chalk/code-editor-vue3/mode/livescript/livescript.js +280 -0
- package/theme-chalk/code-editor-vue3/mode/lua/lua.js +160 -0
- package/theme-chalk/code-editor-vue3/mode/markdown/markdown.js +886 -0
- package/theme-chalk/code-editor-vue3/mode/mathematica/mathematica.js +176 -0
- package/theme-chalk/code-editor-vue3/mode/mbox/mbox.js +129 -0
- package/theme-chalk/code-editor-vue3/mode/meta.js +221 -0
- package/theme-chalk/code-editor-vue3/mode/mirc/mirc.js +193 -0
- package/theme-chalk/code-editor-vue3/mode/mllike/mllike.js +359 -0
- package/theme-chalk/code-editor-vue3/mode/modelica/modelica.js +245 -0
- package/theme-chalk/code-editor-vue3/mode/mscgen/mscgen.js +175 -0
- package/theme-chalk/code-editor-vue3/mode/mumps/mumps.js +148 -0
- package/theme-chalk/code-editor-vue3/mode/nginx/nginx.js +178 -0
- package/theme-chalk/code-editor-vue3/mode/nsis/nsis.js +95 -0
- package/theme-chalk/code-editor-vue3/mode/ntriples/ntriples.js +195 -0
- package/theme-chalk/code-editor-vue3/mode/octave/octave.js +139 -0
- package/theme-chalk/code-editor-vue3/mode/oz/oz.js +252 -0
- package/theme-chalk/code-editor-vue3/mode/pascal/pascal.js +136 -0
- package/theme-chalk/code-editor-vue3/mode/pegjs/pegjs.js +111 -0
- package/theme-chalk/code-editor-vue3/mode/perl/perl.js +836 -0
- package/theme-chalk/code-editor-vue3/mode/php/php.js +234 -0
- package/theme-chalk/code-editor-vue3/mode/pig/pig.js +178 -0
- package/theme-chalk/code-editor-vue3/mode/powershell/powershell.js +398 -0
- package/theme-chalk/code-editor-vue3/mode/properties/properties.js +78 -0
- package/theme-chalk/code-editor-vue3/mode/protobuf/protobuf.js +72 -0
- package/theme-chalk/code-editor-vue3/mode/pug/pug.js +591 -0
- package/theme-chalk/code-editor-vue3/mode/puppet/puppet.js +220 -0
- package/theme-chalk/code-editor-vue3/mode/python/python.js +402 -0
- package/theme-chalk/code-editor-vue3/mode/q/q.js +139 -0
- package/theme-chalk/code-editor-vue3/mode/r/r.js +190 -0
- package/theme-chalk/code-editor-vue3/mode/rpm/changes/index.html +66 -0
- package/theme-chalk/code-editor-vue3/mode/rpm/rpm.js +109 -0
- package/theme-chalk/code-editor-vue3/mode/rst/rst.js +557 -0
- package/theme-chalk/code-editor-vue3/mode/ruby/ruby.js +303 -0
- package/theme-chalk/code-editor-vue3/mode/rust/rust.js +72 -0
- package/theme-chalk/code-editor-vue3/mode/sas/sas.js +303 -0
- package/theme-chalk/code-editor-vue3/mode/sass/sass.js +459 -0
- package/theme-chalk/code-editor-vue3/mode/scheme/scheme.js +284 -0
- package/theme-chalk/code-editor-vue3/mode/shell/shell.js +168 -0
- package/theme-chalk/code-editor-vue3/mode/sieve/sieve.js +193 -0
- package/theme-chalk/code-editor-vue3/mode/slim/slim.js +575 -0
- package/theme-chalk/code-editor-vue3/mode/smalltalk/smalltalk.js +168 -0
- package/theme-chalk/code-editor-vue3/mode/smarty/smarty.js +225 -0
- package/theme-chalk/code-editor-vue3/mode/solr/solr.js +104 -0
- package/theme-chalk/code-editor-vue3/mode/soy/soy.js +665 -0
- package/theme-chalk/code-editor-vue3/mode/sparql/sparql.js +184 -0
- package/theme-chalk/code-editor-vue3/mode/spreadsheet/spreadsheet.js +112 -0
- package/theme-chalk/code-editor-vue3/mode/sql/sql.js +525 -0
- package/theme-chalk/code-editor-vue3/mode/stex/stex.js +264 -0
- package/theme-chalk/code-editor-vue3/mode/stylus/stylus.js +775 -0
- package/theme-chalk/code-editor-vue3/mode/swift/swift.js +221 -0
- package/theme-chalk/code-editor-vue3/mode/tcl/tcl.js +140 -0
- package/theme-chalk/code-editor-vue3/mode/textile/textile.js +469 -0
- package/theme-chalk/code-editor-vue3/mode/tiddlywiki/tiddlywiki.css +14 -0
- package/theme-chalk/code-editor-vue3/mode/tiddlywiki/tiddlywiki.js +308 -0
- package/theme-chalk/code-editor-vue3/mode/tiki/tiki.css +26 -0
- package/theme-chalk/code-editor-vue3/mode/tiki/tiki.js +312 -0
- package/theme-chalk/code-editor-vue3/mode/toml/toml.js +88 -0
- package/theme-chalk/code-editor-vue3/mode/tornado/tornado.js +68 -0
- package/theme-chalk/code-editor-vue3/mode/troff/troff.js +84 -0
- package/theme-chalk/code-editor-vue3/mode/ttcn/ttcn.js +283 -0
- package/theme-chalk/code-editor-vue3/mode/ttcn-cfg/ttcn-cfg.js +214 -0
- package/theme-chalk/code-editor-vue3/mode/turtle/turtle.js +162 -0
- package/theme-chalk/code-editor-vue3/mode/twig/twig.js +141 -0
- package/theme-chalk/code-editor-vue3/mode/vb/vb.js +275 -0
- package/theme-chalk/code-editor-vue3/mode/vbscript/vbscript.js +350 -0
- package/theme-chalk/code-editor-vue3/mode/velocity/velocity.js +202 -0
- package/theme-chalk/code-editor-vue3/mode/verilog/verilog.js +781 -0
- package/theme-chalk/code-editor-vue3/mode/vhdl/vhdl.js +189 -0
- package/theme-chalk/code-editor-vue3/mode/wast/wast.js +132 -0
- package/theme-chalk/code-editor-vue3/mode/webidl/webidl.js +195 -0
- package/theme-chalk/code-editor-vue3/mode/xml/xml.js +417 -0
- package/theme-chalk/code-editor-vue3/mode/xquery/xquery.js +448 -0
- package/theme-chalk/code-editor-vue3/mode/yacas/yacas.js +204 -0
- package/theme-chalk/code-editor-vue3/mode/yaml/yaml.js +120 -0
- package/theme-chalk/code-editor-vue3/mode/yaml-frontmatter/yaml-frontmatter.js +72 -0
- package/theme-chalk/code-editor-vue3/mode/z80/z80.js +116 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: https://codemirror.net/5/LICENSE
|
|
3
|
+
|
|
4
|
+
(function(mod) {
|
|
5
|
+
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
6
|
+
mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"),
|
|
7
|
+
require("../../addon/mode/overlay"));
|
|
8
|
+
else if (typeof define == "function" && define.amd) // AMD
|
|
9
|
+
define(["../../lib/codemirror", "../htmlmixed/htmlmixed",
|
|
10
|
+
"../../addon/mode/overlay"], mod);
|
|
11
|
+
else // Plain browser env
|
|
12
|
+
mod(CodeMirror);
|
|
13
|
+
})(function(CodeMirror) {
|
|
14
|
+
"use strict";
|
|
15
|
+
|
|
16
|
+
CodeMirror.defineMode("django:inner", function() {
|
|
17
|
+
var keywords = ["block", "endblock", "for", "endfor", "true", "false", "filter", "endfilter",
|
|
18
|
+
"loop", "none", "self", "super", "if", "elif", "endif", "as", "else", "import",
|
|
19
|
+
"with", "endwith", "without", "context", "ifequal", "endifequal", "ifnotequal",
|
|
20
|
+
"endifnotequal", "extends", "include", "load", "comment", "endcomment",
|
|
21
|
+
"empty", "url", "static", "trans", "blocktrans", "endblocktrans", "now",
|
|
22
|
+
"regroup", "lorem", "ifchanged", "endifchanged", "firstof", "debug", "cycle",
|
|
23
|
+
"csrf_token", "autoescape", "endautoescape", "spaceless", "endspaceless",
|
|
24
|
+
"ssi", "templatetag", "verbatim", "endverbatim", "widthratio"],
|
|
25
|
+
filters = ["add", "addslashes", "capfirst", "center", "cut", "date",
|
|
26
|
+
"default", "default_if_none", "dictsort",
|
|
27
|
+
"dictsortreversed", "divisibleby", "escape", "escapejs",
|
|
28
|
+
"filesizeformat", "first", "floatformat", "force_escape",
|
|
29
|
+
"get_digit", "iriencode", "join", "last", "length",
|
|
30
|
+
"length_is", "linebreaks", "linebreaksbr", "linenumbers",
|
|
31
|
+
"ljust", "lower", "make_list", "phone2numeric", "pluralize",
|
|
32
|
+
"pprint", "random", "removetags", "rjust", "safe",
|
|
33
|
+
"safeseq", "slice", "slugify", "stringformat", "striptags",
|
|
34
|
+
"time", "timesince", "timeuntil", "title", "truncatechars",
|
|
35
|
+
"truncatechars_html", "truncatewords", "truncatewords_html",
|
|
36
|
+
"unordered_list", "upper", "urlencode", "urlize",
|
|
37
|
+
"urlizetrunc", "wordcount", "wordwrap", "yesno"],
|
|
38
|
+
operators = ["==", "!=", "<", ">", "<=", ">="],
|
|
39
|
+
wordOperators = ["in", "not", "or", "and"];
|
|
40
|
+
|
|
41
|
+
keywords = new RegExp("^\\b(" + keywords.join("|") + ")\\b");
|
|
42
|
+
filters = new RegExp("^\\b(" + filters.join("|") + ")\\b");
|
|
43
|
+
operators = new RegExp("^\\b(" + operators.join("|") + ")\\b");
|
|
44
|
+
wordOperators = new RegExp("^\\b(" + wordOperators.join("|") + ")\\b");
|
|
45
|
+
|
|
46
|
+
// We have to return "null" instead of null, in order to avoid string
|
|
47
|
+
// styling as the default, when using Django templates inside HTML
|
|
48
|
+
// element attributes
|
|
49
|
+
function tokenBase (stream, state) {
|
|
50
|
+
// Attempt to identify a variable, template or comment tag respectively
|
|
51
|
+
if (stream.match("{{")) {
|
|
52
|
+
state.tokenize = inVariable;
|
|
53
|
+
return "tag";
|
|
54
|
+
} else if (stream.match("{%")) {
|
|
55
|
+
state.tokenize = inTag;
|
|
56
|
+
return "tag";
|
|
57
|
+
} else if (stream.match("{#")) {
|
|
58
|
+
state.tokenize = inComment;
|
|
59
|
+
return "comment";
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Ignore completely any stream series that do not match the
|
|
63
|
+
// Django template opening tags.
|
|
64
|
+
while (stream.next() != null && !stream.match(/\{[{%#]/, false)) {}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// A string can be included in either single or double quotes (this is
|
|
69
|
+
// the delimiter). Mark everything as a string until the start delimiter
|
|
70
|
+
// occurs again.
|
|
71
|
+
function inString (delimiter, previousTokenizer) {
|
|
72
|
+
return function (stream, state) {
|
|
73
|
+
if (!state.escapeNext && stream.eat(delimiter)) {
|
|
74
|
+
state.tokenize = previousTokenizer;
|
|
75
|
+
} else {
|
|
76
|
+
if (state.escapeNext) {
|
|
77
|
+
state.escapeNext = false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
var ch = stream.next();
|
|
81
|
+
|
|
82
|
+
// Take into account the backslash for escaping characters, such as
|
|
83
|
+
// the string delimiter.
|
|
84
|
+
if (ch == "\\") {
|
|
85
|
+
state.escapeNext = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return "string";
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Apply Django template variable syntax highlighting
|
|
94
|
+
function inVariable (stream, state) {
|
|
95
|
+
// Attempt to match a dot that precedes a property
|
|
96
|
+
if (state.waitDot) {
|
|
97
|
+
state.waitDot = false;
|
|
98
|
+
|
|
99
|
+
if (stream.peek() != ".") {
|
|
100
|
+
return "null";
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Dot followed by a non-word character should be considered an error.
|
|
104
|
+
if (stream.match(/\.\W+/)) {
|
|
105
|
+
return "error";
|
|
106
|
+
} else if (stream.eat(".")) {
|
|
107
|
+
state.waitProperty = true;
|
|
108
|
+
return "null";
|
|
109
|
+
} else {
|
|
110
|
+
throw Error ("Unexpected error while waiting for property.");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Attempt to match a pipe that precedes a filter
|
|
115
|
+
if (state.waitPipe) {
|
|
116
|
+
state.waitPipe = false;
|
|
117
|
+
|
|
118
|
+
if (stream.peek() != "|") {
|
|
119
|
+
return "null";
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Pipe followed by a non-word character should be considered an error.
|
|
123
|
+
if (stream.match(/\.\W+/)) {
|
|
124
|
+
return "error";
|
|
125
|
+
} else if (stream.eat("|")) {
|
|
126
|
+
state.waitFilter = true;
|
|
127
|
+
return "null";
|
|
128
|
+
} else {
|
|
129
|
+
throw Error ("Unexpected error while waiting for filter.");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Highlight properties
|
|
134
|
+
if (state.waitProperty) {
|
|
135
|
+
state.waitProperty = false;
|
|
136
|
+
if (stream.match(/\b(\w+)\b/)) {
|
|
137
|
+
state.waitDot = true; // A property can be followed by another property
|
|
138
|
+
state.waitPipe = true; // A property can be followed by a filter
|
|
139
|
+
return "property";
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Highlight filters
|
|
144
|
+
if (state.waitFilter) {
|
|
145
|
+
state.waitFilter = false;
|
|
146
|
+
if (stream.match(filters)) {
|
|
147
|
+
return "variable-2";
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Ignore all white spaces
|
|
152
|
+
if (stream.eatSpace()) {
|
|
153
|
+
state.waitProperty = false;
|
|
154
|
+
return "null";
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Identify numbers
|
|
158
|
+
if (stream.match(/\b\d+(\.\d+)?\b/)) {
|
|
159
|
+
return "number";
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Identify strings
|
|
163
|
+
if (stream.match("'")) {
|
|
164
|
+
state.tokenize = inString("'", state.tokenize);
|
|
165
|
+
return "string";
|
|
166
|
+
} else if (stream.match('"')) {
|
|
167
|
+
state.tokenize = inString('"', state.tokenize);
|
|
168
|
+
return "string";
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Attempt to find the variable
|
|
172
|
+
if (stream.match(/\b(\w+)\b/) && !state.foundVariable) {
|
|
173
|
+
state.waitDot = true;
|
|
174
|
+
state.waitPipe = true; // A property can be followed by a filter
|
|
175
|
+
return "variable";
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// If found closing tag reset
|
|
179
|
+
if (stream.match("}}")) {
|
|
180
|
+
state.waitProperty = null;
|
|
181
|
+
state.waitFilter = null;
|
|
182
|
+
state.waitDot = null;
|
|
183
|
+
state.waitPipe = null;
|
|
184
|
+
state.tokenize = tokenBase;
|
|
185
|
+
return "tag";
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// If nothing was found, advance to the next character
|
|
189
|
+
stream.next();
|
|
190
|
+
return "null";
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function inTag (stream, state) {
|
|
194
|
+
// Attempt to match a dot that precedes a property
|
|
195
|
+
if (state.waitDot) {
|
|
196
|
+
state.waitDot = false;
|
|
197
|
+
|
|
198
|
+
if (stream.peek() != ".") {
|
|
199
|
+
return "null";
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Dot followed by a non-word character should be considered an error.
|
|
203
|
+
if (stream.match(/\.\W+/)) {
|
|
204
|
+
return "error";
|
|
205
|
+
} else if (stream.eat(".")) {
|
|
206
|
+
state.waitProperty = true;
|
|
207
|
+
return "null";
|
|
208
|
+
} else {
|
|
209
|
+
throw Error ("Unexpected error while waiting for property.");
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Attempt to match a pipe that precedes a filter
|
|
214
|
+
if (state.waitPipe) {
|
|
215
|
+
state.waitPipe = false;
|
|
216
|
+
|
|
217
|
+
if (stream.peek() != "|") {
|
|
218
|
+
return "null";
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Pipe followed by a non-word character should be considered an error.
|
|
222
|
+
if (stream.match(/\.\W+/)) {
|
|
223
|
+
return "error";
|
|
224
|
+
} else if (stream.eat("|")) {
|
|
225
|
+
state.waitFilter = true;
|
|
226
|
+
return "null";
|
|
227
|
+
} else {
|
|
228
|
+
throw Error ("Unexpected error while waiting for filter.");
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Highlight properties
|
|
233
|
+
if (state.waitProperty) {
|
|
234
|
+
state.waitProperty = false;
|
|
235
|
+
if (stream.match(/\b(\w+)\b/)) {
|
|
236
|
+
state.waitDot = true; // A property can be followed by another property
|
|
237
|
+
state.waitPipe = true; // A property can be followed by a filter
|
|
238
|
+
return "property";
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Highlight filters
|
|
243
|
+
if (state.waitFilter) {
|
|
244
|
+
state.waitFilter = false;
|
|
245
|
+
if (stream.match(filters)) {
|
|
246
|
+
return "variable-2";
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Ignore all white spaces
|
|
251
|
+
if (stream.eatSpace()) {
|
|
252
|
+
state.waitProperty = false;
|
|
253
|
+
return "null";
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Identify numbers
|
|
257
|
+
if (stream.match(/\b\d+(\.\d+)?\b/)) {
|
|
258
|
+
return "number";
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Identify strings
|
|
262
|
+
if (stream.match("'")) {
|
|
263
|
+
state.tokenize = inString("'", state.tokenize);
|
|
264
|
+
return "string";
|
|
265
|
+
} else if (stream.match('"')) {
|
|
266
|
+
state.tokenize = inString('"', state.tokenize);
|
|
267
|
+
return "string";
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Attempt to match an operator
|
|
271
|
+
if (stream.match(operators)) {
|
|
272
|
+
return "operator";
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Attempt to match a word operator
|
|
276
|
+
if (stream.match(wordOperators)) {
|
|
277
|
+
return "keyword";
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Attempt to match a keyword
|
|
281
|
+
var keywordMatch = stream.match(keywords);
|
|
282
|
+
if (keywordMatch) {
|
|
283
|
+
if (keywordMatch[0] == "comment") {
|
|
284
|
+
state.blockCommentTag = true;
|
|
285
|
+
}
|
|
286
|
+
return "keyword";
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Attempt to match a variable
|
|
290
|
+
if (stream.match(/\b(\w+)\b/)) {
|
|
291
|
+
state.waitDot = true;
|
|
292
|
+
state.waitPipe = true; // A property can be followed by a filter
|
|
293
|
+
return "variable";
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// If found closing tag reset
|
|
297
|
+
if (stream.match("%}")) {
|
|
298
|
+
state.waitProperty = null;
|
|
299
|
+
state.waitFilter = null;
|
|
300
|
+
state.waitDot = null;
|
|
301
|
+
state.waitPipe = null;
|
|
302
|
+
// If the tag that closes is a block comment tag, we want to mark the
|
|
303
|
+
// following code as comment, until the tag closes.
|
|
304
|
+
if (state.blockCommentTag) {
|
|
305
|
+
state.blockCommentTag = false; // Release the "lock"
|
|
306
|
+
state.tokenize = inBlockComment;
|
|
307
|
+
} else {
|
|
308
|
+
state.tokenize = tokenBase;
|
|
309
|
+
}
|
|
310
|
+
return "tag";
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// If nothing was found, advance to the next character
|
|
314
|
+
stream.next();
|
|
315
|
+
return "null";
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Mark everything as comment inside the tag and the tag itself.
|
|
319
|
+
function inComment (stream, state) {
|
|
320
|
+
if (stream.match(/^.*?#\}/)) state.tokenize = tokenBase
|
|
321
|
+
else stream.skipToEnd()
|
|
322
|
+
return "comment";
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// Mark everything as a comment until the `blockcomment` tag closes.
|
|
326
|
+
function inBlockComment (stream, state) {
|
|
327
|
+
if (stream.match(/\{%\s*endcomment\s*%\}/, false)) {
|
|
328
|
+
state.tokenize = inTag;
|
|
329
|
+
stream.match("{%");
|
|
330
|
+
return "tag";
|
|
331
|
+
} else {
|
|
332
|
+
stream.next();
|
|
333
|
+
return "comment";
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
return {
|
|
338
|
+
startState: function () {
|
|
339
|
+
return {tokenize: tokenBase};
|
|
340
|
+
},
|
|
341
|
+
token: function (stream, state) {
|
|
342
|
+
return state.tokenize(stream, state);
|
|
343
|
+
},
|
|
344
|
+
blockCommentStart: "{% comment %}",
|
|
345
|
+
blockCommentEnd: "{% endcomment %}"
|
|
346
|
+
};
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
CodeMirror.defineMode("django", function(config) {
|
|
350
|
+
var htmlBase = CodeMirror.getMode(config, "text/html");
|
|
351
|
+
var djangoInner = CodeMirror.getMode(config, "django:inner");
|
|
352
|
+
return CodeMirror.overlayMode(htmlBase, djangoInner);
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
CodeMirror.defineMIME("text/x-django", "django");
|
|
356
|
+
});
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: https://codemirror.net/5/LICENSE
|
|
3
|
+
|
|
4
|
+
(function(mod) {
|
|
5
|
+
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
6
|
+
mod(require("../../lib/codemirror"), require("../../addon/mode/simple"));
|
|
7
|
+
else if (typeof define == "function" && define.amd) // AMD
|
|
8
|
+
define(["../../lib/codemirror", "../../addon/mode/simple"], mod);
|
|
9
|
+
else // Plain browser env
|
|
10
|
+
mod(CodeMirror);
|
|
11
|
+
})(function(CodeMirror) {
|
|
12
|
+
"use strict";
|
|
13
|
+
|
|
14
|
+
var from = "from";
|
|
15
|
+
var fromRegex = new RegExp("^(\\s*)\\b(" + from + ")\\b", "i");
|
|
16
|
+
|
|
17
|
+
var shells = ["run", "cmd", "entrypoint", "shell"];
|
|
18
|
+
var shellsAsArrayRegex = new RegExp("^(\\s*)(" + shells.join('|') + ")(\\s+\\[)", "i");
|
|
19
|
+
|
|
20
|
+
var expose = "expose";
|
|
21
|
+
var exposeRegex = new RegExp("^(\\s*)(" + expose + ")(\\s+)", "i");
|
|
22
|
+
|
|
23
|
+
var others = [
|
|
24
|
+
"arg", "from", "maintainer", "label", "env",
|
|
25
|
+
"add", "copy", "volume", "user",
|
|
26
|
+
"workdir", "onbuild", "stopsignal", "healthcheck", "shell"
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
// Collect all Dockerfile directives
|
|
30
|
+
var instructions = [from, expose].concat(shells).concat(others),
|
|
31
|
+
instructionRegex = "(" + instructions.join('|') + ")",
|
|
32
|
+
instructionOnlyLine = new RegExp("^(\\s*)" + instructionRegex + "(\\s*)(#.*)?$", "i"),
|
|
33
|
+
instructionWithArguments = new RegExp("^(\\s*)" + instructionRegex + "(\\s+)", "i");
|
|
34
|
+
|
|
35
|
+
CodeMirror.defineSimpleMode("dockerfile", {
|
|
36
|
+
start: [
|
|
37
|
+
// Block comment: This is a line starting with a comment
|
|
38
|
+
{
|
|
39
|
+
regex: /^\s*#.*$/,
|
|
40
|
+
sol: true,
|
|
41
|
+
token: "comment"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
regex: fromRegex,
|
|
45
|
+
token: [null, "keyword"],
|
|
46
|
+
sol: true,
|
|
47
|
+
next: "from"
|
|
48
|
+
},
|
|
49
|
+
// Highlight an instruction without any arguments (for convenience)
|
|
50
|
+
{
|
|
51
|
+
regex: instructionOnlyLine,
|
|
52
|
+
token: [null, "keyword", null, "error"],
|
|
53
|
+
sol: true
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
regex: shellsAsArrayRegex,
|
|
57
|
+
token: [null, "keyword", null],
|
|
58
|
+
sol: true,
|
|
59
|
+
next: "array"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
regex: exposeRegex,
|
|
63
|
+
token: [null, "keyword", null],
|
|
64
|
+
sol: true,
|
|
65
|
+
next: "expose"
|
|
66
|
+
},
|
|
67
|
+
// Highlight an instruction followed by arguments
|
|
68
|
+
{
|
|
69
|
+
regex: instructionWithArguments,
|
|
70
|
+
token: [null, "keyword", null],
|
|
71
|
+
sol: true,
|
|
72
|
+
next: "arguments"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
regex: /./,
|
|
76
|
+
token: null
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
from: [
|
|
80
|
+
{
|
|
81
|
+
regex: /\s*$/,
|
|
82
|
+
token: null,
|
|
83
|
+
next: "start"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
// Line comment without instruction arguments is an error
|
|
87
|
+
regex: /(\s*)(#.*)$/,
|
|
88
|
+
token: [null, "error"],
|
|
89
|
+
next: "start"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
regex: /(\s*\S+\s+)(as)/i,
|
|
93
|
+
token: [null, "keyword"],
|
|
94
|
+
next: "start"
|
|
95
|
+
},
|
|
96
|
+
// Fail safe return to start
|
|
97
|
+
{
|
|
98
|
+
token: null,
|
|
99
|
+
next: "start"
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
single: [
|
|
103
|
+
{
|
|
104
|
+
regex: /(?:[^\\']|\\.)/,
|
|
105
|
+
token: "string"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
regex: /'/,
|
|
109
|
+
token: "string",
|
|
110
|
+
pop: true
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
double: [
|
|
114
|
+
{
|
|
115
|
+
regex: /(?:[^\\"]|\\.)/,
|
|
116
|
+
token: "string"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
regex: /"/,
|
|
120
|
+
token: "string",
|
|
121
|
+
pop: true
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
array: [
|
|
125
|
+
{
|
|
126
|
+
regex: /\]/,
|
|
127
|
+
token: null,
|
|
128
|
+
next: "start"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
regex: /"(?:[^\\"]|\\.)*"?/,
|
|
132
|
+
token: "string"
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
expose: [
|
|
136
|
+
{
|
|
137
|
+
regex: /\d+$/,
|
|
138
|
+
token: "number",
|
|
139
|
+
next: "start"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
regex: /[^\d]+$/,
|
|
143
|
+
token: null,
|
|
144
|
+
next: "start"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
regex: /\d+/,
|
|
148
|
+
token: "number"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
regex: /[^\d]+/,
|
|
152
|
+
token: null
|
|
153
|
+
},
|
|
154
|
+
// Fail safe return to start
|
|
155
|
+
{
|
|
156
|
+
token: null,
|
|
157
|
+
next: "start"
|
|
158
|
+
}
|
|
159
|
+
],
|
|
160
|
+
arguments: [
|
|
161
|
+
{
|
|
162
|
+
regex: /^\s*#.*$/,
|
|
163
|
+
sol: true,
|
|
164
|
+
token: "comment"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
regex: /"(?:[^\\"]|\\.)*"?$/,
|
|
168
|
+
token: "string",
|
|
169
|
+
next: "start"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
regex: /"/,
|
|
173
|
+
token: "string",
|
|
174
|
+
push: "double"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
regex: /'(?:[^\\']|\\.)*'?$/,
|
|
178
|
+
token: "string",
|
|
179
|
+
next: "start"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
regex: /'/,
|
|
183
|
+
token: "string",
|
|
184
|
+
push: "single"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
regex: /[^#"']+[\\`]$/,
|
|
188
|
+
token: null
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
regex: /[^#"']+$/,
|
|
192
|
+
token: null,
|
|
193
|
+
next: "start"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
regex: /[^#"']+/,
|
|
197
|
+
token: null
|
|
198
|
+
},
|
|
199
|
+
// Fail safe return to start
|
|
200
|
+
{
|
|
201
|
+
token: null,
|
|
202
|
+
next: "start"
|
|
203
|
+
}
|
|
204
|
+
],
|
|
205
|
+
meta: {
|
|
206
|
+
lineComment: "#"
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
CodeMirror.defineMIME("text/x-dockerfile", "dockerfile");
|
|
211
|
+
});
|