@miliastry/quasar 1.0.6 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +1 -1
  2. package/dist/Visuals/lyne.css +374 -9
  3. package/dist/Visuals/osu.css +393 -11
  4. package/dist/index.js +10470 -3336
  5. package/dist/index.mjs +10336 -3337
  6. package/dist/types/Analysis/Contracts/AnalysisReport.d.ts +22 -0
  7. package/dist/types/Analysis/Contracts/Contribution.d.ts +68 -0
  8. package/dist/types/Analysis/Contracts/Pass.d.ts +59 -0
  9. package/dist/types/Analysis/Contracts/PipelineContext.d.ts +34 -0
  10. package/dist/types/Analysis/Passes/Analysis/ColorUsageAnalyzer.d.ts +56 -0
  11. package/dist/types/Analysis/Passes/Analysis/GradientAnalyzer.d.ts +111 -0
  12. package/dist/types/Analysis/Passes/Analysis/MergeableColorAnalyzer.d.ts +26 -0
  13. package/dist/types/Analysis/Passes/Analysis/RainbowAnalyzer.d.ts +47 -0
  14. package/dist/types/Analysis/Passes/Analysis/SymbolAnalyzer.d.ts +89 -0
  15. package/dist/types/Analysis/Passes/Analysis/WaveAnalyzer.d.ts +44 -0
  16. package/dist/types/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.d.ts +4 -0
  17. package/dist/types/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.d.ts +4 -0
  18. package/dist/types/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.d.ts +4 -0
  19. package/dist/types/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.d.ts +4 -0
  20. package/dist/types/Analysis/Passes/Decision/DefaultDecision.d.ts +30 -0
  21. package/dist/types/Analysis/Passes/Decision/PaletteRemapDecision.d.ts +169 -0
  22. package/dist/types/Analysis/Passes/Decision/__tests__/DefaultDecision.test.d.ts +4 -0
  23. package/dist/types/Analysis/Passes/Transform/CollapseGradientTransform.d.ts +37 -0
  24. package/dist/types/Analysis/Passes/Transform/MergeColorsTransform.d.ts +28 -0
  25. package/dist/types/Analysis/Passes/Transform/RainbowCollapseTransform.d.ts +19 -0
  26. package/dist/types/Analysis/Passes/Transform/WaveCollapseTransform.d.ts +20 -0
  27. package/dist/types/Analysis/Passes/Utility/CharacterCountAnalyzer.d.ts +19 -0
  28. package/dist/types/Analysis/Pipeline/Pipeline.d.ts +69 -0
  29. package/dist/types/Analysis/Pipeline/PipelineBuilder.d.ts +31 -0
  30. package/dist/types/Analysis/Pipeline/PipelineStage.d.ts +17 -0
  31. package/dist/types/Analysis/Utils/color-utils.d.ts +60 -0
  32. package/dist/types/Analysis/__tests__/Integration.test.d.ts +8 -0
  33. package/dist/types/Analysis/__tests__/PaletteRemap.test.d.ts +14 -0
  34. package/dist/types/Analysis/__tests__/Pipeline.test.d.ts +10 -0
  35. package/dist/types/Analysis/__tests__/RoundTrip.test.d.ts +30 -0
  36. package/dist/types/Analysis/__tests__/SymbolAnalyzer.test.d.ts +11 -0
  37. package/dist/types/Analysis/index.d.ts +40 -0
  38. package/dist/types/BBCode/BBCodeDocumentModel.d.ts +102 -0
  39. package/dist/types/BBCode/BBCodeToGreenNode.d.ts +111 -0
  40. package/dist/types/BBCode/Parser.d.ts +78 -0
  41. package/dist/types/BBCode/index.d.ts +4 -0
  42. package/dist/types/Collab/positions.d.ts +55 -0
  43. package/dist/types/Commands/Command.d.ts +37 -0
  44. package/dist/types/Commands/CommandRegistry.d.ts +48 -0
  45. package/dist/types/Commands/DeleteNode.d.ts +7 -0
  46. package/dist/types/Commands/InsertText.d.ts +8 -0
  47. package/dist/types/Commands/SplitMerge.d.ts +9 -0
  48. package/dist/types/Commands/WrapInTag.d.ts +8 -0
  49. package/dist/types/Commands/index.d.ts +6 -0
  50. package/dist/types/Diff/TreeDiffer.d.ts +52 -0
  51. package/dist/types/Diff/__tests__/TreeDiffer.test.d.ts +1 -0
  52. package/dist/types/Diff/index.d.ts +2 -0
  53. package/dist/types/Edits/EditPlan.d.ts +144 -0
  54. package/dist/types/Edits/Optimizer.d.ts +78 -0
  55. package/dist/types/Edits/Rules/Rule.d.ts +91 -0
  56. package/dist/types/Edits/Rules/dropEmptyTags.d.ts +40 -0
  57. package/dist/types/Edits/Rules/dropRedundantNesting.d.ts +59 -0
  58. package/dist/types/Edits/Rules/index.d.ts +9 -0
  59. package/dist/types/Edits/Rules/mergeAdjacent.d.ts +93 -0
  60. package/dist/types/Edits/Rules/reorderWrappers.d.ts +42 -0
  61. package/dist/types/Edits/Rules/shortenHex.d.ts +30 -0
  62. package/dist/types/Edits/Rules/tagValue.d.ts +56 -0
  63. package/dist/types/Edits/Rules/unwrapInvisibleColor.d.ts +47 -0
  64. package/dist/types/Edits/applyEdits.d.ts +36 -0
  65. package/dist/types/Edits/index.d.ts +6 -0
  66. package/dist/types/Events/EventBus.d.ts +103 -0
  67. package/dist/types/Events/index.d.ts +2 -0
  68. package/dist/types/Formatter/Formatter.d.ts +32 -0
  69. package/dist/types/Formatter/index.d.ts +2 -0
  70. package/dist/types/HTML/HTMLDocumentModel.d.ts +13 -0
  71. package/dist/types/HTML/HTMLToGreenNode.d.ts +4 -0
  72. package/dist/types/Incremental/BracketIndex.d.ts +101 -0
  73. package/dist/types/Incremental/ChangeTracker.d.ts +69 -0
  74. package/dist/types/Incremental/IncrementalParser.d.ts +246 -0
  75. package/dist/types/Incremental/__tests__/BracketIndex.test.d.ts +1 -0
  76. package/dist/types/Incremental/__tests__/IncrementalParser.test.d.ts +1 -0
  77. package/dist/types/Incremental/index.d.ts +4 -0
  78. package/dist/types/Lexer/BBCodeLexer.d.ts +74 -0
  79. package/dist/types/Lexer/Lexer.d.ts +54 -0
  80. package/dist/types/Lexer/index.d.ts +4 -0
  81. package/dist/types/Linter/Linter.d.ts +58 -0
  82. package/dist/types/Linter/index.d.ts +2 -0
  83. package/dist/types/Markdown/MarkdownAST.d.ts +122 -0
  84. package/dist/types/Markdown/MarkdownDocumentModel.d.ts +15 -0
  85. package/dist/types/Markdown/MarkdownLexer.d.ts +155 -0
  86. package/dist/types/Markdown/MarkdownParser.d.ts +42 -0
  87. package/dist/types/Markdown/MarkdownToGreenNode.d.ts +6 -0
  88. package/dist/types/MilHibri/MilHibriDocumentModel.d.ts +21 -0
  89. package/dist/types/Model/DocumentModel.d.ts +318 -0
  90. package/dist/types/Model/NodeFactory.d.ts +29 -0
  91. package/dist/types/Model/TagRegistry.d.ts +165 -0
  92. package/dist/types/Model/index.d.ts +5 -0
  93. package/dist/types/Plugins/PluginAPI.d.ts +44 -0
  94. package/dist/types/Plugins/PluginRegistry.d.ts +81 -0
  95. package/dist/types/Plugins/index.d.ts +3 -0
  96. package/dist/types/Queries/QueryEngine.d.ts +32 -0
  97. package/dist/types/Queries/index.d.ts +1 -0
  98. package/dist/types/Reconciler/SurgicalReconciler.d.ts +23 -0
  99. package/dist/types/RenderPipeline/RenderPipeline.d.ts +46 -0
  100. package/dist/types/RenderPipeline/RenderTree.d.ts +55 -0
  101. package/dist/types/RenderPipeline/index.d.ts +4 -0
  102. package/dist/types/Repair/NestingRepair.d.ts +48 -0
  103. package/dist/types/Repair/index.d.ts +1 -0
  104. package/dist/types/Semantic/SemanticAnalyzer.d.ts +321 -0
  105. package/dist/types/Semantic/index.d.ts +2 -0
  106. package/dist/types/Symbols/SymbolTable.d.ts +47 -0
  107. package/dist/types/Symbols/index.d.ts +1 -0
  108. package/dist/types/Syntax/GreenNode.d.ts +154 -0
  109. package/dist/types/Syntax/GreenNodePool.d.ts +134 -0
  110. package/dist/types/Syntax/NodeMatcher.d.ts +75 -0
  111. package/dist/types/Syntax/RedNode.d.ts +280 -0
  112. package/dist/types/Syntax/RedNodeStore.d.ts +116 -0
  113. package/dist/types/Syntax/TreeBuilder.d.ts +54 -0
  114. package/dist/types/Syntax/__tests__/GreenNode.test.d.ts +1 -0
  115. package/dist/types/Syntax/__tests__/RedNode.test.d.ts +1 -0
  116. package/dist/types/Syntax/__tests__/RedNodeStore.test.d.ts +1 -0
  117. package/dist/types/Syntax/greenEdit.d.ts +64 -0
  118. package/dist/types/Syntax/hash.d.ts +17 -0
  119. package/dist/types/Syntax/index.d.ts +8 -0
  120. package/dist/types/Syntax/nodeAttr.d.ts +63 -0
  121. package/dist/types/Syntax/partition.d.ts +67 -0
  122. package/dist/types/Syntax/preserveNodeIds.d.ts +47 -0
  123. package/dist/types/Tokens/TokenResolver.d.ts +25 -0
  124. package/dist/types/Tokens/index.d.ts +1 -0
  125. package/dist/types/Transactions/Transaction.d.ts +36 -0
  126. package/dist/types/Transactions/UndoManager.d.ts +63 -0
  127. package/dist/types/Transactions/index.d.ts +3 -0
  128. package/dist/types/Transformers/ASTOptimizer.d.ts +34 -0
  129. package/dist/types/Transformers/GradientTransformer.d.ts +18 -0
  130. package/dist/types/Transformers/GrowTransformer.d.ts +16 -0
  131. package/dist/types/Transformers/RainbowTransformer.d.ts +17 -0
  132. package/dist/types/Transformers/SineWaveTransformer.d.ts +17 -0
  133. package/dist/types/Transformers/Transformer.d.ts +17 -0
  134. package/dist/types/Types/core.d.ts +104 -0
  135. package/dist/types/Types/diagnostics.d.ts +85 -0
  136. package/dist/types/Types/index.d.ts +11 -0
  137. package/dist/types/Types/operations.d.ts +109 -0
  138. package/dist/types/Types/queries.d.ts +67 -0
  139. package/dist/types/Types/symbols.d.ts +42 -0
  140. package/dist/types/Types/tokens.d.ts +75 -0
  141. package/dist/types/Utils/BBCodeGenerator.d.ts +21 -0
  142. package/dist/types/Utils/ColorMath.d.ts +92 -0
  143. package/dist/types/Utils/EffectMath.d.ts +643 -0
  144. package/dist/types/Utils/TagVocabulary.d.ts +104 -0
  145. package/dist/types/Utils/TagVocabulary.test.d.ts +1 -0
  146. package/dist/types/Utils/color.d.ts +29 -0
  147. package/dist/types/Utils/dom-to-svg.d.ts +28 -0
  148. package/dist/types/Utils/dom-to-svg.test.d.ts +1 -0
  149. package/dist/types/Utils/treeTransformers.d.ts +160 -0
  150. package/dist/types/Visitors/BBBlocksExporter.d.ts +27 -0
  151. package/dist/types/Visitors/BBCodeExporter.d.ts +90 -0
  152. package/dist/types/Visitors/BlockPatcher.d.ts +91 -0
  153. package/dist/types/Visitors/DOMMorpher.d.ts +19 -0
  154. package/dist/types/Visitors/HTMLRenderer.d.ts +492 -0
  155. package/dist/types/Visitors/JSONExporter.d.ts +42 -0
  156. package/dist/types/Visitors/MarkdownExporter.d.ts +28 -0
  157. package/dist/types/Visitors/SVGRenderer.d.ts +16 -0
  158. package/dist/types/Visitors/TiptapExporter.d.ts +40 -0
  159. package/dist/types/Visitors/Visitor.d.ts +35 -0
  160. package/dist/types/Visitors/index.d.ts +9 -0
  161. package/dist/types/Visuals/BoxDrawer.d.ts +54 -0
  162. package/dist/types/Visuals/LyneAudio.d.ts +8 -0
  163. package/dist/types/Visuals/index.d.ts +39 -0
  164. package/dist/types/index.d.ts +155 -0
  165. package/package.json +14 -10
  166. package/src/Analysis/Passes/Analysis/ColorUsageAnalyzer.ts +103 -0
  167. package/src/Analysis/Passes/Analysis/GradientAnalyzer.ts +294 -20
  168. package/src/Analysis/Passes/Analysis/SymbolAnalyzer.ts +257 -0
  169. package/src/Analysis/Passes/Decision/PaletteRemapDecision.ts +425 -0
  170. package/src/Analysis/Pipeline/Pipeline.ts +15 -2
  171. package/src/Analysis/index.ts +8 -2
  172. package/src/BBCode/BBCodeDocumentModel.ts +39 -1
  173. package/src/BBCode/BBCodeToGreenNode.ts +18 -12
  174. package/src/BBCode/Parser.ts +38 -1
  175. package/src/Edits/EditPlan.ts +290 -0
  176. package/src/Edits/Optimizer.ts +185 -0
  177. package/src/Edits/Rules/Rule.ts +145 -0
  178. package/src/Edits/Rules/dropEmptyTags.ts +110 -0
  179. package/src/Edits/Rules/dropRedundantNesting.ts +120 -0
  180. package/src/Edits/Rules/index.ts +28 -0
  181. package/src/Edits/Rules/mergeAdjacent.ts +224 -0
  182. package/src/Edits/Rules/reorderWrappers.ts +154 -0
  183. package/src/Edits/Rules/shortenHex.ts +79 -0
  184. package/src/Edits/Rules/tagValue.ts +105 -0
  185. package/src/Edits/Rules/unwrapInvisibleColor.ts +93 -0
  186. package/src/Edits/applyEdits.ts +54 -0
  187. package/src/Edits/index.ts +22 -0
  188. package/src/Events/EventBus.ts +18 -0
  189. package/src/HTML/HTMLToGreenNode.ts +193 -37
  190. package/src/Incremental/BracketIndex.ts +249 -0
  191. package/src/Incremental/IncrementalParser.ts +464 -41
  192. package/src/Lexer/BBCodeLexer.ts +25 -3
  193. package/src/Lexer/index.ts +1 -1
  194. package/src/Markdown/MarkdownAST.ts +65 -2
  195. package/src/Markdown/MarkdownLexer.ts +69 -14
  196. package/src/Markdown/MarkdownParser.ts +749 -62
  197. package/src/Markdown/MarkdownToGreenNode.ts +148 -27
  198. package/src/MilHibri/MilHibriDocumentModel.ts +56 -0
  199. package/src/Model/DocumentModel.ts +138 -5
  200. package/src/Model/TagRegistry.ts +129 -134
  201. package/src/Reconciler/SurgicalReconciler.ts +460 -0
  202. package/src/Repair/NestingRepair.ts +116 -0
  203. package/src/Repair/index.ts +1 -0
  204. package/src/Semantic/SemanticAnalyzer.ts +1845 -65
  205. package/src/Syntax/GreenNodePool.ts +12 -12
  206. package/src/Syntax/RedNode.ts +17 -3
  207. package/src/Syntax/RedNodeStore.ts +9 -1
  208. package/src/Syntax/nodeAttr.ts +172 -0
  209. package/src/Tokens/TokenResolver.ts +55 -0
  210. package/src/Tokens/index.ts +1 -0
  211. package/src/Types/core.ts +15 -0
  212. package/src/Utils/ColorMath.ts +276 -55
  213. package/src/Utils/EffectMath.ts +2462 -0
  214. package/src/Utils/TagVocabulary.ts +141 -0
  215. package/src/Utils/dom-to-svg.ts +28 -12
  216. package/src/Visitors/BBBlocksExporter.ts +15 -1
  217. package/src/Visitors/BBCodeExporter.ts +365 -32
  218. package/src/Visitors/BlockPatcher.ts +123 -22
  219. package/src/Visitors/DOMMorpher.ts +44 -28
  220. package/src/Visitors/HTMLRenderer.ts +771 -205
  221. package/src/Visitors/MarkdownExporter.ts +98 -41
  222. package/src/Visitors/TiptapExporter.ts +1 -0
  223. package/src/Visitors/index.ts +1 -1
  224. package/src/Visuals/BoxDrawer.ts +56 -10
  225. package/src/Visuals/LyneAudio.ts +346 -0
  226. package/src/Visuals/index.ts +8 -4
  227. package/src/Visuals/lyne.css +374 -9
  228. package/src/Visuals/osu.css +393 -11
  229. package/src/index.ts +178 -8
  230. package/dist/index.d.mts +0 -4612
  231. package/dist/index.d.ts +0 -4612
  232. package/src/Analysis/Passes/Analysis/__tests__/GradientAnalyzer.test.ts +0 -135
  233. package/src/Analysis/Passes/Analysis/__tests__/MergeableColorAnalyzer.test.ts +0 -84
  234. package/src/Analysis/Passes/Analysis/__tests__/RainbowAnalyzer.test.ts +0 -99
  235. package/src/Analysis/Passes/Analysis/__tests__/WaveAnalyzer.test.ts +0 -119
  236. package/src/Analysis/Passes/Decision/__tests__/DefaultDecision.test.ts +0 -179
  237. package/src/Analysis/__tests__/Integration.test.ts +0 -162
  238. package/src/Analysis/__tests__/Pipeline.test.ts +0 -133
  239. package/src/Diff/__tests__/TreeDiffer.test.ts +0 -65
  240. package/src/Incremental/__tests__/IncrementalParser.test.ts +0 -164
  241. package/src/Syntax/__tests__/GreenNode.test.ts +0 -33
  242. package/src/Syntax/__tests__/RedNode.test.ts +0 -81
  243. package/src/Syntax/__tests__/RedNodeStore.test.ts +0 -104
  244. package/src/Tests/ASTOptimizerIdempotence.test.ts +0 -77
  245. package/src/Tests/BlockPatcher.test.ts +0 -437
  246. package/src/Tests/BlockPatcherWindowed.test.ts +0 -364
  247. package/src/Tests/BoxDrawer.test.ts +0 -217
  248. package/src/Tests/BoxRichTitle.test.ts +0 -105
  249. package/src/Tests/Chars500kBenchmark.test.ts +0 -151
  250. package/src/Tests/Chars500kEdits.test.ts +0 -321
  251. package/src/Tests/CollabPositions.test.ts +0 -146
  252. package/src/Tests/CompilerPathProfiling.test.ts +0 -186
  253. package/src/Tests/DOMMorpher.test.ts +0 -142
  254. package/src/Tests/DomPatchPerf.test.ts +0 -60
  255. package/src/Tests/EffectSegments.snapshot.json +0 -616
  256. package/src/Tests/EffectSegments.test.ts +0 -68
  257. package/src/Tests/FindNodeAtOffset.test.ts +0 -65
  258. package/src/Tests/Fuzzer.test.ts +0 -166
  259. package/src/Tests/GreenNodePool.test.ts +0 -153
  260. package/src/Tests/Lexer.test.ts +0 -238
  261. package/src/Tests/LyneMode.test.ts +0 -291
  262. package/src/Tests/ModelCoherence.test.ts +0 -180
  263. package/src/Tests/Partition.test.ts +0 -238
  264. package/src/Tests/PluginTags.test.ts +0 -150
  265. package/src/Tests/ProblematicSection.test.ts +0 -46
  266. package/src/Tests/ProblematicSectionHTML.test.ts +0 -58
  267. package/src/Tests/RedReuse.test.ts +0 -134
  268. package/src/Tests/ReproDelete20k.test.ts +0 -62
  269. package/src/Tests/SemanticValidators.test.ts +0 -136
  270. package/src/Tests/StableNodeIds.test.ts +0 -210
  271. package/src/Tests/StudioColorBloat.test.ts +0 -25
  272. package/src/Tests/StudioDebugText.test.ts +0 -27
  273. package/src/Tests/StudioTrailingChar.test.ts +0 -25
  274. package/src/Tests/StudioValidText.test.ts +0 -25
  275. package/src/Tests/UrlImgBug.test.ts +0 -23
  276. package/src/Tests/VisualBuilderFidelity.test.ts +0 -105
  277. package/src/Tests/referenceDocument.ts +0 -119
  278. 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++;