pyparsing 3.2.2__tar.gz → 3.2.4__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 (208) hide show
  1. {pyparsing-3.2.2 → pyparsing-3.2.4}/CHANGES +37 -2
  2. {pyparsing-3.2.2 → pyparsing-3.2.4}/CONTRIBUTING.md +94 -27
  3. {pyparsing-3.2.2 → pyparsing-3.2.4}/PKG-INFO +5 -4
  4. pyparsing-3.2.4/docs/CONTRIBUTING.md +1 -0
  5. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/HowToUsePyparsing.rst +0 -2
  6. pyparsing-3.2.4/docs/Writing_Doctests.rst +443 -0
  7. pyparsing-3.2.4/docs/_static/pyparsing.css +52 -0
  8. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/conf.py +77 -11
  9. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/index.rst +5 -2
  10. pyparsing-3.2.4/docs/pyparsing.rst +22 -0
  11. pyparsing-3.2.4/docs/requirements.txt +3 -0
  12. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/whats_new_in_3_0_0.rst +1 -3
  13. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/whats_new_in_3_1.rst +56 -43
  14. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/whats_new_in_3_2.rst +1 -3
  15. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/whats_new_in_x_x_template.rst.txt +0 -2
  16. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/__init__.py +18 -14
  17. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/actions.py +106 -62
  18. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/common.py +97 -46
  19. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/core.py +842 -413
  20. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/diagram/__init__.py +29 -15
  21. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/exceptions.py +26 -7
  22. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/helpers.py +380 -298
  23. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/results.py +312 -196
  24. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/testing.py +63 -37
  25. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/util.py +35 -13
  26. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyproject.toml +1 -2
  27. {pyparsing-3.2.2 → pyparsing-3.2.4}/readthedocs.yaml +7 -3
  28. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_unit.py +164 -11
  29. pyparsing-3.2.4/tox.ini +26 -0
  30. pyparsing-3.2.2/docs/modules.rst +0 -7
  31. pyparsing-3.2.2/docs/pyparsing.rst +0 -7
  32. pyparsing-3.2.2/tox.ini +0 -21
  33. {pyparsing-3.2.2 → pyparsing-3.2.4}/.coveragerc +0 -0
  34. {pyparsing-3.2.2 → pyparsing-3.2.4}/.gitignore +0 -0
  35. {pyparsing-3.2.2 → pyparsing-3.2.4}/.pre-commit-config.yaml +0 -0
  36. {pyparsing-3.2.2 → pyparsing-3.2.4}/BUILDING.md +0 -0
  37. {pyparsing-3.2.2 → pyparsing-3.2.4}/CODE_OF_CONDUCT.rst +0 -0
  38. {pyparsing-3.2.2 → pyparsing-3.2.4}/LICENSE +0 -0
  39. {pyparsing-3.2.2 → pyparsing-3.2.4}/README.rst +0 -0
  40. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/CODE_OF_CONDUCT.rst +0 -0
  41. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/Makefile +0 -0
  42. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/_static/pyparsingClassDiagram_1.5.2.jpg +0 -0
  43. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/_static/pyparsingClassDiagram_3.0.9.jpg +0 -0
  44. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/_static/sql_railroad.html +0 -0
  45. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/make_sphinx_docs.bat +0 -0
  46. {pyparsing-3.2.2 → pyparsing-3.2.4}/docs/pyparsing_class_diagram.puml +0 -0
  47. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/AcManForm.dfm +0 -0
  48. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/LAparser.py +0 -0
  49. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/README.md +0 -0
  50. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/Setup.ini +0 -0
  51. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/SimpleCalc.py +0 -0
  52. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/SingleForm.dfm +0 -0
  53. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/TAP.py +0 -0
  54. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/TAP_diagram.html +0 -0
  55. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/__init__.py +0 -0
  56. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/adventureEngine.py +0 -0
  57. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/adventure_game_parser_diagram.html +0 -0
  58. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/antlr_grammar.py +0 -0
  59. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/antlr_grammar_diagram.html +0 -0
  60. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/antlr_grammar_tests.py +0 -0
  61. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/apicheck.py +0 -0
  62. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/apicheck_diagram.html +0 -0
  63. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/bf.py +0 -0
  64. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/bf_diagram.html +0 -0
  65. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/bigquery_view_parser.py +0 -0
  66. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/booleansearchparser.py +0 -0
  67. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/btpyparse.py +0 -0
  68. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/builtin_parse_action_demo.py +0 -0
  69. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/cLibHeader.py +0 -0
  70. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/chemical_formulas.html +0 -0
  71. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/chemical_formulas.py +0 -0
  72. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/commasep.py +0 -0
  73. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/complex_chemical_formulas.py +0 -0
  74. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/complex_chemical_formulas_diagram.html +0 -0
  75. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/configParse.py +0 -0
  76. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/cpp_enum_parser.py +0 -0
  77. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/cuneiform_python.py +0 -0
  78. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/datetime_parse_actions.py +0 -0
  79. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/decaf_parser.py +0 -0
  80. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/decaf_parser_diagram.html +0 -0
  81. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/delta_time.py +0 -0
  82. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/delta_time_diagram.html +0 -0
  83. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/dfmparse.py +0 -0
  84. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/dhcpd_leases_parser.py +0 -0
  85. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/dictExample.py +0 -0
  86. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/dictExample2.py +0 -0
  87. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/directx_x_file_parser.html +0 -0
  88. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/directx_x_file_parser.py +0 -0
  89. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnf.py +0 -0
  90. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnf_diagram.html +0 -0
  91. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnf_number_parser_diagram.html +0 -0
  92. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnf_number_words.py +0 -0
  93. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/ebnftest.py +0 -0
  94. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/email_address_parser.py +0 -0
  95. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/eval_arith.py +0 -0
  96. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/excel_expr.py +0 -0
  97. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/fourFn.py +0 -0
  98. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/gen_ctypes.py +0 -0
  99. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/getNTPserversNew.py +0 -0
  100. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/greeting.py +0 -0
  101. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/greetingInGreek.py +0 -0
  102. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/greetingInKorean.py +0 -0
  103. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/groupUsingListAllMatches.py +0 -0
  104. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/hola_mundo.py +0 -0
  105. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/html_stripper.py +0 -0
  106. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/html_table_parser.py +0 -0
  107. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/httpServerLogParser.py +0 -0
  108. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/idlParse.py +0 -0
  109. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/include_preprocessor.py +0 -0
  110. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/indentedGrammarExample.py +0 -0
  111. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/indented_block_example.py +0 -0
  112. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/infix_math_parser.py +0 -0
  113. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/inv_regex.py +0 -0
  114. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/javascript_grammar.g +0 -0
  115. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/jsonParser.py +0 -0
  116. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/left_recursion.py +0 -0
  117. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lineno_example.py +0 -0
  118. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/listAllMatches.py +0 -0
  119. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lox_parser.py +0 -0
  120. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lox_parser_diagram.html +0 -0
  121. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lua_parser.py +0 -0
  122. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lua_parser_diagram.html +0 -0
  123. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lucene_grammar.py +0 -0
  124. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/lucene_grammar_diagram.html +0 -0
  125. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/macro_expander.py +0 -0
  126. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/make_diagram.py +0 -0
  127. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/matchPreviousDemo.py +0 -0
  128. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mongodb_query_expression.html +0 -0
  129. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mongodb_query_expression.py +0 -0
  130. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mongodb_query_expression_step_0.py +0 -0
  131. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mozilla.ics +0 -0
  132. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/mozillaCalendarParser.py +0 -0
  133. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/nested.py +0 -0
  134. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/nested_markup.py +0 -0
  135. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/number_words.py +0 -0
  136. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/number_words_diagram.html +0 -0
  137. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/numerics.py +0 -0
  138. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/oc.py +0 -0
  139. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/one_to_ninety_nine.py +0 -0
  140. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/parseTabularData.py +0 -0
  141. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/parse_python_value.html +0 -0
  142. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/parse_python_value.py +0 -0
  143. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/parse_results_sum_example.py +0 -0
  144. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/partial_gene_match.py +0 -0
  145. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/pgn.py +0 -0
  146. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/position.py +0 -0
  147. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/protobuf_parser.py +0 -0
  148. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/pythonGrammarParser.py +0 -0
  149. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/railroad_diagram_demo.py +0 -0
  150. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/range_check.py +0 -0
  151. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/readJson.py +0 -0
  152. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/removeLineBreaks.py +0 -0
  153. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/roman_numerals.py +0 -0
  154. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/roman_numerals_diagram.html +0 -0
  155. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/rosettacode.py +0 -0
  156. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/rosettacode_diagram.html +0 -0
  157. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/scanExamples.py +0 -0
  158. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/searchParserAppDemo.py +0 -0
  159. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/searchparser.py +0 -0
  160. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/select_parser.py +0 -0
  161. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/sexpParser.py +0 -0
  162. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/shapes.py +0 -0
  163. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/simpleArith.py +0 -0
  164. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/simpleBool.py +0 -0
  165. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/simpleSQL.py +0 -0
  166. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/simpleWiki.py +0 -0
  167. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/snmp_api.h +0 -0
  168. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/sql2dot.py +0 -0
  169. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/stackish.py +0 -0
  170. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/documentSignoffDemo.py +0 -0
  171. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/documentsignoffstate.pystate +0 -0
  172. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/libraryBookDemo.py +0 -0
  173. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/librarybookstate.pystate +0 -0
  174. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/statemachine.py +0 -0
  175. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/trafficLightDemo.py +0 -0
  176. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/trafficlightstate.pystate +0 -0
  177. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/vending_machine.py +0 -0
  178. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/video_demo.py +0 -0
  179. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/statemachine/videostate.pystate +0 -0
  180. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/tag_emitter.py +0 -0
  181. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/tag_metadata.py +0 -0
  182. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/tag_metadata_diagram.html +0 -0
  183. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/test_bibparse.py +0 -0
  184. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/unicode_denormalizer.py +0 -0
  185. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/urlExtractor.py +0 -0
  186. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/urlExtractorNew.py +0 -0
  187. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/verilog_parse.py +0 -0
  188. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/withAttribute.py +0 -0
  189. {pyparsing-3.2.2 → pyparsing-3.2.4}/examples/wordsToNum.py +0 -0
  190. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/py.typed +0 -0
  191. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/tools/__init__.py +0 -0
  192. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/tools/cvt_pyparsing_pep8_names.py +0 -0
  193. {pyparsing-3.2.2 → pyparsing-3.2.4}/pyparsing/unicode.py +0 -0
  194. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/README.md +0 -0
  195. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/__init__.py +0 -0
  196. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/diag_embed.html +0 -0
  197. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/diag_no_embed.html +0 -0
  198. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/json_parser_tests.py +0 -0
  199. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/karthik.ini +0 -0
  200. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/mypy-ignore-cases/forward_methods.py +0 -0
  201. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/parsefiletest_input_file.txt +0 -0
  202. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/requirements.txt +0 -0
  203. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_diagram.py +0 -0
  204. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_examples.py +0 -0
  205. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_matplotlib_cases.py +0 -0
  206. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_pep8_converter.py +0 -0
  207. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_simple_unit.py +0 -0
  208. {pyparsing-3.2.2 → pyparsing-3.2.4}/tests/test_util.py +0 -0
