omextra 0.0.0.dev493__tar.gz → 0.0.0.dev495__tar.gz

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 (168) hide show
  1. {omextra-0.0.0.dev493/omextra.egg-info → omextra-0.0.0.dev495}/PKG-INFO +2 -2
  2. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/abnf/__init__.py +17 -4
  3. omextra-0.0.0.dev495/omextra/text/abnf/_dataclasses.py +438 -0
  4. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/abnf/base.py +49 -82
  5. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/abnf/core.py +5 -5
  6. omextra-0.0.0.dev495/omextra/text/abnf/docs/rfc5234.txt +893 -0
  7. omextra-0.0.0.dev495/omextra/text/abnf/docs/rfc7405.txt +221 -0
  8. omextra-0.0.0.dev495/omextra/text/abnf/internal.py +32 -0
  9. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/abnf/meta.py +37 -36
  10. omextra-0.0.0.dev495/omextra/text/abnf/ops.py +276 -0
  11. omextra-0.0.0.dev495/omextra/text/abnf/parsing.py +212 -0
  12. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/abnf/utils.py +4 -9
  13. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/abnf/visitors.py +8 -8
  14. omextra-0.0.0.dev495/omextra/text/antlr/cli/__init__.py +0 -0
  15. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495/omextra.egg-info}/PKG-INFO +2 -2
  16. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra.egg-info/SOURCES.txt +7 -1
  17. omextra-0.0.0.dev495/omextra.egg-info/requires.txt +1 -0
  18. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/pyproject.toml +3 -2
  19. omextra-0.0.0.dev493/omextra/text/abnf/parsers.py +0 -343
  20. omextra-0.0.0.dev493/omextra.egg-info/requires.txt +0 -1
  21. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/LICENSE +0 -0
  22. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/MANIFEST.in +0 -0
  23. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/README.md +0 -0
  24. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/.omlish-manifests.json +0 -0
  25. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/README.md +0 -0
  26. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/__about__.py +0 -0
  27. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/__init__.py +0 -0
  28. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/__init__.py +0 -0
  29. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/LICENSE +0 -0
  30. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/__init__.py +0 -0
  31. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/all.py +0 -0
  32. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/api.py +0 -0
  33. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/core.py +0 -0
  34. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/events.py +0 -0
  35. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/files.py +0 -0
  36. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/runner.py +0 -0
  37. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bluelet/sockets.py +0 -0
  38. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/asyncs/bridge.py +0 -0
  39. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/collections/__init__.py +0 -0
  40. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/collections/hamt/LICENSE +0 -0
  41. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/collections/hamt/__init__.py +0 -0
  42. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/collections/hamt/_hamt.c +0 -0
  43. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/defs.py +0 -0
  44. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/dynamic.py +0 -0
  45. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/__init__.py +0 -0
  46. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/goyaml/LICENSE +0 -0
  47. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/goyaml/__init__.py +0 -0
  48. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/goyaml/ast.py +0 -0
  49. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/goyaml/errors.py +0 -0
  50. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/goyaml/parsing.py +0 -0
  51. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/goyaml/scanning.py +0 -0
  52. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/goyaml/tokens.py +0 -0
  53. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json/Json.g4 +0 -0
  54. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json/__init__.py +0 -0
  55. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json/_antlr/JsonLexer.py +0 -0
  56. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json/_antlr/JsonListener.py +0 -0
  57. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json/_antlr/JsonParser.py +0 -0
  58. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json/_antlr/JsonVisitor.py +0 -0
  59. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json/_antlr/__init__.py +0 -0
  60. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json5/Json5.g4 +0 -0
  61. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json5/__init__.py +0 -0
  62. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json5/_antlr/Json5Lexer.py +0 -0
  63. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json5/_antlr/Json5Listener.py +0 -0
  64. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json5/_antlr/Json5Parser.py +0 -0
  65. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json5/_antlr/Json5Visitor.py +0 -0
  66. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json5/_antlr/__init__.py +0 -0
  67. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/formats/json5/parsing.py +0 -0
  68. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/io/__init__.py +0 -0
  69. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/io/trampoline.py +0 -0
  70. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/__init__.py +0 -0
  71. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/Protobuf3.g4 +0 -0
  72. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/__init__.py +0 -0
  73. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/_antlr/Protobuf3Lexer.py +0 -0
  74. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/_antlr/Protobuf3Listener.py +0 -0
  75. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/_antlr/Protobuf3Parser.py +0 -0
  76. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/_antlr/Protobuf3Visitor.py +0 -0
  77. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/_antlr/__init__.py +0 -0
  78. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/nodes.py +0 -0
  79. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/specs/proto/parsing.py +0 -0
  80. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/__init__.py +0 -0
  81. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/parsing/Minisql.g4 +0 -0
  82. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/parsing/__init__.py +0 -0
  83. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/parsing/_antlr/MinisqlLexer.py +0 -0
  84. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/parsing/_antlr/MinisqlListener.py +0 -0
  85. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/parsing/_antlr/MinisqlParser.py +0 -0
  86. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/parsing/_antlr/MinisqlVisitor.py +0 -0
  87. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/parsing/_antlr/__init__.py +0 -0
  88. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/sql/parsing/parsing.py +0 -0
  89. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/__init__.py +0 -0
  90. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/abnf/LICENSE +0 -0
  91. {omextra-0.0.0.dev493/omextra/text/antlr/cli → omextra-0.0.0.dev495/omextra/text/abnf/docs}/__init__.py +0 -0
  92. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/abnf/errors.py +0 -0
  93. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/__init__.py +0 -0
  94. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/BufferedTokenStream.py +0 -0
  95. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/CommonTokenFactory.py +0 -0
  96. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/CommonTokenStream.py +0 -0
  97. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/FileStream.py +0 -0
  98. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/InputStream.py +0 -0
  99. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/IntervalSet.py +0 -0
  100. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/LICENSE.txt +0 -0
  101. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/LL1Analyzer.py +0 -0
  102. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/Lexer.py +0 -0
  103. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/ListTokenSource.py +0 -0
  104. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/Parser.py +0 -0
  105. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/ParserInterpreter.py +0 -0
  106. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/ParserRuleContext.py +0 -0
  107. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/PredictionContext.py +0 -0
  108. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/Recognizer.py +0 -0
  109. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/RuleContext.py +0 -0
  110. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/StdinStream.py +0 -0
  111. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/Token.py +0 -0
  112. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/TokenStreamRewriter.py +0 -0
  113. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/Utils.py +0 -0
  114. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/__init__.py +0 -0
  115. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/_all.py +0 -0
  116. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/_pygrun.py +0 -0
  117. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ATN.py +0 -0
  118. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ATNConfig.py +0 -0
  119. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ATNConfigSet.py +0 -0
  120. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ATNDeserializationOptions.py +0 -0
  121. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ATNDeserializer.py +0 -0
  122. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ATNSimulator.py +0 -0
  123. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ATNState.py +0 -0
  124. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ATNType.py +0 -0
  125. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/LexerATNSimulator.py +0 -0
  126. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/LexerAction.py +0 -0
  127. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/LexerActionExecutor.py +0 -0
  128. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/ParserATNSimulator.py +0 -0
  129. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/PredictionMode.py +0 -0
  130. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/SemanticContext.py +0 -0
  131. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/Transition.py +0 -0
  132. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/atn/__init__.py +0 -0
  133. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/dfa/DFA.py +0 -0
  134. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/dfa/DFASerializer.py +0 -0
  135. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/dfa/DFAState.py +0 -0
  136. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/dfa/__init__.py +0 -0
  137. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/error/DiagnosticErrorListener.py +0 -0
  138. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/error/ErrorListener.py +0 -0
  139. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/error/ErrorStrategy.py +0 -0
  140. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/error/Errors.py +0 -0
  141. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/error/__init__.py +0 -0
  142. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/Chunk.py +0 -0
  143. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/ParseTreeMatch.py +0 -0
  144. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/ParseTreePattern.py +0 -0
  145. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/ParseTreePatternMatcher.py +0 -0
  146. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/RuleTagToken.py +0 -0
  147. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/TokenTagToken.py +0 -0
  148. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/Tree.py +0 -0
  149. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/Trees.py +0 -0
  150. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/tree/__init__.py +0 -0
  151. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/xpath/XPath.py +0 -0
  152. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/xpath/XPathLexer.py +0 -0
  153. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/_runtime/xpath/__init__.py +0 -0
  154. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/cli/__main__.py +0 -0
  155. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/cli/cli.py +0 -0
  156. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/cli/consts.py +0 -0
  157. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/cli/gen.py +0 -0
  158. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/delimit.py +0 -0
  159. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/dot.py +0 -0
  160. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/errors.py +0 -0
  161. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/input.py +0 -0
  162. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/parsing.py +0 -0
  163. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/runtime.py +0 -0
  164. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra/text/antlr/utils.py +0 -0
  165. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra.egg-info/dependency_links.txt +0 -0
  166. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra.egg-info/entry_points.txt +0 -0
  167. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/omextra.egg-info/top_level.txt +0 -0
  168. {omextra-0.0.0.dev493 → omextra-0.0.0.dev495}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omextra
