codemirror-lang-asp 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/NOTICE +30 -0
- package/README.md +55 -2
- package/dist/highlight.d.ts +2 -0
- package/dist/index.cjs +194 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +190 -0
- package/dist/keywords.d.ts +1 -0
- package/package.json +53 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 by Johannes Schuster <johannes.c.schuster@proton.me>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
lang-asp is licensed under the MIT licence in LICENSE.
|
|
2
|
+
|
|
3
|
+
The Lezer grammar (src/asp.grammar) and its external tokenizers (src/tokens.js) are
|
|
4
|
+
written by hand, starting from tree-sitter-clingo,
|
|
5
|
+
https://github.com/potassco/tree-sitter-clingo, whose grammar.json, scanner.c and test
|
|
6
|
+
corpus spec/clingo/ vendors at the version spec/clingo/SOURCE records. Where the two
|
|
7
|
+
differ, the grammar follows clingo's own parser, https://github.com/potassco/clingo.
|
|
8
|
+
tree-sitter-clingo is distributed under this licence:
|
|
9
|
+
|
|
10
|
+
MIT License
|
|
11
|
+
|
|
12
|
+
Copyright (c) 2022 Sven Thiele
|
|
13
|
+
|
|
14
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
15
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
16
|
+
in the Software without restriction, including without limitation the rights
|
|
17
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
18
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
19
|
+
furnished to do so, subject to the following conditions:
|
|
20
|
+
|
|
21
|
+
The above copyright notice and this permission notice shall be included in all
|
|
22
|
+
copies or substantial portions of the Software.
|
|
23
|
+
|
|
24
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
25
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
26
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
27
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
28
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
29
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
30
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,56 @@
|
|
|
1
|
-
#
|
|
1
|
+
# codemirror-lang-asp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Answer Set Programming support for [CodeMirror 6](https://codemirror.net/), for the input
|
|
4
|
+
language of [clingo](https://potassco.org/clingo/): a Lezer parser with highlighting,
|
|
5
|
+
folding, indentation, completion of `#` directives, and Python or Lua highlighting
|
|
6
|
+
inside `#script` blocks.
|
|
7
|
+
|
|
8
|
+
```js
|
|
9
|
+
import {EditorView, basicSetup} from "codemirror"
|
|
10
|
+
import {asp} from "codemirror-lang-asp"
|
|
11
|
+
|
|
12
|
+
new EditorView({extensions: [basicSetup, asp()], parent: document.body})
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## What it parses
|
|
16
|
+
|
|
17
|
+
The grammar targets clingo 5.8.2, with octal numbers as 5.8.3 reads them (`0o0` is
|
|
18
|
+
valid). It was started from
|
|
19
|
+
[tree-sitter-clingo](https://github.com/potassco/tree-sitter-clingo) v1.0.6 and also
|
|
20
|
+
accepts the syntax that grammar has beyond clingo 5.8: f-strings, `#sort` aggregates,
|
|
21
|
+
the projection `*`, `#show p/1. [true]`, and `_`, `(,)` and a guard without braces in
|
|
22
|
+
theory atoms. Operator precedence follows clingo, which
|
|
23
|
+
differs from tree-sitter-clingo for `^`, `?`, `&` and unary minus. Both versions are
|
|
24
|
+
recorded in `package.json` under `clingo`.
|
|
25
|
+
|
|
26
|
+
v1.0.6 is pinned because it is the latest tree-sitter-clingo release, and no tag targets
|
|
27
|
+
clingo 5.8: every one has f-strings. Against v1.0.5 it adds `#sort` aggregates and
|
|
28
|
+
parses `not not` as two tokens, so that any spacing between them works.
|
|
29
|
+
|
|
30
|
+
What the tests check, and nothing more: every fixture in the repository's
|
|
31
|
+
`fixtures/valid/` parses without error nodes here and is accepted by clingo's own parser;
|
|
32
|
+
every input of tree-sitter-clingo's test corpus at v1.0.6 parses without error nodes; and
|
|
33
|
+
the trees in `test/*.txt` are as written. No comparison with clingo's syntax trees is
|
|
34
|
+
made, and invalid programs are not checked to be rejected.
|
|
35
|
+
|
|
36
|
+
`%*! ... *%` doc comments are parsed as block comments.
|
|
37
|
+
|
|
38
|
+
## Files
|
|
39
|
+
|
|
40
|
+
Generated in the [lang-asp](https://github.com/jcschuster/lang-asp) repository by
|
|
41
|
+
`pnpm generate`:
|
|
42
|
+
|
|
43
|
+
- `src/keywords.ts`, the directives offered by completion, from tree-sitter-clingo's
|
|
44
|
+
grammar.
|
|
45
|
+
|
|
46
|
+
Written by hand:
|
|
47
|
+
|
|
48
|
+
- `src/asp.grammar`, the Lezer grammar;
|
|
49
|
+
- `src/tokens.js`, the tokenizers for nesting block comments and `#script` bodies;
|
|
50
|
+
- `src/highlight.ts`, the highlighting tags;
|
|
51
|
+
- `src/index.ts`, the language, folding, indentation, completion and nested parsing.
|
|
52
|
+
|
|
53
|
+
In the repository, `spec/clingo/` holds the vendored tree-sitter-clingo files and what
|
|
54
|
+
`pnpm generate` derives from them, and `gen/out/asp.imported.grammar` that grammar as
|
|
55
|
+
lezer-import-tree-sitter converts it, kept for reference; the scripts in `gen/`,
|
|
56
|
+
`gen/rule-map.json`, the fixtures and the tests are written by hand.
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var lr = require('@lezer/lr');
|
|
4
|
+
var highlight = require('@lezer/highlight');
|
|
5
|
+
var language = require('@codemirror/language');
|
|
6
|
+
var langPython = require('@codemirror/lang-python');
|
|
7
|
+
var lua = require('@codemirror/legacy-modes/mode/lua');
|
|
8
|
+
var common = require('@lezer/common');
|
|
9
|
+
|
|
10
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
11
|
+
const Code = 1,
|
|
12
|
+
BlockComment = 2;
|
|
13
|
+
|
|
14
|
+
const percent = 37, star = 42, hash = 35, newline = 10, space = 32, tab = 9, cr = 13;
|
|
15
|
+
|
|
16
|
+
// Nesting block comments `%* ... *%`, as in consume_blockcomment of
|
|
17
|
+
// spec/clingo/scanner.c (lines 129-163). Unlike that scanner, and like clingo
|
|
18
|
+
// (nongroundlexer.xch, the <blockcomment> and <comment> rules), a `%` inside a block
|
|
19
|
+
// comment starts a line comment, in which `%*` and `*%` do not count. An unterminated
|
|
20
|
+
// comment runs to the end of the input.
|
|
21
|
+
const blockComment = new lr.ExternalTokenizer(input => {
|
|
22
|
+
if (input.next != percent || input.peek(1) != star) return
|
|
23
|
+
input.advance(2);
|
|
24
|
+
for (let depth = 1; depth > 0 && input.next >= 0;) {
|
|
25
|
+
if (input.next == star && input.peek(1) == percent) {
|
|
26
|
+
input.advance(2);
|
|
27
|
+
depth--;
|
|
28
|
+
} else if (input.next == percent && input.peek(1) == star) {
|
|
29
|
+
input.advance(2);
|
|
30
|
+
depth++;
|
|
31
|
+
} else if (input.next == percent) {
|
|
32
|
+
while (input.next >= 0 && input.next != newline) input.advance();
|
|
33
|
+
} else {
|
|
34
|
+
input.advance();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
input.acceptToken(BlockComment);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
function isEnd(input, offset) {
|
|
41
|
+
return input.peek(offset) == hash && input.peek(offset + 1) == 101 &&
|
|
42
|
+
input.peek(offset + 2) == 110 && input.peek(offset + 3) == 100
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// The body of `#script (lang) ... #end.`: everything up to the first `#end`, less the
|
|
46
|
+
// blanks right before it, as clingo's <script_body> rule (nongroundlexer.xch) takes it.
|
|
47
|
+
const code = new lr.ExternalTokenizer((input, stack) => {
|
|
48
|
+
if (!stack.canShift(Code)) return
|
|
49
|
+
let end = 0;
|
|
50
|
+
while (input.peek(end) >= 0 && !isEnd(input, end)) end++;
|
|
51
|
+
if (input.peek(end) >= 0)
|
|
52
|
+
while (end > 0 && [space, tab, cr].includes(input.peek(end - 1))) end--;
|
|
53
|
+
if (end > 0) input.acceptToken(Code, end);
|
|
54
|
+
}, {contextual: true});
|
|
55
|
+
|
|
56
|
+
const aspHighlighting = highlight.styleTags({
|
|
57
|
+
"#const #defined #edge #end #external #heuristic #include #maximise #maximize #minimise #minimize #program #project #script #show #theory": highlight.tags.keyword,
|
|
58
|
+
"#count #sum #sum+ #min #max #sort": highlight.tags.standard(highlight.tags.function(highlight.tags.variableName)),
|
|
59
|
+
not: highlight.tags.operatorKeyword,
|
|
60
|
+
"default override true false unary binary left right head body any directive": highlight.tags.modifier,
|
|
61
|
+
"#true #false": highlight.tags.bool,
|
|
62
|
+
"Infimum Supremum": highlight.tags.atom,
|
|
63
|
+
Variable: highlight.tags.variableName,
|
|
64
|
+
"Anonymous Projection": highlight.tags.special(highlight.tags.variableName),
|
|
65
|
+
"HeadAtom/Identifier": highlight.tags.definition(highlight.tags.propertyName),
|
|
66
|
+
"SymbolicAtom/Identifier Signature/Identifier": highlight.tags.propertyName,
|
|
67
|
+
"Function/Identifier TheoryFunction/Identifier": highlight.tags.function(highlight.tags.variableName),
|
|
68
|
+
"ExternalFunction/Identifier ExternalFunction/@": highlight.tags.special(highlight.tags.function(highlight.tags.variableName)),
|
|
69
|
+
'TheoryAtom/Identifier TheoryAtom/"&" TheoryAtomDefinition/"&"': highlight.tags.macroName,
|
|
70
|
+
"Theory/Identifier TheoryTermDefinition/Identifier TheoryAtomDefinition/Identifier": highlight.tags.typeName,
|
|
71
|
+
"Const/Identifier": highlight.tags.definition(highlight.tags.constant(highlight.tags.variableName)),
|
|
72
|
+
"Program/Identifier": highlight.tags.namespace,
|
|
73
|
+
"Script/Identifier": highlight.tags.labelName,
|
|
74
|
+
"Include/Identifier": highlight.tags.special(highlight.tags.string),
|
|
75
|
+
Number: highlight.tags.number,
|
|
76
|
+
'String/... FString "f\\"" FString/"\\""': highlight.tags.string,
|
|
77
|
+
Escape: highlight.tags.escape,
|
|
78
|
+
'FStringField/"{" FStringField/"}"': highlight.tags.special(highlight.tags.brace),
|
|
79
|
+
FStringFormat: highlight.tags.special(highlight.tags.string),
|
|
80
|
+
'"=" "==" "!=" "<>" "<" "<=" ">" ">="': highlight.tags.compareOperator,
|
|
81
|
+
'".." "+" "-" "*" "/" "\\\\" "**" "^" "?" "&" "~" "@" Abs/"|"': highlight.tags.arithmeticOperator,
|
|
82
|
+
'HeadAtom/"-" SymbolicAtom/"-" Signature/"-" Disjunction/"|"': highlight.tags.logicOperator,
|
|
83
|
+
TheoryOperator: highlight.tags.operator,
|
|
84
|
+
'":-" ":~" Const/"="': highlight.tags.definitionOperator,
|
|
85
|
+
'Include/"<" Include/">"': highlight.tags.angleBracket,
|
|
86
|
+
'"(" ")"': highlight.tags.paren,
|
|
87
|
+
'"[" "]"': highlight.tags.squareBracket,
|
|
88
|
+
'"{" "}"': highlight.tags.brace,
|
|
89
|
+
'"," ";"': highlight.tags.separator,
|
|
90
|
+
'"." ":"': highlight.tags.punctuation,
|
|
91
|
+
LineComment: highlight.tags.lineComment,
|
|
92
|
+
BlockComment: highlight.tags.blockComment,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
96
|
+
const spec_Identifier = {__proto__:null,not:16, true:231, false:233, default:257, override:259, unary:287, binary:289, left:291, right:293, head:297, body:299, any:301, directive:303};
|
|
97
|
+
const parser = lr.LRParser.deserialize({
|
|
98
|
+
version: 14,
|
|
99
|
+
states: "!=`Q]QUOOO#{O!bO'#CiO$WO#tO'#CmO&VQYO'#CyO&pQUO'#CzO&uQUO'#C}O'|QUO'#DRO*bQYO'#GeO*iQUO'#D^O'|QUO'#D^OOQQ'#G`'#G`OOQQ'#Dk'#DkOOQQ'#GZ'#GZO*pQUO'#GZO+qQYO'#GYO,VQUO'#FrO,_QUO'#FrO,dQUO'#DnOOQQ'#Dn'#DnO,kQUO'#DuO-WQUO'#DuOOQQ'#Dy'#DyO-_QUO'#DxO-dQUO'#EQOOQQ'#GY'#GYO-iQUO'#CbO-qQUO'#EdO/QQUO'#EfO0aQUO'#EgO0aQUO'#EkO0fQUO'#EnO0sQUO'#EuO0{QUO'#EwO1QQUO'#EzO1YQUO'#E{O1bQUO'#FOO1gQUO'#FSO1lQUO'#FVO1tQUO'#FXO1QQUO'#FZO1yQUO'#F]OOQQ'#GX'#GXOOQQ'#Fj'#FjQ]QUOOO2OQUO'#G[OOOO'#Fk'#FkO3iO!bO,59TOOQQ,59T,59TO3tQUO'#CqOOOO'#Fl'#FlO4oO#tO,59XOOQQ,59X,59XO6kQYO,59eO7UQUO'#G]O8ZQYO,59fO9vQYO'#CyO:jQUO'#GcOOQQ'#Gc'#GcO:uQUO,59iO;oQYO'#G_OOQQ'#G_'#G_O;|QYO,59mO'|QUO,59nO'|QUO,59nO'|QUO,59nO'|QUO,59nO'|QUO,59nO'|QUO,59nOOQQ'#Db'#DbO<WQUO,5=PO=lQYO,59{O=sQYO,59POOQQ,59x,59xO>^QYO'#DaOOQQ,5<u,5<uO>zQUO,5:_OOQQ,5<^,5<^O?hQYO,5:YOOQQ-E9p-E9pOOQQ,5:Y,5:YO?|QYO'#DwO@XQUO,5:aO@{QUO,5:aOATQUO,5:aOA_QUO,5:dOAdQYO,5:dOAnQbO,5:lOOQQ,58|,58|OBYQUO,58|OCVQYO'#CyOCpQYO'#GeOCwQUO'#D^OOQQ'#Gd'#GdODOQUO'#GdODuQUO'#E]OE]QUO'#E]OEdQUO'#E_OEiQYO'#GmOOQQ'#Gm'#GmOEwQUO'#E[OEzQUO'#E[OB]QUO'#E[OOQQ,5;O,5;OOFSQUO,5;OOFXQUO,5;QOF^QUO,5;QOFcQUO'#GoOFjQUO,5;ROFoQUO,5;VOGoQYO'#CyOGvQYO,5;[OHQQUO'#D^OOQQ,5;Y,5;YOHXQUO,5;]OH^QUO'#ErOHcQUO'#ErOHhQUO,5;aO'|QUO,5;cOHmQYO'#DrOHxQUO'#DrOH}QYO,5;fOIVQYO'#DrOIeQUO'#DrOIjQUO,5;gOH}QYO,5;iOIoQUO,5;jOItQUO,5;nOIyQUO,5;qOJOQUO,5;qOJTQUO,5;sOH}QYO,5;uOJ]QUO,5;wOOQQ-E9h-E9hOOQQ,5<v,5<vOOOO-E9i-E9iOOQQ1G.o1G.oOKPQrO,59]OLRQrO'#CyOOOO-E9j-E9jOOQQ1G.s1G.sOL]QUO'#G^OLhQUO,5<wOOQQ1G/Q1G/QOOQQ,59e,59eOLpQUO,5<}OL}QUO,5<}O&uQUO'#FnOMYQUO1G/TOOQQ1G/T1G/TO'|QUO'#FoOMbQUO1G/XOOQQ1G/X1G/XO! sQYO1G/YO! zQYO1G/YO!$[QYO1G/YO!$cQYO1G/YO!&mQYO1G/YO!&zQYO1G/YO!'XQYO,5<]O'|QUO'#FqOOQQ-E9o-E9oO!([QYO1G.kO!(uQUO'#GdO!)VQUO'#DqO!)kQUO1G/uP!)yQYO'#DsO!*XQUO,5:cO!*rQYO'#GfO'|QUO'#GfOOQQ1G/{1G/{O,dQUO'#FtO!+SQUO1G/{O!+[QUO1G/{O!+SQUO1G/{O!,OQYO1G0OO!,YQYO'#GgO,dQUO'#EPO!,jQYO'#EPO!,oQUO1G0OO!-cQUO1G0OOOQQ'#Gj'#GjO!-kQbO1G0WO!.cQbO1G0WO!.mQbO1G0WOOQQ1G.h1G.hO!/UQUO1G.hO!/ZQYO,59eO!/tQUO,5:{O!1UQYO,5:^OOQQ,5=O,5=OOOQQ,5=X,5=XO!1oQYO'#E^O!1zQUO,5:wO!2qQUO,5:wO!2yQUO,5:wO!3aQUO,5:yO!3fQYO,5:yO!3pQUO,5:}OOQQ,5<g,5<gO!4ZQUO,5:vO!4^QUO,5:vOOQQ-E9y-E9yOOQQ1G0j1G0jO'|QUO1G0lO!4fQUO1G0lO!4kQYO'#GnO!5RQYO'#EjOOQQ,5=Z,5=ZO!5aQUO,5=ZOOQQ1G0m1G0mOOQQ1G0q1G0qO!5iQUO,5;^OOQQ'#Gp'#GpO!5nQUO'#GpOOQQ1G0v1G0vO!6kQYO,5;^O!6rQUO1G0wO!9hQUO,5;^OOQQ1G0{1G0{O!9mQYO1G0}OOQQ,5:^,5:^O!9tQYO,5:^O!:PQUO1G1QO!:UQYO,5:^OOQQ1G1R1G1ROOQQ1G1T1G1TO'|QUO1G1UO!:dQUO1G1YOOQQ1G1]1G1]O!:iQUO1G1]OOQQ1G1_1G1_O!:nQUO1G1_O!:vQUO1G1aO!=lQUO1G1cOOOO1G.w1G.wO!=wQUO1G.wO!=|QrO,59fO!>TQUO'#FmO!>[QUO,5<xO7UQUO'#FpO!>gQUO1G2cOOQQ1G2c1G2cOOQQ,5<X,5<XO!>oQUO1G2iOOQQ-E9k-E9kOOQQ,5<Y,5<YOOQQ-E9l-E9lOOQQ7+$o7+$oO!>|QYO,5<ZOOQQ-E9m-E9mOOQQ7+$s7+$sO<nQUO,59{O!?WQUO'#FsO!?kQUO,5:]P!@PQUO,5:_OOQQ1G/}1G/}O!@gQYO,5=QOOQQ,5<`,5<`OOQQ-E9r-E9rO!@wQUO7+%gOOQQ7+%g7+%gO!AkQUO7+%gO!AsQUO7+%jO!BgQUO7+%jO'|QUO'#FuO!BoQYO,5=RO!B}QYO,5:kO,dQUO,5:kOOQQ7+%j7+%jOAgQYO'#FvO!BgQUO7+%jOOQQ'#Fw'#FwO!-kQbO'#GiO!CYQbO'#ETO!C}QbO'#EUO!DXQbO'#EXO!D`QbO'#EYOOQQ'#Gl'#GlOOQQ'#Gk'#GkO!DgQbO'#GiOOQQ7+%r7+%rO!EXQYO'#GhO!EgQYO'#ERO!ErQUO'#ERO!F]QbO7+%rO!FqQUO7+%rO!-kQbO7+%rO!FyQbO7+%rOOQQ7+$S7+$SO!GTQUO1G0gO!GYQYO1G/xO!GsQUO,5:xOOQQ1G0c1G0cO!?WQUO'#F|O!H^QUO1G0cO!HfQUO1G0cO!H^QUO1G0cO!I]QYO1G0eO!IgQYO'#E`O!IrQUO'#E`O!J]QUO1G0eO!KSQUO1G0eOOQQ1G0i1G0iP!K[QUO'#F{P!K_QUO'#F{O!KdQUO7+&WO'|QUO7+&WO'|QUO,5=YO!KlQUO,5;UO'|QUO,5;UO'|QUO'#GOO!LVQUO1G2uOOQQ1G2u1G2uOOQQ1G0x1G0xOOQQ,5=[,5=[O!L_QUO,5=[O!LdQUO1G0xO!LiQUO7+&cO'|QUO7+&iOOQQ1G/x1G/xO'|QUO7+&lO!LqQYO7+&pO!LxQVO7+&tO!MQQUO7+&wO!MVQUO7+&yO!M[QUO7+&yO'|QUO7+&{O!MdQUO'#F_OOQQ'#Gq'#GqO!MiQUO7+&}O!MnQUO7+&}O!MvQUO'#FeOOOO7+$c7+$cO!M{QrO1G/YO!N}QrO1G/YO# UQrO1G/YO# }QrO1G/YO#!XQrO1G/YO#!cQrO1G/YOOQQ,5<[,5<[OOQQ-E9n-E9nOOQQ7+'}7+'}OOQQ,5<_,5<_OOQQ-E9q-E9qPOQQ1G/u1G/uOOQQ<<IR<<IRO##ZQUO<<IROOQQ<<IU<<IUO##}QUO<<IUO#$VQUO<<IUO#$yQYO,5<aOOQQ-E9s-E9sO#%^QUO1G0VO#%wQYO1G0VOOQQ,5<b,5<bOOQQ-E9t-E9tOOQQ-E9u-E9uO#&SQbO,5=TO#&tQbO,5:oOOQQ,5:p,5:pO#&{QUO,5:pO#'TQUO,5:pOOQQ,5:s,5:sO#'YQUO,5:sO#'_QUO'#GhOOQQ,5:t,5:tO#'mQUO,5:tO!-kQbO'#FyO#&SQbO,5=TO!-kQbO'#FxO#'rQYO,5=SO#(QQUO,5:mOOQQ,5:m,5:mO!-kQbO<<I^O!.fQbO'#FzO#(kQUO<<I^O#(sQbO<<I^OOQQ<<I^<<I^O#(kQUO<<I^O#)XQYO7+&ROOQQ1G0d1G0dOOQQ,5<h,5<hOOQQ-E9z-E9zO#)cQUO7+%}OOQQ7+%}7+%}O#*YQUO7+%}O#*bQUO7+&PO#+XQUO7+&PO#+aQUO,5:zOOQQ,5:z,5:zOOQQ7+&P7+&PO!3iQYO'#F}O#+XQUO7+&POOQQ<<Ir<<IrO'|QUO<<IrO#+zQUO<<IrO#,SQYO1G2tOOQQ1G0p1G0pO#,gQYO1G0pOOQQ,5<j,5<jOOQQ-E9|-E9|OOQQ7+(a7+(aOOQQ1G2v1G2vOOQQ7+&d7+&dO#,rQUO<<I}O#,wQYO<<JTO#-RQUO<<JWO#-WQUO<<J[O#/|QUO<<J`O#0RQUO<<J`OOQQ<<Jc<<JcOOQQ<<Je<<JeO#0WQUO'#GQO#0]QUO<<JeO#0eQUO<<JeO#0jQYO<<JgO#0qQbO,5;yOOQQ<<Ji<<JiO#0|QUO'#GTO#1UQUO<<JiO#1^QUO<<JiO#1cQUO,5<POOQQAN>mAN>mO#1hQUOAN>pOOQQAN>pAN>pOOQQ7+%q7+%qO#2[QUO7+%qO#2uQbO1G2oOOQQ1G0Z1G0ZO#3gQUO1G0ZO#3lQbO1G0[O#3sQUO1G0[OOQQ1G0[1G0[OOQQ1G0_1G0_O#3{QUO,5=SOOQQ1G0`1G0`OOQQ,5<e,5<eOOQQ-E9w-E9wOOQQ,5<d,5<dOOQQ-E9v-E9vOOQQ1G0X1G0XOOQQAN>xAN>xOOQQ,5<f,5<fOOQQ-E9x-E9xO#4ZQbOAN>xO!-kQbOAN>xO#4oQUOAN>xOOQQ<<Im<<ImO#4wQUO<<ImOOQQ<<Ii<<IiO#5PQUO<<IiOOQQ<<Ik<<IkO#5vQUO<<IkO#6OQUO<<IkOOQQ1G0f1G0fOOQQ,5<i,5<iOOQQ-E9{-E9{O#6uQUOAN?^OOQQAN?^AN?^O'|QUOAN?^O#6zQUO7+&[OOQQAN?iAN?iO'|QUO'#GPO#7eQUOAN?oOH}QYOAN?oO'|QUOAN?rO#7mQUOAN?vOOQQAN?zAN?zO#7uQUOAN?zOOQQ,5<l,5<lOOQQ-E:O-E:OO#7zQUOAN@POOQQAN@PAN@POOQQAN@RAN@ROOQQ1G1e1G1eO#8PQUO1G1eO#8XQYO'#F`OOQQ,5<o,5<oOOQQ-E:R-E:RO#8^QUOAN@TOOQQAN@TAN@TO#8cQUO1G1kOOQQG24[G24[OOQQ<<I]<<I]OOQQ7+%u7+%uOOQQ7+%v7+%vO#8hQbO7+%vO!-kQbOG24dOOQQG24dG24dO#8oQbOG24dO#9TQUOAN?XOOQQAN?XAN?XOOQQAN?TAN?TO#9]QUOAN?VOOQQAN?VAN?VO#:SQUO,5=ROOQQG24xG24xO#:[QUOG24xOOQQ<<Iv<<IvO#:aQYO,5<kOOQQ-E9}-E9}OH}QYOG25ZOOQQG25ZG25ZO#:hQYOG25^O#:oQUOG25bOOQQG25fG25fOOQQG25kG25kO#:tQbO'#GRO#:|QUO7+'POOQQ7+'P7+'PO#;UQUO,5;zOOQQG25oG25oO#;ZQYO7+'VOOQQ<<Ib<<IbOOQQLD*OLD*OO!-kQbOLD*OOOQQG24sG24sOOQQG24qG24qOOQQLD*dLD*dO'|QUO1G2VOOQQLD*uLD*uOOQQLD*xLD*xOOQQLD*|LD*|OOQQ,5<m,5<mOOQQ-E:P-E:POOQQ<<Jk<<JkO#;`QUO1G1fO#;eQUO<<JqOOQQ!$'Mj!$'MjO#;jQYO7+'qO#;tQUO7+'QO#;|QUOAN@]OOQQ<<Jl<<JlO#<RQUO<<JlO#<WQUOG25wO#<iQUOAN@WOOQQLD+cLD+cO#<qQbOLD+cOOQQG25rG25rO#<|QUO!$'N}O#=RQUO!$'N}O#=ZQUO!)9DiO#:tQbO'#GSO#=`QUO!)9DiO#=hQUO!)9DiO#=mQUO!.K:TOOQQ,5<n,5<nOOQQ-E:Q-E:QO#=rQUO!.K:TO#=wQUO!.K:TO#=|QUO!4//oO#>[QUO!4//oO#>aQUO!4//oOOQQ!9A%Z!9A%ZO#>fQUO!9A%ZO#>kQUO!9A%ZO#>yQUO!?$HuOOQQ!?$Hu!?$HuOOQQ!D6>a!D6>aO#?XQUO'#CzO3tQUO'#D^O3tQUO,59nO3tQUO,59nO3tQUO,59nO3tQUO,59nO3tQUO,59nO3tQUO,59nO>^QYO'#DaO!(uQUO'#GdO#?^QYO'#Gg",
|
|
100
|
+
stateData: "#?r~O$zOSROSQOS~OVROW|OYWOZTO[YO^PObQOiYOjYOkYOlYOoSOtUOzgO!RXO!`ZO!aZO!jcO!neO!oeO!peO!qeO!reO!}jO#XkO#[lO#]lO#`mO#amO#cnO#joO#lpO#mqO#prO#ssO#wtO#zuO#|vO$OwO$QxO~O_}O`!PO%T}O~Oc!ROf!QOh!TO%U!RO~OZ!VOYmXwmXxmXymXzmX{mX|mX}mX!OmX!PmX!VmX!WmX!XmX!YmX!ZmX![mX!]mX!^mX!jmX!nmX!omX!pmX!qmX!rmX~OTXXrXXsXXtXX!dXX!}XXdXX~P$fOV!WO~OV!XOYXOZTO[YO^PObQOiYOjYOkYOlYOoSOr!ZOtUO!RXO!S!^Op%VPs%VP~OV!XOYXOZTO[YO^PObQOiYOjYOkYOlYOoSOtUO!RXO~OY!dOw!`Ox!aOy!bOz!cO{!dO|!eO}!eO!O!eO!P!eO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fO!j%XX!n%XX!o%XX!p%XX!q%XX!r%XX~O!V!fO~P(wOV!iO~P(POVROYWOZTO[YO^PObQOiYOjYOkYOlYOoSOtUO!RXO!`ZO!aZO~Or!nOs!nOt!nO!d!mOT$|X!}$|X~Os!nOt!nO~Os!nO~OW|O~P*pOW|Od!sO~P*pO!neO!oeO!peO!qeO!reO~O!j!uO~P,uO!j!wO~OV!xO~OT!yO!}!zO~OT#YOV!{OW|OY!}OZTO[YO^PObQOiYOjYOkYOlYOoSOtUOzgO!RXO!`ZO!aZO!j#QO~P,uOT#[OV!{OW|OY!}OZTO[YO^PObQOiYOjYOkYOlYOoSOtUOzgO!RXO!`ZO!aZO!j#QO~P,uO!j#^O~OT#dOV#aOY#cO~P(SOV#fOY#gO~OZ#iO~OV#jOY#kO~OV#mOY#nO~OV#qO~OZ#rO~O^PO!Z#tO~OV#uO~OV#wO~OW#yOV%OXY%OXZ%OX[%OX^%OXb%OXi%OXj%OXk%OXl%OXo%OXt%OX!R%OX!`%OX!a%OXz%OX!j%OX!n%OX!o%OX!p%OX!q%OX!r%OX~O_}O`#{O%T}O~OV#}OY-WOZTO[YO^PObQOiYOjYOkYOlYOo-VOtUO!R-WO~Oc!ROf!QOh$PO%U!RO~OYmawmaxmaymazma{ma|ma}ma!Oma!Pma!Vma!Wma!Xma!Yma!Zma![ma!]ma!^ma!jma!nma!oma!pma!qma!rma~OTXarXasXatXa!dXa!}XadXa~P4}O!S!^Op%QPs%QP~P'|OZ!VOYnawnaxnaynazna{na|na}na!Ona!Pnadna~O!Vna!Wna!Xna!Yna!Zna![na!]na!^na!jna!nna!ona!pna!qna!rnapnarnasnatnaTna!dna!}naona!yna~P7cOpmXrmXsmXtmXTmX!dmX!}mXdmXomX!ymX~P$fOr$UOp%VXs%VX~Op$YOs$WO~OY!dOw!`Ox!aOy!bOz!cO{!dO|!eO}!eO!O!eO!P!eO~Op%RXr%RXs%RX~P:}Os$ZOt$]O~P:}O!j%Xa!n%Xa!o%Xa!p%Xa!q%Xa!r%Xa~P'|O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!Tar!Tas!Tat!Ta!}!Tad!Ta~O!d!Ta~P<nOTXarXasXatXa!dXa!}XadXa~P$fO!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fO~P:}OV!{OW|OY!}O!`ZO!aZOT!has!ga!}!ha~P(SOr!nOs!nOt!nO!d!mOT!ba!}!ba~O!d$lOd!kXs!kX~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!ia!}!ia~P'|Od$rOs$pO~OW|Od$rO~P*pO!j$tO~Od$xO!d$vO~P'|OW$zOZ!VO!j$|O!v$zOT!ta!}!tar!tas!ta~OT%OOV!{OW|OY!}OzgO!`ZO!aZO!j#QO!neO!oeO!peO!qeO!reO~P(SOT!fXr!fXs!fX!d!fXt!fX!}!fXd!fX~P$fO!V%RO~P(wOV%SO~P(POV!{OY!}OzgO!`ZO!aZO!j#QO!neO!oeO!peO!qeO!reO~P(SOV!{OW|OY!}Od%WO!`ZO!aZO~P(SO!j%YO~P,uO!j%[O~O!d%]OT%aXr%aXs%aX~Or%^Os%^OT#OX~OT%bO~O!z%cO~OT%dO~Od%gO~P'|OT%iO~OT%jO~OZ!VOTmXYmXwmXxmXymXzmX{mX|mX}mX!OmX!PmX!dmX~O}%kO~PFtOT%lO!d%mO~P:}OV%oO~P(POT%pO~O}%kO~OV%qO~OT%rO~OZ!VOT!fX!d!fX~OV%uO~OT%lO!d%mO~OZ!VO}%kOT!fX!d!fX~OV%wO~OT%xO~O!V%zO~OV%{O~OT%|O~OV%}O~OT&OOZ&PO~O!j&RO~OY-]Ox-YOy-ZOz-[O{-]O|-^O}-^O!O-^O!P-^O~Od&SOg&TOw-XO~PJbOZ!VOYmXwmXxmXymXzmX{mX|mX}mX!OmX!PmX~OdmXgmX~PK^Or&VOp%QXs%QX~Op&ZOs&XO~O!S!^Op%Vas%Va~P'|Or&]Op%Vas%Va~Op&aOs$WO~Os$ZOt&dO~OY!dOy!bOz!cO{!dO|!eO}!eO!O!eO!P!eOwvi!Vvi!Wvi!Xvi!Yvi!Zvi![vi!]vi!^vi!jvi!nvi!ovi!pvi!qvi!rvipvirvisvitviTvi!dvi!}vidviovi!yvi~Ox!aO~PMjOxvi~PMjOY!dO{!dO|!eO}!eO!O!eO!P!eOwvixviyvi!Vvi!Wvi!Xvi!Yvi!Zvi![vi!]vi!^vi!jvi!nvi!ovi!pvi!qvi!rvipvirvisvitviTvi!dvi!}vidviovi!yvi~Oz!cO~P!!ROzvi~P!!RO!P!eOYviwvixviyvizvi{vi!Vvi!Wvi!Xvi!Yvi!Zvi![vi!]vi!^vi!jvi!nvi!ovi!pvi!qvi!rvipvirvisvitviTvi!dvi!}vidviovi!yvi~O|!eO}!eO!O!eO~P!$jO|vi}vi!Ovi~P!$jOT$ear$eas$eat$ea!V$ea!W$ea!X$ea!Y$ea!Z$ea![$ea!]$ea!^$ea!d$ea!}$ead$ea~P:}OTXirXisXitXi!dXi!}XidXi~P4}OV!{OY!}O!`ZO!aZO~P(SOr&fOT!eXs!eXt!eX!}!eXd!eX~OT!his!cit!ci!}!hi~Or!nOs!nOt!nO!d&hO~OV!{OW|OY!}O!`ZO!aZOd!kas!ka~P(SOT%YX!}%YXr%YXs%YX~P:}Od&mOs$pO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!ii!}!ii~P'|Od&pO!d$vO~P'|Or&rO!d%ZXd%ZXs%ZX~P:}O!d&uO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!li!}!li~P'|Od&pOs&wO~OV&{OW$zOZ&|O['QO^POi'QOj'QOk'QOl'QO!j'OO!v$zO!z&}O~Od'WO!d'VO~P!-kOW$zO!j'ZO!v$zOT!ti!}!tir!tis!ti~OT'[O~OT!far!fas!fa!d!fat!fa!}!fad!fa~P4}O#U']OV!UXY!UXZ!UX[!UX^!UXb!UXi!UXj!UXk!UXl!UXo!UXt!UX!R!UX!j!UX!n!UX!o!UX!p!UX!q!UX!r!UX~OT!far!fas!fa!d!fat!fa!}!fad!fa~P$fO!d'_Od#QXs#QX~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Par#Pas#Pa~P'|Od'cOs'aO~OV!{OW|OY!}Od'cO!`ZO!aZO~P(SO!j'eO~Od'hO!d'gO~P'|OV!{OW|OY!}O!`ZO!aZOT#Vas#Va~P(SOr%^Os%^OT#Oa~O!z'nO~Oo'oOd%bXr%bXs%bX!d%bX!y%bX~P:}Or'qO!d'pOd#^Xs#^X~Od'tOs'rO~O['uO~OT'vOV!{OW|OY!}OzgO!`ZO!aZO!j#QO!neO!oeO!peO!qeO!reO~P(SO}'xO~PFtO!z'yOV#eiW#eiY#eiZ#ei[#ei^#eib#eii#eij#eik#eil#eio#eit#eiz#ei!R#ei!`#ei!a#ei!j#ei!n#ei!o#ei!p#ei!q#ei!r#ei!}#ei#X#ei#[#ei#]#ei#`#ei#a#ei#c#ei#j#ei#l#ei#m#ei#p#ei#s#ei#w#ei#z#ei#|#ei$O#ei$Q#ei$x#ei~O}'xO~Or'zO~P:}OZ!VOT!fa!d!fa~O!z'|O~OZ!VO}'xOT!fa!d!fa~Op(OO~O!](PO~OV(ROp(QO~O!z(SOV#}iW#}iY#}iZ#}i[#}i^#}ib#}ii#}ij#}ik#}il#}io#}it#}iz#}i!R#}i!`#}i!a#}i!j#}i!n#}i!o#}i!p#}i!q#}i!r#}i!}#}i#X#}i#[#}i#]#}i#`#}i#a#}i#c#}i#j#}i#l#}i#m#}i#p#}i#s#}i#w#}i#z#}i#|#}i$O#}i$Q#}i$x#}i~OV(TOd(VOz(XO~Od(YO~Ogna~P7cO!S!^O~P'|Or&VOp%Qas%Qa~Op(cOs&XO~O!S!^Op%Vis%Vi~P'|Os$cat$ca~P:}OV!{OW|OY!}O!`ZO!aZO~P(SOr&fOT!eas!eat!ea!}!ead!ea~OV!{OW|OY!}O!`ZO!aZOs!ga~P(SOT%Ya!}%Yar%Yas%Ya~P:}O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!iq!}!iq~P'|Od(hOs$pO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!lq!}!lq~P'|Od(kOs&wO~Or&rO!d%Zad%Zas%Za~O!d(nOd!sas!sa~OZ(tOT!wXW!wX!v!wX!}!wXd!wXr!wXs!wX!d!wXp!wX!y!wX~Op(uOr(wO~P!-kO!y(xO~P!-kOd({O~P!-kOW$zO!v$zOT%]X!}%]Xd%]Xr%]Xs%]X!d%]Xp%]X!y%]X~Or)POd%[Xs%[X!d%[X~O!d)ROd!uXs!uX~OV!{OW|OY!}O!`ZO!aZOd!uXs!uX~P(SOW$zO!v$zOT!tq!}!tqr!tqs!tq~Od)WOs)UO~Od)WO!d'VO~P!-kO!j)ZO~OT!fir!fis!fi!d!fit!fi!}!fid!fi~P4}OV!{OW|OY!}O!`ZO!aZOd#Qas#Qa~P(SOd)_Os'aO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Pir#Pis#Pi~P'|Od)bO!d'gO~P'|O!d)dOd#SXs#SX~OV!{OW|OY!}O!`ZO!aZOd#SXs#SX~P(SO!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Rir#Ris#Ri~P'|Od)bOs)gO~Or%^Os%^O~Or)jO!y)iO~OV!{OW|OY!}O!`ZO!aZOd#^as#^a~P(SOd)qOs'rO~OT)rO~O[)sO~O#g)tO#h)tO~OT)wO~P:}OP)yO#x)xO~OT)zO~OT){O~Op*OOr)|O~O!j*QO~OT*RO~Od*UOs*SO~OV*VO~Odvigviwvi~PJbOY-]Oz-[O{-]O|-^O}-^O!O-^O!P-^Odvigviwvixvi~Oy-ZO~P!NYOyvi~P!NYO|-^O}-^O!O-^O!P-^Odvigviwvixviyvizvi~OY-]O{-]O~P# ]OYvi{vi~P# ]O!P-^OYvidvigviwvixviyvizvi{vi|vi}vi!Ovi~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!iy!}!iy~P'|Od*XOs&wO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!ly!}!ly~P'|Or$ia!d$iad$ias$ia!y$ia~P:}OV!{OW|OY!}O!`ZO!aZOd!sis!si~P(SO!d*[Od!sis!si~OW$zO!v$zOT%]a!}%]ad%]ar%]as%]a!d%]ap%]a!y%]a~Op*^O~P!-kOp*bOr*`O~Op*bO~O!y*cO~Or)PO!y%[Xd%[Xp%[X~Od*eO~Or)POd%[as%[a!d%[a~OV!{OW|OY!}O!`ZO!aZOd!uas!ua~P(SOd*nOs)UO~OW$zO!v$zOT!ty!}!tyr!tys!ty~Od*qO!d'gO~P'|O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Pqr#Pqs#Pq~P'|Od*tOs'aO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Rqr#Rqs#Rq~P'|Od*wOs)gO~OV!{OW|OY!}O!`ZO!aZOd#Sas#Sa~P(SOr*}O!y*|O~Od%bir%bis%bi!d%bi!y%bi~P:}O!d+OOd#^is#^i~O!y+PO~Op+SOs+QO~P:}Or+TO~O!z+UOV#ryW#ryY#ryZ#ry[#ry^#ryb#ryi#ryj#ryk#ryl#ryo#ryt#ryz#ry!R#ry!`#ry!a#ry!j#ry!n#ry!o#ry!p#ry!q#ry!r#ry!}#ry#X#ry#[#ry#]#ry#`#ry#a#ry#c#ry#j#ry#l#ry#m#ry#p#ry#s#ry#w#ry#z#ry#|#ry$O#ry$Q#ry$x#ry~OT+VO~O#x+WO~OV+XO~Op+ZOr)|O~OT+[O~O!y+]O~P:}OW$zOd+^O!v$zO~OV(TOz(XO~Od+cOs*SO~OT+dO~O}+eO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!l!R!}!l!R~P'|OV!{OW|OY!}O!`ZO!aZOd!sqs!sq~P(SOW$zO!v$zOT%]i!}%]id%]ir%]is%]i!d%]ip%]i!y%]i~Op+hO~Op+iO~P!-kOp+iOr+jO~Or)PO!y%[ad%[ap%[a~OW$zO!v$zOT!t!R!}!t!Rr!t!Rs!t!R~Od+mOs)UO~Od+oOs)gO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Pyr#Pys#Py~P'|Od+qOs)gO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Ryr#Rys#Ry~P'|O!y+tO~OV!{OW|OY!}O!`ZO!aZOd#^qs#^q~P(SOp+yOs+QO~O#t+|O#u+|O~OT+}O~OT,OO~Od,ROs,PO~O!d,SO~OT,TO~O[,UO~Op,VO~P!-kOW$zO!v$zOT!t!Z!}!t!Zr!t!Zs!t!Z~Od,YOs)gO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#R!Rr#R!Rs#R!R~P'|Or&rO!y%Za~O!y,[O~Or,]O~P:}O!y,_O~P:}O!y,`O~OW$zO!v$zO~Od,cOs,PO~O[,dO~O!d,eO~Or,hO~OV,iO~Op$sqs$sq~P:}O$T,jO$U,kO~Or,lO~Or,mO~O!j,oO$Y,nO$Z,nO$[,nO$],nO~O$V,pO$W,pO~OW$zOd,qO!v$zO~Or,sO~Od,vOr,tO~OV,wO~Od,zOr,tO~Or,{O~Or,|O~Or,}O~OV-OO~O$Y-PO$Z-PO$[-PO$]-PO~OV-QO~Or-RO~Or-SO~O$Y-TO$Z-TO$[-TO$]-TO~O$Y-UO$Z-UO$[-UO$]-UO~OV&UO~Or&rO!y%ZX~P:}ObVij!v!}!dsT~",
|
|
101
|
+
goto: "Ct%fPPPPPP%gPP%kPPP%xPPP(pPPP+PPPPPPPP(p(pPP(pPPP(p(pPPPPPPPPP(pPP+T,PPPPPPPPP+TPP,m,qP,v-o.g.l,mP.s,m.|PPPPP/`/i/wP0Q0QPP0Q0QP0f/m0r/m0{/mP1X%gP%g%gPP1b%gPP%gP%g%g1hPP%gP%gPP%g%gP%g%gPPP%gPP%gP%gP%gP%gP1q1uPPPP1qPPPP1{2R2X2_2i2o2u2{3X3`3f3p3z4U4r5Q5[5f5o5y6X6_6e6k6q6wPPP6}7R7V7i8a9S9Y9gPP=b=h>W>d?f?z@YAOBU([BnBwCUC[CnTyO{`[Oac{!u$p$v&uR!l]%jYOTUWX]acjkn{!Q!V!`!a!b!c!d!e!g!m!s!u!w!z!}#P#Q#X#^#c#i$U$W$Z$e$h$l$n$p$r$t$v$x%W%Y%[%]%c%m%z&V&X&]&f&h&m&p&r&u&w'V'_'a'c'e'g'h'n'o'p'q'r'z'|(S(h(k(n)R)Z)_)b)d)g)j*X*[*t*w*}+O+Q+T+q,]-W-X-Y-Z-[-]-^-`Q#suu'Q${$|&z&|&}'O'Y'Z(t(})P)T)U*`*o+j+k,X%kYOTUWX]acjkn{!Q!V!`!a!b!c!d!e!g!m!s!u!w!z!}#P#Q#X#^#c#i$U$W$Z$e$h$l$n$p$r$t$v$x%W%Y%[%]%c%m%z&V&X&]&f&h&m&p&r&u&w'V'_'a'c'e'g'h'n'o'p'q'r'z'|(S(h(k(n)R)Z)_)b)d)g)j*X*[*t*w*}+O+Q+T+q,]-W-X-Y-Z-[-]-^-`T!RQ!S`[Oac{!u$p$v&uQ!l]|#Ojk!m!z#Q#X$l%Y%]%m&f&h'V'_'a'g'p(n)R)d*[+OV%T#P$h-`S!gV!|W$e!h!k&e-_q$n!s$r$x%W&m&p'c'h(h(k)_)b*X*t*w+qThO{V_Oa{Q$j!mQ&i$lQ'j%]Q(f&hQ)S'VQ)['_Q)e'gQ)m'pQ*Z(nQ*j)RQ*x)dQ+g*[R+v+O|#Ojk!m!z#Q#X$l%Y%]%m&f&h'V'_'a'g'p(n)R)d*[+OQ#lqQ#prQ#vwV%T#P$h-`V`Oa{SbO{R!qaQ!tcQ$s!uR&k$pSfO{Q!vd[#Sjk!z#P#X%mR%Z#RQ$y!wQ&q$tR(p&wShO{Y#Ujk!z#X%mR%U#PQ'X$|Q)Y'ZR*l)Uu'P${$|&z&|&}'O'Y'Z(t(})P)T)U*`*o+j+k,XQ#ZjQ#]kQ%P!zR'w%mQ%X#QQ'd%YR)]'aQ'i%[Q)c'eQ*r)ZR*y)gW#Wjk!z%mR%`#XQ%h#^R)o'rQ#enQ#hoR#orT(U&R*SQ+_*QR,a,PQ{OR#x{Q!OPR#z!OQ!SQR$O!SQ$V!YQ&W$QT&^$V&WQ$X![R&`$XQ$[!_R&c$[Q&Y$RR(b&YU!hV!k!|S$f!h&eR&e-_SaO{R!paQ&g$iR(e&gQ$q!tS&l$q&oR&o$sQ&s$uS(m&s+sR+s-aQ&x$yQ(j&qT(q&x(jp&z${$|&|&}'O'Y'Z(t)P)T)U*`*o+j+k,XS(r&z(}X(}'R(s)O*]Q)Q'TQ*a(vQ*d(zV*i)Q*a*dQ)O'RQ*](sT*g)O*]Q)V'XS*m)V*pR*p)YW#Xjk!z%mR%a#XQ'b%XS)^'b)aR)a'dQ)h'iQ*v)cU*z)h*v+nR+n*rQ's%hR)p'sQ+R)uR+x+RQ)}(RR+Y)}Q,Q+_R,b,QQ,u,rR,y,uQ*T(WR+b*TTzO{TiO{S^O{Q!oaU!rc!u$pQ&t$vR(o&u`]Oac{!u$p$v&uY#Pjk!z#X%ml$h!m$l%]&f&h'V'_'g'p(n)R)d*[+OV-`#Q%Y'aQ!URS$S!W&UW$T!X#a#}%oQ$g!iQ$}!xQ%Q!{S%t#j#mQ'^%ST'{%u%wQ$R!VR(a&XS!YT$WS$Q!V&XV&[$U&V&]SVO{^!]T!V$U$W&V&X&]Q!_UY!jWX!}#c-Wf!k]ac!u#Q$p$v%Y&u'a-`[!|jk!z#P#X%mQ#bnQ#|!QQ$^!`Q$_!aQ$`!bQ$a!cQ$b!dQ$c!eS$d!g$ep$m!s$r$x%W&m&p'c'h(h(k)_)b*X*t*w+q`$u!w$t%[&w'e'q)Z)gY%e#^%c'n'r'|Q%s#iQ&b$ZQ&j$nQ'}%zQ(Z-XQ([-YQ(]-ZQ(^-[Q(_-]Q(`-^Q(l&rQ)l'oQ)u'zQ*P(SQ+w+QQ+{+TQ,g,]n-_!m$h$l%]&f&h'V'_'g'p(n)R)d*[+OT-a)j*}Q![TR&_$WY#Tjk!z#X%mj$i!m$l%]&h'V'_'g'p(n)R)d*[+OU%V#Q%Y'aR(d&fSdO{]#Rjk!z#P#X%mQ$o!sQ&n$rQ&v$xQ'`%WQ(g&mQ(i&pQ)`'cQ)f'hQ*W(hQ*Y(kQ*s)_Q*u)bQ+f*XQ+p*tQ+r*wR,Z+qU$w!w$t&wW'f%['e)Z)gQ)n'qQ*{)jR+u*}U'U$|'Z)UQ(y&}Q(|'OR*_(tQ'S${U'T$|'Z)UQ(v&|U(z&}'O(tQ)X'YU*h)P*`+jQ*k)TQ+l*oQ,W+kR,f,XQ${!x|&y${$|&z&|&}'O'R'Y'Z(s(t(})O)P)T)U*]*`*o+j+k,XQ'Y$}Q)T'WQ*o)WS+`*Q,PQ+k*nQ,X+mQ,r,oR,x,tp'R${$|&|&}'O'Y'Z(t)P)T)U*`*o+j+k,XQ(s&zR*f(}W#Vjk!z%mR%_#XS%f#^'rQ'm%cQ)k'nR)v'|Q#_lR#`mQ%n#bQ%v#lQ%y#pQ&Q#vQ+z+SR,^+yQ(W&RR+a*S",
|
|
102
|
+
nodeNames: "⚠ Code BlockComment LineComment SourceFile . Rule Identifier not HeadAtom - ( Number String \" Escape \" FString f\" Escape } FStringField { FStringFormat \" Variable Anonymous Infimum Supremum Function ExternalFunction @ ) Tuple , ; | Abs BinaryOperation .. ^ ? & + * / \\ ** UnaryOperation ~ Projection Comparison CompareOp = == != <> < <= > >= Boolean #true #false Disjunction ConditionalLiteral : Condition SymbolicAtom ConditionalLiteral ConditionalLiteral SetAggregate { SetAggregateElement HeadAggregate AggregateFunction #count #sum #sum+ #min #max HeadAggregateElement TheoryAtom TheoryElement TheoryOperator TheoryFunction TheoryTuple ] [ TheoryList TheorySet :- Body SetAggregate SetAggregateElement BodyAggregate BodyAggregateElement SortAggregate #sort ConditionalLiteral IntegrityConstraint :~ WeakConstraint Minimize #minimize #minimise OptimizeElement Maximize #maximize #maximise Show #show ShowTerm ShowSignature Signature true false Defined #defined Edge #edge #heuristic Heuristic ProjectSignature #project ProjectAtom Const #const default override Script #script #end Include #include Program #program External #external Theory #theory TheoryTermDefinition TheoryOperatorDefinition unary binary left right TheoryAtomDefinition head body any directive",
|
|
103
|
+
maxTerm: 205,
|
|
104
|
+
nodeProps: [
|
|
105
|
+
["group", -19,6,100,102,103,107,110,112,113,117,119,122,123,125,126,130,133,135,137,139,"Statement",-13,12,13,17,25,26,27,28,29,30,33,37,38,48,"Term",-4,85,86,89,90,"TheoryTerm"],
|
|
106
|
+
["closedBy", 11,")",72,"}",88,"]"],
|
|
107
|
+
["openedBy", 20,"{",32,"(",87,"["]
|
|
108
|
+
],
|
|
109
|
+
propSources: [aspHighlighting],
|
|
110
|
+
skippedNodes: [0,2,3],
|
|
111
|
+
repeatNodeCount: 26,
|
|
112
|
+
tokenData: "!8^~RxXY#oYZ#o]^#opq#oqr$Qrs+Qst+Vuv;xvw<^wx>zxy@Tyz@Yz{@_{|CP|}D`}!ODe!O!PEt!P!QHe!Q!RIt!R![Kb![!]Kj!]!^!#{!^!_!%Y!_!`!)X!`!a!+w!a!b!.g!b!c!/v!c!}?Z!}#O!1V#O#P!1p#P#Q!3P#Q#R!3U#R#S!4e#T#Y?o#Y#Z!4v#Z#o?o#o#p!5d#p#q!5i#q#r!6x#r#s!6}~#tS$z~XY#oYZ#o]^#opq#o!^$Xngp!v`OY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`(y!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&Vp&[UgpOY&VZr&Vs#q&V#r;'S&V;'S;=`&n<%lO&Vp&qP;=`<%l&V!Q&{ngp!v`OY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&V!^)Sn!X[gp!v`OY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&V~+VO^~~+YZqr+{#V#W,d#W#X-g#X#Y.b#Y#Z0V#[#]0t#]#^1{#a#b3j#d#e6Z#g#h7p#h#i:o~,QSR~OY+{Z;'S+{;'S;=`,^<%lO+{~,aP;=`<%l+{~,gP#c#d,j~,mQ#b#c,s#i#j-U~,vP#g#h,y~,|P#h#i-P~-UO#s~~-XP#b#c-[~-_P#h#i-b~-gO!n~~-jP#X#Y-m~-pP#Y#Z-s~-vP#]#^-y~-|P#b#c.P~.SP#X#Y.V~.YP#W#X.]~.bO#j~~.eR#W#X.n#b#c/P#l#m/[~.qP#Z#[.t~.wP#X#Y.z~/PO#l~~/SP#W#X/V~/[O#x~~/_P#h#i/b~/eP#X#Y/h~/kP#f#g/n~/qP#b#c/t~/wP#T#U/z~/}P#`#a0Q~0VO$O~~0YP#T#U0]~0`P#`#a0c~0fP#g#h0i~0lP#X#Y0o~0tO!a~~0wP#X#Y0z~0}P#i#j1Q~1TP#f#g1W~1ZP#]#^1^~1aP#g#h1d~1gP#h#i1j~1mP#]#^1p~1sP#V#W1v~1{O#m~~2OP#b#c2R~2UQ#V#W2[#Y#Z2y~2_P#`#a2b~2eP#i#j2h~2kP#W#X2n~2qP#X#Y2t~2yO#z~~3OPk~#]#^3R~3UP#a#b3X~3[P#i#j3_~3bP#a#b3e~3jOk~~3mQ#T#U3s#]#^5O~3vP#l#m3y~4OP!r~#]#^4R~4UP#a#b4X~4[P#]#^4_~4bQ#g#h4h#n#o4s~4kP#X#Y4n~4sO#a~~4vP#X#Y4y~5OO#`~~5RP#b#c5U~5ZP!q~#]#^5^~5aP#a#b5d~5gP#]#^5j~5mQ#g#h5s#n#o6O~5vP#X#Y5y~6OO#]~~6RP#X#Y6U~6ZO#[~~6^P#f#g6a~6dP#c#d6g~6jQ#Z#[6p#^#_7X~6sP#f#g6v~6yP#T#U6|~7PP#a#b7S~7XO#|~~7[P#X#Y7_~7bP#V#W7e~7hP#h#i7k~7pO#p~~7sS#V#W8P#[#]8n#c#d9P#i#j9b~8SP#f#g8V~8YP#]#^8]~8`P#d#e8c~8fP#h#i8i~8nO#w~~8qP#c#d8t~8wP#k#l8z~9PO#c~~9SP#f#g9V~9YP#h#i9]~9bO#U~~9eQ#a#b9k#d#e9x~9pP!o~{|9s~9xO!p~~9}Pl~#f#g:Q~:TP#X#Y:W~:ZP#a#b:^~:aP#i#j:d~:gP#a#b:j~:oOl~~:rQ#[#]:x#f#g;g~:{P#X#Y;O~;RP#c#d;U~;XP#f#g;[~;_P#m#n;b~;gO$Q~~;jP#i#j;m~;pP#X#Y;s~;xO!`~~;}TR~OY+{Zz+{{;'S+{;'S;=`,^<%lO+{!^<ebz|!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m`=rb!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~>}Swx>z!c!}?Z#R#S>z#T#o?o~?`Ti~wx?Z!Q![?Z!c!}?Z#R#S?Z#T#o?Z~?tTV~wx?o!Q![?o!c!}?o#R#S?o#T#o?o~@YOZ~~@_Op~!^@hb|x!SS!v`qr=mvw=mz{Ap{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!YAwb!Px!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!YCWb{x!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~DeOr~!^DlbY|!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!^EycTlqr=mvw=mz{=m{|=m}!O=m!O!PGU!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#T#o&V#p#q=m#r#s=m!YG]bwx!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!^Hlb}|!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~IyR[~#U#VJS#c#dJh#l#mJv~JVQ!Q!RJ]!R!SJ]~JbQ[~!Q!RJ]!R!SJ]~JkP!Q!YJn~JsP[~!Q!YJn~JyR!Q![KS!c!iKS#T#ZKS~KXR[~!Q![KS!c!iKS#T#ZKS~KgP[~!Q![Kb!^Kqngp!dhOY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!OMo!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s! t#s;'S&V;'S;=`&n<%lO&V!^Mvngp!}lOY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&V!U! }n#XSgp!v`OY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&V~!$Qbs~qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!%ab!Z[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`!&i!`!a!'x!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!&pb![[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!(Pb!Y[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!)`b!V[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`!*h!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!*ob!W[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!,Ob!][!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`!-W!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!-_b!^[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!Y!.nbyx!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!/}bo[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!U!1^U!zdgpOY&VZr&Vs#q&V#r;'S&V;'S;=`&n<%lO&V!Y!1wb!Ox!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~!3UO!y~!Y!3]bxx!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~!4jSj~wx>z!c!}?Z#R#S>z#T#o?o~!4{UV~rs!5_wx?o!Q![?o!c!}?o#R#S?o#T#o?o~!5dOb~~!5iO!j~l!5pbt[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~!6}Od~l!7Ub!R[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m",
|
|
113
|
+
tokenizers: [code, blockComment, 2, 3, 4, 5, new lr.LocalTokenGroup("p~RQrsX#O#P^~^O`~~aRrsj#O#Pj#b#cj~oO_~~", 31, 189), new lr.LocalTokenGroup("!W~RSrs_#O#Pd#o#pu#q#r}~dOh~~gRrsp#O#Pp#b#cp~uOc~~zPf~#o#pp~!QP#q#rpcf~", 51, 190)],
|
|
114
|
+
topRules: {"SourceFile":[0,4]},
|
|
115
|
+
dynamicPrecedences: {"112":1,"113":2},
|
|
116
|
+
specialized: [{term: 7, get: (value) => spec_Identifier[value] || -1}],
|
|
117
|
+
tokenPrec: 5636
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Generated by gen/keywords.mjs from spec/clingo/keywords.json. Do not edit.
|
|
121
|
+
const directives = ["#const", "#count", "#defined", "#edge", "#end", "#external", "#false", "#heuristic", "#include", "#inf", "#infimum", "#max", "#maximise", "#maximize", "#min", "#minimise", "#minimize", "#program", "#project", "#script", "#show", "#sort", "#sum", "#sum+", "#sup", "#supremum", "#theory", "#true"];
|
|
122
|
+
|
|
123
|
+
const statements = "Rule IntegrityConstraint WeakConstraint Show ShowTerm ShowSignature Defined Edge Heuristic " +
|
|
124
|
+
"ProjectSignature ProjectAtom Const Script Include Program External";
|
|
125
|
+
const braced = "SetAggregate BodyAggregate HeadAggregate SortAggregate TheoryAtom Minimize Maximize Theory " +
|
|
126
|
+
"TheoryTermDefinition";
|
|
127
|
+
/// Inside the braces of a node, indent one unit from the line that opens them; a
|
|
128
|
+
/// closing brace goes back to that line's indentation.
|
|
129
|
+
function braceIndent(context) {
|
|
130
|
+
const open = context.node.getChild("{"), close = context.node.getChild("}");
|
|
131
|
+
if (!open || context.pos <= open.from || (close && context.pos > close.from))
|
|
132
|
+
return context.continue();
|
|
133
|
+
const closing = /^\s*\}/.test(context.textAfter);
|
|
134
|
+
return context.lineIndent(open.from) + (closing ? 0 : context.unit);
|
|
135
|
+
}
|
|
136
|
+
function insideBraces(node) {
|
|
137
|
+
const open = node.getChild("{"), close = node.getChild("}");
|
|
138
|
+
return open && close ? { from: open.to, to: close.from } : null;
|
|
139
|
+
}
|
|
140
|
+
/// The parsers for `#script (name)` bodies, by name.
|
|
141
|
+
const scripts = new Map([
|
|
142
|
+
["python", langPython.pythonLanguage.parser],
|
|
143
|
+
["lua", language.StreamLanguage.define(lua.lua).parser],
|
|
144
|
+
]);
|
|
145
|
+
/// clingo's ASP language, with highlighting, folding, indentation and nested
|
|
146
|
+
/// highlighting of Python and Lua `#script` bodies.
|
|
147
|
+
const aspLanguage = language.LRLanguage.define({
|
|
148
|
+
name: "asp",
|
|
149
|
+
parser: parser.configure({
|
|
150
|
+
props: [
|
|
151
|
+
language.indentNodeProp.add({
|
|
152
|
+
[statements]: language.continuedIndent(),
|
|
153
|
+
[braced]: braceIndent,
|
|
154
|
+
}),
|
|
155
|
+
language.foldNodeProp.add({
|
|
156
|
+
"Rule IntegrityConstraint WeakConstraint": language.foldInside,
|
|
157
|
+
"Theory TheoryTermDefinition Minimize Maximize": insideBraces,
|
|
158
|
+
// Between `)` and `#end`; a nested language replaces the `Code` node.
|
|
159
|
+
Script: node => {
|
|
160
|
+
const open = node.getChild(")"), end = node.getChild("#end");
|
|
161
|
+
return open && end ? { from: open.to, to: end.from } : null;
|
|
162
|
+
},
|
|
163
|
+
BlockComment: node => ({ from: node.from + 2, to: node.to - 2 }),
|
|
164
|
+
}),
|
|
165
|
+
],
|
|
166
|
+
wrap: common.parseMixed((node, input) => {
|
|
167
|
+
var _a;
|
|
168
|
+
if (node.name != "Code")
|
|
169
|
+
return null;
|
|
170
|
+
const name = (_a = node.node.parent) === null || _a === void 0 ? void 0 : _a.getChild("Identifier");
|
|
171
|
+
const script = name && scripts.get(input.read(name.from, name.to));
|
|
172
|
+
return script ? { parser: script } : null;
|
|
173
|
+
}),
|
|
174
|
+
}),
|
|
175
|
+
languageData: {
|
|
176
|
+
commentTokens: { line: "%", block: { open: "%*", close: "*%" } },
|
|
177
|
+
closeBrackets: { brackets: ["(", "[", "{", '"'] },
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
/// Completes the `#` directives and aggregates.
|
|
181
|
+
function completeDirective(context) {
|
|
182
|
+
const word = context.matchBefore(/#[a-z]*\+?/);
|
|
183
|
+
if (!word || (word.from == word.to && !context.explicit))
|
|
184
|
+
return null;
|
|
185
|
+
return { from: word.from, options: directives.map(label => ({ label, type: "keyword" })), validFor: /^#[a-z]*\+?$/ };
|
|
186
|
+
}
|
|
187
|
+
/// clingo ASP language support for CodeMirror.
|
|
188
|
+
function asp() {
|
|
189
|
+
return new language.LanguageSupport(aspLanguage, aspLanguage.data.of({ autocomplete: completeDirective }));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
exports.asp = asp;
|
|
193
|
+
exports.aspLanguage = aspLanguage;
|
|
194
|
+
exports.completeDirective = completeDirective;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { LRLanguage, LanguageSupport } from "@codemirror/language";
|
|
2
|
+
import type { CompletionContext, CompletionResult } from "@codemirror/autocomplete";
|
|
3
|
+
export declare const aspLanguage: LRLanguage;
|
|
4
|
+
export declare function completeDirective(context: CompletionContext): CompletionResult | null;
|
|
5
|
+
export declare function asp(): LanguageSupport;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';
|
|
2
|
+
import { styleTags, tags } from '@lezer/highlight';
|
|
3
|
+
import { StreamLanguage, LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';
|
|
4
|
+
import { pythonLanguage } from '@codemirror/lang-python';
|
|
5
|
+
import { lua } from '@codemirror/legacy-modes/mode/lua';
|
|
6
|
+
import { parseMixed } from '@lezer/common';
|
|
7
|
+
|
|
8
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
9
|
+
const Code = 1,
|
|
10
|
+
BlockComment = 2;
|
|
11
|
+
|
|
12
|
+
const percent = 37, star = 42, hash = 35, newline = 10, space = 32, tab = 9, cr = 13;
|
|
13
|
+
|
|
14
|
+
// Nesting block comments `%* ... *%`, as in consume_blockcomment of
|
|
15
|
+
// spec/clingo/scanner.c (lines 129-163). Unlike that scanner, and like clingo
|
|
16
|
+
// (nongroundlexer.xch, the <blockcomment> and <comment> rules), a `%` inside a block
|
|
17
|
+
// comment starts a line comment, in which `%*` and `*%` do not count. An unterminated
|
|
18
|
+
// comment runs to the end of the input.
|
|
19
|
+
const blockComment = new ExternalTokenizer(input => {
|
|
20
|
+
if (input.next != percent || input.peek(1) != star) return
|
|
21
|
+
input.advance(2);
|
|
22
|
+
for (let depth = 1; depth > 0 && input.next >= 0;) {
|
|
23
|
+
if (input.next == star && input.peek(1) == percent) {
|
|
24
|
+
input.advance(2);
|
|
25
|
+
depth--;
|
|
26
|
+
} else if (input.next == percent && input.peek(1) == star) {
|
|
27
|
+
input.advance(2);
|
|
28
|
+
depth++;
|
|
29
|
+
} else if (input.next == percent) {
|
|
30
|
+
while (input.next >= 0 && input.next != newline) input.advance();
|
|
31
|
+
} else {
|
|
32
|
+
input.advance();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
input.acceptToken(BlockComment);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
function isEnd(input, offset) {
|
|
39
|
+
return input.peek(offset) == hash && input.peek(offset + 1) == 101 &&
|
|
40
|
+
input.peek(offset + 2) == 110 && input.peek(offset + 3) == 100
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// The body of `#script (lang) ... #end.`: everything up to the first `#end`, less the
|
|
44
|
+
// blanks right before it, as clingo's <script_body> rule (nongroundlexer.xch) takes it.
|
|
45
|
+
const code = new ExternalTokenizer((input, stack) => {
|
|
46
|
+
if (!stack.canShift(Code)) return
|
|
47
|
+
let end = 0;
|
|
48
|
+
while (input.peek(end) >= 0 && !isEnd(input, end)) end++;
|
|
49
|
+
if (input.peek(end) >= 0)
|
|
50
|
+
while (end > 0 && [space, tab, cr].includes(input.peek(end - 1))) end--;
|
|
51
|
+
if (end > 0) input.acceptToken(Code, end);
|
|
52
|
+
}, {contextual: true});
|
|
53
|
+
|
|
54
|
+
const aspHighlighting = styleTags({
|
|
55
|
+
"#const #defined #edge #end #external #heuristic #include #maximise #maximize #minimise #minimize #program #project #script #show #theory": tags.keyword,
|
|
56
|
+
"#count #sum #sum+ #min #max #sort": tags.standard(tags.function(tags.variableName)),
|
|
57
|
+
not: tags.operatorKeyword,
|
|
58
|
+
"default override true false unary binary left right head body any directive": tags.modifier,
|
|
59
|
+
"#true #false": tags.bool,
|
|
60
|
+
"Infimum Supremum": tags.atom,
|
|
61
|
+
Variable: tags.variableName,
|
|
62
|
+
"Anonymous Projection": tags.special(tags.variableName),
|
|
63
|
+
"HeadAtom/Identifier": tags.definition(tags.propertyName),
|
|
64
|
+
"SymbolicAtom/Identifier Signature/Identifier": tags.propertyName,
|
|
65
|
+
"Function/Identifier TheoryFunction/Identifier": tags.function(tags.variableName),
|
|
66
|
+
"ExternalFunction/Identifier ExternalFunction/@": tags.special(tags.function(tags.variableName)),
|
|
67
|
+
'TheoryAtom/Identifier TheoryAtom/"&" TheoryAtomDefinition/"&"': tags.macroName,
|
|
68
|
+
"Theory/Identifier TheoryTermDefinition/Identifier TheoryAtomDefinition/Identifier": tags.typeName,
|
|
69
|
+
"Const/Identifier": tags.definition(tags.constant(tags.variableName)),
|
|
70
|
+
"Program/Identifier": tags.namespace,
|
|
71
|
+
"Script/Identifier": tags.labelName,
|
|
72
|
+
"Include/Identifier": tags.special(tags.string),
|
|
73
|
+
Number: tags.number,
|
|
74
|
+
'String/... FString "f\\"" FString/"\\""': tags.string,
|
|
75
|
+
Escape: tags.escape,
|
|
76
|
+
'FStringField/"{" FStringField/"}"': tags.special(tags.brace),
|
|
77
|
+
FStringFormat: tags.special(tags.string),
|
|
78
|
+
'"=" "==" "!=" "<>" "<" "<=" ">" ">="': tags.compareOperator,
|
|
79
|
+
'".." "+" "-" "*" "/" "\\\\" "**" "^" "?" "&" "~" "@" Abs/"|"': tags.arithmeticOperator,
|
|
80
|
+
'HeadAtom/"-" SymbolicAtom/"-" Signature/"-" Disjunction/"|"': tags.logicOperator,
|
|
81
|
+
TheoryOperator: tags.operator,
|
|
82
|
+
'":-" ":~" Const/"="': tags.definitionOperator,
|
|
83
|
+
'Include/"<" Include/">"': tags.angleBracket,
|
|
84
|
+
'"(" ")"': tags.paren,
|
|
85
|
+
'"[" "]"': tags.squareBracket,
|
|
86
|
+
'"{" "}"': tags.brace,
|
|
87
|
+
'"," ";"': tags.separator,
|
|
88
|
+
'"." ":"': tags.punctuation,
|
|
89
|
+
LineComment: tags.lineComment,
|
|
90
|
+
BlockComment: tags.blockComment,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
94
|
+
const spec_Identifier = {__proto__:null,not:16, true:231, false:233, default:257, override:259, unary:287, binary:289, left:291, right:293, head:297, body:299, any:301, directive:303};
|
|
95
|
+
const parser = LRParser.deserialize({
|
|
96
|
+
version: 14,
|
|
97
|
+
states: "!=`Q]QUOOO#{O!bO'#CiO$WO#tO'#CmO&VQYO'#CyO&pQUO'#CzO&uQUO'#C}O'|QUO'#DRO*bQYO'#GeO*iQUO'#D^O'|QUO'#D^OOQQ'#G`'#G`OOQQ'#Dk'#DkOOQQ'#GZ'#GZO*pQUO'#GZO+qQYO'#GYO,VQUO'#FrO,_QUO'#FrO,dQUO'#DnOOQQ'#Dn'#DnO,kQUO'#DuO-WQUO'#DuOOQQ'#Dy'#DyO-_QUO'#DxO-dQUO'#EQOOQQ'#GY'#GYO-iQUO'#CbO-qQUO'#EdO/QQUO'#EfO0aQUO'#EgO0aQUO'#EkO0fQUO'#EnO0sQUO'#EuO0{QUO'#EwO1QQUO'#EzO1YQUO'#E{O1bQUO'#FOO1gQUO'#FSO1lQUO'#FVO1tQUO'#FXO1QQUO'#FZO1yQUO'#F]OOQQ'#GX'#GXOOQQ'#Fj'#FjQ]QUOOO2OQUO'#G[OOOO'#Fk'#FkO3iO!bO,59TOOQQ,59T,59TO3tQUO'#CqOOOO'#Fl'#FlO4oO#tO,59XOOQQ,59X,59XO6kQYO,59eO7UQUO'#G]O8ZQYO,59fO9vQYO'#CyO:jQUO'#GcOOQQ'#Gc'#GcO:uQUO,59iO;oQYO'#G_OOQQ'#G_'#G_O;|QYO,59mO'|QUO,59nO'|QUO,59nO'|QUO,59nO'|QUO,59nO'|QUO,59nO'|QUO,59nOOQQ'#Db'#DbO<WQUO,5=PO=lQYO,59{O=sQYO,59POOQQ,59x,59xO>^QYO'#DaOOQQ,5<u,5<uO>zQUO,5:_OOQQ,5<^,5<^O?hQYO,5:YOOQQ-E9p-E9pOOQQ,5:Y,5:YO?|QYO'#DwO@XQUO,5:aO@{QUO,5:aOATQUO,5:aOA_QUO,5:dOAdQYO,5:dOAnQbO,5:lOOQQ,58|,58|OBYQUO,58|OCVQYO'#CyOCpQYO'#GeOCwQUO'#D^OOQQ'#Gd'#GdODOQUO'#GdODuQUO'#E]OE]QUO'#E]OEdQUO'#E_OEiQYO'#GmOOQQ'#Gm'#GmOEwQUO'#E[OEzQUO'#E[OB]QUO'#E[OOQQ,5;O,5;OOFSQUO,5;OOFXQUO,5;QOF^QUO,5;QOFcQUO'#GoOFjQUO,5;ROFoQUO,5;VOGoQYO'#CyOGvQYO,5;[OHQQUO'#D^OOQQ,5;Y,5;YOHXQUO,5;]OH^QUO'#ErOHcQUO'#ErOHhQUO,5;aO'|QUO,5;cOHmQYO'#DrOHxQUO'#DrOH}QYO,5;fOIVQYO'#DrOIeQUO'#DrOIjQUO,5;gOH}QYO,5;iOIoQUO,5;jOItQUO,5;nOIyQUO,5;qOJOQUO,5;qOJTQUO,5;sOH}QYO,5;uOJ]QUO,5;wOOQQ-E9h-E9hOOQQ,5<v,5<vOOOO-E9i-E9iOOQQ1G.o1G.oOKPQrO,59]OLRQrO'#CyOOOO-E9j-E9jOOQQ1G.s1G.sOL]QUO'#G^OLhQUO,5<wOOQQ1G/Q1G/QOOQQ,59e,59eOLpQUO,5<}OL}QUO,5<}O&uQUO'#FnOMYQUO1G/TOOQQ1G/T1G/TO'|QUO'#FoOMbQUO1G/XOOQQ1G/X1G/XO! sQYO1G/YO! zQYO1G/YO!$[QYO1G/YO!$cQYO1G/YO!&mQYO1G/YO!&zQYO1G/YO!'XQYO,5<]O'|QUO'#FqOOQQ-E9o-E9oO!([QYO1G.kO!(uQUO'#GdO!)VQUO'#DqO!)kQUO1G/uP!)yQYO'#DsO!*XQUO,5:cO!*rQYO'#GfO'|QUO'#GfOOQQ1G/{1G/{O,dQUO'#FtO!+SQUO1G/{O!+[QUO1G/{O!+SQUO1G/{O!,OQYO1G0OO!,YQYO'#GgO,dQUO'#EPO!,jQYO'#EPO!,oQUO1G0OO!-cQUO1G0OOOQQ'#Gj'#GjO!-kQbO1G0WO!.cQbO1G0WO!.mQbO1G0WOOQQ1G.h1G.hO!/UQUO1G.hO!/ZQYO,59eO!/tQUO,5:{O!1UQYO,5:^OOQQ,5=O,5=OOOQQ,5=X,5=XO!1oQYO'#E^O!1zQUO,5:wO!2qQUO,5:wO!2yQUO,5:wO!3aQUO,5:yO!3fQYO,5:yO!3pQUO,5:}OOQQ,5<g,5<gO!4ZQUO,5:vO!4^QUO,5:vOOQQ-E9y-E9yOOQQ1G0j1G0jO'|QUO1G0lO!4fQUO1G0lO!4kQYO'#GnO!5RQYO'#EjOOQQ,5=Z,5=ZO!5aQUO,5=ZOOQQ1G0m1G0mOOQQ1G0q1G0qO!5iQUO,5;^OOQQ'#Gp'#GpO!5nQUO'#GpOOQQ1G0v1G0vO!6kQYO,5;^O!6rQUO1G0wO!9hQUO,5;^OOQQ1G0{1G0{O!9mQYO1G0}OOQQ,5:^,5:^O!9tQYO,5:^O!:PQUO1G1QO!:UQYO,5:^OOQQ1G1R1G1ROOQQ1G1T1G1TO'|QUO1G1UO!:dQUO1G1YOOQQ1G1]1G1]O!:iQUO1G1]OOQQ1G1_1G1_O!:nQUO1G1_O!:vQUO1G1aO!=lQUO1G1cOOOO1G.w1G.wO!=wQUO1G.wO!=|QrO,59fO!>TQUO'#FmO!>[QUO,5<xO7UQUO'#FpO!>gQUO1G2cOOQQ1G2c1G2cOOQQ,5<X,5<XO!>oQUO1G2iOOQQ-E9k-E9kOOQQ,5<Y,5<YOOQQ-E9l-E9lOOQQ7+$o7+$oO!>|QYO,5<ZOOQQ-E9m-E9mOOQQ7+$s7+$sO<nQUO,59{O!?WQUO'#FsO!?kQUO,5:]P!@PQUO,5:_OOQQ1G/}1G/}O!@gQYO,5=QOOQQ,5<`,5<`OOQQ-E9r-E9rO!@wQUO7+%gOOQQ7+%g7+%gO!AkQUO7+%gO!AsQUO7+%jO!BgQUO7+%jO'|QUO'#FuO!BoQYO,5=RO!B}QYO,5:kO,dQUO,5:kOOQQ7+%j7+%jOAgQYO'#FvO!BgQUO7+%jOOQQ'#Fw'#FwO!-kQbO'#GiO!CYQbO'#ETO!C}QbO'#EUO!DXQbO'#EXO!D`QbO'#EYOOQQ'#Gl'#GlOOQQ'#Gk'#GkO!DgQbO'#GiOOQQ7+%r7+%rO!EXQYO'#GhO!EgQYO'#ERO!ErQUO'#ERO!F]QbO7+%rO!FqQUO7+%rO!-kQbO7+%rO!FyQbO7+%rOOQQ7+$S7+$SO!GTQUO1G0gO!GYQYO1G/xO!GsQUO,5:xOOQQ1G0c1G0cO!?WQUO'#F|O!H^QUO1G0cO!HfQUO1G0cO!H^QUO1G0cO!I]QYO1G0eO!IgQYO'#E`O!IrQUO'#E`O!J]QUO1G0eO!KSQUO1G0eOOQQ1G0i1G0iP!K[QUO'#F{P!K_QUO'#F{O!KdQUO7+&WO'|QUO7+&WO'|QUO,5=YO!KlQUO,5;UO'|QUO,5;UO'|QUO'#GOO!LVQUO1G2uOOQQ1G2u1G2uOOQQ1G0x1G0xOOQQ,5=[,5=[O!L_QUO,5=[O!LdQUO1G0xO!LiQUO7+&cO'|QUO7+&iOOQQ1G/x1G/xO'|QUO7+&lO!LqQYO7+&pO!LxQVO7+&tO!MQQUO7+&wO!MVQUO7+&yO!M[QUO7+&yO'|QUO7+&{O!MdQUO'#F_OOQQ'#Gq'#GqO!MiQUO7+&}O!MnQUO7+&}O!MvQUO'#FeOOOO7+$c7+$cO!M{QrO1G/YO!N}QrO1G/YO# UQrO1G/YO# }QrO1G/YO#!XQrO1G/YO#!cQrO1G/YOOQQ,5<[,5<[OOQQ-E9n-E9nOOQQ7+'}7+'}OOQQ,5<_,5<_OOQQ-E9q-E9qPOQQ1G/u1G/uOOQQ<<IR<<IRO##ZQUO<<IROOQQ<<IU<<IUO##}QUO<<IUO#$VQUO<<IUO#$yQYO,5<aOOQQ-E9s-E9sO#%^QUO1G0VO#%wQYO1G0VOOQQ,5<b,5<bOOQQ-E9t-E9tOOQQ-E9u-E9uO#&SQbO,5=TO#&tQbO,5:oOOQQ,5:p,5:pO#&{QUO,5:pO#'TQUO,5:pOOQQ,5:s,5:sO#'YQUO,5:sO#'_QUO'#GhOOQQ,5:t,5:tO#'mQUO,5:tO!-kQbO'#FyO#&SQbO,5=TO!-kQbO'#FxO#'rQYO,5=SO#(QQUO,5:mOOQQ,5:m,5:mO!-kQbO<<I^O!.fQbO'#FzO#(kQUO<<I^O#(sQbO<<I^OOQQ<<I^<<I^O#(kQUO<<I^O#)XQYO7+&ROOQQ1G0d1G0dOOQQ,5<h,5<hOOQQ-E9z-E9zO#)cQUO7+%}OOQQ7+%}7+%}O#*YQUO7+%}O#*bQUO7+&PO#+XQUO7+&PO#+aQUO,5:zOOQQ,5:z,5:zOOQQ7+&P7+&PO!3iQYO'#F}O#+XQUO7+&POOQQ<<Ir<<IrO'|QUO<<IrO#+zQUO<<IrO#,SQYO1G2tOOQQ1G0p1G0pO#,gQYO1G0pOOQQ,5<j,5<jOOQQ-E9|-E9|OOQQ7+(a7+(aOOQQ1G2v1G2vOOQQ7+&d7+&dO#,rQUO<<I}O#,wQYO<<JTO#-RQUO<<JWO#-WQUO<<J[O#/|QUO<<J`O#0RQUO<<J`OOQQ<<Jc<<JcOOQQ<<Je<<JeO#0WQUO'#GQO#0]QUO<<JeO#0eQUO<<JeO#0jQYO<<JgO#0qQbO,5;yOOQQ<<Ji<<JiO#0|QUO'#GTO#1UQUO<<JiO#1^QUO<<JiO#1cQUO,5<POOQQAN>mAN>mO#1hQUOAN>pOOQQAN>pAN>pOOQQ7+%q7+%qO#2[QUO7+%qO#2uQbO1G2oOOQQ1G0Z1G0ZO#3gQUO1G0ZO#3lQbO1G0[O#3sQUO1G0[OOQQ1G0[1G0[OOQQ1G0_1G0_O#3{QUO,5=SOOQQ1G0`1G0`OOQQ,5<e,5<eOOQQ-E9w-E9wOOQQ,5<d,5<dOOQQ-E9v-E9vOOQQ1G0X1G0XOOQQAN>xAN>xOOQQ,5<f,5<fOOQQ-E9x-E9xO#4ZQbOAN>xO!-kQbOAN>xO#4oQUOAN>xOOQQ<<Im<<ImO#4wQUO<<ImOOQQ<<Ii<<IiO#5PQUO<<IiOOQQ<<Ik<<IkO#5vQUO<<IkO#6OQUO<<IkOOQQ1G0f1G0fOOQQ,5<i,5<iOOQQ-E9{-E9{O#6uQUOAN?^OOQQAN?^AN?^O'|QUOAN?^O#6zQUO7+&[OOQQAN?iAN?iO'|QUO'#GPO#7eQUOAN?oOH}QYOAN?oO'|QUOAN?rO#7mQUOAN?vOOQQAN?zAN?zO#7uQUOAN?zOOQQ,5<l,5<lOOQQ-E:O-E:OO#7zQUOAN@POOQQAN@PAN@POOQQAN@RAN@ROOQQ1G1e1G1eO#8PQUO1G1eO#8XQYO'#F`OOQQ,5<o,5<oOOQQ-E:R-E:RO#8^QUOAN@TOOQQAN@TAN@TO#8cQUO1G1kOOQQG24[G24[OOQQ<<I]<<I]OOQQ7+%u7+%uOOQQ7+%v7+%vO#8hQbO7+%vO!-kQbOG24dOOQQG24dG24dO#8oQbOG24dO#9TQUOAN?XOOQQAN?XAN?XOOQQAN?TAN?TO#9]QUOAN?VOOQQAN?VAN?VO#:SQUO,5=ROOQQG24xG24xO#:[QUOG24xOOQQ<<Iv<<IvO#:aQYO,5<kOOQQ-E9}-E9}OH}QYOG25ZOOQQG25ZG25ZO#:hQYOG25^O#:oQUOG25bOOQQG25fG25fOOQQG25kG25kO#:tQbO'#GRO#:|QUO7+'POOQQ7+'P7+'PO#;UQUO,5;zOOQQG25oG25oO#;ZQYO7+'VOOQQ<<Ib<<IbOOQQLD*OLD*OO!-kQbOLD*OOOQQG24sG24sOOQQG24qG24qOOQQLD*dLD*dO'|QUO1G2VOOQQLD*uLD*uOOQQLD*xLD*xOOQQLD*|LD*|OOQQ,5<m,5<mOOQQ-E:P-E:POOQQ<<Jk<<JkO#;`QUO1G1fO#;eQUO<<JqOOQQ!$'Mj!$'MjO#;jQYO7+'qO#;tQUO7+'QO#;|QUOAN@]OOQQ<<Jl<<JlO#<RQUO<<JlO#<WQUOG25wO#<iQUOAN@WOOQQLD+cLD+cO#<qQbOLD+cOOQQG25rG25rO#<|QUO!$'N}O#=RQUO!$'N}O#=ZQUO!)9DiO#:tQbO'#GSO#=`QUO!)9DiO#=hQUO!)9DiO#=mQUO!.K:TOOQQ,5<n,5<nOOQQ-E:Q-E:QO#=rQUO!.K:TO#=wQUO!.K:TO#=|QUO!4//oO#>[QUO!4//oO#>aQUO!4//oOOQQ!9A%Z!9A%ZO#>fQUO!9A%ZO#>kQUO!9A%ZO#>yQUO!?$HuOOQQ!?$Hu!?$HuOOQQ!D6>a!D6>aO#?XQUO'#CzO3tQUO'#D^O3tQUO,59nO3tQUO,59nO3tQUO,59nO3tQUO,59nO3tQUO,59nO3tQUO,59nO>^QYO'#DaO!(uQUO'#GdO#?^QYO'#Gg",
|
|
98
|
+
stateData: "#?r~O$zOSROSQOS~OVROW|OYWOZTO[YO^PObQOiYOjYOkYOlYOoSOtUOzgO!RXO!`ZO!aZO!jcO!neO!oeO!peO!qeO!reO!}jO#XkO#[lO#]lO#`mO#amO#cnO#joO#lpO#mqO#prO#ssO#wtO#zuO#|vO$OwO$QxO~O_}O`!PO%T}O~Oc!ROf!QOh!TO%U!RO~OZ!VOYmXwmXxmXymXzmX{mX|mX}mX!OmX!PmX!VmX!WmX!XmX!YmX!ZmX![mX!]mX!^mX!jmX!nmX!omX!pmX!qmX!rmX~OTXXrXXsXXtXX!dXX!}XXdXX~P$fOV!WO~OV!XOYXOZTO[YO^PObQOiYOjYOkYOlYOoSOr!ZOtUO!RXO!S!^Op%VPs%VP~OV!XOYXOZTO[YO^PObQOiYOjYOkYOlYOoSOtUO!RXO~OY!dOw!`Ox!aOy!bOz!cO{!dO|!eO}!eO!O!eO!P!eO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fO!j%XX!n%XX!o%XX!p%XX!q%XX!r%XX~O!V!fO~P(wOV!iO~P(POVROYWOZTO[YO^PObQOiYOjYOkYOlYOoSOtUO!RXO!`ZO!aZO~Or!nOs!nOt!nO!d!mOT$|X!}$|X~Os!nOt!nO~Os!nO~OW|O~P*pOW|Od!sO~P*pO!neO!oeO!peO!qeO!reO~O!j!uO~P,uO!j!wO~OV!xO~OT!yO!}!zO~OT#YOV!{OW|OY!}OZTO[YO^PObQOiYOjYOkYOlYOoSOtUOzgO!RXO!`ZO!aZO!j#QO~P,uOT#[OV!{OW|OY!}OZTO[YO^PObQOiYOjYOkYOlYOoSOtUOzgO!RXO!`ZO!aZO!j#QO~P,uO!j#^O~OT#dOV#aOY#cO~P(SOV#fOY#gO~OZ#iO~OV#jOY#kO~OV#mOY#nO~OV#qO~OZ#rO~O^PO!Z#tO~OV#uO~OV#wO~OW#yOV%OXY%OXZ%OX[%OX^%OXb%OXi%OXj%OXk%OXl%OXo%OXt%OX!R%OX!`%OX!a%OXz%OX!j%OX!n%OX!o%OX!p%OX!q%OX!r%OX~O_}O`#{O%T}O~OV#}OY-WOZTO[YO^PObQOiYOjYOkYOlYOo-VOtUO!R-WO~Oc!ROf!QOh$PO%U!RO~OYmawmaxmaymazma{ma|ma}ma!Oma!Pma!Vma!Wma!Xma!Yma!Zma![ma!]ma!^ma!jma!nma!oma!pma!qma!rma~OTXarXasXatXa!dXa!}XadXa~P4}O!S!^Op%QPs%QP~P'|OZ!VOYnawnaxnaynazna{na|na}na!Ona!Pnadna~O!Vna!Wna!Xna!Yna!Zna![na!]na!^na!jna!nna!ona!pna!qna!rnapnarnasnatnaTna!dna!}naona!yna~P7cOpmXrmXsmXtmXTmX!dmX!}mXdmXomX!ymX~P$fOr$UOp%VXs%VX~Op$YOs$WO~OY!dOw!`Ox!aOy!bOz!cO{!dO|!eO}!eO!O!eO!P!eO~Op%RXr%RXs%RX~P:}Os$ZOt$]O~P:}O!j%Xa!n%Xa!o%Xa!p%Xa!q%Xa!r%Xa~P'|O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!Tar!Tas!Tat!Ta!}!Tad!Ta~O!d!Ta~P<nOTXarXasXatXa!dXa!}XadXa~P$fO!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fO~P:}OV!{OW|OY!}O!`ZO!aZOT!has!ga!}!ha~P(SOr!nOs!nOt!nO!d!mOT!ba!}!ba~O!d$lOd!kXs!kX~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!ia!}!ia~P'|Od$rOs$pO~OW|Od$rO~P*pO!j$tO~Od$xO!d$vO~P'|OW$zOZ!VO!j$|O!v$zOT!ta!}!tar!tas!ta~OT%OOV!{OW|OY!}OzgO!`ZO!aZO!j#QO!neO!oeO!peO!qeO!reO~P(SOT!fXr!fXs!fX!d!fXt!fX!}!fXd!fX~P$fO!V%RO~P(wOV%SO~P(POV!{OY!}OzgO!`ZO!aZO!j#QO!neO!oeO!peO!qeO!reO~P(SOV!{OW|OY!}Od%WO!`ZO!aZO~P(SO!j%YO~P,uO!j%[O~O!d%]OT%aXr%aXs%aX~Or%^Os%^OT#OX~OT%bO~O!z%cO~OT%dO~Od%gO~P'|OT%iO~OT%jO~OZ!VOTmXYmXwmXxmXymXzmX{mX|mX}mX!OmX!PmX!dmX~O}%kO~PFtOT%lO!d%mO~P:}OV%oO~P(POT%pO~O}%kO~OV%qO~OT%rO~OZ!VOT!fX!d!fX~OV%uO~OT%lO!d%mO~OZ!VO}%kOT!fX!d!fX~OV%wO~OT%xO~O!V%zO~OV%{O~OT%|O~OV%}O~OT&OOZ&PO~O!j&RO~OY-]Ox-YOy-ZOz-[O{-]O|-^O}-^O!O-^O!P-^O~Od&SOg&TOw-XO~PJbOZ!VOYmXwmXxmXymXzmX{mX|mX}mX!OmX!PmX~OdmXgmX~PK^Or&VOp%QXs%QX~Op&ZOs&XO~O!S!^Op%Vas%Va~P'|Or&]Op%Vas%Va~Op&aOs$WO~Os$ZOt&dO~OY!dOy!bOz!cO{!dO|!eO}!eO!O!eO!P!eOwvi!Vvi!Wvi!Xvi!Yvi!Zvi![vi!]vi!^vi!jvi!nvi!ovi!pvi!qvi!rvipvirvisvitviTvi!dvi!}vidviovi!yvi~Ox!aO~PMjOxvi~PMjOY!dO{!dO|!eO}!eO!O!eO!P!eOwvixviyvi!Vvi!Wvi!Xvi!Yvi!Zvi![vi!]vi!^vi!jvi!nvi!ovi!pvi!qvi!rvipvirvisvitviTvi!dvi!}vidviovi!yvi~Oz!cO~P!!ROzvi~P!!RO!P!eOYviwvixviyvizvi{vi!Vvi!Wvi!Xvi!Yvi!Zvi![vi!]vi!^vi!jvi!nvi!ovi!pvi!qvi!rvipvirvisvitviTvi!dvi!}vidviovi!yvi~O|!eO}!eO!O!eO~P!$jO|vi}vi!Ovi~P!$jOT$ear$eas$eat$ea!V$ea!W$ea!X$ea!Y$ea!Z$ea![$ea!]$ea!^$ea!d$ea!}$ead$ea~P:}OTXirXisXitXi!dXi!}XidXi~P4}OV!{OY!}O!`ZO!aZO~P(SOr&fOT!eXs!eXt!eX!}!eXd!eX~OT!his!cit!ci!}!hi~Or!nOs!nOt!nO!d&hO~OV!{OW|OY!}O!`ZO!aZOd!kas!ka~P(SOT%YX!}%YXr%YXs%YX~P:}Od&mOs$pO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!ii!}!ii~P'|Od&pO!d$vO~P'|Or&rO!d%ZXd%ZXs%ZX~P:}O!d&uO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!li!}!li~P'|Od&pOs&wO~OV&{OW$zOZ&|O['QO^POi'QOj'QOk'QOl'QO!j'OO!v$zO!z&}O~Od'WO!d'VO~P!-kOW$zO!j'ZO!v$zOT!ti!}!tir!tis!ti~OT'[O~OT!far!fas!fa!d!fat!fa!}!fad!fa~P4}O#U']OV!UXY!UXZ!UX[!UX^!UXb!UXi!UXj!UXk!UXl!UXo!UXt!UX!R!UX!j!UX!n!UX!o!UX!p!UX!q!UX!r!UX~OT!far!fas!fa!d!fat!fa!}!fad!fa~P$fO!d'_Od#QXs#QX~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Par#Pas#Pa~P'|Od'cOs'aO~OV!{OW|OY!}Od'cO!`ZO!aZO~P(SO!j'eO~Od'hO!d'gO~P'|OV!{OW|OY!}O!`ZO!aZOT#Vas#Va~P(SOr%^Os%^OT#Oa~O!z'nO~Oo'oOd%bXr%bXs%bX!d%bX!y%bX~P:}Or'qO!d'pOd#^Xs#^X~Od'tOs'rO~O['uO~OT'vOV!{OW|OY!}OzgO!`ZO!aZO!j#QO!neO!oeO!peO!qeO!reO~P(SO}'xO~PFtO!z'yOV#eiW#eiY#eiZ#ei[#ei^#eib#eii#eij#eik#eil#eio#eit#eiz#ei!R#ei!`#ei!a#ei!j#ei!n#ei!o#ei!p#ei!q#ei!r#ei!}#ei#X#ei#[#ei#]#ei#`#ei#a#ei#c#ei#j#ei#l#ei#m#ei#p#ei#s#ei#w#ei#z#ei#|#ei$O#ei$Q#ei$x#ei~O}'xO~Or'zO~P:}OZ!VOT!fa!d!fa~O!z'|O~OZ!VO}'xOT!fa!d!fa~Op(OO~O!](PO~OV(ROp(QO~O!z(SOV#}iW#}iY#}iZ#}i[#}i^#}ib#}ii#}ij#}ik#}il#}io#}it#}iz#}i!R#}i!`#}i!a#}i!j#}i!n#}i!o#}i!p#}i!q#}i!r#}i!}#}i#X#}i#[#}i#]#}i#`#}i#a#}i#c#}i#j#}i#l#}i#m#}i#p#}i#s#}i#w#}i#z#}i#|#}i$O#}i$Q#}i$x#}i~OV(TOd(VOz(XO~Od(YO~Ogna~P7cO!S!^O~P'|Or&VOp%Qas%Qa~Op(cOs&XO~O!S!^Op%Vis%Vi~P'|Os$cat$ca~P:}OV!{OW|OY!}O!`ZO!aZO~P(SOr&fOT!eas!eat!ea!}!ead!ea~OV!{OW|OY!}O!`ZO!aZOs!ga~P(SOT%Ya!}%Yar%Yas%Ya~P:}O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!iq!}!iq~P'|Od(hOs$pO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!lq!}!lq~P'|Od(kOs&wO~Or&rO!d%Zad%Zas%Za~O!d(nOd!sas!sa~OZ(tOT!wXW!wX!v!wX!}!wXd!wXr!wXs!wX!d!wXp!wX!y!wX~Op(uOr(wO~P!-kO!y(xO~P!-kOd({O~P!-kOW$zO!v$zOT%]X!}%]Xd%]Xr%]Xs%]X!d%]Xp%]X!y%]X~Or)POd%[Xs%[X!d%[X~O!d)ROd!uXs!uX~OV!{OW|OY!}O!`ZO!aZOd!uXs!uX~P(SOW$zO!v$zOT!tq!}!tqr!tqs!tq~Od)WOs)UO~Od)WO!d'VO~P!-kO!j)ZO~OT!fir!fis!fi!d!fit!fi!}!fid!fi~P4}OV!{OW|OY!}O!`ZO!aZOd#Qas#Qa~P(SOd)_Os'aO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Pir#Pis#Pi~P'|Od)bO!d'gO~P'|O!d)dOd#SXs#SX~OV!{OW|OY!}O!`ZO!aZOd#SXs#SX~P(SO!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Rir#Ris#Ri~P'|Od)bOs)gO~Or%^Os%^O~Or)jO!y)iO~OV!{OW|OY!}O!`ZO!aZOd#^as#^a~P(SOd)qOs'rO~OT)rO~O[)sO~O#g)tO#h)tO~OT)wO~P:}OP)yO#x)xO~OT)zO~OT){O~Op*OOr)|O~O!j*QO~OT*RO~Od*UOs*SO~OV*VO~Odvigviwvi~PJbOY-]Oz-[O{-]O|-^O}-^O!O-^O!P-^Odvigviwvixvi~Oy-ZO~P!NYOyvi~P!NYO|-^O}-^O!O-^O!P-^Odvigviwvixviyvizvi~OY-]O{-]O~P# ]OYvi{vi~P# ]O!P-^OYvidvigviwvixviyvizvi{vi|vi}vi!Ovi~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!iy!}!iy~P'|Od*XOs&wO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!ly!}!ly~P'|Or$ia!d$iad$ias$ia!y$ia~P:}OV!{OW|OY!}O!`ZO!aZOd!sis!si~P(SO!d*[Od!sis!si~OW$zO!v$zOT%]a!}%]ad%]ar%]as%]a!d%]ap%]a!y%]a~Op*^O~P!-kOp*bOr*`O~Op*bO~O!y*cO~Or)PO!y%[Xd%[Xp%[X~Od*eO~Or)POd%[as%[a!d%[a~OV!{OW|OY!}O!`ZO!aZOd!uas!ua~P(SOd*nOs)UO~OW$zO!v$zOT!ty!}!tyr!tys!ty~Od*qO!d'gO~P'|O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Pqr#Pqs#Pq~P'|Od*tOs'aO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Rqr#Rqs#Rq~P'|Od*wOs)gO~OV!{OW|OY!}O!`ZO!aZOd#Sas#Sa~P(SOr*}O!y*|O~Od%bir%bis%bi!d%bi!y%bi~P:}O!d+OOd#^is#^i~O!y+PO~Op+SOs+QO~P:}Or+TO~O!z+UOV#ryW#ryY#ryZ#ry[#ry^#ryb#ryi#ryj#ryk#ryl#ryo#ryt#ryz#ry!R#ry!`#ry!a#ry!j#ry!n#ry!o#ry!p#ry!q#ry!r#ry!}#ry#X#ry#[#ry#]#ry#`#ry#a#ry#c#ry#j#ry#l#ry#m#ry#p#ry#s#ry#w#ry#z#ry#|#ry$O#ry$Q#ry$x#ry~OT+VO~O#x+WO~OV+XO~Op+ZOr)|O~OT+[O~O!y+]O~P:}OW$zOd+^O!v$zO~OV(TOz(XO~Od+cOs*SO~OT+dO~O}+eO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT!l!R!}!l!R~P'|OV!{OW|OY!}O!`ZO!aZOd!sqs!sq~P(SOW$zO!v$zOT%]i!}%]id%]ir%]is%]i!d%]ip%]i!y%]i~Op+hO~Op+iO~P!-kOp+iOr+jO~Or)PO!y%[ad%[ap%[a~OW$zO!v$zOT!t!R!}!t!Rr!t!Rs!t!R~Od+mOs)UO~Od+oOs)gO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Pyr#Pys#Py~P'|Od+qOs)gO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#Ryr#Rys#Ry~P'|O!y+tO~OV!{OW|OY!}O!`ZO!aZOd#^qs#^q~P(SOp+yOs+QO~O#t+|O#u+|O~OT+}O~OT,OO~Od,ROs,PO~O!d,SO~OT,TO~O[,UO~Op,VO~P!-kOW$zO!v$zOT!t!Z!}!t!Zr!t!Zs!t!Z~Od,YOs)gO~O!V!fO!W!fO!X!fO!Y!fO!Z!fO![!fO!]!fO!^!fOT#R!Rr#R!Rs#R!R~P'|Or&rO!y%Za~O!y,[O~Or,]O~P:}O!y,_O~P:}O!y,`O~OW$zO!v$zO~Od,cOs,PO~O[,dO~O!d,eO~Or,hO~OV,iO~Op$sqs$sq~P:}O$T,jO$U,kO~Or,lO~Or,mO~O!j,oO$Y,nO$Z,nO$[,nO$],nO~O$V,pO$W,pO~OW$zOd,qO!v$zO~Or,sO~Od,vOr,tO~OV,wO~Od,zOr,tO~Or,{O~Or,|O~Or,}O~OV-OO~O$Y-PO$Z-PO$[-PO$]-PO~OV-QO~Or-RO~Or-SO~O$Y-TO$Z-TO$[-TO$]-TO~O$Y-UO$Z-UO$[-UO$]-UO~OV&UO~Or&rO!y%ZX~P:}ObVij!v!}!dsT~",
|
|
99
|
+
goto: "Ct%fPPPPPP%gPP%kPPP%xPPP(pPPP+PPPPPPPP(p(pPP(pPPP(p(pPPPPPPPPP(pPP+T,PPPPPPPPP+TPP,m,qP,v-o.g.l,mP.s,m.|PPPPP/`/i/wP0Q0QPP0Q0QP0f/m0r/m0{/mP1X%gP%g%gPP1b%gPP%gP%g%g1hPP%gP%gPP%g%gP%g%gPPP%gPP%gP%gP%gP%gP1q1uPPPP1qPPPP1{2R2X2_2i2o2u2{3X3`3f3p3z4U4r5Q5[5f5o5y6X6_6e6k6q6wPPP6}7R7V7i8a9S9Y9gPP=b=h>W>d?f?z@YAOBU([BnBwCUC[CnTyO{`[Oac{!u$p$v&uR!l]%jYOTUWX]acjkn{!Q!V!`!a!b!c!d!e!g!m!s!u!w!z!}#P#Q#X#^#c#i$U$W$Z$e$h$l$n$p$r$t$v$x%W%Y%[%]%c%m%z&V&X&]&f&h&m&p&r&u&w'V'_'a'c'e'g'h'n'o'p'q'r'z'|(S(h(k(n)R)Z)_)b)d)g)j*X*[*t*w*}+O+Q+T+q,]-W-X-Y-Z-[-]-^-`Q#suu'Q${$|&z&|&}'O'Y'Z(t(})P)T)U*`*o+j+k,X%kYOTUWX]acjkn{!Q!V!`!a!b!c!d!e!g!m!s!u!w!z!}#P#Q#X#^#c#i$U$W$Z$e$h$l$n$p$r$t$v$x%W%Y%[%]%c%m%z&V&X&]&f&h&m&p&r&u&w'V'_'a'c'e'g'h'n'o'p'q'r'z'|(S(h(k(n)R)Z)_)b)d)g)j*X*[*t*w*}+O+Q+T+q,]-W-X-Y-Z-[-]-^-`T!RQ!S`[Oac{!u$p$v&uQ!l]|#Ojk!m!z#Q#X$l%Y%]%m&f&h'V'_'a'g'p(n)R)d*[+OV%T#P$h-`S!gV!|W$e!h!k&e-_q$n!s$r$x%W&m&p'c'h(h(k)_)b*X*t*w+qThO{V_Oa{Q$j!mQ&i$lQ'j%]Q(f&hQ)S'VQ)['_Q)e'gQ)m'pQ*Z(nQ*j)RQ*x)dQ+g*[R+v+O|#Ojk!m!z#Q#X$l%Y%]%m&f&h'V'_'a'g'p(n)R)d*[+OQ#lqQ#prQ#vwV%T#P$h-`V`Oa{SbO{R!qaQ!tcQ$s!uR&k$pSfO{Q!vd[#Sjk!z#P#X%mR%Z#RQ$y!wQ&q$tR(p&wShO{Y#Ujk!z#X%mR%U#PQ'X$|Q)Y'ZR*l)Uu'P${$|&z&|&}'O'Y'Z(t(})P)T)U*`*o+j+k,XQ#ZjQ#]kQ%P!zR'w%mQ%X#QQ'd%YR)]'aQ'i%[Q)c'eQ*r)ZR*y)gW#Wjk!z%mR%`#XQ%h#^R)o'rQ#enQ#hoR#orT(U&R*SQ+_*QR,a,PQ{OR#x{Q!OPR#z!OQ!SQR$O!SQ$V!YQ&W$QT&^$V&WQ$X![R&`$XQ$[!_R&c$[Q&Y$RR(b&YU!hV!k!|S$f!h&eR&e-_SaO{R!paQ&g$iR(e&gQ$q!tS&l$q&oR&o$sQ&s$uS(m&s+sR+s-aQ&x$yQ(j&qT(q&x(jp&z${$|&|&}'O'Y'Z(t)P)T)U*`*o+j+k,XS(r&z(}X(}'R(s)O*]Q)Q'TQ*a(vQ*d(zV*i)Q*a*dQ)O'RQ*](sT*g)O*]Q)V'XS*m)V*pR*p)YW#Xjk!z%mR%a#XQ'b%XS)^'b)aR)a'dQ)h'iQ*v)cU*z)h*v+nR+n*rQ's%hR)p'sQ+R)uR+x+RQ)}(RR+Y)}Q,Q+_R,b,QQ,u,rR,y,uQ*T(WR+b*TTzO{TiO{S^O{Q!oaU!rc!u$pQ&t$vR(o&u`]Oac{!u$p$v&uY#Pjk!z#X%ml$h!m$l%]&f&h'V'_'g'p(n)R)d*[+OV-`#Q%Y'aQ!URS$S!W&UW$T!X#a#}%oQ$g!iQ$}!xQ%Q!{S%t#j#mQ'^%ST'{%u%wQ$R!VR(a&XS!YT$WS$Q!V&XV&[$U&V&]SVO{^!]T!V$U$W&V&X&]Q!_UY!jWX!}#c-Wf!k]ac!u#Q$p$v%Y&u'a-`[!|jk!z#P#X%mQ#bnQ#|!QQ$^!`Q$_!aQ$`!bQ$a!cQ$b!dQ$c!eS$d!g$ep$m!s$r$x%W&m&p'c'h(h(k)_)b*X*t*w+q`$u!w$t%[&w'e'q)Z)gY%e#^%c'n'r'|Q%s#iQ&b$ZQ&j$nQ'}%zQ(Z-XQ([-YQ(]-ZQ(^-[Q(_-]Q(`-^Q(l&rQ)l'oQ)u'zQ*P(SQ+w+QQ+{+TQ,g,]n-_!m$h$l%]&f&h'V'_'g'p(n)R)d*[+OT-a)j*}Q![TR&_$WY#Tjk!z#X%mj$i!m$l%]&h'V'_'g'p(n)R)d*[+OU%V#Q%Y'aR(d&fSdO{]#Rjk!z#P#X%mQ$o!sQ&n$rQ&v$xQ'`%WQ(g&mQ(i&pQ)`'cQ)f'hQ*W(hQ*Y(kQ*s)_Q*u)bQ+f*XQ+p*tQ+r*wR,Z+qU$w!w$t&wW'f%['e)Z)gQ)n'qQ*{)jR+u*}U'U$|'Z)UQ(y&}Q(|'OR*_(tQ'S${U'T$|'Z)UQ(v&|U(z&}'O(tQ)X'YU*h)P*`+jQ*k)TQ+l*oQ,W+kR,f,XQ${!x|&y${$|&z&|&}'O'R'Y'Z(s(t(})O)P)T)U*]*`*o+j+k,XQ'Y$}Q)T'WQ*o)WS+`*Q,PQ+k*nQ,X+mQ,r,oR,x,tp'R${$|&|&}'O'Y'Z(t)P)T)U*`*o+j+k,XQ(s&zR*f(}W#Vjk!z%mR%_#XS%f#^'rQ'm%cQ)k'nR)v'|Q#_lR#`mQ%n#bQ%v#lQ%y#pQ&Q#vQ+z+SR,^+yQ(W&RR+a*S",
|
|
100
|
+
nodeNames: "⚠ Code BlockComment LineComment SourceFile . Rule Identifier not HeadAtom - ( Number String \" Escape \" FString f\" Escape } FStringField { FStringFormat \" Variable Anonymous Infimum Supremum Function ExternalFunction @ ) Tuple , ; | Abs BinaryOperation .. ^ ? & + * / \\ ** UnaryOperation ~ Projection Comparison CompareOp = == != <> < <= > >= Boolean #true #false Disjunction ConditionalLiteral : Condition SymbolicAtom ConditionalLiteral ConditionalLiteral SetAggregate { SetAggregateElement HeadAggregate AggregateFunction #count #sum #sum+ #min #max HeadAggregateElement TheoryAtom TheoryElement TheoryOperator TheoryFunction TheoryTuple ] [ TheoryList TheorySet :- Body SetAggregate SetAggregateElement BodyAggregate BodyAggregateElement SortAggregate #sort ConditionalLiteral IntegrityConstraint :~ WeakConstraint Minimize #minimize #minimise OptimizeElement Maximize #maximize #maximise Show #show ShowTerm ShowSignature Signature true false Defined #defined Edge #edge #heuristic Heuristic ProjectSignature #project ProjectAtom Const #const default override Script #script #end Include #include Program #program External #external Theory #theory TheoryTermDefinition TheoryOperatorDefinition unary binary left right TheoryAtomDefinition head body any directive",
|
|
101
|
+
maxTerm: 205,
|
|
102
|
+
nodeProps: [
|
|
103
|
+
["group", -19,6,100,102,103,107,110,112,113,117,119,122,123,125,126,130,133,135,137,139,"Statement",-13,12,13,17,25,26,27,28,29,30,33,37,38,48,"Term",-4,85,86,89,90,"TheoryTerm"],
|
|
104
|
+
["closedBy", 11,")",72,"}",88,"]"],
|
|
105
|
+
["openedBy", 20,"{",32,"(",87,"["]
|
|
106
|
+
],
|
|
107
|
+
propSources: [aspHighlighting],
|
|
108
|
+
skippedNodes: [0,2,3],
|
|
109
|
+
repeatNodeCount: 26,
|
|
110
|
+
tokenData: "!8^~RxXY#oYZ#o]^#opq#oqr$Qrs+Qst+Vuv;xvw<^wx>zxy@Tyz@Yz{@_{|CP|}D`}!ODe!O!PEt!P!QHe!Q!RIt!R![Kb![!]Kj!]!^!#{!^!_!%Y!_!`!)X!`!a!+w!a!b!.g!b!c!/v!c!}?Z!}#O!1V#O#P!1p#P#Q!3P#Q#R!3U#R#S!4e#T#Y?o#Y#Z!4v#Z#o?o#o#p!5d#p#q!5i#q#r!6x#r#s!6}~#tS$z~XY#oYZ#o]^#opq#o!^$Xngp!v`OY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`(y!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&Vp&[UgpOY&VZr&Vs#q&V#r;'S&V;'S;=`&n<%lO&Vp&qP;=`<%l&V!Q&{ngp!v`OY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&V!^)Sn!X[gp!v`OY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&V~+VO^~~+YZqr+{#V#W,d#W#X-g#X#Y.b#Y#Z0V#[#]0t#]#^1{#a#b3j#d#e6Z#g#h7p#h#i:o~,QSR~OY+{Z;'S+{;'S;=`,^<%lO+{~,aP;=`<%l+{~,gP#c#d,j~,mQ#b#c,s#i#j-U~,vP#g#h,y~,|P#h#i-P~-UO#s~~-XP#b#c-[~-_P#h#i-b~-gO!n~~-jP#X#Y-m~-pP#Y#Z-s~-vP#]#^-y~-|P#b#c.P~.SP#X#Y.V~.YP#W#X.]~.bO#j~~.eR#W#X.n#b#c/P#l#m/[~.qP#Z#[.t~.wP#X#Y.z~/PO#l~~/SP#W#X/V~/[O#x~~/_P#h#i/b~/eP#X#Y/h~/kP#f#g/n~/qP#b#c/t~/wP#T#U/z~/}P#`#a0Q~0VO$O~~0YP#T#U0]~0`P#`#a0c~0fP#g#h0i~0lP#X#Y0o~0tO!a~~0wP#X#Y0z~0}P#i#j1Q~1TP#f#g1W~1ZP#]#^1^~1aP#g#h1d~1gP#h#i1j~1mP#]#^1p~1sP#V#W1v~1{O#m~~2OP#b#c2R~2UQ#V#W2[#Y#Z2y~2_P#`#a2b~2eP#i#j2h~2kP#W#X2n~2qP#X#Y2t~2yO#z~~3OPk~#]#^3R~3UP#a#b3X~3[P#i#j3_~3bP#a#b3e~3jOk~~3mQ#T#U3s#]#^5O~3vP#l#m3y~4OP!r~#]#^4R~4UP#a#b4X~4[P#]#^4_~4bQ#g#h4h#n#o4s~4kP#X#Y4n~4sO#a~~4vP#X#Y4y~5OO#`~~5RP#b#c5U~5ZP!q~#]#^5^~5aP#a#b5d~5gP#]#^5j~5mQ#g#h5s#n#o6O~5vP#X#Y5y~6OO#]~~6RP#X#Y6U~6ZO#[~~6^P#f#g6a~6dP#c#d6g~6jQ#Z#[6p#^#_7X~6sP#f#g6v~6yP#T#U6|~7PP#a#b7S~7XO#|~~7[P#X#Y7_~7bP#V#W7e~7hP#h#i7k~7pO#p~~7sS#V#W8P#[#]8n#c#d9P#i#j9b~8SP#f#g8V~8YP#]#^8]~8`P#d#e8c~8fP#h#i8i~8nO#w~~8qP#c#d8t~8wP#k#l8z~9PO#c~~9SP#f#g9V~9YP#h#i9]~9bO#U~~9eQ#a#b9k#d#e9x~9pP!o~{|9s~9xO!p~~9}Pl~#f#g:Q~:TP#X#Y:W~:ZP#a#b:^~:aP#i#j:d~:gP#a#b:j~:oOl~~:rQ#[#]:x#f#g;g~:{P#X#Y;O~;RP#c#d;U~;XP#f#g;[~;_P#m#n;b~;gO$Q~~;jP#i#j;m~;pP#X#Y;s~;xO!`~~;}TR~OY+{Zz+{{;'S+{;'S;=`,^<%lO+{!^<ebz|!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m`=rb!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~>}Swx>z!c!}?Z#R#S>z#T#o?o~?`Ti~wx?Z!Q![?Z!c!}?Z#R#S?Z#T#o?Z~?tTV~wx?o!Q![?o!c!}?o#R#S?o#T#o?o~@YOZ~~@_Op~!^@hb|x!SS!v`qr=mvw=mz{Ap{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!YAwb!Px!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!YCWb{x!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~DeOr~!^DlbY|!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!^EycTlqr=mvw=mz{=m{|=m}!O=m!O!PGU!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#T#o&V#p#q=m#r#s=m!YG]bwx!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!^Hlb}|!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~IyR[~#U#VJS#c#dJh#l#mJv~JVQ!Q!RJ]!R!SJ]~JbQ[~!Q!RJ]!R!SJ]~JkP!Q!YJn~JsP[~!Q!YJn~JyR!Q![KS!c!iKS#T#ZKS~KXR[~!Q![KS!c!iKS#T#ZKS~KgP[~!Q![Kb!^Kqngp!dhOY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!OMo!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s! t#s;'S&V;'S;=`&n<%lO&V!^Mvngp!}lOY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&V!U! }n#XSgp!v`OY&VZq&Vqr&tsv&Vvw&twz&Vz{&t{|&t|}&V}!O&t!O!P&t!P!Q&t!Q![&V![!]&t!]!^&t!^!_&t!_!`&t!`!a&t!a!b&t!b!c&t!c#O&V#O#P&t#P#Q&V#Q#R&t#R#p&V#p#q&t#r#s&t#s;'S&V;'S;=`&n<%lO&V~!$Qbs~qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!%ab!Z[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`!&i!`!a!'x!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!&pb![[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!(Pb!Y[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!)`b!V[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`!*h!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!*ob!W[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!,Ob!][!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`!-W!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!-_b!^[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!Y!.nbyx!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=ml!/}bo[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m!U!1^U!zdgpOY&VZr&Vs#q&V#r;'S&V;'S;=`&n<%lO&V!Y!1wb!Ox!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~!3UO!y~!Y!3]bxx!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~!4jSj~wx>z!c!}?Z#R#S>z#T#o?o~!4{UV~rs!5_wx?o!Q![?o!c!}?o#R#S?o#T#o?o~!5dOb~~!5iO!j~l!5pbt[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m~!6}Od~l!7Ub!R[!v`qr=mvw=mz{=m{|=m}!O=m!O!P=m!P!Q=m![!]=m!]!^=m!^!_=m!_!`=m!`!a=m!a!b=m!b!c=m#O#P=m#Q#R=m#p#q=m#r#s=m",
|
|
111
|
+
tokenizers: [code, blockComment, 2, 3, 4, 5, new LocalTokenGroup("p~RQrsX#O#P^~^O`~~aRrsj#O#Pj#b#cj~oO_~~", 31, 189), new LocalTokenGroup("!W~RSrs_#O#Pd#o#pu#q#r}~dOh~~gRrsp#O#Pp#b#cp~uOc~~zPf~#o#pp~!QP#q#rpcf~", 51, 190)],
|
|
112
|
+
topRules: {"SourceFile":[0,4]},
|
|
113
|
+
dynamicPrecedences: {"112":1,"113":2},
|
|
114
|
+
specialized: [{term: 7, get: (value) => spec_Identifier[value] || -1}],
|
|
115
|
+
tokenPrec: 5636
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Generated by gen/keywords.mjs from spec/clingo/keywords.json. Do not edit.
|
|
119
|
+
const directives = ["#const", "#count", "#defined", "#edge", "#end", "#external", "#false", "#heuristic", "#include", "#inf", "#infimum", "#max", "#maximise", "#maximize", "#min", "#minimise", "#minimize", "#program", "#project", "#script", "#show", "#sort", "#sum", "#sum+", "#sup", "#supremum", "#theory", "#true"];
|
|
120
|
+
|
|
121
|
+
const statements = "Rule IntegrityConstraint WeakConstraint Show ShowTerm ShowSignature Defined Edge Heuristic " +
|
|
122
|
+
"ProjectSignature ProjectAtom Const Script Include Program External";
|
|
123
|
+
const braced = "SetAggregate BodyAggregate HeadAggregate SortAggregate TheoryAtom Minimize Maximize Theory " +
|
|
124
|
+
"TheoryTermDefinition";
|
|
125
|
+
/// Inside the braces of a node, indent one unit from the line that opens them; a
|
|
126
|
+
/// closing brace goes back to that line's indentation.
|
|
127
|
+
function braceIndent(context) {
|
|
128
|
+
const open = context.node.getChild("{"), close = context.node.getChild("}");
|
|
129
|
+
if (!open || context.pos <= open.from || (close && context.pos > close.from))
|
|
130
|
+
return context.continue();
|
|
131
|
+
const closing = /^\s*\}/.test(context.textAfter);
|
|
132
|
+
return context.lineIndent(open.from) + (closing ? 0 : context.unit);
|
|
133
|
+
}
|
|
134
|
+
function insideBraces(node) {
|
|
135
|
+
const open = node.getChild("{"), close = node.getChild("}");
|
|
136
|
+
return open && close ? { from: open.to, to: close.from } : null;
|
|
137
|
+
}
|
|
138
|
+
/// The parsers for `#script (name)` bodies, by name.
|
|
139
|
+
const scripts = new Map([
|
|
140
|
+
["python", pythonLanguage.parser],
|
|
141
|
+
["lua", StreamLanguage.define(lua).parser],
|
|
142
|
+
]);
|
|
143
|
+
/// clingo's ASP language, with highlighting, folding, indentation and nested
|
|
144
|
+
/// highlighting of Python and Lua `#script` bodies.
|
|
145
|
+
const aspLanguage = LRLanguage.define({
|
|
146
|
+
name: "asp",
|
|
147
|
+
parser: parser.configure({
|
|
148
|
+
props: [
|
|
149
|
+
indentNodeProp.add({
|
|
150
|
+
[statements]: continuedIndent(),
|
|
151
|
+
[braced]: braceIndent,
|
|
152
|
+
}),
|
|
153
|
+
foldNodeProp.add({
|
|
154
|
+
"Rule IntegrityConstraint WeakConstraint": foldInside,
|
|
155
|
+
"Theory TheoryTermDefinition Minimize Maximize": insideBraces,
|
|
156
|
+
// Between `)` and `#end`; a nested language replaces the `Code` node.
|
|
157
|
+
Script: node => {
|
|
158
|
+
const open = node.getChild(")"), end = node.getChild("#end");
|
|
159
|
+
return open && end ? { from: open.to, to: end.from } : null;
|
|
160
|
+
},
|
|
161
|
+
BlockComment: node => ({ from: node.from + 2, to: node.to - 2 }),
|
|
162
|
+
}),
|
|
163
|
+
],
|
|
164
|
+
wrap: parseMixed((node, input) => {
|
|
165
|
+
var _a;
|
|
166
|
+
if (node.name != "Code")
|
|
167
|
+
return null;
|
|
168
|
+
const name = (_a = node.node.parent) === null || _a === void 0 ? void 0 : _a.getChild("Identifier");
|
|
169
|
+
const script = name && scripts.get(input.read(name.from, name.to));
|
|
170
|
+
return script ? { parser: script } : null;
|
|
171
|
+
}),
|
|
172
|
+
}),
|
|
173
|
+
languageData: {
|
|
174
|
+
commentTokens: { line: "%", block: { open: "%*", close: "*%" } },
|
|
175
|
+
closeBrackets: { brackets: ["(", "[", "{", '"'] },
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
/// Completes the `#` directives and aggregates.
|
|
179
|
+
function completeDirective(context) {
|
|
180
|
+
const word = context.matchBefore(/#[a-z]*\+?/);
|
|
181
|
+
if (!word || (word.from == word.to && !context.explicit))
|
|
182
|
+
return null;
|
|
183
|
+
return { from: word.from, options: directives.map(label => ({ label, type: "keyword" })), validFor: /^#[a-z]*\+?$/ };
|
|
184
|
+
}
|
|
185
|
+
/// clingo ASP language support for CodeMirror.
|
|
186
|
+
function asp() {
|
|
187
|
+
return new LanguageSupport(aspLanguage, aspLanguage.data.of({ autocomplete: completeDirective }));
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export { asp, aspLanguage, completeDirective };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const directives: string[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,55 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codemirror-lang-asp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"keywords": [
|
|
5
|
+
"codemirror",
|
|
6
|
+
"lezer",
|
|
7
|
+
"asp",
|
|
8
|
+
"clingo",
|
|
9
|
+
"answer-set-programming"
|
|
10
|
+
],
|
|
11
|
+
"description": "clingo ASP language support for CodeMirror",
|
|
12
|
+
"scripts": {
|
|
13
|
+
"test": "mocha test/*.js",
|
|
14
|
+
"build": "rollup -c && tsc -p tsconfig.json --declaration --emitDeclarationOnly --outDir dist",
|
|
15
|
+
"prepare": "pnpm run build"
|
|
16
|
+
},
|
|
17
|
+
"type": "module",
|
|
18
|
+
"main": "dist/index.cjs",
|
|
19
|
+
"module": "dist/index.js",
|
|
20
|
+
"exports": {
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"require": "./dist/index.cjs"
|
|
23
|
+
},
|
|
24
|
+
"types": "dist/index.d.ts",
|
|
25
|
+
"sideEffects": false,
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@codemirror/autocomplete": "^6.0.0",
|
|
28
|
+
"@codemirror/lang-python": "^6.0.0",
|
|
29
|
+
"@codemirror/language": "^6.0.0",
|
|
30
|
+
"@codemirror/legacy-modes": "^6.0.0",
|
|
31
|
+
"@lezer/common": "^1.5.3",
|
|
32
|
+
"@lezer/highlight": "^1.0.0",
|
|
33
|
+
"@lezer/lr": "^1.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@codemirror/state": "^6.0.0",
|
|
37
|
+
"@lezer/generator": "^1.0.0",
|
|
38
|
+
"@rollup/plugin-typescript": "^12.1.4",
|
|
39
|
+
"@types/node": "^26.0.0",
|
|
40
|
+
"mocha": "^11.7.1",
|
|
41
|
+
"rollup": "^4.45.1",
|
|
42
|
+
"tslib": "^2.8.1",
|
|
43
|
+
"typescript": "^5.8.3"
|
|
44
|
+
},
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "git+https://github.com/jcschuster/lang-asp.git",
|
|
48
|
+
"directory": "packages/codemirror-lang-asp"
|
|
49
|
+
},
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"clingo": {
|
|
52
|
+
"version": "5.8.2",
|
|
53
|
+
"tree-sitter-clingo": "v1.0.6"
|
|
54
|
+
}
|
|
55
|
+
}
|