ya-tagscript 1.7.1__tar.gz → 1.7.2__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 (197) hide show
  1. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/CHANGELOG.md +6 -0
  2. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/PKG-INFO +3 -3
  3. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/README.md +2 -2
  4. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/conf.py +1 -1
  5. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/pyproject.toml +1 -1
  6. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interpreter/ts_parser.py +38 -8
  7. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/interpreter/test_ts_parser.py +75 -0
  8. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.flake8 +0 -0
  9. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.github/dependabot.yml +0 -0
  10. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.github/workflows/black.yml +0 -0
  11. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.github/workflows/coverage_comment.yml +0 -0
  12. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.github/workflows/publish.yml +0 -0
  13. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.github/workflows/test.yml +0 -0
  14. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.gitignore +0 -0
  15. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.pre-commit-config.yaml +0 -0
  16. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.python-version +0 -0
  17. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/.readthedocs.yaml +0 -0
  18. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/LICENSE.md +0 -0
  19. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/Makefile +0 -0
  20. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/_ext/glossary_backlink_checker.py +0 -0
  21. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/_ext/styled_list_directive.py +0 -0
  22. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/adapters.rst +0 -0
  23. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/blocks.rst +0 -0
  24. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/changelog.rst +0 -0
  25. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/code_examples/adapters/int_adapter_example.py +0 -0
  26. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/code_examples/adapters/member_adapter_example.py +0 -0
  27. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/code_examples/nested_blocks_example.py +0 -0
  28. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/code_examples/quickstart_example.py +0 -0
  29. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/credits.rst +0 -0
  30. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/exceptions.rst +0 -0
  31. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/glossary.rst +0 -0
  32. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/index.rst +0 -0
  33. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/interfaces.rst +0 -0
  34. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/interpreter.rst +0 -0
  35. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/intro.rst +0 -0
  36. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/make.bat +0 -0
  37. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/numeric_parser.rst +0 -0
  38. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/quickstart.rst +0 -0
  39. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/docs/requirements.txt +0 -0
  40. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/make_release.py +0 -0
  41. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/__init__.py +0 -0
  42. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/__init__.py +0 -0
  43. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/discord_adapters/__init__.py +0 -0
  44. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/discord_adapters/attribute_adapter.py +0 -0
  45. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/discord_adapters/channel_adapter.py +0 -0
  46. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/discord_adapters/guild_adapter.py +0 -0
  47. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/discord_adapters/member_adapter.py +0 -0
  48. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/function_adapter.py +0 -0
  49. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/int_adapter.py +0 -0
  50. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/object_adapter.py +0 -0
  51. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/adapters/string_adapter.py +0 -0
  52. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/__init__.py +0 -0
  53. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/actions/__init__.py +0 -0
  54. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/actions/command_block.py +0 -0
  55. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/actions/delete_block.py +0 -0
  56. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/actions/override_block.py +0 -0
  57. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/actions/react_block.py +0 -0
  58. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/actions/redirect_block.py +0 -0
  59. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/actions/silence_block.py +0 -0
  60. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/conditional/__init__.py +0 -0
  61. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/conditional/all_block.py +0 -0
  62. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/conditional/any_block.py +0 -0
  63. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/conditional/if_block.py +0 -0
  64. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/discord/__init__.py +0 -0
  65. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/discord/cooldown_block.py +0 -0
  66. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/discord/embed_block.py +0 -0
  67. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/flow/__init__.py +0 -0
  68. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/flow/break_block.py +0 -0
  69. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/flow/shortcutredirect_block.py +0 -0
  70. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/flow/stop_block.py +0 -0
  71. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/limiters/__init__.py +0 -0
  72. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/limiters/blacklist_block.py +0 -0
  73. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/limiters/require_block.py +0 -0
  74. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/lists/__init__.py +0 -0
  75. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/lists/cycle_block.py +0 -0
  76. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/lists/list_block.py +0 -0
  77. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/math/__init__.py +0 -0
  78. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/math/math_block.py +0 -0
  79. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/math/ordinal_block.py +0 -0
  80. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/meta/__init__.py +0 -0
  81. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/meta/comment_block.py +0 -0
  82. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/meta/debug_block.py +0 -0
  83. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/rng/__init__.py +0 -0
  84. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/rng/fiftyfifty_block.py +0 -0
  85. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/rng/random_block.py +0 -0
  86. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/rng/range_block.py +0 -0
  87. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/strings/__init__.py +0 -0
  88. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/strings/case_block.py +0 -0
  89. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/strings/join_block.py +0 -0
  90. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/strings/python_block.py +0 -0
  91. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/strings/replace_block.py +0 -0
  92. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/strings/substring_block.py +0 -0
  93. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/strings/urldecode_block.py +0 -0
  94. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/strings/urlencode_block.py +0 -0
  95. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/time/__init__.py +0 -0
  96. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/time/strf_block.py +0 -0
  97. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/time/timedelta_block.py +0 -0
  98. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/variables/__init__.py +0 -0
  99. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/variables/assign_block.py +0 -0
  100. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/variables/loose_variable_getter_block.py +0 -0
  101. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/blocks/variables/strict_variable_getter_block.py +0 -0
  102. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/exceptions/__init__.py +0 -0
  103. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/exceptions/exceptions.py +0 -0
  104. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interfaces/__init__.py +0 -0
  105. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interfaces/adapterabc.py +0 -0
  106. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interfaces/blockabc.py +0 -0
  107. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interfaces/interpreterabc.py +0 -0
  108. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interfaces/nodeabc.py +0 -0
  109. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interpreter/__init__.py +0 -0
  110. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interpreter/context.py +0 -0
  111. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interpreter/interpreter.py +0 -0
  112. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interpreter/node.py +0 -0
  113. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interpreter/parse_state.py +0 -0
  114. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/interpreter/response.py +0 -0
  115. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/py.typed +0 -0
  116. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/util/__init__.py +0 -0
  117. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/util/conditionals.py +0 -0
  118. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/util/escaping.py +0 -0
  119. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/src/ya_tagscript/util/splitter.py +0 -0
  120. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/.coveragerc +0 -0
  121. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/__init__.py +0 -0
  122. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/docs/__init__.py +0 -0
  123. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/docs/code_examples/__init__.py +0 -0
  124. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/docs/code_examples/adapters/__init__.py +0 -0
  125. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/docs/code_examples/adapters/test_int_adapter_example.py +0 -0
  126. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/docs/code_examples/adapters/test_member_adapter_example.py +0 -0
  127. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/docs/code_examples/test_nested_blocks_example.py +0 -0
  128. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/docs/code_examples/test_quickstart_example.py +0 -0
  129. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/__init__.py +0 -0
  130. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/__init__.py +0 -0
  131. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/discord_adapters/__init__.py +0 -0
  132. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/discord_adapters/test_attribute_adapter.py +0 -0
  133. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/discord_adapters/test_channel_adapter.py +0 -0
  134. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/discord_adapters/test_guild_adapter.py +0 -0
  135. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/discord_adapters/test_member_adapter.py +0 -0
  136. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/test_function_adapter.py +0 -0
  137. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/test_int_adapter.py +0 -0
  138. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/test_object_adapter.py +0 -0
  139. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/adapters/test_string_adapter.py +0 -0
  140. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/__init__.py +0 -0
  141. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/actions/__init__.py +0 -0
  142. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/actions/test_command_block.py +0 -0
  143. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/actions/test_delete_block.py +0 -0
  144. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/actions/test_override_block.py +0 -0
  145. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/actions/test_react_block.py +0 -0
  146. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/actions/test_redirect_block.py +0 -0
  147. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/actions/test_silence_block.py +0 -0
  148. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/conditional/__init__.py +0 -0
  149. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/conditional/test_all_block.py +0 -0
  150. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/conditional/test_any_block.py +0 -0
  151. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/conditional/test_if_block.py +0 -0
  152. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/discord/__init__.py +0 -0
  153. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/discord/test_cooldown_block.py +0 -0
  154. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/discord/test_embed_block.py +0 -0
  155. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/flow/__init__.py +0 -0
  156. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/flow/test_break_block.py +0 -0
  157. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/flow/test_shortcutredirect_block.py +0 -0
  158. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/flow/test_stop_block.py +0 -0
  159. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/limiters/__init__.py +0 -0
  160. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/limiters/test_blacklist_block.py +0 -0
  161. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/limiters/test_require_block.py +0 -0
  162. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/lists/__init__.py +0 -0
  163. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/lists/test_cycle_block.py +0 -0
  164. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/lists/test_list_block.py +0 -0
  165. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/math/__init__.py +0 -0
  166. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/math/test_math_block.py +0 -0
  167. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/math/test_ordinal_block.py +0 -0
  168. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/meta/__init__.py +0 -0
  169. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/meta/test_comment_block.py +0 -0
  170. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/meta/test_debug_block.py +0 -0
  171. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/rng/__init__.py +0 -0
  172. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/rng/test_fiftyfifty_block.py +0 -0
  173. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/rng/test_random_block.py +0 -0
  174. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/rng/test_range_block.py +0 -0
  175. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/strings/__init__.py +0 -0
  176. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/strings/test_case_block.py +0 -0
  177. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/strings/test_join_block.py +0 -0
  178. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/strings/test_python_block.py +0 -0
  179. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/strings/test_replace_block.py +0 -0
  180. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/strings/test_substring_block.py +0 -0
  181. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/strings/test_urldecode_block.py +0 -0
  182. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/strings/test_urlencode_block.py +0 -0
  183. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/time/__init__.py +0 -0
  184. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/time/test_strf_block.py +0 -0
  185. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/time/test_timedelta_block.py +0 -0
  186. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/variables/__init__.py +0 -0
  187. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/variables/test_assign_block.py +0 -0
  188. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/variables/test_loose_variable_getter_block.py +0 -0
  189. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/blocks/variables/test_strict_variable_getter_block.py +0 -0
  190. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/interpreter/__init__.py +0 -0
  191. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/interpreter/test_interpreter.py +0 -0
  192. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/interpreter/test_node.py +0 -0
  193. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/interpreter/test_parse_state.py +0 -0
  194. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/util/__init__.py +0 -0
  195. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/util/test_conditionals.py +0 -0
  196. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/util/test_escaping.py +0 -0
  197. {ya_tagscript-1.7.1 → ya_tagscript-1.7.2}/tests/ya_tagscript/util/test_splitter.py +0 -0
