@miliastry/quasar 1.0.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/dist/Visuals/lyne.css +117 -6
  2. package/dist/Visuals/osu.css +36 -5
  3. package/dist/index.js +9664 -3282
  4. package/dist/index.mjs +9535 -3283
  5. package/dist/types/Analysis/Contracts/AnalysisReport.d.ts +22 -0
  6. package/dist/types/Analysis/Contracts/Contribution.d.ts +68 -0
  7. package/dist/types/Analysis/Contracts/Pass.d.ts +59 -0
  8. package/dist/types/Analysis/Contracts/PipelineContext.d.ts +34 -0
  9. package/dist/types/Analysis/Passes/Analysis/ColorUsageAnalyzer.d.ts +56 -0
  10. package/dist/types/Analysis/Passes/Analysis/GradientAnalyzer.d.ts +111 -0
  11. package/dist/types/Analysis/Passes/Analysis/MergeableColorAnalyzer.d.ts +26 -0
  12. package/dist/types/Analysis/Passes/Analysis/RainbowAnalyzer.d.ts +47 -0
  13. package/dist/types/Analysis/Passes/Analysis/SymbolAnalyzer.d.ts +89 -0
  14. package/dist/types/Analysis/Passes/Analysis/WaveAnalyzer.d.ts +44 -0
  15. package/dist/types/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.d.ts +4 -0
  16. package/dist/types/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.d.ts +4 -0
  17. package/dist/types/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.d.ts +4 -0
  18. package/dist/types/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.d.ts +4 -0
  19. package/dist/types/Analysis/Passes/Decision/DefaultDecision.d.ts +30 -0
  20. package/dist/types/Analysis/Passes/Decision/PaletteRemapDecision.d.ts +169 -0
  21. package/dist/types/Analysis/Passes/Decision/__tests__/DefaultDecision.test.d.ts +4 -0
  22. package/dist/types/Analysis/Passes/Transform/CollapseGradientTransform.d.ts +37 -0
  23. package/dist/types/Analysis/Passes/Transform/MergeColorsTransform.d.ts +28 -0
  24. package/dist/types/Analysis/Passes/Transform/RainbowCollapseTransform.d.ts +19 -0
  25. package/dist/types/Analysis/Passes/Transform/WaveCollapseTransform.d.ts +20 -0
  26. package/dist/types/Analysis/Passes/Utility/CharacterCountAnalyzer.d.ts +19 -0
  27. package/dist/types/Analysis/Pipeline/Pipeline.d.ts +69 -0
  28. package/dist/types/Analysis/Pipeline/PipelineBuilder.d.ts +31 -0
  29. package/dist/types/Analysis/Pipeline/PipelineStage.d.ts +17 -0
  30. package/dist/types/Analysis/Utils/color-utils.d.ts +60 -0
  31. package/dist/types/Analysis/__tests__/Integration.test.d.ts +8 -0
  32. package/dist/types/Analysis/__tests__/PaletteRemap.test.d.ts +14 -0
  33. package/dist/types/Analysis/__tests__/Pipeline.test.d.ts +10 -0
  34. package/dist/types/Analysis/__tests__/RoundTrip.test.d.ts +30 -0
  35. package/dist/types/Analysis/__tests__/SymbolAnalyzer.test.d.ts +11 -0
  36. package/dist/types/Analysis/index.d.ts +40 -0
  37. package/dist/types/BBCode/BBCodeDocumentModel.d.ts +92 -0
  38. package/dist/types/BBCode/BBCodeToGreenNode.d.ts +111 -0
  39. package/dist/types/BBCode/Parser.d.ts +78 -0
  40. package/dist/types/BBCode/index.d.ts +4 -0
  41. package/dist/types/Collab/positions.d.ts +55 -0
  42. package/dist/types/Commands/Command.d.ts +37 -0
  43. package/dist/types/Commands/CommandRegistry.d.ts +48 -0
  44. package/dist/types/Commands/DeleteNode.d.ts +7 -0
  45. package/dist/types/Commands/InsertText.d.ts +8 -0
  46. package/dist/types/Commands/SplitMerge.d.ts +9 -0
  47. package/dist/types/Commands/WrapInTag.d.ts +8 -0
  48. package/dist/types/Commands/index.d.ts +6 -0
  49. package/dist/types/Diff/TreeDiffer.d.ts +52 -0
  50. package/dist/types/Diff/__tests__/TreeDiffer.test.d.ts +1 -0
  51. package/dist/types/Diff/index.d.ts +2 -0
  52. package/dist/types/Edits/EditPlan.d.ts +144 -0
  53. package/dist/types/Edits/Optimizer.d.ts +78 -0
  54. package/dist/types/Edits/Rules/Rule.d.ts +91 -0
  55. package/dist/types/Edits/Rules/dropEmptyTags.d.ts +40 -0
  56. package/dist/types/Edits/Rules/dropRedundantNesting.d.ts +59 -0
  57. package/dist/types/Edits/Rules/index.d.ts +9 -0
  58. package/dist/types/Edits/Rules/mergeAdjacent.d.ts +93 -0
  59. package/dist/types/Edits/Rules/reorderWrappers.d.ts +42 -0
  60. package/dist/types/Edits/Rules/shortenHex.d.ts +30 -0
  61. package/dist/types/Edits/Rules/tagValue.d.ts +56 -0
  62. package/dist/types/Edits/Rules/unwrapInvisibleColor.d.ts +47 -0
  63. package/dist/types/Edits/applyEdits.d.ts +36 -0
  64. package/dist/types/Edits/index.d.ts +6 -0
  65. package/dist/types/Events/EventBus.d.ts +103 -0
  66. package/dist/types/Events/index.d.ts +2 -0
  67. package/dist/types/Formatter/Formatter.d.ts +32 -0
  68. package/dist/types/Formatter/index.d.ts +2 -0
  69. package/dist/types/HTML/HTMLDocumentModel.d.ts +13 -0
  70. package/dist/types/HTML/HTMLToGreenNode.d.ts +4 -0
  71. package/dist/types/Incremental/BracketIndex.d.ts +101 -0
  72. package/dist/types/Incremental/ChangeTracker.d.ts +69 -0
  73. package/dist/types/Incremental/IncrementalParser.d.ts +246 -0
  74. package/dist/types/Incremental/__tests__/BracketIndex.test.d.ts +1 -0
  75. package/dist/types/Incremental/__tests__/IncrementalParser.test.d.ts +1 -0
  76. package/dist/types/Incremental/index.d.ts +4 -0
  77. package/dist/types/Lexer/BBCodeLexer.d.ts +74 -0
  78. package/dist/types/Lexer/Lexer.d.ts +54 -0
  79. package/dist/types/Lexer/index.d.ts +4 -0
  80. package/dist/types/Linter/Linter.d.ts +58 -0
  81. package/dist/types/Linter/index.d.ts +2 -0
  82. package/dist/types/Markdown/MarkdownAST.d.ts +122 -0
  83. package/dist/types/Markdown/MarkdownDocumentModel.d.ts +15 -0
  84. package/dist/types/Markdown/MarkdownLexer.d.ts +155 -0
  85. package/dist/types/Markdown/MarkdownParser.d.ts +42 -0
  86. package/dist/types/Markdown/MarkdownToGreenNode.d.ts +6 -0
  87. package/dist/types/MilHibri/MilHibriDocumentModel.d.ts +21 -0
  88. package/dist/types/Model/DocumentModel.d.ts +318 -0
  89. package/dist/types/Model/NodeFactory.d.ts +29 -0
  90. package/dist/types/Model/TagRegistry.d.ts +165 -0
  91. package/dist/types/Model/index.d.ts +5 -0
  92. package/dist/types/Plugins/PluginAPI.d.ts +44 -0
  93. package/dist/types/Plugins/PluginRegistry.d.ts +81 -0
  94. package/dist/types/Plugins/index.d.ts +3 -0
  95. package/dist/types/Queries/QueryEngine.d.ts +32 -0
  96. package/dist/types/Queries/index.d.ts +1 -0
  97. package/dist/types/Reconciler/SurgicalReconciler.d.ts +23 -0
  98. package/dist/types/RenderPipeline/RenderPipeline.d.ts +46 -0
  99. package/dist/types/RenderPipeline/RenderTree.d.ts +55 -0
  100. package/dist/types/RenderPipeline/index.d.ts +4 -0
  101. package/dist/types/Repair/NestingRepair.d.ts +48 -0
  102. package/dist/types/Repair/index.d.ts +1 -0
  103. package/dist/types/Semantic/SemanticAnalyzer.d.ts +321 -0
  104. package/dist/types/Semantic/index.d.ts +2 -0
  105. package/dist/types/Symbols/SymbolTable.d.ts +47 -0
  106. package/dist/types/Symbols/index.d.ts +1 -0
  107. package/dist/types/Syntax/GreenNode.d.ts +154 -0
  108. package/dist/types/Syntax/GreenNodePool.d.ts +134 -0
  109. package/dist/types/Syntax/NodeMatcher.d.ts +75 -0
  110. package/dist/types/Syntax/RedNode.d.ts +280 -0
  111. package/dist/types/Syntax/RedNodeStore.d.ts +116 -0
  112. package/dist/types/Syntax/TreeBuilder.d.ts +54 -0
  113. package/dist/types/Syntax/__tests__/GreenNode.test.d.ts +1 -0
  114. package/dist/types/Syntax/__tests__/RedNode.test.d.ts +1 -0
  115. package/dist/types/Syntax/__tests__/RedNodeStore.test.d.ts +1 -0
  116. package/dist/types/Syntax/greenEdit.d.ts +64 -0
  117. package/dist/types/Syntax/hash.d.ts +17 -0
  118. package/dist/types/Syntax/index.d.ts +8 -0
  119. package/dist/types/Syntax/nodeAttr.d.ts +63 -0
  120. package/dist/types/Syntax/partition.d.ts +67 -0
  121. package/dist/types/Syntax/preserveNodeIds.d.ts +47 -0
  122. package/dist/types/Tokens/TokenResolver.d.ts +25 -0
  123. package/dist/types/Tokens/index.d.ts +1 -0
  124. package/dist/types/Transactions/Transaction.d.ts +36 -0
  125. package/dist/types/Transactions/UndoManager.d.ts +63 -0
  126. package/dist/types/Transactions/index.d.ts +3 -0
  127. package/dist/types/Transformers/ASTOptimizer.d.ts +34 -0
  128. package/dist/types/Transformers/GradientTransformer.d.ts +18 -0
  129. package/dist/types/Transformers/GrowTransformer.d.ts +16 -0
  130. package/dist/types/Transformers/RainbowTransformer.d.ts +17 -0
  131. package/dist/types/Transformers/SineWaveTransformer.d.ts +17 -0
  132. package/dist/types/Transformers/Transformer.d.ts +17 -0
  133. package/dist/types/Types/core.d.ts +104 -0
  134. package/dist/types/Types/diagnostics.d.ts +85 -0
  135. package/dist/types/Types/index.d.ts +11 -0
  136. package/dist/types/Types/operations.d.ts +109 -0
  137. package/dist/types/Types/queries.d.ts +67 -0
  138. package/dist/types/Types/symbols.d.ts +42 -0
  139. package/dist/types/Types/tokens.d.ts +75 -0
  140. package/dist/types/Utils/BBCodeGenerator.d.ts +21 -0
  141. package/dist/types/Utils/ColorMath.d.ts +92 -0
  142. package/dist/types/Utils/EffectMath.d.ts +643 -0
  143. package/dist/types/Utils/TagVocabulary.d.ts +104 -0
  144. package/dist/types/Utils/TagVocabulary.test.d.ts +1 -0
  145. package/dist/types/Utils/color.d.ts +29 -0
  146. package/dist/types/Utils/dom-to-svg.d.ts +28 -0
  147. package/dist/types/Utils/dom-to-svg.test.d.ts +1 -0
  148. package/dist/types/Utils/treeTransformers.d.ts +160 -0
  149. package/dist/types/Visitors/BBBlocksExporter.d.ts +27 -0
  150. package/dist/types/Visitors/BBCodeExporter.d.ts +90 -0
  151. package/dist/types/Visitors/BlockPatcher.d.ts +91 -0
  152. package/dist/types/Visitors/DOMMorpher.d.ts +13 -0
  153. package/dist/types/Visitors/HTMLRenderer.d.ts +380 -0
  154. package/dist/types/Visitors/JSONExporter.d.ts +42 -0
  155. package/dist/types/Visitors/MarkdownExporter.d.ts +28 -0
  156. package/dist/types/Visitors/SVGRenderer.d.ts +16 -0
  157. package/dist/types/Visitors/TiptapExporter.d.ts +40 -0
  158. package/dist/types/Visitors/Visitor.d.ts +35 -0
  159. package/dist/types/Visitors/index.d.ts +9 -0
  160. package/dist/types/Visuals/BoxDrawer.d.ts +49 -0
  161. package/dist/types/Visuals/index.d.ts +38 -0
  162. package/dist/types/index.d.ts +154 -0
  163. package/package.json +14 -10
  164. package/src/Analysis/Passes/Analysis/ColorUsageAnalyzer.ts +103 -0
  165. package/src/Analysis/Passes/Analysis/GradientAnalyzer.ts +294 -20
  166. package/src/Analysis/Passes/Analysis/SymbolAnalyzer.ts +257 -0
  167. package/src/Analysis/Passes/Decision/PaletteRemapDecision.ts +425 -0
  168. package/src/Analysis/Pipeline/Pipeline.ts +15 -2
  169. package/src/Analysis/index.ts +8 -2
  170. package/src/BBCode/BBCodeDocumentModel.ts +3 -0
  171. package/src/BBCode/BBCodeToGreenNode.ts +18 -12
  172. package/src/BBCode/Parser.ts +38 -1
  173. package/src/Edits/EditPlan.ts +290 -0
  174. package/src/Edits/Optimizer.ts +185 -0
  175. package/src/Edits/Rules/Rule.ts +145 -0
  176. package/src/Edits/Rules/dropEmptyTags.ts +110 -0
  177. package/src/Edits/Rules/dropRedundantNesting.ts +120 -0
  178. package/src/Edits/Rules/index.ts +28 -0
  179. package/src/Edits/Rules/mergeAdjacent.ts +224 -0
  180. package/src/Edits/Rules/reorderWrappers.ts +154 -0
  181. package/src/Edits/Rules/shortenHex.ts +79 -0
  182. package/src/Edits/Rules/tagValue.ts +105 -0
  183. package/src/Edits/Rules/unwrapInvisibleColor.ts +93 -0
  184. package/src/Edits/applyEdits.ts +54 -0
  185. package/src/Edits/index.ts +22 -0
  186. package/src/Events/EventBus.ts +18 -0
  187. package/src/HTML/HTMLToGreenNode.ts +185 -37
  188. package/src/Incremental/BracketIndex.ts +249 -0
  189. package/src/Incremental/IncrementalParser.ts +464 -41
  190. package/src/Lexer/BBCodeLexer.ts +25 -3
  191. package/src/Lexer/index.ts +1 -1
  192. package/src/Markdown/MarkdownAST.ts +65 -2
  193. package/src/Markdown/MarkdownLexer.ts +69 -14
  194. package/src/Markdown/MarkdownParser.ts +749 -62
  195. package/src/Markdown/MarkdownToGreenNode.ts +148 -27
  196. package/src/MilHibri/MilHibriDocumentModel.ts +56 -0
  197. package/src/Model/DocumentModel.ts +138 -5
  198. package/src/Model/TagRegistry.ts +129 -134
  199. package/src/Reconciler/SurgicalReconciler.ts +460 -0
  200. package/src/Repair/NestingRepair.ts +116 -0
  201. package/src/Repair/index.ts +1 -0
  202. package/src/Semantic/SemanticAnalyzer.ts +1802 -65
  203. package/src/Syntax/GreenNodePool.ts +12 -12
  204. package/src/Syntax/RedNode.ts +17 -3
  205. package/src/Syntax/RedNodeStore.ts +9 -1
  206. package/src/Syntax/nodeAttr.ts +172 -0
  207. package/src/Tokens/TokenResolver.ts +55 -0
  208. package/src/Tokens/index.ts +1 -0
  209. package/src/Types/core.ts +15 -0
  210. package/src/Utils/ColorMath.ts +276 -55
  211. package/src/Utils/EffectMath.ts +2462 -0
  212. package/src/Utils/TagVocabulary.ts +141 -0
  213. package/src/Utils/dom-to-svg.ts +28 -12
  214. package/src/Visitors/BBBlocksExporter.ts +15 -1
  215. package/src/Visitors/BBCodeExporter.ts +319 -32
  216. package/src/Visitors/BlockPatcher.ts +87 -11
  217. package/src/Visitors/DOMMorpher.ts +15 -5
  218. package/src/Visitors/HTMLRenderer.ts +374 -151
  219. package/src/Visitors/MarkdownExporter.ts +98 -41
  220. package/src/Visitors/TiptapExporter.ts +1 -0
  221. package/src/Visuals/index.ts +7 -4
  222. package/src/Visuals/lyne.css +117 -6
  223. package/src/Visuals/osu.css +36 -5
  224. package/src/index.ts +172 -5
  225. package/dist/index.d.mts +0 -4612
  226. package/dist/index.d.ts +0 -4612
  227. package/src/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.ts +0 -135
  228. package/src/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.ts +0 -84
  229. package/src/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.ts +0 -99
  230. package/src/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.ts +0 -119
  231. package/src/Analysis/Passes/Decision/__tests__/DefaultDecision.test.ts +0 -179
  232. package/src/Analysis/__tests__/Integration.test.ts +0 -162
  233. package/src/Analysis/__tests__/Pipeline.test.ts +0 -133
  234. package/src/Diff/__tests__/TreeDiffer.test.ts +0 -65
  235. package/src/Incremental/__tests__/IncrementalParser.test.ts +0 -164
  236. package/src/Syntax/__tests__/GreenNode.test.ts +0 -33
  237. package/src/Syntax/__tests__/RedNode.test.ts +0 -81
  238. package/src/Syntax/__tests__/RedNodeStore.test.ts +0 -104
  239. package/src/Tests/ASTOptimizerIdempotence.test.ts +0 -77
  240. package/src/Tests/BlockPatcher.test.ts +0 -437
  241. package/src/Tests/BlockPatcherWindowed.test.ts +0 -364
  242. package/src/Tests/BoxDrawer.test.ts +0 -217
  243. package/src/Tests/BoxRichTitle.test.ts +0 -105
  244. package/src/Tests/Chars500kBenchmark.test.ts +0 -151
  245. package/src/Tests/Chars500kEdits.test.ts +0 -321
  246. package/src/Tests/CollabPositions.test.ts +0 -146
  247. package/src/Tests/CompilerPathProfiling.test.ts +0 -186
  248. package/src/Tests/DOMMorpher.test.ts +0 -142
  249. package/src/Tests/DomPatchPerf.test.ts +0 -60
  250. package/src/Tests/EffectSegments.snapshot.json +0 -616
  251. package/src/Tests/EffectSegments.test.ts +0 -68
  252. package/src/Tests/FindNodeAtOffset.test.ts +0 -65
  253. package/src/Tests/Fuzzer.test.ts +0 -166
  254. package/src/Tests/GreenNodePool.test.ts +0 -153
  255. package/src/Tests/Lexer.test.ts +0 -238
  256. package/src/Tests/LyneMode.test.ts +0 -291
  257. package/src/Tests/ModelCoherence.test.ts +0 -180
  258. package/src/Tests/Partition.test.ts +0 -238
  259. package/src/Tests/PluginTags.test.ts +0 -150
  260. package/src/Tests/ProblematicSection.test.ts +0 -46
  261. package/src/Tests/ProblematicSectionHTML.test.ts +0 -58
  262. package/src/Tests/RedReuse.test.ts +0 -134
  263. package/src/Tests/ReproDelete20k.test.ts +0 -62
  264. package/src/Tests/SemanticValidators.test.ts +0 -136
  265. package/src/Tests/StableNodeIds.test.ts +0 -210
  266. package/src/Tests/StudioColorBloat.test.ts +0 -25
  267. package/src/Tests/StudioDebugText.test.ts +0 -27
  268. package/src/Tests/StudioTrailingChar.test.ts +0 -25
  269. package/src/Tests/StudioValidText.test.ts +0 -25
  270. package/src/Tests/UrlImgBug.test.ts +0 -23
  271. package/src/Tests/VisualBuilderFidelity.test.ts +0 -105
  272. package/src/Tests/referenceDocument.ts +0 -119
  273. package/src/Utils/dom-to-svg.test.ts +0 -86