@@ -35,7 +35,7 @@ Required Python versions by pyparsing version
35
35
  +--------------------------------------------------+-------------------+
36
36
  | pyparsing version | Required Python |
37
37
  +==================================================+===================+
38
- | 3.2.0 - 3.2.2 | 3.9 or later |
38
+ | 3.2.0 - later | 3.9 or later |
39
39
  | 3.0.8 - 3.1.4 | 3.6.8 or later |
40
40
  | 3.0.0 - 3.0.7 (these versions are discouraged) | 3.6 or later |
41
41
  | 2.4.7 | 2.7 or later |
@@ -43,6 +43,41 @@ Required Python versions by pyparsing version
43
43
  +--------------------------------------------------+-------------------+
44
44
 
45
45
 
46
+ Version 3.2.4 - September, 2025
47
+ -------------------------------
48
+ - Barring any catastrophic bugs in this release, this will be the last release in
49
+ the 3.2.x line. The next release, 3.3.0, will begin emitting `DeprecationWarnings`
50
+ when the pre-PEP8 methods are used (see header notes above for more information,
51
+ including available automation for converting any existing code using
52
+ pyparsing with the old names).
53
+
54
+ - Fixed bug when using a copy of a `Word` expression (either by using the explicit
55
+ `copy()` method, or attaching a results name), and setting a new expression name,
56
+ a raised `ParseException` still used the original expression name. Also affected
57
+ `Regex` expressions with `as_match` or `as_group_list` = True. Reported by
58
+ Waqas Ilyas, in Issue #612 - good catch!
59
+
60
+ - Fixed type annotation for `replace_with`, to accept `Any` type. Fixes Issue #602,
61
+ reported by esquonk.
62
+
63
+ - Added locking around potential race condition in `ParserElement.reset_cache`, as
64
+ well as other cache-related methods. Fixes Issue #604, reported by CarlosDescalziIM.
65
+
66
+ - Substantial update to docstrings and doc generation in preparation for 3.3.0,
67
+ great effort by FeRD, thanks!
68
+
69
+ - Notable addition by FeRD to convert docstring examples to work with doctest! This
70
+ was long overdue, thanks so much!
71
+
72
+
73
+ Version 3.2.3 - March, 2025
74
+ ---------------------------
75
+ - Fixed bug released in 3.2.2 in which `nested_expr` could overwrite parse actions
76
+ for defined content, and could truncate list of items within a nested list.
77
+ Fixes Issue #600, reported by hoxbro and luisglft, with helpful diag logs and
78
+ repro code.
79
+
80
+
46
81
  Version 3.2.2 - March, 2025
