@emprespresso/codemirror-lang-tabloid 0.1.0 → 0.2.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/dist/index.cjs +131 -41
- package/dist/index.js +131 -42
- package/package.json +2 -1
package/dist/index.cjs
CHANGED
|
@@ -3,73 +3,163 @@
|
|
|
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
|
+
filter: false, // Let CodeMirror handle filtering
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Wrap parser to debug
|
|
128
|
+
const originalParse = parser.parse.bind(parser);
|
|
129
|
+
parser.parse = function (input, fragments, ranges) {
|
|
130
|
+
console.log("[PARSER] parse called with input:", typeof input === "string" ? input.substring(0, 100) : input);
|
|
131
|
+
const result = originalParse(input, fragments, ranges);
|
|
132
|
+
console.log("[PARSER] parse result:", result.toString());
|
|
133
|
+
return result;
|
|
134
|
+
};
|
|
27
135
|
const tabloidLanguage = language.LRLanguage.define({
|
|
28
136
|
parser: parser.configure({
|
|
29
137
|
props: [
|
|
30
138
|
language.indentNodeProp.add({
|
|
31
139
|
Block: language.delimitedIndent({ closing: "endOfStory", align: false }),
|
|
32
140
|
ParenBlock: language.delimitedIndent({ closing: ")", align: false }),
|
|
33
|
-
FunctionDecl: context => context.baseIndent + context.unit,
|
|
34
|
-
IfStatement: context => context.baseIndent + context.unit,
|
|
141
|
+
FunctionDecl: (context) => context.baseIndent + context.unit,
|
|
142
|
+
IfStatement: (context) => context.baseIndent + context.unit,
|
|
35
143
|
}),
|
|
36
144
|
language.foldNodeProp.add({
|
|
37
145
|
Block: language.foldInside,
|
|
38
146
|
ParenBlock: language.foldInside,
|
|
39
147
|
}),
|
|
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
|
-
]
|
|
148
|
+
highlighting,
|
|
149
|
+
],
|
|
65
150
|
}),
|
|
66
151
|
languageData: {
|
|
67
|
-
commentTokens: {}
|
|
68
|
-
|
|
152
|
+
commentTokens: {},
|
|
153
|
+
closeBrackets: { brackets: ["(", '"', "'"] },
|
|
154
|
+
autocomplete: tabloidCompletion,
|
|
155
|
+
},
|
|
69
156
|
});
|
|
70
157
|
function tabloid() {
|
|
71
|
-
return new language.LanguageSupport(tabloidLanguage
|
|
158
|
+
return new language.LanguageSupport(tabloidLanguage, [
|
|
159
|
+
autocomplete.autocompletion({ override: [tabloidCompletion] }),
|
|
160
|
+
]);
|
|
72
161
|
}
|
|
73
162
|
|
|
74
163
|
exports.tabloid = tabloid;
|
|
164
|
+
exports.tabloidCompletion = tabloidCompletion;
|
|
75
165
|
exports.tabloidLanguage = tabloidLanguage;
|
package/dist/index.js
CHANGED
|
@@ -1,72 +1,161 @@
|
|
|
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
|
+
filter: false, // Let CodeMirror handle filtering
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Wrap parser to debug
|
|
126
|
+
const originalParse = parser.parse.bind(parser);
|
|
127
|
+
parser.parse = function (input, fragments, ranges) {
|
|
128
|
+
console.log("[PARSER] parse called with input:", typeof input === "string" ? input.substring(0, 100) : input);
|
|
129
|
+
const result = originalParse(input, fragments, ranges);
|
|
130
|
+
console.log("[PARSER] parse result:", result.toString());
|
|
131
|
+
return result;
|
|
132
|
+
};
|
|
25
133
|
const tabloidLanguage = LRLanguage.define({
|
|
26
134
|
parser: parser.configure({
|
|
27
135
|
props: [
|
|
28
136
|
indentNodeProp.add({
|
|
29
137
|
Block: delimitedIndent({ closing: "endOfStory", align: false }),
|
|
30
138
|
ParenBlock: delimitedIndent({ closing: ")", align: false }),
|
|
31
|
-
FunctionDecl: context => context.baseIndent + context.unit,
|
|
32
|
-
IfStatement: context => context.baseIndent + context.unit,
|
|
139
|
+
FunctionDecl: (context) => context.baseIndent + context.unit,
|
|
140
|
+
IfStatement: (context) => context.baseIndent + context.unit,
|
|
33
141
|
}),
|
|
34
142
|
foldNodeProp.add({
|
|
35
143
|
Block: foldInside,
|
|
36
144
|
ParenBlock: foldInside,
|
|
37
145
|
}),
|
|
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
|
-
]
|
|
146
|
+
highlighting,
|
|
147
|
+
],
|
|
63
148
|
}),
|
|
64
149
|
languageData: {
|
|
65
|
-
commentTokens: {}
|
|
66
|
-
|
|
150
|
+
commentTokens: {},
|
|
151
|
+
closeBrackets: { brackets: ["(", '"', "'"] },
|
|
152
|
+
autocomplete: tabloidCompletion,
|
|
153
|
+
},
|
|
67
154
|
});
|
|
68
155
|
function tabloid() {
|
|
69
|
-
return new LanguageSupport(tabloidLanguage
|
|
156
|
+
return new LanguageSupport(tabloidLanguage, [
|
|
157
|
+
autocompletion({ override: [tabloidCompletion] }),
|
|
158
|
+
]);
|
|
70
159
|
}
|
|
71
160
|
|
|
72
|
-
export { tabloid, tabloidLanguage };
|
|
161
|
+
export { tabloid, tabloidCompletion, tabloidLanguage };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emprespresso/codemirror-lang-tabloid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
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"
|