3
- Version: 0.0.0.dev493
3
+ Version: 0.0.0.dev495
4
4
  Summary: omextra
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev493
17
+ Requires-Dist: omlish==0.0.0.dev495
18
18
  Dynamic: license-file
19
19
 
20
20
  # Overview
@@ -16,14 +16,27 @@ TODO:
16
16
  - greedily compile regexes
17
17
  - error reporting
18
18
  - codegen
19
+ - fix_ws problem
20
+ - auto? no, need to keep lines / offsets accurate for errors
21
+ - relax CRLF rule by default?
19
22
  """
23
+ from omlish import dataclasses as _dc # noqa
24
+
25
+
26
+ _dc.init_package(
27
+ globals(),
28
+ codegen=True,
29
+ )
30
+
31
+
32
+ ##
20
33
 
21
34
 
22
35
  from .base import ( # noqa
23
36
  Match,
24
37
  longest_match,
25
38
 
26
- Parser,
39
+ Op,
27
40
 
28
41
  Rule,
29
42
  Grammar,
@@ -48,7 +61,7 @@ from .meta import ( # noqa
48
61
  parse_grammar,
49
62
  )
50
63
 
51
- from .parsers import ( # noqa
64
+ from .ops import ( # noqa
52
65
  Literal,
53
66
  StringLiteral,
54
67
  CaseInsensitiveStringLiteral,
@@ -59,8 +72,8 @@ from .parsers import ( # noqa
59
72
  concat,
60
73
 
61
74
  Repeat,
62
- Option,
63
75
  repeat,
76
+ option,
64
77
 
65
78
  Either,
66
79
  either,
@@ -75,5 +88,5 @@ from .utils import ( # noqa
75
88
 
76
89
  parse_rules,
77
90
 
78
- fix_grammar_ws,
91
+ fix_ws,
79
92
  )
@@ -0,0 +1,438 @@
1
+ # @omlish-generated
2
+ # type: ignore
3
+ # ruff: noqa
4
+ # flake8: noqa
5
+ import dataclasses
6
+ import reprlib
7
+ import types
8
+
9
+
10
+ ##
11
+
12
+
13
+ REGISTRY = {}
14
+
15
+
16
+ def _register(**kwargs):
17
+ def inner(fn):
18
+ REGISTRY[kwargs['plan_repr']] = (kwargs, fn)
19
+ return fn
20
+ return inner
21
+
22
+
23
+ ##
24
+
25
+
26
+ @_register(
27
+ plan_repr=(
28
+ "Plans(tup=(CopyPlan(fields=('s',)), EqPlan(fields=('s',)), FrozenPlan(fields=('s',), allow_dynamic_dunder_attr"
29
+ "s=False), HashPlan(action='add', fields=('s',), cache=False), InitPlan(fields=(InitPlan.Field(name='s', annota"
30
+ "tion=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init=True, override=False, fi"
31
+ "eld_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None),), self_param='self', std_params=('s"
32
+ "',), kw_only_params=(), frozen=True, slots=False, post_init_params=None, init_fns=(), validate_fns=()), ReprPl"
33
+ "an(fields=(ReprPlan.Field(name='s', kw_only=False, fn=None),), id=False, terse=False, default_fn=None)))"
34
+ ),
35
+ plan_repr_sha1='30a5dd74853303d917aae5f67d4e7189615d1440',
36
+ op_ref_idents=(
37
+ '__dataclass__init__fields__0__annotation',
38
+ ),
39
+ cls_names=(
40
+ ('omextra.text.abnf', 'MetaGrammarRuleMatchVisitor.QuotedString'),
41
+ ('omextra.text.abnf', 'MetaGrammarRuleMatchVisitor.RuleName'),
42
+ ),
43
+ )
44
+ def _process_dataclass__30a5dd74853303d917aae5f67d4e7189615d1440():
45
+ def _process_dataclass(
46
+ *,
47
+ __dataclass__cls,
48
+ __dataclass__init__fields__0__annotation,
49
+ __dataclass__FieldFnValidationError, # noqa
50
+ __dataclass__FieldTypeValidationError, # noqa
51
+ __dataclass__FnValidationError, # noqa
52
+ __dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
53
+ __dataclass__FunctionType=types.FunctionType, # noqa
54
+ __dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
55
+ __dataclass__MISSING=dataclasses.MISSING, # noqa
56
+ __dataclass__None=None, # noqa
57
+ __dataclass__TypeError=TypeError, # noqa
58
+ __dataclass___recursive_repr=reprlib.recursive_repr, # noqa
59
+ __dataclass__isinstance=isinstance, # noqa
60
+ __dataclass__object_setattr=object.__setattr__, # noqa
61
+ __dataclass__property=property, # noqa
62
+ ):
63
+ def __copy__(self):
64
+ if self.__class__ is not __dataclass__cls:
65
+ raise TypeError(self)
66
+ return __dataclass__cls( # noqa
67
+ s=self.s,
68
+ )
69
+
70
+ __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
71
+ if '__copy__' in __dataclass__cls.__dict__:
72
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
73
+ setattr(__dataclass__cls, '__copy__', __copy__)
74
+
75
+ def __eq__(self, other):
76
+ if self is other:
77
+ return True
78
+ if self.__class__ is not other.__class__:
79
+ return NotImplemented
80
+ return (
81
+ self.s == other.s
82
+ )
83
+
84
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
85
+ if '__eq__' in __dataclass__cls.__dict__:
86
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
87
+ setattr(__dataclass__cls, '__eq__', __eq__)
88
+
89
+ __dataclass___setattr_frozen_fields = {
90
+ 's',
91
+ }
92
+
93
+ def __setattr__(self, name, value):
94
+ if (
95
+ type(self) is __dataclass__cls
96
+ or name in __dataclass___setattr_frozen_fields
97
+ ):
98
+ raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
99
+ super(__dataclass__cls, self).__setattr__(name, value)
100
+
101
+ __setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
102
+ if '__setattr__' in __dataclass__cls.__dict__:
103
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
104
+ setattr(__dataclass__cls, '__setattr__', __setattr__)
105
+
106
+ __dataclass___delattr_frozen_fields = {
107
+ 's',
108
+ }
109
+
110
+ def __delattr__(self, name):
111
+ if (
112
+ type(self) is __dataclass__cls
113
+ or name in __dataclass___delattr_frozen_fields
114
+ ):
115
+ raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
116
+ super(__dataclass__cls, self).__delattr__(name)
117
+
118
+ __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
119
+ if '__delattr__' in __dataclass__cls.__dict__:
120
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
121
+ setattr(__dataclass__cls, '__delattr__', __delattr__)
122
+
123
+ def __hash__(self):
124
+ return hash((
125
+ self.s,
126
+ ))
127
+
128
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
129
+ setattr(__dataclass__cls, '__hash__', __hash__)
130
+
131
+ def __init__(
132
+ self,
133
+ s: __dataclass__init__fields__0__annotation,
134
+ ) -> __dataclass__None:
135
+ __dataclass__object_setattr(self, 's', s)
136
+
137
+ __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
138
+ if '__init__' in __dataclass__cls.__dict__:
139
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
140
+ setattr(__dataclass__cls, '__init__', __init__)
141
+
142
+ @__dataclass___recursive_repr()
143
+ def __repr__(self):
144
+ parts = []
145
+ parts.append(f"s={self.s!r}")
146
+ return (
147
+ f"{self.__class__.__qualname__}("
148
+ f"{', '.join(parts)}"
149
+ f")"
150
+ )
151
+
152
+ __repr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__repr__"
153
+ if '__repr__' in __dataclass__cls.__dict__:
154
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __repr__ in class {__dataclass__cls.__name__}")
155
+ setattr(__dataclass__cls, '__repr__', __repr__)
156
+
157
+ return _process_dataclass
158
+
159
+
160
+ @_register(
161
+ plan_repr=(
162
+ "Plans(tup=(CopyPlan(fields=('lo', 'hi')), EqPlan(fields=('lo', 'hi')), FrozenPlan(fields=('lo', 'hi'), allow_d"
163
+ "ynamic_dunder_attrs=False), HashPlan(action='add', fields=('lo', 'hi'), cache=False), InitPlan(fields=(InitPla"
164
+ "n.Field(name='lo', annotation=OpRef(name='init.fields.0.annotation'), default=None, default_factory=None, init"
165
+ "=True, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None), InitPlan.F"
166
+ "ield(name='hi', annotation=OpRef(name='init.fields.1.annotation'), default=None, default_factory=None, init=Tr"
167
+ "ue, override=False, field_type=FieldType.INSTANCE, coerce=None, validate=None, check_type=None)), self_param='"
168
+ "self', std_params=('lo', 'hi'), kw_only_params=(), frozen=True, slots=False, post_init_params=(), init_fns=(),"
169
+ " validate_fns=()), ReprPlan(fields=(ReprPlan.Field(name='lo', kw_only=False, fn=None), ReprPlan.Field(name='hi"
170
+ "', kw_only=False, fn=None)), id=False, terse=False, default_fn=None)))"
171
+ ),
172
+ plan_repr_sha1='9104a51696bc4129d13d616118c0f732322e677c',
173
+ op_ref_idents=(
174
+ '__dataclass__init__fields__0__annotation',
175
+ '__dataclass__init__fields__1__annotation',
176
+ ),
177
+ cls_names=(
178
+ ('omextra.text.abnf', 'RangeLiteral.Range'),
179
+ ),
180
+ )
181
+ def _process_dataclass__9104a51696bc4129d13d616118c0f732322e677c():
182
+ def _process_dataclass(
183
+ *,
184
+ __dataclass__cls,
185
+ __dataclass__init__fields__0__annotation,
186
+ __dataclass__init__fields__1__annotation,
187
+ __dataclass__FieldFnValidationError, # noqa
188
+ __dataclass__FieldTypeValidationError, # noqa
189
+ __dataclass__FnValidationError, # noqa
190
+ __dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
191
+ __dataclass__FunctionType=types.FunctionType, # noqa
192
+ __dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
193
+ __dataclass__MISSING=dataclasses.MISSING, # noqa
194
+ __dataclass__None=None, # noqa
195
+ __dataclass__TypeError=TypeError, # noqa
196
+ __dataclass___recursive_repr=reprlib.recursive_repr, # noqa
197
+ __dataclass__isinstance=isinstance, # noqa
198
+ __dataclass__object_setattr=object.__setattr__, # noqa
199
+ __dataclass__property=property, # noqa
200
+ ):
201
+ def __copy__(self):
202
+ if self.__class__ is not __dataclass__cls:
203
+ raise TypeError(self)
204
+ return __dataclass__cls( # noqa
205
+ lo=self.lo,
206
+ hi=self.hi,
207
+ )
208
+
209
+ __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
210
+ if '__copy__' in __dataclass__cls.__dict__:
211
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
212
+ setattr(__dataclass__cls, '__copy__', __copy__)
213
+
214
+ def __eq__(self, other):
215
+ if self is other:
216
+ return True
217
+ if self.__class__ is not other.__class__:
218
+ return NotImplemented
219
+ return (
220
+ self.lo == other.lo and
221
+ self.hi == other.hi
222
+ )
223
+
224
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
225
+ if '__eq__' in __dataclass__cls.__dict__:
226
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
227
+ setattr(__dataclass__cls, '__eq__', __eq__)
228
+
229
+ __dataclass___setattr_frozen_fields = {
230
+ 'lo',
231
+ 'hi',
232
+ }
233
+
234
+ def __setattr__(self, name, value):
235
+ if (
236
+ type(self) is __dataclass__cls
237
+ or name in __dataclass___setattr_frozen_fields
238
+ ):
239
+ raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
240
+ super(__dataclass__cls, self).__setattr__(name, value)
241
+
242
+ __setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
243
+ if '__setattr__' in __dataclass__cls.__dict__:
244
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
245
+ setattr(__dataclass__cls, '__setattr__', __setattr__)
246
+
247
+ __dataclass___delattr_frozen_fields = {
248
+ 'lo',
249
+ 'hi',
250
+ }
251
+
252
+ def __delattr__(self, name):
253
+ if (
254
+ type(self) is __dataclass__cls
255
+ or name in __dataclass___delattr_frozen_fields
256
+ ):
257
+ raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
258
+ super(__dataclass__cls, self).__delattr__(name)
259
+
260
+ __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
261
+ if '__delattr__' in __dataclass__cls.__dict__:
262
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
263
+ setattr(__dataclass__cls, '__delattr__', __delattr__)
264
+
265
+ def __hash__(self):
266
+ return hash((
267
+ self.lo,
268
+ self.hi,
269
+ ))
270
+
271
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
272
+ setattr(__dataclass__cls, '__hash__', __hash__)
273
+
274
+ def __init__(
275
+ self,
276
+ lo: __dataclass__init__fields__0__annotation,
277
+ hi: __dataclass__init__fields__1__annotation,
278
+ ) -> __dataclass__None:
279
+ __dataclass__object_setattr(self, 'lo', lo)
280
+ __dataclass__object_setattr(self, 'hi', hi)
281
+ self.__post_init__()
282
+
283
+ __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
284
+ if '__init__' in __dataclass__cls.__dict__:
285
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
286
+ setattr(__dataclass__cls, '__init__', __init__)
287
+
288
+ @__dataclass___recursive_repr()
289
+ def __repr__(self):
290
+ parts = []
291
+ parts.append(f"lo={self.lo!r}")
292
+ parts.append(f"hi={self.hi!r}")
293
+ return (
294
+ f"{self.__class__.__qualname__}("
295
+ f"{', '.join(parts)}"
296
+ f")"
297
+ )
298
+
299
+ __repr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__repr__"
300
+ if '__repr__' in __dataclass__cls.__dict__:
301
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __repr__ in class {__dataclass__cls.__name__}")
302
+ setattr(__dataclass__cls, '__repr__', __repr__)
303
+
304
+ return _process_dataclass
305
+
306
+
307
+ @_register(
308
+ plan_repr=(
309
+ "Plans(tup=(CopyPlan(fields=('min', 'max')), EqPlan(fields=('min', 'max')), FrozenPlan(fields=('min', 'max'), a"
310
+ "llow_dynamic_dunder_attrs=False), HashPlan(action='add', fields=('min', 'max'), cache=False), InitPlan(fields="
311
+ "(InitPlan.Field(name='min', annotation=OpRef(name='init.fields.0.annotation'), default=OpRef(name='init.fields"
312
+ ".0.default'), default_factory=None, init=True, override=False, field_type=FieldType.INSTANCE, coerce=None, val"
313
+ "idate=None, check_type=None), InitPlan.Field(name='max', annotation=OpRef(name='init.fields.1.annotation'), de"
314
+ "fault=OpRef(name='init.fields.1.default'), default_factory=None, init=True, override=False, field_type=FieldTy"
315
+ "pe.INSTANCE, coerce=None, validate=None, check_type=None)), self_param='self', std_params=('min', 'max'), kw_o"
316
+ "nly_params=(), frozen=True, slots=False, post_init_params=(), init_fns=(), validate_fns=())))"
317
+ ),
318
+ plan_repr_sha1='3dce49e08774c707abbc7a6513e35ccdc43001c9',
319
+ op_ref_idents=(
320
+ '__dataclass__init__fields__0__annotation',
321
+ '__dataclass__init__fields__0__default',
322
+ '__dataclass__init__fields__1__annotation',
323
+ '__dataclass__init__fields__1__default',
324
+ ),
325
+ cls_names=(
326
+ ('omextra.text.abnf', 'Repeat.Times'),
327
+ ),
328
+ )
329
+ def _process_dataclass__3dce49e08774c707abbc7a6513e35ccdc43001c9():
330
+ def _process_dataclass(
331
+ *,
332
+ __dataclass__cls,
333
+ __dataclass__init__fields__0__annotation,
334
+ __dataclass__init__fields__0__default,
335
+ __dataclass__init__fields__1__annotation,
336
+ __dataclass__init__fields__1__default,
337
+ __dataclass__FieldFnValidationError, # noqa
338
+ __dataclass__FieldTypeValidationError, # noqa
339
+ __dataclass__FnValidationError, # noqa
340
+ __dataclass__FrozenInstanceError=dataclasses.FrozenInstanceError, # noqa
341
+ __dataclass__FunctionType=types.FunctionType, # noqa
342
+ __dataclass__HAS_DEFAULT_FACTORY=dataclasses._HAS_DEFAULT_FACTORY, # noqa
343
+ __dataclass__MISSING=dataclasses.MISSING, # noqa
344
+ __dataclass__None=None, # noqa
345
+ __dataclass__TypeError=TypeError, # noqa
346
+ __dataclass___recursive_repr=reprlib.recursive_repr, # noqa
347
+ __dataclass__isinstance=isinstance, # noqa
348
+ __dataclass__object_setattr=object.__setattr__, # noqa
349
+ __dataclass__property=property, # noqa
350
+ ):
351
+ def __copy__(self):
352
+ if self.__class__ is not __dataclass__cls:
353
+ raise TypeError(self)
354
+ return __dataclass__cls( # noqa
355
+ min=self.min,
356
+ max=self.max,
357
+ )
358
+
359
+ __copy__.__qualname__ = f"{__dataclass__cls.__qualname__}.__copy__"
360
+ if '__copy__' in __dataclass__cls.__dict__:
361
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __copy__ in class {__dataclass__cls.__name__}")
362
+ setattr(__dataclass__cls, '__copy__', __copy__)
363
+
364
+ def __eq__(self, other):
365
+ if self is other:
366
+ return True
367
+ if self.__class__ is not other.__class__:
368
+ return NotImplemented
369
+ return (
370
+ self.min == other.min and
371
+ self.max == other.max
372
+ )
373
+
374
+ __eq__.__qualname__ = f"{__dataclass__cls.__qualname__}.__eq__"
375
+ if '__eq__' in __dataclass__cls.__dict__:
376
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __eq__ in class {__dataclass__cls.__name__}")
377
+ setattr(__dataclass__cls, '__eq__', __eq__)
378
+
379
+ __dataclass___setattr_frozen_fields = {
380
+ 'min',
381
+ 'max',
382
+ }
383
+
384
+ def __setattr__(self, name, value):
385
+ if (
386
+ type(self) is __dataclass__cls
387
+ or name in __dataclass___setattr_frozen_fields
388
+ ):
389
+ raise __dataclass__FrozenInstanceError(f"cannot assign to field {name!r}")
390
+ super(__dataclass__cls, self).__setattr__(name, value)
391
+
392
+ __setattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__setattr__"
393
+ if '__setattr__' in __dataclass__cls.__dict__:
394
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __setattr__ in class {__dataclass__cls.__name__}")
395
+ setattr(__dataclass__cls, '__setattr__', __setattr__)
396
+
397
+ __dataclass___delattr_frozen_fields = {
398
+ 'min',
399
+ 'max',
400
+ }
401
+
402
+ def __delattr__(self, name):
403
+ if (
404
+ type(self) is __dataclass__cls
405
+ or name in __dataclass___delattr_frozen_fields
406
+ ):
407
+ raise __dataclass__FrozenInstanceError(f"cannot delete field {name!r}")
408
+ super(__dataclass__cls, self).__delattr__(name)
409
+
410
+ __delattr__.__qualname__ = f"{__dataclass__cls.__qualname__}.__delattr__"
411
+ if '__delattr__' in __dataclass__cls.__dict__:
412
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __delattr__ in class {__dataclass__cls.__name__}")
413
+ setattr(__dataclass__cls, '__delattr__', __delattr__)
414
+
415
+ def __hash__(self):
416
+ return hash((
417
+ self.min,
418
+ self.max,
419
+ ))
420
+
421
+ __hash__.__qualname__ = f"{__dataclass__cls.__qualname__}.__hash__"
422
+ setattr(__dataclass__cls, '__hash__', __hash__)
423
+
424
+ def __init__(
425
+ self,
426
+ min: __dataclass__init__fields__0__annotation = __dataclass__init__fields__0__default,
427
+ max: __dataclass__init__fields__1__annotation = __dataclass__init__fields__1__default,
428
+ ) -> __dataclass__None:
429
+ __dataclass__object_setattr(self, 'min', min)
430
+ __dataclass__object_setattr(self, 'max', max)
431
+ self.__post_init__()
432
+
433
+ __init__.__qualname__ = f"{__dataclass__cls.__qualname__}.__init__"
434
+ if '__init__' in __dataclass__cls.__dict__:
435
+ raise __dataclass__TypeError(f"Cannot overwrite attribute __init__ in class {__dataclass__cls.__name__}")
436
+ setattr(__dataclass__cls, '__init__', __init__)
437
+
438
+ return _process_dataclass