@emprespresso/codemirror-lang-tabloid 0.1.0 → 0.2.1
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/dist/index.cjs +130 -41
- package/dist/index.js +130 -42
- package/package.json +2 -1
package/dist/index.cjs
CHANGED
|
@@ -3,73 +3,162 @@
|
|
|
3
3
|
var lr = require('@lezer/lr');
|
|
4
4
|
var language = require('@codemirror/language');
|
|
5
5
|
var highlight = require('@lezer/highlight');
|
|
6
|
+
var autocomplete = require('@codemirror/autocomplete');
|
|
6
7
|
|
|
7
8
|
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
8
9
|
const parser = lr.LRParser.deserialize({
|
|
9
10
|
version: 14,
|
|
10
|
-
states: "+
|
|
11
|
-
stateData: "
|
|
12
|
-
goto: "%
|
|
13
|
-
nodeNames: "⚠ Program FunctionDecl Identifier ArgumentList , Assignment NumberLiteral StringLiteral BooleanLiteral FunctionCall ArgumentExpression ) ( ParenBlock PrintStatement InputStatement BinaryExpression IfStatement ReturnStatement Block ExprStatement ProgramEnd",
|
|
14
|
-
maxTerm:
|
|
11
|
+
states: "+WO]QPOOO!WQPO'#C_O$PQPO'#DeO%OQPO'#CpO%VQPO'#CqO%VQPO'#CsO&`QPO'#DYOOQO'#De'#DeO'fQPO'#CeO%VQPO'#DQO%VQPO'#DTO'kQPO'#DVOOQO'#Dd'#DdOOQO'#D]'#D]O]QPOOOOQO'#DZ'#DZQOQPOOO'rQPO,58yO'yQPO,59VOOQO,59[,59[O(bQPO,59[O(iQPO,59]O)oQPO,59_O%VQPO,59aO%VQPO,59aO%VQPO,59aO%VQPO,59aO%VQPO,59aO*uQPO,59PO*zQPO,59lO+nQPO,59oOOQO,59q,59qO,tQPO,59qOOQO-E7Z-E7ZOOQO1G.e1G.eO,{QPO1G.eO-rQPO'#CmO.{QPO1G.qOOQO1G.v1G.vOOQO1G.{1G.{O2`QPO1G.{O2jQPO1G.{O4eQPO1G.{O4lQPO1G.{O%VQPO1G.kO4sQPO1G/WOOQO1G/]1G/]O5wQPO'#CcO$WQPO7+$PO'yQPO'#D_O6rQPO7+$]O8iQPO7+$VO$WQPO7+$rO9oQPO'#D^O9tQPO,58}OOQO<<Gk<<GkOOQO1G.q1G.qOOQO,59y,59yOOQO-E7]-E7]OOQO<<H^<<H^OOQO,59x,59xOOQO-E7[-E7[POQO7+$]7+$]O'yQPO,59VO:oQPO'#DeO'yQPO'#CqO'yQPO'#CsO'yQPO,59aO'yQPO,59aO'yQPO,59aO'yQPO,59aO'yQPO,59aO<jQPO1G.{O<tQPO1G.{O>rQPO1G.{O>yQPO1G.{O?QQPO,59]O@ZQPO,59_",
|
|
12
|
+
stateData: "BS~O!UOS!VOSPOS~OSPOTQOYWO[VO]VO^VOcROfSOhTOuXOxYOzZO!O_O~OTaO~OS!XXT!XXY!XX[!XX]!XX^!XXc!XXf!XXh!XXj!XXk!XXl!XXm!XXn!XXo!XXp!XXq!XXr!XXs!XXu!XXx!XXz!XX!O!XXb!XX{!XXv!XX~O`bO~P!]OSPOTQOYWO[VO]VO^VOcROfSOhTOuXOxYOzZO~ObcO~P$WOTQO[VO]VO^VOcROfSOhTO~OjgOkgOlgOmhOnhOoiOpiOqiOrjOskO~OS|XT|XY|X[|X]|X^|Xc|Xf|Xh|Xu|Xx|Xz|X!O|Xb|X{|Xv|X~P%nOTlO~O{oO~P$WOUsO~P$WOT!bO[VO]VO^VOcROf!cOh!dO~ObvO~P$WOSeaTeaYea[ea]ea^eaceafeaheaueaxeazea!Oeabea{eavea~P%nOSgaTgaYga[ga]ga^gacgafgahgaugaxgazga!Ogabga{gavga~P%nOZ|O~OjgOkgOlgOmhOnhOoiOpiOqiOrjOskO~P$WOSwaTwaYwa[wa]wa^wacwafwahwauwaxwazwa!Owabwa{wavwa~P%nO{!OO~P$WOT!PO~Oj!eOk!eOl!eOm!fOn!fOo!gOp!gOq!gOr!hOs!iO~OSaXTaXWaXYaX[aX]aX^aXcaXfaXhaXuaXxaXzaX!OaXbaX{aXvaX~P-QOW!ROS_iT_iY_i[_i]_i^_ic_if_ih_ij_ik_il_im_in_io_ip_iq_ir_is_iu_ix_iz_i!O_ib_i{_iv_i~OjgOkgOlgOSiiTiiYii[ii]ii^iiciifiihiioiipiiqiiriisiiuiixiizii!Oiibii{iivii~Omiinii~P0rOmhOnhO~P0rOjgOkgOlgOmhOnhOoiOpiOqiOSiiTiiYii[ii]ii^iiciifiihiisiiuiixiizii!Oiibii{iivii~Orii~P2tOrjO~P2tOv!UOStiTtiYti[ti]ti^tictiftihtiutixtizti!Otibti{ti~OW!VOSVXTVXYVX[VX]VX^VXcVXfVXhVXuVXxVXzVX~OW!ROS_qT_qY_q[_q]_q^_qc_qf_qh_qj_qk_ql_qm_qn_qo_qp_qq_qr_qs_qu_qx_qz_q!O_qb_q{_qv_q~OSXqTXqYXq[Xq]Xq^XqcXqfXqhXquXqxXqzXq!OXqbXq{XqvXq~P%nOT!^O~OW!VOSVaTVaYVa[Va]Va^VacVafVahVauVaxVazVa~O`!aOW!XX~P!]Oj!eOk!eOl!eOSiiTiiWiiYii[ii]ii^iiciifiihiioiipiiqiiriisiiuiixiizii!Oiibii{iivii~Omiinii~P:yOm!fOn!fO~P:yOj!eOk!eOl!eOm!fOn!fOo!gOp!gOq!gOSiiTiiWiiYii[ii]ii^iiciifiihiisiiuiixiizii!Oiibii{iivii~Orii~P=OOr!hO~P=OOSeaTeaWeaYea[ea]ea^eaceafeaheaueaxeazea!Oeabea{eavea~P-QOSgaTgaWgaYga[ga]ga^gacgafgahgaugaxgazga!Ogabga{gavga~P-QOP][^SYh!OzxufZU`{vokqrsmnjlpT`~",
|
|
13
|
+
goto: "%}!YPPP!ZPPP!gP!ZPPPPP!jP#[PP!j!jP!jP!jPPPPPPPPPP!ZPP!ZP!ZPP!Z#eP#i#w#}PPPP$T$ie[ORZ^admp!Q!UR!Qs!_VORSTXYZ^abdghijkmp|!Q!R!U!a!c!d!e!f!g!h!iQubQ!Y!aR!Z!RT`O^Q^OQdRQpZVq^dpQ!W!PR!_!WQ!SuR![!S[]ORZ^dpQraQ}mQ!X!QR!]!UdUORZ^admp!Q!UQeSQfTQmXQnYUtb!R!aSwg!eQxhQyiQzjQ{kQ!T|Q!j!fQ!k!gQ!l!hQ!m!iQ!n!cR!o!d",
|
|
14
|
+
nodeNames: "⚠ Comment Program FunctionDecl discoverHowTo Identifier with ArgumentList , Assignment expertsClaim toBe NumberLiteral StringLiteral BooleanLiteral FunctionCall of ArgumentExpression ) ( ParenBlock PrintStatement youWontWantToMiss InputStatement latestNewsOn BinaryExpression times dividedBy modulo plus minus isActually beats smallerThan and or IfStatement whatIf liesBang ReturnStatement shockingDevelopment Block rumorHasIt endOfStory ExprStatement ProgramEnd pleaseLikeAndSubscribe",
|
|
15
|
+
maxTerm: 55,
|
|
15
16
|
nodeProps: [
|
|
16
|
-
["openedBy",
|
|
17
|
-
["closedBy",
|
|
17
|
+
["openedBy", 18,"("],
|
|
18
|
+
["closedBy", 19,")"]
|
|
18
19
|
],
|
|
19
|
-
skippedNodes: [0],
|
|
20
|
+
skippedNodes: [0,1],
|
|
20
21
|
repeatNodeCount: 3,
|
|
21
|
-
tokenData: "!
|
|
22
|
+
tokenData: "!Nw~RsXY#`YZ#k]^#kpq#`rs#pst%^wx%xxy)ayz)f|})k}!O({!Q![)p!c!d*Z!d!e+w!e!f.h!f!g5R!g!h>[!h!k({!k!lEw!l!n({!n!oH[!o!pNu!p!q({!q!r!&c!r!s!(R!s!t({!t!u!/i!u!v!3k!v!w!>O!w!y({!y!z!El!z!{({!{!|!I}!|!}({#R#S({~#eQ!U~XY#`pq#`~#pO!V~~#sVOr#prs$Ys#O#p#O#P$_#P;'S#p;'S;=`%W<%lO#p~$_O]~~$bRO;'S#p;'S;=`$k;=`O#p~$nWOr#prs$Ys#O#p#O#P$_#P;'S#p;'S;=`%W;=`<%l#p<%lO#p~%ZP;=`<%l#p~%cTP~OY%^Z]%^^;'S%^;'S;=`%r<%lO%^~%uP;=`<%l%^~%}_T~Ow&|wx(ex}&|}!O%x!O!Q&|!Q![%x![!c&|!c!}%x!}#O&|#O#P'f#P#R&|#R#S%x#S;'S&|;'S;=`(_<%lO&|~'PVOw&|wx$Yx#O&|#O#P'f#P;'S&|;'S;=`(_<%lO&|~'iRO;'S&|;'S;=`'r;=`O&|~'uWOw&|wx$Yx#O&|#O#P'f#P;'S&|;'S;=`(_;=`<%l&|<%lO&|~(bP;=`<%l&|~(lT]~T~wx({}!O({!Q![({!c!}({#R#S({~)QTT~wx({}!O({!Q![({!c!}({#R#S({~)fOc~~)kOb~~)pOW~~)uQ[~!O!P){!Q![)p~*OP!Q![*R~*WP[~!Q![*R~*`VT~wx({}!O({!Q![({!c!p({!p!q*u!q!}({#R#S({~*zVT~wx({}!O({!Q![({!c!f({!f!g+a!g!}({#R#S({~+hTr~T~wx({}!O({!Q![({!c!}({#R#S({~+|VT~wx({}!O({!Q![({!c!g({!g!h,c!h!}({#R#S({~,hUT~wx({}!O({!Q![({!c!d,z!d!}({#R#S({~-PVT~wx({}!O({!Q![({!c!v({!v!w-f!w!}({#R#S({~-kVT~wx({}!O({!Q![({!c!u({!u!v.Q!v!}({#R#S({~.XTp~T~wx({}!O({!Q![({!c!}({#R#S({~.mVT~wx({}!O({!Q![({!c!q({!q!r/S!r!}({#R#S({~/XVT~wx({}!O({!Q![({!c!o({!o!p/n!p!}({#R#S({~/sVT~wx({}!O({!Q![({!c!r({!r!s0Y!s!}({#R#S({~0_VT~wx({}!O({!Q![({!c!n({!n!o0t!o!}({#R#S({~0yVT~wx({}!O({!Q![({!c!g({!g!h1`!h!}({#R#S({~1eVT~wx({}!O({!Q![({!c!v({!v!w1z!w!}({#R#S({~2PVT~wx({}!O({!Q![({!c!g({!g!h2f!h!}({#R#S({~2kVT~wx({}!O({!Q![({!c!n({!n!o3Q!o!}({#R#S({~3VVT~wx({}!O({!Q![({!c!{({!{!|3l!|!}({#R#S({~3qVT~XY4Wpq4Wwx({}!O({!Q![({!c!}({#R#S({~4ZRXY4Wpq4W!y!z4d~4gP!t!u4j~4mP!q!r4p~4sP!p!q4v~4yP!i!j4|~5RO^~~5WVT~wx({}!O({!Q![({!c!k({!k!l5m!l!}({#R#S({~5rXT~wx({}!O({!Q![({!c!u({!u!v6_!v!x({!x!y:{!y!}({#R#S({~6dVT~wx({}!O({!Q![({!c!e({!e!f6y!f!}({#R#S({~7OVT~wx({}!O({!Q![({!c!q({!q!r7e!r!}({#R#S({~7jVT~wx({}!O({!Q![({!c!x({!x!y8P!y!}({#R#S({~8UVT~wx({}!O({!Q![({!c!g({!g!h8k!h!}({#R#S({~8pVT~wx({}!O({!Q![({!c!t({!t!u9V!u!}({#R#S({~9[VT~XY9qpq9qwx({}!O({!Q![({!c!}({#R#S({~9tRXY9qpq9q!j!k9}~:QP!q!r:T~:WP!y!z:Z~:^QXY:dpq:d~:gRXY:dpq:d!v!w:p~:sP!q!r:v~:{OS~~;QVT~wx({}!O({!Q![({!c!k({!k!l;g!l!}({#R#S({~;lVT~wx({}!O({!Q![({!c!f({!f!g<R!g!}({#R#S({~<WVT~wx({}!O({!Q![({!c!g({!g!h<m!h!}({#R#S({~<rVT~wx({}!O({!Q![({!c!f({!f!g=X!g!}({#R#S({~=^VT~XY=spq=swx({}!O({!Q![({!c!}({#R#S({~=vRXY=spq=s!d!e>P~>SP!{!|>V~>[Ok~~>aXT~wx({}!O({!Q![({!c!p({!p!q>|!q!z({!z!{Aj!{!}({#R#S({~?RVT~wx({}!O({!Q![({!c!f({!f!g?h!g!}({#R#S({~?mVT~XY@Spq@Swx({}!O({!Q![({!c!}({#R#S({~@VRXY@Spq@S!q!r@`~@cP!h!i@f~@iQXY@opq@o~@rRXY@opq@o!u!v@{~AOP!v!wAR~AUP!q!rAX~A[P!t!uA_~AbP!{!|Ae~AjO{~~AoVT~wx({}!O({!Q![({!c!r({!r!sBU!s!}({#R#S({~BZVT~wx({}!O({!Q![({!c!g({!g!hBp!h!}({#R#S({~BuVT~wx({}!O({!Q![({!c!t({!t!uC[!u!}({#R#S({~CaVT~wx({}!O({!Q![({!c!v({!v!wCv!w!}({#R#S({~C{VT~wx({}!O({!Q![({!c!u({!u!vDb!v!}({#R#S({~DgVT~XYD|pqD|wx({}!O({!Q![({!c!}({#R#S({~EPRXYD|pqD|!e!fEY~E]P!n!oE`~EcP!c!dEf~EiP!k!lEl~EoP!o!pEr~EwOY~~E|VT~wx({}!O({!Q![({!c!u({!u!vFc!v!}({#R#S({~FhVT~XYF}pqF}wx({}!O({!Q![({!c!}({#R#S({~GQRXYF}pqF}!c!dGZ~G^P!e!fGa~GdP!v!wGg~GjP!w!xGm~GpP!c!dGs~GvP!n!oGy~G|P!n!oHP~HSP!{!|HV~H[Oo~~HaWT~wx({}!O({!Q![({!c!dHy!d!k({!k!lMR!l!}({#R#S({~IOVT~wx({}!O({!Q![({!c!v({!v!wIe!w!}({#R#S({~IjVT~wx({}!O({!Q![({!c!g({!g!hJP!h!}({#R#S({~JUVT~wx({}!O({!Q![({!c!u({!u!vJk!v!}({#R#S({~JpVT~wx({}!O({!Q![({!c!v({!v!wKV!w!}({#R#S({~K[VT~XYKqpqKqwx({}!O({!Q![({!c!}({#R#S({~KtRXYKqpqKq!p!qK}~LQP!g!hLT~LWP!y!zLZ~L^P!u!vLa~LdQXYLjpqLj~LmRXYLjpqLj!q!rLv~LyP!p!qL|~MROh~~MWVT~wx({}!O({!Q![({!c!g({!g!hMm!h!}({#R#S({~MrVT~wx({}!O({!Q![({!c!u({!u!vNX!v!}({#R#S({~N^UT~qrNpwx({}!O({!Q![({!c!}({#R#S({~NuOv~~NzXT~wx({}!O({!Q![({!c!k({!k!l! g!l!q({!q!r!#o!r!}({#R#S({~! lVT~wx({}!O({!Q![({!c!p({!p!q!!R!q!}({#R#S({~!!WVT~wx({}!O({!Q![({!c!w({!w!x!!m!x!}({#R#S({~!!rVT~wx({}!O({!Q![({!c!u({!u!v!#X!v!}({#R#S({~!#`Tn~T~wx({}!O({!Q![({!c!}({#R#S({~!#tVT~wx({}!O({!Q![({!c!f({!f!g!$Z!g!}({#R#S({~!$`VT~wx({}!O({!Q![({!c!w({!w!x!$u!x!}({#R#S({~!$zVT~wx({}!O({!Q![({!c!n({!n!o!%a!o!}({#R#S({~!%fVT~wx({}!O({!Q![({!c!q({!q!r!%{!r!}({#R#S({~!&STl~T~wx({}!O({!Q![({!c!}({#R#S({~!&hXT~wx({}!O({!Q![({!c!h({!h!i!'T!i!t({!t!u!'k!u!}({#R#S({~!'[T`~T~wx({}!O({!Q![({!c!}({#R#S({~!'rTs~T~wx({}!O({!Q![({!c!}({#R#S({~!(WVT~wx({}!O({!Q![({!c!n({!n!o!(m!o!}({#R#S({~!(rXT~wx({}!O({!Q![({!c!g({!g!h!)_!h!w({!w!x!.g!x!}({#R#S({~!)dUT~wx({}!O({!Q![({!c!d!)v!d!}({#R#S({~!){VT~wx({}!O({!Q![({!c!u({!u!v!*b!v!}({#R#S({~!*gVT~wx({}!O({!Q![({!c!g({!g!h!*|!h!}({#R#S({~!+RVT~XY!+hpq!+hwx({}!O({!Q![({!c!}({#R#S({~!+kRXY!+hpq!+h!n!o!+t~!+wP!k!l!+z~!+}P!m!n!,Q~!,TP!g!h!,W~!,ZQXY!,apq!,a~!,dRXY!,apq!,a!c!d!,m~!,pP!p!q!,s~!,vP!f!g!,y~!,|QXY!-Spq!-S~!-VRXY!-Spq!-S!u!v!-`~!-cP!w!x!-f~!-iP!d!e!-l~!-oP!u!v!-r~!-uP!e!f!-x~!-{P!t!u!.O~!.RP!k!l!.U~!.XP!d!e!.[~!._P!g!h!.b~!.gO!O~~!.lVT~wx({}!O({!Q![({!c!u({!u!v!/R!v!}({#R#S({~!/YTm~T~wx({}!O({!Q![({!c!}({#R#S({~!/nVT~wx({}!O({!Q![({!c!w({!w!x!0T!x!}({#R#S({~!0YVT~wx({}!O({!Q![({!c!o({!o!p!0o!p!}({#R#S({~!0tVT~wx({}!O({!Q![({!c!q({!q!r!1Z!r!}({#R#S({~!1`VT~wx({}!O({!Q![({!c!t({!t!u!1u!u!}({#R#S({~!1zVT~XY!2apq!2awx({}!O({!Q![({!c!}({#R#S({~!2dRXY!2apq!2a!j!k!2m~!2pP!c!d!2s~!2vP!u!v!2y~!2|QXY!3Spq!3S~!3VRXY!3Spq!3S!k!l!3`~!3cP!v!w!3f~!3kOz~~!3pXT~wx({}!O({!Q![({!c!j({!j!k!4]!k!o({!o!p!9z!p!}({#R#S({~!4bVT~wx({}!O({!Q![({!c!q({!q!r!4w!r!}({#R#S({~!4|VT~wx({}!O({!Q![({!c!e({!e!f!5c!f!}({#R#S({~!5hVT~wx({}!O({!Q![({!c!m({!m!n!5}!n!}({#R#S({~!6SVT~wx({}!O({!Q![({!c!k({!k!l!6i!l!}({#R#S({~!6nVT~wx({}!O({!Q![({!c!p({!p!q!7T!q!}({#R#S({~!7YVT~wx({}!O({!Q![({!c!i({!i!j!7o!j!}({#R#S({~!7tVT~XY!8Zpq!8Zwx({}!O({!Q![({!c!}({#R#S({~!8^RXY!8Zpq!8Z!f!g!8g~!8jP!g!h!8m~!8pP!x!y!8s~!8vP!g!h!8y~!8|P!n!o!9P~!9SP!q!r!9V~!9YP!r!s!9]~!9`P!o!p!9c~!9fP!g!h!9i~!9lP!p!q!9o~!9rP!v!w!9u~!9zOx~~!:PUT~wx({}!O({!Q![({!c!d!:c!d!}({#R#S({~!:hVT~wx({}!O({!Q![({!c!n({!n!o!:}!o!}({#R#S({~!;SVT~wx({}!O({!Q![({!c!n({!n!o!;i!o!}({#R#S({~!;nVT~wx({}!O({!Q![({!c!g({!g!h!<T!h!}({#R#S({~!<YVT~wx({}!O({!Q![({!c!t({!t!u!<o!u!}({#R#S({~!<tVT~XY!=Zpq!=Zwx({}!O({!Q![({!c!}({#R#S({~!=^RXY!=Zpq!=Z!v!w!=g~!=jP!j!k!=m~!=pP!c!d!=s~!=vP!p!q!=y~!>OOq~~!>TXT~wx({}!O({!Q![({!c!k({!k!l!>p!l!q({!q!r!@x!r!}({#R#S({~!>uVT~wx({}!O({!Q![({!c!o({!o!p!?[!p!}({#R#S({~!?aVT~wx({}!O({!Q![({!c!g({!g!h!?v!h!}({#R#S({~!?{VT~wx({}!O({!Q![({!c!u({!u!v!@b!v!}({#R#S({~!@iTj~T~wx({}!O({!Q![({!c!}({#R#S({~!@}XT~XY!Ajpq!Ajwx({}!O({!Q![({!c!v({!v!w!BR!w!}({#R#S({~!AmRXY!Ajpq!Aj!d!e!Av~!AyP!g!h!A|~!BROZ~~!BWUT~wx({}!O({!Q![({!c!d!Bj!d!}({#R#S({~!BoVT~wx({}!O({!Q![({!c!n({!n!o!CU!o!}({#R#S({~!CZVT~wx({}!O({!Q![({!c!n({!n!o!Cp!o!}({#R#S({~!CuVT~wx({}!O({!Q![({!c!{({!{!|!D[!|!}({#R#S({~!DaVT~XY!Dvpq!Dvwx({}!O({!Q![({!c!}({#R#S({~!DyRXY!Dvpq!Dv!t!u!ES~!EVP!k!l!EY~!E]P!i!j!E`~!EcP!j!k!Ef~!EiP!v!w4|~!EqWT~wx({}!O({!Q![({!c!j({!j!k!FZ!k!l!Ha!l!}({#R#S({~!F`UT~wx({}!O({!Q![({!c!d!Fr!d!}({#R#S({~!FwVT~wx({}!O({!Q![({!c!v({!v!w!G^!w!}({#R#S({~!GcVT~XY!Gxpq!Gxwx({}!O({!Q![({!c!}({#R#S({~!G{RXY!Gxpq!Gx!k!l!HU~!HXP!h!i!H[~!HaOu~~!HfVT~wx({}!O({!Q![({!c!v({!v!w!H{!w!}({#R#S({~!IQVT~wx({}!O({!Q![({!c!j({!j!k!Ig!k!}({#R#S({~!InTU~T~wx({}!O({!Q![({!c!}({#R#S({~!JSVT~wx({}!O({!Q![({!c!q({!q!r!Ji!r!}({#R#S({~!JnVT~wx({}!O({!Q![({!c!w({!w!x!KT!x!}({#R#S({~!KYVT~XY!Kopq!Kowx({}!O({!Q![({!c!}({#R#S({~!KrRXY!Kopq!Ko!y!z!K{~!LOP!q!r!LR~!LUP!p!q!LX~!L[Pwx!L_~!LbP!v!w!Le~!LhQXY!Lnpq!Ln~!LqRXY!Lnpq!Ln!y!z!Lz~!L}P!c!d!MQ~!MTP!p!q!MW~!MZP!v!w!M^~!MaQXY!Mgpq!Mg~!MjRXY!Mgpq!Mg!v!w!Ms~!MvP!q!r!My~!M|QXY!NSpq!NS~!NVRXY!NSpq!NS!o!p!N`~!NcP!k!l!Nf~!NiP!u!v!Nl~!NoP!u!v!Nr~!NwOf~",
|
|
22
23
|
tokenizers: [0],
|
|
23
|
-
topRules: {"Program":[0,
|
|
24
|
-
tokenPrec:
|
|
24
|
+
topRules: {"Program":[0,2]},
|
|
25
|
+
tokenPrec: 1492
|
|
25
26
|
});
|
|
26
27
|
|
|
28
|
+
const highlighting = highlight.styleTags({
|
|
29
|
+
// Comments
|
|
30
|
+
Comment: highlight.tags.lineComment,
|
|
31
|
+
// Literals
|
|
32
|
+
NumberLiteral: highlight.tags.number,
|
|
33
|
+
StringLiteral: highlight.tags.string,
|
|
34
|
+
BooleanLiteral: highlight.tags.bool,
|
|
35
|
+
// Identifiers
|
|
36
|
+
Identifier: highlight.tags.variableName,
|
|
37
|
+
"FunctionDecl/Identifier": highlight.tags.function(highlight.tags.definition(highlight.tags.variableName)),
|
|
38
|
+
"FunctionCall/Identifier": highlight.tags.function(highlight.tags.variableName),
|
|
39
|
+
"ArgumentList/Identifier": highlight.tags.variableName,
|
|
40
|
+
// Keywords - Definitions (use controlKeyword for better color)
|
|
41
|
+
discoverHowTo: highlight.tags.controlKeyword,
|
|
42
|
+
expertsClaim: highlight.tags.keyword,
|
|
43
|
+
toBe: highlight.tags.operator,
|
|
44
|
+
with: highlight.tags.keyword,
|
|
45
|
+
of: highlight.tags.keyword,
|
|
46
|
+
// Keywords - Control flow
|
|
47
|
+
whatIf: highlight.tags.controlKeyword,
|
|
48
|
+
liesBang: highlight.tags.controlKeyword,
|
|
49
|
+
shockingDevelopment: highlight.tags.controlKeyword,
|
|
50
|
+
// Keywords - I/O
|
|
51
|
+
youWontWantToMiss: highlight.tags.keyword,
|
|
52
|
+
latestNewsOn: highlight.tags.keyword,
|
|
53
|
+
// Keywords - Block delimiters
|
|
54
|
+
rumorHasIt: highlight.tags.brace,
|
|
55
|
+
endOfStory: highlight.tags.brace,
|
|
56
|
+
// Keywords - Program structure
|
|
57
|
+
pleaseLikeAndSubscribe: highlight.tags.moduleKeyword,
|
|
58
|
+
// Operators - Comparison
|
|
59
|
+
isActually: highlight.tags.compareOperator,
|
|
60
|
+
beats: highlight.tags.compareOperator,
|
|
61
|
+
smallerThan: highlight.tags.compareOperator,
|
|
62
|
+
// Operators - Logical
|
|
63
|
+
and: highlight.tags.logicOperator,
|
|
64
|
+
or: highlight.tags.logicOperator,
|
|
65
|
+
// Operators - Arithmetic
|
|
66
|
+
plus: highlight.tags.arithmeticOperator,
|
|
67
|
+
minus: highlight.tags.arithmeticOperator,
|
|
68
|
+
times: highlight.tags.arithmeticOperator,
|
|
69
|
+
dividedBy: highlight.tags.arithmeticOperator,
|
|
70
|
+
modulo: highlight.tags.arithmeticOperator,
|
|
71
|
+
// Punctuation
|
|
72
|
+
"(": highlight.tags.paren,
|
|
73
|
+
")": highlight.tags.paren,
|
|
74
|
+
",": highlight.tags.separator,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const keywords = [
|
|
78
|
+
// Function and variable declarations
|
|
79
|
+
{ label: "DISCOVER HOW TO", type: "keyword", info: "Function declaration" },
|
|
80
|
+
{ label: "WITH", type: "keyword", info: "Function parameters" },
|
|
81
|
+
{ label: "EXPERTS CLAIM", type: "keyword", info: "Variable assignment" },
|
|
82
|
+
{ label: "TO BE", type: "keyword", info: "Assignment operator" },
|
|
83
|
+
// Control flow
|
|
84
|
+
{ label: "WHAT IF", type: "keyword", info: "If statement" },
|
|
85
|
+
{ label: "LIES!", type: "keyword", info: "Else statement" },
|
|
86
|
+
{ label: "SHOCKING DEVELOPMENT", type: "keyword", info: "Return statement" },
|
|
87
|
+
// Blocks
|
|
88
|
+
{ label: "RUMOR HAS IT", type: "keyword", info: "Block start" },
|
|
89
|
+
{ label: "END OF STORY", type: "keyword", info: "Block end" },
|
|
90
|
+
// I/O
|
|
91
|
+
{ label: "YOU WON'T WANT TO MISS", type: "keyword", info: "Print statement" },
|
|
92
|
+
{ label: "LATEST NEWS ON", type: "keyword", info: "Input statement" },
|
|
93
|
+
// Boolean literals
|
|
94
|
+
{ label: "TOTALLY RIGHT", type: "keyword", info: "True" },
|
|
95
|
+
{ label: "COMPLETELY WRONG", type: "keyword", info: "False" },
|
|
96
|
+
// Operators
|
|
97
|
+
{ label: "IS ACTUALLY", type: "keyword", info: "Equality comparison" },
|
|
98
|
+
{ label: "BEATS", type: "keyword", info: "Greater than" },
|
|
99
|
+
{ label: "SMALLER THAN", type: "keyword", info: "Less than" },
|
|
100
|
+
{ label: "AND", type: "keyword", info: "Logical AND" },
|
|
101
|
+
{ label: "OR", type: "keyword", info: "Logical OR" },
|
|
102
|
+
{ label: "PLUS", type: "keyword", info: "Addition" },
|
|
103
|
+
{ label: "MINUS", type: "keyword", info: "Subtraction" },
|
|
104
|
+
{ label: "TIMES", type: "keyword", info: "Multiplication" },
|
|
105
|
+
{ label: "DIVIDED BY", type: "keyword", info: "Division" },
|
|
106
|
+
{ label: "MODULO", type: "keyword", info: "Modulus" },
|
|
107
|
+
{ label: "OF", type: "keyword", info: "Function call" },
|
|
108
|
+
// Program end
|
|
109
|
+
{
|
|
110
|
+
label: "PLEASE LIKE AND SUBSCRIBE",
|
|
111
|
+
type: "keyword",
|
|
112
|
+
info: "End of program",
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
function tabloidCompletion(context) {
|
|
116
|
+
const word = context.matchBefore(/[A-Z'][A-Z\-'\s]*/);
|
|
117
|
+
if (!word || (word.from === word.to && !context.explicit)) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
from: word.from,
|
|
122
|
+
options: keywords,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Wrap parser to debug
|
|
127
|
+
const originalParse = parser.parse.bind(parser);
|
|
128
|
+
parser.parse = function (input, fragments, ranges) {
|
|
129
|
+
console.log("[PARSER] parse called with input:", typeof input === "string" ? input.substring(0, 100) : input);
|
|
130
|
+
const result = originalParse(input, fragments, ranges);
|
|
131
|
+
console.log("[PARSER] parse result:", result.toString());
|
|
132
|
+
return result;
|
|
133
|
+
};
|
|
27
134
|
const tabloidLanguage = language.LRLanguage.define({
|
|
28
135
|
parser: parser.configure({
|
|
29
136
|
props: [
|
|
30
137
|
language.indentNodeProp.add({
|
|
31
138
|
Block: language.delimitedIndent({ closing: "endOfStory", align: false }),
|
|
32
139
|
ParenBlock: language.delimitedIndent({ closing: ")", align: false }),
|
|
33
|
-
FunctionDecl: context => context.baseIndent + context.unit,
|
|
34
|
-
IfStatement: context => context.baseIndent + context.unit,
|
|
140
|
+
FunctionDecl: (context) => context.baseIndent + context.unit,
|
|
141
|
+
IfStatement: (context) => context.baseIndent + context.unit,
|
|
35
142
|
}),
|
|
36
143
|
language.foldNodeProp.add({
|
|
37
144
|
Block: language.foldInside,
|
|
38
145
|
ParenBlock: language.foldInside,
|
|
39
146
|
}),
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
NumberLiteral: highlight.tags.number,
|
|
43
|
-
StringLiteral: highlight.tags.string,
|
|
44
|
-
BooleanLiteral: highlight.tags.bool,
|
|
45
|
-
FunctionCall: highlight.tags.function(highlight.tags.variableName),
|
|
46
|
-
discoverHowTo: highlight.tags.definitionKeyword,
|
|
47
|
-
expertsClaim: highlight.tags.definitionKeyword,
|
|
48
|
-
toBe: highlight.tags.operatorKeyword,
|
|
49
|
-
rumorHasIt: highlight.tags.keyword,
|
|
50
|
-
endOfStory: highlight.tags.keyword,
|
|
51
|
-
whatIf: highlight.tags.controlKeyword,
|
|
52
|
-
liesBang: highlight.tags.controlKeyword,
|
|
53
|
-
shockingDevelopment: highlight.tags.controlKeyword,
|
|
54
|
-
youWontWantToMiss: highlight.tags.keyword,
|
|
55
|
-
latestNewsOn: highlight.tags.keyword,
|
|
56
|
-
pleaseLikeAndSubscribe: highlight.tags.keyword,
|
|
57
|
-
"with of": highlight.tags.keyword,
|
|
58
|
-
"isActually beats smallerThan": highlight.tags.compareOperator,
|
|
59
|
-
"and or": highlight.tags.logicOperator,
|
|
60
|
-
"plus minus times dividedBy modulo": highlight.tags.arithmeticOperator,
|
|
61
|
-
"( )": highlight.tags.paren,
|
|
62
|
-
",": highlight.tags.separator
|
|
63
|
-
})
|
|
64
|
-
]
|
|
147
|
+
highlighting,
|
|
148
|
+
],
|
|
65
149
|
}),
|
|
66
150
|
languageData: {
|
|
67
|
-
commentTokens: {}
|
|
68
|
-
|
|
151
|
+
commentTokens: {},
|
|
152
|
+
closeBrackets: { brackets: ["(", '"', "'"] },
|
|
153
|
+
autocomplete: tabloidCompletion,
|
|
154
|
+
},
|
|
69
155
|
});
|
|
70
156
|
function tabloid() {
|
|
71
|
-
return new language.LanguageSupport(tabloidLanguage
|
|
157
|
+
return new language.LanguageSupport(tabloidLanguage, [
|
|
158
|
+
autocomplete.autocompletion({ override: [tabloidCompletion] }),
|
|
159
|
+
]);
|
|
72
160
|
}
|
|
73
161
|
|
|
74
162
|
exports.tabloid = tabloid;
|
|
163
|
+
exports.tabloidCompletion = tabloidCompletion;
|
|
75
164
|
exports.tabloidLanguage = tabloidLanguage;
|
package/dist/index.js
CHANGED
|
@@ -1,72 +1,160 @@
|
|
|
1
1
|
import { LRParser } from '@lezer/lr';
|
|
2
2
|
import { LRLanguage, indentNodeProp, foldNodeProp, delimitedIndent, foldInside, LanguageSupport } from '@codemirror/language';
|
|
3
3
|
import { styleTags, tags } from '@lezer/highlight';
|
|
4
|
+
import { autocompletion } from '@codemirror/autocomplete';
|
|
4
5
|
|
|
5
6
|
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
|
6
7
|
const parser = LRParser.deserialize({
|
|
7
8
|
version: 14,
|
|
8
|
-
states: "+
|
|
9
|
-
stateData: "
|
|
10
|
-
goto: "%
|
|
11
|
-
nodeNames: "⚠ Program FunctionDecl Identifier ArgumentList , Assignment NumberLiteral StringLiteral BooleanLiteral FunctionCall ArgumentExpression ) ( ParenBlock PrintStatement InputStatement BinaryExpression IfStatement ReturnStatement Block ExprStatement ProgramEnd",
|
|
12
|
-
maxTerm:
|
|
9
|
+
states: "+WO]QPOOO!WQPO'#C_O$PQPO'#DeO%OQPO'#CpO%VQPO'#CqO%VQPO'#CsO&`QPO'#DYOOQO'#De'#DeO'fQPO'#CeO%VQPO'#DQO%VQPO'#DTO'kQPO'#DVOOQO'#Dd'#DdOOQO'#D]'#D]O]QPOOOOQO'#DZ'#DZQOQPOOO'rQPO,58yO'yQPO,59VOOQO,59[,59[O(bQPO,59[O(iQPO,59]O)oQPO,59_O%VQPO,59aO%VQPO,59aO%VQPO,59aO%VQPO,59aO%VQPO,59aO*uQPO,59PO*zQPO,59lO+nQPO,59oOOQO,59q,59qO,tQPO,59qOOQO-E7Z-E7ZOOQO1G.e1G.eO,{QPO1G.eO-rQPO'#CmO.{QPO1G.qOOQO1G.v1G.vOOQO1G.{1G.{O2`QPO1G.{O2jQPO1G.{O4eQPO1G.{O4lQPO1G.{O%VQPO1G.kO4sQPO1G/WOOQO1G/]1G/]O5wQPO'#CcO$WQPO7+$PO'yQPO'#D_O6rQPO7+$]O8iQPO7+$VO$WQPO7+$rO9oQPO'#D^O9tQPO,58}OOQO<<Gk<<GkOOQO1G.q1G.qOOQO,59y,59yOOQO-E7]-E7]OOQO<<H^<<H^OOQO,59x,59xOOQO-E7[-E7[POQO7+$]7+$]O'yQPO,59VO:oQPO'#DeO'yQPO'#CqO'yQPO'#CsO'yQPO,59aO'yQPO,59aO'yQPO,59aO'yQPO,59aO'yQPO,59aO<jQPO1G.{O<tQPO1G.{O>rQPO1G.{O>yQPO1G.{O?QQPO,59]O@ZQPO,59_",
|
|
10
|
+
stateData: "BS~O!UOS!VOSPOS~OSPOTQOYWO[VO]VO^VOcROfSOhTOuXOxYOzZO!O_O~OTaO~OS!XXT!XXY!XX[!XX]!XX^!XXc!XXf!XXh!XXj!XXk!XXl!XXm!XXn!XXo!XXp!XXq!XXr!XXs!XXu!XXx!XXz!XX!O!XXb!XX{!XXv!XX~O`bO~P!]OSPOTQOYWO[VO]VO^VOcROfSOhTOuXOxYOzZO~ObcO~P$WOTQO[VO]VO^VOcROfSOhTO~OjgOkgOlgOmhOnhOoiOpiOqiOrjOskO~OS|XT|XY|X[|X]|X^|Xc|Xf|Xh|Xu|Xx|Xz|X!O|Xb|X{|Xv|X~P%nOTlO~O{oO~P$WOUsO~P$WOT!bO[VO]VO^VOcROf!cOh!dO~ObvO~P$WOSeaTeaYea[ea]ea^eaceafeaheaueaxeazea!Oeabea{eavea~P%nOSgaTgaYga[ga]ga^gacgafgahgaugaxgazga!Ogabga{gavga~P%nOZ|O~OjgOkgOlgOmhOnhOoiOpiOqiOrjOskO~P$WOSwaTwaYwa[wa]wa^wacwafwahwauwaxwazwa!Owabwa{wavwa~P%nO{!OO~P$WOT!PO~Oj!eOk!eOl!eOm!fOn!fOo!gOp!gOq!gOr!hOs!iO~OSaXTaXWaXYaX[aX]aX^aXcaXfaXhaXuaXxaXzaX!OaXbaX{aXvaX~P-QOW!ROS_iT_iY_i[_i]_i^_ic_if_ih_ij_ik_il_im_in_io_ip_iq_ir_is_iu_ix_iz_i!O_ib_i{_iv_i~OjgOkgOlgOSiiTiiYii[ii]ii^iiciifiihiioiipiiqiiriisiiuiixiizii!Oiibii{iivii~Omiinii~P0rOmhOnhO~P0rOjgOkgOlgOmhOnhOoiOpiOqiOSiiTiiYii[ii]ii^iiciifiihiisiiuiixiizii!Oiibii{iivii~Orii~P2tOrjO~P2tOv!UOStiTtiYti[ti]ti^tictiftihtiutixtizti!Otibti{ti~OW!VOSVXTVXYVX[VX]VX^VXcVXfVXhVXuVXxVXzVX~OW!ROS_qT_qY_q[_q]_q^_qc_qf_qh_qj_qk_ql_qm_qn_qo_qp_qq_qr_qs_qu_qx_qz_q!O_qb_q{_qv_q~OSXqTXqYXq[Xq]Xq^XqcXqfXqhXquXqxXqzXq!OXqbXq{XqvXq~P%nOT!^O~OW!VOSVaTVaYVa[Va]Va^VacVafVahVauVaxVazVa~O`!aOW!XX~P!]Oj!eOk!eOl!eOSiiTiiWiiYii[ii]ii^iiciifiihiioiipiiqiiriisiiuiixiizii!Oiibii{iivii~Omiinii~P:yOm!fOn!fO~P:yOj!eOk!eOl!eOm!fOn!fOo!gOp!gOq!gOSiiTiiWiiYii[ii]ii^iiciifiihiisiiuiixiizii!Oiibii{iivii~Orii~P=OOr!hO~P=OOSeaTeaWeaYea[ea]ea^eaceafeaheaueaxeazea!Oeabea{eavea~P-QOSgaTgaWgaYga[ga]ga^gacgafgahgaugaxgazga!Ogabga{gavga~P-QOP][^SYh!OzxufZU`{vokqrsmnjlpT`~",
|
|
11
|
+
goto: "%}!YPPP!ZPPP!gP!ZPPPPP!jP#[PP!j!jP!jP!jPPPPPPPPPP!ZPP!ZP!ZPP!Z#eP#i#w#}PPPP$T$ie[ORZ^admp!Q!UR!Qs!_VORSTXYZ^abdghijkmp|!Q!R!U!a!c!d!e!f!g!h!iQubQ!Y!aR!Z!RT`O^Q^OQdRQpZVq^dpQ!W!PR!_!WQ!SuR![!S[]ORZ^dpQraQ}mQ!X!QR!]!UdUORZ^admp!Q!UQeSQfTQmXQnYUtb!R!aSwg!eQxhQyiQzjQ{kQ!T|Q!j!fQ!k!gQ!l!hQ!m!iQ!n!cR!o!d",
|
|
12
|
+
nodeNames: "⚠ Comment Program FunctionDecl discoverHowTo Identifier with ArgumentList , Assignment expertsClaim toBe NumberLiteral StringLiteral BooleanLiteral FunctionCall of ArgumentExpression ) ( ParenBlock PrintStatement youWontWantToMiss InputStatement latestNewsOn BinaryExpression times dividedBy modulo plus minus isActually beats smallerThan and or IfStatement whatIf liesBang ReturnStatement shockingDevelopment Block rumorHasIt endOfStory ExprStatement ProgramEnd pleaseLikeAndSubscribe",
|
|
13
|
+
maxTerm: 55,
|
|
13
14
|
nodeProps: [
|
|
14
|
-
["openedBy",
|
|
15
|
-
["closedBy",
|
|
15
|
+
["openedBy", 18,"("],
|
|
16
|
+
["closedBy", 19,")"]
|
|
16
17
|
],
|
|
17
|
-
skippedNodes: [0],
|
|
18
|
+
skippedNodes: [0,1],
|
|
18
19
|
repeatNodeCount: 3,
|
|
19
|
-
tokenData: "!
|
|
20
|
+
tokenData: "!Nw~RsXY#`YZ#k]^#kpq#`rs#pst%^wx%xxy)ayz)f|})k}!O({!Q![)p!c!d*Z!d!e+w!e!f.h!f!g5R!g!h>[!h!k({!k!lEw!l!n({!n!oH[!o!pNu!p!q({!q!r!&c!r!s!(R!s!t({!t!u!/i!u!v!3k!v!w!>O!w!y({!y!z!El!z!{({!{!|!I}!|!}({#R#S({~#eQ!U~XY#`pq#`~#pO!V~~#sVOr#prs$Ys#O#p#O#P$_#P;'S#p;'S;=`%W<%lO#p~$_O]~~$bRO;'S#p;'S;=`$k;=`O#p~$nWOr#prs$Ys#O#p#O#P$_#P;'S#p;'S;=`%W;=`<%l#p<%lO#p~%ZP;=`<%l#p~%cTP~OY%^Z]%^^;'S%^;'S;=`%r<%lO%^~%uP;=`<%l%^~%}_T~Ow&|wx(ex}&|}!O%x!O!Q&|!Q![%x![!c&|!c!}%x!}#O&|#O#P'f#P#R&|#R#S%x#S;'S&|;'S;=`(_<%lO&|~'PVOw&|wx$Yx#O&|#O#P'f#P;'S&|;'S;=`(_<%lO&|~'iRO;'S&|;'S;=`'r;=`O&|~'uWOw&|wx$Yx#O&|#O#P'f#P;'S&|;'S;=`(_;=`<%l&|<%lO&|~(bP;=`<%l&|~(lT]~T~wx({}!O({!Q![({!c!}({#R#S({~)QTT~wx({}!O({!Q![({!c!}({#R#S({~)fOc~~)kOb~~)pOW~~)uQ[~!O!P){!Q![)p~*OP!Q![*R~*WP[~!Q![*R~*`VT~wx({}!O({!Q![({!c!p({!p!q*u!q!}({#R#S({~*zVT~wx({}!O({!Q![({!c!f({!f!g+a!g!}({#R#S({~+hTr~T~wx({}!O({!Q![({!c!}({#R#S({~+|VT~wx({}!O({!Q![({!c!g({!g!h,c!h!}({#R#S({~,hUT~wx({}!O({!Q![({!c!d,z!d!}({#R#S({~-PVT~wx({}!O({!Q![({!c!v({!v!w-f!w!}({#R#S({~-kVT~wx({}!O({!Q![({!c!u({!u!v.Q!v!}({#R#S({~.XTp~T~wx({}!O({!Q![({!c!}({#R#S({~.mVT~wx({}!O({!Q![({!c!q({!q!r/S!r!}({#R#S({~/XVT~wx({}!O({!Q![({!c!o({!o!p/n!p!}({#R#S({~/sVT~wx({}!O({!Q![({!c!r({!r!s0Y!s!}({#R#S({~0_VT~wx({}!O({!Q![({!c!n({!n!o0t!o!}({#R#S({~0yVT~wx({}!O({!Q![({!c!g({!g!h1`!h!}({#R#S({~1eVT~wx({}!O({!Q![({!c!v({!v!w1z!w!}({#R#S({~2PVT~wx({}!O({!Q![({!c!g({!g!h2f!h!}({#R#S({~2kVT~wx({}!O({!Q![({!c!n({!n!o3Q!o!}({#R#S({~3VVT~wx({}!O({!Q![({!c!{({!{!|3l!|!}({#R#S({~3qVT~XY4Wpq4Wwx({}!O({!Q![({!c!}({#R#S({~4ZRXY4Wpq4W!y!z4d~4gP!t!u4j~4mP!q!r4p~4sP!p!q4v~4yP!i!j4|~5RO^~~5WVT~wx({}!O({!Q![({!c!k({!k!l5m!l!}({#R#S({~5rXT~wx({}!O({!Q![({!c!u({!u!v6_!v!x({!x!y:{!y!}({#R#S({~6dVT~wx({}!O({!Q![({!c!e({!e!f6y!f!}({#R#S({~7OVT~wx({}!O({!Q![({!c!q({!q!r7e!r!}({#R#S({~7jVT~wx({}!O({!Q![({!c!x({!x!y8P!y!}({#R#S({~8UVT~wx({}!O({!Q![({!c!g({!g!h8k!h!}({#R#S({~8pVT~wx({}!O({!Q![({!c!t({!t!u9V!u!}({#R#S({~9[VT~XY9qpq9qwx({}!O({!Q![({!c!}({#R#S({~9tRXY9qpq9q!j!k9}~:QP!q!r:T~:WP!y!z:Z~:^QXY:dpq:d~:gRXY:dpq:d!v!w:p~:sP!q!r:v~:{OS~~;QVT~wx({}!O({!Q![({!c!k({!k!l;g!l!}({#R#S({~;lVT~wx({}!O({!Q![({!c!f({!f!g<R!g!}({#R#S({~<WVT~wx({}!O({!Q![({!c!g({!g!h<m!h!}({#R#S({~<rVT~wx({}!O({!Q![({!c!f({!f!g=X!g!}({#R#S({~=^VT~XY=spq=swx({}!O({!Q![({!c!}({#R#S({~=vRXY=spq=s!d!e>P~>SP!{!|>V~>[Ok~~>aXT~wx({}!O({!Q![({!c!p({!p!q>|!q!z({!z!{Aj!{!}({#R#S({~?RVT~wx({}!O({!Q![({!c!f({!f!g?h!g!}({#R#S({~?mVT~XY@Spq@Swx({}!O({!Q![({!c!}({#R#S({~@VRXY@Spq@S!q!r@`~@cP!h!i@f~@iQXY@opq@o~@rRXY@opq@o!u!v@{~AOP!v!wAR~AUP!q!rAX~A[P!t!uA_~AbP!{!|Ae~AjO{~~AoVT~wx({}!O({!Q![({!c!r({!r!sBU!s!}({#R#S({~BZVT~wx({}!O({!Q![({!c!g({!g!hBp!h!}({#R#S({~BuVT~wx({}!O({!Q![({!c!t({!t!uC[!u!}({#R#S({~CaVT~wx({}!O({!Q![({!c!v({!v!wCv!w!}({#R#S({~C{VT~wx({}!O({!Q![({!c!u({!u!vDb!v!}({#R#S({~DgVT~XYD|pqD|wx({}!O({!Q![({!c!}({#R#S({~EPRXYD|pqD|!e!fEY~E]P!n!oE`~EcP!c!dEf~EiP!k!lEl~EoP!o!pEr~EwOY~~E|VT~wx({}!O({!Q![({!c!u({!u!vFc!v!}({#R#S({~FhVT~XYF}pqF}wx({}!O({!Q![({!c!}({#R#S({~GQRXYF}pqF}!c!dGZ~G^P!e!fGa~GdP!v!wGg~GjP!w!xGm~GpP!c!dGs~GvP!n!oGy~G|P!n!oHP~HSP!{!|HV~H[Oo~~HaWT~wx({}!O({!Q![({!c!dHy!d!k({!k!lMR!l!}({#R#S({~IOVT~wx({}!O({!Q![({!c!v({!v!wIe!w!}({#R#S({~IjVT~wx({}!O({!Q![({!c!g({!g!hJP!h!}({#R#S({~JUVT~wx({}!O({!Q![({!c!u({!u!vJk!v!}({#R#S({~JpVT~wx({}!O({!Q![({!c!v({!v!wKV!w!}({#R#S({~K[VT~XYKqpqKqwx({}!O({!Q![({!c!}({#R#S({~KtRXYKqpqKq!p!qK}~LQP!g!hLT~LWP!y!zLZ~L^P!u!vLa~LdQXYLjpqLj~LmRXYLjpqLj!q!rLv~LyP!p!qL|~MROh~~MWVT~wx({}!O({!Q![({!c!g({!g!hMm!h!}({#R#S({~MrVT~wx({}!O({!Q![({!c!u({!u!vNX!v!}({#R#S({~N^UT~qrNpwx({}!O({!Q![({!c!}({#R#S({~NuOv~~NzXT~wx({}!O({!Q![({!c!k({!k!l! g!l!q({!q!r!#o!r!}({#R#S({~! lVT~wx({}!O({!Q![({!c!p({!p!q!!R!q!}({#R#S({~!!WVT~wx({}!O({!Q![({!c!w({!w!x!!m!x!}({#R#S({~!!rVT~wx({}!O({!Q![({!c!u({!u!v!#X!v!}({#R#S({~!#`Tn~T~wx({}!O({!Q![({!c!}({#R#S({~!#tVT~wx({}!O({!Q![({!c!f({!f!g!$Z!g!}({#R#S({~!$`VT~wx({}!O({!Q![({!c!w({!w!x!$u!x!}({#R#S({~!$zVT~wx({}!O({!Q![({!c!n({!n!o!%a!o!}({#R#S({~!%fVT~wx({}!O({!Q![({!c!q({!q!r!%{!r!}({#R#S({~!&STl~T~wx({}!O({!Q![({!c!}({#R#S({~!&hXT~wx({}!O({!Q![({!c!h({!h!i!'T!i!t({!t!u!'k!u!}({#R#S({~!'[T`~T~wx({}!O({!Q![({!c!}({#R#S({~!'rTs~T~wx({}!O({!Q![({!c!}({#R#S({~!(WVT~wx({}!O({!Q![({!c!n({!n!o!(m!o!}({#R#S({~!(rXT~wx({}!O({!Q![({!c!g({!g!h!)_!h!w({!w!x!.g!x!}({#R#S({~!)dUT~wx({}!O({!Q![({!c!d!)v!d!}({#R#S({~!){VT~wx({}!O({!Q![({!c!u({!u!v!*b!v!}({#R#S({~!*gVT~wx({}!O({!Q![({!c!g({!g!h!*|!h!}({#R#S({~!+RVT~XY!+hpq!+hwx({}!O({!Q![({!c!}({#R#S({~!+kRXY!+hpq!+h!n!o!+t~!+wP!k!l!+z~!+}P!m!n!,Q~!,TP!g!h!,W~!,ZQXY!,apq!,a~!,dRXY!,apq!,a!c!d!,m~!,pP!p!q!,s~!,vP!f!g!,y~!,|QXY!-Spq!-S~!-VRXY!-Spq!-S!u!v!-`~!-cP!w!x!-f~!-iP!d!e!-l~!-oP!u!v!-r~!-uP!e!f!-x~!-{P!t!u!.O~!.RP!k!l!.U~!.XP!d!e!.[~!._P!g!h!.b~!.gO!O~~!.lVT~wx({}!O({!Q![({!c!u({!u!v!/R!v!}({#R#S({~!/YTm~T~wx({}!O({!Q![({!c!}({#R#S({~!/nVT~wx({}!O({!Q![({!c!w({!w!x!0T!x!}({#R#S({~!0YVT~wx({}!O({!Q![({!c!o({!o!p!0o!p!}({#R#S({~!0tVT~wx({}!O({!Q![({!c!q({!q!r!1Z!r!}({#R#S({~!1`VT~wx({}!O({!Q![({!c!t({!t!u!1u!u!}({#R#S({~!1zVT~XY!2apq!2awx({}!O({!Q![({!c!}({#R#S({~!2dRXY!2apq!2a!j!k!2m~!2pP!c!d!2s~!2vP!u!v!2y~!2|QXY!3Spq!3S~!3VRXY!3Spq!3S!k!l!3`~!3cP!v!w!3f~!3kOz~~!3pXT~wx({}!O({!Q![({!c!j({!j!k!4]!k!o({!o!p!9z!p!}({#R#S({~!4bVT~wx({}!O({!Q![({!c!q({!q!r!4w!r!}({#R#S({~!4|VT~wx({}!O({!Q![({!c!e({!e!f!5c!f!}({#R#S({~!5hVT~wx({}!O({!Q![({!c!m({!m!n!5}!n!}({#R#S({~!6SVT~wx({}!O({!Q![({!c!k({!k!l!6i!l!}({#R#S({~!6nVT~wx({}!O({!Q![({!c!p({!p!q!7T!q!}({#R#S({~!7YVT~wx({}!O({!Q![({!c!i({!i!j!7o!j!}({#R#S({~!7tVT~XY!8Zpq!8Zwx({}!O({!Q![({!c!}({#R#S({~!8^RXY!8Zpq!8Z!f!g!8g~!8jP!g!h!8m~!8pP!x!y!8s~!8vP!g!h!8y~!8|P!n!o!9P~!9SP!q!r!9V~!9YP!r!s!9]~!9`P!o!p!9c~!9fP!g!h!9i~!9lP!p!q!9o~!9rP!v!w!9u~!9zOx~~!:PUT~wx({}!O({!Q![({!c!d!:c!d!}({#R#S({~!:hVT~wx({}!O({!Q![({!c!n({!n!o!:}!o!}({#R#S({~!;SVT~wx({}!O({!Q![({!c!n({!n!o!;i!o!}({#R#S({~!;nVT~wx({}!O({!Q![({!c!g({!g!h!<T!h!}({#R#S({~!<YVT~wx({}!O({!Q![({!c!t({!t!u!<o!u!}({#R#S({~!<tVT~XY!=Zpq!=Zwx({}!O({!Q![({!c!}({#R#S({~!=^RXY!=Zpq!=Z!v!w!=g~!=jP!j!k!=m~!=pP!c!d!=s~!=vP!p!q!=y~!>OOq~~!>TXT~wx({}!O({!Q![({!c!k({!k!l!>p!l!q({!q!r!@x!r!}({#R#S({~!>uVT~wx({}!O({!Q![({!c!o({!o!p!?[!p!}({#R#S({~!?aVT~wx({}!O({!Q![({!c!g({!g!h!?v!h!}({#R#S({~!?{VT~wx({}!O({!Q![({!c!u({!u!v!@b!v!}({#R#S({~!@iTj~T~wx({}!O({!Q![({!c!}({#R#S({~!@}XT~XY!Ajpq!Ajwx({}!O({!Q![({!c!v({!v!w!BR!w!}({#R#S({~!AmRXY!Ajpq!Aj!d!e!Av~!AyP!g!h!A|~!BROZ~~!BWUT~wx({}!O({!Q![({!c!d!Bj!d!}({#R#S({~!BoVT~wx({}!O({!Q![({!c!n({!n!o!CU!o!}({#R#S({~!CZVT~wx({}!O({!Q![({!c!n({!n!o!Cp!o!}({#R#S({~!CuVT~wx({}!O({!Q![({!c!{({!{!|!D[!|!}({#R#S({~!DaVT~XY!Dvpq!Dvwx({}!O({!Q![({!c!}({#R#S({~!DyRXY!Dvpq!Dv!t!u!ES~!EVP!k!l!EY~!E]P!i!j!E`~!EcP!j!k!Ef~!EiP!v!w4|~!EqWT~wx({}!O({!Q![({!c!j({!j!k!FZ!k!l!Ha!l!}({#R#S({~!F`UT~wx({}!O({!Q![({!c!d!Fr!d!}({#R#S({~!FwVT~wx({}!O({!Q![({!c!v({!v!w!G^!w!}({#R#S({~!GcVT~XY!Gxpq!Gxwx({}!O({!Q![({!c!}({#R#S({~!G{RXY!Gxpq!Gx!k!l!HU~!HXP!h!i!H[~!HaOu~~!HfVT~wx({}!O({!Q![({!c!v({!v!w!H{!w!}({#R#S({~!IQVT~wx({}!O({!Q![({!c!j({!j!k!Ig!k!}({#R#S({~!InTU~T~wx({}!O({!Q![({!c!}({#R#S({~!JSVT~wx({}!O({!Q![({!c!q({!q!r!Ji!r!}({#R#S({~!JnVT~wx({}!O({!Q![({!c!w({!w!x!KT!x!}({#R#S({~!KYVT~XY!Kopq!Kowx({}!O({!Q![({!c!}({#R#S({~!KrRXY!Kopq!Ko!y!z!K{~!LOP!q!r!LR~!LUP!p!q!LX~!L[Pwx!L_~!LbP!v!w!Le~!LhQXY!Lnpq!Ln~!LqRXY!Lnpq!Ln!y!z!Lz~!L}P!c!d!MQ~!MTP!p!q!MW~!MZP!v!w!M^~!MaQXY!Mgpq!Mg~!MjRXY!Mgpq!Mg!v!w!Ms~!MvP!q!r!My~!M|QXY!NSpq!NS~!NVRXY!NSpq!NS!o!p!N`~!NcP!k!l!Nf~!NiP!u!v!Nl~!NoP!u!v!Nr~!NwOf~",
|
|
20
21
|
tokenizers: [0],
|
|
21
|
-
topRules: {"Program":[0,
|
|
22
|
-
tokenPrec:
|
|
22
|
+
topRules: {"Program":[0,2]},
|
|
23
|
+
tokenPrec: 1492
|
|
23
24
|
});
|
|
24
25
|
|
|
26
|
+
const highlighting = styleTags({
|
|
27
|
+
// Comments
|
|
28
|
+
Comment: tags.lineComment,
|
|
29
|
+
// Literals
|
|
30
|
+
NumberLiteral: tags.number,
|
|
31
|
+
StringLiteral: tags.string,
|
|
32
|
+
BooleanLiteral: tags.bool,
|
|
33
|
+
// Identifiers
|
|
34
|
+
Identifier: tags.variableName,
|
|
35
|
+
"FunctionDecl/Identifier": tags.function(tags.definition(tags.variableName)),
|
|
36
|
+
"FunctionCall/Identifier": tags.function(tags.variableName),
|
|
37
|
+
"ArgumentList/Identifier": tags.variableName,
|
|
38
|
+
// Keywords - Definitions (use controlKeyword for better color)
|
|
39
|
+
discoverHowTo: tags.controlKeyword,
|
|
40
|
+
expertsClaim: tags.keyword,
|
|
41
|
+
toBe: tags.operator,
|
|
42
|
+
with: tags.keyword,
|
|
43
|
+
of: tags.keyword,
|
|
44
|
+
// Keywords - Control flow
|
|
45
|
+
whatIf: tags.controlKeyword,
|
|
46
|
+
liesBang: tags.controlKeyword,
|
|
47
|
+
shockingDevelopment: tags.controlKeyword,
|
|
48
|
+
// Keywords - I/O
|
|
49
|
+
youWontWantToMiss: tags.keyword,
|
|
50
|
+
latestNewsOn: tags.keyword,
|
|
51
|
+
// Keywords - Block delimiters
|
|
52
|
+
rumorHasIt: tags.brace,
|
|
53
|
+
endOfStory: tags.brace,
|
|
54
|
+
// Keywords - Program structure
|
|
55
|
+
pleaseLikeAndSubscribe: tags.moduleKeyword,
|
|
56
|
+
// Operators - Comparison
|
|
57
|
+
isActually: tags.compareOperator,
|
|
58
|
+
beats: tags.compareOperator,
|
|
59
|
+
smallerThan: tags.compareOperator,
|
|
60
|
+
// Operators - Logical
|
|
61
|
+
and: tags.logicOperator,
|
|
62
|
+
or: tags.logicOperator,
|
|
63
|
+
// Operators - Arithmetic
|
|
64
|
+
plus: tags.arithmeticOperator,
|
|
65
|
+
minus: tags.arithmeticOperator,
|
|
66
|
+
times: tags.arithmeticOperator,
|
|
67
|
+
dividedBy: tags.arithmeticOperator,
|
|
68
|
+
modulo: tags.arithmeticOperator,
|
|
69
|
+
// Punctuation
|
|
70
|
+
"(": tags.paren,
|
|
71
|
+
")": tags.paren,
|
|
72
|
+
",": tags.separator,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const keywords = [
|
|
76
|
+
// Function and variable declarations
|
|
77
|
+
{ label: "DISCOVER HOW TO", type: "keyword", info: "Function declaration" },
|
|
78
|
+
{ label: "WITH", type: "keyword", info: "Function parameters" },
|
|
79
|
+
{ label: "EXPERTS CLAIM", type: "keyword", info: "Variable assignment" },
|
|
80
|
+
{ label: "TO BE", type: "keyword", info: "Assignment operator" },
|
|
81
|
+
// Control flow
|
|
82
|
+
{ label: "WHAT IF", type: "keyword", info: "If statement" },
|
|
83
|
+
{ label: "LIES!", type: "keyword", info: "Else statement" },
|
|
84
|
+
{ label: "SHOCKING DEVELOPMENT", type: "keyword", info: "Return statement" },
|
|
85
|
+
// Blocks
|
|
86
|
+
{ label: "RUMOR HAS IT", type: "keyword", info: "Block start" },
|
|
87
|
+
{ label: "END OF STORY", type: "keyword", info: "Block end" },
|
|
88
|
+
// I/O
|
|
89
|
+
{ label: "YOU WON'T WANT TO MISS", type: "keyword", info: "Print statement" },
|
|
90
|
+
{ label: "LATEST NEWS ON", type: "keyword", info: "Input statement" },
|
|
91
|
+
// Boolean literals
|
|
92
|
+
{ label: "TOTALLY RIGHT", type: "keyword", info: "True" },
|
|
93
|
+
{ label: "COMPLETELY WRONG", type: "keyword", info: "False" },
|
|
94
|
+
// Operators
|
|
95
|
+
{ label: "IS ACTUALLY", type: "keyword", info: "Equality comparison" },
|
|
96
|
+
{ label: "BEATS", type: "keyword", info: "Greater than" },
|
|
97
|
+
{ label: "SMALLER THAN", type: "keyword", info: "Less than" },
|
|
98
|
+
{ label: "AND", type: "keyword", info: "Logical AND" },
|
|
99
|
+
{ label: "OR", type: "keyword", info: "Logical OR" },
|
|
100
|
+
{ label: "PLUS", type: "keyword", info: "Addition" },
|
|
101
|
+
{ label: "MINUS", type: "keyword", info: "Subtraction" },
|
|
102
|
+
{ label: "TIMES", type: "keyword", info: "Multiplication" },
|
|
103
|
+
{ label: "DIVIDED BY", type: "keyword", info: "Division" },
|
|
104
|
+
{ label: "MODULO", type: "keyword", info: "Modulus" },
|
|
105
|
+
{ label: "OF", type: "keyword", info: "Function call" },
|
|
106
|
+
// Program end
|
|
107
|
+
{
|
|
108
|
+
label: "PLEASE LIKE AND SUBSCRIBE",
|
|
109
|
+
type: "keyword",
|
|
110
|
+
info: "End of program",
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
function tabloidCompletion(context) {
|
|
114
|
+
const word = context.matchBefore(/[A-Z'][A-Z\-'\s]*/);
|
|
115
|
+
if (!word || (word.from === word.to && !context.explicit)) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
from: word.from,
|
|
120
|
+
options: keywords,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Wrap parser to debug
|
|
125
|
+
const originalParse = parser.parse.bind(parser);
|
|
126
|
+
parser.parse = function (input, fragments, ranges) {
|
|
127
|
+
console.log("[PARSER] parse called with input:", typeof input === "string" ? input.substring(0, 100) : input);
|
|
128
|
+
const result = originalParse(input, fragments, ranges);
|
|
129
|
+
console.log("[PARSER] parse result:", result.toString());
|
|
130
|
+
return result;
|
|
131
|
+
};
|
|
25
132
|
const tabloidLanguage = LRLanguage.define({
|
|
26
133
|
parser: parser.configure({
|
|
27
134
|
props: [
|
|
28
135
|
indentNodeProp.add({
|
|
29
136
|
Block: delimitedIndent({ closing: "endOfStory", align: false }),
|
|
30
137
|
ParenBlock: delimitedIndent({ closing: ")", align: false }),
|
|
31
|
-
FunctionDecl: context => context.baseIndent + context.unit,
|
|
32
|
-
IfStatement: context => context.baseIndent + context.unit,
|
|
138
|
+
FunctionDecl: (context) => context.baseIndent + context.unit,
|
|
139
|
+
IfStatement: (context) => context.baseIndent + context.unit,
|
|
33
140
|
}),
|
|
34
141
|
foldNodeProp.add({
|
|
35
142
|
Block: foldInside,
|
|
36
143
|
ParenBlock: foldInside,
|
|
37
144
|
}),
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
NumberLiteral: tags.number,
|
|
41
|
-
StringLiteral: tags.string,
|
|
42
|
-
BooleanLiteral: tags.bool,
|
|
43
|
-
FunctionCall: tags.function(tags.variableName),
|
|
44
|
-
discoverHowTo: tags.definitionKeyword,
|
|
45
|
-
expertsClaim: tags.definitionKeyword,
|
|
46
|
-
toBe: tags.operatorKeyword,
|
|
47
|
-
rumorHasIt: tags.keyword,
|
|
48
|
-
endOfStory: tags.keyword,
|
|
49
|
-
whatIf: tags.controlKeyword,
|
|
50
|
-
liesBang: tags.controlKeyword,
|
|
51
|
-
shockingDevelopment: tags.controlKeyword,
|
|
52
|
-
youWontWantToMiss: tags.keyword,
|
|
53
|
-
latestNewsOn: tags.keyword,
|
|
54
|
-
pleaseLikeAndSubscribe: tags.keyword,
|
|
55
|
-
"with of": tags.keyword,
|
|
56
|
-
"isActually beats smallerThan": tags.compareOperator,
|
|
57
|
-
"and or": tags.logicOperator,
|
|
58
|
-
"plus minus times dividedBy modulo": tags.arithmeticOperator,
|
|
59
|
-
"( )": tags.paren,
|
|
60
|
-
",": tags.separator
|
|
61
|
-
})
|
|
62
|
-
]
|
|
145
|
+
highlighting,
|
|
146
|
+
],
|
|
63
147
|
}),
|
|
64
148
|
languageData: {
|
|
65
|
-
commentTokens: {}
|
|
66
|
-
|
|
149
|
+
commentTokens: {},
|
|
150
|
+
closeBrackets: { brackets: ["(", '"', "'"] },
|
|
151
|
+
autocomplete: tabloidCompletion,
|
|
152
|
+
},
|
|
67
153
|
});
|
|
68
154
|
function tabloid() {
|
|
69
|
-
return new LanguageSupport(tabloidLanguage
|
|
155
|
+
return new LanguageSupport(tabloidLanguage, [
|
|
156
|
+
autocompletion({ override: [tabloidCompletion] }),
|
|
157
|
+
]);
|
|
70
158
|
}
|
|
71
159
|
|
|
72
|
-
export { tabloid, tabloidLanguage };
|
|
160
|
+
export { tabloid, tabloidCompletion, tabloidLanguage };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emprespresso/codemirror-lang-tabloid",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "tabloid language support for CodeMirror",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "mocha test/test.js",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"types": "dist/index.d.ts",
|
|
18
18
|
"sideEffects": false,
|
|
19
19
|
"dependencies": {
|
|
20
|
+
"@codemirror/autocomplete": "^6.20.0",
|
|
20
21
|
"@codemirror/language": "^6.0.0",
|
|
21
22
|
"@lezer/highlight": "^1.0.0",
|
|
22
23
|
"@lezer/lr": "^1.0.0"
|