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 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
- # Temporary Holding Version
1
+ # codemirror-lang-asp
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
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.
@@ -0,0 +1,2 @@
1
+ import type { NodePropSource } from "@lezer/common";
2
+ export declare const aspHighlighting: NodePropSource;
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;
@@ -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.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
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
+ }