@diagrammo/dgmo 0.96.0 → 0.97.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/advanced.d.ts +172 -8
- package/dist/advanced.js +225 -243
- package/dist/block.d.ts +8 -0
- package/dist/block.js +138 -66
- package/dist/{calculator-GIB7POFX.js → calculator-CIGGTURF.js} +2 -2
- package/dist/{chart-meta-uImk4eTn.d.ts → chart-meta-B7niEd52.d.ts} +3 -1
- package/dist/chart-meta.d.ts +2 -2
- package/dist/chart-meta.js +19 -19
- package/dist/{chart-types-CBVYiLqy.d.ts → chart-types-Dxtv4XSz.d.ts} +3 -0
- package/dist/{charts-d3-IRP5VANE.js → charts-d3-INWEGMSD.js} +14 -14
- package/dist/{chunk-MVUNMJKO.js → chunk-2FMOLWX4.js} +71 -57
- package/dist/{chunk-2BYFNZVM.js → chunk-2SZILMQT.js} +57 -15
- package/dist/{chunk-VLI6AWS3.js → chunk-3C4OXVZJ.js} +2 -2
- package/dist/{chunk-OO4GUE4E.js → chunk-3HL6NSSQ.js} +63 -18
- package/dist/{chunk-RGFVHYDP.js → chunk-3IUMSK72.js} +2 -2
- package/dist/{chunk-LRHPBWOY.js → chunk-44RLIAYC.js} +17 -10
- package/dist/{chunk-H7AXCRO7.js → chunk-453IWXZ3.js} +0 -11
- package/dist/{chunk-FHX373L5.js → chunk-47INRTZ6.js} +2 -2
- package/dist/{chunk-IN7XI6NO.js → chunk-4NMRS6HW.js} +1 -1
- package/dist/{chunk-HH3DHNQA.js → chunk-4TK26YHH.js} +2 -2
- package/dist/{chunk-5LG526X7.js → chunk-5TGZBHEJ.js} +1 -1
- package/dist/{chunk-BD4O4D2A.js → chunk-5WZYJC2P.js} +2 -2
- package/dist/{chunk-DPNSDCR3.js → chunk-65JFUANT.js} +1 -1
- package/dist/{chunk-EZ6BI5LL.js → chunk-6OUMYNAJ.js} +1 -1
- package/dist/{chunk-U6N547QA.js → chunk-6PUBFB6D.js} +24 -3
- package/dist/{chunk-5GU6C5WB.js → chunk-6S2H6EKN.js} +3 -3
- package/dist/{chunk-OYGJZA24.js → chunk-6SDEXSJY.js} +39 -19
- package/dist/{chunk-IKXQ6NVR.js → chunk-6YBZFOTA.js} +13 -13
- package/dist/{chunk-4B45SNZH.js → chunk-74XR7Z3I.js} +13 -13
- package/dist/{chunk-VNAPEZX2.js → chunk-7ASVGFW3.js} +1 -1
- package/dist/{chunk-RTRORHSP.js → chunk-7QKWU7FX.js} +3 -3
- package/dist/{chunk-A6YINTY6.js → chunk-7RACGVUY.js} +1 -1
- package/dist/{chunk-5G4DOOX2.js → chunk-7TEAFIEJ.js} +9 -5
- package/dist/{chunk-UNCCZ3NU.js → chunk-A3V72YIL.js} +14 -1
- package/dist/{chunk-VJ7NLYFE.js → chunk-A5LFM62B.js} +3 -3
- package/dist/{chunk-P3PSLC2K.js → chunk-AULFF7L2.js} +2 -2
- package/dist/{chunk-SCYVGPLI.js → chunk-B7ZH5EQ2.js} +2 -2
- package/dist/{chunk-VGAMBOOC.js → chunk-C6ME2L4T.js} +2 -2
- package/dist/{chunk-B2YVZ3QU.js → chunk-CGP7RGLJ.js} +1 -1
- package/dist/{chunk-67N26CER.js → chunk-CLW45YKE.js} +2 -1
- package/dist/{chunk-THTYCJGF.js → chunk-CUOMNKYW.js} +4 -4
- package/dist/{chunk-34JOHSVE.js → chunk-CUTEHGXO.js} +2 -2
- package/dist/{chunk-NERQSSYD.js → chunk-D67YE4LR.js} +1 -1
- package/dist/{chunk-DKCVAQU3.js → chunk-D7KZE2XJ.js} +39 -17
- package/dist/{chunk-PGD6CNWO.js → chunk-DFEVFLEG.js} +3 -3
- package/dist/{chunk-VVTCUIPN.js → chunk-DKMZ4VMV.js} +1 -1
- package/dist/{chunk-H7JVKUA5.js → chunk-DRY4W4W6.js} +36 -15
- package/dist/{chunk-IQZSKWE5.js → chunk-E6GHXMH2.js} +8 -8
- package/dist/{chunk-I2I2FKAK.js → chunk-EBJLT7PH.js} +1 -1
- package/dist/{chunk-GEHK4UD5.js → chunk-EEIGHOJR.js} +92 -23
- package/dist/{chunk-FKJWZWNU.js → chunk-EUPUVYWO.js} +1 -1
- package/dist/{chunk-3W73ZP6W.js → chunk-F2OAZHOX.js} +3 -3
- package/dist/{chunk-IU7XKZA6.js → chunk-FK6HZYGK.js} +4 -14
- package/dist/{chunk-2M3K6GD2.js → chunk-FTW2E2YH.js} +6 -6
- package/dist/{chunk-5P2L5QXE.js → chunk-FZVCS2XY.js} +4 -2
- package/dist/chunk-G24NSISJ.js +69 -0
- package/dist/{chunk-5H7SA5ZD.js → chunk-GFQFLLP3.js} +2 -2
- package/dist/{chunk-BUVLLK3D.js → chunk-GLLYHYGT.js} +27 -17
- package/dist/{chunk-VLC6WNRD.js → chunk-GULGSH2Z.js} +4 -0
- package/dist/{chunk-H5NVCOEJ.js → chunk-GXBH7WNN.js} +2 -2
- package/dist/{chunk-7UWVHNPM.js → chunk-H242TVAE.js} +9 -9
- package/dist/{chunk-M4ZUIW3J.js → chunk-H7DZYHQF.js} +3 -3
- package/dist/{chunk-GLCMUTO5.js → chunk-HQNZJMNS.js} +1 -1
- package/dist/{chunk-H7RQG4PH.js → chunk-IAM3IDL4.js} +2 -2
- package/dist/{chunk-WTPS73RM.js → chunk-II6D6NWX.js} +8 -8
- package/dist/{chunk-5ARANBIE.js → chunk-IUFTAFGN.js} +2 -2
- package/dist/{chunk-AQRSEQZV.js → chunk-IZEKHIV6.js} +3 -3
- package/dist/{chunk-WGNP5ND2.js → chunk-J3YM6RA5.js} +3 -3
- package/dist/{chunk-YFIUABSF.js → chunk-J467QBZF.js} +23 -3
- package/dist/{chunk-CD7VQCDL.js → chunk-J7JF4QKA.js} +40 -30
- package/dist/{chunk-MYHR3PMH.js → chunk-JULBDTNU.js} +7 -7
- package/dist/{chunk-EPDBWATV.js → chunk-K7RRXZHS.js} +4 -2
- package/dist/{chunk-YVIPJGFG.js → chunk-KMB754DO.js} +33 -6
- package/dist/chunk-KNKZGRRB.js +439 -0
- package/dist/{chunk-SIABEREK.js → chunk-KTGJQJB3.js} +2 -2
- package/dist/{chunk-LGUFJ7Y2.js → chunk-KW3CC7SB.js} +1 -1
- package/dist/{chunk-ITDF3MWD.js → chunk-L3K5O3Z5.js} +3 -3
- package/dist/chunk-LRTSTDJ6.js +126 -0
- package/dist/{chunk-NI4L6HEU.js → chunk-LZATSXAA.js} +1 -1
- package/dist/{chunk-RVOSA4RR.js → chunk-MJ725XHD.js} +441 -267
- package/dist/{chunk-EPB3UEMD.js → chunk-NBISN6FH.js} +2 -2
- package/dist/{chunk-IZFJZCF6.js → chunk-NN5RUHXV.js} +84 -16
- package/dist/{chunk-KDWEOT54.js → chunk-NOZMRPXI.js} +96 -153
- package/dist/{chunk-EM5SA7NC.js → chunk-NQFZ7LXC.js} +4 -4
- package/dist/chunk-NTDWVTEY.js +12 -0
- package/dist/{chunk-AUXUNV73.js → chunk-O3HRF25Z.js} +1 -1
- package/dist/{chunk-GLL237AP.js → chunk-OSSA5UWA.js} +3 -3
- package/dist/{chunk-UOCWYLYT.js → chunk-OZXKW5NA.js} +1 -1
- package/dist/{chunk-QEU6VM4O.js → chunk-PLQZJZ2K.js} +1 -1
- package/dist/chunk-PRG7NIUU.js +272 -0
- package/dist/{chunk-MAYTYF5S.js → chunk-PSNRB75I.js} +3 -3
- package/dist/{chunk-B5CEV7IR.js → chunk-PT5VFY3B.js} +38 -14
- package/dist/{chunk-KAO7JL4I.js → chunk-PU5X3P3T.js} +6 -5
- package/dist/{chunk-B7BSRVNC.js → chunk-PZ5LAAO3.js} +2 -2
- package/dist/{chunk-TOHTKLKE.js → chunk-Q5Q5JLRT.js} +1 -1
- package/dist/{chunk-TUOZ6AXC.js → chunk-Q6V342WS.js} +16 -4
- package/dist/{chunk-ZOKD5F7M.js → chunk-QDPTOIG7.js} +5 -5
- package/dist/{chunk-ERT7XDQW.js → chunk-QIITSGI5.js} +1 -1
- package/dist/{chunk-K2WXMXI2.js → chunk-QLIZ7SB7.js} +1 -1
- package/dist/chunk-QLNLRZ37.js +181 -0
- package/dist/{chunk-P6LKX3IQ.js → chunk-QOLRTPGH.js} +6 -6
- package/dist/{chunk-FBK32S4D.js → chunk-R4SXMBGF.js} +1 -1
- package/dist/chunk-R4U7IIRX.js +178 -0
- package/dist/{chunk-DWMQ24JR.js → chunk-RC6PISCK.js} +4 -2
- package/dist/{chunk-R5L5E3TC.js → chunk-REKLKGR6.js} +3 -3
- package/dist/{chunk-FUYEXLAN.js → chunk-RFGQDIOI.js} +837 -220
- package/dist/{chunk-W5MMPPGX.js → chunk-ROFSIFSY.js} +4 -4
- package/dist/{chunk-JCC3B2GS.js → chunk-ROH4LYBL.js} +65 -21
- package/dist/{chunk-OAZ6BIIB.js → chunk-SNDCXT5R.js} +9 -7
- package/dist/{chunk-JRN2CRXJ.js → chunk-TDUBTDXS.js} +1 -1
- package/dist/{chunk-GM2SLMQW.js → chunk-TMB4YY3J.js} +34 -4
- package/dist/{chunk-ZBOIYC2G.js → chunk-V3ICBS2O.js} +5 -5
- package/dist/{chunk-HZX4QZGR.js → chunk-V65EDV6S.js} +3 -3
- package/dist/{chunk-67RKJEKF.js → chunk-VKT3BVRO.js} +35 -11
- package/dist/{chunk-5BG4OSWJ.js → chunk-VOO65FKC.js} +12 -12
- package/dist/{chunk-KQAPFIYF.js → chunk-VQWLASDC.js} +2 -2
- package/dist/{chunk-JILEYZ2V.js → chunk-VVL2KKG4.js} +1 -1
- package/dist/{chunk-D7DGLJ7N.js → chunk-VVZDBUHA.js} +2 -2
- package/dist/{chunk-JBAFAKGX.js → chunk-W46OMHOK.js} +23 -27
- package/dist/{chunk-XCKNFFKM.js → chunk-WH6E6SHC.js} +2 -4
- package/dist/{chunk-P2GNNEMN.js → chunk-WPYJAHRP.js} +1 -1
- package/dist/{chunk-TPCP2UOI.js → chunk-WXGFB2O2.js} +3 -3
- package/dist/{chunk-RIK6WUMO.js → chunk-XCYGOCMS.js} +43 -26
- package/dist/{chunk-I3ZRIMR7.js → chunk-XEMCNQQW.js} +15 -15
- package/dist/{chunk-PWZEJNO6.js → chunk-XMUFXJI2.js} +6 -6
- package/dist/{chunk-EMGNCG5C.js → chunk-XZGXVN4T.js} +5 -5
- package/dist/{chunk-WLGOIMTI.js → chunk-YCIBBVI2.js} +2 -2
- package/dist/{chunk-V2NQV7VL.js → chunk-YFIDR7JH.js} +2 -2
- package/dist/{chunk-K2SFH3GJ.js → chunk-YFWIFKRQ.js} +3 -3
- package/dist/{chunk-6XLMTAEX.js → chunk-YIHRLY55.js} +33 -6
- package/dist/{chunk-CYRB2JTN.js → chunk-YLKPRT6U.js} +1 -1
- package/dist/{chunk-KMU65FYM.js → chunk-YSDSFXQD.js} +1 -1
- package/dist/{chunk-ZI6WC24V.js → chunk-ZBJV4KNU.js} +1 -1
- package/dist/{chunk-TIPNNOZC.js → chunk-ZCKVTZHD.js} +41 -19
- package/dist/{chunk-YSGOXZBB.js → chunk-ZMVMGZAJ.js} +1 -1
- package/dist/{chunk-CP73WWLN.js → chunk-ZRW4B4KF.js} +48 -14
- package/dist/{chunk-O2HNVNKO.js → chunk-ZTKO2RD4.js} +5 -5
- package/dist/collapse-6IGH2B24.js +31 -0
- package/dist/collapse-GOWNCVHZ.js +7 -0
- package/dist/collapse-HNTPLB2Q.js +11 -0
- package/dist/collapse-NUM7DPJA.js +10 -0
- package/dist/completion-registry.js +27 -4
- package/dist/dgmo-router-RSYWR5IS.js +101 -0
- package/dist/dimensions-KXAI7U2B.js +21 -0
- package/dist/editor.js +882 -215
- package/dist/{flowchart-parser-SM5LHF2D.js → flowchart-parser-UI5VZNGJ.js} +5 -5
- package/dist/{flowchart-renderer-PPS2GTTD.js → flowchart-renderer-IYWPKPCF.js} +18 -18
- package/dist/fold-at-line-DmSAa1eU.d.ts +11 -0
- package/dist/highlight.js +883 -216
- package/dist/index.d.ts +52 -5
- package/dist/index.js +79 -63
- package/dist/{layout-AF4KA5B2.js → layout-6VY3DHYD.js} +6 -6
- package/dist/{layout-FCFUVCRI.js → layout-7C2QZCEZ.js} +10 -10
- package/dist/{layout-2WESJYRE.js → layout-7E7BNOGO.js} +3 -2
- package/dist/layout-BSK374N6.js +11 -0
- package/dist/{layout-R6G4MEO3.js → layout-FJDBY3WG.js} +5 -5
- package/dist/{layout-KELSNWBD.js → layout-G3RVKEC4.js} +10 -10
- package/dist/{layout-H2KP5A6M.js → layout-GC5XX2RH.js} +2 -2
- package/dist/{layout-LNVIH45F.js → layout-R6ULGQJK.js} +6 -6
- package/dist/{layout-PPIVGJXD.js → layout-ROI5KVSO.js} +3 -3
- package/dist/{layout-3TSVAGWH.js → layout-SPPS225I.js} +3 -3
- package/dist/{layout-HF3PMI4H.js → layout-VTGOYGRC.js} +2 -2
- package/dist/{layout-MPSH3YWE.js → layout-WBH5IHYK.js} +10 -10
- package/dist/layout-WTHBGTH2.js +15 -0
- package/dist/layout-ZCCABSV7.js +15 -0
- package/dist/{layout-search-C2TYUH4L.js → layout-search-DSIDKKQO.js} +8 -8
- package/dist/{legend-constants-55MFBXYF.js → legend-constants-KF3MKWL2.js} +2 -2
- package/dist/{parser-DGLKH4NT.js → parser-3PMYAVFL.js} +2 -2
- package/dist/{parser-OHBBDCG4.js → parser-5KVFS4RN.js} +2 -2
- package/dist/{parser-UHKROC7Z.js → parser-BA43YPIQ.js} +3 -3
- package/dist/{parser-F75WNYMK.js → parser-CFAYEWLF.js} +3 -3
- package/dist/{parser-MWINQNQW.js → parser-DRFEX6OX.js} +3 -3
- package/dist/{parser-W6NX3AIV.js → parser-DWVBRBB2.js} +3 -3
- package/dist/{parser-6WURFLOB.js → parser-E4B7HJT2.js} +3 -3
- package/dist/{parser-DRUGM3R6.js → parser-FWQY3HJX.js} +2 -2
- package/dist/{parser-GBQY3WOZ.js → parser-GMCXCJSP.js} +3 -3
- package/dist/{parser-BPYHIG24.js → parser-IHFHPFL7.js} +3 -3
- package/dist/{parser-QWTECQEC.js → parser-IU6425JW.js} +6 -6
- package/dist/{parser-ZV756RMP.js → parser-IZYIXDJX.js} +6 -6
- package/dist/{parser-TTGZYLYD.js → parser-JQGUTDSX.js} +3 -3
- package/dist/{parser-BNRX35NT.js → parser-JRKPOO2Z.js} +3 -3
- package/dist/{parser-B7SCN7FG.js → parser-KI2XYB2R.js} +2 -2
- package/dist/parser-LDVVBP7S.js +12 -0
- package/dist/{parser-L7SI3PW4.js → parser-MAGFK6OK.js} +4 -4
- package/dist/{parser-722KLLAQ.js → parser-MH5BDN7X.js} +3 -3
- package/dist/{parser-5RUD4A3X.js → parser-MUHFEM4G.js} +3 -3
- package/dist/{parser-Y7QXD2UR.js → parser-P375HO7Q.js} +2 -2
- package/dist/{parser-LUJX7AXO.js → parser-PYY5BRLQ.js} +2 -2
- package/dist/parser-QEMFMVF5.js +12 -0
- package/dist/{parser-WIKXZP4X.js → parser-QIPDBT5M.js} +2 -2
- package/dist/{parser-2AXU2MHJ.js → parser-RNBDDEGL.js} +3 -3
- package/dist/{parser-4GHAYZKZ.js → parser-RSWZGQA7.js} +6 -6
- package/dist/{parser-H6HT2WFQ.js → parser-SGX2PVR5.js} +2 -2
- package/dist/{parser-ZWWQZ4XZ.js → parser-SJUEFKNM.js} +3 -3
- package/dist/{parser-4BOP77CD.js → parser-UMNBPXG2.js} +2 -2
- package/dist/{parser-GM5B2EPW.js → parser-WE4VSBBY.js} +3 -3
- package/dist/{parser-XEJP37GQ.js → parser-WKEYS7N3.js} +3 -3
- package/dist/{parser-DWV2CYBS.js → parser-WPXUUNA2.js} +3 -3
- package/dist/{parser-5HQPPVHJ.js → parser-XP3RCOTN.js} +3 -3
- package/dist/{parser-F3JJNIFC.js → parser-YV4RBHG7.js} +3 -3
- package/dist/{parser-CRJYLOHA.js → parser-YZ3J542U.js} +2 -2
- package/dist/{renderer-BYLQ37T2.js → renderer-2V5NVI3V.js} +15 -15
- package/dist/renderer-4PKYVOYL.js +39 -0
- package/dist/{renderer-ONENGXFQ.js → renderer-66SCERH7.js} +14 -12
- package/dist/renderer-6IAXRZLK.js +85 -0
- package/dist/{renderer-GKY55M4Z.js → renderer-6O5SV5YE.js} +10 -10
- package/dist/{renderer-F7YGMEGQ.js → renderer-7OXMSF4R.js} +4 -4
- package/dist/{renderer-6HU44IGJ.js → renderer-A36NL2SS.js} +8 -8
- package/dist/{renderer-66NCRXSC.js → renderer-ASPBBACI.js} +13 -11
- package/dist/{renderer-5GP7YUS4.js → renderer-BXVTYE27.js} +7 -6
- package/dist/renderer-CC6O6GQK.js +18 -0
- package/dist/{renderer-VNJOZPSH.js → renderer-CNDB4JTZ.js} +17 -17
- package/dist/renderer-COV2DXTM.js +41 -0
- package/dist/renderer-DXCATVLO.js +30 -0
- package/dist/{renderer-VUXAAGUG.js → renderer-E5E3OJ42.js} +12 -11
- package/dist/{renderer-MGF2NNGG.js → renderer-E7LC7HCU.js} +5 -5
- package/dist/{renderer-PEJF6R2I.js → renderer-F3JYZERE.js} +4 -4
- package/dist/{renderer-CVCCW7UT.js → renderer-FAFSRFGR.js} +9 -9
- package/dist/renderer-HIB6LZWZ.js +26 -0
- package/dist/renderer-HLDRRFZB.js +28 -0
- package/dist/renderer-INQMQPNN.js +22 -0
- package/dist/renderer-ITJ67HXO.js +27 -0
- package/dist/{renderer-SYRH3B62.js → renderer-JLOKFKOZ.js} +14 -13
- package/dist/{renderer-LJPUCG3U.js → renderer-KOPJ76GS.js} +10 -10
- package/dist/{renderer-N6PM5CSG.js → renderer-M2467III.js} +14 -13
- package/dist/{renderer-MVBAQP3M.js → renderer-MYKL6VG6.js} +6 -6
- package/dist/{renderer-YJVQT7QG.js → renderer-S6L3JR6C.js} +11 -11
- package/dist/{renderer-NOYLNVTI.js → renderer-SYWVZ4CY.js} +3 -3
- package/dist/renderer-TCTZZ5Y6.js +32 -0
- package/dist/{renderer-D6EH5UQ6.js → renderer-UIHCYXBY.js} +12 -12
- package/dist/{renderer-QZJZIAT3.js → renderer-WIBVOPRC.js} +6 -4
- package/dist/{renderer-TS5NHOQD.js → renderer-XMJ6XZGL.js} +12 -11
- package/dist/{renderer-2V2XY2V7.js → renderer-ZTHXOBXW.js} +8 -8
- package/dist/{renderer-radial-4R7AKETK.js → renderer-radial-FC25BDCZ.js} +8 -8
- package/dist/{state-parser-EQBBEKHR.js → state-parser-2PQRH5JE.js} +6 -6
- package/dist/state-renderer-YP6HWLJR.js +43 -0
- package/dist/{themes-CbJL3w8L.d.ts → themes-DoLdhUXV.d.ts} +1 -1
- package/docs/ai-integration.md +4 -3
- package/docs/language-reference.md +99 -13
- package/gallery/fixtures/swot-relabel.dgmo +19 -0
- package/gallery/fixtures/swot-tags.dgmo +16 -0
- package/gallery/fixtures/swot.dgmo +13 -0
- package/package.json +1 -1
- package/dist/chunk-R2K5L4UA.js +0 -49
- package/dist/collapse-TCVK3RPO.js +0 -8
- package/dist/dgmo-router-EPBQKQW2.js +0 -100
- package/dist/dimensions-DBCRBZIU.js +0 -21
- package/dist/layout-3J72UULM.js +0 -15
- package/dist/layout-IXQNVRBE.js +0 -15
- package/dist/layout-VDCJOZSH.js +0 -11
- package/dist/parser-HM6FEX5K.js +0 -14
- package/dist/renderer-2MCV75JQ.js +0 -41
- package/dist/renderer-5AEDVLAA.js +0 -31
- package/dist/renderer-7C76HP5W.js +0 -30
- package/dist/renderer-7RAMBMTH.js +0 -22
- package/dist/renderer-E3334XLT.js +0 -84
- package/dist/renderer-LFZKG2GR.js +0 -26
- package/dist/renderer-MZIWP55B.js +0 -28
- package/dist/renderer-N75E3UVY.js +0 -25
- package/dist/renderer-VNUDN6F5.js +0 -39
- package/dist/state-renderer-SOGZ2CNN.js +0 -42
package/dist/editor.js
CHANGED
|
@@ -4,12 +4,16 @@ import { LRLanguage, LanguageSupport } from "@codemirror/language";
|
|
|
4
4
|
// src/editor/dgmo.grammar.js
|
|
5
5
|
import { LRParser } from "@lezer/lr";
|
|
6
6
|
|
|
7
|
+
// src/editor/tokens.ts
|
|
8
|
+
import { ContextTracker } from "@lezer/lr";
|
|
9
|
+
|
|
7
10
|
// src/editor/dgmo.grammar.terms.js
|
|
8
11
|
var ChartType = 1;
|
|
9
12
|
var TagKeyword = 2;
|
|
10
13
|
var DirectiveKeyword = 3;
|
|
11
14
|
var ControlKeyword = 4;
|
|
12
15
|
var ModifierKeyword = 5;
|
|
16
|
+
var Comment = 7;
|
|
13
17
|
|
|
14
18
|
// src/directives-registry.ts
|
|
15
19
|
var DIRECTIVES_REGISTRY = [
|
|
@@ -17,9 +21,21 @@ var DIRECTIVES_REGISTRY = [
|
|
|
17
21
|
// Accepted in every date-bearing chart (gantt, pert, countdown, timeline,
|
|
18
22
|
// event-line). Handled inline by each parser's prescan — no parser-Set
|
|
19
23
|
// membership here — so they only contribute highlighting (DIRECTIVE_KEYWORDS).
|
|
20
|
-
{
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
{
|
|
25
|
+
token: "year",
|
|
26
|
+
category: "directive",
|
|
27
|
+
chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
token: "date-order",
|
|
31
|
+
category: "directive",
|
|
32
|
+
chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
token: "no-current-year",
|
|
36
|
+
category: "directive",
|
|
37
|
+
chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
|
|
38
|
+
},
|
|
23
39
|
// ── Infra ────────────────────────────────────────────────
|
|
24
40
|
// Top-level SLO options that are ALSO accepted as node colon-properties
|
|
25
41
|
// (dual membership). Highlight bare (kept in DIRECTIVE_KEYWORDS) — their
|
|
@@ -27,92 +43,413 @@ var DIRECTIVES_REGISTRY = [
|
|
|
27
43
|
{
|
|
28
44
|
token: "slo-availability",
|
|
29
45
|
category: "directive",
|
|
30
|
-
infra: ["top-level", "behavior"]
|
|
46
|
+
infra: ["top-level", "behavior"],
|
|
47
|
+
chartTypes: ["infra"]
|
|
31
48
|
},
|
|
32
49
|
{
|
|
33
50
|
token: "slo-p90-latency-ms",
|
|
34
51
|
category: "directive",
|
|
35
|
-
infra: ["top-level", "behavior"]
|
|
52
|
+
infra: ["top-level", "behavior"],
|
|
53
|
+
chartTypes: ["infra"]
|
|
36
54
|
},
|
|
37
55
|
{
|
|
38
56
|
token: "slo-warning-margin",
|
|
39
57
|
category: "directive",
|
|
40
|
-
infra: ["top-level", "behavior"]
|
|
58
|
+
infra: ["top-level", "behavior"],
|
|
59
|
+
chartTypes: ["infra"]
|
|
41
60
|
},
|
|
42
61
|
// Top-level-only options (space-separated, bare).
|
|
43
|
-
{
|
|
44
|
-
|
|
45
|
-
|
|
62
|
+
{
|
|
63
|
+
token: "default-latency-ms",
|
|
64
|
+
category: "directive",
|
|
65
|
+
infra: ["top-level"],
|
|
66
|
+
chartTypes: ["infra"]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
token: "default-uptime",
|
|
70
|
+
category: "directive",
|
|
71
|
+
infra: ["top-level"],
|
|
72
|
+
chartTypes: ["infra"]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
token: "default-rps",
|
|
76
|
+
category: "directive",
|
|
77
|
+
infra: ["top-level"],
|
|
78
|
+
chartTypes: ["infra"]
|
|
79
|
+
},
|
|
46
80
|
// `active-tag` is shared with gantt + map (see below).
|
|
47
81
|
// Node behavior colon-keys — highlight as propertyName.
|
|
48
|
-
{
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
82
|
+
{
|
|
83
|
+
token: "latency-ms",
|
|
84
|
+
colonKey: true,
|
|
85
|
+
infra: ["behavior"],
|
|
86
|
+
chartTypes: ["infra"]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
token: "uptime",
|
|
90
|
+
colonKey: true,
|
|
91
|
+
infra: ["behavior"],
|
|
92
|
+
chartTypes: ["infra"]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
token: "instances",
|
|
96
|
+
colonKey: true,
|
|
97
|
+
infra: ["behavior"],
|
|
98
|
+
chartTypes: ["infra"]
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
token: "max-rps",
|
|
102
|
+
colonKey: true,
|
|
103
|
+
infra: ["behavior"],
|
|
104
|
+
chartTypes: ["infra"]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
token: "cache-hit",
|
|
108
|
+
colonKey: true,
|
|
109
|
+
infra: ["behavior"],
|
|
110
|
+
chartTypes: ["infra"]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
token: "firewall-block",
|
|
114
|
+
colonKey: true,
|
|
115
|
+
infra: ["behavior"],
|
|
116
|
+
chartTypes: ["infra"]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
token: "ratelimit-rps",
|
|
120
|
+
colonKey: true,
|
|
121
|
+
infra: ["behavior"],
|
|
122
|
+
chartTypes: ["infra"]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
token: "buffer",
|
|
126
|
+
colonKey: true,
|
|
127
|
+
infra: ["behavior"],
|
|
128
|
+
chartTypes: ["infra"]
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
token: "drain-rate",
|
|
132
|
+
colonKey: true,
|
|
133
|
+
infra: ["behavior"],
|
|
134
|
+
chartTypes: ["infra"]
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
token: "retention-hours",
|
|
138
|
+
colonKey: true,
|
|
139
|
+
infra: ["behavior"],
|
|
140
|
+
chartTypes: ["infra"]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
token: "partitions",
|
|
144
|
+
colonKey: true,
|
|
145
|
+
infra: ["behavior"],
|
|
146
|
+
chartTypes: ["infra"]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
token: "concurrency",
|
|
150
|
+
colonKey: true,
|
|
151
|
+
infra: ["behavior"],
|
|
152
|
+
chartTypes: ["infra"]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
token: "duration-ms",
|
|
156
|
+
colonKey: true,
|
|
157
|
+
infra: ["behavior"],
|
|
158
|
+
chartTypes: ["infra"]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
token: "cold-start-ms",
|
|
162
|
+
colonKey: true,
|
|
163
|
+
infra: ["behavior"],
|
|
164
|
+
chartTypes: ["infra"]
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
token: "cb-error-threshold",
|
|
168
|
+
colonKey: true,
|
|
169
|
+
infra: ["behavior"],
|
|
170
|
+
chartTypes: ["infra"]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
token: "cb-latency-threshold-ms",
|
|
174
|
+
colonKey: true,
|
|
175
|
+
infra: ["behavior"],
|
|
176
|
+
chartTypes: ["infra"]
|
|
177
|
+
},
|
|
64
178
|
// Edge-only colon-key.
|
|
65
|
-
{ token: "rps", colonKey: true, infra: ["edge"] },
|
|
179
|
+
{ token: "rps", colonKey: true, infra: ["edge"], chartTypes: ["infra"] },
|
|
66
180
|
// ── Gantt ────────────────────────────────────────────────
|
|
67
|
-
{
|
|
181
|
+
{
|
|
182
|
+
token: "start",
|
|
183
|
+
category: "directive",
|
|
184
|
+
gantt: ["option"],
|
|
185
|
+
chartTypes: ["gantt"]
|
|
186
|
+
},
|
|
68
187
|
{
|
|
69
188
|
token: "today-marker",
|
|
70
189
|
category: "directive",
|
|
71
|
-
gantt: ["option", "boolean"]
|
|
190
|
+
gantt: ["option", "boolean"],
|
|
191
|
+
chartTypes: ["gantt"]
|
|
72
192
|
},
|
|
73
193
|
{
|
|
74
194
|
token: "critical-path",
|
|
75
195
|
category: "directive",
|
|
76
|
-
gantt: ["option", "boolean"]
|
|
196
|
+
gantt: ["option", "boolean"],
|
|
197
|
+
chartTypes: ["gantt"]
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
token: "sprint-length",
|
|
201
|
+
category: "directive",
|
|
202
|
+
gantt: ["option"],
|
|
203
|
+
chartTypes: ["gantt", "pert"]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
token: "sprint-number",
|
|
207
|
+
category: "directive",
|
|
208
|
+
gantt: ["option"],
|
|
209
|
+
chartTypes: ["gantt", "pert"]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
token: "sprint-start",
|
|
213
|
+
category: "directive",
|
|
214
|
+
gantt: ["option"],
|
|
215
|
+
chartTypes: ["gantt", "pert"]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
token: "fill-tint",
|
|
219
|
+
category: "directive",
|
|
220
|
+
gantt: ["boolean"],
|
|
221
|
+
chartTypes: [
|
|
222
|
+
"arc",
|
|
223
|
+
"bar",
|
|
224
|
+
"block",
|
|
225
|
+
"body",
|
|
226
|
+
"boxes-and-lines",
|
|
227
|
+
"bracket",
|
|
228
|
+
"c4",
|
|
229
|
+
"class",
|
|
230
|
+
"clock",
|
|
231
|
+
"countdown",
|
|
232
|
+
"cycle",
|
|
233
|
+
"er",
|
|
234
|
+
"event-line",
|
|
235
|
+
"family",
|
|
236
|
+
"flowchart",
|
|
237
|
+
"funnel",
|
|
238
|
+
"gantt",
|
|
239
|
+
"goal",
|
|
240
|
+
"heatmap",
|
|
241
|
+
"journey-map",
|
|
242
|
+
"kanban",
|
|
243
|
+
"line",
|
|
244
|
+
"mindmap",
|
|
245
|
+
"org",
|
|
246
|
+
"pert",
|
|
247
|
+
"pie",
|
|
248
|
+
"polar-area",
|
|
249
|
+
"pyramid",
|
|
250
|
+
"quadrant",
|
|
251
|
+
"raci",
|
|
252
|
+
"radar",
|
|
253
|
+
"ring",
|
|
254
|
+
"scatter",
|
|
255
|
+
"sequence",
|
|
256
|
+
"sitemap",
|
|
257
|
+
"state",
|
|
258
|
+
"swimlane",
|
|
259
|
+
"timeline",
|
|
260
|
+
"treemap",
|
|
261
|
+
"venn",
|
|
262
|
+
"wireframe"
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
token: "fill-solid",
|
|
267
|
+
category: "directive",
|
|
268
|
+
gantt: ["boolean"],
|
|
269
|
+
chartTypes: [
|
|
270
|
+
"arc",
|
|
271
|
+
"bar",
|
|
272
|
+
"block",
|
|
273
|
+
"body",
|
|
274
|
+
"boxes-and-lines",
|
|
275
|
+
"bracket",
|
|
276
|
+
"c4",
|
|
277
|
+
"class",
|
|
278
|
+
"clock",
|
|
279
|
+
"countdown",
|
|
280
|
+
"cycle",
|
|
281
|
+
"er",
|
|
282
|
+
"event-line",
|
|
283
|
+
"family",
|
|
284
|
+
"flowchart",
|
|
285
|
+
"funnel",
|
|
286
|
+
"gantt",
|
|
287
|
+
"goal",
|
|
288
|
+
"heatmap",
|
|
289
|
+
"journey-map",
|
|
290
|
+
"kanban",
|
|
291
|
+
"line",
|
|
292
|
+
"mindmap",
|
|
293
|
+
"org",
|
|
294
|
+
"pert",
|
|
295
|
+
"pie",
|
|
296
|
+
"polar-area",
|
|
297
|
+
"pyramid",
|
|
298
|
+
"quadrant",
|
|
299
|
+
"raci",
|
|
300
|
+
"radar",
|
|
301
|
+
"ring",
|
|
302
|
+
"scatter",
|
|
303
|
+
"sequence",
|
|
304
|
+
"sitemap",
|
|
305
|
+
"state",
|
|
306
|
+
"swimlane",
|
|
307
|
+
"timeline",
|
|
308
|
+
"treemap",
|
|
309
|
+
"venn",
|
|
310
|
+
"wireframe"
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
token: "fill-outline",
|
|
315
|
+
category: "directive",
|
|
316
|
+
gantt: ["boolean"],
|
|
317
|
+
chartTypes: [
|
|
318
|
+
"arc",
|
|
319
|
+
"bar",
|
|
320
|
+
"block",
|
|
321
|
+
"body",
|
|
322
|
+
"boxes-and-lines",
|
|
323
|
+
"bracket",
|
|
324
|
+
"c4",
|
|
325
|
+
"class",
|
|
326
|
+
"clock",
|
|
327
|
+
"countdown",
|
|
328
|
+
"cycle",
|
|
329
|
+
"er",
|
|
330
|
+
"event-line",
|
|
331
|
+
"family",
|
|
332
|
+
"flowchart",
|
|
333
|
+
"funnel",
|
|
334
|
+
"gantt",
|
|
335
|
+
"goal",
|
|
336
|
+
"heatmap",
|
|
337
|
+
"journey-map",
|
|
338
|
+
"kanban",
|
|
339
|
+
"line",
|
|
340
|
+
"mindmap",
|
|
341
|
+
"org",
|
|
342
|
+
"pert",
|
|
343
|
+
"pie",
|
|
344
|
+
"polar-area",
|
|
345
|
+
"pyramid",
|
|
346
|
+
"quadrant",
|
|
347
|
+
"raci",
|
|
348
|
+
"radar",
|
|
349
|
+
"ring",
|
|
350
|
+
"scatter",
|
|
351
|
+
"sequence",
|
|
352
|
+
"sitemap",
|
|
353
|
+
"state",
|
|
354
|
+
"swimlane",
|
|
355
|
+
"timeline",
|
|
356
|
+
"treemap",
|
|
357
|
+
"venn",
|
|
358
|
+
"wireframe"
|
|
359
|
+
]
|
|
77
360
|
},
|
|
78
|
-
{ token: "sprint-length", category: "directive", gantt: ["option"] },
|
|
79
|
-
{ token: "sprint-number", category: "directive", gantt: ["option"] },
|
|
80
|
-
{ token: "sprint-start", category: "directive", gantt: ["option"] },
|
|
81
|
-
{ token: "fill-tint", category: "directive", gantt: ["boolean"] },
|
|
82
|
-
{ token: "fill-solid", category: "directive", gantt: ["boolean"] },
|
|
83
|
-
{ token: "fill-outline", category: "directive", gantt: ["boolean"] },
|
|
84
361
|
// `chart` is a wireframe element keyword (CONTROL); gantt also accepts it as
|
|
85
362
|
// an option. Highlight family is control.
|
|
86
|
-
{
|
|
363
|
+
{
|
|
364
|
+
token: "chart",
|
|
365
|
+
category: "control",
|
|
366
|
+
gantt: ["option"],
|
|
367
|
+
chartTypes: ["gantt", "wireframe"]
|
|
368
|
+
},
|
|
87
369
|
// `dependencies` is ON by default → almost never written bare (authors write
|
|
88
370
|
// `no-dependencies`, which DOES highlight). Bare word collides with prose and
|
|
89
|
-
//
|
|
90
|
-
// Set derivation only.
|
|
91
|
-
{
|
|
371
|
+
// it would colour in every gantt task name, so it stays plain. Present for
|
|
372
|
+
// parser Set derivation only.
|
|
373
|
+
{
|
|
374
|
+
token: "dependencies",
|
|
375
|
+
noHighlight: true,
|
|
376
|
+
gantt: ["option", "boolean"],
|
|
377
|
+
chartTypes: ["gantt"]
|
|
378
|
+
},
|
|
92
379
|
// ── Map ──────────────────────────────────────────────────
|
|
93
380
|
// Per-element value→channel ramps (decision #20): the directive names the
|
|
94
381
|
// visual channel — `region-heat` (colour), `poi-size` (marker area),
|
|
95
382
|
// `flow-width` (stroke). The per-element key mirrors it (`heat:`/`size:`/`width:`).
|
|
96
|
-
{
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
{ token: "
|
|
103
|
-
{
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
{ token: "
|
|
383
|
+
{
|
|
384
|
+
token: "region-heat",
|
|
385
|
+
category: "directive",
|
|
386
|
+
map: true,
|
|
387
|
+
chartTypes: ["map"]
|
|
388
|
+
},
|
|
389
|
+
{ token: "poi-size", category: "directive", map: true, chartTypes: ["map"] },
|
|
390
|
+
{
|
|
391
|
+
token: "flow-width",
|
|
392
|
+
category: "directive",
|
|
393
|
+
map: true,
|
|
394
|
+
chartTypes: ["map"]
|
|
395
|
+
},
|
|
396
|
+
{ token: "locale", category: "directive", map: true, chartTypes: ["map"] },
|
|
397
|
+
{ token: "caption", category: "directive", map: true, chartTypes: ["map"] },
|
|
398
|
+
{
|
|
399
|
+
token: "no-coastline",
|
|
400
|
+
category: "directive",
|
|
401
|
+
map: true,
|
|
402
|
+
chartTypes: ["map"]
|
|
403
|
+
},
|
|
404
|
+
{ token: "no-relief", category: "directive", map: true, chartTypes: ["map"] },
|
|
405
|
+
{
|
|
406
|
+
token: "no-context-labels",
|
|
407
|
+
category: "directive",
|
|
408
|
+
map: true,
|
|
409
|
+
chartTypes: ["map"]
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
token: "no-region-labels",
|
|
413
|
+
category: "directive",
|
|
414
|
+
map: true,
|
|
415
|
+
chartTypes: ["map"]
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
token: "no-region-heat-value",
|
|
419
|
+
category: "directive",
|
|
420
|
+
map: true,
|
|
421
|
+
chartTypes: ["map"]
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
token: "no-poi-labels",
|
|
425
|
+
category: "directive",
|
|
426
|
+
map: true,
|
|
427
|
+
chartTypes: ["map"]
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
token: "no-colorize",
|
|
431
|
+
category: "directive",
|
|
432
|
+
map: true,
|
|
433
|
+
chartTypes: ["map"]
|
|
434
|
+
},
|
|
435
|
+
{ token: "no-cities", category: "directive", map: true, chartTypes: ["map"] },
|
|
436
|
+
{
|
|
437
|
+
token: "no-cluster-pois",
|
|
438
|
+
category: "directive",
|
|
439
|
+
map: true,
|
|
440
|
+
chartTypes: ["map"]
|
|
441
|
+
},
|
|
110
442
|
// ── Clock channel (BL-122): live local-time cards on POIs flagged `clock` ──
|
|
111
443
|
// Activation is the per-POI `clock` flag (peeled in the map parser, not a
|
|
112
444
|
// directive). `hours 9-17` / `days mon-fri` are the global availability
|
|
113
445
|
// window (reused verbatim from the clock chart type).
|
|
114
|
-
{
|
|
115
|
-
|
|
446
|
+
{
|
|
447
|
+
token: "hours",
|
|
448
|
+
category: "directive",
|
|
449
|
+
map: true,
|
|
450
|
+
chartTypes: ["clock", "map"]
|
|
451
|
+
},
|
|
452
|
+
{ token: "days", category: "directive", map: true, chartTypes: ["map"] },
|
|
116
453
|
// ── Shared across types ──────────────────────────────────
|
|
117
454
|
// `active-tag`: infra top-level option + gantt option + map directive.
|
|
118
455
|
// Treemap also accepts it (§24C.6, decision #48) — validated inline in its
|
|
@@ -123,24 +460,74 @@ var DIRECTIVES_REGISTRY = [
|
|
|
123
460
|
category: "directive",
|
|
124
461
|
infra: ["top-level"],
|
|
125
462
|
gantt: ["option"],
|
|
126
|
-
map: true
|
|
463
|
+
map: true,
|
|
464
|
+
chartTypes: [
|
|
465
|
+
"body",
|
|
466
|
+
"boxes-and-lines",
|
|
467
|
+
"c4",
|
|
468
|
+
"er",
|
|
469
|
+
"event-line",
|
|
470
|
+
"family",
|
|
471
|
+
"gantt",
|
|
472
|
+
"infra",
|
|
473
|
+
"journey-map",
|
|
474
|
+
"kanban",
|
|
475
|
+
"map",
|
|
476
|
+
"mindmap",
|
|
477
|
+
"org",
|
|
478
|
+
"pert",
|
|
479
|
+
"sequence",
|
|
480
|
+
"sitemap",
|
|
481
|
+
"state",
|
|
482
|
+
"swimlane",
|
|
483
|
+
"timeline",
|
|
484
|
+
"treemap",
|
|
485
|
+
"wireframe"
|
|
486
|
+
]
|
|
127
487
|
},
|
|
128
488
|
// `title`: gantt option. (The data-chart `title` directive was removed in
|
|
129
489
|
// decision #48 — it now raises E_TITLE_DIRECTIVE; the token stays here for
|
|
130
490
|
// gantt.)
|
|
131
|
-
{
|
|
491
|
+
{
|
|
492
|
+
token: "title",
|
|
493
|
+
category: "directive",
|
|
494
|
+
gantt: ["option"],
|
|
495
|
+
chartTypes: ["gantt"]
|
|
496
|
+
},
|
|
132
497
|
// `sort`: gantt option (also general, hand-listed).
|
|
133
|
-
{
|
|
498
|
+
{
|
|
499
|
+
token: "sort",
|
|
500
|
+
category: "directive",
|
|
501
|
+
gantt: ["option"],
|
|
502
|
+
chartTypes: "all"
|
|
503
|
+
},
|
|
134
504
|
// `lane-by <group>`: swimlane axis (view-state). NB not `swimlane` — that's a
|
|
135
505
|
// chart type. Kanban reads it via its own KNOWN_OPTIONS; gantt via the switch.
|
|
136
|
-
{
|
|
506
|
+
{
|
|
507
|
+
token: "lane-by",
|
|
508
|
+
category: "directive",
|
|
509
|
+
gantt: ["option"],
|
|
510
|
+
chartTypes: "all"
|
|
511
|
+
},
|
|
137
512
|
// `no-title`: gantt boolean + map directive (also general, hand-listed).
|
|
138
|
-
{
|
|
513
|
+
{
|
|
514
|
+
token: "no-title",
|
|
515
|
+
category: "directive",
|
|
516
|
+
gantt: ["boolean"],
|
|
517
|
+
map: true,
|
|
518
|
+
chartTypes: "all"
|
|
519
|
+
},
|
|
139
520
|
// `no-legend`: universal (decision #48) — every chart that renders a legend
|
|
140
521
|
// accepts it, and charts without one take it as a harmless no-op. Parsed for
|
|
141
522
|
// most types via GLOBAL_BOOLEANS in utils/parsing; gantt derives its boolean
|
|
142
523
|
// Set from here, and map from `map: true`.
|
|
143
|
-
{
|
|
524
|
+
{
|
|
525
|
+
token: "no-legend",
|
|
526
|
+
category: "directive",
|
|
527
|
+
gantt: ["boolean"],
|
|
528
|
+
map: true,
|
|
529
|
+
chartTypes: "all"
|
|
530
|
+
},
|
|
144
531
|
// `legend-inline`: universal §1.9 boolean (decision #50) — the top-center-
|
|
145
532
|
// legend data charts (bar/line/radar/scatter/function) render the title and
|
|
146
533
|
// legend on one line; every other chart accepts it as a harmless no-op.
|
|
@@ -148,7 +535,8 @@ var DIRECTIVES_REGISTRY = [
|
|
|
148
535
|
token: "legend-inline",
|
|
149
536
|
category: "directive",
|
|
150
537
|
gantt: ["boolean"],
|
|
151
|
-
map: true
|
|
538
|
+
map: true,
|
|
539
|
+
chartTypes: "all"
|
|
152
540
|
},
|
|
153
541
|
// ══════════════════════════════════════════════════════════
|
|
154
542
|
// Highlight-only vocab (no extractable parser Set).
|
|
@@ -158,40 +546,69 @@ var DIRECTIVES_REGISTRY = [
|
|
|
158
546
|
// simply their single declaration site for highlighting. Grouped by chart
|
|
159
547
|
// type. Categories route to the specializer-read sets in keywords.ts.
|
|
160
548
|
// ── Gantt (extras beyond the option/boolean Sets) ────────
|
|
161
|
-
{
|
|
162
|
-
|
|
163
|
-
|
|
549
|
+
{
|
|
550
|
+
token: "era",
|
|
551
|
+
category: "directive",
|
|
552
|
+
chartTypes: [
|
|
553
|
+
"bar",
|
|
554
|
+
"gantt",
|
|
555
|
+
"line",
|
|
556
|
+
"pie",
|
|
557
|
+
"polar-area",
|
|
558
|
+
"radar",
|
|
559
|
+
"timeline"
|
|
560
|
+
]
|
|
561
|
+
},
|
|
562
|
+
{ token: "marker", category: "directive", chartTypes: ["gantt", "timeline"] },
|
|
563
|
+
{ token: "holiday", category: "directive", chartTypes: ["gantt"] },
|
|
164
564
|
// `workweek` is also the canonical weekday-window directive on clock and map
|
|
165
565
|
// clock-cards (decision #48; `days` stays as the legacy alias).
|
|
166
|
-
{
|
|
167
|
-
|
|
566
|
+
{
|
|
567
|
+
token: "workweek",
|
|
568
|
+
category: "directive",
|
|
569
|
+
map: true,
|
|
570
|
+
chartTypes: ["clock", "gantt", "map"]
|
|
571
|
+
},
|
|
572
|
+
{ token: "no-dependencies", category: "directive", chartTypes: ["gantt"] },
|
|
168
573
|
// ── Tech-radar ───────────────────────────────────────────
|
|
169
|
-
{ token: "rings", category: "directive" },
|
|
574
|
+
{ token: "rings", category: "directive", chartTypes: ["tech-radar"] },
|
|
170
575
|
// Blip listing is default-on everywhere (decision #48): `no-blip-legend`
|
|
171
576
|
// suppresses it; `show-blip-legend` stays as the parse-accepted legacy no-op.
|
|
172
|
-
{
|
|
173
|
-
|
|
174
|
-
|
|
577
|
+
{
|
|
578
|
+
token: "no-blip-legend",
|
|
579
|
+
category: "directive",
|
|
580
|
+
chartTypes: ["tech-radar"]
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
token: "show-blip-legend",
|
|
584
|
+
category: "directive",
|
|
585
|
+
chartTypes: ["tech-radar"]
|
|
586
|
+
},
|
|
587
|
+
{ token: "trend", category: "directive", chartTypes: ["tech-radar"] },
|
|
175
588
|
// ── Tags / shared directives ─────────────────────────────
|
|
176
|
-
{ token: "tags", category: "directive" },
|
|
177
|
-
{ token: "import", category: "directive" },
|
|
178
|
-
{
|
|
589
|
+
{ token: "tags", category: "directive", chartTypes: "all" },
|
|
590
|
+
{ token: "import", category: "directive", chartTypes: "all" },
|
|
591
|
+
{
|
|
592
|
+
token: "hide",
|
|
593
|
+
category: "directive",
|
|
594
|
+
chartTypes: ["boxes-and-lines", "kanban", "org"]
|
|
595
|
+
},
|
|
179
596
|
// `focus <name>`: org subtree drill-down (view-state, source-backed) — the
|
|
180
597
|
// export re-roots to that person/team with the ancestor breadcrumb trail.
|
|
181
598
|
// Org reads it via its own KNOWN_OPTIONS; registered here for highlighting.
|
|
182
|
-
{ token: "focus", category: "directive" },
|
|
183
|
-
{ token: "direction", category: "directive" },
|
|
599
|
+
{ token: "focus", category: "directive", chartTypes: ["org"] },
|
|
600
|
+
{ token: "direction", category: "directive", chartTypes: "all" },
|
|
184
601
|
// ── Clock ────────────────────────────────────────────────
|
|
185
602
|
// The board's flat directives — highlight-only (the parser validates them
|
|
186
603
|
// inline, no extractable Set). `no-title` + `direction` are already listed
|
|
187
604
|
// above (shared). Values (analog is a bare flag; color-by's
|
|
188
605
|
// place|work|daylight|time|none) highlight as plain tokens.
|
|
189
|
-
{ token: "analog", category: "directive" },
|
|
190
|
-
{ token: "hours", category: "directive" },
|
|
191
|
-
{ token: "days", category: "directive" },
|
|
192
|
-
{ token: "no-sun", category: "directive" },
|
|
193
|
-
{ token: "time-24", category: "directive" },
|
|
194
|
-
{ token: "color-by", category: "directive" },
|
|
606
|
+
{ token: "analog", category: "directive", chartTypes: ["clock"] },
|
|
607
|
+
{ token: "hours", category: "directive", chartTypes: ["clock"] },
|
|
608
|
+
{ token: "days", category: "directive", chartTypes: ["clock"] },
|
|
609
|
+
{ token: "no-sun", category: "directive", chartTypes: ["clock"] },
|
|
610
|
+
{ token: "time-24", category: "directive", chartTypes: ["clock"] },
|
|
611
|
+
{ token: "color-by", category: "directive", chartTypes: ["clock"] },
|
|
195
612
|
// ── Boxes-and-lines ──────────────────────────────────────
|
|
196
613
|
// `heat <Label> [low] [high]` is the value→colour ramp directive, but `heat`
|
|
197
614
|
// is NOT registered as a directive keyword: it is dual-use with the `heat:`
|
|
@@ -201,72 +618,186 @@ var DIRECTIVES_REGISTRY = [
|
|
|
201
618
|
// as a property in both positions — exactly the treemap `heat` precedent.
|
|
202
619
|
// Box values render by default since decision #48; `show-values` stays as
|
|
203
620
|
// the parse-accepted legacy no-op (suppress with the shared `no-value`).
|
|
204
|
-
{
|
|
621
|
+
{
|
|
622
|
+
token: "show-values",
|
|
623
|
+
category: "directive",
|
|
624
|
+
chartTypes: ["boxes-and-lines"]
|
|
625
|
+
},
|
|
205
626
|
// Treemap's legacy plural spelling of the same suppression (decision #48
|
|
206
627
|
// made the shared singular `no-value` canonical). Registered so a legacy
|
|
207
628
|
// document still highlights it as a directive rather than plain text.
|
|
208
|
-
{ token: "no-values", category: "directive" },
|
|
629
|
+
{ token: "no-values", category: "directive", chartTypes: ["treemap"] },
|
|
209
630
|
// ── Swimlane ─────────────────────────────────────────────
|
|
210
|
-
{ token: "lane", category: "directive" },
|
|
631
|
+
{ token: "lane", category: "directive", chartTypes: ["swimlane"] },
|
|
211
632
|
// ── ER ───────────────────────────────────────────────────
|
|
212
|
-
{ token: "notation", category: "directive" },
|
|
633
|
+
{ token: "notation", category: "directive", chartTypes: ["er"] },
|
|
213
634
|
// ── Class ────────────────────────────────────────────────
|
|
214
|
-
{ token: "extends", category: "directive" },
|
|
215
|
-
{ token: "implements", category: "directive" },
|
|
216
|
-
{ token: "abstract", category: "directive" },
|
|
217
|
-
{ token: "interface", category: "directive" },
|
|
218
|
-
{ token: "enum", category: "directive" },
|
|
635
|
+
{ token: "extends", category: "directive", chartTypes: ["class"] },
|
|
636
|
+
{ token: "implements", category: "directive", chartTypes: ["class"] },
|
|
637
|
+
{ token: "abstract", category: "directive", chartTypes: ["class"] },
|
|
638
|
+
{ token: "interface", category: "directive", chartTypes: ["class"] },
|
|
639
|
+
{ token: "enum", category: "directive", chartTypes: ["class"] },
|
|
219
640
|
// ── C4 ───────────────────────────────────────────────────
|
|
220
|
-
{ token: "containers", category: "directive" },
|
|
221
|
-
{ token: "components", category: "directive" },
|
|
222
|
-
{ token: "deployment", category: "directive" },
|
|
223
|
-
{ token: "technology", category: "directive" },
|
|
641
|
+
{ token: "containers", category: "directive", chartTypes: ["c4"] },
|
|
642
|
+
{ token: "components", category: "directive", chartTypes: ["c4"] },
|
|
643
|
+
{ token: "deployment", category: "directive", chartTypes: ["c4"] },
|
|
644
|
+
{ token: "technology", category: "directive", chartTypes: ["c4"] },
|
|
224
645
|
// ── Infra (directives beyond the option/behavior Sets) ───
|
|
225
|
-
{ token: "sub-node-label", category: "directive" },
|
|
226
|
-
{ token: "show-sub-node-count", category: "directive" },
|
|
227
|
-
{ token: "animate", category: "directive" },
|
|
646
|
+
{ token: "sub-node-label", category: "directive", chartTypes: ["org"] },
|
|
647
|
+
{ token: "show-sub-node-count", category: "directive", chartTypes: ["org"] },
|
|
648
|
+
{ token: "animate", category: "directive", chartTypes: ["infra"] },
|
|
228
649
|
// ── Sequence ─────────────────────────────────────────────
|
|
229
|
-
{ token: "activations", category: "directive" },
|
|
230
|
-
{ token: "no-activations", category: "directive" },
|
|
231
|
-
{ token: "autonumber", category: "directive" },
|
|
650
|
+
{ token: "activations", category: "directive", chartTypes: ["sequence"] },
|
|
651
|
+
{ token: "no-activations", category: "directive", chartTypes: ["sequence"] },
|
|
652
|
+
{ token: "autonumber", category: "directive", chartTypes: ["sequence"] },
|
|
232
653
|
// ── Map element leaders (not in DIRECTIVE_SET) ───────────
|
|
233
|
-
{ token: "poi", category: "directive" },
|
|
234
|
-
{ token: "route", category: "directive" },
|
|
654
|
+
{ token: "poi", category: "directive", chartTypes: ["map"] },
|
|
655
|
+
{ token: "route", category: "directive", chartTypes: ["map"] },
|
|
235
656
|
// ── Data charts ──────────────────────────────────────────
|
|
236
|
-
{ token: "stacked", category: "directive" },
|
|
237
|
-
{
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
{
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
657
|
+
{ token: "stacked", category: "directive", chartTypes: "all" },
|
|
658
|
+
{
|
|
659
|
+
token: "no-name",
|
|
660
|
+
category: "directive",
|
|
661
|
+
chartTypes: ["funnel", "pie", "polar-area", "scatter"]
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
token: "no-value",
|
|
665
|
+
category: "directive",
|
|
666
|
+
chartTypes: [
|
|
667
|
+
"bar",
|
|
668
|
+
"boxes-and-lines",
|
|
669
|
+
"funnel",
|
|
670
|
+
"goal",
|
|
671
|
+
"heatmap",
|
|
672
|
+
"line",
|
|
673
|
+
"pie",
|
|
674
|
+
"polar-area",
|
|
675
|
+
"radar",
|
|
676
|
+
"treemap"
|
|
677
|
+
]
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
token: "no-percent",
|
|
681
|
+
category: "directive",
|
|
682
|
+
chartTypes: ["funnel", "goal", "pie", "polar-area", "treemap"]
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
token: "series",
|
|
686
|
+
category: "directive",
|
|
687
|
+
chartTypes: [
|
|
688
|
+
"bar",
|
|
689
|
+
"function",
|
|
690
|
+
"funnel",
|
|
691
|
+
"heatmap",
|
|
692
|
+
"line",
|
|
693
|
+
"pie",
|
|
694
|
+
"polar-area",
|
|
695
|
+
"radar",
|
|
696
|
+
"sankey",
|
|
697
|
+
"scatter"
|
|
698
|
+
]
|
|
699
|
+
},
|
|
700
|
+
{ token: "orientation", category: "directive", chartTypes: "all" },
|
|
701
|
+
{
|
|
702
|
+
token: "x-label",
|
|
703
|
+
category: "directive",
|
|
704
|
+
chartTypes: ["bar", "function", "line", "quadrant", "scatter"]
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
token: "y-label",
|
|
708
|
+
category: "directive",
|
|
709
|
+
chartTypes: ["bar", "function", "line", "quadrant", "scatter"]
|
|
710
|
+
},
|
|
711
|
+
{ token: "size-label", category: "directive", chartTypes: ["scatter"] },
|
|
712
|
+
{ token: "columns", category: "directive", chartTypes: ["block", "heatmap"] },
|
|
713
|
+
{ token: "rows", category: "directive", chartTypes: "all" },
|
|
714
|
+
{ token: "labels", category: "directive", chartTypes: "all" },
|
|
715
|
+
{ token: "rotate", category: "directive", chartTypes: ["wordcloud"] },
|
|
716
|
+
{ token: "scale", category: "directive", chartTypes: "all" },
|
|
717
|
+
{
|
|
718
|
+
token: "values",
|
|
719
|
+
category: "directive",
|
|
720
|
+
chartTypes: ["pert", "tech-radar"]
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
token: "orientation-horizontal",
|
|
724
|
+
category: "directive",
|
|
725
|
+
chartTypes: ["bar"]
|
|
726
|
+
},
|
|
252
727
|
// ── Slope ────────────────────────────────────────────────
|
|
253
|
-
{ token: "period", category: "directive" },
|
|
728
|
+
{ token: "period", category: "directive", chartTypes: "all" },
|
|
254
729
|
// ── Quadrant ─────────────────────────────────────────────
|
|
255
|
-
{ token: "x-axis", category: "directive" },
|
|
256
|
-
{ token: "y-axis", category: "directive" },
|
|
257
|
-
{
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
730
|
+
{ token: "x-axis", category: "directive", chartTypes: "all" },
|
|
731
|
+
{ token: "y-axis", category: "directive", chartTypes: "all" },
|
|
732
|
+
{
|
|
733
|
+
token: "top-right",
|
|
734
|
+
category: "directive",
|
|
735
|
+
chartTypes: ["quadrant", "tech-radar"]
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
token: "top-left",
|
|
739
|
+
category: "directive",
|
|
740
|
+
chartTypes: ["quadrant", "tech-radar"]
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
token: "bottom-right",
|
|
744
|
+
category: "directive",
|
|
745
|
+
chartTypes: ["quadrant", "tech-radar"]
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
token: "bottom-left",
|
|
749
|
+
category: "directive",
|
|
750
|
+
chartTypes: ["quadrant", "tech-radar"]
|
|
751
|
+
},
|
|
261
752
|
// ── Layout (cross-chart) ─────────────────────────────────
|
|
262
|
-
{
|
|
263
|
-
|
|
264
|
-
|
|
753
|
+
{
|
|
754
|
+
token: "direction-tb",
|
|
755
|
+
category: "directive",
|
|
756
|
+
chartTypes: [
|
|
757
|
+
"boxes-and-lines",
|
|
758
|
+
"c4",
|
|
759
|
+
"clock",
|
|
760
|
+
"flowchart",
|
|
761
|
+
"infra",
|
|
762
|
+
"org",
|
|
763
|
+
"pert",
|
|
764
|
+
"sitemap",
|
|
765
|
+
"state",
|
|
766
|
+
"swimlane",
|
|
767
|
+
"version-control"
|
|
768
|
+
]
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
token: "direction-lr",
|
|
772
|
+
category: "directive",
|
|
773
|
+
chartTypes: [
|
|
774
|
+
"boxes-and-lines",
|
|
775
|
+
"c4",
|
|
776
|
+
"clock",
|
|
777
|
+
"flowchart",
|
|
778
|
+
"infra",
|
|
779
|
+
"org",
|
|
780
|
+
"pert",
|
|
781
|
+
"sitemap",
|
|
782
|
+
"state",
|
|
783
|
+
"swimlane",
|
|
784
|
+
"version-control"
|
|
785
|
+
]
|
|
786
|
+
},
|
|
787
|
+
{ token: "orientation-vertical", category: "directive", chartTypes: "all" },
|
|
265
788
|
// ── Pyramid ──────────────────────────────────────────────
|
|
266
|
-
{ token: "inverted", category: "directive" },
|
|
789
|
+
{ token: "inverted", category: "directive", chartTypes: ["pyramid"] },
|
|
267
790
|
// ── Color / notes (cross-chart) ──────────────────────────
|
|
268
|
-
{
|
|
269
|
-
|
|
791
|
+
{
|
|
792
|
+
token: "color",
|
|
793
|
+
category: "directive",
|
|
794
|
+
chartTypes: "all"
|
|
795
|
+
},
|
|
796
|
+
{
|
|
797
|
+
token: "no-notes",
|
|
798
|
+
category: "directive",
|
|
799
|
+
chartTypes: ["flowchart", "goal", "state", "whiteboard"]
|
|
800
|
+
},
|
|
270
801
|
// ── Emphasis family (§1.11, decision #49) ────────────────
|
|
271
802
|
// `highlight <Name>…` / `dim <Name>…` — the figure/ground axis, orthogonal
|
|
272
803
|
// to color (§1.5) and to the chart-wide `fill-*` family (§1.9). Both are
|
|
@@ -279,122 +810,180 @@ var DIRECTIVES_REGISTRY = [
|
|
|
279
810
|
// tokens are registered together so the whole family lights up at once.
|
|
280
811
|
//
|
|
281
812
|
// Supported on `sankey` and `family` today; every further chart type is a
|
|
282
|
-
// separate decision
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
813
|
+
// separate decision, made by adding it to `chartTypes` below (#1734).
|
|
814
|
+
{
|
|
815
|
+
token: "highlight",
|
|
816
|
+
category: "directive",
|
|
817
|
+
chartTypes: ["family", "sankey"]
|
|
818
|
+
},
|
|
819
|
+
{ token: "dim", category: "directive", chartTypes: ["family", "sankey"] },
|
|
287
820
|
// ── RACI ─────────────────────────────────────────────────
|
|
288
|
-
{ token: "roles", category: "directive" },
|
|
821
|
+
{ token: "roles", category: "directive", chartTypes: ["raci"] },
|
|
289
822
|
// ── Cycle ────────────────────────────────────────────────
|
|
290
|
-
{
|
|
291
|
-
|
|
823
|
+
{
|
|
824
|
+
token: "direction-counterclockwise",
|
|
825
|
+
category: "directive",
|
|
826
|
+
chartTypes: ["cycle"]
|
|
827
|
+
},
|
|
828
|
+
{ token: "circle-nodes", category: "directive", chartTypes: ["cycle"] },
|
|
292
829
|
// ── Journey-map ──────────────────────────────────────────
|
|
293
|
-
{ token: "persona", category: "directive" },
|
|
830
|
+
{ token: "persona", category: "directive", chartTypes: ["journey-map"] },
|
|
294
831
|
// ── Function ─────────────────────────────────────────────
|
|
295
|
-
{ token: "x", category: "directive" },
|
|
296
|
-
{
|
|
832
|
+
{ token: "x", category: "directive", chartTypes: ["function"] },
|
|
833
|
+
{
|
|
834
|
+
token: "fill",
|
|
835
|
+
category: "directive",
|
|
836
|
+
chartTypes: ["function", "line", "whiteboard"]
|
|
837
|
+
},
|
|
297
838
|
// ── Wordcloud ────────────────────────────────────────────
|
|
298
|
-
{ token: "max", category: "directive" },
|
|
299
|
-
{
|
|
839
|
+
{ token: "max", category: "directive", chartTypes: ["wordcloud"] },
|
|
840
|
+
{
|
|
841
|
+
token: "size",
|
|
842
|
+
category: "directive",
|
|
843
|
+
chartTypes: ["whiteboard", "wordcloud"]
|
|
844
|
+
},
|
|
300
845
|
// ── Arc ──────────────────────────────────────────────────
|
|
301
|
-
{ token: "order", category: "directive" },
|
|
846
|
+
{ token: "order", category: "directive", chartTypes: ["arc"] },
|
|
302
847
|
// ── PERT ─────────────────────────────────────────────────
|
|
303
|
-
{ token: "time-unit", category: "directive" },
|
|
304
|
-
{ token: "default-confidence", category: "directive" },
|
|
305
|
-
{ token: "node-detail", category: "directive" },
|
|
306
|
-
{ token: "trials", category: "directive" },
|
|
307
|
-
{ token: "seed", category: "directive" },
|
|
308
|
-
{ token: "scrubber-trials", category: "directive" },
|
|
848
|
+
{ token: "time-unit", category: "directive", chartTypes: ["pert"] },
|
|
849
|
+
{ token: "default-confidence", category: "directive", chartTypes: ["pert"] },
|
|
850
|
+
{ token: "node-detail", category: "directive", chartTypes: ["pert"] },
|
|
851
|
+
{ token: "trials", category: "directive", chartTypes: ["pert"] },
|
|
852
|
+
{ token: "seed", category: "directive", chartTypes: ["bracket", "pert"] },
|
|
853
|
+
{ token: "scrubber-trials", category: "directive", chartTypes: ["pert"] },
|
|
309
854
|
// `start-date` is also gantt's canonical project-start option (decision #48;
|
|
310
855
|
// bare `start` above stays as the legacy alias).
|
|
311
|
-
{
|
|
312
|
-
|
|
856
|
+
{
|
|
857
|
+
token: "start-date",
|
|
858
|
+
category: "directive",
|
|
859
|
+
gantt: ["option"],
|
|
860
|
+
chartTypes: ["gantt", "pert"]
|
|
861
|
+
},
|
|
862
|
+
{ token: "end-date", category: "directive", chartTypes: ["pert"] },
|
|
313
863
|
// ── Goal ─────────────────────────────────────────────────
|
|
314
864
|
// Mode flags, value-key leaders, and opt-outs. `now`/`target` collide with
|
|
315
865
|
// label prose ("start now", "on target"), but the arrow-label demotion pass
|
|
316
866
|
// (see highlight-api LABEL_WORD_NODES) treats any keyword-bearing label as
|
|
317
867
|
// text and demotes them, so they highlight only as line leaders.
|
|
318
|
-
{ token: "thermometer", category: "directive" },
|
|
319
|
-
{ token: "gauge", category: "directive" },
|
|
320
|
-
{
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
868
|
+
{ token: "thermometer", category: "directive", chartTypes: ["goal"] },
|
|
869
|
+
{ token: "gauge", category: "directive", chartTypes: ["goal"] },
|
|
870
|
+
{
|
|
871
|
+
token: "now",
|
|
872
|
+
category: "directive",
|
|
873
|
+
chartTypes: ["event-line", "goal", "pert"]
|
|
874
|
+
},
|
|
875
|
+
{ token: "target", category: "directive", chartTypes: ["countdown", "goal"] },
|
|
876
|
+
{ token: "no-note", category: "directive", chartTypes: ["goal"] },
|
|
877
|
+
{ token: "no-auto-color", category: "directive", chartTypes: ["goal"] },
|
|
324
878
|
// ── Control-flow + wireframe element keywords (CONTROL) ──
|
|
325
|
-
{ token: "if", category: "control" },
|
|
326
|
-
{ token: "else", category: "control" },
|
|
327
|
-
{ token: "loop", category: "control" },
|
|
328
|
-
{ token: "parallel", category: "control" },
|
|
329
|
-
{
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
879
|
+
{ token: "if", category: "control", chartTypes: ["sequence"] },
|
|
880
|
+
{ token: "else", category: "control", chartTypes: ["sequence"] },
|
|
881
|
+
{ token: "loop", category: "control", chartTypes: ["sequence"] },
|
|
882
|
+
{ token: "parallel", category: "control", chartTypes: ["gantt", "sequence"] },
|
|
883
|
+
{
|
|
884
|
+
token: "note",
|
|
885
|
+
category: "control",
|
|
886
|
+
chartTypes: [
|
|
887
|
+
"boxes-and-lines",
|
|
888
|
+
"class",
|
|
889
|
+
"countdown",
|
|
890
|
+
"er",
|
|
891
|
+
"flowchart",
|
|
892
|
+
"goal",
|
|
893
|
+
"sequence",
|
|
894
|
+
"state",
|
|
895
|
+
"swimlane",
|
|
896
|
+
"version-control",
|
|
897
|
+
"whiteboard"
|
|
898
|
+
]
|
|
899
|
+
},
|
|
900
|
+
{ token: "nav", category: "control", chartTypes: ["wireframe"] },
|
|
901
|
+
{ token: "tabs", category: "control", chartTypes: ["wireframe"] },
|
|
902
|
+
{ token: "table", category: "control", chartTypes: ["wireframe"] },
|
|
903
|
+
{
|
|
904
|
+
token: "image",
|
|
905
|
+
category: "control",
|
|
906
|
+
chartTypes: ["whiteboard", "wireframe"]
|
|
907
|
+
},
|
|
908
|
+
{ token: "modal", category: "control", chartTypes: ["wireframe"] },
|
|
909
|
+
{ token: "skeleton", category: "control", chartTypes: ["wireframe"] },
|
|
910
|
+
{ token: "alert", category: "control", chartTypes: ["wireframe"] },
|
|
911
|
+
{
|
|
912
|
+
token: "progress",
|
|
913
|
+
category: "control",
|
|
914
|
+
chartTypes: ["gantt", "wireframe"]
|
|
915
|
+
},
|
|
916
|
+
{ token: "mobile", category: "control", chartTypes: ["wireframe"] },
|
|
339
917
|
// Whiteboard element leaders (§39). `image` is shared with wireframe above
|
|
340
918
|
// and `text` stays an ER modifier; `database` / `queue` are left plain
|
|
341
919
|
// because sequence uses them as values, not line leaders.
|
|
342
|
-
{ token: "rectangle", category: "control" },
|
|
343
|
-
{ token: "ellipse", category: "control" },
|
|
344
|
-
{ token: "arrow", category: "control" },
|
|
345
|
-
{ token: "ink", category: "control" },
|
|
920
|
+
{ token: "rectangle", category: "control", chartTypes: ["whiteboard"] },
|
|
921
|
+
{ token: "ellipse", category: "control", chartTypes: ["whiteboard"] },
|
|
922
|
+
{ token: "arrow", category: "control", chartTypes: ["whiteboard"] },
|
|
923
|
+
{ token: "ink", category: "control", chartTypes: ["whiteboard"] },
|
|
924
|
+
// ── SWOT section keywords (CONTROL) ──────────────────────
|
|
925
|
+
{ token: "strengths", category: "control", chartTypes: ["swot"] },
|
|
926
|
+
{ token: "weaknesses", category: "control", chartTypes: ["swot"] },
|
|
927
|
+
{ token: "opportunities", category: "control", chartTypes: ["swot"] },
|
|
928
|
+
{ token: "threats", category: "control", chartTypes: ["swot"] },
|
|
929
|
+
{ token: "no-axes", category: "directive", chartTypes: ["swot"] },
|
|
930
|
+
{ token: "no-tint-items", category: "directive", chartTypes: ["swot"] },
|
|
346
931
|
// ── Kanban status keywords (STATUS) ──────────────────────
|
|
347
|
-
{ token: "na", category: "status" },
|
|
348
|
-
{ token: "todo", category: "status" },
|
|
349
|
-
{ token: "wip", category: "status" },
|
|
350
|
-
{ token: "done", category: "status" },
|
|
351
|
-
{ token: "blocked", category: "status" },
|
|
352
|
-
{ token: "in-progress", category: "status" },
|
|
353
|
-
{ token: "backlog", category: "status" },
|
|
354
|
-
{ token: "ready", category: "status" },
|
|
932
|
+
{ token: "na", category: "status", chartTypes: ["kanban"] },
|
|
933
|
+
{ token: "todo", category: "status", chartTypes: ["kanban"] },
|
|
934
|
+
{ token: "wip", category: "status", chartTypes: ["kanban"] },
|
|
935
|
+
{ token: "done", category: "status", chartTypes: ["kanban"] },
|
|
936
|
+
{ token: "blocked", category: "status", chartTypes: ["kanban"] },
|
|
937
|
+
{ token: "in-progress", category: "status", chartTypes: ["kanban"] },
|
|
938
|
+
{ token: "backlog", category: "status", chartTypes: ["kanban"] },
|
|
939
|
+
{ token: "ready", category: "status", chartTypes: ["kanban"] },
|
|
355
940
|
// ── Modifiers + ER column types/modifiers (MODIFIER) ─────
|
|
356
941
|
// `collapsed` is the bare trailing group-line flag made canonical by
|
|
357
942
|
// decision #48 (`[Fulfillment] collapsed`). It is deliberately a bare
|
|
358
943
|
// MODIFIER rather than a colon key: the legacy `collapsed: true` form still
|
|
359
944
|
// parses and still highlights (as `modifier` instead of `propertyName`),
|
|
360
945
|
// whereas leaving it colon-only left the canonical bare form as plain text.
|
|
361
|
-
{ token: "collapsed", category: "modifier" },
|
|
362
|
-
{ token: "as", category: "modifier" },
|
|
363
|
-
{ token: "alias", category: "modifier" },
|
|
364
|
-
{ token: "aka", category: "modifier" },
|
|
365
|
-
{ token: "position", category: "modifier" },
|
|
366
|
-
{ token: "default", category: "modifier" },
|
|
367
|
-
{ token: "pk", category: "modifier" },
|
|
368
|
-
{ token: "fk", category: "modifier" },
|
|
369
|
-
{ token: "nullable", category: "modifier" },
|
|
370
|
-
{ token: "unique", category: "modifier" },
|
|
371
|
-
{ token: "int", category: "modifier" },
|
|
372
|
-
{ token: "varchar", category: "modifier" },
|
|
373
|
-
{
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
{ token: "
|
|
946
|
+
{ token: "collapsed", category: "modifier", chartTypes: "all" },
|
|
947
|
+
{ token: "as", category: "modifier", chartTypes: "all" },
|
|
948
|
+
{ token: "alias", category: "modifier", chartTypes: "all" },
|
|
949
|
+
{ token: "aka", category: "modifier", chartTypes: "all" },
|
|
950
|
+
{ token: "position", category: "modifier", chartTypes: "all" },
|
|
951
|
+
{ token: "default", category: "modifier", chartTypes: "all" },
|
|
952
|
+
{ token: "pk", category: "modifier", chartTypes: ["er"] },
|
|
953
|
+
{ token: "fk", category: "modifier", chartTypes: ["er"] },
|
|
954
|
+
{ token: "nullable", category: "modifier", chartTypes: ["er"] },
|
|
955
|
+
{ token: "unique", category: "modifier", chartTypes: ["er"] },
|
|
956
|
+
{ token: "int", category: "modifier", chartTypes: ["class", "er"] },
|
|
957
|
+
{ token: "varchar", category: "modifier", chartTypes: ["class", "er"] },
|
|
958
|
+
{
|
|
959
|
+
token: "text",
|
|
960
|
+
category: "modifier",
|
|
961
|
+
chartTypes: ["class", "er", "whiteboard"]
|
|
962
|
+
},
|
|
963
|
+
{ token: "boolean", category: "modifier", chartTypes: ["class", "er"] },
|
|
964
|
+
{ token: "date", category: "modifier", chartTypes: ["class", "er"] },
|
|
965
|
+
{ token: "timestamp", category: "modifier", chartTypes: ["class", "er"] },
|
|
966
|
+
{ token: "float", category: "modifier", chartTypes: ["class", "er"] },
|
|
967
|
+
{ token: "decimal", category: "modifier", chartTypes: ["class", "er"] },
|
|
379
968
|
// ── Bracket ──────────────────────────────────────────────
|
|
380
969
|
// `beats` / `vs` are the infix match keywords; the rest are line directives.
|
|
381
970
|
// (`seed` and `no-legend` already appear above — shared, not re-listed.)
|
|
382
|
-
{ token: "beats", category: "control" },
|
|
383
|
-
{ token: "vs", category: "control" },
|
|
384
|
-
{ token: "rounds", category: "directive" },
|
|
385
|
-
{ token: "accent", category: "directive" },
|
|
386
|
-
{ token: "no-round", category: "modifier" },
|
|
387
|
-
{ token: "no-rounds", category: "modifier" },
|
|
388
|
-
{ token: "single-elim", category: "modifier" },
|
|
389
|
-
{ token: "double-elim", category: "modifier" },
|
|
390
|
-
{ token: "seeded", category: "modifier" },
|
|
971
|
+
{ token: "beats", category: "control", chartTypes: ["bracket"] },
|
|
972
|
+
{ token: "vs", category: "control", chartTypes: ["bracket"] },
|
|
973
|
+
{ token: "rounds", category: "directive", chartTypes: ["bracket"] },
|
|
974
|
+
{ token: "accent", category: "directive", chartTypes: "all" },
|
|
975
|
+
{ token: "no-round", category: "modifier", chartTypes: ["bracket"] },
|
|
976
|
+
{ token: "no-rounds", category: "modifier", chartTypes: ["bracket"] },
|
|
977
|
+
{ token: "single-elim", category: "modifier", chartTypes: ["bracket"] },
|
|
978
|
+
{ token: "double-elim", category: "modifier", chartTypes: ["bracket"] },
|
|
979
|
+
{ token: "seeded", category: "modifier", chartTypes: ["bracket"] },
|
|
391
980
|
// ── Live link (§38) ──────────────────────────────────────
|
|
392
981
|
// The pointer type's one directive. Registered so it highlights and
|
|
393
982
|
// autocompletes like `palette` does — §38 justifies the shape by calling it
|
|
394
983
|
// "the ordinary DGMO directive shape", and an unregistered `url` would make
|
|
395
984
|
// that sentence false in the editor: `editor/tokens.ts` specializes only
|
|
396
985
|
// against the keyword registries, so it would render as plain identifier text.
|
|
397
|
-
{ token: "url", category: "directive" }
|
|
986
|
+
{ token: "url", category: "directive", chartTypes: ["live-link"] }
|
|
398
987
|
];
|
|
399
988
|
function tokensWhere(pred) {
|
|
400
989
|
const out = /* @__PURE__ */ new Set();
|
|
@@ -430,6 +1019,21 @@ var REGISTRY_STATUS_TOKENS = tokensWhere(
|
|
|
430
1019
|
var REGISTRY_MODIFIER_TOKENS = tokensWhere(
|
|
431
1020
|
(e) => e.category === "modifier" && !e.colonKey && !e.noHighlight
|
|
432
1021
|
);
|
|
1022
|
+
var REGISTRY_TOKEN_CHART_TYPES = (() => {
|
|
1023
|
+
const out = /* @__PURE__ */ new Map();
|
|
1024
|
+
for (const e of DIRECTIVES_REGISTRY) {
|
|
1025
|
+
const prev = out.get(e.token);
|
|
1026
|
+
if (prev === "all") continue;
|
|
1027
|
+
if (e.chartTypes === "all") {
|
|
1028
|
+
out.set(e.token, "all");
|
|
1029
|
+
continue;
|
|
1030
|
+
}
|
|
1031
|
+
const set = prev ?? /* @__PURE__ */ new Set();
|
|
1032
|
+
for (const t2 of e.chartTypes) set.add(t2);
|
|
1033
|
+
out.set(e.token, set);
|
|
1034
|
+
}
|
|
1035
|
+
return out;
|
|
1036
|
+
})();
|
|
433
1037
|
var REGISTRY_COLON_KEY_TOKENS = tokensWhere((e) => !!e.colonKey);
|
|
434
1038
|
var REGISTRY_NON_HIGHLIGHT_TOKENS = tokensWhere(
|
|
435
1039
|
(e) => !!e.noHighlight
|
|
@@ -517,6 +1121,10 @@ var chartTypesData = [
|
|
|
517
1121
|
id: "kanban",
|
|
518
1122
|
description: "Task board columns"
|
|
519
1123
|
},
|
|
1124
|
+
{
|
|
1125
|
+
id: "swot",
|
|
1126
|
+
description: "SWOT analysis: strengths, weaknesses, opportunities and threats in four fixed panels on helpful/harmful and internal/external axes"
|
|
1127
|
+
},
|
|
520
1128
|
{
|
|
521
1129
|
id: "raci",
|
|
522
1130
|
description: "Tasks \xD7 roles responsibility matrix with constraint linting"
|
|
@@ -718,8 +1326,66 @@ var STATUS_KEYWORDS = /* @__PURE__ */ new Set([...REGISTRY_STATUS_TOKENS]);
|
|
|
718
1326
|
var MODIFIER_KEYWORDS = /* @__PURE__ */ new Set([...REGISTRY_MODIFIER_TOKENS]);
|
|
719
1327
|
|
|
720
1328
|
// src/editor/tokens.ts
|
|
721
|
-
|
|
1329
|
+
var PENDING = 0;
|
|
1330
|
+
var UNKNOWN = -1;
|
|
1331
|
+
var CHART_TYPE_INDEX = new Map(
|
|
1332
|
+
CHART_TYPE_IDS.map((id, i) => [id, i + 1])
|
|
1333
|
+
);
|
|
1334
|
+
function readToken(input, length) {
|
|
1335
|
+
let s = "";
|
|
1336
|
+
for (let i = 0; i < length; i++) s += String.fromCharCode(input.peek(i));
|
|
1337
|
+
return s;
|
|
1338
|
+
}
|
|
1339
|
+
function decide(term, text) {
|
|
1340
|
+
if (term !== ChartType) return UNKNOWN;
|
|
1341
|
+
return CHART_TYPE_INDEX.get(text()) ?? UNKNOWN;
|
|
1342
|
+
}
|
|
1343
|
+
var chartTypeContext = new ContextTracker({
|
|
1344
|
+
start: PENDING,
|
|
1345
|
+
shift(context, term, stack, input) {
|
|
1346
|
+
if (context !== PENDING) return context;
|
|
1347
|
+
if (term >= stack.parser.nodeSet.types.length || term === Comment)
|
|
1348
|
+
return context;
|
|
1349
|
+
return decide(term, () => readToken(input, stack.pos - input.pos));
|
|
1350
|
+
},
|
|
1351
|
+
// A node reused from an earlier parse is not shifted token by token, so a
|
|
1352
|
+
// reused first line has to decide the context here, from its first leaf.
|
|
1353
|
+
// Not observed (2026-11-06, @lezer/lr 1.4.10: the first line sat in a
|
|
1354
|
+
// re-parsed buffer in every probe), but nothing in Lezer promises that.
|
|
1355
|
+
reuse(context, node, _stack, input) {
|
|
1356
|
+
if (context !== PENDING) return context;
|
|
1357
|
+
const cursor = node.cursor();
|
|
1358
|
+
for (; ; ) {
|
|
1359
|
+
if (cursor.firstChild()) continue;
|
|
1360
|
+
const { from, to } = cursor;
|
|
1361
|
+
const id = cursor.type.id;
|
|
1362
|
+
if (id !== Comment && to > from) {
|
|
1363
|
+
return decide(id, () => {
|
|
1364
|
+
let s = "";
|
|
1365
|
+
for (let i = from; i < to; i++)
|
|
1366
|
+
s += String.fromCharCode(input.peek(i));
|
|
1367
|
+
return s;
|
|
1368
|
+
});
|
|
1369
|
+
}
|
|
1370
|
+
if (!advance(cursor)) return context;
|
|
1371
|
+
}
|
|
1372
|
+
},
|
|
1373
|
+
hash: (context) => context
|
|
1374
|
+
});
|
|
1375
|
+
function advance(cursor) {
|
|
1376
|
+
while (!cursor.nextSibling()) if (!cursor.parent()) return false;
|
|
1377
|
+
return true;
|
|
1378
|
+
}
|
|
1379
|
+
function inScope(value, context) {
|
|
1380
|
+
if (context <= PENDING) return true;
|
|
1381
|
+
const scope = REGISTRY_TOKEN_CHART_TYPES.get(value);
|
|
1382
|
+
if (scope === void 0 || scope === "all") return true;
|
|
1383
|
+
return scope.has(CHART_TYPE_IDS[context - 1]);
|
|
1384
|
+
}
|
|
1385
|
+
function specializeKeyword(value, stack) {
|
|
722
1386
|
if (CHART_TYPES.has(value)) return ChartType;
|
|
1387
|
+
if (!inScope(value, stack?.context ?? UNKNOWN))
|
|
1388
|
+
return -1;
|
|
723
1389
|
if (value === TAG_KEYWORD) return TagKeyword;
|
|
724
1390
|
if (DIRECTIVE_KEYWORDS.has(value)) return DirectiveKeyword;
|
|
725
1391
|
if (CONTROL_KEYWORDS.has(value)) return ControlKeyword;
|
|
@@ -736,6 +1402,7 @@ var parser = LRParser.deserialize({
|
|
|
736
1402
|
goto: "!byPPPPPPPPzPPPPPPPPPPPPPPPPPPPPPPPPP!O!UPPPP!]TSOTQTORWTSROTRURVQORT",
|
|
737
1403
|
nodeNames: "\u26A0 ChartType TagKeyword DirectiveKeyword ControlKeyword ModifierKeyword Document Comment ContentLine SyncArrow AsyncArrow Duration DateLiteral Percentage Number SectionMarker Url OpenBracket CloseBracket OpenParen CloseParen OpenAngle CloseAngle Pipe Colon Comma Plus Dash Tilde Star Question QuotedString Identifier Punct",
|
|
738
1404
|
maxTerm: 40,
|
|
1405
|
+
context: chartTypeContext,
|
|
739
1406
|
skippedNodes: [0],
|
|
740
1407
|
repeatNodeCount: 2,
|
|
741
1408
|
tokenData: ">w~RzOX#uXY#zYZ$VZp#upq#zqr#urs$[st#uux#uxy%eyz%lz{%s{|%z|}&R}!O&Y!O!P#u!P!Q&i!Q!['Y![!]1|!]!^#u!^!_2T!_!`2[!`!a2i!a!b2p!b!c#u!c!}2w!}#O5}#O#P#u#P#Q6S#Q#R#u#R#S2w#S#T#u#T#[2w#[#]6Z#]#o2w#o#p#u#p#q>Z#q#r#u#r#s>b#s;'S#u;'S;=`>q<%lO#u~#zOq~~$PQv~XY#zpq#z~$[Ow~~$aUq~OY$sZr$srs%Ys;'S$s;'S;=`%_<%lO$s~$vUOY$sZr$srs%Ys;'S$s;'S;=`%_<%lO$s~%_Oo~~%bP;=`<%l$s~%lOc~q~~%sOd~q~~%zOm~q~~&ROj~q~~&YOi~q~~&aPk~q~!`!a&d~&iOX~~&nPq~!P!Q&q~&vSV~OY&qZ;'S&q;'S;=`'S<%lO&q~'VP;=`<%l&q~'a_^~q~uv(`|}(e}!O)b!O!P*l!P!Q,h!Q![-R#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~(eO]~~(hP!Q![(k~(nP!Q![(q~(tP!Q![(w~(|Q^~|}(e!O!P)S~)VP!Q![)Y~)_P^~!Q![)Y~)eP!Q![)h~)mQ[~}!O)s!Q![*d~)vP!Q![)y~)|P!Q![*P~*UP[~!Q![*X~*[P!Q![*_~*dO[~~*iP[~}!O)s~*oP!Q![*r~*wY^~uv(`!Q![*r#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~+jP#W#X+m~+rPZ~!a!b+u~+zOZ~~,PQZ~!a!b+u#]#^,V~,YP#b#c+m~,bQZ~!a!b+u#d#e+m~,kP!Q![,n~,sQ[~!P!Q)s!Q![,y~-OP[~!P!Q)s~-W_^~uv(`|}(e}!O)b!O!P*l!P!Q,h!Q![.V#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~.[]^~uv(`|}(e!O!P*l!Q![/T#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~/Y]^~uv(`}!O0R!O!P*l!Q![0m#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~0UP!Q![0X~0[P!Q![0_~0dP[~}!O0g~0jP!Q![*X~0r[^~uv(`!O!P*l!Q![0m#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~1kP!Q![1n~1sR^~!O!P)S!Q![1n#R#S1h~2TOh~q~~2[Oe~q~~2aPq~!_!`2d~2iO_~~2pOf~q~~2wOn~q~~3O_p~q~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#o3}~4S_p~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#o3}~5U]qr3}st3}vw3}wx3}{|3}!O!P3}!P!Q3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#o3}~6SOa~~6ZOb~q~~6bap~q~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#h3}#h#i7g#i#o3}~7lap~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#h3}#h#i8q#i#o3}~8vap~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#d3}#d#e9{#e#o3}~:Qbp~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}![!];Y!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#g3}#g#h=S#h#o3}~;]P!P!Q;`~;cP!P!Q;f~;iYOX<XZp<Xqy<Xz|<X}!`<X!a#P<X#Q#p<X#q;'S<X;'S;=`<|<%lO<X~<^Y`~OX<XZp<Xqy<Xz|<X}!`<X!a#P<X#Q#p<X#q;'S<X;'S;=`<|<%lO<X~=PP;=`<%l<X~=X`p~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}![!];Y!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#o3}~>bOg~q~~>iPl~q~!`!a>l~>qOY~~>tP;=`<%l#u",
|