@@ -11,6 +11,14 @@ export type MarkdownNode =
11
11
  | MarkdownCodeInline
12
12
  | MarkdownStrong
13
13
  | MarkdownEmphasis
14
+ | MarkdownStrikethrough
15
+ | MarkdownUnderline
16
+ | MarkdownColor
17
+ | MarkdownFontSize
18
+ | MarkdownFont
19
+ | MarkdownAlign
20
+ | MarkdownBox
21
+ | MarkdownSeparator
14
22
  | MarkdownLink
15
23
  | MarkdownImage
16
24
  | MarkdownList
@@ -19,7 +27,15 @@ export type MarkdownNode =
19
27
  | MarkdownSpoiler
20
28
  | MarkdownNotice
21
29
  | MarkdownSpacing
22
- | MarkdownEmptyLine;
30
+ | MarkdownEmptyLine
31
+ | MarkdownGenericBBNode;
32
+
33
+ export interface MarkdownGenericBBNode {
34
+ type: 'bbcode_tag';
35
+ tagName: string;
36
+ attrValue?: string;
37
+ children: MarkdownNode[];
38
+ }
23
39
 
24
40
  export interface MarkdownDocument {
25
41
  type: 'document';
@@ -88,6 +104,7 @@ export interface MarkdownListItem {
88
104
 
89
105
  export interface MarkdownBlockquote {
90
106
  type: 'blockquote';
107
+ source?: string;
91
108
  children: MarkdownNode[];
92
109
  }
93
110
 
@@ -99,7 +116,8 @@ export interface MarkdownSpoiler {
99
116
 
100
117
  /** `> [!NOTE]` callout — produced by MarkdownParser, maps to BBCode [notice]. */
101
118
  export interface MarkdownNotice {
102
- type: 'notice';
119
+ type: 'notice' | 'wnotice';
120
+ color?: string;
103
121
  children: MarkdownNode[];
104
122
  }
105
123
 
@@ -110,3 +128,48 @@ export interface MarkdownSpacing {
110
128
  export interface MarkdownEmptyLine {
111
129
  type: 'empty_line';
112
130
  }
131
+
132
+ export interface MarkdownStrikethrough {
133
+ type: 'strikethrough';
134
+ children: MarkdownNode[];
135
+ }
136
+
137
+ export interface MarkdownUnderline {
138
+ type: 'underline';
139
+ children: MarkdownNode[];
140
+ }
141
+
142
+ export interface MarkdownColor {
143
+ type: 'color';
144
+ color: string;
145
+ children: MarkdownNode[];
146
+ }
147
+
148
+ export interface MarkdownFontSize {
149
+ type: 'font_size';
150
+ size: string;
151
+ children: MarkdownNode[];
152
+ }
153
+
154
+ export interface MarkdownFont {
155
+ type: 'font';
156
+ font: string;
157
+ children: MarkdownNode[];
158
+ }
159
+
160
+ export interface MarkdownAlign {
161
+ type: 'align' | 'center' | 'right' | 'left';
162
+ children: MarkdownNode[];
163
+ }
164
+
165
+ export interface MarkdownBox {
166
+ type: 'box' | 'spoilerbox';
167
+ title?: string;
168
+ rawTitle?: string;
169
+ color?: string;
170
+ children: MarkdownNode[];
171
+ }
172
+
173
+ export interface MarkdownSeparator {
174
+ type: 'separator';
175
+ }
@@ -14,12 +14,17 @@ export interface MarkdownTildeToken { kind: 'tilde'; value: string; start: numbe
14
14
  export interface MarkdownBacktickToken { kind: 'backtick'; value: string; start: number; end: number }
15
15
  export interface MarkdownBracketOpenToken { kind: 'bracket_open'; start: number; end: number }
16
16
  export interface MarkdownBracketCloseToken { kind: 'bracket_close'; start: number; end: number }
17
+ export interface MarkdownBraceOpenToken { kind: 'brace_open'; start: number; end: number }
18
+ export interface MarkdownBraceCloseToken { kind: 'brace_close'; start: number; end: number }
17
19
  export interface MarkdownParenOpenToken { kind: 'paren_open'; start: number; end: number }
18
20
  export interface MarkdownParenCloseToken { kind: 'paren_close'; start: number; end: number }
19
21
  export interface MarkdownBangToken { kind: 'bang'; start: number; end: number }
20
22
  export interface MarkdownDashToken { kind: 'dash'; value: string; start: number; end: number }
21
- export interface MarkdownPlusToken { kind: 'plus'; start: number; end: number }
23
+ export interface MarkdownPlusToken { kind: 'plus'; value: string; start: number; end: number }
22
24
  export interface MarkdownDotToken { kind: 'dot'; start: number; end: number }
25
+ export interface MarkdownColonToken { kind: 'colon'; value: string; start: number; end: number }
26
+ export interface MarkdownContainerToken { kind: 'container'; value: string; info: string; start: number; end: number }
27
+ export interface MarkdownArrowToken { kind: 'arrow_right' | 'arrow_left'; value: string; start: number; end: number }
23
28
  export interface MarkdownTextToken { kind: 'text'; value: string; start: number; end: number }
24
29
  export interface MarkdownNewlineToken { kind: 'newline'; value: string; start: number; end: number }
25
30
  export interface MarkdownFenceToken { kind: 'fence'; value: string; lang: string; start: number; end: number }
@@ -31,9 +36,11 @@ export type MarkdownToken =
31
36
  | MarkdownHashToken | MarkdownGtToken | MarkdownStarToken
32
37
  | MarkdownUnderscoreToken | MarkdownTildeToken | MarkdownBacktickToken
33
38
  | MarkdownBracketOpenToken | MarkdownBracketCloseToken
39
+ | MarkdownBraceOpenToken | MarkdownBraceCloseToken
34
40
  | MarkdownParenOpenToken | MarkdownParenCloseToken
35
41
  | MarkdownBangToken | MarkdownDashToken | MarkdownPlusToken
36
- | MarkdownDotToken | MarkdownTextToken | MarkdownNewlineToken
42
+ | MarkdownDotToken | MarkdownColonToken | MarkdownContainerToken
43
+ | MarkdownArrowToken | MarkdownTextToken | MarkdownNewlineToken
37
44
  | MarkdownFenceToken | MarkdownHrToken | MarkdownEscapeToken
38
45
  | MarkdownAngleToken;
39
46
 
@@ -41,20 +48,24 @@ function pushToken(tokens: MarkdownToken[], kind: MarkdownToken['kind'], start:
41
48
  switch (kind) {
42
49
  case 'hash': tokens.push({ kind, value: extra?.value ?? '', start, end }); break;
43
50
  case 'gt': case 'bracket_open': case 'bracket_close':
51
+ case 'brace_open': case 'brace_close':
44
52
  case 'paren_open': case 'paren_close': case 'bang':
45
- case 'plus': case 'dot': case 'hr':
53
+ case 'dot': case 'hr':
46
54
  tokens.push({ kind, start, end } as MarkdownToken); break;
47
55
  case 'star': case 'underscore': case 'tilde':
48
- case 'backtick': case 'dash': case 'text':
49
- case 'newline': case 'escape': case 'angle':
56
+ case 'backtick': case 'dash': case 'plus':
57
+ case 'colon': case 'arrow_right': case 'arrow_left':
58
+ case 'text': case 'newline': case 'escape': case 'angle':
50
59
  tokens.push({ kind, value: extra?.value ?? '', start, end } as MarkdownToken); break;
60
+ case 'container':
61
+ tokens.push({ kind, value: extra?.value ?? ':::', info: extra?.info ?? '', start, end }); break;
51
62
  case 'fence':
52
63
  tokens.push({ kind, value: extra?.value ?? '', lang: extra?.lang ?? '', start, end }); break;
53
64
  }
54
65
  }
55
66
 
56
67
  function isMarkdownSpecial(ch: string): boolean {
57
- return '\\`*_{}[]()#+-.!|~\'"<>'.includes(ch) || ch === '\n' || ch === '\r';
68
+ return '\\`*_{}[]()#+-.!|~\'":<>'.includes(ch) || ch === '\n' || ch === '\r';
58
69
  }
59
70
 
60
71
  /**
@@ -160,22 +171,57 @@ export function scanMarkdown(source: string): MarkdownToken[] {
160
171
  continue;
161
172
  }
162
173
 
163
- // Dash (-, --, ---)
164
- if (ch === '-') {
174
+ // Braces
175
+ if (ch === '{') { i++; pushToken(tokens, 'brace_open', start, i); continue; }
176
+ if (ch === '}') { i++; pushToken(tokens, 'brace_close', start, i); continue; }
177
+
178
+ // Arrow Right (->)
179
+ if (ch === '-' && i + 1 < source.length && source[i + 1] === '>') {
180
+ i += 2;
181
+ pushToken(tokens, 'arrow_right', start, i, { value: '->' });
182
+ continue;
183
+ }
184
+
185
+ // Arrow Left (<-)
186
+ if (ch === '<' && i + 1 < source.length && source[i + 1] === '-') {
187
+ i += 2;
188
+ pushToken(tokens, 'arrow_left', start, i, { value: '<-' });
189
+ continue;
190
+ }
191
+
192
+ // Container (:::) or Colon (:)
193
+ if (ch === ':') {
165
194
  let count = 1;
166
195
  i++;
167
- while (i < source.length && source[i] === '-' && count < 3) { count++; i++; }
168
- // Hr if --- and alone on line (simplified, normally requires parser validation)
196
+ while (i < source.length && source[i] === ':' && count < 3) { count++; i++; }
169
197
  if (count === 3) {
170
- pushToken(tokens, 'dash', start, i, { value: source.slice(start, i) });
198
+ const infoStart = i;
199
+ while (i < source.length && source[i] !== '\n' && source[i] !== '\r') i++;
200
+ const info = source.slice(infoStart, i).trim();
201
+ pushToken(tokens, 'container', start, i, { value: ':::', info });
171
202
  } else {
172
- pushToken(tokens, 'dash', start, i, { value: source.slice(start, i) });
203
+ pushToken(tokens, 'colon', start, i, { value: source.slice(start, i) });
173
204
  }
174
205
  continue;
175
206
  }
176
207
 
177
- // Plus
178
- if (ch === '+') { i++; pushToken(tokens, 'plus', start, i); continue; }
208
+ // Dash (-, --, ---)
209
+ if (ch === '-') {
210
+ let count = 1;
211
+ i++;
212
+ while (i < source.length && source[i] === '-' && count < 3) { count++; i++; }
213
+ pushToken(tokens, 'dash', start, i, { value: source.slice(start, i) });
214
+ continue;
215
+ }
216
+
217
+ // Plus (+, ++)
218
+ if (ch === '+') {
219
+ let count = 1;
220
+ i++;
221
+ while (i < source.length && source[i] === '+' && count < 2) { count++; i++; }
222
+ pushToken(tokens, 'plus', start, i, { value: source.slice(start, i) });
223
+ continue;
224
+ }
179
225
 
180
226
  // Dot
181
227
  if (ch === '.') { i++; pushToken(tokens, 'dot', start, i); continue; }
@@ -187,6 +233,15 @@ export function scanMarkdown(source: string): MarkdownToken[] {
187
233
  continue;
188
234
  }
189
235
 
236
+ // Pipe (| or || for spoilers)
237
+ if (ch === '|') {
238
+ let count = 1;
239
+ i++;
240
+ while (i < source.length && source[i] === '|' && count < 2) { count++; i++; }
241
+ pushToken(tokens, 'text', start, i, { value: source.slice(start, i) });
242
+ continue;
243
+ }
244
+
190
245
  // Default: accumulate text
191
246
  const textStart = i;
192
247
  while (i < source.length && !isMarkdownSpecial(source[i])) i++;