From c6b812fd8dc7bff89c20aa339c02c5210ee0e661 Mon Sep 17 00:00:00 2001 From: Dmitriy Pleshevskiy Date: Wed, 14 Jun 2023 09:07:37 +0300 Subject: [PATCH] grammar: add grid-row, grid-column, grid-gap Closes #13 --- grammar.js | 5 ++++- src/grammar.json | 25 +++++++++++++++++++++++ src/node-types.json | 12 +++++++++++ src/parser.c | Bin 201932 -> 205924 bytes test/corpus/attributes.txt | 40 ++++++++++++++++++++++++++++++++++++- test/highlight/grid.d2 | 39 ++++++++++++++++++++++++++++++++++++ 6 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 test/highlight/grid.d2 diff --git a/grammar.js b/grammar.js index 9286e49..2107c99 100644 --- a/grammar.js +++ b/grammar.js @@ -160,6 +160,7 @@ module.exports = grammar({ _root_attr_key: ($) => choice( "direction", + $._grid_attr_key, // reserved but doesn't affected for root alias( choice( @@ -198,7 +199,8 @@ module.exports = grammar({ // image "icon", "width", - "height" + "height", + $._grid_attr_key ) ), @@ -235,6 +237,7 @@ module.exports = grammar({ seq(alias($._style_attr_key, $.attr_key), $._colon, $.attr_value) ), + _grid_attr_key: ($) => choice("grid-gap", "grid-columns", "grid-rows"), _style_attr_key: ($) => choice($._common_style_attr_key, "3d"), _common_style_attr_key: ($) => diff --git a/src/grammar.json b/src/grammar.json index 3236b97..b108d85 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -678,6 +678,10 @@ "type": "STRING", "value": "direction" }, + { + "type": "SYMBOL", + "name": "_grid_attr_key" + }, { "type": "ALIAS", "content": { @@ -804,6 +808,10 @@ { "type": "STRING", "value": "height" + }, + { + "type": "SYMBOL", + "name": "_grid_attr_key" } ] } @@ -970,6 +978,23 @@ ] } }, + "_grid_attr_key": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "grid-gap" + }, + { + "type": "STRING", + "value": "grid-columns" + }, + { + "type": "STRING", + "value": "grid-rows" + } + ] + }, "_style_attr_key": { "type": "CHOICE", "members": [ diff --git a/src/node-types.json b/src/node-types.json index 97a22c7..c78856b 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -428,6 +428,18 @@ "type": "font-size", "named": false }, + { + "type": "grid-columns", + "named": false + }, + { + "type": "grid-gap", + "named": false + }, + { + "type": "grid-rows", + "named": false + }, { "type": "height", "named": false diff --git a/src/parser.c b/src/parser.c index 8a09de8fa77e8cd0e160685e5cc8adc791484dab..39c1580b0753d7c590662b4b8375bdabec2673f9 100644 GIT binary patch delta 20393 zcmdsfd3=;b(*LJ>5^~LigoNA)GYLo%U^DjtC<*s{2+IO0AwWPRB;im*J3VnPbDZYzUt-e#(Tg#a)XA_Z(kRX};QQ^R~of^+s6{s%4h}eFyZHY^9`ZSTY5RAvp?1$r)QQP0}t=)1-B3s5XNK{c*sMZnD-R zjy6dS2W)1uuqL(=qawnTLRGVPYYCN0;#PBtHJ94CY+_zS;v83~F5^ndrk2Xupe_^2 zrzabroP zlwGT2Zoud8OS~{J=8I zl2@ma+VS-|dL3w+!q83%U)JdjvAj0)|pW#OF?z8*C&*Zm#iQ-qbn-PN=sCSpg|Rv zmdhRGQ<}ZqE+a}38b)vTP7^;Gn^BwhSh8qtil_Ydm{H8>W0F|-eBv=d6+3x~ zh%1PYhGer!Y?gk@ay1It(4bp+ij-=zN=3xZf|MqTa&8!5+863YZ$L%1gs~l5YBpM% zue+!}t!t}0*o(E7-nFi=r0TcaP#9;9N(osy)mZc2Vp~e4i0u(6wx%R*xGS|oM2ORu z4IAnQ)i1Ak!*2R4F48qHiKK=dWz~ia<|ENL4Q8PXI)p3Yx+kg$-H@NMVOyK6QASm* zM=>$kQ5Y9w=o(3;Dae$gNzR6cT@&NOBwNgDpCu~oiDFl;W+JtF%!b$=yOTxqm<*~O z%8azX4a*d}#>O(2IJzZ66c?Ms{Uw=VRH+G^_@$X*ZjFg*a?oh*cP4t|7M4jB^I3)% zurO8(ywyZcPDa&{`(*2ycQQrgCKJ6elcfsl-Z-)NXQN18+DvpjV5AkzV4Po-H51zp z7`fd;lZUX3Wrt0)w-6Es<}ed==*(iMqlq;WZ~SVc(@|*u)97Y2*TK-itvZNN=Zs>= z-{ZvjEwRhZ=<`BL^gfB+%p-PxkwNArm{M3vmL&@Ak;90hg&E?=8k6W-8zW9vHKVGQ zs_oIL3|f+hqFc_IK23(KzTqrJd_1`Yt;}Oh#o^Jh%kDLay`!4aW3yNkZEweN3{G#J zm|U7F2EG6l)-DwN#ukV+YhtL60bB5~v8_VU%%rA6m`SW%lUW~DarVBfI#4y_YRjPI z0#k5gasPukG~fmnC0ygWbEjP#eezl{vMff-T^R<=qD8@ci>UrMOITkuiK4w0@yGF3 zU36?LCB_UaQe#7jB{wb(jPg@$Y6I!NOt@0%HSctSut;H=xF8^~tT-SrP85_CD0SzQ zT_7++jC|549<9t%MwcNvO>)t*Wi0EWwkD?$S8fufMH!-EQ>5(kqY$}?=mAlGWGvrvb;oC{a!BH}xVDk>18=EsUh?{A}qy5+70Lj}S> zhVuT$rq%QQCP(W$b5Yl!Mg6;U%k?5uWLy{z>hIC2Ju*T_PR9c#`h>yN&m6*{?tCB=(DgHoV<}naa4lP96g*N;#9#sChm2MqEYE^??$@U zfF@guo6*2T6qekR&s4z3yQn+J7Cr9maUrn5*)CgT5~-8(==S-D1c-G1ug}$UUt@Ev z7ZomTn>Rdgt&nly{0Fy-IrsNc#STrf3_D( zR%kK$jTQgtNP!^+>f-72Z0w`0>8v0m85rEne{lq#gYh3HBV07O2vSz(|U;Z}-XjJJs`GM#^^3{O+P-k&Pa96!HxXx2(VZt25 z{jVGUMafFz1Dgg@orkC&dailnO5{BpkHeev%DH0bn}cAB^~gf)s#T{L|9{fmmJZ*KK*`CeIZ z*hh_bta+zf{n_6N>l~>%{Na=QOCE4lW=GeS<0vOnGupoZz-z%EQcT_26OoMAZR{HE za;ih_ww)ct_J3xG@^1@*2w(N-wdz>XqCXo$)ty-Eh9;kN=k$6CvxrHxc^A8{2s+}z zgK-AC$4N_PG2e#!|K6m|H$L%~%k^$5ivQVmL*LHpd%D?GUhhiI`7c1I-du=e+`qS5q%e}}7T|{2B zTJ@NnL0PzAM)DN6_mOb9z$&Wt(X)5re#J?aFlH96UD_ElQxrbghI!Rx4uu!7cHHB` zy7v-T7SVb47IEUFMYR5B9(TGWG@T)8_ZKRZ(`U2sw1Y*AhPd?aa%r^*%RlzJTygU+ z7P0QTJTa*>hF*_iNh14uNo3OOzPQ!tGZpzu^noO??T1`ZR+<&$X8K`IX-qStq#yId zuV>7n_{UsPbk-u){+P?`f_`p?@-J2~w+mlD* znnInFy}2TDUyc~FHpFXoM4-PWy7{{RD6p?#mT@aRE__fBoky zB7J`@x7$U{KC>9RKbIbMqw%`^dDJZqg_HYp#rS;|(fOx58Xf`0;-4}^)gB}54u`0} zYXrAjHB`(8@5%&R!QAEV;NK>PGLXKQ#LbX6P%ASp5-XLzAVZK>BTI}jwE|u%R0AWk(`30T zzdw{~aM-NEcE~IW4!0H`t~64cFf7fjhvAJ6=ZJT~O#RqMkHmp#Jd!IWe2Lq><4IyD z${FP`^i?D(K01;wRvt8qgrm8l`I&5S*U?;V^QdWTKbnUtKiuxoVO$i_pj2p__H&+i z`6n2~&$wAMio%7N@?y`(ZBD9<1Q6>a-^6U1NuJbNE#99kIvrk}_aUG`hV+b3WfCYB?Nzvj}9MoeJnuX!{v424y{ z;=uj0k$jP;KA;m!uDR!=s=?e>oyZpRPo|@tiN4N){H-T5ky@H)UIvKdQ<8|KujNF> zoXQo;4rDL;EsyT)3$$(+2ypxSmM5;i)hPC#N)ZqJmagtu#qFDnV$taoVLGib=*wtq zpVM2K$@^65&_Q$KCNU8(4?Uf!I?*FWX!*qH42}As8Pq&*I*)v@IErgs>yH~$Qd*9lN=+nGFJyjOyoEK<(qiG@E}#OSka#KeWs(mayIy0f`-ra9DB_?|io z^uDu*F6Z(^8=$%5T%H)a$1HZ7!=?2(t7vsT9skD4HMWTI^BM9sf!l3VWB~n|qD`XY zO!o3HTw~5~h3AdpreitFSD*rA4*P}9%YR_GBK>Y7En+N%hBMZh24cSS z1Y^0hG8I#V;&c#{!ETeQZ6+^gc@*Vk7Pi+5kbs|8$9L8EwmoSztTZ*c~*|a!J3BetG6dLZptmHL` zkqQlv*)p7^Yvipq)J_VAVpez|dR3O(45hFp3=YU9cZh`sG(mTHhb}pC56}voqjFIC zz6qj^x?>NQ7+53p=Hl6tIW#js!3&sS#q@rFLBDWVNbNrTetw1vmDfdTqGH9dBW8L! zlI2sY7|1*p351_&ffgO3SRS_{L`pptMnO$%WJUZX3QMFe_#N1M7Rrha(rTUQMvY+- zt|JzziN+BQt;K%8by_1#5}$195u-Yq1UsHh%L2q}_rxg6qi=K$rAuscje6tf&t%h7 zjWAMs3&4IPnkCblU`cOe5;G22D8hvKDN4$oWzy=5wAg_|?{6m9(uXE2PSAT%T&&i? zD4f4$)Ag}>2eI$B9C|ty%e5vEI2=Jqta;NYo;#6D9h<_E_AN20_XoOLQm;)jisug} z(e|b+UwjNf8FA?PTT|>}`Ixdk1!m(sokQc}AYa+!!sZZL6NkYiDXLCn)7e0!sQuAG zJ>s=G6D{xphGp?uPZOmzMbEGFTEKh4LRU4@+lr3&sN*M1);UIDIhReZ2Pk@uqjN+; zp!pa3Ep)9;8JD-kIFEu-$6wQ73+>ej+7yFsjzm>u6pO#hrrA0{tx{kx0yadVj1rg(6lZH^hJ!?cfTk}%Z5B&>vF(Cb67I@sw+REvYZ;)z#| zStvaj6w)n|47L_G#Enme5Xq4dFPmP}$yiE|%XBtai=6-nQ?%{{BvSNlA{uagqw`Io z%g+|dP1Oex%}-irs-&b+;*--B8keTk8EJ+O!;MIni+~3#ar;;;e$$cWpcapAO0l;A zhk_&)D+aAirJ+fzDR=sm(nx8{52ed~M$r=vXksR=H`_fFt8voySPXWAGs{D1ia`q^ zG1A$rx;7^9!$AwZ-vX*A87KB+Qyh((8h8=wK0l;2eWBp0gN>7A!Vc{@l!E2Atce`1uQzimbRM>C4Ev!b{j== z){gS6T0ixI*1jFa0RmT1RVJH4o7&3Vi6nz&>aCXDYcx232M!$$t<9IxU2aOkP-dGN zDnV2($)Y9YtSyc<>hX$}T!&*z`L|cggQL1Erxi9>%9>R6C@|MG?PO=slC@F|psZx0 z&U%!-%0YWMioxk_PpeYdQ!=+bZZ_EQbqZ!vmyKrA?M?{Fv*0E4Uw@{(pg)iK}6V~tbcr6o*|Lnb5f21z@JXw2zc3A^2&>@qhM_e#3 z-DIwCw!fD#{P!kV=tkIVSAhItlPnc?Wsx+e0M6L$36Pr$u=T5hWVjV%8!v0GZSbeP ztgkvh{gwouaqpTeF=3(ZAIv`1Pn~xb?M2p8N8s@IO;#X=G;fbaNX$itquOSsrR|xO z2HFsGz&6v&|ARix2sB9cbQVtC%g5Rnhi4PPCZSYs4&Y7rvEas-?-BcM5AAUn; zz;na_ha>IL0tHrgW~quJvpEylWKQ@~pp};4Av?5CK^MIpMl{I;%|bKkv&7=F7J8#T zM;`8_!#8x*$JA0BmGURyBDKC}u9{41Hns(PjM^IrQ zmS?yxsw`rk$cqcg>H+?&&Pce*dtm+E@61}!W?72q zf>K;hlm>P|7IK3ut>}VO{<)s$u~U|gN?uM^lzhEV8s8OZ@H|;s*A;y~kfmc?VazeT znK|U6AS&qv8Gr1J7-#Lqq8fZ3q}4yxo3#l2N{DKEvqJK9!^(H-gLRReX=XPJduNce zc4uMqemCTm4GeLWy<>cBv|osz5>h}BR#+}e}1r3VJrBcsHq@Ninx6GDoI2Kb-! z1Wt*=17v(J%;f9q0_1Q>J~T2wuIh!x@0Wnw*^9NITgC<|+VsY;E^WM2rLSDt-WdDM z34z)-dLwD*Tc(jwbh?r!P^&&r8t#gN0aGp^>)Gdnk&Y3COxlmbmq0p_TQo zqv*gCt$)k9tiVDKObe(na{#oz`W8)07;Tc|57PtW=>e==!*Nq+>Trb3vadMUGC++RHF6cSZ{f6NRQo)DZmj$(%hk}qxSqB7&!FR zp|Noq`An%!^!HaR`r_XxNom1rXUd<2MSyGV`S0LTcg?QD6Y?lLJn$$?BWC{xg9N~D z@E+U`_wy|RABR!KoGTgQBKN@Z+4f3r>glGr^+&q&iq=Eul8??Z_in4Kr}w-om#)7t zMA1bboa;>IflJH1K+#4Ynx(L-gD=gLb;rduy~raoRZm1jlAC1B9rZSeRaB3{r;!VA zVjFRz?Q(~b1EF2#{A}V5m%1gbEN6W#ahkEs*A#9q(-<7gc8$)Y%XIlB&_!KEJ^M_H zD>*gYus|P2yKMMrYS!h3*>Pt;Gx?p*ruhKkr!SgauGhG`g5%(@OTSgH3744t>bpV_ z{}SJPFTiVqiwbXJoAC-0BNqQ9i94LMY5;sFd_sr%lT`;!8@>YwJXJI}Eh1{*Y-yHW z4+{$Mmp)wL{OF)nx3jKz@2K&>ud6s1K8sxiMto1rjfYc@Sq$%ImwG6XDwhlmw4Xkk zEzn<3FoK6H(ptQ8STFft^Lcym*2*YZ!qd(9IjlEYTJUs(mfm1Xul%T@eytq9)+G>E zs^vzSJrBo!7nO9c$L%L?AlOVGP$W}86@<{ZA9q<58|^JNZJtr|@f|FOyBt(ffZJx% ze8e{7^LnR#^H~9R+SHSw*mc|j^9}+MMyKYpE?5Snsi_p4{H{sxCjelC_t z(RZ?OXcTy%3al=c$l}8==qVp2Fth)=h3u!?(44JyJj7wJF$8mltMo32%F zuqpncHvw3ZGq0^#{n3XR{{=r>r;^QB=I7qSU5xoH_AZ^ho<|{hE4qg_r>cLjv_8QP z)Ai5pW$%XH$k+S0zVQa~vv&VC7=cInta9#9Zrw-hBmZMtSnMU0^Fz6-nN%#2`Tlnl zBPe#Of5Zo@FOT#p?Q9-DwCluZ$LBbD-u?yiQ{`qBk?i(0ilYCsPuNY2+w64YU0BZg zf3TNm#;?qD)ZZDOjbF&y_ zYeFqf09?ExCZqDLDLjVaygZV7Jhb$TeAl3PeRwwQ$^*~qprX;d6&*21!cE)1#5@Mw zh<=AYXJ1`%@`TARrvZOuwM}dioeM!2{(FPqu-i2dqy>FQ1$jIlbBX^JhAa`F_~|^6 zc5cBv;I~`Q*=7pW*{J zdp4cV!{rm@^e6DQODEoCX|(Pj814LkC6K3<4Kq05ZkO(6iT;^ivN;Cs zwQE$|w`{h7;#>1%|LWarzJYt(v}y!T@L&A{JH!ocyyr-gKwj^EbT1Q}yX-;Mb^fZK z*aMvVtbX?)S?96S(Z_kBf9DZahL%=;zhkJ!+DR_$`xT~Iypwf}aJ!`)d5Lx9xm0z6 z{rG#%oouyiq`_nhpJL|k$*`NkL3o3!|ew-0M_F2A5G)6%;2=z z{qJS)*O~m*sMZ827#C99^mq#IOiRwN;ba}l+t5qr*;wVlXihT7lx%*`;IbkwXv1%! zj|#Zg|7;E)#SAV7JRq!{*5>eb{{F4_7REhzFO{smt+-#w@LR3i#td$&zBAxv4uf>~ z{1Au#Ja~Ob;lTI|8>S6^Bm!u(OXIW2TEN>HJT`o&fRX(e`C;hpQq!!bF51_rn@^kV z{9Eh=^Kk414A#c~je~#93|=@?3wZwRF1Tic7s(UI1g%M`7k#(~Pg;_-q$?ldAJv|Z z0H{cOhQs-NRR$0L_zgVLf4YO5x(|Pd6~*Z@HQmGJJw0TNF`xf1c;B z?8MtJT3Q8bsV?MkEX;1Ts?kdQd7XJKGuW-z)Q>{F8@upkn5FI@pvqhYYJ7KoUIvsw zk4it$n@^zodT@fRIS5sMqB%YJGX@(rJE&o}Fyl|->Mrh6*4&TAj3H^O8iB!w^x^Xv zjhe}^)cyDxDjvw2(CQJqgFm%DFMt|0e3q~V$Q2LZ=kdT~r;>pf7)df5RH6TgL1-lX z52#KA&D+q`gZX*-bST8M8qVYEfYR`oJsfyEH3T!{kQKiglHis*U7p2CM5@(w4A<~$oE9}RNCRBw>xk_o&5s*#B%-r;;CvaQQ;Jy$9^HYVQ<&2%Erm zGmK%*R6ZGw+E!0g@ie~O;KjEM%381^!fDCP{63k!9Jv#=aqBI7M1<3+NssnIshH_} zm2^r)xA94oek*@5!sC|J4%+=OPEQAK<&Oo%`+f!=Venb4ezeV!&eB6i?}Q#3VRhIz z2vd?Ozg<%B=1QVx7Jreuutu_~%WOV^yY*hbf{5_w_)Pi|R(;PLz6y(>6kRZv4>LHh zmDJKy&46in=P8zrN~Dz^02Su2O8b$btM1^#QXE!?M@>!Uf_2$nUG8Hf`+PZF*n~vm z4-5Ekcu5R6g8nJX9&NaRck;&>(nL8C&lET(BE#zNt zn+|cOd*EMiij^j%^gbpTIIT%(&)h2!aFbyX-@(0bsf)pM?3mWVf2&Fe+V&;oykh zUJ7KrR7<>&o?OQ7lrbe=@aKTAk9G+DuH3|cVK{v`nfIViiAPem<@{0k0cX*2u&;iQ zca}%ic@OgEff(j8jP4@dTiPZ1ccS=*Al2)mhaQ4dCu|b?KarYZSJR6R^FPTWZF~>- zTk{IO9J^k(X1MWeI=F&QMS`VVU?NR_gf9Yo1K~0$c_k;!g*2xvEBPXhxQ$KnIQLrR zzs)J)F}{*vW6JahZn`CX{TQEukY=YrkMqa43xj@&m=#`yzF2fF0o8LGrR1GTPN&Bt@MvfU(Fy_%OI6U6AUndNC-X>j9kr>Heg^Kqb*h}#f5)oQ9R zFf!~qhg(@ub4pnQaZn%r`wWsrnzNRt;KvepLbfYUnmZ0X>hLqTUs2z_#oD3St!l8U zTi5c`4DCmOTq+i*WcdPiSdXT$f$`9)mfgz0IaoA;TSn4l1{`y$bI< z=UIdZ%ZofA%H~u}ut-N=;Rz9%avrLA8T0<^S@^^wukgf{9@WSrf5hOzAvB$2>KXeS zPxU$)YGKzD^tv0V(iB7rN5$w(lQ-~$tLzRnnos_+!3Cq)HEog9IjH(Mo}%(O`s6vD z=2btF5ITLkrnb$d{UAyRG98xM zut%zaOx5!|Qf77Z-19uGy+{3$MTmHZ2BZyXUV}+Ev~{*Q@dxMU(VxR+(qG`I*fk8g zw08Kkp^(uv=v)vcr+$zkWK@?9EV8x+l3Y5<_(ozA zX0=_4(0(i>CS$k7xHPcsRwQu+>oG?F*9ZSn{Cb`ksUZ!AErE}5 zYv9^tczAq0z_n2gOo6to=aDw~Yb+O7qg%t)ZfnE!xVQaS|&zn;Xy=$fYy->{~Iv{j3XztO#wIiErSf_z&mlueKAxg%9m>Qny zYs^SJy5dOo8Vb@eMPm0XR;jWEdk5;xtbuxiUV{aDbX<|>HR$ZsL6#ZcXR-&}P$HeJ z;gRW$n5b8Wm})lhMDBG``HMUq8|7a7Lz73bULfLjpd=8@_(fWW8Y=ap_YfvPs( z77*pND8IgeM`dWgBNSrsJ{?hf#{f$;;ulnO@o?=+U*ZYTy4Fxd(PVvzN65G%y*l-M zN!>H<-oTqj>RSh&Y+!ppkglgp{vaq_=6zCNl#U^M;wrhw-@GIj*{jv*%J_WrHlj(c zO;ZM$Uqgem=`qM*#SZB7GEdd=zw1##B7+A7DSXk(JW7S57@JMg$6<9V*-v zx+y7OdUm7S7+y--1Z-Wp3NE!$QF_ooW0@z=Hye4hQh|O$siXFTOd(s@riTrOOZ&;B z3o3QR+*T(QZh~FAaWx{nM8zgKQJfLvhF%N;p3+hYORpKIE;MC?>Mot-LiA%Bu1Ycs^O*!icza--go& z7;U2DtAT8aTc^LH(XOx2sMANhb+pZaR~fA)etZ2I+V!I{;`lE^xN|>*Ij?#>geOO% z+P@<@1m#BJT3Jek2YiEj^y>EBANd)x#=6BBLAEa(A_uhKy*1fl? z-uA2ajPJi_T)&<%tJuI=G3%y(vH{%exZT{rZ1c5>Gn>mQt15?2zI*)estIMI%BS3o z20Qvjq#A6k;+7s~S&_2FE?8u;DmhTHFem=apb@87M6_&nwThz>1J7238-(R7(+CfU zva>8jtcr||uzNKsGe-^z7e9Gy+3i)+QSY#dqmh|XI`#dDC5yzU2%9}j)AA{073HI3 zS4UX=$f^oCFNYIDS2La>^>w(!u&5>msZ-fpo~NojVr5jbUJfW@Hp`h0zrAeoSlKsR zqt1PL_UVmkr!~;AY|QY`gW%M1RC&{{? zHe)KP%A`Ing_oRKMS11u;iIa?j~`vB8kCA^&ZDa;WKUofVgvoV^y)5aU1D)eiYP9O zlp49*pqg-(M^@7QY8E4vcFDDzbB-m;wR9msiCrS35Vr$V4(zHbHZ>AZ0iCj(6p58v!>TMNm3n{4;%=2y z08GOlRx?2f3NEIq89r{bG-P*Bt>NXj1A+1}-`2}@iS zvx^RKO$nCs&|(JOMIZ zqUDijo&A<&i*<1s@%j)i)L7ClTTb6=)4*sGt0)Z`YnIw_UI|T#ux2HQBk?h!XMC)) zqHN@7xqM!Ql*CeY|P2$d95Z8qZAJiM=?wK(u%{N3369q?#O-NGn^jge7Aj^;L-P3=Zv9=8DSo zCXqcdTa2It>d*l~;^%_xToZTr#HG2{E%{dh9dNTKKvME~OEP@`PDjxZ}ET zpmJ$M1t#^_>!FB=n&Ua*$jAf*SoN+XAd(~6t~6=F)-F$`Rb{M&m|xyioPMMc-8PbS z;Z~>UyV)y7+}RR!@f6>VrHfbY{B3E8Q%sr|{B4;1nQ;$FL)T(gOtrb}~2OZax2w}>q> z{+mM7T$)@+7x8nhE=F|!FtqD_47uJV=AN!DHsK<7on7w6e9qSJtt;ZU>QLVVBI%%T#NO-Jq z_vY2v^jq`b5yixjSz%5%Y)3T~BjzV4OR?6Pu=3JoR<1SDqYOTA{*hc}6G<=TC{N36 zKIM&TUo~=@T^5y}VFn;UE%mlCypL4x$uOU4+*u>~z?TO(-I{@vf&MFFQ8DONnz zHQejuh~V_LPcVwKsX5{6|9@(Bk1uX$b|Ien3U+p83G7Vz>49R{Qys+0E#2#kqU4E& zjG{rlJ^ooF8a>@#Iq6$;PGOEZU94Ps6>bffYnXP=1vJYL*DtHLu`dfAY7>QOR1q3B z(#7=Ug)-;(1EEy+Xt1X_59Vk=HSw8l&`k@ffWWe<-I8bH1KOsG)D?eJRv>KCiaS`C z2sSr^4lIPr35(q?th!uKI4U6s*PjL5Hl95goQ8<|7H;u5TVNt8H)#FrHS-T>F1r3T zglUVP;%VGu*7h>BpSv1cRa+Ye6Vc03PByopJhP$#*{+sjCe306 zwCqNft7nkG#PRIhgz#K3T6kZ%B$Gt8#w-S}yRuHS%F2>Nt3&a6>igf)gKw;-$F&8% zFoRUPcg7pipIBD;MDbI(@JwcL^pP|zNnP~XACwY^gFnA6c?WlqCO~t2YKa^BuSLLb z?WYFRpS`7Ho%&C_`8&B^LG6$*o+e_qw$M&eml^nPrncIyg1!Z!=eBOCU3)iqwhu#zTDR9}VHkmvJ4^y*mCFLaA*>~iVsbe7BSYpy_5D)!%X z6}B=)P5PjJ=+@Sl)opLZ=+WH`GP=TIUk={Wby|J9=W5Iv0BlzvcBF~E`+j45&?TzH zs|V6k^#OYI{RUa(Dh883kSGUzUhz}&LgQtc`0T?LS2%Dk86AOxw29lCG_gHv&K)+f zdU+06?_`ryM0sWbYbtsiO`xJ#tS(GWR1UT&6+gso3YT{9U_V&E#Id>J$n)8ohJCb* zQ%gIGr<{uBzo(ebDhj z_mp z(yc}4Ht=+TxaCy7SdG7@@b}c|=A!0|ML54HU|w-_gIUb@rhwaRO8mRBlIA=DPKjrr ziGwznP#%1ykR0h?_UxGgn%D^JPorj8d(^nkW(yp>MEds@F>x)6n?HMIqzdVVgpQUV<^L(uu!Lb3Zhix_jR0GF@_YxBj1b6Ggh zndsw8^uKscp6*O^A`t|gSA^((k3}3kUqJ7rL$8+K7KmrQZ7QaH+nmP5pkn*C1#~z8 zh1l;3Xpt=R|E_@9$l`)YR9`UCcctL<=kHq3gGMND4887Y2a~wZ%^K58Gw$IIbwUU0 zg#xkWY`(bXLZLV{Um8N1ICG(pre~wk`+YW5w!>ZCtyY{mWz$-{Mi|E!HIH&ZuQAxY zR*`f87o9(3X@jOjz;Vs{p#_a=0tG%s!I=a#%|8~14ga=?JAW)BXDKRP|FMv{#E~Dn zQ#r?oo<9`|?{Twu5`PC=%oj(0Dx_9Yo0b;~$=?A3rlN4P1cmJ=#H67q?mvZ;+!!@C zqcB~X$*TWki}kk~>EmRuJf#ymveDxFIY-`Bic_D&ixy9$i&;NwS>>R3H15-hWjBFq z$}d{a`%YTK@LwRI1MbC2Z(yb+b8~QvhCM4Yd+C=#aUKv}z~8^0%NNDJYUgsq1cqD8 z^^I79=ycdD=Iiw|&H_n=m$Y8ujvtzesh6^~OH*SGnzmmmly$pH^mO(?JSabRsD@`>~4B%MlD7GS{M{9S=Mq;sG zH7c5A;bPe+wk|MYX)|b@UIFm{lYWR+7tcm|G7Azq#pu`2xRJL!VWEXF+GsMzux9kR zMwvuQ-0ewT&0Kz9a zVFD)dL_z2>NlFtUpAoJ9j$>IGc{&oUZR7RMBK53=?vB^YErGtz0FLiSQW=w+OCzI3 znZ(}z6k;p( z39`2g%1w~!bb@w+a=_+}gb-Ik8+D4gHSm8;P{U1hx)?L=)(HAweT}qTuIdwwppYVy zGcd7#23w8sXl;=gXuUZSTPie8O@`Il z=x8j;Wyx60m*n!jj9N0MU<&}Rbov3Ln0p3$B?U;~4MS}Fp($-n0Wj+qn6UrlN?p?1 zU>u6>p30>6P?zBrdNP&CD>-^J6YP&DB7xS~Se!VuA)Q*JvFxQe@E_+kTWBf>9BkXC&`?hH-*5lPI^ zi8b(~RFk3cnimZsEfe!@3BO7sGU1V)Oo4U0l!+CWPc#NQ-hgnKN!xSqsN=BFq6O>* zaT2$ag}Kml>jeDsawN9M1${(0lQyUeE+<19m16chN$h>WwBnYLg`k z2;&_Hbcq@EHa-j85ylc|Z3f6U0;EF9kc~#ziIE0%#k_j!q%<1~J(Uf)FIfQUhZoHB zB`EojfP_ctZ50RZchaTnStn5r=L4%rqc%C{QacxWWC9+jR5~8)wB~0E-6h*cl;=^K z>8uqJ{Y-hgq%w2)o})bt(ZF1&dN>EcC@_{jkzRULE|U7t`VuL|r~!8J^2Sa=3UuXN zHl`CbkzQwZ9u%pUict-^HyT|vrqEn+hIP9=)}ROMdlgYbWMLbT4zVyWDRFqP<3v4&GNBUGR-$pPb4k|yA$GktVgg)KJ7FP`g87dYRxKbo@a(1 zc=~#1aA%(|erQGVL>sQdt{vgS3I4WUkz{v*34F0jGLuIoOIs+@x&V{9b0DN!i;*Ow z8{$UER4pj%J8kB6CmkJ&$?ous+0s5 zyAFuB=m8XxyUIX?7vZeL%QEX`A55v@)}+&1FY<&SFtRD&k>3kz3FbT&GWl3L$}7jQ zLuM~D1t&im?qfYw7cuyPg?JI`70f#(X{ zV%SGryl3?04+F>^&nz@^A$J=t}XSsWnCB`JdBx}FHD z2_4R_Px+AqEmpJ(+j!jOi7mB49j@87fk%8V5_k=I#1~w=-jtATF(Z_ z*?q9u-*ySK?(74Lzqf0Ej4eg*>QD>xyX!L$7xNS8;ZlV9{oMn-_LQ z)SkQZM});c^#xdO;nYMY&mcNIDM>?5ka1^m$8$`Q-9U=F8z+&cAE?J9)uWk-9+1=_ zNj=>xfj*K{RxfCp+#gdN(F-gF^@pZ^m8Dg(bV`=K?vJTjd!y8505;h)S(-EedD_n2 z&{eI><^ilVHSPn(KVFwY6*q(Na7i_}UZ+;~33R=8APjRwUu=Z0L+e_H-+j=)(vSfm zjlX#fLeGbez}findlE|R3&nR1#$?9y4VV-k0`m1B*=Yz1ktHu-D6(Hbkxz$U_P0n9 zo6=kNVbK4>&s<85-4c9rl9#;nY(LFCG$=0o_B`a`7k9PVi(lw>E&#ar*r0Is=dPW7 zgWtKxtF7>hHuCh>G%ou6u!Oy>{Kk`|k0w-N_sC>V0W|B6iwmIiTd$TXugu0(VxCy} zsPKzMWQtWA^j_Y@5WP z2%Oe(T#w3c!Y)@m_)?%&{^@ zHN5dT*LnUH&>qlYq$`8Vs+6tzE?#M=E=A5jxJf{xB+Js|N?BERWce=3RZnvB3c$+vSNe{TlSTen?;@6CN?kqg+ez z$^IrGN4c8g@nXU8Gnp-Q^QS@S&!ac=>2c`8JUxU!bz_)k+>MtVB|)y;P8?0*b3B3{AZu5-#t! ztuoN@mHDhKjhq+|2{MBkEkIgYcYzQ&C8V>~DxQ8pd)gu)aaUPU(qo8;?e9Wg1>Jzh z5Kh0kTVw1H&&&&1EWD{9qsu~2n}2VBck$z_vphpQg5B(#5zwdlalFTUx<7~dEM#Nl zCktwk+u%t^GmFDB1LM&XPi6~|D4`c_YUY8(1G58s_AWwN(`s%&In!dc1Hx7>L7H`T zF-r-Qn=Pp;4_?B$Y4zn)`XtNqw-5|(Btw(psdP88zz?^wRI1v|On#JhMvC`ZXZjE9 zWapXe;zyTV27Dt%se9QZu$g!tti~M48~JDLWtGg|q=vO;l=vBo_8)(rZRRmv=WX&s zWgq1nVV!C5X@DcU)2<>u%zwiHb^{}fxtprL!^+mwu=#2*VemNrk-xE?JjU%+9Ndz_ zd-U_CY&v!N6l`XGfw{kOi214XPy9wIF5;aj<1_X#JaD5({xBuR@Lmx^?G6VW9mZ3r zw1#z#a(fF~nH_Yn2X8@p&oO(n+l>mlhfEu}nNIziz3g9fhRt9!;cGS}!|t(bqUBfg zW^+mB0p0ub?qA^1W?fs#jbx7IG0a1&2S^wkJP+j!y;0up$h}VLYm|RI zG{?uUqa)Yz81A#u>dp{4`4B6jZAYQ?;V;2r_b$2e==~KS=W8fs{HqT!vx11{h+wA2^1>*=8NnJj*Yf>2~Y9w{h7_? z2DjI%*1$jF5*x>H7*cIV7@xzrQ#B=1VJ!DhpBi=}_gLw`NvtpClrC-M7?oxM>B=Zx zV(@qzlorc-(yvjxGRk8GIyO4@5e_+t$JoO(>tC!(uytZm{`mTK&p=S#QT;2U&_*2Z_a9jODTk)+Zd0lD(eoSBji?(aKCMa|rb#H`8ORLu;zhdKO3{JOA z8el5DU&L>w;T^fxU+mx`7%a`DS!PEEbgFjq*Ck$2{*^8s%cxN;OyjJV`xQU`3=g+4 zgUjvkZ}7qh4KANYarJ}iH!Rv=3!i_X9}|VSy4}*Y)0AvKWCJRzBfRUYw5|gmsYwA| zF^sCZ@?!tw&io4oJG9couD~?!L1;Fvixlng`TVHM<_KGTZ-U3EDdN5TwcRl%?s9A0 ztM22?Xw^s_>tAvcAI=P3xCX^1*g$>O@f?5OUc5V_(k?vBzrHu0Bfou+J1E)zr&6BC zu=*}3BF$gbm*2%AY(6iZQDifgr!l6Ye6EMK74cgM3Pkzu9>80{N_=FS#&4ltZ{};T zyH~%+Q)%l!e#v0PTBw#`!?F0=Q~9b0yVc{?>e2@D7YtU|o0LFX2J&)hKZHNUtzMjs zu*Xjh;rBCyf*lL_AbR&!z6N{RkCsa4>2dhwC`RLNb@|`zm4RVxXaZbEVkR_YTLbbso5afHkv=LevTqt&D~@8_1K+m|LQw< z3ga+X1?;Q6c^g{Z7qE92&s$Nqa(y-_&&6OZcD+yU(Zmqx#iaU3?FTsY_R3j{BF$ zIpVrg;;>8bA$U*Mi0My&aOl>UHxu$4R(Sk{(C=SQLg={-*kOyF;$28A#cZrtb;YDB zNeUb6S>lJ(-m)#jm`|U=oDi2mY{c3rJ{_Kx@|?8nY5sS7b*hc8S&mA10V_3{^=B}% zVFxS9@eH4ieP^e#72p`P0)XK9SFw5%HDKFz8Z=9s!3RY+NdSi6+e9UBMPcqufcG z=fJ_L69=Dz8Q^g-{dxW}+5ZadvR^=FVx(hD!}2c?y?Spxxhbl4Dut$20~UvF?= zHp+B+ufsO}>_t8adsesRZk>5P9azgJOKjlKQpmWLNx$eiz$wVdD*w9$iK<_kDd zJ;myxBpiC~vHTUjf;)XdAxjaQG=EDM*YWw->$>w>{wkj@ulGx_tnJs!7N4$%QjKkZ z9xwpQYmhx}1HXe-zmDWAdLthv5mwcYY~&R(TtkZ#s$ByVMs4Cnw0II&Zrp@TG-U&Z zxL)HErS+uI*4Myh;zp!GMX&QQ1{VSk_@vSsuk$MW)RfGxp;O1re6+!ZAfQBS+04gK zn`x+rvmO>X6oJ~VwXE~=JESGo34h=XzA)RXHo(ySy-Ira9NvFG$$%~e&O#Lp-Ck<@ zCeNV0+j&ZqszTPdgQvu(GICLxf#xi$`WXLFLT%sT(K#;l1J*FcHkZ~7eqzo(o~&u&feWg9i)Us#)sHsA z2YA&057PEMJULcV%xksMb_~d}*Oy?osR3R&)8sh2rlb!N61VV7TD%QH?HWEXnYVdz zGrOh|az1%b2or91D_+1H6HcZ@TX>92?r8ZI-lWLZfNV`Yn@#({aTqU$hN4a8erGYB z&OtxQ-ioZ!2KcUXI5b&y`3uv_^l<14>X1vBOcS<357-6WyOn3=Ab+brz@st43)GuD zIo_dxXp>pnevDCB+NrI)iC6o1dYGb44L}>xvU+@-8k{y4*{Y#P={6oK9nR2gJk#ga zeuo^+OT!l5^fbUr2iHSo(ypqvsk0cvlF%0@=O81iFJA}PtI&&g>6m(vq2;}edC82d z-P>|;>f5wS2iT|m(mhO1mkzKGp>5&YJVQ&$)=Ey+`pe?~_L@Il0=Hy^i#wH*ms{WcA2M60r$z-0DzSc=@q^vrf1V{2fmxHYit$lK~ObJL3L zJS#@m93BN5fsEBWHrt_o0v!g2TZ7q-UWrv{2e4Mdjm4}_tI3l|=RsZ}hkI6+^SZ}>-c3nRp zBLkexuIp!`343^ItY%XVT-ibUlo$;u%vA07R(p6Hl06AVydG~HcBmuccZ_CJ=qlZD zoXw#bzs!%{MX+~h-dZ-l0|4LNgUQ?V&>yF(Br`|JDo$6)f#h)m0%x4AlmtT3SdZ#G z*ff3K!+LzR2ka_PlIf#tjnx%F7Aawgb?S;Z^a(q4O&oHSo^mq*K|VzrIsz`m3t<8WgtJ+}jAM5V&8 z8mNGsUS7kqkV@izKauKRUc=kQ!jIK_j5BHCXFP}OpTISie#P@>3`jH`+z%g<_ycaI z%zwuXXzf3E1V>uGffuulf@{ln(w!EA@*-?xKtsp5iR-coY8x zwiCYRNpK1qzScVRrSXR_!=$4DQnAB9Za+>IwP$&RHmZ6*kBP;Nugs2+xu3&<9A;|Q oD+t2f% bar: { ) ================================================================================ -Declire style attributes in single-line +Declare style attributes in single-line ================================================================================ foo.style: {opacity: 0.5; fill: red} @@ -441,3 +441,41 @@ foo.style: {opacity: 0.5; fill: red} ) ) +================================================================================ +Declare grid attributes +================================================================================ +grid-gap: 0 +grid-columns: 1 + +header + +body: "" { + grid-gap: 0 + grid-columns: 2 + + content + sidebar +} + +footer + +-------------------------------------------------------------------------------- + +(source_file + (attribute (attr_key) (attr_value (integer))) + (attribute (attr_key) (attr_value (integer))) + (shape (shape_key)) + (container + (container_key) + (label (string)) + (block + (attribute (attr_key) (attr_value (integer))) + (attribute (attr_key) (attr_value (integer))) + (shape (shape_key)) + (shape (shape_key)) + ) + ) + (shape (shape_key)) +) + + diff --git a/test/highlight/grid.d2 b/test/highlight/grid.d2 new file mode 100644 index 0000000..e4c37d1 --- /dev/null +++ b/test/highlight/grid.d2 @@ -0,0 +1,39 @@ +grid-gap: 0 +# <- property +# ^ property +# ^ property +# ^ punctuation.delimiter +# ^ number +grid-columns: 1 +# <- property +# ^ punctuation.delimiter +# ^ number + +header +# <- variable + +body: "" { + # <- constant + # ^ punctuation.delimiter + # ^ string + # ^ punctuation.bracket + grid-gap: 0 + # <- property + # ^ property + # ^ property + # ^ punctuation.delimiter + # ^ number + grid-columns: 2 + # <- property + # ^ punctuation.delimiter + # ^ number + + content + # <- variable + sidebar + # <- variable +} +# <- punctuation.bracket + +footer +# <- variable