47
82
  ---------------------------
48
83
  - Released `cvt_pyparsing_pep8_names.py` conversion utility to upgrade pyparsing-based
@@ -248,7 +283,7 @@ Version 3.1.3 - August, 2024
248
283
  Example:
249
284
 
250
285
  # add tag indicating mood
251
- end_punc = "." | ("!" + Tag("enthusiastic")))
286
+ end_punc = "." | ("!" + Tag("enthusiastic"))
252
287
  greeting = "Hello" + Word(alphas) + end_punc
253
288
 
254
289
  result = greeting.parse_string("Hello World.")
@@ -1,4 +1,4 @@
1
- # CONTRIBUTING
1
+ # Contributing to Pyparsing
2
2
 
3
3
  Thank you for your interest in working on pyparsing! Pyparsing has become a popular module for creating simple
4
4
  text parsing and data scraping applications. It has been incorporated in several widely-used packages, and is
@@ -38,41 +38,49 @@ If you have a question on using pyparsing, there are a number of resources avail
38
38
 
39
39
  If you have an example you wish to submit, please follow these guidelines.
40
40
 
41
- - **License - Submitted example code must be available for distribution with the rest of pyparsing under the MIT
41
+ - **License - Submitted example code must be available for distribution with the rest of pyparsing under the MIT
42
42
  open source license.**
