chgksuite 0.27.1__tar.gz → 0.27.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 (243) hide show
  1. chgksuite-0.27.2/.claude/settings.local.json +10 -0
  2. {chgksuite-0.27.1 → chgksuite-0.27.2}/PKG-INFO +1 -1
  3. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/common.py +14 -2
  4. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/__init__.py +2 -3
  5. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/parser.py +8 -3
  6. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/trello.py +2 -3
  7. chgksuite-0.27.2/chgksuite/version.py +1 -0
  8. {chgksuite-0.27.1 → chgksuite-0.27.2}/history.md +3 -0
  9. {chgksuite-0.27.1 → chgksuite-0.27.2}/pyproject.toml +3 -0
  10. chgksuite-0.27.1/.~lock.results.xlsx# +0 -1
  11. chgksuite-0.27.1/chgksuite/version.py +0 -1
  12. chgksuite-0.27.1/debug_0.txt +0 -3
  13. chgksuite-0.27.1/debug_1.json +0 -10
  14. chgksuite-0.27.1/debug_1a.json +0 -10
  15. chgksuite-0.27.1/debug_2.json +0 -10
  16. chgksuite-0.27.1/debug_3.json +0 -10
  17. chgksuite-0.27.1/debug_4.json +0 -14
  18. chgksuite-0.27.1/debug_5.json +0 -14
  19. chgksuite-0.27.1/debug_6.json +0 -10
  20. chgksuite-0.27.1/debug_final.json +0 -10
  21. chgksuite-0.27.1/results.xlsx +0 -0
  22. chgksuite-0.27.1/test_multiple_images.txt +0 -3
  23. chgksuite-0.27.1/test_oschr/404.jpg +0 -0
  24. chgksuite-0.27.1/test_oschr/Arhipova_Shtirlic-shel-po-koridoru-.803300.pdf/stirlitz_was_walking.fbd +0 -525
  25. chgksuite-0.27.1/test_oschr/Arhipova_Shtirlic-shel-po-koridoru-.803300.pdf/stirlitz_was_walking.pdf +0 -0
  26. chgksuite-0.27.1/test_oschr/alexeeva.jpeg +0 -0
  27. chgksuite-0.27.1/test_oschr/arhipova.txt +0 -1030
  28. chgksuite-0.27.1/test_oschr/ber.png +0 -0
  29. chgksuite-0.27.1/test_oschr/columns.txt +0 -35
  30. chgksuite-0.27.1/test_oschr/columns_ru.pdf +0 -0
  31. chgksuite-0.27.1/test_oschr/columns_ru.tex +0 -625
  32. chgksuite-0.27.1/test_oschr/cool.pdf +0 -0
  33. chgksuite-0.27.1/test_oschr/cool.png +0 -0
  34. chgksuite-0.27.1/test_oschr/dish.png +0 -0
  35. chgksuite-0.27.1/test_oschr/dubinki.png +0 -0
  36. chgksuite-0.27.1/test_oschr/duran01.jpg +0 -0
  37. chgksuite-0.27.1/test_oschr/duran02.jpg +0 -0
  38. chgksuite-0.27.1/test_oschr/duran03.jpg +0 -0
  39. chgksuite-0.27.1/test_oschr/duran04.jpg +0 -0
  40. chgksuite-0.27.1/test_oschr/duran05.jpg +0 -0
  41. chgksuite-0.27.1/test_oschr/duran06.jpg +0 -0
  42. chgksuite-0.27.1/test_oschr/duran07.jpg +0 -0
  43. chgksuite-0.27.1/test_oschr/duran08.jpg +0 -0
  44. chgksuite-0.27.1/test_oschr/duran09.jpg +0 -0
  45. chgksuite-0.27.1/test_oschr/duran10.jpg +0 -0
  46. chgksuite-0.27.1/test_oschr/eisenhower.png +0 -0
  47. chgksuite-0.27.1/test_oschr/emo.pdf +0 -0
  48. chgksuite-0.27.1/test_oschr/emo.png +0 -0
  49. chgksuite-0.27.1/test_oschr/emosong.png +0 -0
  50. chgksuite-0.27.1/test_oschr/emosong1.png +0 -0
  51. chgksuite-0.27.1/test_oschr/emosong2.png +0 -0
  52. chgksuite-0.27.1/test_oschr/handouts_test.txt +0 -30
  53. chgksuite-0.27.1/test_oschr/handouts_test_ru.tex +0 -296
  54. chgksuite-0.27.1/test_oschr/karikatura_razdatka.png +0 -0
  55. chgksuite-0.27.1/test_oschr/kuzmin-tat.png +0 -0
  56. chgksuite-0.27.1/test_oschr/kuzmin.txt +0 -13242
  57. chgksuite-0.27.1/test_oschr/otbor_studchr.txt +0 -79
  58. chgksuite-0.27.1/test_oschr/otbor_studchr_handouts.txt +0 -16
  59. chgksuite-0.27.1/test_oschr/otbor_studchr_handouts_ru.pdf +0 -0
  60. chgksuite-0.27.1/test_oschr/panchenko.txt +0 -23670
  61. chgksuite-0.27.1/test_oschr/testgrid.txt +0 -15
  62. chgksuite-0.27.1/test_oschr/testgrid_ru.pdf +0 -0
  63. chgksuite-0.27.1/test_oschr/testgrid_ru.tex +0 -325
  64. chgksuite-0.27.1/test_oschr/zine.png +0 -0
  65. chgksuite-0.27.1/test_with_image.txt +0 -3
  66. chgksuite-0.27.1/test_with_real_image.txt +0 -3
  67. chgksuite-0.27.1/tests/haifa2025.docx +0 -0
  68. chgksuite-0.27.1/tests/haifa2025.docx.canon +0 -349
  69. chgksuite-0.27.1/tests/ovsch_boronenko_3.4s +0 -334
  70. chgksuite-0.27.1//320/235/320/276/321/207/321/214/320/241/320/276/320/263/321/200/320/265/320/262/320/260/321/216/321/211/320/265/320/263/320/276/320/236/321/207/320/260/320/263/320/2602025_001.jpeg +0 -0
  71. chgksuite-0.27.1//320/235/320/276/321/207/321/214/320/241/320/276/320/263/321/200/320/265/320/262/320/260/321/216/321/211/320/265/320/263/320/276/320/236/321/207/320/260/320/263/320/2602025_with_stats1.4s +0 -373
  72. chgksuite-0.27.1//320/235/320/276/321/207/321/214/320/241/320/276/320/263/321/200/320/265/320/262/320/260/321/216/321/211/320/265/320/263/320/276/320/236/321/207/320/260/320/263/320/2602025_with_stats1.dbg +0 -562
  73. chgksuite-0.27.1//320/235/320/276/321/207/321/214/320/241/320/276/320/263/321/200/320/265/320/262/320/260/321/216/321/211/320/265/320/263/320/276/320/236/321/207/320/260/320/263/320/2602025_with_stats1.docx +0 -0
  74. chgksuite-0.27.1//321/216 +0 -0
  75. {chgksuite-0.27.1 → chgksuite-0.27.2}/.github/workflows/build.yml +0 -0
  76. {chgksuite-0.27.1 → chgksuite-0.27.2}/.gitignore +0 -0
  77. {chgksuite-0.27.1 → chgksuite-0.27.2}/.gitlab-ci.yml +0 -0
  78. {chgksuite-0.27.1 → chgksuite-0.27.2}/.hgignore +0 -0
  79. {chgksuite-0.27.1 → chgksuite-0.27.2}/LICENSE +0 -0
  80. {chgksuite-0.27.1 → chgksuite-0.27.2}/MANIFEST.in +0 -0
  81. {chgksuite-0.27.1 → chgksuite-0.27.2}/README.md +0 -0
  82. {chgksuite-0.27.1 → chgksuite-0.27.2}/adhoc/regexes_fixer.py +0 -0
  83. {chgksuite-0.27.1 → chgksuite-0.27.2}/author_counter.py +0 -0
  84. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/__init__.py +0 -0
  85. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/__main__.py +0 -0
  86. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/_html2md.py +0 -0
  87. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/cli.py +0 -0
  88. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/chgksuite_parser.py +0 -0
  89. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/composer_common.py +0 -0
  90. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/db.py +0 -0
  91. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/docx.py +0 -0
  92. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/latex.py +0 -0
  93. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/lj.py +0 -0
  94. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/markdown.py +0 -0
  95. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/openquiz.py +0 -0
  96. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/pptx.py +0 -0
  97. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/stats.py +0 -0
  98. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/telegram.py +0 -0
  99. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/composer/telegram_bot.py +0 -0
  100. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/handouter/__init__.py +0 -0
  101. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/handouter/gen.py +0 -0
  102. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/handouter/installer.py +0 -0
  103. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/handouter/pack.py +0 -0
  104. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/handouter/runner.py +0 -0
  105. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/handouter/tex_internals.py +0 -0
  106. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/handouter/utils.py +0 -0
  107. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/lastdir +0 -0
  108. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/parser_db.py +0 -0
  109. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/cheader.tex +0 -0
  110. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/fix-unnumbered-sections.sty +0 -0
  111. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_az.toml +0 -0
  112. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_by.toml +0 -0
  113. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_by_tar.toml +0 -0
  114. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_en.toml +0 -0
  115. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_kz_cyr.toml +0 -0
  116. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_ru.toml +0 -0
  117. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_sr.toml +0 -0
  118. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_ua.toml +0 -0
  119. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_uz.toml +0 -0
  120. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/labels_uz_cyr.toml +0 -0
  121. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/pptx_config.toml +0 -0
  122. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_az.json +0 -0
  123. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_by.json +0 -0
  124. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_by_tar.json +0 -0
  125. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_en.json +0 -0
  126. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_kz_cyr.json +0 -0
  127. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_ru.json +0 -0
  128. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_sr.json +0 -0
  129. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_ua.json +0 -0
  130. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_uz.json +0 -0
  131. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/regexes_uz_cyr.json +0 -0
  132. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/template.docx +0 -0
  133. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/template.pptx +0 -0
  134. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/resources/trello.json +0 -0
  135. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/typotools.py +0 -0
  136. {chgksuite-0.27.1 → chgksuite-0.27.2}/chgksuite/vulture_whitelist.py +0 -0
  137. {chgksuite-0.27.1 → chgksuite-0.27.2}/dev_readme.md +0 -0
  138. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/.gitignore +0 -0
  139. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/12897346880794287463 +0 -0
  140. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/13071136909783630831 +0 -0
  141. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/13307108790744403429 +0 -0
  142. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/13333983167045209281 +0 -0
  143. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/14085495286103177657 +0 -0
  144. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/15213489598760314030 +0 -0
  145. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/15319492834190874243 +0 -0
  146. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/17387058097034297385 +0 -0
  147. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/17722115158263369208 +0 -0
  148. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/18247088324849079572 +0 -0
  149. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/1840587404175770520 +0 -0
  150. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/2517734129797249711 +0 -0
  151. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/273431981325847810 +0 -0
  152. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/2872065536916780406 +0 -0
  153. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/3476900567878811119 +0 -0
  154. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/4757258273854424423 +0 -0
  155. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/5728722062471071239 +0 -0
  156. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/6061198691539556612 +0 -0
  157. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/6079179394456200124 +0 -0
  158. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/735877668610100612 +0 -0
  159. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/9345880734637750342 +0 -0
  160. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/.cache/9490951945832949972 +0 -0
  161. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/4s.md +0 -0
  162. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/add_stats.md +0 -0
  163. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/base.md +0 -0
  164. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/i14n.md +0 -0
  165. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/base.png +0 -0
  166. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/douplet_problem.png +0 -0
  167. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/i14n.png +0 -0
  168. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/i14n_parse.png +0 -0
  169. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/lj.png +0 -0
  170. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/main.png +0 -0
  171. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/openquiz.png +0 -0
  172. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/openquiz2.png +0 -0
  173. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/parse.png +0 -0
  174. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/pptx.png +0 -0
  175. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/pptx_additional_conf.png +0 -0
  176. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/pptx_slide_a.png +0 -0
  177. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/pptx_slide_q.png +0 -0
  178. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/roenko.png +0 -0
  179. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/rozhdsushkov.png +0 -0
  180. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/stats.png +0 -0
  181. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/telegram.png +0 -0
  182. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/trello_download.png +0 -0
  183. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/trello_token.png +0 -0
  184. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/trello_upload.png +0 -0
  185. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/images/word.png +0 -0
  186. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/index.md +0 -0
  187. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/lj.md +0 -0
  188. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/openquiz.md +0 -0
  189. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/pptx.md +0 -0
  190. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/stylesheets/extra.css +0 -0
  191. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/telegram.md +0 -0
  192. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/trello.md +0 -0
  193. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/docs/word.md +0 -0
  194. {chgksuite-0.27.1 → chgksuite-0.27.2}/docs/mkdocs.yml +0 -0
  195. {chgksuite-0.27.1 → chgksuite-0.27.2}/hook-dateparser.py +0 -0
  196. {chgksuite-0.27.1 → chgksuite-0.27.2}/packer.py +0 -0
  197. {chgksuite-0.27.1 → chgksuite-0.27.2}/pytest.ini +0 -0
  198. {chgksuite-0.27.1 → chgksuite-0.27.2}/pytest.sh +0 -0
  199. {chgksuite-0.27.1 → chgksuite-0.27.2}/re_helper.py +0 -0
  200. {chgksuite-0.27.1 → chgksuite-0.27.2}/requirements_dev.txt +0 -0
  201. {chgksuite-0.27.1 → chgksuite-0.27.2}/ruff.toml +0 -0
  202. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/2019-07-23_beln19_u.docx +0 -0
  203. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/2019-07-23_beln19_u.docx.canon +0 -0
  204. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/Kubok_knyagini_Olgi-2015.docx +0 -0
  205. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/Kubok_knyagini_Olgi-2015.docx.canon +0 -0
  206. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/Shkolny_Chemp_Estonii-2014_(48v).docx +0 -0
  207. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/Shkolny_Chemp_Estonii-2014_(48v).docx.canon +0 -0
  208. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/__init__.py +0 -0
  209. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/balt09-1.txt +0 -0
  210. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/balt09-1.txt.canon +0 -0
  211. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/borromeo.txt +0 -0
  212. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/borromeo.txt.canon +0 -0
  213. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/canonize.py +0 -0
  214. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/chgksuite_test.py +0 -0
  215. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/conftest.py +0 -0
  216. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/encrypt_test_files.py +0 -0
  217. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/haifa2025.docx.encrypted +0 -0
  218. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/haifa2025.docx.encrypted.canon +0 -0
  219. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/handouter_layout_test.py +0 -0
  220. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/link_unwrap.docx +0 -0
  221. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/link_unwrap.docx.canon +0 -0
  222. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/ljcredentials +0 -0
  223. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/long_handout.png +0 -0
  224. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/malkin_papkov_synchr.docx +0 -0
  225. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/malkin_papkov_synchr.docx.canon +0 -0
  226. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/octo2021_khmelkov.docx +0 -0
  227. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/octo2021_khmelkov.docx.canon +0 -0
  228. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/ovsch_boronenko_3.docx +0 -0
  229. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/ovsch_boronenko_3.docx.canon +0 -0
  230. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/pass1.docx +0 -0
  231. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/pass1.docx.canon +0 -0
  232. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/settings.json +0 -0
  233. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/single_number_line_test.docx +0 -0
  234. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/single_number_line_test.docx.canon +0 -0
  235. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/smalltest.4s +0 -0
  236. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/test.jpg +0 -0
  237. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/test_blitz.txt +0 -0
  238. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/test_blitz.txt.canon +0 -0
  239. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/tourrev_with_razmin.docx +0 -0
  240. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests/tourrev_with_razmin.docx.canon +0 -0
  241. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests//320/241/320/247/320/240_/320/250/320/265/321/200/320/265/320/264/320/265/320/263/320/260_/320/225/321/200/320/274/320/270/321/210/320/272/320/270/320/275.docx" +0 -0
  242. {chgksuite-0.27.1 → chgksuite-0.27.2}/tests//320/241/320/247/320/240_/320/250/320/265/321/200/320/265/320/264/320/265/320/263/320/260_/320/225/321/200/320/274/320/270/321/210/320/272/320/270/320/275.docx.canon" +0 -0
  243. {chgksuite-0.27.1 → chgksuite-0.27.2}/uv.lock +0 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(uv run pytest:*)",