@@ -2,6 +2,12 @@
2
2
 
3
3
  *Currently none*
4
4
 
5
+ # v1.7.2 (2026-07-15)
6
+
7
+ - More parsing loop performance improvements
8
+ - Fix escapement bug causing 0-level escaped blocks to not be properly escaped
9
+ - This change may cause output differences in scripts with escaped blocks.
10
+
5
11
  # v1.7.1 (2026-07-03)
6
12
 
7
13
  - Added `ACTIONS_KEY` constants to all blocks which add data to the `Response.actions`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ya_tagscript
3
- Version: 1.7.1
3
+ Version: 1.7.2
4
4
  Summary: Yet Another TagScript fork. An easy drop in user-provided Templating system.
5
5
  Project-URL: Changelog, https://ya-tagscript.readthedocs.io/en/latest/changelog.html
6
6
  Project-URL: Documentation, https://ya-tagscript.readthedocs.io
@@ -30,7 +30,7 @@ Description-Content-Type: text/markdown
30
30
  ![Read the Docs (version)](https://img.shields.io/readthedocs/ya_tagscript/latest)
31
31
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
32
32
 
33
- Current stable version: v1.7.1
33
+ Current stable version: v1.7.2
34
34
 
35
35
  ## Information
36
36
 
@@ -92,7 +92,7 @@ or
92
92
  <!--VERSIONED TAG SECTION START-->
93
93
 
94
94
  ```
95
- pip install git+https://github.com/MajorTanya/ya_tagscript.git@v1.7.1
95
+ pip install git+https://github.com/MajorTanya/ya_tagscript.git@v1.7.2
96
96
  ```
97
97
 
98
98
  <!--VERSIONED TAG SECTION END-->
@@ -5,7 +5,7 @@
5
5
  ![Read the Docs (version)](https://img.shields.io/readthedocs/ya_tagscript/latest)
6
6
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
7
7
 
8
- Current stable version: v1.7.1
8
+ Current stable version: v1.7.2
9
9
 
10
10
  ## Information
11
11
 
@@ -67,7 +67,7 @@ or
67
67
  <!--VERSIONED TAG SECTION START-->
68
68
 
69
69
  ```
70
- pip install git+https://github.com/MajorTanya/ya_tagscript.git@v1.7.1
70
+ pip install git+https://github.com/MajorTanya/ya_tagscript.git@v1.7.2
71
71
  ```
72
72
 
73
73
  <!--VERSIONED TAG SECTION END-->
@@ -17,7 +17,7 @@ project_copyright = "2025, MajorTanya"
17
17
  author = "MajorTanya"
18
18
 
19
19
  ### VERSION SECTION START
20
- version = "1.7.1"
20
+ version = "1.7.2"
21
21
  ### VERSION SECTION END
22
22
  release = version
23
23
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ya_tagscript"
7
- version = "1.7.1"
7
+ version = "1.7.2"
8
8
  description = "Yet Another TagScript fork. An easy drop in user-provided Templating system."
9
9
  readme = "README.md"
10
10
  license = "CC-BY-4.0"
@@ -29,6 +29,8 @@ _SPECIAL_TOKENS: set[str] = {
29
29
  PAREN_CLOSE,
30
30
  COLON,
31
31
  }
32
+ # COLON isn't special in several places
33
+ _SPECIAL_TOKENS_NO_COLON = _SPECIAL_TOKENS - {COLON}
32
34
 
33
35
 
34
36
  class TagScriptParser:
@@ -48,6 +50,7 @@ class TagScriptParser:
48
50
  i = 0
49
51
  input_len = len(input_str)
50
52
  special_chars = _SPECIAL_TOKENS
53
+ specials_no_colon = _SPECIAL_TOKENS_NO_COLON
51
54
 
52
55
  # region processing loop
53
56
  # this is an extremely hot loop so there are additional local references to
@@ -68,6 +71,7 @@ class TagScriptParser:
68
71
  i += 1
69
72
  text = input_str[start:i]
70
73
  self._text_buffer += text
74
+ char = input_str[i - 1]
71
75
  continue
72
76
 
73
77
  # mainly a typing crutch since current_state = block.state (top of loop)
@@ -124,7 +128,16 @@ class TagScriptParser:
124
128
  block.declaration = char
125
129
 
126
130
  elif current_state is ParseState.IN_DECLARATION:
127
- if char == BRACE_OPEN:
131
+ if char not in special_chars:
132
+ # covers BACKSLASH and any other char
133
+ # fast-path accumulation
134
+ start = i
135
+ while i < input_len and input_str[i] not in special_chars:
136
+ i += 1
137
+ block.declaration = (block.declaration or "") + input_str[start:i]
138
+ char = input_str[i - 1]
139
+ continue
140
+ elif char == BRACE_OPEN:
128
141
  if not is_escaped:
129
142
  block.block_depth += 1
130
143
  block.declaration = (block.declaration or "") + char
@@ -157,10 +170,19 @@ class TagScriptParser:
157
170
  else:
158
171
  block.declaration = (block.declaration or "") + char
159
172
  else:
160
- block.declaration = (block.declaration or "") + char
173
+ raise ValueError(f"Unknown special char {char!r} in IN_DECLARATION")
161
174
 
162
175
  elif current_state is ParseState.IN_PARAMETER:
163
- if char == BRACE_OPEN:
176
+ if char not in specials_no_colon:
177
+ # covers BACKSLASH, COLON, any other char
178
+ # fast-path accumulation
179
+ start = i
180
+ while i < input_len and input_str[i] not in specials_no_colon:
181
+ i += 1
182
+ block.parameter = (block.parameter or "") + input_str[start:i]
183
+ char = input_str[i - 1]
184
+ continue
185
+ elif char == BRACE_OPEN:
164
186
  if not is_escaped:
165
187
  block.block_depth += 1
166
188
  block.parameter = (block.parameter or "") + char
@@ -187,8 +209,7 @@ class TagScriptParser:
187
209
  block.parameter = (block.parameter or "") + char
188
210
  block.paren_depth -= 1
189
211
  else:
190
- # includes BACKSLASH, COLON, any other char
191
- block.parameter = (block.parameter or "") + char
212
+ raise ValueError(f"Unknown special char {char!r} in IN_PARAMETER")
192
213
 
193
214
  elif current_state is ParseState.POST_PARAMETER:
194
215
  if char == BRACE_CLOSE and block.block_depth == 1:
@@ -207,7 +228,16 @@ class TagScriptParser:
207
228
  self._state = None
208
229
 
209
230
  elif current_state is ParseState.IN_PAYLOAD:
210
- if char == BRACE_OPEN:
231
+ if char not in specials_no_colon:
232
+ # covers BACKSLASH, COLON, any other char
233
+ # fast-path accumulation
234
+ start = i
235
+ while i < input_len and input_str[i] not in specials_no_colon:
236
+ i += 1
237
+ block.payload = (block.payload or "") + input_str[start:i]
238
+ char = input_str[i - 1]
239
+ continue
240
+ elif char == BRACE_OPEN:
211
241
  if not is_escaped:
212
242
  block.block_depth += 1
213
243
  block.payload = (block.payload or "") + char
@@ -230,8 +260,8 @@ class TagScriptParser:
230
260
  if block.paren_depth > 0:
231
261
  block.paren_depth -= 1
232
262
  else:
233
- # covers BACKSLASH, COLON, any other char
234
- block.payload = (block.payload or "") + char
263
+ raise ValueError(f"Unknown special char {char!r} in IN_PAYLOAD")
264
+
235
265
  else:
236
266
  assert_never(current_state)
237
267
 
@@ -3,10 +3,13 @@ from unittest.mock import MagicMock, patch
3
3
 
4
4
  import pytest
5
5
 
6
+ from ya_tagscript.interpreter import ts_parser
6
7
  from ya_tagscript.interpreter.node import Node
7
8
 
8
9
  # noinspection PyProtectedMember
9
10
  from ya_tagscript.interpreter.ts_parser import (
11
+ _SPECIAL_TOKENS,
12
+ _SPECIAL_TOKENS_NO_COLON,
10
13
  TagScriptParser,
11
14
  _reconstruct_partial_block,
12
15
  )
@@ -26,6 +29,24 @@ def mock_reconstruct_fn():
26
29
  yield mocked_fn
27
30
 
28
31
 
32
+ @pytest.fixture
33
+ def mock_special_tokens():
34
+ # don't look at it
35
+ with patch.object(ts_parser, "_SPECIAL_TOKENS", _SPECIAL_TOKENS.union({"~"})):
36
+ yield
37
+
38
+
39
+ @pytest.fixture
40
+ def mock_special_tokens_no_colon():
41
+ # don't look at it
42
+ with patch.object(
43
+ ts_parser,
44
+ "_SPECIAL_TOKENS_NO_COLON",
45
+ _SPECIAL_TOKENS_NO_COLON.union({"~"}),
46
+ ):
47
+ yield
48
+
49
+
29
50
  def test_unclosed_block_becomes_text(
30
51
  parser: TagScriptParser,
31
52
  mock_reconstruct_fn: MagicMock,
@@ -310,3 +331,57 @@ def test_lone_opening_brace_is_rejected(parser: TagScriptParser):
310
331
  assert nodes == [
311
332
  Node.text(text_value=input_str),
312
333
  ]
334
+
335
+
336
+ def test_unhandled_special_char_in_declaration(
337
+ parser: TagScriptParser,
338
+ mock_special_tokens: None,
339
+ ):
340
+ # don't look at it
341
+ input_str = "{hi~}"
342
+ with pytest.raises(ValueError) as exc:
343
+ parser.parse(input_str)
344
+
345
+ assert exc.value.args[0] == "Unknown special char '~' in IN_DECLARATION"
346
+
347
+
348
+ def test_unhandled_special_char_in_parameter(
349
+ parser: TagScriptParser,
350
+ mock_special_tokens_no_colon: None,
351
+ ):
352
+ # don't look at it
353
+ input_str = "{hello(wo~ah)}"
354
+ with pytest.raises(ValueError) as exc:
355
+ parser.parse(input_str)
356
+
357
+ assert exc.value.args[0] == "Unknown special char '~' in IN_PARAMETER"
358
+
359
+
360
+ def test_unhandled_special_char_in_payload(
361
+ parser: TagScriptParser,
362
+ mock_special_tokens_no_colon: None,
363
+ ):
364
+ # don't look at it
365
+ input_str = "{hello(world):crazy~}"
366
+ with pytest.raises(ValueError) as exc:
367
+ parser.parse(input_str)
368
+
369
+ assert exc.value.args[0] == "Unknown special char '~' in IN_PAYLOAD"
370
+
371
+
372
+ def test_backslash_escapes_block_after_text(parser: TagScriptParser):
373
+ input_str = r"hello\{world}"
374
+ nodes = parser.parse(input_str)
375
+ assert nodes == [
376
+ Node.text(text_value=input_str),
377
+ ]
378
+
379
+
380
+ def test_two_backslashes_escaping_block_in_text_are_not_collapsed(
381
+ parser: TagScriptParser,
382
+ ):
383
+ input_str = r"hello\\{there}"
384
+ nodes = parser.parse(input_str)
385
+ assert nodes == [
386
+ Node.text(text_value=input_str),
387
+ ]
File without changes
File without changes
File without changes
File without changes
File without changes