@noldova/context.parsers.regex 0.0.0-stage → 0.0.2

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 (320) hide show
  1. package/LICENSE +21 -0
  2. package/api/index.d.ts +1752 -0
  3. package/api/index.js +78 -0
  4. package/api/index.js.map +1 -0
  5. package/extensions/nodes/assertions/regex-end-assertion.node.extensions.js +12 -0
  6. package/extensions/nodes/assertions/regex-end-assertion.node.extensions.js.map +1 -0
  7. package/extensions/nodes/assertions/regex-non-word-boundary-assertion.node.extensions.js +12 -0
  8. package/extensions/nodes/assertions/regex-non-word-boundary-assertion.node.extensions.js.map +1 -0
  9. package/extensions/nodes/assertions/regex-start-assertion.node.extensions.js +12 -0
  10. package/extensions/nodes/assertions/regex-start-assertion.node.extensions.js.map +1 -0
  11. package/extensions/nodes/assertions/regex-word-boundary-assertion.node.extensions.js +12 -0
  12. package/extensions/nodes/assertions/regex-word-boundary-assertion.node.extensions.js.map +1 -0
  13. package/extensions/nodes/classes/regex-character-class.node.extensions.js +12 -0
  14. package/extensions/nodes/classes/regex-character-class.node.extensions.js.map +1 -0
  15. package/extensions/nodes/classes/regex-class-intersection.node.extensions.js +12 -0
  16. package/extensions/nodes/classes/regex-class-intersection.node.extensions.js.map +1 -0
  17. package/extensions/nodes/classes/regex-class-string-disjunction.node.extensions.js +12 -0
  18. package/extensions/nodes/classes/regex-class-string-disjunction.node.extensions.js.map +1 -0
  19. package/extensions/nodes/classes/regex-class-subtraction.node.extensions.js +12 -0
  20. package/extensions/nodes/classes/regex-class-subtraction.node.extensions.js.map +1 -0
  21. package/extensions/nodes/classes/regex-class-union.node.extensions.js +12 -0
  22. package/extensions/nodes/classes/regex-class-union.node.extensions.js.map +1 -0
  23. package/extensions/nodes/escapes/regex-backspace-escape.node.extensions.js +13 -0
  24. package/extensions/nodes/escapes/regex-backspace-escape.node.extensions.js.map +1 -0
  25. package/extensions/nodes/escapes/regex-carriage-return-escape.node.extensions.js +13 -0
  26. package/extensions/nodes/escapes/regex-carriage-return-escape.node.extensions.js.map +1 -0
  27. package/extensions/nodes/escapes/regex-class-control-escape.node.extensions.js +12 -0
  28. package/extensions/nodes/escapes/regex-class-control-escape.node.extensions.js.map +1 -0
  29. package/extensions/nodes/escapes/regex-control-letter-escape.node.extensions.js +12 -0
  30. package/extensions/nodes/escapes/regex-control-letter-escape.node.extensions.js.map +1 -0
  31. package/extensions/nodes/escapes/regex-form-feed-escape.node.extensions.js +13 -0
  32. package/extensions/nodes/escapes/regex-form-feed-escape.node.extensions.js.map +1 -0
  33. package/extensions/nodes/escapes/regex-hex-escape.node.extensions.js +12 -0
  34. package/extensions/nodes/escapes/regex-hex-escape.node.extensions.js.map +1 -0
  35. package/extensions/nodes/escapes/regex-identity-escape.node.extensions.js +12 -0
  36. package/extensions/nodes/escapes/regex-identity-escape.node.extensions.js.map +1 -0
  37. package/extensions/nodes/escapes/regex-legacy-octal-escape.node.extensions.js +12 -0
  38. package/extensions/nodes/escapes/regex-legacy-octal-escape.node.extensions.js.map +1 -0
  39. package/extensions/nodes/escapes/regex-newline-escape.node.extensions.js +13 -0
  40. package/extensions/nodes/escapes/regex-newline-escape.node.extensions.js.map +1 -0
  41. package/extensions/nodes/escapes/regex-null-escape.node.extensions.js +13 -0
  42. package/extensions/nodes/escapes/regex-null-escape.node.extensions.js.map +1 -0
  43. package/extensions/nodes/escapes/regex-tab-escape.node.extensions.js +13 -0
  44. package/extensions/nodes/escapes/regex-tab-escape.node.extensions.js.map +1 -0
  45. package/extensions/nodes/escapes/regex-unicode-escape.node.extensions.js +12 -0
  46. package/extensions/nodes/escapes/regex-unicode-escape.node.extensions.js.map +1 -0
  47. package/extensions/nodes/escapes/regex-unicode-property-escape.node.extensions.js +12 -0
  48. package/extensions/nodes/escapes/regex-unicode-property-escape.node.extensions.js.map +1 -0
  49. package/extensions/nodes/escapes/regex-vertical-tab-escape.node.extensions.js +13 -0
  50. package/extensions/nodes/escapes/regex-vertical-tab-escape.node.extensions.js.map +1 -0
  51. package/extensions/nodes/node.extensions.js +78 -0
  52. package/extensions/nodes/node.extensions.js.map +1 -0
  53. package/extensions/nodes/punctuators/regex-ampersand-ampersand.node.extensions.js +21 -0
  54. package/extensions/nodes/punctuators/regex-ampersand-ampersand.node.extensions.js.map +1 -0
  55. package/extensions/nodes/punctuators/regex-asterisk.node.extensions.js +16 -0
  56. package/extensions/nodes/punctuators/regex-asterisk.node.extensions.js.map +1 -0
  57. package/extensions/nodes/punctuators/regex-bar.node.extensions.js +12 -0
  58. package/extensions/nodes/punctuators/regex-bar.node.extensions.js.map +1 -0
  59. package/extensions/nodes/punctuators/regex-close-brace.node.extensions.js +16 -0
  60. package/extensions/nodes/punctuators/regex-close-brace.node.extensions.js.map +1 -0
  61. package/extensions/nodes/punctuators/regex-close-bracket.node.extensions.js +16 -0
  62. package/extensions/nodes/punctuators/regex-close-bracket.node.extensions.js.map +1 -0
  63. package/extensions/nodes/punctuators/regex-close-parenthesis.node.extensions.js +12 -0
  64. package/extensions/nodes/punctuators/regex-close-parenthesis.node.extensions.js.map +1 -0
  65. package/extensions/nodes/punctuators/regex-colon.node.extensions.js +14 -0
  66. package/extensions/nodes/punctuators/regex-colon.node.extensions.js.map +1 -0
  67. package/extensions/nodes/punctuators/regex-comma.node.extensions.js +14 -0
  68. package/extensions/nodes/punctuators/regex-comma.node.extensions.js.map +1 -0
  69. package/extensions/nodes/punctuators/regex-equals.node.extensions.js +14 -0
  70. package/extensions/nodes/punctuators/regex-equals.node.extensions.js.map +1 -0
  71. package/extensions/nodes/punctuators/regex-exclamation.node.extensions.js +14 -0
  72. package/extensions/nodes/punctuators/regex-exclamation.node.extensions.js.map +1 -0
  73. package/extensions/nodes/punctuators/regex-greater-than.node.extensions.js +14 -0
  74. package/extensions/nodes/punctuators/regex-greater-than.node.extensions.js.map +1 -0
  75. package/extensions/nodes/punctuators/regex-hyphen-hyphen.node.extensions.js +21 -0
  76. package/extensions/nodes/punctuators/regex-hyphen-hyphen.node.extensions.js.map +1 -0
  77. package/extensions/nodes/punctuators/regex-hyphen.node.extensions.js +18 -0
  78. package/extensions/nodes/punctuators/regex-hyphen.node.extensions.js.map +1 -0
  79. package/extensions/nodes/punctuators/regex-less-than.node.extensions.js +14 -0
  80. package/extensions/nodes/punctuators/regex-less-than.node.extensions.js.map +1 -0
  81. package/extensions/nodes/punctuators/regex-open-brace.node.extensions.js +16 -0
  82. package/extensions/nodes/punctuators/regex-open-brace.node.extensions.js.map +1 -0
  83. package/extensions/nodes/punctuators/regex-open-bracket.node.extensions.js +12 -0
  84. package/extensions/nodes/punctuators/regex-open-bracket.node.extensions.js.map +1 -0
  85. package/extensions/nodes/punctuators/regex-open-parenthesis.node.extensions.js +12 -0
  86. package/extensions/nodes/punctuators/regex-open-parenthesis.node.extensions.js.map +1 -0
  87. package/extensions/nodes/punctuators/regex-plus.node.extensions.js +16 -0
  88. package/extensions/nodes/punctuators/regex-plus.node.extensions.js.map +1 -0
  89. package/extensions/nodes/punctuators/regex-question.node.extensions.js +19 -0
  90. package/extensions/nodes/punctuators/regex-question.node.extensions.js.map +1 -0
  91. package/extensions/nodes/regex-character.node.extensions.js +12 -0
  92. package/extensions/nodes/regex-character.node.extensions.js.map +1 -0
  93. package/models/diagnostics/regex-diagnostic-templates.js +53 -0
  94. package/models/diagnostics/regex-diagnostic-templates.js.map +1 -0
  95. package/models/nodes/assertions/regex-end-assertion.node.js +15 -0
  96. package/models/nodes/assertions/regex-end-assertion.node.js.map +1 -0
  97. package/models/nodes/assertions/regex-lookahead-assertion.node.js +18 -0
  98. package/models/nodes/assertions/regex-lookahead-assertion.node.js.map +1 -0
  99. package/models/nodes/assertions/regex-lookbehind-assertion.node.js +18 -0
  100. package/models/nodes/assertions/regex-lookbehind-assertion.node.js.map +1 -0
  101. package/models/nodes/assertions/regex-non-word-boundary-assertion.node.js +15 -0
  102. package/models/nodes/assertions/regex-non-word-boundary-assertion.node.js.map +1 -0
  103. package/models/nodes/assertions/regex-start-assertion.node.js +15 -0
  104. package/models/nodes/assertions/regex-start-assertion.node.js.map +1 -0
  105. package/models/nodes/assertions/regex-word-boundary-assertion.node.js +15 -0
  106. package/models/nodes/assertions/regex-word-boundary-assertion.node.js.map +1 -0
  107. package/models/nodes/classes/regex-character-class.node.js +20 -0
  108. package/models/nodes/classes/regex-character-class.node.js.map +1 -0
  109. package/models/nodes/classes/regex-character-range.node.js +18 -0
  110. package/models/nodes/classes/regex-character-range.node.js.map +1 -0
  111. package/models/nodes/classes/regex-class-intersection.node.js +17 -0
  112. package/models/nodes/classes/regex-class-intersection.node.js.map +1 -0
  113. package/models/nodes/classes/regex-class-string-disjunction.node.js +19 -0
  114. package/models/nodes/classes/regex-class-string-disjunction.node.js.map +1 -0
  115. package/models/nodes/classes/regex-class-string.node.js +14 -0
  116. package/models/nodes/classes/regex-class-string.node.js.map +1 -0
  117. package/models/nodes/classes/regex-class-subtraction.node.js +17 -0
  118. package/models/nodes/classes/regex-class-subtraction.node.js.map +1 -0
  119. package/models/nodes/classes/regex-class-union.node.js +14 -0
  120. package/models/nodes/classes/regex-class-union.node.js.map +1 -0
  121. package/models/nodes/escapes/regex-backreference.node.js +16 -0
  122. package/models/nodes/escapes/regex-backreference.node.js.map +1 -0
  123. package/models/nodes/escapes/regex-backspace-escape.node.js +15 -0
  124. package/models/nodes/escapes/regex-backspace-escape.node.js.map +1 -0
  125. package/models/nodes/escapes/regex-carriage-return-escape.node.js +15 -0
  126. package/models/nodes/escapes/regex-carriage-return-escape.node.js.map +1 -0
  127. package/models/nodes/escapes/regex-class-control-escape.node.js +16 -0
  128. package/models/nodes/escapes/regex-class-control-escape.node.js.map +1 -0
  129. package/models/nodes/escapes/regex-control-letter-escape.node.js +16 -0
  130. package/models/nodes/escapes/regex-control-letter-escape.node.js.map +1 -0
  131. package/models/nodes/escapes/regex-decimal-escape.node.js +16 -0
  132. package/models/nodes/escapes/regex-decimal-escape.node.js.map +1 -0
  133. package/models/nodes/escapes/regex-digit-escape.node.js +15 -0
  134. package/models/nodes/escapes/regex-digit-escape.node.js.map +1 -0
  135. package/models/nodes/escapes/regex-form-feed-escape.node.js +15 -0
  136. package/models/nodes/escapes/regex-form-feed-escape.node.js.map +1 -0
  137. package/models/nodes/escapes/regex-hex-escape.node.js +16 -0
  138. package/models/nodes/escapes/regex-hex-escape.node.js.map +1 -0
  139. package/models/nodes/escapes/regex-identity-escape.node.js +16 -0
  140. package/models/nodes/escapes/regex-identity-escape.node.js.map +1 -0
  141. package/models/nodes/escapes/regex-legacy-octal-escape.node.js +16 -0
  142. package/models/nodes/escapes/regex-legacy-octal-escape.node.js.map +1 -0
  143. package/models/nodes/escapes/regex-named-backreference.node.js +16 -0
  144. package/models/nodes/escapes/regex-named-backreference.node.js.map +1 -0
  145. package/models/nodes/escapes/regex-newline-escape.node.js +15 -0
  146. package/models/nodes/escapes/regex-newline-escape.node.js.map +1 -0
  147. package/models/nodes/escapes/regex-non-digit-escape.node.js +15 -0
  148. package/models/nodes/escapes/regex-non-digit-escape.node.js.map +1 -0
  149. package/models/nodes/escapes/regex-non-whitespace-escape.node.js +15 -0
  150. package/models/nodes/escapes/regex-non-whitespace-escape.node.js.map +1 -0
  151. package/models/nodes/escapes/regex-non-word-escape.node.js +15 -0
  152. package/models/nodes/escapes/regex-non-word-escape.node.js.map +1 -0
  153. package/models/nodes/escapes/regex-null-escape.node.js +15 -0
  154. package/models/nodes/escapes/regex-null-escape.node.js.map +1 -0
  155. package/models/nodes/escapes/regex-tab-escape.node.js +15 -0
  156. package/models/nodes/escapes/regex-tab-escape.node.js.map +1 -0
  157. package/models/nodes/escapes/regex-unicode-escape.node.js +16 -0
  158. package/models/nodes/escapes/regex-unicode-escape.node.js.map +1 -0
  159. package/models/nodes/escapes/regex-unicode-property-escape.node.js +22 -0
  160. package/models/nodes/escapes/regex-unicode-property-escape.node.js.map +1 -0
  161. package/models/nodes/escapes/regex-vertical-tab-escape.node.js +15 -0
  162. package/models/nodes/escapes/regex-vertical-tab-escape.node.js.map +1 -0
  163. package/models/nodes/escapes/regex-whitespace-escape.node.js +15 -0
  164. package/models/nodes/escapes/regex-whitespace-escape.node.js.map +1 -0
  165. package/models/nodes/escapes/regex-word-escape.node.js +15 -0
  166. package/models/nodes/escapes/regex-word-escape.node.js.map +1 -0
  167. package/models/nodes/groups/regex-capturing-group.node.js +18 -0
  168. package/models/nodes/groups/regex-capturing-group.node.js.map +1 -0
  169. package/models/nodes/groups/regex-modifier-group.node.js +20 -0
  170. package/models/nodes/groups/regex-modifier-group.node.js.map +1 -0
  171. package/models/nodes/groups/regex-named-capturing-group.node.js +20 -0
  172. package/models/nodes/groups/regex-named-capturing-group.node.js.map +1 -0
  173. package/models/nodes/groups/regex-non-capturing-group.node.js +16 -0
  174. package/models/nodes/groups/regex-non-capturing-group.node.js.map +1 -0
  175. package/models/nodes/punctuators/regex-ampersand-ampersand.node.js +15 -0
  176. package/models/nodes/punctuators/regex-ampersand-ampersand.node.js.map +1 -0
  177. package/models/nodes/punctuators/regex-asterisk.node.js +15 -0
  178. package/models/nodes/punctuators/regex-asterisk.node.js.map +1 -0
  179. package/models/nodes/punctuators/regex-bar.node.js +15 -0
  180. package/models/nodes/punctuators/regex-bar.node.js.map +1 -0
  181. package/models/nodes/punctuators/regex-class-string-disjunction-start.node.js +15 -0
  182. package/models/nodes/punctuators/regex-class-string-disjunction-start.node.js.map +1 -0
  183. package/models/nodes/punctuators/regex-close-brace.node.js +15 -0
  184. package/models/nodes/punctuators/regex-close-brace.node.js.map +1 -0
  185. package/models/nodes/punctuators/regex-close-bracket.node.js +15 -0
  186. package/models/nodes/punctuators/regex-close-bracket.node.js.map +1 -0
  187. package/models/nodes/punctuators/regex-close-parenthesis.node.js +15 -0
  188. package/models/nodes/punctuators/regex-close-parenthesis.node.js.map +1 -0
  189. package/models/nodes/punctuators/regex-colon.node.js +15 -0
  190. package/models/nodes/punctuators/regex-colon.node.js.map +1 -0
  191. package/models/nodes/punctuators/regex-comma.node.js +15 -0
  192. package/models/nodes/punctuators/regex-comma.node.js.map +1 -0
  193. package/models/nodes/punctuators/regex-equals.node.js +15 -0
  194. package/models/nodes/punctuators/regex-equals.node.js.map +1 -0
  195. package/models/nodes/punctuators/regex-exclamation.node.js +15 -0
  196. package/models/nodes/punctuators/regex-exclamation.node.js.map +1 -0
  197. package/models/nodes/punctuators/regex-greater-than.node.js +15 -0
  198. package/models/nodes/punctuators/regex-greater-than.node.js.map +1 -0
  199. package/models/nodes/punctuators/regex-hyphen-hyphen.node.js +15 -0
  200. package/models/nodes/punctuators/regex-hyphen-hyphen.node.js.map +1 -0
  201. package/models/nodes/punctuators/regex-hyphen.node.js +15 -0
  202. package/models/nodes/punctuators/regex-hyphen.node.js.map +1 -0
  203. package/models/nodes/punctuators/regex-less-than.node.js +15 -0
  204. package/models/nodes/punctuators/regex-less-than.node.js.map +1 -0
  205. package/models/nodes/punctuators/regex-open-brace.node.js +15 -0
  206. package/models/nodes/punctuators/regex-open-brace.node.js.map +1 -0
  207. package/models/nodes/punctuators/regex-open-bracket.node.js +15 -0
  208. package/models/nodes/punctuators/regex-open-bracket.node.js.map +1 -0
  209. package/models/nodes/punctuators/regex-open-parenthesis.node.js +15 -0
  210. package/models/nodes/punctuators/regex-open-parenthesis.node.js.map +1 -0
  211. package/models/nodes/punctuators/regex-plus.node.js +15 -0
  212. package/models/nodes/punctuators/regex-plus.node.js.map +1 -0
  213. package/models/nodes/punctuators/regex-question.node.js +15 -0
  214. package/models/nodes/punctuators/regex-question.node.js.map +1 -0
  215. package/models/nodes/regex-alternative.node.js +14 -0
  216. package/models/nodes/regex-alternative.node.js.map +1 -0
  217. package/models/nodes/regex-character.node.js +14 -0
  218. package/models/nodes/regex-character.node.js.map +1 -0
  219. package/models/nodes/regex-disjunction.node.js +17 -0
  220. package/models/nodes/regex-disjunction.node.js.map +1 -0
  221. package/models/nodes/regex-dot.node.js +15 -0
  222. package/models/nodes/regex-dot.node.js.map +1 -0
  223. package/models/nodes/regex-flags.node.js +31 -0
  224. package/models/nodes/regex-flags.node.js.map +1 -0
  225. package/models/nodes/regex-pattern.node.js +18 -0
  226. package/models/nodes/regex-pattern.node.js.map +1 -0
  227. package/models/nodes/regex-quantifier.node.js +20 -0
  228. package/models/nodes/regex-quantifier.node.js.map +1 -0
  229. package/models/nodes/regex-unknown.node.js +14 -0
  230. package/models/nodes/regex-unknown.node.js.map +1 -0
  231. package/models/nodes/regex.node.js +20 -0
  232. package/models/nodes/regex.node.js.map +1 -0
  233. package/models/regex-alternative-branch.js +16 -0
  234. package/models/regex-alternative-branch.js.map +1 -0
  235. package/models/regex-capturing-group-summary.js +16 -0
  236. package/models/regex-capturing-group-summary.js.map +1 -0
  237. package/models/regex-group-name.js +16 -0
  238. package/models/regex-group-name.js.map +1 -0
  239. package/models/regex-named-group-branch.js +12 -0
  240. package/models/regex-named-group-branch.js.map +1 -0
  241. package/models/regex-parser-context.js +41 -0
  242. package/models/regex-parser-context.js.map +1 -0
  243. package/models/regex-unicode-escape-value.js +16 -0
  244. package/models/regex-unicode-escape-value.js.map +1 -0
  245. package/package.json +26 -4
  246. package/resources.js +112 -0
  247. package/resources.js.map +1 -0
  248. package/services/lexers/character.lexer.js +24 -0
  249. package/services/lexers/character.lexer.js.map +1 -0
  250. package/services/lexers/code-point-escape.lexer.js +56 -0
  251. package/services/lexers/code-point-escape.lexer.js.map +1 -0
  252. package/services/lexers/control-escape.lexer.js +40 -0
  253. package/services/lexers/control-escape.lexer.js.map +1 -0
  254. package/services/lexers/escape.lexer.js +130 -0
  255. package/services/lexers/escape.lexer.js.map +1 -0
  256. package/services/lexers/named-backreference.lexer.js +48 -0
  257. package/services/lexers/named-backreference.lexer.js.map +1 -0
  258. package/services/lexers/numeric-escape.lexer.js +87 -0
  259. package/services/lexers/numeric-escape.lexer.js.map +1 -0
  260. package/services/lexers/regex.lexer.js +200 -0
  261. package/services/lexers/regex.lexer.js.map +1 -0
  262. package/services/lexers/unicode-property-escape.lexer.js +59 -0
  263. package/services/lexers/unicode-property-escape.lexer.js.map +1 -0
  264. package/services/parsers/regex-alternative.parser.js +27 -0
  265. package/services/parsers/regex-alternative.parser.js.map +1 -0
  266. package/services/parsers/regex-assertion.parser.js +38 -0
  267. package/services/parsers/regex-assertion.parser.js.map +1 -0
  268. package/services/parsers/regex-capturing-group.parser.js +24 -0
  269. package/services/parsers/regex-capturing-group.parser.js.map +1 -0
  270. package/services/parsers/regex-character-class.parser.js +107 -0
  271. package/services/parsers/regex-character-class.parser.js.map +1 -0
  272. package/services/parsers/regex-class-set-expression.parser.js +114 -0
  273. package/services/parsers/regex-class-set-expression.parser.js.map +1 -0
  274. package/services/parsers/regex-class-string-disjunction.parser.js +57 -0
  275. package/services/parsers/regex-class-string-disjunction.parser.js.map +1 -0
  276. package/services/parsers/regex-disjunction.parser.js +33 -0
  277. package/services/parsers/regex-disjunction.parser.js.map +1 -0
  278. package/services/parsers/regex-group-end.parser.js +25 -0
  279. package/services/parsers/regex-group-end.parser.js.map +1 -0
  280. package/services/parsers/regex-group.parser.js +91 -0
  281. package/services/parsers/regex-group.parser.js.map +1 -0
  282. package/services/parsers/regex-lookaround.parser.js +35 -0
  283. package/services/parsers/regex-lookaround.parser.js.map +1 -0
  284. package/services/parsers/regex-modifier-group.parser.js +78 -0
  285. package/services/parsers/regex-modifier-group.parser.js.map +1 -0
  286. package/services/parsers/regex-named-capturing-group.parser.js +60 -0
  287. package/services/parsers/regex-named-capturing-group.parser.js.map +1 -0
  288. package/services/parsers/regex-non-capturing-group.parser.js +24 -0
  289. package/services/parsers/regex-non-capturing-group.parser.js.map +1 -0
  290. package/services/parsers/regex-pattern.parser.js +23 -0
  291. package/services/parsers/regex-pattern.parser.js.map +1 -0
  292. package/services/parsers/regex-quantifier.parser.js +85 -0
  293. package/services/parsers/regex-quantifier.parser.js.map +1 -0
  294. package/services/parsers/regex-term.parser.js +50 -0
  295. package/services/parsers/regex-term.parser.js.map +1 -0
  296. package/services/readers/regex-capturing-group-summary.reader.js +56 -0
  297. package/services/readers/regex-capturing-group-summary.reader.js.map +1 -0
  298. package/services/readers/regex-group-name.reader.js +44 -0
  299. package/services/readers/regex-group-name.reader.js.map +1 -0
  300. package/services/readers/regex-unicode-escape.reader.js +72 -0
  301. package/services/readers/regex-unicode-escape.reader.js.map +1 -0
  302. package/services/regex-named-group-registry.js +48 -0
  303. package/services/regex-named-group-registry.js.map +1 -0
  304. package/services/regex-syntax.parser.js +73 -0
  305. package/services/regex-syntax.parser.js.map +1 -0
  306. package/services/regex.parser.js +39 -0
  307. package/services/regex.parser.js.map +1 -0
  308. package/services/unicode/regex-unicode-property-catalog.js +118 -0
  309. package/services/unicode/regex-unicode-property-catalog.js.map +1 -0
  310. package/services/validators/regex-character-range.validator.js +22 -0
  311. package/services/validators/regex-character-range.validator.js.map +1 -0
  312. package/services/validators/regex-class-set-character.validator.js +30 -0
  313. package/services/validators/regex-class-set-character.validator.js.map +1 -0
  314. package/services/validators/regex-flag.validator.js +36 -0
  315. package/services/validators/regex-flag.validator.js.map +1 -0
  316. package/services/validators/regex-group-name.validator.js +17 -0
  317. package/services/validators/regex-group-name.validator.js.map +1 -0
  318. package/services/validators/regex-identity-escape.validator.js +25 -0
  319. package/services/validators/regex-identity-escape.validator.js.map +1 -0
  320. package/README.md +0 -3
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import { StringBuilder } from "@noldova/context.text";
10
+ import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
11
+ import { RegexModifierGroupNode } from "../../models/nodes/groups/regex-modifier-group.node.js";
12
+ import { RegexColonNode } from "../../models/nodes/punctuators/regex-colon.node.js";
13
+ import { RegexHyphenNode } from "../../models/nodes/punctuators/regex-hyphen.node.js";
14
+ import { RegexCharacterNode } from "../../models/nodes/regex-character.node.js";
15
+ import { Resources } from "../../resources.js";
16
+ export class RegexModifierGroupParser {
17
+ groupEndParser;
18
+ regexParser;
19
+ constructor(regexParser, groupEndParser) {
20
+ this.regexParser = regexParser;
21
+ this.groupEndParser = groupEndParser;
22
+ }
23
+ parse(startOffset) {
24
+ const prefixStartOffset = this.regexParser.currentNode.span.startOffset;
25
+ const enabledModifiers = this.readModifiers();
26
+ let disabledModifiers = String.empty;
27
+ let hasMinus = false;
28
+ if (this.regexParser.currentNode instanceof RegexHyphenNode) {
29
+ hasMinus = true;
30
+ this.regexParser.advance();
31
+ disabledModifiers = this.readModifiers();
32
+ }
33
+ if (hasMinus && enabledModifiers.length === 0 && disabledModifiers.length === 0)
34
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1006, this.createSpan(prefixStartOffset, this.regexParser.currentNode.span.startOffset));
35
+ this.validateModifiers(enabledModifiers, disabledModifiers, prefixStartOffset);
36
+ if (Object.isUndefined(this.regexParser.tryConsume(RegexColonNode)))
37
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1010, this.regexParser.currentNode.span);
38
+ const disjunctionNode = this.regexParser.parseDisjunction(true);
39
+ const endOffset = this.groupEndParser.parse();
40
+ return new RegexModifierGroupNode(enabledModifiers, disabledModifiers, disjunctionNode, this.createSpan(startOffset, endOffset));
41
+ }
42
+ createSpan(startOffset, endOffset) {
43
+ return this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
44
+ }
45
+ readModifiers() {
46
+ const modifiers = new StringBuilder();
47
+ let node = this.regexParser.currentNode;
48
+ while (node instanceof RegexCharacterNode) {
49
+ if (Resources.modifierCharacters.includes(node.value))
50
+ modifiers.append(node.value);
51
+ else
52
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1007, node.span);
53
+ this.regexParser.advance();
54
+ node = this.regexParser.currentNode;
55
+ }
56
+ return modifiers.toString();
57
+ }
58
+ validateModifiers(enabledModifiers, disabledModifiers, startOffset) {
59
+ const seenEnabled = new Set();
60
+ const seenDisabled = new Set();
61
+ const span = this.createSpan(startOffset, this.regexParser.currentNode.span.startOffset);
62
+ for (const modifier of enabledModifiers) {
63
+ if (seenEnabled.has(modifier))
64
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1008, span, [modifier]);
65
+ else
66
+ seenEnabled.add(modifier);
67
+ }
68
+ for (const modifier of disabledModifiers) {
69
+ if (seenDisabled.has(modifier))
70
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1008, span, [modifier]);
71
+ else
72
+ seenDisabled.add(modifier);
73
+ if (seenEnabled.has(modifier))
74
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1009, span, [modifier]);
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=regex-modifier-group.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-modifier-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-modifier-group.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import { StringBuilder } from "@noldova/context.text";
10
+ import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
11
+ import { RegexUnicodeEscapeNode } from "../../models/nodes/escapes/regex-unicode-escape.node.js";
12
+ import { RegexNamedCapturingGroupNode } from "../../models/nodes/groups/regex-named-capturing-group.node.js";
13
+ import { RegexGreaterThanNode } from "../../models/nodes/punctuators/regex-greater-than.node.js";
14
+ import { RegexGroupNameValidator } from "../validators/regex-group-name.validator.js";
15
+ export class RegexNamedCapturingGroupParser {
16
+ groupEndParser;
17
+ groupNameValidator = new RegexGroupNameValidator();
18
+ regexParser;
19
+ constructor(regexParser, groupEndParser) {
20
+ this.regexParser = regexParser;
21
+ this.groupEndParser = groupEndParser;
22
+ }
23
+ parse(startOffset) {
24
+ const groupIndex = this.regexParser.context.claimCapturingGroupIndex();
25
+ const groupNameBuilder = new StringBuilder();
26
+ let isValidName = true;
27
+ this.regexParser.regexLexer.enterGroupName();
28
+ this.regexParser.advance();
29
+ const nameStartOffset = this.regexParser.currentNode.span.startOffset;
30
+ try {
31
+ while (!this.regexParser.isEndOfFile && !(this.regexParser.currentNode instanceof RegexGreaterThanNode)) {
32
+ const node = this.regexParser.currentNode;
33
+ const value = node instanceof RegexUnicodeEscapeNode
34
+ ? String.fromCodePoint(node.codePoint)
35
+ : this.regexParser.context.source.getText(node.span);
36
+ const codePoint = value.codePointAt(0);
37
+ if (!this.groupNameValidator.isValidCodePoint(codePoint, groupNameBuilder.length === 0))
38
+ isValidName = false;
39
+ groupNameBuilder.append(value);
40
+ this.regexParser.advance();
41
+ }
42
+ }
43
+ finally {
44
+ this.regexParser.regexLexer.leaveGroupName();
45
+ }
46
+ const groupName = groupNameBuilder.toString();
47
+ const nameEndOffset = this.regexParser.currentNode.span.startOffset;
48
+ const nameSpan = this.regexParser.regexLexer.reader.createSpan(nameStartOffset, nameEndOffset - nameStartOffset);
49
+ if (!isValidName || groupNameBuilder.length === 0)
50
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1023, nameSpan);
51
+ else
52
+ this.regexParser.context.registerNamedCapturingGroup(groupName, nameSpan);
53
+ this.regexParser.tryConsume(RegexGreaterThanNode);
54
+ const disjunctionNode = this.regexParser.parseDisjunction(true);
55
+ const endOffset = this.groupEndParser.parse();
56
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
57
+ return new RegexNamedCapturingGroupNode(groupIndex, groupName, disjunctionNode, span);
58
+ }
59
+ }
60
+ //# sourceMappingURL=regex-named-capturing-group.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-named-capturing-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-named-capturing-group.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import { RegexNonCapturingGroupNode } from "../../models/nodes/groups/regex-non-capturing-group.node.js";
9
+ export class RegexNonCapturingGroupParser {
10
+ groupEndParser;
11
+ regexParser;
12
+ constructor(regexParser, groupEndParser) {
13
+ this.regexParser = regexParser;
14
+ this.groupEndParser = groupEndParser;
15
+ }
16
+ parse(startOffset) {
17
+ this.regexParser.advance();
18
+ const disjunctionNode = this.regexParser.parseDisjunction(true);
19
+ const endOffset = this.groupEndParser.parse();
20
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
21
+ return new RegexNonCapturingGroupNode(disjunctionNode, span);
22
+ }
23
+ }
24
+ //# sourceMappingURL=regex-non-capturing-group.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-non-capturing-group.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-non-capturing-group.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAIzG,MAAM,OAAO,4BAA4B;IACtB,cAAc,CAAsB;IACpC,WAAW,CAAoB;IAEhD,YAAmB,WAA8B,EAAE,cAAmC;QACpF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,WAAmB;QAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAEjG,OAAO,IAAI,0BAA0B,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import { RegexPatternNode } from "../../models/nodes/regex-pattern.node.js";
9
+ export class RegexPatternParser {
10
+ regexParser;
11
+ constructor(regexParser) {
12
+ this.regexParser = regexParser;
13
+ }
14
+ parse() {
15
+ const startOffset = this.regexParser.currentNode.span.startOffset;
16
+ const disjunctionNode = this.regexParser.parseDisjunction(false);
17
+ const endOffset = this.regexParser.currentNode.span.startOffset;
18
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
19
+ const value = this.regexParser.context.source.getText(span);
20
+ return new RegexPatternNode(value, disjunctionNode, span);
21
+ }
22
+ }
23
+ //# sourceMappingURL=regex-pattern.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-pattern.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-pattern.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,MAAM,OAAO,kBAAkB;IACZ,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAClE,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE5D,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;CACF"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import "@noldova/context.text";
10
+ import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
11
+ import { RegexOpenBraceNode } from "../../models/nodes/punctuators/regex-open-brace.node.js";
12
+ import { RegexQuestionNode } from "../../models/nodes/punctuators/regex-question.node.js";
13
+ import { RegexQuantifierNode } from "../../models/nodes/regex-quantifier.node.js";
14
+ import { Resources } from "../../resources.js";
15
+ export class RegexQuantifierParser {
16
+ regexParser;
17
+ constructor(regexParser) {
18
+ this.regexParser = regexParser;
19
+ }
20
+ parse() {
21
+ const minimum = this.regexParser.currentNode.getRegexQuantifierMinimum();
22
+ if (!Object.isUndefined(minimum))
23
+ return this.parseSimple(minimum, this.regexParser.currentNode.getRegexQuantifierMaximum());
24
+ return this.regexParser.currentNode instanceof RegexOpenBraceNode
25
+ ? this.parseBraced()
26
+ : undefined;
27
+ }
28
+ parseBraced() {
29
+ const reader = this.regexParser.regexLexer.reader;
30
+ const startOffset = this.regexParser.currentNode.span.startOffset;
31
+ let offset = 0;
32
+ let character = reader.peekCodeUnit(offset);
33
+ while (String.isAsciiDigit(character)) {
34
+ offset++;
35
+ character = reader.peekCodeUnit(offset);
36
+ }
37
+ if (offset === 0)
38
+ return undefined;
39
+ const minimumStartOffset = startOffset + Resources.openBrace.length;
40
+ const minimumText = this.regexParser.context.source.getText(minimumStartOffset, reader.currentOffset + offset - minimumStartOffset);
41
+ let maximumText = minimumText;
42
+ const separator = reader.peekCodeUnit(offset);
43
+ if (separator === Resources.comma) {
44
+ offset += Resources.comma.length;
45
+ const maximumStartOffset = offset;
46
+ character = reader.peekCodeUnit(offset);
47
+ while (String.isAsciiDigit(character)) {
48
+ offset++;
49
+ character = reader.peekCodeUnit(offset);
50
+ }
51
+ maximumText = offset === maximumStartOffset
52
+ ? String.empty
53
+ : this.regexParser.context.source.getText(reader.currentOffset + maximumStartOffset, offset - maximumStartOffset);
54
+ }
55
+ if (reader.peekCodeUnit(offset) !== Resources.closeBrace)
56
+ return undefined;
57
+ const endOffset = reader.currentOffset + offset + Resources.closeBrace.length;
58
+ while (this.regexParser.currentNode.span.endOffset < endOffset)
59
+ this.regexParser.advance();
60
+ this.regexParser.advance();
61
+ const greedy = !(this.regexParser.currentNode instanceof RegexQuestionNode);
62
+ if (!greedy)
63
+ this.regexParser.advance();
64
+ const finalEndOffset = this.regexParser.currentNode.span.startOffset;
65
+ const span = reader.createSpan(startOffset, finalEndOffset - startOffset);
66
+ const minimum = BigInt(minimumText);
67
+ const maximum = maximumText.length === 0
68
+ ? undefined
69
+ : BigInt(maximumText);
70
+ if (!Object.isUndefined(maximum) && minimum > maximum)
71
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1012, span);
72
+ return new RegexQuantifierNode(this.regexParser.context.source.getText(span), minimum, maximum, greedy, span);
73
+ }
74
+ parseSimple(minimum, maximum) {
75
+ const startOffset = this.regexParser.currentNode.span.startOffset;
76
+ this.regexParser.advance();
77
+ const greedy = !(this.regexParser.currentNode instanceof RegexQuestionNode);
78
+ if (!greedy)
79
+ this.regexParser.advance();
80
+ const endOffset = this.regexParser.currentNode.span.startOffset;
81
+ const span = this.regexParser.regexLexer.reader.createSpan(startOffset, endOffset - startOffset);
82
+ return new RegexQuantifierNode(this.regexParser.context.source.getText(span), minimum, maximum, greedy, span);
83
+ }
84
+ }
85
+ //# sourceMappingURL=regex-quantifier.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-quantifier.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-quantifier.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAC/B,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,MAAM,OAAO,qBAAqB;IACf,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAE7F,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,kBAAkB;YAC/D,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YACpB,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAEO,WAAW;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAClE,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,CAAC;YACT,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,MAAM,KAAK,CAAC;YACd,OAAO,SAAS,CAAC;QAEnB,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;QACpE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,aAAa,GAAG,MAAM,GAAG,kBAAkB,CAAC,CAAC;QACpI,IAAI,WAAW,GAAG,WAAW,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,SAAS,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,MAAM,kBAAkB,GAAG,MAAM,CAAC;YAClC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,MAAM,EAAE,CAAC;gBACT,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC;YAED,WAAW,GAAG,MAAM,KAAK,kBAAkB;gBACzC,CAAC,CAAC,MAAM,CAAC,KAAK;gBACd,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,kBAAkB,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC;QACtH,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,UAAU;YACtD,OAAO,SAAS,CAAC;QAEnB,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9E,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS;YAC5D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,iBAAiB,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAE7B,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,cAAc,GAAG,WAAW,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC;YACtC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,OAAO;YACnD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE3F,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAChH,CAAC;IAEO,WAAW,CAAC,OAAe,EAAE,OAA2B;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAE3B,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,YAAY,iBAAiB,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC;QAEjG,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAChH,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import { RegexDiagnosticTemplates } from "../../models/diagnostics/regex-diagnostic-templates.js";
10
+ import { RegexLookaheadAssertionNode } from "../../models/nodes/assertions/regex-lookahead-assertion.node.js";
11
+ import { RegexCloseBraceNode } from "../../models/nodes/punctuators/regex-close-brace.node.js";
12
+ import { RegexCloseBracketNode } from "../../models/nodes/punctuators/regex-close-bracket.node.js";
13
+ import { RegexCloseParenthesisNode } from "../../models/nodes/punctuators/regex-close-parenthesis.node.js";
14
+ import { RegexOpenBraceNode } from "../../models/nodes/punctuators/regex-open-brace.node.js";
15
+ export class RegexTermParser {
16
+ regexParser;
17
+ constructor(regexParser) {
18
+ this.regexParser = regexParser;
19
+ }
20
+ parse() {
21
+ const assertion = this.regexParser.parseAssertion();
22
+ if (!Object.isUndefined(assertion)) {
23
+ if (!this.regexParser.regexLexer.unicodeMode && assertion instanceof RegexLookaheadAssertionNode) {
24
+ const quantifier = this.regexParser.parseQuantifier();
25
+ if (!Object.isUndefined(quantifier))
26
+ return [assertion, quantifier];
27
+ }
28
+ return [assertion];
29
+ }
30
+ const misplacedQuantifier = this.regexParser.parseQuantifier();
31
+ if (!Object.isUndefined(misplacedQuantifier)) {
32
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1013, misplacedQuantifier.span);
33
+ return [misplacedQuantifier];
34
+ }
35
+ const atom = this.regexParser.currentNode.parseRegexAtom(this.regexParser);
36
+ if (Object.isUndefined(atom)) {
37
+ const unrecognizedTerm = this.regexParser.currentNode;
38
+ if (unrecognizedTerm instanceof RegexCloseParenthesisNode
39
+ || this.regexParser.regexLexer.unicodeMode && (unrecognizedTerm instanceof RegexCloseBracketNode || unrecognizedTerm instanceof RegexCloseBraceNode))
40
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1033, unrecognizedTerm.span);
41
+ else if (this.regexParser.regexLexer.unicodeMode && unrecognizedTerm instanceof RegexOpenBraceNode)
42
+ this.regexParser.context.diagnosticCollector.add(RegexDiagnosticTemplates.CTX1011, unrecognizedTerm.span);
43
+ this.regexParser.advance();
44
+ return [unrecognizedTerm];
45
+ }
46
+ const quantifier = this.regexParser.parseQuantifier();
47
+ return Object.isUndefined(quantifier) ? [atom] : [atom, quantifier];
48
+ }
49
+ }
50
+ //# sourceMappingURL=regex-term.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-term.parser.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/parsers/regex-term.parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAI/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,MAAM,0DAA0D,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAG7F,MAAM,OAAO,eAAe;IACT,WAAW,CAAoB;IAEhD,YAAmB,WAA8B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,KAAK;QACV,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,IAAI,SAAS,YAAY,2BAA2B,EAAE,CAAC;gBACjG,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;oBACjC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACnC,CAAC;YAED,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC7G,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3E,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;YACtD,IAAI,gBAAgB,YAAY,yBAAyB;mBACpD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,gBAAgB,YAAY,qBAAqB,IAAI,gBAAgB,YAAY,mBAAmB,CAAC;gBACpJ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;iBACvG,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,IAAI,gBAAgB,YAAY,kBAAkB;gBAChG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAE5G,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import { RegexCapturingGroupSummary } from "../../models/regex-capturing-group-summary.js";
10
+ import { Resources } from "../../resources.js";
11
+ import { RegexGroupNameReader } from "./regex-group-name.reader.js";
12
+ export class RegexCapturingGroupSummaryReader {
13
+ groupNameReader = new RegexGroupNameReader();
14
+ read(reader, unicodeSetsMode) {
15
+ const startPosition = reader.currentOffset;
16
+ const namedCapturingGroupNames = new Set();
17
+ let capturingGroupCount = 0;
18
+ let characterClassDepth = 0;
19
+ while (!reader.isAtEnd) {
20
+ const character = reader.readCodeUnit();
21
+ if (character === Resources.backslash) {
22
+ reader.readCodePoint();
23
+ continue;
24
+ }
25
+ if (character === Resources.openBracket) {
26
+ if (characterClassDepth === 0 || unicodeSetsMode)
27
+ characterClassDepth++;
28
+ continue;
29
+ }
30
+ if (character === Resources.closeBracket && characterClassDepth > 0) {
31
+ characterClassDepth--;
32
+ continue;
33
+ }
34
+ if (characterClassDepth > 0 || character !== Resources.openParenthesis)
35
+ continue;
36
+ if (reader.peekCodeUnit() !== Resources.question) {
37
+ capturingGroupCount++;
38
+ continue;
39
+ }
40
+ const prefix = reader.peekCodeUnit(Resources.question.length);
41
+ if (prefix !== Resources.lessThan)
42
+ continue;
43
+ const following = reader.peekCodeUnit(Resources.question.length + Resources.lessThan.length);
44
+ if (following === Resources.equals || following === Resources.exclamation)
45
+ continue;
46
+ capturingGroupCount++;
47
+ reader.advance(Resources.question.length + Resources.lessThan.length);
48
+ const groupName = this.groupNameReader.read(reader);
49
+ if (!Object.isUndefined(groupName))
50
+ namedCapturingGroupNames.add(groupName.value);
51
+ }
52
+ reader.seek(startPosition);
53
+ return new RegexCapturingGroupSummary(capturingGroupCount, namedCapturingGroupNames);
54
+ }
55
+ }
56
+ //# sourceMappingURL=regex-capturing-group-summary.reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-capturing-group-summary.reader.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/readers/regex-capturing-group-summary.reader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAI/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,OAAO,gCAAgC;IAC1B,eAAe,GAAyB,IAAI,oBAAoB,EAAE,CAAC;IAE7E,IAAI,CAAC,MAAoB,EAAE,eAAwB;QACxD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC3C,MAAM,wBAAwB,GAAgB,IAAI,GAAG,EAAE,CAAC;QACxD,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAE5B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACxC,IAAI,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;gBACtC,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvB,SAAS;YACX,CAAC;YAED,IAAI,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;gBACxC,IAAI,mBAAmB,KAAK,CAAC,IAAI,eAAe;oBAC9C,mBAAmB,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,IAAI,SAAS,KAAK,SAAS,CAAC,YAAY,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;gBACpE,mBAAmB,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,IAAI,mBAAmB,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,eAAe;gBACpE,SAAS;YAEX,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACjD,mBAAmB,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,MAAM,KAAK,SAAS,CAAC,QAAQ;gBAC/B,SAAS;YAEX,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7F,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,KAAK,SAAS,CAAC,WAAW;gBACvE,SAAS;YAEX,mBAAmB,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;gBAChC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,IAAI,0BAA0B,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;IACvF,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import { StringBuilder } from "@noldova/context.text";
10
+ import { RegexGroupName } from "../../models/regex-group-name.js";
11
+ import { Resources } from "../../resources.js";
12
+ import { RegexGroupNameValidator } from "../validators/regex-group-name.validator.js";
13
+ import { RegexUnicodeEscapeReader } from "./regex-unicode-escape.reader.js";
14
+ export class RegexGroupNameReader {
15
+ groupNameValidator = new RegexGroupNameValidator();
16
+ unicodeEscapeReader = new RegexUnicodeEscapeReader();
17
+ read(reader) {
18
+ const value = new StringBuilder();
19
+ let isValid = true;
20
+ while (!reader.isAtEnd) {
21
+ if (reader.peekCodeUnit() === Resources.greaterThan) {
22
+ reader.advance();
23
+ return new RegexGroupName(value.toString(), isValid && value.length > 0);
24
+ }
25
+ let codePoint;
26
+ if (reader.peekCodeUnit() === Resources.backslash) {
27
+ const escapeStartOffset = reader.currentOffset;
28
+ const escape = this.unicodeEscapeReader.read(reader, true);
29
+ if (Object.isUndefined(escape)) {
30
+ reader.seek(escapeStartOffset);
31
+ return undefined;
32
+ }
33
+ codePoint = escape.codePoint;
34
+ }
35
+ else
36
+ codePoint = reader.readCodePoint();
37
+ if (!this.groupNameValidator.isValidCodePoint(codePoint, value.length === 0))
38
+ isValid = false;
39
+ value.append(String.fromCodePoint(codePoint));
40
+ }
41
+ return undefined;
42
+ }
43
+ }
44
+ //# sourceMappingURL=regex-group-name.reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-group-name.reader.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/readers/regex-group-name.reader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,uBAAuB,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,OAAO,oBAAoB;IACd,kBAAkB,GAA4B,IAAI,uBAAuB,EAAE,CAAC;IAC5E,mBAAmB,GAA6B,IAAI,wBAAwB,EAAE,CAAC;IAEzF,IAAI,CAAC,MAAoB;QAC9B,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;gBACpD,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3E,CAAC;YAED,IAAI,SAAiB,CAAC;YACtB,IAAI,MAAM,CAAC,YAAY,EAAE,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;gBAClD,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC3D,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAC/B,OAAO,SAAS,CAAC;gBACnB,CAAC;gBAED,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAC/B,CAAC;;gBAEC,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YAErC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;gBAC1E,OAAO,GAAG,KAAK,CAAC;YAClB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import "@noldova/context.core";
9
+ import { UnicodeCodePointService } from "@noldova/context.text";
10
+ import { RegexUnicodeEscapeValue } from "../../models/regex-unicode-escape-value.js";
11
+ import { Resources } from "../../resources.js";
12
+ export class RegexUnicodeEscapeReader {
13
+ static FIXED_DIGIT_COUNT = 4;
14
+ static HEXADECIMAL_RADIX = 16;
15
+ static MAXIMUM_CODE_POINT = 0x10FFFF;
16
+ static MINIMUM_LEAD_SURROGATE = 0xD800;
17
+ static MINIMUM_TRAIL_SURROGATE = 0xDC00;
18
+ static SURROGATE_FACTOR = 0x400;
19
+ static SURROGATE_OFFSET = 0x10000;
20
+ read(reader, unicodeMode) {
21
+ const startOffset = reader.currentOffset;
22
+ const prefix = Resources.unicodeEscapePrefix;
23
+ if (!reader.startsWith(prefix))
24
+ return undefined;
25
+ reader.advance(prefix.length);
26
+ if (unicodeMode && reader.peekCodeUnit() === Resources.openBrace)
27
+ return this.readBraced(reader, startOffset);
28
+ const firstCodePoint = this.readFixedCodePoint(reader);
29
+ if (Object.isUndefined(firstCodePoint))
30
+ return undefined;
31
+ if (!unicodeMode || !UnicodeCodePointService.isLeadingSurrogate(firstCodePoint))
32
+ return this.createValue(reader, startOffset, firstCodePoint);
33
+ const trailStartOffset = reader.currentOffset;
34
+ if (!reader.startsWith(prefix))
35
+ return this.createValue(reader, startOffset, firstCodePoint);
36
+ reader.advance(prefix.length);
37
+ const trailCodePoint = this.readFixedCodePoint(reader);
38
+ if (Object.isUndefined(trailCodePoint) || !UnicodeCodePointService.isTrailingSurrogate(trailCodePoint)) {
39
+ reader.seek(trailStartOffset);
40
+ return this.createValue(reader, startOffset, firstCodePoint);
41
+ }
42
+ const codePoint = (firstCodePoint - RegexUnicodeEscapeReader.MINIMUM_LEAD_SURROGATE) * RegexUnicodeEscapeReader.SURROGATE_FACTOR +
43
+ trailCodePoint - RegexUnicodeEscapeReader.MINIMUM_TRAIL_SURROGATE + RegexUnicodeEscapeReader.SURROGATE_OFFSET;
44
+ return this.createValue(reader, startOffset, codePoint);
45
+ }
46
+ createValue(reader, startOffset, codePoint) {
47
+ const value = reader.source.getText(startOffset, reader.currentOffset - startOffset);
48
+ return new RegexUnicodeEscapeValue(value, codePoint);
49
+ }
50
+ readBraced(reader, startOffset) {
51
+ reader.advance();
52
+ const digits = reader.readWhile(String.isAsciiHexDigit);
53
+ if (digits.length === 0 || reader.peekCodeUnit() !== Resources.closeBrace)
54
+ return undefined;
55
+ const codePoint = Number.parseInt(digits.toString(), RegexUnicodeEscapeReader.HEXADECIMAL_RADIX);
56
+ if (codePoint > RegexUnicodeEscapeReader.MAXIMUM_CODE_POINT)
57
+ return undefined;
58
+ reader.advance();
59
+ return this.createValue(reader, startOffset, codePoint);
60
+ }
61
+ readFixedCodePoint(reader) {
62
+ const digitStartOffset = reader.currentOffset;
63
+ for (let index = 0; index < RegexUnicodeEscapeReader.FIXED_DIGIT_COUNT; index++) {
64
+ if (!String.isAsciiHexDigit(reader.peekCodeUnit()))
65
+ return undefined;
66
+ reader.advance();
67
+ }
68
+ const digits = reader.source.getText(digitStartOffset, reader.currentOffset - digitStartOffset);
69
+ return Number.parseInt(digits, RegexUnicodeEscapeReader.HEXADECIMAL_RADIX);
70
+ }
71
+ }
72
+ //# sourceMappingURL=regex-unicode-escape.reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-unicode-escape.reader.js","sourceRoot":"","sources":["../../../../../src/parsers/noldova.context.parsers.regex/src/services/readers/regex-unicode-escape.reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) Noldova.
4
+ *
5
+ * This source code is licensed under the license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import { RegexNamedGroupBranch } from "../models/regex-named-group-branch.js";
9
+ export class RegexNamedGroupRegistry {
10
+ groups = new Map();
11
+ hasConflict(groupName, branches) {
12
+ let current = this.groups.get(groupName);
13
+ if (Object.isUndefined(current))
14
+ return false;
15
+ for (const branch of branches) {
16
+ const alternatives = current.disjunctions.get(branch.disjunctionIndex);
17
+ if (Object.isUndefined(alternatives) || current.isTerminal || current.disjunctions.size > 1)
18
+ return true;
19
+ const next = alternatives.get(branch.alternativeIndex);
20
+ if (Object.isUndefined(next))
21
+ return false;
22
+ current = next;
23
+ }
24
+ return true;
25
+ }
26
+ add(groupName, branches) {
27
+ let current = this.groups.get(groupName);
28
+ if (Object.isUndefined(current)) {
29
+ current = new RegexNamedGroupBranch();
30
+ this.groups.set(groupName, current);
31
+ }
32
+ for (const branch of branches) {
33
+ let alternatives = current.disjunctions.get(branch.disjunctionIndex);
34
+ if (Object.isUndefined(alternatives)) {
35
+ alternatives = new Map();
36
+ current.disjunctions.set(branch.disjunctionIndex, alternatives);
37
+ }
38
+ let next = alternatives.get(branch.alternativeIndex);
39
+ if (Object.isUndefined(next)) {
40
+ next = new RegexNamedGroupBranch();
41
+ alternatives.set(branch.alternativeIndex, next);
42
+ }
43
+ current = next;
44
+ }
45
+ current.isTerminal = true;
46
+ }
47
+ }
48
+ //# sourceMappingURL=regex-named-group-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-named-group-registry.js","sourceRoot":"","sources":["../../../../src/parsers/noldova.context.parsers.regex/src/services/regex-named-group-registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,MAAM,OAAO,uBAAuB;IACjB,MAAM,GAAuC,IAAI,GAAG,EAAE,CAAC;IAEjE,WAAW,CAAC,SAAiB,EAAE,QAA2C;QAC/E,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YAC7B,OAAO,KAAK,CAAC;QAEf,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAmD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACvH,IAAI,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;gBACzF,OAAO,IAAI,CAAC;YAEd,MAAM,IAAI,GAAsC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC1F,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC1B,OAAO,KAAK,CAAC;YAEf,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,GAAG,CAAC,SAAiB,EAAE,QAA2C;QACvE,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,YAAY,GAAmD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACrH,IAAI,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;gBACzB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,IAAI,GAAsC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACxF,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,GAAG,IAAI,qBAAqB,EAAE,CAAC;gBACnC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;YAED,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAC5B,CAAC;CACF"}