5
+ "Bash(ls:*)",
6
+ "Bash(python3:*)",
7
+ "Bash(mv:*)"
8
+ ]
9
+ }
10
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chgksuite
3
- Version: 0.27.1
3
+ Version: 0.27.2
4
4
  Summary: A package for chgk automation
5
5
  Project-URL: Homepage, https://gitlab.com/peczony/chgksuite
6
6
  Author-email: Alexander Pecheny <ap@pecheny.me>
@@ -27,7 +27,7 @@ QUESTION_LABELS = [
27
27
  "number",
28
28
  "setcounter",
29
29
  ]
30
- SEP = os.linesep
30
+ SEP = "\n"
31
31
  try:
32
32
  ENC = sys.stdout.encoding or "utf8"
33
33
  except AttributeError:
@@ -152,6 +152,19 @@ def ensure_utf8(s):
152
152
  return s
153
153
 
154
154
 
155
+ def read_text_file(filepath, encoding="utf-8"):
156
+ """Read a text file, fixing corrupted line endings (\r\r\n -> \n) if present."""
157
+ with open(filepath, "rb") as f:
158
+ raw = f.read()
159
+ # Fix corrupted line endings at byte level before decoding
160
+ if b"\r\r\n" in raw:
161
+ raw = raw.replace(b"\r\r\n", b"\n")
162
+ text = raw.decode(encoding)
163
+ # Normalize any remaining line endings
164
+ text = text.replace("\r\n", "\n").replace("\r", "\n")
165
+ return text
166
+
167
+
155
168
  class DummyLogger(object):