43
43
 
44
44
  - Please follow PEP8 name and coding guidelines, and use the black formatter
45
- to auto-format code.
45
+ to auto-format code.
46
46
 
47
47
  - Examples should import pyparsing and the common namespace classes as:
48
48
 
49
- import pyparsing as pp
50
- # if necessary
51
- ppc = pp.pyparsing_common
52
- ppu = pp.pyparsing_unicode
49
+ ```python
50
+ import pyparsing as pp
51
+ # if necessary
52
+ ppc = pp.pyparsing_common
53
+ ppu = pp.pyparsing_unicode
54
+ ```
53
55
 
54
- - Submitted examples *must* be Python 3.6.8 or later compatible. (It is acceptable if examples use Python
55
- features added after 3.6)
56
+ - Submitted examples _must_ be Python 3.6.8 or later compatible.
57
+ (It is acceptable if examples use Python features added after 3.6)
56
58
 
57
59
  - Where possible use operators to create composite parse expressions:
58
60
 
59
- expr = expr_a + expr_b | expr_c
61
+ ```python
62
+ expr = expr_a + expr_b | expr_c
63
+ ```
60
64
 
61
65
  instead of:
62
66
 
63
- expr = pp.MatchFirst([pp.And([expr_a, expr_b]), expr_c])
67
+ ```python
68
+ expr = pp.MatchFirst([pp.And([expr_a, expr_b]), expr_c])
69
+ ```
64
70
 