156
169
  def info(self, *args, **kwargs):
157
170
  pass
@@ -370,6 +383,5 @@ def compose_4s(structure, args=None):
370
383
  + SEP
371
384
  )
372
385
  tmp = re.sub(r"{}+".format(SEP), SEP, tmp)
373
- tmp = tmp.replace("\r\r", "\r")
374
386
  result += tmp + SEP
375
387
  return result
@@ -12,6 +12,7 @@ from chgksuite.common import (
12
12
  get_source_dirs,
13
13
  init_logger,
14
14
  log_wrap,
15
+ read_text_file,
15
16
  set_lastdir,
16
17
  )
17
18
  from chgksuite.composer.chgksuite_parser import parse_4s
@@ -74,9 +75,7 @@ def process_file_wrapper(filename, sourcedir, targetdir, args):
74
75
 
75
76
  def parse_filepath(filepath, args=None):
76
77
  args = args or DefaultArgs()
77
- with open(filepath, "r", encoding="utf-8") as input_file:
78
- input_text = input_file.read()
79
- input_text = input_text.replace("\r", "")
78
+ input_text = read_text_file(filepath)
80
79
  debug_dir = os.path.dirname(os.path.abspath(filepath))
81
80
  return parse_4s(
82
81
  input_text, randomize=args.randomize, debug=args.debug, debug_dir=debug_dir
@@ -38,6 +38,7 @@ from chgksuite.common import (
38
38
  init_logger,
39
39
  load_settings,
40
40
  log_wrap,
41
+ read_text_file,
41
42
  set_lastdir,
42
43
  )
43
44
  from chgksuite.composer import gui_compose
@@ -47,7 +48,7 @@ from chgksuite.typotools import re_url
47
48
  from chgksuite.typotools import remove_excessive_whitespace as rew
48
49
 
49
50
 
50
- SEP = os.linesep
51
+ SEP = "\n"
51
52
  EDITORS = {
52
53
  "win32": "notepad",
53
54
  "linux2": "xdg-open", # python2
@@ -916,6 +917,9 @@ class UnknownEncodingException(Exception):
916
917
 
917
918
  def chgk_parse_txt(txtfile, encoding=None, defaultauthor="", args=None, logger=None):
918
919
  raw = open(txtfile, "rb").read()
920
+ # Fix corrupted line endings at byte level before decoding
921
+ if b"\r\r\n" in raw:
922
+ raw = raw.replace(b"\r\r\n", b"\n")
919
923
  if not encoding:
920
924
  if chardet.detect(raw)["confidence"] > 0.7:
921
925
  encoding = chardet.detect(raw)["encoding"]
@@ -926,9 +930,10 @@ def chgk_parse_txt(txtfile, encoding=None, defaultauthor="", args=None, logger=N
926
930
  "or resave with a less exotic encoding".format(txtfile)
927
931
  )
928
932
  text = raw.decode(encoding)
929
- text = text.replace("\r", "")
933
+ # Normalize any remaining line endings
934
+ text = text.replace("\r\n", "\n").replace("\r", "\n")
930
935
  if text[0:10] == "Чемпионат:":
931
- return chgk_parse_db(text.replace("\r", ""), debug=args.debug, logger=logger)
936
+ return chgk_parse_db(text, debug=args.debug, logger=logger)
932
937
  return chgk_parse(text.replace("_", "\\_"), defaultauthor=defaultauthor, args=args)
933
938
 
934
939
 
@@ -15,6 +15,7 @@ from chgksuite.common import (
15
15
  get_lastdir,
16
16
  get_source_dirs,
17
17
  log_wrap,
18
+ read_text_file,
18
19
  set_lastdir,
19
20
  )
20
21
 
@@ -50,9 +51,7 @@ def upload_file(filepath, trello, list_name=None):
50
51
  raise Exception(f"list '{list_name}' not found")
51
52
  assert lid is not None
52
53
  print(f"uploading to list '{list_['name']}'")
53
- content = ""
54
- with open(filepath, "r", encoding="utf-8") as f:
55
- content = f.read()
54
+ content = read_text_file(filepath)
56
55
  cards = re.split(r"(\r?\n){2,}", content)
57
56
  cards = [x for x in cards if x != "" and x != "\n" and x != "\r\n"]
58
57
  for card in cards:
@@ -0,0 +1 @@
1
+ __version__ = "0.27.2"
@@ -1,5 +1,8 @@
1
1
  # What’s new
2
2
 
3
+ ## v0.27.2
4
+ - Исправлено несколько багов, в том числе критичный баг, из-за которого программа под Windows выдавала испорченные 4s файлы.
5
+
3
6
  ## v0.27.0
4
7
  - GUI версии теперь не требуют терминала, в них есть окошко, куда выводятся все нужные сообщения.
5
8
  - Добавлена поддержка азербайджанского языка (спасибо Tarlan Asadli).
@@ -53,6 +53,9 @@ chgksuite = "chgksuite.__main__:main"
53
53
  [tool.hatch.version]
54
54
  path = "chgksuite/version.py"
55
55
 
56
+ [tool.hatch.build.targets.sdist]
57
+ exclude = [".venv*"]
58
+
56
59
  [tool.hatch.build.targets.wheel]
57
60
  packages = ["chgksuite"]
58
61
 
@@ -1 +0,0 @@
1
- ,pecheny,pecheny-CQ5TXQ57J0,20.04.2025 22:07,file:///Users/pecheny/Library/Application%20Support/LibreOffice/4;
@@ -1 +0,0 @@
1
- __version__ = "0.27.1"
@@ -1,3 +0,0 @@
1
- Вопрос 1. На картинке https://i.imgur.com/M1hXSbw.png показан первый тест, а на https://via.placeholder.com/200x200.png второй.
2
-
3
- Ответ: Два теста.
@@ -1,10 +0,0 @@
1
- [
2
- [
3
- "question",
4
- "Вопрос 1. На картинке https://i.imgur.com/M1hXSbw.png показан первый тест, а на https://via.placeholder.com/200x200.png второй."
5
- ],
6
- [
7
- "answer",
8
- "Ответ: Два теста."
9
- ]
10
- ]
@@ -1,10 +0,0 @@
1
- [
2
- [
3
- "question",
4
- "Вопрос 1. На картинке https://i.imgur.com/M1hXSbw.png показан первый тест, а на https://via.placeholder.com/200x200.png второй."
5
- ],
6
- [
7
- "answer",
8
- "Ответ: Два теста."
9
- ]
10
- ]
@@ -1,10 +0,0 @@
1
- [
2
- [
3
- "question",
4
- "Вопрос 1. На картинке https://i.imgur.com/M1hXSbw.png показан первый тест, а на https://via.placeholder.com/200x200.png второй."
5
- ],
6
- [
7
- "answer",
8
- "Ответ: Два теста."
9
- ]
10
- ]
@@ -1,10 +0,0 @@
1
- [
2
- [
3
- "question",
4
- "Вопрос 1. На картинке https://i.imgur.com/M1hXSbw.png показан первый тест, а на https://via.placeholder.com/200x200.png второй."
5
- ],
6
- [
7
- "answer",
8
- "Ответ: Два теста."
9
- ]
10
- ]
@@ -1,14 +0,0 @@
1
- [
2
- [
3
- "number",
4
- "1"
5
- ],
6
- [
7
- "question",
8
- "На картинке https://i.imgur.com/M1hXSbw.png показан первый тест, а на https://via.placeholder.com/200x200.png второй."
9
- ],
10
- [
11
- "answer",
12
- " Два теста."
13
- ]
14
- ]
@@ -1,14 +0,0 @@
1
- [
2
- [
3
- "number",
4
- "1"
5
- ],
6
- [
7
- "question",
8
- "На картинке https://i.imgur.com/M1hXSbw.png показан первый тест, а на https://via.placeholder.com/200x200.png второй."
9
- ],
10
- [
11
- "answer",
12
- "Два теста."
13
- ]
14
- ]
@@ -1,10 +0,0 @@
1
- [
2
- [
3
- "Question",
4
- {
5
- "number": "1",
6
- "question": "На картинке (img 980865ba6f3fc5ae490b.png) показан первый тест, а на https://via.placeholder.com/200x200.png второй.",
7
- "answer": "Два теста."
8
- }
9
- ]
10
- ]
@@ -1,10 +0,0 @@
1
- [
2
- [
3
- "Question",
4
- {
5
- "number": "1",
6
- "question": "На картинке (img 980865ba6f3fc5ae490b.png) показан первый тест, а на https://via.placeholder.com/200x200.png второй.",
7
- "answer": "Два теста."
8
- }
9
- ]
10
- ]
Binary file
@@ -1,3 +0,0 @@
1
- Вопрос 1. На картинке https://i.imgur.com/M1hXSbw.png показан первый тест, а на https://via.placeholder.com/200x200.png второй.
2
-
3
- Ответ: Два теста.
Binary file