65
71
  Exception: if using a generator to create an expression:
66
72
 
67
- import keyword
68
- python_keywords = keyword.kwlist
69
- any_keyword = pp.MatchFirst(pp.Keyword(kw)
70
- for kw in python_keywords))
73
+ ```python
74
+ import keyword
75
+ python_keywords = keyword.kwlist
76
+ any_keyword = pp.MatchFirst(pp.Keyword(kw)
77
+ for kw in python_keywords))
78
+ ```
71
79
 
72
- - Learn [Common Pitfalls When Writing Parsers](https://github.com/pyparsing/pyparsing/wiki/Common-Pitfalls-When-Writing-Parsers) and
80
+ - Learn [Common Pitfalls When Writing Parsers][pitfalls] and
73
81
  how to avoid them when developing new examples.
74
82
 
75
- - See additional notes under [Some Coding Points](#some-coding-points).
83
+ - See additional notes under [Some coding points](#some-coding-points).
76
84
 
77
85
  ## Submitting changes
78
86
 
@@ -88,11 +96,11 @@ intended on prior versions of Python (currently back to Python 3.6.8).
88
96
 
89
97
  ## Some design points
90
98
 
91
- - Minimize additions to the module namespace. Over time, pyparsing's namespace has acquired a *lot* of names.
99
+ - Minimize additions to the module namespace. Over time, pyparsing's namespace has acquired a _lot_ of names.
92
100
  New features have been encapsulated into namespace classes to try to hold back the name flooding when importing
93
101
  pyparsing.
94
102
 
95
- - New operator overloads for ParserElement will need to show broad applicability, and should be related to
103
+ - New operator overloads for ParserElement will need to show broad applicability, and should be related to
96
104
  parser construction.
97
105
 
98
106
  - Performance tuning should focus on parse time performance. Optimizing parser definition performance is secondary.
@@ -108,28 +116,87 @@ These coding styles are encouraged whether submitting code for core pyparsing or
108
116
  name casing. I had just finished several years of Java and Smalltalk development, and camel case seemed to be the
109
117
  future trend in coding styles. As of version 3.0.0, pyparsing is moving over to PEP8 naming, while maintaining
110
118
  compatibility with existing parser code by defining synonyms using the legacy names. These names will be
111
- retained until a future release (probably 4.0), to provide a migration path for current pyparsing-dependent
119
+ retained until a future release (probably 4.0), to provide a migration path for current pyparsing-dependent
112
120
  applications - DO NOT MODIFY OR REMOVE THESE NAMES.
113
121
  See more information at the [PEP8 wiki page](https://github.com/pyparsing/pyparsing/wiki/PEP-8-planning).
114
122
 
115
123
  - No backslashes for line continuations.
116
- Continuation lines for expressions in ()'s should start with the continuing operator:
124
+ Continuation lines for expressions in `()`'s should start with the continuing operator:
117
125
 
118
- really_long_line = (something
119
- + some_other_long_thing
120
- + even_another_long_thing)
126
+ ```python
127
+ really_long_line = (something
128
+ + some_other_long_thing
129
+ + even_another_long_thing)
130
+ ```
121
131
 
122
132
  - Maximum line length is 120 characters. (Black will override this.)
123
133
 
124
134
  - Changes to core pyparsing must be compatible back to Py3.6 without conditionalizing. Later Py3 features may be
125
135
  used in examples by way of illustration.
126
136
 
127
- - str.format() statements should use named format arguments (unless this proves to be a slowdown at parse time).
137
+ - `str.format()` statements should use named format arguments (unless this proves to be a slowdown at parse time).
128
138
 
129
139
  - List, tuple, and dict literals should include a trailing comma after the last element, which reduces changeset
130
140
  clutter when another element gets added to the end.
131
141
 
132
- - New features should be accompanied by updates to unitTests.py and a bullet in the CHANGES file.
142
+ - New features should be accompanied by updates to `unitTests.py` and a bullet in the CHANGES file.
133
143
 
134
- - Do not modify pyparsing_archive.py. This file is kept as a reference artifact from when pyparsing was distributed
144
+ - Do not modify `pyparsing_archive.py`. This file is kept as a reference artifact from when pyparsing was distributed
135
145
  as a single source file.
146
+
147
+ ## Some documentation points
148
+
149
+ - The docstrings in pyparsing (which are generated into the package's
150
+ API documentation by Sphinx) make heavy use of doctests for their
151
+ example code. This allows examples to be tested and verified as
152
+ working, and ensures that any changes to the code which affect
153
+ output are accompanied by corresponding changes in the examples.
154
+
155
+ - The codebase's docstring tests can be verified by running the
156
+ command `make doctest` from the `docs/` directory. The output
157
+ should ideally look something like this:
158
+
159
+ ```console
160
+ $ make doctest
161
+ [...documentation build...]
162
+ running tests...
163
+
164
+ Document: pyparsing
165
+ -------------------
166
+ 1 item passed all tests:
167
+ 204 tests in default
168
+ 204 tests in 1 item.
169
+ 204 passed.
170
+ Test passed.
171
+
172
+ Document: whats_new_in_3_1
173
+ --------------------------
174
+ 1 item passed all tests:
175
+ 15 tests in default
176
+ 15 tests in 1 item.
177
+ 15 passed.
178
+ Test passed.
179
+
180
+ Doctest summary
181
+ ===============
182
+ 219 tests
183
+ 0 failures in tests
184
+ 0 failures in setup code
185
+ 0 failures in cleanup code
186
+ ```
187
+
188
+ Any failed tests will be displayed in detail.
189
+
190
+ - Much more information about doctests can be found in the
191
+ [Pyparsing documentation][pyparsing-docs], in the chapter titled
192
+ "Writing doctest examples". Even if you have never worked with them
193
+ before, it should guide you through everything you need to know in
194
+ order to write Pyparsing doctest examples. If you are already familiar
195
+ with doctests and with `sphinx.ext.doctest` in general, you may wish
196
+ to skip over the introductory content and go straight to the section
197
+ on "Doctests in Pyparsing" which covers some issues specific to the
198
+ project.
199
+
200
+ <!-- Named hyperlink targets, used in the preceding text -->
201
+ [pitfalls]: https://github.com/pyparsing/pyparsing/wiki/Common-Pitfalls-When-Writing-Parsers
202
+ [pyparsing-docs]: https://pyparsing-docs.readthedocs.io/en/latest/
@@ -1,14 +1,14 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pyparsing
3
- Version: 3.2.2
4
- Summary: pyparsing module - Classes and methods to define and execute parsing grammars
3
+ Version: 3.2.4
4
+ Summary: pyparsing - Classes and methods to define and execute parsing grammars
5
5
  Author-email: Paul McGuire <ptmcg.gm+pyparsing@gmail.com>
6
6
  Requires-Python: >=3.9
7
7
  Description-Content-Type: text/x-rst
8
+ License-Expression: MIT
8
9
  Classifier: Development Status :: 5 - Production/Stable
9
10
  Classifier: Intended Audience :: Developers
10
11
  Classifier: Intended Audience :: Information Technology
11
- Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python
14
14
  Classifier: Programming Language :: Python :: 3
@@ -24,6 +24,7 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
24
24
  Classifier: Topic :: Software Development :: Compilers
25
25
  Classifier: Topic :: Text Processing
26
26
  Classifier: Typing :: Typed
27
+ License-File: LICENSE
27
28
  Requires-Dist: railroad-diagrams ; extra == "diagrams"
28
29
  Requires-Dist: jinja2 ; extra == "diagrams"
29
30
  Project-URL: Homepage, https://github.com/pyparsing/pyparsing/
@@ -0,0 +1 @@
1
+ ../CONTRIBUTING.md
@@ -19,8 +19,6 @@ Using the pyparsing module
19
19
  expressions, processing custom application language commands, or
20
20
  extracting data from formatted reports.
21
21
 
22
- .. sectnum:: :depth: 4
23
-
24
22
  .. contents:: :depth: 4
25
23
 
26
24
  Note: While this content is still valid, there are more detailed