android-notify 1.60.1__py3-none-any.whl → 1.60.2__py3-none-any.whl

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.

Potentially problematic release.


This version of android-notify might be problematic. Click here for more details.

Files changed (1712) hide show
  1. android_notify/config.py +1 -1
  2. {android_notify-1.60.1.dist-info → android_notify-1.60.2.dist-info}/METADATA +7 -19
  3. android_notify-1.60.2.dist-info/RECORD +1719 -0
  4. android_notify-1.60.2.dist-info/entry_points.txt +2 -0
  5. {android_notify-1.60.1.dist-info → android_notify-1.60.2.dist-info}/top_level.txt +2 -0
  6. docs/examples/flet-working/src/core.py +221 -0
  7. docs/examples/flet-working/src/main.py +68 -0
  8. docs/tests/flet/adv/main.py +97 -0
  9. docs/tests/flet/adv/tests/__init__.py +0 -0
  10. docs/tests/flet/adv/tests/test_android_notify_full.py +199 -0
  11. docs/tests/flet/basic/src/core.py +221 -0
  12. docs/tests/flet/basic/src/main.py +112 -0
  13. docs/website/src/pages/data/laner_Sent.py +24 -0
  14. venv/Lib/site-packages/__editable___android_notify_1_60_0_finder.py +85 -0
  15. venv/Lib/site-packages/_distutils_hack/__init__.py +239 -0
  16. venv/Lib/site-packages/_distutils_hack/override.py +1 -0
  17. venv/Lib/site-packages/build/__init__.py +39 -0
  18. venv/Lib/site-packages/build/__main__.py +486 -0
  19. venv/Lib/site-packages/build/_builder.py +355 -0
  20. venv/Lib/site-packages/build/_compat/__init__.py +0 -0
  21. venv/Lib/site-packages/build/_compat/importlib.py +22 -0
  22. venv/Lib/site-packages/build/_compat/tarfile.py +31 -0
  23. venv/Lib/site-packages/build/_compat/tomllib.py +16 -0
  24. venv/Lib/site-packages/build/_ctx.py +99 -0
  25. venv/Lib/site-packages/build/_exceptions.py +65 -0
  26. venv/Lib/site-packages/build/_types.py +19 -0
  27. venv/Lib/site-packages/build/_util.py +63 -0
  28. venv/Lib/site-packages/build/env.py +393 -0
  29. venv/Lib/site-packages/build/py.typed +0 -0
  30. venv/Lib/site-packages/build/util.py +63 -0
  31. venv/Lib/site-packages/certifi/__init__.py +4 -0
  32. venv/Lib/site-packages/certifi/__main__.py +12 -0
  33. venv/Lib/site-packages/certifi/core.py +83 -0
  34. venv/Lib/site-packages/certifi/py.typed +0 -0
  35. venv/Lib/site-packages/charset_normalizer/__init__.py +48 -0
  36. venv/Lib/site-packages/charset_normalizer/__main__.py +6 -0
  37. venv/Lib/site-packages/charset_normalizer/api.py +669 -0
  38. venv/Lib/site-packages/charset_normalizer/cd.py +395 -0
  39. venv/Lib/site-packages/charset_normalizer/cli/__init__.py +8 -0
  40. venv/Lib/site-packages/charset_normalizer/cli/__main__.py +381 -0
  41. venv/Lib/site-packages/charset_normalizer/constant.py +2015 -0
  42. venv/Lib/site-packages/charset_normalizer/legacy.py +80 -0
  43. venv/Lib/site-packages/charset_normalizer/md.py +635 -0
  44. venv/Lib/site-packages/charset_normalizer/models.py +360 -0
  45. venv/Lib/site-packages/charset_normalizer/py.typed +0 -0
  46. venv/Lib/site-packages/charset_normalizer/utils.py +414 -0
  47. venv/Lib/site-packages/charset_normalizer/version.py +8 -0
  48. venv/Lib/site-packages/colorama/__init__.py +7 -0
  49. venv/Lib/site-packages/colorama/ansi.py +102 -0
  50. venv/Lib/site-packages/colorama/ansitowin32.py +277 -0
  51. venv/Lib/site-packages/colorama/initialise.py +121 -0
  52. venv/Lib/site-packages/colorama/tests/__init__.py +1 -0
  53. venv/Lib/site-packages/colorama/tests/ansi_test.py +76 -0
  54. venv/Lib/site-packages/colorama/tests/ansitowin32_test.py +294 -0
  55. venv/Lib/site-packages/colorama/tests/initialise_test.py +189 -0
  56. venv/Lib/site-packages/colorama/tests/isatty_test.py +57 -0
  57. venv/Lib/site-packages/colorama/tests/utils.py +49 -0
  58. venv/Lib/site-packages/colorama/tests/winterm_test.py +131 -0
  59. venv/Lib/site-packages/colorama/win32.py +180 -0
  60. venv/Lib/site-packages/colorama/winterm.py +195 -0
  61. venv/Lib/site-packages/docutils/__init__.py +341 -0
  62. venv/Lib/site-packages/docutils/__main__.py +103 -0
  63. venv/Lib/site-packages/docutils/core.py +855 -0
  64. venv/Lib/site-packages/docutils/examples.py +123 -0
  65. venv/Lib/site-packages/docutils/frontend.py +1178 -0
  66. venv/Lib/site-packages/docutils/io.py +718 -0
  67. venv/Lib/site-packages/docutils/languages/__init__.py +117 -0
  68. venv/Lib/site-packages/docutils/languages/af.py +58 -0
  69. venv/Lib/site-packages/docutils/languages/ar.py +60 -0
  70. venv/Lib/site-packages/docutils/languages/ca.py +65 -0
  71. venv/Lib/site-packages/docutils/languages/cs.py +60 -0
  72. venv/Lib/site-packages/docutils/languages/da.py +61 -0
  73. venv/Lib/site-packages/docutils/languages/de.py +58 -0
  74. venv/Lib/site-packages/docutils/languages/en.py +60 -0
  75. venv/Lib/site-packages/docutils/languages/eo.py +61 -0
  76. venv/Lib/site-packages/docutils/languages/es.py +58 -0
  77. venv/Lib/site-packages/docutils/languages/fa.py +60 -0
  78. venv/Lib/site-packages/docutils/languages/fi.py +60 -0
  79. venv/Lib/site-packages/docutils/languages/fr.py +58 -0
  80. venv/Lib/site-packages/docutils/languages/gl.py +62 -0
  81. venv/Lib/site-packages/docutils/languages/he.py +62 -0
  82. venv/Lib/site-packages/docutils/languages/it.py +58 -0
  83. venv/Lib/site-packages/docutils/languages/ja.py +60 -0
  84. venv/Lib/site-packages/docutils/languages/ka.py +58 -0
  85. venv/Lib/site-packages/docutils/languages/ko.py +60 -0
  86. venv/Lib/site-packages/docutils/languages/lt.py +60 -0
  87. venv/Lib/site-packages/docutils/languages/lv.py +59 -0
  88. venv/Lib/site-packages/docutils/languages/nl.py +60 -0
  89. venv/Lib/site-packages/docutils/languages/pl.py +60 -0
  90. venv/Lib/site-packages/docutils/languages/pt_br.py +60 -0
  91. venv/Lib/site-packages/docutils/languages/ru.py +58 -0
  92. venv/Lib/site-packages/docutils/languages/sk.py +58 -0
  93. venv/Lib/site-packages/docutils/languages/sv.py +59 -0
  94. venv/Lib/site-packages/docutils/languages/uk.py +58 -0
  95. venv/Lib/site-packages/docutils/languages/zh_cn.py +62 -0
  96. venv/Lib/site-packages/docutils/languages/zh_tw.py +61 -0
  97. venv/Lib/site-packages/docutils/nodes.py +3341 -0
  98. venv/Lib/site-packages/docutils/parsers/__init__.py +115 -0
  99. venv/Lib/site-packages/docutils/parsers/commonmark_wrapper.py +56 -0
  100. venv/Lib/site-packages/docutils/parsers/docutils_xml.py +194 -0
  101. venv/Lib/site-packages/docutils/parsers/null.py +24 -0
  102. venv/Lib/site-packages/docutils/parsers/recommonmark_wrapper.py +174 -0
  103. venv/Lib/site-packages/docutils/parsers/rst/__init__.py +414 -0
  104. venv/Lib/site-packages/docutils/parsers/rst/directives/__init__.py +480 -0
  105. venv/Lib/site-packages/docutils/parsers/rst/directives/admonitions.py +101 -0
  106. venv/Lib/site-packages/docutils/parsers/rst/directives/body.py +318 -0
  107. venv/Lib/site-packages/docutils/parsers/rst/directives/html.py +21 -0
  108. venv/Lib/site-packages/docutils/parsers/rst/directives/images.py +186 -0
  109. venv/Lib/site-packages/docutils/parsers/rst/directives/misc.py +690 -0
  110. venv/Lib/site-packages/docutils/parsers/rst/directives/parts.py +126 -0
  111. venv/Lib/site-packages/docutils/parsers/rst/directives/references.py +28 -0
  112. venv/Lib/site-packages/docutils/parsers/rst/directives/tables.py +523 -0
  113. venv/Lib/site-packages/docutils/parsers/rst/languages/__init__.py +63 -0
  114. venv/Lib/site-packages/docutils/parsers/rst/languages/af.py +107 -0
  115. venv/Lib/site-packages/docutils/parsers/rst/languages/ar.py +99 -0
  116. venv/Lib/site-packages/docutils/parsers/rst/languages/ca.py +130 -0
  117. venv/Lib/site-packages/docutils/parsers/rst/languages/cs.py +110 -0
  118. venv/Lib/site-packages/docutils/parsers/rst/languages/da.py +113 -0
  119. venv/Lib/site-packages/docutils/parsers/rst/languages/de.py +106 -0
  120. venv/Lib/site-packages/docutils/parsers/rst/languages/en.py +115 -0
  121. venv/Lib/site-packages/docutils/parsers/rst/languages/eo.py +118 -0
  122. venv/Lib/site-packages/docutils/parsers/rst/languages/es.py +121 -0
  123. venv/Lib/site-packages/docutils/parsers/rst/languages/fa.py +102 -0
  124. venv/Lib/site-packages/docutils/parsers/rst/languages/fi.py +98 -0
  125. venv/Lib/site-packages/docutils/parsers/rst/languages/fr.py +107 -0
  126. venv/Lib/site-packages/docutils/parsers/rst/languages/gl.py +106 -0
  127. venv/Lib/site-packages/docutils/parsers/rst/languages/he.py +110 -0
  128. venv/Lib/site-packages/docutils/parsers/rst/languages/it.py +98 -0
  129. venv/Lib/site-packages/docutils/parsers/rst/languages/ja.py +119 -0
  130. venv/Lib/site-packages/docutils/parsers/rst/languages/ka.py +89 -0
  131. venv/Lib/site-packages/docutils/parsers/rst/languages/ko.py +111 -0
  132. venv/Lib/site-packages/docutils/parsers/rst/languages/lt.py +109 -0
  133. venv/Lib/site-packages/docutils/parsers/rst/languages/lv.py +108 -0
  134. venv/Lib/site-packages/docutils/parsers/rst/languages/nl.py +113 -0
  135. venv/Lib/site-packages/docutils/parsers/rst/languages/pl.py +100 -0
  136. venv/Lib/site-packages/docutils/parsers/rst/languages/pt_br.py +109 -0
  137. venv/Lib/site-packages/docutils/parsers/rst/languages/ru.py +90 -0
  138. venv/Lib/site-packages/docutils/parsers/rst/languages/sk.py +96 -0
  139. venv/Lib/site-packages/docutils/parsers/rst/languages/sv.py +96 -0
  140. venv/Lib/site-packages/docutils/parsers/rst/languages/uk.py +91 -0
  141. venv/Lib/site-packages/docutils/parsers/rst/languages/zh_cn.py +104 -0
  142. venv/Lib/site-packages/docutils/parsers/rst/languages/zh_tw.py +109 -0
  143. venv/Lib/site-packages/docutils/parsers/rst/roles.py +450 -0
  144. venv/Lib/site-packages/docutils/parsers/rst/states.py +3255 -0
  145. venv/Lib/site-packages/docutils/parsers/rst/tableparser.py +540 -0
  146. venv/Lib/site-packages/docutils/readers/__init__.py +135 -0
  147. venv/Lib/site-packages/docutils/readers/doctree.py +50 -0
  148. venv/Lib/site-packages/docutils/readers/pep.py +55 -0
  149. venv/Lib/site-packages/docutils/readers/standalone.py +65 -0
  150. venv/Lib/site-packages/docutils/statemachine.py +1534 -0
  151. venv/Lib/site-packages/docutils/transforms/__init__.py +196 -0
  152. venv/Lib/site-packages/docutils/transforms/components.py +56 -0
  153. venv/Lib/site-packages/docutils/transforms/frontmatter.py +548 -0
  154. venv/Lib/site-packages/docutils/transforms/misc.py +151 -0
  155. venv/Lib/site-packages/docutils/transforms/parts.py +175 -0
  156. venv/Lib/site-packages/docutils/transforms/peps.py +315 -0
  157. venv/Lib/site-packages/docutils/transforms/references.py +990 -0
  158. venv/Lib/site-packages/docutils/transforms/universal.py +364 -0
  159. venv/Lib/site-packages/docutils/transforms/writer_aux.py +57 -0
  160. venv/Lib/site-packages/docutils/utils/__init__.py +853 -0
  161. venv/Lib/site-packages/docutils/utils/_roman_numerals.py +264 -0
  162. venv/Lib/site-packages/docutils/utils/_typing.py +39 -0
  163. venv/Lib/site-packages/docutils/utils/code_analyzer.py +140 -0
  164. venv/Lib/site-packages/docutils/utils/math/__init__.py +77 -0
  165. venv/Lib/site-packages/docutils/utils/math/latex2mathml.py +1252 -0
  166. venv/Lib/site-packages/docutils/utils/math/math2html.py +3166 -0
  167. venv/Lib/site-packages/docutils/utils/math/mathalphabet2unichar.py +892 -0
  168. venv/Lib/site-packages/docutils/utils/math/mathml_elements.py +482 -0
  169. venv/Lib/site-packages/docutils/utils/math/tex2mathml_extern.py +263 -0
  170. venv/Lib/site-packages/docutils/utils/math/tex2unichar.py +730 -0
  171. venv/Lib/site-packages/docutils/utils/math/unichar2tex.py +808 -0
  172. venv/Lib/site-packages/docutils/utils/punctuation_chars.py +123 -0
  173. venv/Lib/site-packages/docutils/utils/smartquotes.py +1006 -0
  174. venv/Lib/site-packages/docutils/utils/urischemes.py +138 -0
  175. venv/Lib/site-packages/docutils/writers/__init__.py +277 -0
  176. venv/Lib/site-packages/docutils/writers/_html_base.py +1885 -0
  177. venv/Lib/site-packages/docutils/writers/docutils_xml.py +191 -0
  178. venv/Lib/site-packages/docutils/writers/html4css1/__init__.py +964 -0
  179. venv/Lib/site-packages/docutils/writers/html5_polyglot/__init__.py +396 -0
  180. venv/Lib/site-packages/docutils/writers/latex2e/__init__.py +3419 -0
  181. venv/Lib/site-packages/docutils/writers/manpage.py +1353 -0
  182. venv/Lib/site-packages/docutils/writers/null.py +28 -0
  183. venv/Lib/site-packages/docutils/writers/odf_odt/__init__.py +3461 -0
  184. venv/Lib/site-packages/docutils/writers/odf_odt/prepstyles.py +80 -0
  185. venv/Lib/site-packages/docutils/writers/odf_odt/pygmentsformatter.py +106 -0
  186. venv/Lib/site-packages/docutils/writers/pep_html/__init__.py +102 -0
  187. venv/Lib/site-packages/docutils/writers/pseudoxml.py +41 -0
  188. venv/Lib/site-packages/docutils/writers/s5_html/__init__.py +354 -0
  189. venv/Lib/site-packages/docutils/writers/xetex/__init__.py +168 -0
  190. venv/Lib/site-packages/id/__init__.py +91 -0
  191. venv/Lib/site-packages/id/__main__.py +88 -0
  192. venv/Lib/site-packages/id/_internal/oidc/__init__.py +13 -0
  193. venv/Lib/site-packages/id/_internal/oidc/ambient.py +328 -0
  194. venv/Lib/site-packages/idna/__init__.py +45 -0
  195. venv/Lib/site-packages/idna/codec.py +122 -0
  196. venv/Lib/site-packages/idna/compat.py +15 -0
  197. venv/Lib/site-packages/idna/core.py +437 -0
  198. venv/Lib/site-packages/idna/idnadata.py +4309 -0
  199. venv/Lib/site-packages/idna/intranges.py +57 -0
  200. venv/Lib/site-packages/idna/package_data.py +1 -0
  201. venv/Lib/site-packages/idna/py.typed +0 -0
  202. venv/Lib/site-packages/idna/uts46data.py +8841 -0
  203. venv/Lib/site-packages/jaraco/classes/__init__.py +0 -0
  204. venv/Lib/site-packages/jaraco/classes/ancestry.py +76 -0
  205. venv/Lib/site-packages/jaraco/classes/meta.py +85 -0
  206. venv/Lib/site-packages/jaraco/classes/properties.py +241 -0
  207. venv/Lib/site-packages/jaraco/classes/py.typed +0 -0
  208. venv/Lib/site-packages/jaraco/context/__init__.py +356 -0
  209. venv/Lib/site-packages/jaraco/context/py.typed +0 -0
  210. venv/Lib/site-packages/jaraco/functools/__init__.py +714 -0
  211. venv/Lib/site-packages/jaraco/functools/__init__.pyi +123 -0
  212. venv/Lib/site-packages/jaraco/functools/py.typed +0 -0
  213. venv/Lib/site-packages/jnius/__init__.py +89 -0
  214. venv/Lib/site-packages/jnius/env.py +378 -0
  215. venv/Lib/site-packages/jnius/reflect.py +440 -0
  216. venv/Lib/site-packages/jnius/signatures.py +105 -0
  217. venv/Lib/site-packages/jnius_config.py +112 -0
  218. venv/Lib/site-packages/keyring/__init__.py +17 -0
  219. venv/Lib/site-packages/keyring/__main__.py +4 -0
  220. venv/Lib/site-packages/keyring/backend.py +300 -0
  221. venv/Lib/site-packages/keyring/backends/SecretService.py +120 -0
  222. venv/Lib/site-packages/keyring/backends/Windows.py +168 -0
  223. venv/Lib/site-packages/keyring/backends/__init__.py +0 -0
  224. venv/Lib/site-packages/keyring/backends/chainer.py +71 -0
  225. venv/Lib/site-packages/keyring/backends/fail.py +30 -0
  226. venv/Lib/site-packages/keyring/backends/kwallet.py +164 -0
  227. venv/Lib/site-packages/keyring/backends/libsecret.py +155 -0
  228. venv/Lib/site-packages/keyring/backends/macOS/__init__.py +85 -0
  229. venv/Lib/site-packages/keyring/backends/macOS/api.py +184 -0
  230. venv/Lib/site-packages/keyring/backends/null.py +20 -0
  231. venv/Lib/site-packages/keyring/cli.py +220 -0
  232. venv/Lib/site-packages/keyring/compat/__init__.py +7 -0
  233. venv/Lib/site-packages/keyring/compat/properties.py +169 -0
  234. venv/Lib/site-packages/keyring/compat/py312.py +9 -0
  235. venv/Lib/site-packages/keyring/compat/py38.py +9 -0
  236. venv/Lib/site-packages/keyring/completion.py +56 -0
  237. venv/Lib/site-packages/keyring/core.py +200 -0
  238. venv/Lib/site-packages/keyring/credentials.py +85 -0
  239. venv/Lib/site-packages/keyring/devpi_client.py +29 -0
  240. venv/Lib/site-packages/keyring/errors.py +67 -0
  241. venv/Lib/site-packages/keyring/http.py +39 -0
  242. venv/Lib/site-packages/keyring/py.typed +0 -0
  243. venv/Lib/site-packages/keyring/testing/__init__.py +0 -0
  244. venv/Lib/site-packages/keyring/testing/backend.py +200 -0
  245. venv/Lib/site-packages/keyring/testing/util.py +68 -0
  246. venv/Lib/site-packages/keyring/util/__init__.py +11 -0
  247. venv/Lib/site-packages/keyring/util/platform_.py +40 -0
  248. venv/Lib/site-packages/markdown_it/__init__.py +6 -0
  249. venv/Lib/site-packages/markdown_it/_compat.py +1 -0
  250. venv/Lib/site-packages/markdown_it/_punycode.py +67 -0
  251. venv/Lib/site-packages/markdown_it/cli/__init__.py +0 -0
  252. venv/Lib/site-packages/markdown_it/cli/parse.py +110 -0
  253. venv/Lib/site-packages/markdown_it/common/__init__.py +0 -0
  254. venv/Lib/site-packages/markdown_it/common/entities.py +5 -0
  255. venv/Lib/site-packages/markdown_it/common/html_blocks.py +69 -0
  256. venv/Lib/site-packages/markdown_it/common/html_re.py +39 -0
  257. venv/Lib/site-packages/markdown_it/common/normalize_url.py +81 -0
  258. venv/Lib/site-packages/markdown_it/common/utils.py +313 -0
  259. venv/Lib/site-packages/markdown_it/helpers/__init__.py +6 -0
  260. venv/Lib/site-packages/markdown_it/helpers/parse_link_destination.py +83 -0
  261. venv/Lib/site-packages/markdown_it/helpers/parse_link_label.py +44 -0
  262. venv/Lib/site-packages/markdown_it/helpers/parse_link_title.py +75 -0
  263. venv/Lib/site-packages/markdown_it/main.py +350 -0
  264. venv/Lib/site-packages/markdown_it/parser_block.py +113 -0
  265. venv/Lib/site-packages/markdown_it/parser_core.py +46 -0
  266. venv/Lib/site-packages/markdown_it/parser_inline.py +148 -0
  267. venv/Lib/site-packages/markdown_it/presets/__init__.py +28 -0
  268. venv/Lib/site-packages/markdown_it/presets/commonmark.py +75 -0
  269. venv/Lib/site-packages/markdown_it/presets/default.py +36 -0
  270. venv/Lib/site-packages/markdown_it/presets/zero.py +44 -0
  271. venv/Lib/site-packages/markdown_it/py.typed +1 -0
  272. venv/Lib/site-packages/markdown_it/renderer.py +336 -0
  273. venv/Lib/site-packages/markdown_it/ruler.py +275 -0
  274. venv/Lib/site-packages/markdown_it/rules_block/__init__.py +27 -0
  275. venv/Lib/site-packages/markdown_it/rules_block/blockquote.py +299 -0
  276. venv/Lib/site-packages/markdown_it/rules_block/code.py +36 -0
  277. venv/Lib/site-packages/markdown_it/rules_block/fence.py +101 -0
  278. venv/Lib/site-packages/markdown_it/rules_block/heading.py +69 -0
  279. venv/Lib/site-packages/markdown_it/rules_block/hr.py +56 -0
  280. venv/Lib/site-packages/markdown_it/rules_block/html_block.py +90 -0
  281. venv/Lib/site-packages/markdown_it/rules_block/lheading.py +86 -0
  282. venv/Lib/site-packages/markdown_it/rules_block/list.py +345 -0
  283. venv/Lib/site-packages/markdown_it/rules_block/paragraph.py +66 -0
  284. venv/Lib/site-packages/markdown_it/rules_block/reference.py +235 -0
  285. venv/Lib/site-packages/markdown_it/rules_block/state_block.py +261 -0
  286. venv/Lib/site-packages/markdown_it/rules_block/table.py +250 -0
  287. venv/Lib/site-packages/markdown_it/rules_core/__init__.py +19 -0
  288. venv/Lib/site-packages/markdown_it/rules_core/block.py +13 -0
  289. venv/Lib/site-packages/markdown_it/rules_core/inline.py +10 -0
  290. venv/Lib/site-packages/markdown_it/rules_core/linkify.py +149 -0
  291. venv/Lib/site-packages/markdown_it/rules_core/normalize.py +19 -0
  292. venv/Lib/site-packages/markdown_it/rules_core/replacements.py +127 -0
  293. venv/Lib/site-packages/markdown_it/rules_core/smartquotes.py +202 -0
  294. venv/Lib/site-packages/markdown_it/rules_core/state_core.py +25 -0
  295. venv/Lib/site-packages/markdown_it/rules_core/text_join.py +35 -0
  296. venv/Lib/site-packages/markdown_it/rules_inline/__init__.py +31 -0
  297. venv/Lib/site-packages/markdown_it/rules_inline/autolink.py +77 -0
  298. venv/Lib/site-packages/markdown_it/rules_inline/backticks.py +72 -0
  299. venv/Lib/site-packages/markdown_it/rules_inline/balance_pairs.py +138 -0
  300. venv/Lib/site-packages/markdown_it/rules_inline/emphasis.py +102 -0
  301. venv/Lib/site-packages/markdown_it/rules_inline/entity.py +53 -0
  302. venv/Lib/site-packages/markdown_it/rules_inline/escape.py +93 -0
  303. venv/Lib/site-packages/markdown_it/rules_inline/fragments_join.py +43 -0
  304. venv/Lib/site-packages/markdown_it/rules_inline/html_inline.py +43 -0
  305. venv/Lib/site-packages/markdown_it/rules_inline/image.py +148 -0
  306. venv/Lib/site-packages/markdown_it/rules_inline/link.py +149 -0
  307. venv/Lib/site-packages/markdown_it/rules_inline/linkify.py +62 -0
  308. venv/Lib/site-packages/markdown_it/rules_inline/newline.py +44 -0
  309. venv/Lib/site-packages/markdown_it/rules_inline/state_inline.py +165 -0
  310. venv/Lib/site-packages/markdown_it/rules_inline/strikethrough.py +127 -0
  311. venv/Lib/site-packages/markdown_it/rules_inline/text.py +62 -0
  312. venv/Lib/site-packages/markdown_it/token.py +178 -0
  313. venv/Lib/site-packages/markdown_it/tree.py +333 -0
  314. venv/Lib/site-packages/markdown_it/utils.py +186 -0
  315. venv/Lib/site-packages/mdurl/__init__.py +18 -0
  316. venv/Lib/site-packages/mdurl/_decode.py +104 -0
  317. venv/Lib/site-packages/mdurl/_encode.py +85 -0
  318. venv/Lib/site-packages/mdurl/_format.py +27 -0
  319. venv/Lib/site-packages/mdurl/_parse.py +304 -0
  320. venv/Lib/site-packages/mdurl/_url.py +14 -0
  321. venv/Lib/site-packages/mdurl/py.typed +1 -0
  322. venv/Lib/site-packages/more_itertools/__init__.py +6 -0
  323. venv/Lib/site-packages/more_itertools/__init__.pyi +2 -0
  324. venv/Lib/site-packages/more_itertools/more.py +5303 -0
  325. venv/Lib/site-packages/more_itertools/more.pyi +949 -0
  326. venv/Lib/site-packages/more_itertools/py.typed +0 -0
  327. venv/Lib/site-packages/more_itertools/recipes.py +1471 -0
  328. venv/Lib/site-packages/more_itertools/recipes.pyi +205 -0
  329. venv/Lib/site-packages/nh3/__init__.py +5 -0
  330. venv/Lib/site-packages/nh3/__init__.pyi +41 -0
  331. venv/Lib/site-packages/nh3/py.typed +0 -0
  332. venv/Lib/site-packages/packaging/__init__.py +15 -0
  333. venv/Lib/site-packages/packaging/_elffile.py +109 -0
  334. venv/Lib/site-packages/packaging/_manylinux.py +262 -0
  335. venv/Lib/site-packages/packaging/_musllinux.py +85 -0
  336. venv/Lib/site-packages/packaging/_parser.py +353 -0
  337. venv/Lib/site-packages/packaging/_structures.py +61 -0
  338. venv/Lib/site-packages/packaging/_tokenizer.py +195 -0
  339. venv/Lib/site-packages/packaging/licenses/__init__.py +145 -0
  340. venv/Lib/site-packages/packaging/licenses/_spdx.py +759 -0
  341. venv/Lib/site-packages/packaging/markers.py +362 -0
  342. venv/Lib/site-packages/packaging/metadata.py +862 -0
  343. venv/Lib/site-packages/packaging/py.typed +0 -0
  344. venv/Lib/site-packages/packaging/requirements.py +91 -0
  345. venv/Lib/site-packages/packaging/specifiers.py +1019 -0
  346. venv/Lib/site-packages/packaging/tags.py +656 -0
  347. venv/Lib/site-packages/packaging/utils.py +163 -0
  348. venv/Lib/site-packages/packaging/version.py +582 -0
  349. venv/Lib/site-packages/pip/__init__.py +13 -0
  350. venv/Lib/site-packages/pip/__main__.py +24 -0
  351. venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
  352. venv/Lib/site-packages/pip/_internal/__init__.py +18 -0
  353. venv/Lib/site-packages/pip/_internal/build_env.py +417 -0
  354. venv/Lib/site-packages/pip/_internal/cache.py +291 -0
  355. venv/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
  356. venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
  357. venv/Lib/site-packages/pip/_internal/cli/base_command.py +244 -0
  358. venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1110 -0
  359. venv/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
  360. venv/Lib/site-packages/pip/_internal/cli/index_command.py +175 -0
  361. venv/Lib/site-packages/pip/_internal/cli/main.py +80 -0
  362. venv/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
  363. venv/Lib/site-packages/pip/_internal/cli/parser.py +298 -0
  364. venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +151 -0
  365. venv/Lib/site-packages/pip/_internal/cli/req_command.py +371 -0
  366. venv/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
  367. venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
  368. venv/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
  369. venv/Lib/site-packages/pip/_internal/commands/cache.py +231 -0
  370. venv/Lib/site-packages/pip/_internal/commands/check.py +66 -0
  371. venv/Lib/site-packages/pip/_internal/commands/completion.py +135 -0
  372. venv/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
  373. venv/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
  374. venv/Lib/site-packages/pip/_internal/commands/download.py +142 -0
  375. venv/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
  376. venv/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
  377. venv/Lib/site-packages/pip/_internal/commands/help.py +40 -0
  378. venv/Lib/site-packages/pip/_internal/commands/index.py +159 -0
  379. venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
  380. venv/Lib/site-packages/pip/_internal/commands/install.py +803 -0
  381. venv/Lib/site-packages/pip/_internal/commands/list.py +400 -0
  382. venv/Lib/site-packages/pip/_internal/commands/lock.py +167 -0
  383. venv/Lib/site-packages/pip/_internal/commands/search.py +178 -0
  384. venv/Lib/site-packages/pip/_internal/commands/show.py +231 -0
  385. venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
  386. venv/Lib/site-packages/pip/_internal/commands/wheel.py +176 -0
  387. venv/Lib/site-packages/pip/_internal/configuration.py +396 -0
  388. venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
  389. venv/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
  390. venv/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
  391. venv/Lib/site-packages/pip/_internal/distributions/sdist.py +164 -0
  392. venv/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
  393. venv/Lib/site-packages/pip/_internal/exceptions.py +898 -0
  394. venv/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
  395. venv/Lib/site-packages/pip/_internal/index/collector.py +489 -0
  396. venv/Lib/site-packages/pip/_internal/index/package_finder.py +1059 -0
  397. venv/Lib/site-packages/pip/_internal/index/sources.py +287 -0
  398. venv/Lib/site-packages/pip/_internal/locations/__init__.py +441 -0
  399. venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
  400. venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +215 -0
  401. venv/Lib/site-packages/pip/_internal/locations/base.py +82 -0
  402. venv/Lib/site-packages/pip/_internal/main.py +12 -0
  403. venv/Lib/site-packages/pip/_internal/metadata/__init__.py +169 -0
  404. venv/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
  405. venv/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
  406. venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
  407. venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
  408. venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +229 -0
  409. venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
  410. venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
  411. venv/Lib/site-packages/pip/_internal/models/__init__.py +1 -0
  412. venv/Lib/site-packages/pip/_internal/models/candidate.py +25 -0
  413. venv/Lib/site-packages/pip/_internal/models/direct_url.py +227 -0
  414. venv/Lib/site-packages/pip/_internal/models/format_control.py +78 -0
  415. venv/Lib/site-packages/pip/_internal/models/index.py +28 -0
  416. venv/Lib/site-packages/pip/_internal/models/installation_report.py +57 -0
  417. venv/Lib/site-packages/pip/_internal/models/link.py +613 -0
  418. venv/Lib/site-packages/pip/_internal/models/pylock.py +188 -0
  419. venv/Lib/site-packages/pip/_internal/models/scheme.py +25 -0
  420. venv/Lib/site-packages/pip/_internal/models/search_scope.py +126 -0
  421. venv/Lib/site-packages/pip/_internal/models/selection_prefs.py +53 -0
  422. venv/Lib/site-packages/pip/_internal/models/target_python.py +122 -0
  423. venv/Lib/site-packages/pip/_internal/models/wheel.py +80 -0
  424. venv/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
  425. venv/Lib/site-packages/pip/_internal/network/auth.py +564 -0
  426. venv/Lib/site-packages/pip/_internal/network/cache.py +128 -0
  427. venv/Lib/site-packages/pip/_internal/network/download.py +342 -0
  428. venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +215 -0
  429. venv/Lib/site-packages/pip/_internal/network/session.py +528 -0
  430. venv/Lib/site-packages/pip/_internal/network/utils.py +98 -0
  431. venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
  432. venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  433. venv/Lib/site-packages/pip/_internal/operations/build/__init__.py +0 -0
  434. venv/Lib/site-packages/pip/_internal/operations/build/build_tracker.py +140 -0
  435. venv/Lib/site-packages/pip/_internal/operations/build/metadata.py +38 -0
  436. venv/Lib/site-packages/pip/_internal/operations/build/metadata_editable.py +41 -0
  437. venv/Lib/site-packages/pip/_internal/operations/build/wheel.py +38 -0
  438. venv/Lib/site-packages/pip/_internal/operations/build/wheel_editable.py +47 -0
  439. venv/Lib/site-packages/pip/_internal/operations/check.py +175 -0
  440. venv/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
  441. venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
  442. venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +746 -0
  443. venv/Lib/site-packages/pip/_internal/operations/prepare.py +748 -0
  444. venv/Lib/site-packages/pip/_internal/pyproject.py +123 -0
  445. venv/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
  446. venv/Lib/site-packages/pip/_internal/req/constructors.py +566 -0
  447. venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
  448. venv/Lib/site-packages/pip/_internal/req/req_file.py +619 -0
  449. venv/Lib/site-packages/pip/_internal/req/req_install.py +828 -0
  450. venv/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
  451. venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
  452. venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  453. venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
  454. venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  455. venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
  456. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  457. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
  458. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +591 -0
  459. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +845 -0
  460. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
  461. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +285 -0
  462. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +98 -0
  463. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +247 -0
  464. venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +332 -0
  465. venv/Lib/site-packages/pip/_internal/self_outdated_check.py +262 -0
  466. venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  467. venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
  468. venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
  469. venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
  470. venv/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
  471. venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
  472. venv/Lib/site-packages/pip/_internal/utils/datetime.py +10 -0
  473. venv/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
  474. venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
  475. venv/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
  476. venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
  477. venv/Lib/site-packages/pip/_internal/utils/filesystem.py +164 -0
  478. venv/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
  479. venv/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
  480. venv/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
  481. venv/Lib/site-packages/pip/_internal/utils/logging.py +364 -0
  482. venv/Lib/site-packages/pip/_internal/utils/misc.py +765 -0
  483. venv/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
  484. venv/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
  485. venv/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
  486. venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
  487. venv/Lib/site-packages/pip/_internal/utils/unpacking.py +362 -0
  488. venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
  489. venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
  490. venv/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
  491. venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  492. venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
  493. venv/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
  494. venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
  495. venv/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
  496. venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +693 -0
  497. venv/Lib/site-packages/pip/_internal/wheel_builder.py +261 -0
  498. venv/Lib/site-packages/pip/_vendor/__init__.py +117 -0
  499. venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +29 -0
  500. venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
  501. venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +168 -0
  502. venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
  503. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
  504. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
  505. venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
  506. venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
  507. venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +119 -0
  508. venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
  509. venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  510. venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
  511. venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
  512. venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
  513. venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  514. venv/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
  515. venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
  516. venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
  517. venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
  518. venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
  519. venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
  520. venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
  521. venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
  522. venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
  523. venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
  524. venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
  525. venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
  526. venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
  527. venv/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
  528. venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
  529. venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
  530. venv/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
  531. venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
  532. venv/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
  533. venv/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
  534. venv/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
  535. venv/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
  536. venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +4243 -0
  537. venv/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
  538. venv/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
  539. venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
  540. venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8681 -0
  541. venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
  542. venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  543. venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
  544. venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
  545. venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
  546. venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +109 -0
  547. venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
  548. venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
  549. venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +353 -0
  550. venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
  551. venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +195 -0
  552. venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +145 -0
  553. venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +759 -0
  554. venv/Lib/site-packages/pip/_vendor/packaging/markers.py +362 -0
  555. venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +862 -0
  556. venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
  557. venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +91 -0
  558. venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1019 -0
  559. venv/Lib/site-packages/pip/_vendor/packaging/tags.py +656 -0
  560. venv/Lib/site-packages/pip/_vendor/packaging/utils.py +163 -0
  561. venv/Lib/site-packages/pip/_vendor/packaging/version.py +582 -0
  562. venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
  563. venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
  564. venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
  565. venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
  566. venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
  567. venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +146 -0
  568. venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  569. venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
  570. venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +34 -0
  571. venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +272 -0
  572. venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
  573. venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
  574. venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
  575. venv/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
  576. venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
  577. venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
  578. venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
  579. venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  580. venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
  581. venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
  582. venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
  583. venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
  584. venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
  585. venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
  586. venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
  587. venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
  588. venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
  589. venv/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
  590. venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
  591. venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
  592. venv/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
  593. venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
  594. venv/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
  595. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
  596. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
  597. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
  598. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
  599. venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  600. venv/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
  601. venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  602. venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
  603. venv/Lib/site-packages/pip/_vendor/requests/adapters.py +696 -0
  604. venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
  605. venv/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
  606. venv/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
  607. venv/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
  608. venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
  609. venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
  610. venv/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
  611. venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
  612. venv/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
  613. venv/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
  614. venv/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
  615. venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
  616. venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
  617. venv/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
  618. venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
  619. venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
  620. venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  621. venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
  622. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
  623. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
  624. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
  625. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
  626. venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +627 -0
  627. venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
  628. venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
  629. venv/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
  630. venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
  631. venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
  632. venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
  633. venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
  634. venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
  635. venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
  636. venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
  637. venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
  638. venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
  639. venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
  640. venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
  641. venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
  642. venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
  643. venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
  644. venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
  645. venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
  646. venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
  647. venv/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
  648. venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
  649. venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
  650. venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
  651. venv/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
  652. venv/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
  653. venv/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
  654. venv/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
  655. venv/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
  656. venv/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
  657. venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
  658. venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
  659. venv/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
  660. venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
  661. venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
  662. venv/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
  663. venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
  664. venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
  665. venv/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
  666. venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
  667. venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
  668. venv/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
  669. venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
  670. venv/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
  671. venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
  672. venv/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
  673. venv/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
  674. venv/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
  675. venv/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
  676. venv/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
  677. venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
  678. venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
  679. venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
  680. venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
  681. venv/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
  682. venv/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
  683. venv/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
  684. venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
  685. venv/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
  686. venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
  687. venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
  688. venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
  689. venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
  690. venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
  691. venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
  692. venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
  693. venv/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
  694. venv/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
  695. venv/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
  696. venv/Lib/site-packages/pip/_vendor/rich/style.py +792 -0
  697. venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
  698. venv/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
  699. venv/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
  700. venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
  701. venv/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
  702. venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
  703. venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
  704. venv/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
  705. venv/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
  706. venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
  707. venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +777 -0
  708. venv/Lib/site-packages/pip/_vendor/tomli/_re.py +115 -0
  709. venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
  710. venv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
  711. venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
  712. venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
  713. venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
  714. venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
  715. venv/Lib/site-packages/pip/_vendor/truststore/_api.py +341 -0
  716. venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
  717. venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +68 -0
  718. venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
  719. venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
  720. venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
  721. venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
  722. venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
  723. venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  724. venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
  725. venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
  726. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  727. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  728. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  729. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  730. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
  731. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  732. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
  733. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
  734. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
  735. venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  736. venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
  737. venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  738. venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  739. venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  740. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  741. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  742. venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
  743. venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
  744. venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
  745. venv/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
  746. venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
  747. venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  748. venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
  749. venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
  750. venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  751. venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
  752. venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  753. venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
  754. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
  755. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  756. venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  757. venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
  758. venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
  759. venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
  760. venv/Lib/site-packages/pip/py.typed +4 -0
  761. venv/Lib/site-packages/pkg_resources/__init__.py +3713 -0
  762. venv/Lib/site-packages/pkg_resources/py.typed +0 -0
  763. venv/Lib/site-packages/pkg_resources/tests/__init__.py +0 -0
  764. venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +7 -0
  765. venv/Lib/site-packages/pkg_resources/tests/test_find_distributions.py +56 -0
  766. venv/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py +54 -0
  767. venv/Lib/site-packages/pkg_resources/tests/test_markers.py +8 -0
  768. venv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +485 -0
  769. venv/Lib/site-packages/pkg_resources/tests/test_resources.py +869 -0
  770. venv/Lib/site-packages/pkg_resources/tests/test_working_set.py +505 -0
  771. venv/Lib/site-packages/pygments/__init__.py +82 -0
  772. venv/Lib/site-packages/pygments/__main__.py +17 -0
  773. venv/Lib/site-packages/pygments/cmdline.py +668 -0
  774. venv/Lib/site-packages/pygments/console.py +70 -0
  775. venv/Lib/site-packages/pygments/filter.py +70 -0
  776. venv/Lib/site-packages/pygments/filters/__init__.py +940 -0
  777. venv/Lib/site-packages/pygments/formatter.py +129 -0
  778. venv/Lib/site-packages/pygments/formatters/__init__.py +157 -0
  779. venv/Lib/site-packages/pygments/formatters/_mapping.py +23 -0
  780. venv/Lib/site-packages/pygments/formatters/bbcode.py +108 -0
  781. venv/Lib/site-packages/pygments/formatters/groff.py +170 -0
  782. venv/Lib/site-packages/pygments/formatters/html.py +995 -0
  783. venv/Lib/site-packages/pygments/formatters/img.py +686 -0
  784. venv/Lib/site-packages/pygments/formatters/irc.py +154 -0
  785. venv/Lib/site-packages/pygments/formatters/latex.py +518 -0
  786. venv/Lib/site-packages/pygments/formatters/other.py +160 -0
  787. venv/Lib/site-packages/pygments/formatters/pangomarkup.py +83 -0
  788. venv/Lib/site-packages/pygments/formatters/rtf.py +349 -0
  789. venv/Lib/site-packages/pygments/formatters/svg.py +185 -0
  790. venv/Lib/site-packages/pygments/formatters/terminal.py +127 -0
  791. venv/Lib/site-packages/pygments/formatters/terminal256.py +338 -0
  792. venv/Lib/site-packages/pygments/lexer.py +961 -0
  793. venv/Lib/site-packages/pygments/lexers/__init__.py +362 -0
  794. venv/Lib/site-packages/pygments/lexers/_ada_builtins.py +103 -0
  795. venv/Lib/site-packages/pygments/lexers/_asy_builtins.py +1644 -0
  796. venv/Lib/site-packages/pygments/lexers/_cl_builtins.py +231 -0
  797. venv/Lib/site-packages/pygments/lexers/_cocoa_builtins.py +75 -0
  798. venv/Lib/site-packages/pygments/lexers/_csound_builtins.py +1780 -0
  799. venv/Lib/site-packages/pygments/lexers/_css_builtins.py +558 -0
  800. venv/Lib/site-packages/pygments/lexers/_googlesql_builtins.py +918 -0
  801. venv/Lib/site-packages/pygments/lexers/_julia_builtins.py +411 -0
  802. venv/Lib/site-packages/pygments/lexers/_lasso_builtins.py +5326 -0
  803. venv/Lib/site-packages/pygments/lexers/_lilypond_builtins.py +4932 -0
  804. venv/Lib/site-packages/pygments/lexers/_lua_builtins.py +285 -0
  805. venv/Lib/site-packages/pygments/lexers/_luau_builtins.py +62 -0
  806. venv/Lib/site-packages/pygments/lexers/_mapping.py +602 -0
  807. venv/Lib/site-packages/pygments/lexers/_mql_builtins.py +1171 -0
  808. venv/Lib/site-packages/pygments/lexers/_mysql_builtins.py +1335 -0
  809. venv/Lib/site-packages/pygments/lexers/_openedge_builtins.py +2600 -0
  810. venv/Lib/site-packages/pygments/lexers/_php_builtins.py +3325 -0
  811. venv/Lib/site-packages/pygments/lexers/_postgres_builtins.py +739 -0
  812. venv/Lib/site-packages/pygments/lexers/_qlik_builtins.py +666 -0
  813. venv/Lib/site-packages/pygments/lexers/_scheme_builtins.py +1609 -0
  814. venv/Lib/site-packages/pygments/lexers/_scilab_builtins.py +3093 -0
  815. venv/Lib/site-packages/pygments/lexers/_sourcemod_builtins.py +1151 -0
  816. venv/Lib/site-packages/pygments/lexers/_sql_builtins.py +106 -0
  817. venv/Lib/site-packages/pygments/lexers/_stan_builtins.py +648 -0
  818. venv/Lib/site-packages/pygments/lexers/_stata_builtins.py +457 -0
  819. venv/Lib/site-packages/pygments/lexers/_tsql_builtins.py +1003 -0
  820. venv/Lib/site-packages/pygments/lexers/_usd_builtins.py +112 -0
  821. venv/Lib/site-packages/pygments/lexers/_vbscript_builtins.py +279 -0
  822. venv/Lib/site-packages/pygments/lexers/_vim_builtins.py +1938 -0
  823. venv/Lib/site-packages/pygments/lexers/actionscript.py +243 -0
  824. venv/Lib/site-packages/pygments/lexers/ada.py +144 -0
  825. venv/Lib/site-packages/pygments/lexers/agile.py +25 -0
  826. venv/Lib/site-packages/pygments/lexers/algebra.py +299 -0
  827. venv/Lib/site-packages/pygments/lexers/ambient.py +75 -0
  828. venv/Lib/site-packages/pygments/lexers/amdgpu.py +54 -0
  829. venv/Lib/site-packages/pygments/lexers/ampl.py +87 -0
  830. venv/Lib/site-packages/pygments/lexers/apdlexer.py +593 -0
  831. venv/Lib/site-packages/pygments/lexers/apl.py +103 -0
  832. venv/Lib/site-packages/pygments/lexers/archetype.py +315 -0
  833. venv/Lib/site-packages/pygments/lexers/arrow.py +116 -0
  834. venv/Lib/site-packages/pygments/lexers/arturo.py +249 -0
  835. venv/Lib/site-packages/pygments/lexers/asc.py +55 -0
  836. venv/Lib/site-packages/pygments/lexers/asm.py +1051 -0
  837. venv/Lib/site-packages/pygments/lexers/asn1.py +178 -0
  838. venv/Lib/site-packages/pygments/lexers/automation.py +379 -0
  839. venv/Lib/site-packages/pygments/lexers/bare.py +101 -0
  840. venv/Lib/site-packages/pygments/lexers/basic.py +656 -0
  841. venv/Lib/site-packages/pygments/lexers/bdd.py +57 -0
  842. venv/Lib/site-packages/pygments/lexers/berry.py +99 -0
  843. venv/Lib/site-packages/pygments/lexers/bibtex.py +159 -0
  844. venv/Lib/site-packages/pygments/lexers/blueprint.py +173 -0
  845. venv/Lib/site-packages/pygments/lexers/boa.py +97 -0
  846. venv/Lib/site-packages/pygments/lexers/bqn.py +112 -0
  847. venv/Lib/site-packages/pygments/lexers/business.py +625 -0
  848. venv/Lib/site-packages/pygments/lexers/c_cpp.py +414 -0
  849. venv/Lib/site-packages/pygments/lexers/c_like.py +738 -0
  850. venv/Lib/site-packages/pygments/lexers/capnproto.py +74 -0
  851. venv/Lib/site-packages/pygments/lexers/carbon.py +95 -0
  852. venv/Lib/site-packages/pygments/lexers/cddl.py +172 -0
  853. venv/Lib/site-packages/pygments/lexers/chapel.py +139 -0
  854. venv/Lib/site-packages/pygments/lexers/clean.py +180 -0
  855. venv/Lib/site-packages/pygments/lexers/codeql.py +80 -0
  856. venv/Lib/site-packages/pygments/lexers/comal.py +81 -0
  857. venv/Lib/site-packages/pygments/lexers/compiled.py +35 -0
  858. venv/Lib/site-packages/pygments/lexers/configs.py +1433 -0
  859. venv/Lib/site-packages/pygments/lexers/console.py +114 -0
  860. venv/Lib/site-packages/pygments/lexers/cplint.py +43 -0
  861. venv/Lib/site-packages/pygments/lexers/crystal.py +364 -0
  862. venv/Lib/site-packages/pygments/lexers/csound.py +466 -0
  863. venv/Lib/site-packages/pygments/lexers/css.py +602 -0
  864. venv/Lib/site-packages/pygments/lexers/d.py +259 -0
  865. venv/Lib/site-packages/pygments/lexers/dalvik.py +126 -0
  866. venv/Lib/site-packages/pygments/lexers/data.py +763 -0
  867. venv/Lib/site-packages/pygments/lexers/dax.py +135 -0
  868. venv/Lib/site-packages/pygments/lexers/devicetree.py +108 -0
  869. venv/Lib/site-packages/pygments/lexers/diff.py +169 -0
  870. venv/Lib/site-packages/pygments/lexers/dns.py +109 -0
  871. venv/Lib/site-packages/pygments/lexers/dotnet.py +873 -0
  872. venv/Lib/site-packages/pygments/lexers/dsls.py +970 -0
  873. venv/Lib/site-packages/pygments/lexers/dylan.py +279 -0
  874. venv/Lib/site-packages/pygments/lexers/ecl.py +144 -0
  875. venv/Lib/site-packages/pygments/lexers/eiffel.py +68 -0
  876. venv/Lib/site-packages/pygments/lexers/elm.py +123 -0
  877. venv/Lib/site-packages/pygments/lexers/elpi.py +175 -0
  878. venv/Lib/site-packages/pygments/lexers/email.py +132 -0
  879. venv/Lib/site-packages/pygments/lexers/erlang.py +526 -0
  880. venv/Lib/site-packages/pygments/lexers/esoteric.py +300 -0
  881. venv/Lib/site-packages/pygments/lexers/ezhil.py +76 -0
  882. venv/Lib/site-packages/pygments/lexers/factor.py +363 -0
  883. venv/Lib/site-packages/pygments/lexers/fantom.py +251 -0
  884. venv/Lib/site-packages/pygments/lexers/felix.py +275 -0
  885. venv/Lib/site-packages/pygments/lexers/fift.py +68 -0
  886. venv/Lib/site-packages/pygments/lexers/floscript.py +81 -0
  887. venv/Lib/site-packages/pygments/lexers/forth.py +178 -0
  888. venv/Lib/site-packages/pygments/lexers/fortran.py +212 -0
  889. venv/Lib/site-packages/pygments/lexers/foxpro.py +427 -0
  890. venv/Lib/site-packages/pygments/lexers/freefem.py +893 -0
  891. venv/Lib/site-packages/pygments/lexers/func.py +110 -0
  892. venv/Lib/site-packages/pygments/lexers/functional.py +21 -0
  893. venv/Lib/site-packages/pygments/lexers/futhark.py +105 -0
  894. venv/Lib/site-packages/pygments/lexers/gcodelexer.py +35 -0
  895. venv/Lib/site-packages/pygments/lexers/gdscript.py +189 -0
  896. venv/Lib/site-packages/pygments/lexers/gleam.py +74 -0
  897. venv/Lib/site-packages/pygments/lexers/go.py +97 -0
  898. venv/Lib/site-packages/pygments/lexers/grammar_notation.py +262 -0
  899. venv/Lib/site-packages/pygments/lexers/graph.py +108 -0
  900. venv/Lib/site-packages/pygments/lexers/graphics.py +794 -0
  901. venv/Lib/site-packages/pygments/lexers/graphql.py +176 -0
  902. venv/Lib/site-packages/pygments/lexers/graphviz.py +58 -0
  903. venv/Lib/site-packages/pygments/lexers/gsql.py +103 -0
  904. venv/Lib/site-packages/pygments/lexers/hare.py +73 -0
  905. venv/Lib/site-packages/pygments/lexers/haskell.py +866 -0
  906. venv/Lib/site-packages/pygments/lexers/haxe.py +935 -0
  907. venv/Lib/site-packages/pygments/lexers/hdl.py +466 -0
  908. venv/Lib/site-packages/pygments/lexers/hexdump.py +102 -0
  909. venv/Lib/site-packages/pygments/lexers/html.py +670 -0
  910. venv/Lib/site-packages/pygments/lexers/idl.py +284 -0
  911. venv/Lib/site-packages/pygments/lexers/igor.py +435 -0
  912. venv/Lib/site-packages/pygments/lexers/inferno.py +95 -0
  913. venv/Lib/site-packages/pygments/lexers/installers.py +352 -0
  914. venv/Lib/site-packages/pygments/lexers/int_fiction.py +1370 -0
  915. venv/Lib/site-packages/pygments/lexers/iolang.py +61 -0
  916. venv/Lib/site-packages/pygments/lexers/j.py +151 -0
  917. venv/Lib/site-packages/pygments/lexers/javascript.py +1591 -0
  918. venv/Lib/site-packages/pygments/lexers/jmespath.py +69 -0
  919. venv/Lib/site-packages/pygments/lexers/jslt.py +94 -0
  920. venv/Lib/site-packages/pygments/lexers/json5.py +83 -0
  921. venv/Lib/site-packages/pygments/lexers/jsonnet.py +169 -0
  922. venv/Lib/site-packages/pygments/lexers/jsx.py +100 -0
  923. venv/Lib/site-packages/pygments/lexers/julia.py +294 -0
  924. venv/Lib/site-packages/pygments/lexers/jvm.py +1802 -0
  925. venv/Lib/site-packages/pygments/lexers/kuin.py +332 -0
  926. venv/Lib/site-packages/pygments/lexers/kusto.py +93 -0
  927. venv/Lib/site-packages/pygments/lexers/ldap.py +155 -0
  928. venv/Lib/site-packages/pygments/lexers/lean.py +241 -0
  929. venv/Lib/site-packages/pygments/lexers/lilypond.py +225 -0
  930. venv/Lib/site-packages/pygments/lexers/lisp.py +3146 -0
  931. venv/Lib/site-packages/pygments/lexers/macaulay2.py +1814 -0
  932. venv/Lib/site-packages/pygments/lexers/make.py +212 -0
  933. venv/Lib/site-packages/pygments/lexers/maple.py +291 -0
  934. venv/Lib/site-packages/pygments/lexers/markup.py +1654 -0
  935. venv/Lib/site-packages/pygments/lexers/math.py +21 -0
  936. venv/Lib/site-packages/pygments/lexers/matlab.py +3307 -0
  937. venv/Lib/site-packages/pygments/lexers/maxima.py +84 -0
  938. venv/Lib/site-packages/pygments/lexers/meson.py +139 -0
  939. venv/Lib/site-packages/pygments/lexers/mime.py +210 -0
  940. venv/Lib/site-packages/pygments/lexers/minecraft.py +391 -0
  941. venv/Lib/site-packages/pygments/lexers/mips.py +130 -0
  942. venv/Lib/site-packages/pygments/lexers/ml.py +958 -0
  943. venv/Lib/site-packages/pygments/lexers/modeling.py +366 -0
  944. venv/Lib/site-packages/pygments/lexers/modula2.py +1579 -0
  945. venv/Lib/site-packages/pygments/lexers/mojo.py +707 -0
  946. venv/Lib/site-packages/pygments/lexers/monte.py +203 -0
  947. venv/Lib/site-packages/pygments/lexers/mosel.py +447 -0
  948. venv/Lib/site-packages/pygments/lexers/ncl.py +894 -0
  949. venv/Lib/site-packages/pygments/lexers/nimrod.py +199 -0
  950. venv/Lib/site-packages/pygments/lexers/nit.py +63 -0
  951. venv/Lib/site-packages/pygments/lexers/nix.py +144 -0
  952. venv/Lib/site-packages/pygments/lexers/numbair.py +63 -0
  953. venv/Lib/site-packages/pygments/lexers/oberon.py +120 -0
  954. venv/Lib/site-packages/pygments/lexers/objective.py +513 -0
  955. venv/Lib/site-packages/pygments/lexers/ooc.py +84 -0
  956. venv/Lib/site-packages/pygments/lexers/openscad.py +96 -0
  957. venv/Lib/site-packages/pygments/lexers/other.py +41 -0
  958. venv/Lib/site-packages/pygments/lexers/parasail.py +78 -0
  959. venv/Lib/site-packages/pygments/lexers/parsers.py +798 -0
  960. venv/Lib/site-packages/pygments/lexers/pascal.py +644 -0
  961. venv/Lib/site-packages/pygments/lexers/pawn.py +202 -0
  962. venv/Lib/site-packages/pygments/lexers/pddl.py +82 -0
  963. venv/Lib/site-packages/pygments/lexers/perl.py +733 -0
  964. venv/Lib/site-packages/pygments/lexers/phix.py +363 -0
  965. venv/Lib/site-packages/pygments/lexers/php.py +334 -0
  966. venv/Lib/site-packages/pygments/lexers/pointless.py +70 -0
  967. venv/Lib/site-packages/pygments/lexers/pony.py +93 -0
  968. venv/Lib/site-packages/pygments/lexers/praat.py +303 -0
  969. venv/Lib/site-packages/pygments/lexers/procfile.py +41 -0
  970. venv/Lib/site-packages/pygments/lexers/prolog.py +318 -0
  971. venv/Lib/site-packages/pygments/lexers/promql.py +176 -0
  972. venv/Lib/site-packages/pygments/lexers/prql.py +251 -0
  973. venv/Lib/site-packages/pygments/lexers/ptx.py +119 -0
  974. venv/Lib/site-packages/pygments/lexers/python.py +1201 -0
  975. venv/Lib/site-packages/pygments/lexers/q.py +187 -0
  976. venv/Lib/site-packages/pygments/lexers/qlik.py +117 -0
  977. venv/Lib/site-packages/pygments/lexers/qvt.py +153 -0
  978. venv/Lib/site-packages/pygments/lexers/r.py +196 -0
  979. venv/Lib/site-packages/pygments/lexers/rdf.py +468 -0
  980. venv/Lib/site-packages/pygments/lexers/rebol.py +419 -0
  981. venv/Lib/site-packages/pygments/lexers/rego.py +57 -0
  982. venv/Lib/site-packages/pygments/lexers/resource.py +83 -0
  983. venv/Lib/site-packages/pygments/lexers/ride.py +138 -0
  984. venv/Lib/site-packages/pygments/lexers/rita.py +42 -0
  985. venv/Lib/site-packages/pygments/lexers/rnc.py +66 -0
  986. venv/Lib/site-packages/pygments/lexers/roboconf.py +81 -0
  987. venv/Lib/site-packages/pygments/lexers/robotframework.py +551 -0
  988. venv/Lib/site-packages/pygments/lexers/ruby.py +518 -0
  989. venv/Lib/site-packages/pygments/lexers/rust.py +222 -0
  990. venv/Lib/site-packages/pygments/lexers/sas.py +227 -0
  991. venv/Lib/site-packages/pygments/lexers/savi.py +171 -0
  992. venv/Lib/site-packages/pygments/lexers/scdoc.py +85 -0
  993. venv/Lib/site-packages/pygments/lexers/scripting.py +1616 -0
  994. venv/Lib/site-packages/pygments/lexers/sgf.py +59 -0
  995. venv/Lib/site-packages/pygments/lexers/shell.py +902 -0
  996. venv/Lib/site-packages/pygments/lexers/sieve.py +78 -0
  997. venv/Lib/site-packages/pygments/lexers/slash.py +183 -0
  998. venv/Lib/site-packages/pygments/lexers/smalltalk.py +194 -0
  999. venv/Lib/site-packages/pygments/lexers/smithy.py +77 -0
  1000. venv/Lib/site-packages/pygments/lexers/smv.py +78 -0
  1001. venv/Lib/site-packages/pygments/lexers/snobol.py +82 -0
  1002. venv/Lib/site-packages/pygments/lexers/solidity.py +87 -0
  1003. venv/Lib/site-packages/pygments/lexers/soong.py +78 -0
  1004. venv/Lib/site-packages/pygments/lexers/sophia.py +102 -0
  1005. venv/Lib/site-packages/pygments/lexers/special.py +122 -0
  1006. venv/Lib/site-packages/pygments/lexers/spice.py +70 -0
  1007. venv/Lib/site-packages/pygments/lexers/sql.py +1109 -0
  1008. venv/Lib/site-packages/pygments/lexers/srcinfo.py +62 -0
  1009. venv/Lib/site-packages/pygments/lexers/stata.py +170 -0
  1010. venv/Lib/site-packages/pygments/lexers/supercollider.py +94 -0
  1011. venv/Lib/site-packages/pygments/lexers/tablegen.py +177 -0
  1012. venv/Lib/site-packages/pygments/lexers/tact.py +303 -0
  1013. venv/Lib/site-packages/pygments/lexers/tal.py +77 -0
  1014. venv/Lib/site-packages/pygments/lexers/tcl.py +148 -0
  1015. venv/Lib/site-packages/pygments/lexers/teal.py +88 -0
  1016. venv/Lib/site-packages/pygments/lexers/templates.py +2355 -0
  1017. venv/Lib/site-packages/pygments/lexers/teraterm.py +325 -0
  1018. venv/Lib/site-packages/pygments/lexers/testing.py +209 -0
  1019. venv/Lib/site-packages/pygments/lexers/text.py +27 -0
  1020. venv/Lib/site-packages/pygments/lexers/textedit.py +205 -0
  1021. venv/Lib/site-packages/pygments/lexers/textfmts.py +436 -0
  1022. venv/Lib/site-packages/pygments/lexers/theorem.py +410 -0
  1023. venv/Lib/site-packages/pygments/lexers/thingsdb.py +140 -0
  1024. venv/Lib/site-packages/pygments/lexers/tlb.py +59 -0
  1025. venv/Lib/site-packages/pygments/lexers/tls.py +54 -0
  1026. venv/Lib/site-packages/pygments/lexers/tnt.py +270 -0
  1027. venv/Lib/site-packages/pygments/lexers/trafficscript.py +51 -0
  1028. venv/Lib/site-packages/pygments/lexers/typoscript.py +216 -0
  1029. venv/Lib/site-packages/pygments/lexers/typst.py +160 -0
  1030. venv/Lib/site-packages/pygments/lexers/ul4.py +309 -0
  1031. venv/Lib/site-packages/pygments/lexers/unicon.py +413 -0
  1032. venv/Lib/site-packages/pygments/lexers/urbi.py +145 -0
  1033. venv/Lib/site-packages/pygments/lexers/usd.py +85 -0
  1034. venv/Lib/site-packages/pygments/lexers/varnish.py +189 -0
  1035. venv/Lib/site-packages/pygments/lexers/verification.py +113 -0
  1036. venv/Lib/site-packages/pygments/lexers/verifpal.py +65 -0
  1037. venv/Lib/site-packages/pygments/lexers/vip.py +150 -0
  1038. venv/Lib/site-packages/pygments/lexers/vyper.py +140 -0
  1039. venv/Lib/site-packages/pygments/lexers/web.py +24 -0
  1040. venv/Lib/site-packages/pygments/lexers/webassembly.py +119 -0
  1041. venv/Lib/site-packages/pygments/lexers/webidl.py +298 -0
  1042. venv/Lib/site-packages/pygments/lexers/webmisc.py +1006 -0
  1043. venv/Lib/site-packages/pygments/lexers/wgsl.py +406 -0
  1044. venv/Lib/site-packages/pygments/lexers/whiley.py +115 -0
  1045. venv/Lib/site-packages/pygments/lexers/wowtoc.py +120 -0
  1046. venv/Lib/site-packages/pygments/lexers/wren.py +98 -0
  1047. venv/Lib/site-packages/pygments/lexers/x10.py +66 -0
  1048. venv/Lib/site-packages/pygments/lexers/xorg.py +38 -0
  1049. venv/Lib/site-packages/pygments/lexers/yang.py +103 -0
  1050. venv/Lib/site-packages/pygments/lexers/yara.py +69 -0
  1051. venv/Lib/site-packages/pygments/lexers/zig.py +125 -0
  1052. venv/Lib/site-packages/pygments/modeline.py +43 -0
  1053. venv/Lib/site-packages/pygments/plugin.py +72 -0
  1054. venv/Lib/site-packages/pygments/regexopt.py +91 -0
  1055. venv/Lib/site-packages/pygments/scanner.py +104 -0
  1056. venv/Lib/site-packages/pygments/sphinxext.py +247 -0
  1057. venv/Lib/site-packages/pygments/style.py +203 -0
  1058. venv/Lib/site-packages/pygments/styles/__init__.py +61 -0
  1059. venv/Lib/site-packages/pygments/styles/_mapping.py +54 -0
  1060. venv/Lib/site-packages/pygments/styles/abap.py +32 -0
  1061. venv/Lib/site-packages/pygments/styles/algol.py +65 -0
  1062. venv/Lib/site-packages/pygments/styles/algol_nu.py +65 -0
  1063. venv/Lib/site-packages/pygments/styles/arduino.py +100 -0
  1064. venv/Lib/site-packages/pygments/styles/autumn.py +67 -0
  1065. venv/Lib/site-packages/pygments/styles/borland.py +53 -0
  1066. venv/Lib/site-packages/pygments/styles/bw.py +52 -0
  1067. venv/Lib/site-packages/pygments/styles/coffee.py +80 -0
  1068. venv/Lib/site-packages/pygments/styles/colorful.py +83 -0
  1069. venv/Lib/site-packages/pygments/styles/default.py +76 -0
  1070. venv/Lib/site-packages/pygments/styles/dracula.py +90 -0
  1071. venv/Lib/site-packages/pygments/styles/emacs.py +75 -0
  1072. venv/Lib/site-packages/pygments/styles/friendly.py +76 -0
  1073. venv/Lib/site-packages/pygments/styles/friendly_grayscale.py +80 -0
  1074. venv/Lib/site-packages/pygments/styles/fruity.py +47 -0
  1075. venv/Lib/site-packages/pygments/styles/gh_dark.py +113 -0
  1076. venv/Lib/site-packages/pygments/styles/gruvbox.py +118 -0
  1077. venv/Lib/site-packages/pygments/styles/igor.py +32 -0
  1078. venv/Lib/site-packages/pygments/styles/inkpot.py +72 -0
  1079. venv/Lib/site-packages/pygments/styles/lightbulb.py +110 -0
  1080. venv/Lib/site-packages/pygments/styles/lilypond.py +62 -0
  1081. venv/Lib/site-packages/pygments/styles/lovelace.py +100 -0
  1082. venv/Lib/site-packages/pygments/styles/manni.py +79 -0
  1083. venv/Lib/site-packages/pygments/styles/material.py +124 -0
  1084. venv/Lib/site-packages/pygments/styles/monokai.py +112 -0
  1085. venv/Lib/site-packages/pygments/styles/murphy.py +82 -0
  1086. venv/Lib/site-packages/pygments/styles/native.py +70 -0
  1087. venv/Lib/site-packages/pygments/styles/nord.py +156 -0
  1088. venv/Lib/site-packages/pygments/styles/onedark.py +63 -0
  1089. venv/Lib/site-packages/pygments/styles/paraiso_dark.py +124 -0
  1090. venv/Lib/site-packages/pygments/styles/paraiso_light.py +124 -0
  1091. venv/Lib/site-packages/pygments/styles/pastie.py +78 -0
  1092. venv/Lib/site-packages/pygments/styles/perldoc.py +73 -0
  1093. venv/Lib/site-packages/pygments/styles/rainbow_dash.py +95 -0
  1094. venv/Lib/site-packages/pygments/styles/rrt.py +40 -0
  1095. venv/Lib/site-packages/pygments/styles/sas.py +46 -0
  1096. venv/Lib/site-packages/pygments/styles/solarized.py +144 -0
  1097. venv/Lib/site-packages/pygments/styles/staroffice.py +31 -0
  1098. venv/Lib/site-packages/pygments/styles/stata_dark.py +42 -0
  1099. venv/Lib/site-packages/pygments/styles/stata_light.py +42 -0
  1100. venv/Lib/site-packages/pygments/styles/tango.py +143 -0
  1101. venv/Lib/site-packages/pygments/styles/trac.py +66 -0
  1102. venv/Lib/site-packages/pygments/styles/vim.py +67 -0
  1103. venv/Lib/site-packages/pygments/styles/vs.py +41 -0
  1104. venv/Lib/site-packages/pygments/styles/xcode.py +53 -0
  1105. venv/Lib/site-packages/pygments/styles/zenburn.py +83 -0
  1106. venv/Lib/site-packages/pygments/token.py +214 -0
  1107. venv/Lib/site-packages/pygments/unistring.py +153 -0
  1108. venv/Lib/site-packages/pygments/util.py +324 -0
  1109. venv/Lib/site-packages/pyproject_hooks/__init__.py +31 -0
  1110. venv/Lib/site-packages/pyproject_hooks/_impl.py +410 -0
  1111. venv/Lib/site-packages/pyproject_hooks/_in_process/__init__.py +21 -0
  1112. venv/Lib/site-packages/pyproject_hooks/_in_process/_in_process.py +389 -0
  1113. venv/Lib/site-packages/pyproject_hooks/py.typed +0 -0
  1114. venv/Lib/site-packages/readme_renderer/__init__.py +13 -0
  1115. venv/Lib/site-packages/readme_renderer/__main__.py +66 -0
  1116. venv/Lib/site-packages/readme_renderer/clean.py +89 -0
  1117. venv/Lib/site-packages/readme_renderer/markdown.py +123 -0
  1118. venv/Lib/site-packages/readme_renderer/py.typed +0 -0
  1119. venv/Lib/site-packages/readme_renderer/rst.py +135 -0
  1120. venv/Lib/site-packages/readme_renderer/txt.py +24 -0
  1121. venv/Lib/site-packages/requests/__init__.py +184 -0
  1122. venv/Lib/site-packages/requests/__version__.py +14 -0
  1123. venv/Lib/site-packages/requests/_internal_utils.py +50 -0
  1124. venv/Lib/site-packages/requests/adapters.py +696 -0
  1125. venv/Lib/site-packages/requests/api.py +157 -0
  1126. venv/Lib/site-packages/requests/auth.py +314 -0
  1127. venv/Lib/site-packages/requests/certs.py +17 -0
  1128. venv/Lib/site-packages/requests/compat.py +106 -0
  1129. venv/Lib/site-packages/requests/cookies.py +561 -0
  1130. venv/Lib/site-packages/requests/exceptions.py +151 -0
  1131. venv/Lib/site-packages/requests/help.py +134 -0
  1132. venv/Lib/site-packages/requests/hooks.py +33 -0
  1133. venv/Lib/site-packages/requests/models.py +1039 -0
  1134. venv/Lib/site-packages/requests/packages.py +23 -0
  1135. venv/Lib/site-packages/requests/sessions.py +831 -0
  1136. venv/Lib/site-packages/requests/status_codes.py +128 -0
  1137. venv/Lib/site-packages/requests/structures.py +99 -0
  1138. venv/Lib/site-packages/requests/utils.py +1086 -0
  1139. venv/Lib/site-packages/requests_toolbelt/__init__.py +34 -0
  1140. venv/Lib/site-packages/requests_toolbelt/_compat.py +302 -0
  1141. venv/Lib/site-packages/requests_toolbelt/adapters/__init__.py +15 -0
  1142. venv/Lib/site-packages/requests_toolbelt/adapters/appengine.py +206 -0
  1143. venv/Lib/site-packages/requests_toolbelt/adapters/fingerprint.py +48 -0
  1144. venv/Lib/site-packages/requests_toolbelt/adapters/host_header_ssl.py +43 -0
  1145. venv/Lib/site-packages/requests_toolbelt/adapters/socket_options.py +129 -0
  1146. venv/Lib/site-packages/requests_toolbelt/adapters/source.py +67 -0
  1147. venv/Lib/site-packages/requests_toolbelt/adapters/ssl.py +66 -0
  1148. venv/Lib/site-packages/requests_toolbelt/adapters/x509.py +196 -0
  1149. venv/Lib/site-packages/requests_toolbelt/auth/__init__.py +0 -0
  1150. venv/Lib/site-packages/requests_toolbelt/auth/_digest_auth_compat.py +29 -0
  1151. venv/Lib/site-packages/requests_toolbelt/auth/guess.py +146 -0
  1152. venv/Lib/site-packages/requests_toolbelt/auth/handler.py +142 -0
  1153. venv/Lib/site-packages/requests_toolbelt/auth/http_proxy_digest.py +103 -0
  1154. venv/Lib/site-packages/requests_toolbelt/cookies/__init__.py +0 -0
  1155. venv/Lib/site-packages/requests_toolbelt/cookies/forgetful.py +7 -0
  1156. venv/Lib/site-packages/requests_toolbelt/downloadutils/__init__.py +0 -0
  1157. venv/Lib/site-packages/requests_toolbelt/downloadutils/stream.py +176 -0
  1158. venv/Lib/site-packages/requests_toolbelt/downloadutils/tee.py +123 -0
  1159. venv/Lib/site-packages/requests_toolbelt/exceptions.py +25 -0
  1160. venv/Lib/site-packages/requests_toolbelt/multipart/__init__.py +31 -0
  1161. venv/Lib/site-packages/requests_toolbelt/multipart/decoder.py +156 -0
  1162. venv/Lib/site-packages/requests_toolbelt/multipart/encoder.py +655 -0
  1163. venv/Lib/site-packages/requests_toolbelt/sessions.py +89 -0
  1164. venv/Lib/site-packages/requests_toolbelt/streaming_iterator.py +116 -0
  1165. venv/Lib/site-packages/requests_toolbelt/threaded/__init__.py +97 -0
  1166. venv/Lib/site-packages/requests_toolbelt/threaded/pool.py +211 -0
  1167. venv/Lib/site-packages/requests_toolbelt/threaded/thread.py +53 -0
  1168. venv/Lib/site-packages/requests_toolbelt/utils/__init__.py +0 -0
  1169. venv/Lib/site-packages/requests_toolbelt/utils/deprecated.py +91 -0
  1170. venv/Lib/site-packages/requests_toolbelt/utils/dump.py +198 -0
  1171. venv/Lib/site-packages/requests_toolbelt/utils/formdata.py +108 -0
  1172. venv/Lib/site-packages/requests_toolbelt/utils/user_agent.py +143 -0
  1173. venv/Lib/site-packages/rfc3986/__init__.py +53 -0
  1174. venv/Lib/site-packages/rfc3986/_mixin.py +373 -0
  1175. venv/Lib/site-packages/rfc3986/abnf_regexp.py +275 -0
  1176. venv/Lib/site-packages/rfc3986/api.py +104 -0
  1177. venv/Lib/site-packages/rfc3986/builder.py +388 -0
  1178. venv/Lib/site-packages/rfc3986/compat.py +59 -0
  1179. venv/Lib/site-packages/rfc3986/exceptions.py +120 -0
  1180. venv/Lib/site-packages/rfc3986/iri.py +161 -0
  1181. venv/Lib/site-packages/rfc3986/misc.py +131 -0
  1182. venv/Lib/site-packages/rfc3986/normalizers.py +171 -0
  1183. venv/Lib/site-packages/rfc3986/parseresult.py +474 -0
  1184. venv/Lib/site-packages/rfc3986/uri.py +160 -0
  1185. venv/Lib/site-packages/rfc3986/validators.py +440 -0
  1186. venv/Lib/site-packages/rich/__init__.py +177 -0
  1187. venv/Lib/site-packages/rich/__main__.py +245 -0
  1188. venv/Lib/site-packages/rich/_cell_widths.py +454 -0
  1189. venv/Lib/site-packages/rich/_emoji_codes.py +3610 -0
  1190. venv/Lib/site-packages/rich/_emoji_replace.py +32 -0
  1191. venv/Lib/site-packages/rich/_export_format.py +76 -0
  1192. venv/Lib/site-packages/rich/_extension.py +10 -0
  1193. venv/Lib/site-packages/rich/_fileno.py +24 -0
  1194. venv/Lib/site-packages/rich/_inspect.py +268 -0
  1195. venv/Lib/site-packages/rich/_log_render.py +94 -0
  1196. venv/Lib/site-packages/rich/_loop.py +43 -0
  1197. venv/Lib/site-packages/rich/_null_file.py +69 -0
  1198. venv/Lib/site-packages/rich/_palettes.py +309 -0
  1199. venv/Lib/site-packages/rich/_pick.py +17 -0
  1200. venv/Lib/site-packages/rich/_ratio.py +153 -0
  1201. venv/Lib/site-packages/rich/_spinners.py +482 -0
  1202. venv/Lib/site-packages/rich/_stack.py +16 -0
  1203. venv/Lib/site-packages/rich/_timer.py +19 -0
  1204. venv/Lib/site-packages/rich/_win32_console.py +661 -0
  1205. venv/Lib/site-packages/rich/_windows.py +71 -0
  1206. venv/Lib/site-packages/rich/_windows_renderer.py +56 -0
  1207. venv/Lib/site-packages/rich/_wrap.py +93 -0
  1208. venv/Lib/site-packages/rich/abc.py +33 -0
  1209. venv/Lib/site-packages/rich/align.py +306 -0
  1210. venv/Lib/site-packages/rich/ansi.py +241 -0
  1211. venv/Lib/site-packages/rich/bar.py +93 -0
  1212. venv/Lib/site-packages/rich/box.py +474 -0
  1213. venv/Lib/site-packages/rich/cells.py +174 -0
  1214. venv/Lib/site-packages/rich/color.py +621 -0
  1215. venv/Lib/site-packages/rich/color_triplet.py +38 -0
  1216. venv/Lib/site-packages/rich/columns.py +187 -0
  1217. venv/Lib/site-packages/rich/console.py +2680 -0
  1218. venv/Lib/site-packages/rich/constrain.py +37 -0
  1219. venv/Lib/site-packages/rich/containers.py +167 -0
  1220. venv/Lib/site-packages/rich/control.py +219 -0
  1221. venv/Lib/site-packages/rich/default_styles.py +193 -0
  1222. venv/Lib/site-packages/rich/diagnose.py +39 -0
  1223. venv/Lib/site-packages/rich/emoji.py +91 -0
  1224. venv/Lib/site-packages/rich/errors.py +34 -0
  1225. venv/Lib/site-packages/rich/file_proxy.py +57 -0
  1226. venv/Lib/site-packages/rich/filesize.py +88 -0
  1227. venv/Lib/site-packages/rich/highlighter.py +232 -0
  1228. venv/Lib/site-packages/rich/json.py +139 -0
  1229. venv/Lib/site-packages/rich/jupyter.py +101 -0
  1230. venv/Lib/site-packages/rich/layout.py +442 -0
  1231. venv/Lib/site-packages/rich/live.py +400 -0
  1232. venv/Lib/site-packages/rich/live_render.py +106 -0
  1233. venv/Lib/site-packages/rich/logging.py +297 -0
  1234. venv/Lib/site-packages/rich/markdown.py +779 -0
  1235. venv/Lib/site-packages/rich/markup.py +251 -0
  1236. venv/Lib/site-packages/rich/measure.py +151 -0
  1237. venv/Lib/site-packages/rich/padding.py +141 -0
  1238. venv/Lib/site-packages/rich/pager.py +34 -0
  1239. venv/Lib/site-packages/rich/palette.py +100 -0
  1240. venv/Lib/site-packages/rich/panel.py +317 -0
  1241. venv/Lib/site-packages/rich/pretty.py +1016 -0
  1242. venv/Lib/site-packages/rich/progress.py +1715 -0
  1243. venv/Lib/site-packages/rich/progress_bar.py +223 -0
  1244. venv/Lib/site-packages/rich/prompt.py +400 -0
  1245. venv/Lib/site-packages/rich/protocol.py +42 -0
  1246. venv/Lib/site-packages/rich/py.typed +0 -0
  1247. venv/Lib/site-packages/rich/region.py +10 -0
  1248. venv/Lib/site-packages/rich/repr.py +149 -0
  1249. venv/Lib/site-packages/rich/rule.py +130 -0
  1250. venv/Lib/site-packages/rich/scope.py +86 -0
  1251. venv/Lib/site-packages/rich/screen.py +54 -0
  1252. venv/Lib/site-packages/rich/segment.py +752 -0
  1253. venv/Lib/site-packages/rich/spinner.py +132 -0
  1254. venv/Lib/site-packages/rich/status.py +131 -0
  1255. venv/Lib/site-packages/rich/style.py +792 -0
  1256. venv/Lib/site-packages/rich/styled.py +42 -0
  1257. venv/Lib/site-packages/rich/syntax.py +985 -0
  1258. venv/Lib/site-packages/rich/table.py +1006 -0
  1259. venv/Lib/site-packages/rich/terminal_theme.py +153 -0
  1260. venv/Lib/site-packages/rich/text.py +1361 -0
  1261. venv/Lib/site-packages/rich/theme.py +115 -0
  1262. venv/Lib/site-packages/rich/themes.py +5 -0
  1263. venv/Lib/site-packages/rich/traceback.py +899 -0
  1264. venv/Lib/site-packages/rich/tree.py +257 -0
  1265. venv/Lib/site-packages/setup_sdist.py +69 -0
  1266. venv/Lib/site-packages/setuptools/__init__.py +248 -0
  1267. venv/Lib/site-packages/setuptools/_core_metadata.py +337 -0
  1268. venv/Lib/site-packages/setuptools/_discovery.py +33 -0
  1269. venv/Lib/site-packages/setuptools/_distutils/__init__.py +14 -0
  1270. venv/Lib/site-packages/setuptools/_distutils/_log.py +3 -0
  1271. venv/Lib/site-packages/setuptools/_distutils/_macos_compat.py +12 -0
  1272. venv/Lib/site-packages/setuptools/_distutils/_modified.py +95 -0
  1273. venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +16 -0
  1274. venv/Lib/site-packages/setuptools/_distutils/archive_util.py +294 -0
  1275. venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +26 -0
  1276. venv/Lib/site-packages/setuptools/_distutils/cmd.py +554 -0
  1277. venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +23 -0
  1278. venv/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py +54 -0
  1279. venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +167 -0
  1280. venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +141 -0
  1281. venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +598 -0
  1282. venv/Lib/site-packages/setuptools/_distutils/command/build.py +156 -0
  1283. venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +201 -0
  1284. venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +812 -0
  1285. venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +407 -0
  1286. venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +160 -0
  1287. venv/Lib/site-packages/setuptools/_distutils/command/check.py +152 -0
  1288. venv/Lib/site-packages/setuptools/_distutils/command/clean.py +77 -0
  1289. venv/Lib/site-packages/setuptools/_distutils/command/config.py +358 -0
  1290. venv/Lib/site-packages/setuptools/_distutils/command/install.py +805 -0
  1291. venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +94 -0
  1292. venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +91 -0
  1293. venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +46 -0
  1294. venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +238 -0
  1295. venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +62 -0
  1296. venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +521 -0
  1297. venv/Lib/site-packages/setuptools/_distutils/compat/__init__.py +18 -0
  1298. venv/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
  1299. venv/Lib/site-packages/setuptools/_distutils/compat/py39.py +66 -0
  1300. venv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +1394 -0
  1301. venv/Lib/site-packages/setuptools/_distutils/compilers/C/cygwin.py +340 -0
  1302. venv/Lib/site-packages/setuptools/_distutils/compilers/C/errors.py +24 -0
  1303. venv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +614 -0
  1304. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_base.py +83 -0
  1305. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_cygwin.py +76 -0
  1306. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_mingw.py +48 -0
  1307. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.py +136 -0
  1308. venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +413 -0
  1309. venv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +422 -0
  1310. venv/Lib/site-packages/setuptools/_distutils/compilers/C/zos.py +230 -0
  1311. venv/Lib/site-packages/setuptools/_distutils/core.py +289 -0
  1312. venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +31 -0
  1313. venv/Lib/site-packages/setuptools/_distutils/debug.py +5 -0
  1314. venv/Lib/site-packages/setuptools/_distutils/dep_util.py +14 -0
  1315. venv/Lib/site-packages/setuptools/_distutils/dir_util.py +244 -0
  1316. venv/Lib/site-packages/setuptools/_distutils/dist.py +1386 -0
  1317. venv/Lib/site-packages/setuptools/_distutils/errors.py +108 -0
  1318. venv/Lib/site-packages/setuptools/_distutils/extension.py +258 -0
  1319. venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +471 -0
  1320. venv/Lib/site-packages/setuptools/_distutils/file_util.py +236 -0
  1321. venv/Lib/site-packages/setuptools/_distutils/filelist.py +431 -0
  1322. venv/Lib/site-packages/setuptools/_distutils/log.py +56 -0
  1323. venv/Lib/site-packages/setuptools/_distutils/spawn.py +134 -0
  1324. venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +598 -0
  1325. venv/Lib/site-packages/setuptools/_distutils/tests/__init__.py +42 -0
  1326. venv/Lib/site-packages/setuptools/_distutils/tests/compat/__init__.py +0 -0
  1327. venv/Lib/site-packages/setuptools/_distutils/tests/compat/py39.py +40 -0
  1328. venv/Lib/site-packages/setuptools/_distutils/tests/support.py +134 -0
  1329. venv/Lib/site-packages/setuptools/_distutils/tests/test_archive_util.py +353 -0
  1330. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist.py +47 -0
  1331. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_dumb.py +78 -0
  1332. venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_rpm.py +127 -0
  1333. venv/Lib/site-packages/setuptools/_distutils/tests/test_build.py +49 -0
  1334. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_clib.py +134 -0
  1335. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +628 -0
  1336. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_py.py +196 -0
  1337. venv/Lib/site-packages/setuptools/_distutils/tests/test_build_scripts.py +96 -0
  1338. venv/Lib/site-packages/setuptools/_distutils/tests/test_check.py +194 -0
  1339. venv/Lib/site-packages/setuptools/_distutils/tests/test_clean.py +45 -0
  1340. venv/Lib/site-packages/setuptools/_distutils/tests/test_cmd.py +107 -0
  1341. venv/Lib/site-packages/setuptools/_distutils/tests/test_config_cmd.py +87 -0
  1342. venv/Lib/site-packages/setuptools/_distutils/tests/test_core.py +130 -0
  1343. venv/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +139 -0
  1344. venv/Lib/site-packages/setuptools/_distutils/tests/test_dist.py +552 -0
  1345. venv/Lib/site-packages/setuptools/_distutils/tests/test_extension.py +117 -0
  1346. venv/Lib/site-packages/setuptools/_distutils/tests/test_file_util.py +95 -0
  1347. venv/Lib/site-packages/setuptools/_distutils/tests/test_filelist.py +336 -0
  1348. venv/Lib/site-packages/setuptools/_distutils/tests/test_install.py +245 -0
  1349. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_data.py +74 -0
  1350. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_headers.py +33 -0
  1351. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_lib.py +110 -0
  1352. venv/Lib/site-packages/setuptools/_distutils/tests/test_install_scripts.py +52 -0
  1353. venv/Lib/site-packages/setuptools/_distutils/tests/test_log.py +12 -0
  1354. venv/Lib/site-packages/setuptools/_distutils/tests/test_modified.py +126 -0
  1355. venv/Lib/site-packages/setuptools/_distutils/tests/test_sdist.py +470 -0
  1356. venv/Lib/site-packages/setuptools/_distutils/tests/test_spawn.py +141 -0
  1357. venv/Lib/site-packages/setuptools/_distutils/tests/test_sysconfig.py +319 -0
  1358. venv/Lib/site-packages/setuptools/_distutils/tests/test_text_file.py +127 -0
  1359. venv/Lib/site-packages/setuptools/_distutils/tests/test_util.py +243 -0
  1360. venv/Lib/site-packages/setuptools/_distutils/tests/test_version.py +80 -0
  1361. venv/Lib/site-packages/setuptools/_distutils/tests/test_versionpredicate.py +0 -0
  1362. venv/Lib/site-packages/setuptools/_distutils/tests/unix_compat.py +17 -0
  1363. venv/Lib/site-packages/setuptools/_distutils/text_file.py +286 -0
  1364. venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +9 -0
  1365. venv/Lib/site-packages/setuptools/_distutils/util.py +518 -0
  1366. venv/Lib/site-packages/setuptools/_distutils/version.py +348 -0
  1367. venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +175 -0
  1368. venv/Lib/site-packages/setuptools/_distutils/zosccompiler.py +3 -0
  1369. venv/Lib/site-packages/setuptools/_entry_points.py +94 -0
  1370. venv/Lib/site-packages/setuptools/_imp.py +87 -0
  1371. venv/Lib/site-packages/setuptools/_importlib.py +9 -0
  1372. venv/Lib/site-packages/setuptools/_itertools.py +23 -0
  1373. venv/Lib/site-packages/setuptools/_normalization.py +177 -0
  1374. venv/Lib/site-packages/setuptools/_path.py +93 -0
  1375. venv/Lib/site-packages/setuptools/_reqs.py +42 -0
  1376. venv/Lib/site-packages/setuptools/_scripts.py +361 -0
  1377. venv/Lib/site-packages/setuptools/_shutil.py +59 -0
  1378. venv/Lib/site-packages/setuptools/_static.py +188 -0
  1379. venv/Lib/site-packages/setuptools/_vendor/autocommand/__init__.py +27 -0
  1380. venv/Lib/site-packages/setuptools/_vendor/autocommand/autoasync.py +142 -0
  1381. venv/Lib/site-packages/setuptools/_vendor/autocommand/autocommand.py +70 -0
  1382. venv/Lib/site-packages/setuptools/_vendor/autocommand/automain.py +59 -0
  1383. venv/Lib/site-packages/setuptools/_vendor/autocommand/autoparse.py +333 -0
  1384. venv/Lib/site-packages/setuptools/_vendor/autocommand/errors.py +23 -0
  1385. venv/Lib/site-packages/setuptools/_vendor/backports/__init__.py +1 -0
  1386. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__init__.py +2937 -0
  1387. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__main__.py +5 -0
  1388. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/__init__.py +0 -0
  1389. venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/py38.py +24 -0
  1390. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py +1083 -0
  1391. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py +83 -0
  1392. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py +30 -0
  1393. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py +57 -0
  1394. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py +104 -0
  1395. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py +73 -0
  1396. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py +67 -0
  1397. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py +99 -0
  1398. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/__init__.py +0 -0
  1399. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py311.py +22 -0
  1400. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py39.py +36 -0
  1401. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/diagnose.py +21 -0
  1402. venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
  1403. venv/Lib/site-packages/setuptools/_vendor/inflect/__init__.py +3986 -0
  1404. venv/Lib/site-packages/setuptools/_vendor/inflect/compat/__init__.py +0 -0
  1405. venv/Lib/site-packages/setuptools/_vendor/inflect/compat/py38.py +7 -0
  1406. venv/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
  1407. venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/__init__.py +1091 -0
  1408. venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
  1409. venv/Lib/site-packages/setuptools/_vendor/jaraco/context.py +361 -0
  1410. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.py +633 -0
  1411. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
  1412. venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
  1413. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py +624 -0
  1414. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/layouts.py +25 -0
  1415. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/show-newlines.py +33 -0
  1416. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/strip-prefix.py +21 -0
  1417. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-dvorak.py +6 -0
  1418. venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-qwerty.py +6 -0
  1419. venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +6 -0
  1420. venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
  1421. venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +4806 -0
  1422. venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
  1423. venv/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
  1424. venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +1046 -0
  1425. venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
  1426. venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +15 -0
  1427. venv/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +110 -0
  1428. venv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +263 -0
  1429. venv/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py +85 -0
  1430. venv/Lib/site-packages/setuptools/_vendor/packaging/_parser.py +354 -0
  1431. venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +61 -0
  1432. venv/Lib/site-packages/setuptools/_vendor/packaging/_tokenizer.py +194 -0
  1433. venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
  1434. venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
  1435. venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +331 -0
  1436. venv/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +863 -0
  1437. venv/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
  1438. venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +91 -0
  1439. venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +1020 -0
  1440. venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +617 -0
  1441. venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +163 -0
  1442. venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +582 -0
  1443. venv/Lib/site-packages/setuptools/_vendor/platformdirs/__init__.py +627 -0
  1444. venv/Lib/site-packages/setuptools/_vendor/platformdirs/__main__.py +55 -0
  1445. venv/Lib/site-packages/setuptools/_vendor/platformdirs/android.py +249 -0
  1446. venv/Lib/site-packages/setuptools/_vendor/platformdirs/api.py +292 -0
  1447. venv/Lib/site-packages/setuptools/_vendor/platformdirs/macos.py +130 -0
  1448. venv/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
  1449. venv/Lib/site-packages/setuptools/_vendor/platformdirs/unix.py +275 -0
  1450. venv/Lib/site-packages/setuptools/_vendor/platformdirs/version.py +16 -0
  1451. venv/Lib/site-packages/setuptools/_vendor/platformdirs/windows.py +272 -0
  1452. venv/Lib/site-packages/setuptools/_vendor/tomli/__init__.py +11 -0
  1453. venv/Lib/site-packages/setuptools/_vendor/tomli/_parser.py +691 -0
  1454. venv/Lib/site-packages/setuptools/_vendor/tomli/_re.py +107 -0
  1455. venv/Lib/site-packages/setuptools/_vendor/tomli/_types.py +10 -0
  1456. venv/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
  1457. venv/Lib/site-packages/setuptools/_vendor/typeguard/__init__.py +48 -0
  1458. venv/Lib/site-packages/setuptools/_vendor/typeguard/_checkers.py +993 -0
  1459. venv/Lib/site-packages/setuptools/_vendor/typeguard/_config.py +108 -0
  1460. venv/Lib/site-packages/setuptools/_vendor/typeguard/_decorators.py +235 -0
  1461. venv/Lib/site-packages/setuptools/_vendor/typeguard/_exceptions.py +42 -0
  1462. venv/Lib/site-packages/setuptools/_vendor/typeguard/_functions.py +308 -0
  1463. venv/Lib/site-packages/setuptools/_vendor/typeguard/_importhook.py +213 -0
  1464. venv/Lib/site-packages/setuptools/_vendor/typeguard/_memo.py +48 -0
  1465. venv/Lib/site-packages/setuptools/_vendor/typeguard/_pytest_plugin.py +127 -0
  1466. venv/Lib/site-packages/setuptools/_vendor/typeguard/_suppression.py +86 -0
  1467. venv/Lib/site-packages/setuptools/_vendor/typeguard/_transformer.py +1229 -0
  1468. venv/Lib/site-packages/setuptools/_vendor/typeguard/_union_transformer.py +55 -0
  1469. venv/Lib/site-packages/setuptools/_vendor/typeguard/_utils.py +173 -0
  1470. venv/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
  1471. venv/Lib/site-packages/setuptools/_vendor/typing_extensions.py +3641 -0
  1472. venv/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +3 -0
  1473. venv/Lib/site-packages/setuptools/_vendor/wheel/__main__.py +23 -0
  1474. venv/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
  1475. venv/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +26 -0
  1476. venv/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +26 -0
  1477. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +155 -0
  1478. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +332 -0
  1479. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/pack.py +85 -0
  1480. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/tags.py +139 -0
  1481. venv/Lib/site-packages/setuptools/_vendor/wheel/cli/unpack.py +30 -0
  1482. venv/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +482 -0
  1483. venv/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +183 -0
  1484. venv/Lib/site-packages/setuptools/_vendor/wheel/util.py +17 -0
  1485. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/__init__.py +0 -0
  1486. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/__init__.py +0 -0
  1487. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_elffile.py +108 -0
  1488. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py +260 -0
  1489. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py +83 -0
  1490. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_parser.py +356 -0
  1491. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_structures.py +61 -0
  1492. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py +192 -0
  1493. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/markers.py +253 -0
  1494. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/requirements.py +90 -0
  1495. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/specifiers.py +1011 -0
  1496. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/tags.py +571 -0
  1497. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/utils.py +172 -0
  1498. venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/version.py +561 -0
  1499. venv/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +227 -0
  1500. venv/Lib/site-packages/setuptools/_vendor/zipp/__init__.py +501 -0
  1501. venv/Lib/site-packages/setuptools/_vendor/zipp/compat/__init__.py +0 -0
  1502. venv/Lib/site-packages/setuptools/_vendor/zipp/compat/py310.py +11 -0
  1503. venv/Lib/site-packages/setuptools/_vendor/zipp/glob.py +106 -0
  1504. venv/Lib/site-packages/setuptools/archive_util.py +219 -0
  1505. venv/Lib/site-packages/setuptools/build_meta.py +548 -0
  1506. venv/Lib/site-packages/setuptools/command/__init__.py +21 -0
  1507. venv/Lib/site-packages/setuptools/command/_requirestxt.py +131 -0
  1508. venv/Lib/site-packages/setuptools/command/alias.py +77 -0
  1509. venv/Lib/site-packages/setuptools/command/bdist_egg.py +477 -0
  1510. venv/Lib/site-packages/setuptools/command/bdist_rpm.py +42 -0
  1511. venv/Lib/site-packages/setuptools/command/bdist_wheel.py +604 -0
  1512. venv/Lib/site-packages/setuptools/command/build.py +135 -0
  1513. venv/Lib/site-packages/setuptools/command/build_clib.py +103 -0
  1514. venv/Lib/site-packages/setuptools/command/build_ext.py +470 -0
  1515. venv/Lib/site-packages/setuptools/command/build_py.py +400 -0
  1516. venv/Lib/site-packages/setuptools/command/develop.py +55 -0
  1517. venv/Lib/site-packages/setuptools/command/dist_info.py +103 -0
  1518. venv/Lib/site-packages/setuptools/command/easy_install.py +30 -0
  1519. venv/Lib/site-packages/setuptools/command/editable_wheel.py +908 -0
  1520. venv/Lib/site-packages/setuptools/command/egg_info.py +718 -0
  1521. venv/Lib/site-packages/setuptools/command/install.py +131 -0
  1522. venv/Lib/site-packages/setuptools/command/install_egg_info.py +58 -0
  1523. venv/Lib/site-packages/setuptools/command/install_lib.py +137 -0
  1524. venv/Lib/site-packages/setuptools/command/install_scripts.py +67 -0
  1525. venv/Lib/site-packages/setuptools/command/rotate.py +65 -0
  1526. venv/Lib/site-packages/setuptools/command/saveopts.py +21 -0
  1527. venv/Lib/site-packages/setuptools/command/sdist.py +217 -0
  1528. venv/Lib/site-packages/setuptools/command/setopt.py +141 -0
  1529. venv/Lib/site-packages/setuptools/command/test.py +45 -0
  1530. venv/Lib/site-packages/setuptools/compat/__init__.py +0 -0
  1531. venv/Lib/site-packages/setuptools/compat/py310.py +20 -0
  1532. venv/Lib/site-packages/setuptools/compat/py311.py +27 -0
  1533. venv/Lib/site-packages/setuptools/compat/py312.py +13 -0
  1534. venv/Lib/site-packages/setuptools/compat/py39.py +9 -0
  1535. venv/Lib/site-packages/setuptools/config/__init__.py +43 -0
  1536. venv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +526 -0
  1537. venv/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py +34 -0
  1538. venv/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py +336 -0
  1539. venv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +82 -0
  1540. venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py +51 -0
  1541. venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +1412 -0
  1542. venv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +402 -0
  1543. venv/Lib/site-packages/setuptools/config/expand.py +452 -0
  1544. venv/Lib/site-packages/setuptools/config/pyprojecttoml.py +468 -0
  1545. venv/Lib/site-packages/setuptools/config/setupcfg.py +780 -0
  1546. venv/Lib/site-packages/setuptools/depends.py +185 -0
  1547. venv/Lib/site-packages/setuptools/discovery.py +614 -0
  1548. venv/Lib/site-packages/setuptools/dist.py +1119 -0
  1549. venv/Lib/site-packages/setuptools/errors.py +67 -0
  1550. venv/Lib/site-packages/setuptools/extension.py +177 -0
  1551. venv/Lib/site-packages/setuptools/glob.py +185 -0
  1552. venv/Lib/site-packages/setuptools/installer.py +155 -0
  1553. venv/Lib/site-packages/setuptools/launch.py +36 -0
  1554. venv/Lib/site-packages/setuptools/logging.py +40 -0
  1555. venv/Lib/site-packages/setuptools/modified.py +18 -0
  1556. venv/Lib/site-packages/setuptools/monkey.py +126 -0
  1557. venv/Lib/site-packages/setuptools/msvc.py +1536 -0
  1558. venv/Lib/site-packages/setuptools/namespaces.py +106 -0
  1559. venv/Lib/site-packages/setuptools/tests/__init__.py +13 -0
  1560. venv/Lib/site-packages/setuptools/tests/compat/__init__.py +0 -0
  1561. venv/Lib/site-packages/setuptools/tests/compat/py39.py +3 -0
  1562. venv/Lib/site-packages/setuptools/tests/config/__init__.py +0 -0
  1563. venv/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +59 -0
  1564. venv/Lib/site-packages/setuptools/tests/config/downloads/preload.py +18 -0
  1565. venv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +772 -0
  1566. venv/Lib/site-packages/setuptools/tests/config/test_expand.py +247 -0
  1567. venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +396 -0
  1568. venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +109 -0
  1569. venv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +980 -0
  1570. venv/Lib/site-packages/setuptools/tests/contexts.py +131 -0
  1571. venv/Lib/site-packages/setuptools/tests/environment.py +95 -0
  1572. venv/Lib/site-packages/setuptools/tests/fixtures.py +392 -0
  1573. venv/Lib/site-packages/setuptools/tests/integration/__init__.py +0 -0
  1574. venv/Lib/site-packages/setuptools/tests/integration/helpers.py +77 -0
  1575. venv/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
  1576. venv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +223 -0
  1577. venv/Lib/site-packages/setuptools/tests/mod_with_constant.py +1 -0
  1578. venv/Lib/site-packages/setuptools/tests/namespaces.py +90 -0
  1579. venv/Lib/site-packages/setuptools/tests/script-with-bom.py +1 -0
  1580. venv/Lib/site-packages/setuptools/tests/test_archive_util.py +36 -0
  1581. venv/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py +28 -0
  1582. venv/Lib/site-packages/setuptools/tests/test_bdist_egg.py +73 -0
  1583. venv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +708 -0
  1584. venv/Lib/site-packages/setuptools/tests/test_build.py +33 -0
  1585. venv/Lib/site-packages/setuptools/tests/test_build_clib.py +84 -0
  1586. venv/Lib/site-packages/setuptools/tests/test_build_ext.py +293 -0
  1587. venv/Lib/site-packages/setuptools/tests/test_build_meta.py +959 -0
  1588. venv/Lib/site-packages/setuptools/tests/test_build_py.py +480 -0
  1589. venv/Lib/site-packages/setuptools/tests/test_config_discovery.py +647 -0
  1590. venv/Lib/site-packages/setuptools/tests/test_core_metadata.py +622 -0
  1591. venv/Lib/site-packages/setuptools/tests/test_depends.py +15 -0
  1592. venv/Lib/site-packages/setuptools/tests/test_develop.py +112 -0
  1593. venv/Lib/site-packages/setuptools/tests/test_dist.py +278 -0
  1594. venv/Lib/site-packages/setuptools/tests/test_dist_info.py +147 -0
  1595. venv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +198 -0
  1596. venv/Lib/site-packages/setuptools/tests/test_editable_install.py +1263 -0
  1597. venv/Lib/site-packages/setuptools/tests/test_egg_info.py +1306 -0
  1598. venv/Lib/site-packages/setuptools/tests/test_extern.py +15 -0
  1599. venv/Lib/site-packages/setuptools/tests/test_find_packages.py +218 -0
  1600. venv/Lib/site-packages/setuptools/tests/test_find_py_modules.py +73 -0
  1601. venv/Lib/site-packages/setuptools/tests/test_glob.py +45 -0
  1602. venv/Lib/site-packages/setuptools/tests/test_install_scripts.py +89 -0
  1603. venv/Lib/site-packages/setuptools/tests/test_logging.py +76 -0
  1604. venv/Lib/site-packages/setuptools/tests/test_manifest.py +622 -0
  1605. venv/Lib/site-packages/setuptools/tests/test_namespaces.py +138 -0
  1606. venv/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
  1607. venv/Lib/site-packages/setuptools/tests/test_sdist.py +984 -0
  1608. venv/Lib/site-packages/setuptools/tests/test_setopt.py +40 -0
  1609. venv/Lib/site-packages/setuptools/tests/test_setuptools.py +290 -0
  1610. venv/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
  1611. venv/Lib/site-packages/setuptools/tests/test_unicode_utils.py +10 -0
  1612. venv/Lib/site-packages/setuptools/tests/test_virtualenv.py +113 -0
  1613. venv/Lib/site-packages/setuptools/tests/test_warnings.py +106 -0
  1614. venv/Lib/site-packages/setuptools/tests/test_wheel.py +690 -0
  1615. venv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +258 -0
  1616. venv/Lib/site-packages/setuptools/tests/text.py +4 -0
  1617. venv/Lib/site-packages/setuptools/tests/textwrap.py +6 -0
  1618. venv/Lib/site-packages/setuptools/unicode_utils.py +102 -0
  1619. venv/Lib/site-packages/setuptools/version.py +6 -0
  1620. venv/Lib/site-packages/setuptools/warnings.py +110 -0
  1621. venv/Lib/site-packages/setuptools/wheel.py +261 -0
  1622. venv/Lib/site-packages/setuptools/windows_support.py +30 -0
  1623. venv/Lib/site-packages/twine/__init__.py +54 -0
  1624. venv/Lib/site-packages/twine/__main__.py +54 -0
  1625. venv/Lib/site-packages/twine/auth.py +307 -0
  1626. venv/Lib/site-packages/twine/cli.py +139 -0
  1627. venv/Lib/site-packages/twine/commands/__init__.py +93 -0
  1628. venv/Lib/site-packages/twine/commands/check.py +195 -0
  1629. venv/Lib/site-packages/twine/commands/register.py +87 -0
  1630. venv/Lib/site-packages/twine/commands/upload.py +253 -0
  1631. venv/Lib/site-packages/twine/distribution.py +8 -0
  1632. venv/Lib/site-packages/twine/exceptions.py +175 -0
  1633. venv/Lib/site-packages/twine/package.py +403 -0
  1634. venv/Lib/site-packages/twine/py.typed +0 -0
  1635. venv/Lib/site-packages/twine/repository.py +246 -0
  1636. venv/Lib/site-packages/twine/sdist.py +83 -0
  1637. venv/Lib/site-packages/twine/settings.py +360 -0
  1638. venv/Lib/site-packages/twine/utils.py +387 -0
  1639. venv/Lib/site-packages/twine/wheel.py +81 -0
  1640. venv/Lib/site-packages/urllib3/__init__.py +211 -0
  1641. venv/Lib/site-packages/urllib3/_base_connection.py +165 -0
  1642. venv/Lib/site-packages/urllib3/_collections.py +479 -0
  1643. venv/Lib/site-packages/urllib3/_request_methods.py +278 -0
  1644. venv/Lib/site-packages/urllib3/_version.py +21 -0
  1645. venv/Lib/site-packages/urllib3/connection.py +1093 -0
  1646. venv/Lib/site-packages/urllib3/connectionpool.py +1178 -0
  1647. venv/Lib/site-packages/urllib3/contrib/__init__.py +0 -0
  1648. venv/Lib/site-packages/urllib3/contrib/emscripten/__init__.py +16 -0
  1649. venv/Lib/site-packages/urllib3/contrib/emscripten/connection.py +255 -0
  1650. venv/Lib/site-packages/urllib3/contrib/emscripten/fetch.py +728 -0
  1651. venv/Lib/site-packages/urllib3/contrib/emscripten/request.py +22 -0
  1652. venv/Lib/site-packages/urllib3/contrib/emscripten/response.py +277 -0
  1653. venv/Lib/site-packages/urllib3/contrib/pyopenssl.py +564 -0
  1654. venv/Lib/site-packages/urllib3/contrib/socks.py +228 -0
  1655. venv/Lib/site-packages/urllib3/exceptions.py +335 -0
  1656. venv/Lib/site-packages/urllib3/fields.py +341 -0
  1657. venv/Lib/site-packages/urllib3/filepost.py +89 -0
  1658. venv/Lib/site-packages/urllib3/http2/__init__.py +53 -0
  1659. venv/Lib/site-packages/urllib3/http2/connection.py +356 -0
  1660. venv/Lib/site-packages/urllib3/http2/probe.py +87 -0
  1661. venv/Lib/site-packages/urllib3/poolmanager.py +653 -0
  1662. venv/Lib/site-packages/urllib3/py.typed +2 -0
  1663. venv/Lib/site-packages/urllib3/response.py +1307 -0
  1664. venv/Lib/site-packages/urllib3/util/__init__.py +42 -0
  1665. venv/Lib/site-packages/urllib3/util/connection.py +137 -0
  1666. venv/Lib/site-packages/urllib3/util/proxy.py +43 -0
  1667. venv/Lib/site-packages/urllib3/util/request.py +266 -0
  1668. venv/Lib/site-packages/urllib3/util/response.py +101 -0
  1669. venv/Lib/site-packages/urllib3/util/retry.py +533 -0
  1670. venv/Lib/site-packages/urllib3/util/ssl_.py +524 -0
  1671. venv/Lib/site-packages/urllib3/util/ssl_match_hostname.py +159 -0
  1672. venv/Lib/site-packages/urllib3/util/ssltransport.py +271 -0
  1673. venv/Lib/site-packages/urllib3/util/timeout.py +275 -0
  1674. venv/Lib/site-packages/urllib3/util/url.py +469 -0
  1675. venv/Lib/site-packages/urllib3/util/util.py +42 -0
  1676. venv/Lib/site-packages/urllib3/util/wait.py +124 -0
  1677. venv/Lib/site-packages/win32ctypes/__init__.py +8 -0
  1678. venv/Lib/site-packages/win32ctypes/core/__init__.py +60 -0
  1679. venv/Lib/site-packages/win32ctypes/core/_winerrors.py +9 -0
  1680. venv/Lib/site-packages/win32ctypes/core/cffi/__init__.py +11 -0
  1681. venv/Lib/site-packages/win32ctypes/core/cffi/_authentication.py +172 -0
  1682. venv/Lib/site-packages/win32ctypes/core/cffi/_common.py +29 -0
  1683. venv/Lib/site-packages/win32ctypes/core/cffi/_dll.py +30 -0
  1684. venv/Lib/site-packages/win32ctypes/core/cffi/_nl_support.py +18 -0
  1685. venv/Lib/site-packages/win32ctypes/core/cffi/_resource.py +132 -0
  1686. venv/Lib/site-packages/win32ctypes/core/cffi/_system_information.py +32 -0
  1687. venv/Lib/site-packages/win32ctypes/core/cffi/_time.py +18 -0
  1688. venv/Lib/site-packages/win32ctypes/core/cffi/_util.py +105 -0
  1689. venv/Lib/site-packages/win32ctypes/core/compat.py +10 -0
  1690. venv/Lib/site-packages/win32ctypes/core/ctypes/__init__.py +11 -0
  1691. venv/Lib/site-packages/win32ctypes/core/ctypes/_authentication.py +122 -0
  1692. venv/Lib/site-packages/win32ctypes/core/ctypes/_common.py +53 -0
  1693. venv/Lib/site-packages/win32ctypes/core/ctypes/_dll.py +21 -0
  1694. venv/Lib/site-packages/win32ctypes/core/ctypes/_nl_support.py +12 -0
  1695. venv/Lib/site-packages/win32ctypes/core/ctypes/_resource.py +148 -0
  1696. venv/Lib/site-packages/win32ctypes/core/ctypes/_system_information.py +36 -0
  1697. venv/Lib/site-packages/win32ctypes/core/ctypes/_time.py +15 -0
  1698. venv/Lib/site-packages/win32ctypes/core/ctypes/_util.py +78 -0
  1699. venv/Lib/site-packages/win32ctypes/pywin32/__init__.py +12 -0
  1700. venv/Lib/site-packages/win32ctypes/pywin32/pywintypes.py +67 -0
  1701. venv/Lib/site-packages/win32ctypes/pywin32/win32api.py +294 -0
  1702. venv/Lib/site-packages/win32ctypes/pywin32/win32cred.py +145 -0
  1703. venv/Lib/site-packages/win32ctypes/pywintypes.py +13 -0
  1704. venv/Lib/site-packages/win32ctypes/tests/__init__.py +21 -0
  1705. venv/Lib/site-packages/win32ctypes/tests/test_backends.py +36 -0
  1706. venv/Lib/site-packages/win32ctypes/tests/test_win32api.py +304 -0
  1707. venv/Lib/site-packages/win32ctypes/tests/test_win32cred.py +230 -0
  1708. venv/Lib/site-packages/win32ctypes/version.py +1 -0
  1709. venv/Lib/site-packages/win32ctypes/win32api.py +13 -0
  1710. venv/Lib/site-packages/win32ctypes/win32cred.py +13 -0
  1711. android_notify-1.60.1.dist-info/RECORD +0 -13
  1712. {android_notify-1.60.1.dist-info → android_notify-1.60.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,3461 @@
1
+ # $Id: __init__.py 10196 2025-08-07 06:35:37Z milde $
2
+ # Author: Dave Kuhlman <dkuhlman@davekuhlman.org>
3
+ # Copyright: This module has been placed in the public domain.
4
+
5
+ """
6
+ Open Document Format (ODF) Writer.
7
+
8
+ This module is provisional:
9
+ the API is not settled and may change with any minor Docutils version.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ __docformat__ = 'reStructuredText'
15
+
16
+ from configparser import ConfigParser
17
+ import copy
18
+ from io import StringIO
19
+ import itertools
20
+ import locale
21
+ import os
22
+ import os.path
23
+ from pathlib import Path
24
+ import re
25
+ import subprocess
26
+ import tempfile
27
+ import time
28
+ import urllib
29
+ import weakref
30
+ from xml.etree import ElementTree as ET
31
+ from xml.dom import minidom
32
+ import zipfile
33
+
34
+ import docutils
35
+ from docutils import frontend, nodes, utils, writers, languages
36
+ from docutils.parsers.rst.directives.images import PIL # optional
37
+ from docutils.readers import standalone
38
+ from docutils.transforms import references
39
+
40
+ # Import pygments and odtwriter pygments formatters if possible.
41
+ try:
42
+ import pygments
43
+ import pygments.lexers
44
+ from .pygmentsformatter import (OdtPygmentsProgFormatter,
45
+ OdtPygmentsLaTeXFormatter)
46
+ except (ImportError, SyntaxError):
47
+ pygments = None
48
+
49
+ # import warnings
50
+ # warnings.warn('importing IPShellEmbed', UserWarning)
51
+ # from IPython.Shell import IPShellEmbed
52
+ # args = ['-pdb', '-pi1', 'In <\\#>: ', '-pi2', ' .\\D.: ',
53
+ # '-po', 'Out<\\#>: ', '-nosep']
54
+ # ipshell = IPShellEmbed(args,
55
+ # banner = 'Entering IPython. Press Ctrl-D to exit.',
56
+ # exit_msg = 'Leaving Interpreter, back to program.')
57
+
58
+ VERSION = '1.0a'
59
+
60
+ IMAGE_NAME_COUNTER = itertools.count()
61
+
62
+
63
+ #
64
+ # ElementTree does not support getparent method (lxml does).
65
+ # This wrapper class and the following support functions provide
66
+ # that support for the ability to get the parent of an element.
67
+ #
68
+ _parents = weakref.WeakKeyDictionary()
69
+ if isinstance(ET.Element, type):
70
+ _ElementInterface = ET.Element
71
+ else:
72
+ _ElementInterface = ET._ElementInterface
73
+
74
+
75
+ class _ElementInterfaceWrapper(_ElementInterface):
76
+ def __init__(self, tag, attrib=None) -> None:
77
+ _ElementInterface.__init__(self, tag, attrib)
78
+ _parents[self] = None
79
+
80
+ def setparent(self, parent) -> None:
81
+ _parents[self] = parent
82
+
83
+ def getparent(self):
84
+ return _parents[self]
85
+
86
+
87
+ #
88
+ # Constants and globals
89
+
90
+ SPACES_PATTERN = re.compile(r'( +)')
91
+ TABS_PATTERN = re.compile(r'(\t+)')
92
+ FILL_PAT1 = re.compile(r'^ +')
93
+ FILL_PAT2 = re.compile(r' {2,}')
94
+
95
+ TABLESTYLEPREFIX = 'rststyle-table-'
96
+ TABLENAMEDEFAULT = '%s0' % TABLESTYLEPREFIX
97
+ TABLEPROPERTYNAMES = (
98
+ 'border', 'border-top', 'border-left',
99
+ 'border-right', 'border-bottom', )
100
+
101
+ GENERATOR_DESC = 'Docutils.org/odf_odt'
102
+
103
+ NAME_SPACE_1 = 'urn:oasis:names:tc:opendocument:xmlns:office:1.0'
104
+
105
+ CONTENT_NAMESPACE_DICT = CNSD = {
106
+ # 'office:version': '1.0',
107
+ 'chart': 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0',
108
+ 'dc': 'http://purl.org/dc/elements/1.1/',
109
+ 'dom': 'http://www.w3.org/2001/xml-events',
110
+ 'dr3d': 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0',
111
+ 'draw': 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0',
112
+ 'fo': 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0',
113
+ 'form': 'urn:oasis:names:tc:opendocument:xmlns:form:1.0',
114
+ 'math': 'http://www.w3.org/1998/Math/MathML',
115
+ 'meta': 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0',
116
+ 'number': 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0',
117
+ 'office': NAME_SPACE_1,
118
+ 'ooo': 'http://openoffice.org/2004/office',
119
+ 'oooc': 'http://openoffice.org/2004/calc',
120
+ 'ooow': 'http://openoffice.org/2004/writer',
121
+ 'presentation': 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0',
122
+
123
+ 'script': 'urn:oasis:names:tc:opendocument:xmlns:script:1.0',
124
+ 'style': 'urn:oasis:names:tc:opendocument:xmlns:style:1.0',
125
+ 'svg': 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0',
126
+ 'table': 'urn:oasis:names:tc:opendocument:xmlns:table:1.0',
127
+ 'text': 'urn:oasis:names:tc:opendocument:xmlns:text:1.0',
128
+ 'xforms': 'http://www.w3.org/2002/xforms',
129
+ 'xlink': 'http://www.w3.org/1999/xlink',
130
+ 'xsd': 'http://www.w3.org/2001/XMLSchema',
131
+ 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
132
+ }
133
+
134
+ STYLES_NAMESPACE_DICT = SNSD = {
135
+ # 'office:version': '1.0',
136
+ 'chart': 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0',
137
+ 'dc': 'http://purl.org/dc/elements/1.1/',
138
+ 'dom': 'http://www.w3.org/2001/xml-events',
139
+ 'dr3d': 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0',
140
+ 'draw': 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0',
141
+ 'fo': 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0',
142
+ 'form': 'urn:oasis:names:tc:opendocument:xmlns:form:1.0',
143
+ 'math': 'http://www.w3.org/1998/Math/MathML',
144
+ 'meta': 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0',
145
+ 'number': 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0',
146
+ 'office': NAME_SPACE_1,
147
+ 'presentation': 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0',
148
+ 'ooo': 'http://openoffice.org/2004/office',
149
+ 'oooc': 'http://openoffice.org/2004/calc',
150
+ 'ooow': 'http://openoffice.org/2004/writer',
151
+ 'script': 'urn:oasis:names:tc:opendocument:xmlns:script:1.0',
152
+ 'style': 'urn:oasis:names:tc:opendocument:xmlns:style:1.0',
153
+ 'svg': 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0',
154
+ 'table': 'urn:oasis:names:tc:opendocument:xmlns:table:1.0',
155
+ 'text': 'urn:oasis:names:tc:opendocument:xmlns:text:1.0',
156
+ 'xlink': 'http://www.w3.org/1999/xlink',
157
+ }
158
+
159
+ MANIFEST_NAMESPACE_DICT = MANNSD = {
160
+ 'manifest': 'urn:oasis:names:tc:opendocument:xmlns:manifest:1.0',
161
+ }
162
+
163
+ META_NAMESPACE_DICT = METNSD = {
164
+ # 'office:version': '1.0',
165
+ 'dc': 'http://purl.org/dc/elements/1.1/',
166
+ 'meta': 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0',
167
+ 'office': NAME_SPACE_1,
168
+ 'ooo': 'http://openoffice.org/2004/office',
169
+ 'xlink': 'http://www.w3.org/1999/xlink',
170
+ }
171
+
172
+ # Attribute dictionaries for use with ElementTree, which
173
+ # does not support use of nsmap parameter on Element() and SubElement().
174
+
175
+ CONTENT_NAMESPACE_ATTRIB = {
176
+ # 'office:version': '1.0',
177
+ 'xmlns:chart': 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0',
178
+ 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',
179
+ 'xmlns:dom': 'http://www.w3.org/2001/xml-events',
180
+ 'xmlns:dr3d': 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0',
181
+ 'xmlns:draw': 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0',
182
+ 'xmlns:fo': 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0',
183
+ 'xmlns:form': 'urn:oasis:names:tc:opendocument:xmlns:form:1.0',
184
+ 'xmlns:math': 'http://www.w3.org/1998/Math/MathML',
185
+ 'xmlns:meta': 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0',
186
+ 'xmlns:number': 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0',
187
+ 'xmlns:office': NAME_SPACE_1,
188
+ 'xmlns:presentation':
189
+ 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0',
190
+ 'xmlns:ooo': 'http://openoffice.org/2004/office',
191
+ 'xmlns:oooc': 'http://openoffice.org/2004/calc',
192
+ 'xmlns:ooow': 'http://openoffice.org/2004/writer',
193
+ 'xmlns:script': 'urn:oasis:names:tc:opendocument:xmlns:script:1.0',
194
+ 'xmlns:style': 'urn:oasis:names:tc:opendocument:xmlns:style:1.0',
195
+ 'xmlns:svg': 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0',
196
+ 'xmlns:table': 'urn:oasis:names:tc:opendocument:xmlns:table:1.0',
197
+ 'xmlns:text': 'urn:oasis:names:tc:opendocument:xmlns:text:1.0',
198
+ 'xmlns:xforms': 'http://www.w3.org/2002/xforms',
199
+ 'xmlns:xlink': 'http://www.w3.org/1999/xlink',
200
+ 'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema',
201
+ 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
202
+ }
203
+
204
+ STYLES_NAMESPACE_ATTRIB = {
205
+ # 'office:version': '1.0',
206
+ 'xmlns:chart': 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0',
207
+ 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',
208
+ 'xmlns:dom': 'http://www.w3.org/2001/xml-events',
209
+ 'xmlns:dr3d': 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0',
210
+ 'xmlns:draw': 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0',
211
+ 'xmlns:fo': 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0',
212
+ 'xmlns:form': 'urn:oasis:names:tc:opendocument:xmlns:form:1.0',
213
+ 'xmlns:math': 'http://www.w3.org/1998/Math/MathML',
214
+ 'xmlns:meta': 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0',
215
+ 'xmlns:number': 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0',
216
+ 'xmlns:office': NAME_SPACE_1,
217
+ 'xmlns:presentation':
218
+ 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0',
219
+ 'xmlns:ooo': 'http://openoffice.org/2004/office',
220
+ 'xmlns:oooc': 'http://openoffice.org/2004/calc',
221
+ 'xmlns:ooow': 'http://openoffice.org/2004/writer',
222
+ 'xmlns:script': 'urn:oasis:names:tc:opendocument:xmlns:script:1.0',
223
+ 'xmlns:style': 'urn:oasis:names:tc:opendocument:xmlns:style:1.0',
224
+ 'xmlns:svg': 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0',
225
+ 'xmlns:table': 'urn:oasis:names:tc:opendocument:xmlns:table:1.0',
226
+ 'xmlns:text': 'urn:oasis:names:tc:opendocument:xmlns:text:1.0',
227
+ 'xmlns:xlink': 'http://www.w3.org/1999/xlink',
228
+ }
229
+
230
+ MANIFEST_NAMESPACE_ATTRIB = {
231
+ 'xmlns:manifest': 'urn:oasis:names:tc:opendocument:xmlns:manifest:1.0',
232
+ }
233
+
234
+ META_NAMESPACE_ATTRIB = {
235
+ # 'office:version': '1.0',
236
+ 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',
237
+ 'xmlns:meta': 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0',
238
+ 'xmlns:office': NAME_SPACE_1,
239
+ 'xmlns:ooo': 'http://openoffice.org/2004/office',
240
+ 'xmlns:xlink': 'http://www.w3.org/1999/xlink',
241
+ }
242
+
243
+
244
+ #
245
+ # Functions
246
+ #
247
+
248
+ #
249
+ # ElementTree support functions.
250
+ # In order to be able to get the parent of elements, must use these
251
+ # instead of the functions with same name provided by ElementTree.
252
+ #
253
+ def Element(tag, attrib=None, nsmap=None, nsdict=CNSD):
254
+ if attrib is None:
255
+ attrib = {}
256
+ tag, attrib = fix_ns(tag, attrib, nsdict)
257
+ return _ElementInterfaceWrapper(tag, attrib)
258
+
259
+
260
+ def SubElement(parent, tag, attrib=None, nsmap=None, nsdict=CNSD):
261
+ if attrib is None:
262
+ attrib = {}
263
+ tag, attrib = fix_ns(tag, attrib, nsdict)
264
+ el = _ElementInterfaceWrapper(tag, attrib)
265
+ parent.append(el)
266
+ el.setparent(parent)
267
+ return el
268
+
269
+
270
+ def fix_ns(tag, attrib, nsdict):
271
+ nstag = add_ns(tag, nsdict)
272
+ nsattrib = {}
273
+ for key, val in list(attrib.items()):
274
+ nskey = add_ns(key, nsdict)
275
+ nsattrib[nskey] = val
276
+ return nstag, nsattrib
277
+
278
+
279
+ def add_ns(tag, nsdict=CNSD):
280
+ return tag
281
+
282
+
283
+ def ToString(et):
284
+ outstream = StringIO()
285
+ et.write(outstream, encoding="unicode")
286
+ s1 = outstream.getvalue()
287
+ outstream.close()
288
+ return s1
289
+
290
+
291
+ def escape_cdata(text):
292
+ text = text.replace("&", "&amp;")
293
+ text = text.replace("<", "&lt;")
294
+ text = text.replace(">", "&gt;")
295
+ ascii_ = ''
296
+ for char in text:
297
+ if ord(char) >= ord("\x7f"):
298
+ ascii_ += "&#x%X;" % (ord(char), )
299
+ else:
300
+ ascii_ += char
301
+ return ascii_
302
+
303
+
304
+ #
305
+ # Classes
306
+ #
307
+
308
+
309
+ class TableStyle:
310
+ def __init__(self, border=None, backgroundcolor=None) -> None:
311
+ self.border = border
312
+ self.backgroundcolor = backgroundcolor
313
+
314
+ def get_border_(self):
315
+ return self.border_
316
+
317
+ def set_border_(self, border) -> None:
318
+ self.border_ = border
319
+
320
+ border = property(get_border_, set_border_)
321
+
322
+ def get_backgroundcolor_(self):
323
+ return self.backgroundcolor_
324
+
325
+ def set_backgroundcolor_(self, backgroundcolor) -> None:
326
+ self.backgroundcolor_ = backgroundcolor
327
+ backgroundcolor = property(get_backgroundcolor_, set_backgroundcolor_)
328
+
329
+
330
+ BUILTIN_DEFAULT_TABLE_STYLE = TableStyle(
331
+ border='0.0007in solid #000000')
332
+
333
+
334
+ #
335
+ # Information about the indentation level for lists nested inside
336
+ # other contexts, e.g. dictionary lists.
337
+ class ListLevel:
338
+ def __init__(self, level, sibling_level=True, nested_level=True) -> None:
339
+ self.level = level
340
+ self.sibling_level = sibling_level
341
+ self.nested_level = nested_level
342
+
343
+ def set_sibling(self, sibling_level) -> None:
344
+ self.sibling_level = sibling_level
345
+
346
+ def get_sibling(self):
347
+ return self.sibling_level
348
+
349
+ def set_nested(self, nested_level) -> None:
350
+ self.nested_level = nested_level
351
+
352
+ def get_nested(self):
353
+ return self.nested_level
354
+
355
+ def set_level(self, level) -> None:
356
+ self.level = level
357
+
358
+ def get_level(self):
359
+ return self.level
360
+
361
+
362
+ class Writer(writers.Writer):
363
+
364
+ MIME_TYPE = 'application/vnd.oasis.opendocument.text'
365
+ EXTENSION = '.odt'
366
+
367
+ supported = ('odt', )
368
+ """Formats this writer supports."""
369
+
370
+ default_stylesheet = 'styles' + EXTENSION
371
+
372
+ default_stylesheet_path = utils.relative_path(
373
+ os.path.join(os.getcwd(), 'dummy'),
374
+ os.path.join(os.path.dirname(__file__), default_stylesheet))
375
+
376
+ default_template = 'template.txt'
377
+
378
+ default_template_path = utils.relative_path(
379
+ os.path.join(os.getcwd(), 'dummy'),
380
+ os.path.join(os.path.dirname(__file__), default_template))
381
+
382
+ settings_spec = (
383
+ 'ODF-Specific Options.',
384
+ None,
385
+ (
386
+ ('Specify a stylesheet. '
387
+ 'Default: "%s"' % default_stylesheet_path,
388
+ ['--stylesheet'],
389
+ {'default': default_stylesheet_path,
390
+ 'dest': 'stylesheet',
391
+ 'metavar': '<filename>'}),
392
+ ('Specify an ODF-specific configuration/mapping file '
393
+ 'relative to the current working directory.',
394
+ ['--odf-config-file'],
395
+ {'metavar': '<file>'}),
396
+ ('Obfuscate email addresses to confuse harvesters.',
397
+ ['--cloak-email-addresses'],
398
+ {'default': False,
399
+ 'action': 'store_true',
400
+ 'dest': 'cloak_email_addresses',
401
+ 'validator': frontend.validate_boolean}),
402
+ ('Do not obfuscate email addresses.',
403
+ ['--no-cloak-email-addresses'],
404
+ {'default': False,
405
+ 'action': 'store_false',
406
+ 'dest': 'cloak_email_addresses',
407
+ 'validator': frontend.validate_boolean}),
408
+ ('Specify the thickness of table borders in thousands of a cm. '
409
+ 'Default is 35.',
410
+ ['--table-border-thickness'],
411
+ {'default': None,
412
+ 'metavar': '<int>',
413
+ 'validator': frontend.validate_nonnegative_int}),
414
+ ('Add syntax highlighting in literal code blocks.',
415
+ ['--add-syntax-highlighting'],
416
+ {'default': False,
417
+ 'action': 'store_true',
418
+ 'dest': 'add_syntax_highlighting',
419
+ 'validator': frontend.validate_boolean}),
420
+ ('Do not add syntax highlighting in '
421
+ 'literal code blocks. (default)',
422
+ ['--no-syntax-highlighting'],
423
+ {'default': False,
424
+ 'action': 'store_false',
425
+ 'dest': 'add_syntax_highlighting',
426
+ 'validator': frontend.validate_boolean}),
427
+ ('Create sections for headers. (default)',
428
+ ['--create-sections'],
429
+ {'default': True,
430
+ 'action': 'store_true',
431
+ 'dest': 'create_sections',
432
+ 'validator': frontend.validate_boolean}),
433
+ ('Do not create sections for headers.',
434
+ ['--no-sections'],
435
+ {'default': True,
436
+ 'action': 'store_false',
437
+ 'dest': 'create_sections',
438
+ 'validator': frontend.validate_boolean}),
439
+ ('Create links.',
440
+ ['--create-links'],
441
+ {'default': False,
442
+ 'action': 'store_true',
443
+ 'dest': 'create_links',
444
+ 'validator': frontend.validate_boolean}),
445
+ ('Do not create links. (default)',
446
+ ['--no-links'],
447
+ {'default': False,
448
+ 'action': 'store_false',
449
+ 'dest': 'create_links',
450
+ 'validator': frontend.validate_boolean}),
451
+ ('Generate endnotes at end of document, not footnotes '
452
+ 'at bottom of page.',
453
+ ['--endnotes-end-doc'],
454
+ {'default': False,
455
+ 'action': 'store_true',
456
+ 'dest': 'endnotes_end_doc',
457
+ 'validator': frontend.validate_boolean}),
458
+ ('Generate footnotes at bottom of page, not endnotes '
459
+ 'at end of document. (default)',
460
+ ['--no-endnotes-end-doc'],
461
+ {'default': False,
462
+ 'action': 'store_false',
463
+ 'dest': 'endnotes_end_doc',
464
+ 'validator': frontend.validate_boolean}),
465
+ ('Generate a bullet list table of contents, '
466
+ 'not a native ODF table of contents.',
467
+ ['--generate-list-toc'],
468
+ {'action': 'store_false',
469
+ 'dest': 'generate_oowriter_toc',
470
+ 'validator': frontend.validate_boolean}),
471
+ ('Generate a native ODF table of contents, '
472
+ 'not a bullet list. (default)',
473
+ ['--generate-oowriter-toc'],
474
+ {'default': True,
475
+ 'action': 'store_true',
476
+ 'dest': 'generate_oowriter_toc',
477
+ 'validator': frontend.validate_boolean}),
478
+ ('Specify the contents of an custom header line. '
479
+ 'See ODF/ODT writer documentation for details '
480
+ 'about special field character sequences.',
481
+ ['--custom-odt-header'],
482
+ {'default': '',
483
+ 'dest': 'custom_header',
484
+ 'metavar': '<custom header>'}),
485
+ ('Specify the contents of an custom footer line. '
486
+ 'See ODF/ODT writer documentation for details.',
487
+ ['--custom-odt-footer'],
488
+ {'default': '',
489
+ 'dest': 'custom_footer',
490
+ 'metavar': '<custom footer>'}),
491
+ )
492
+ )
493
+
494
+ settings_defaults = {
495
+ 'output_encoding_error_handler': 'xmlcharrefreplace',
496
+ }
497
+
498
+ relative_path_settings = ('odf_config_file', 'stylesheet',)
499
+
500
+ config_section = 'odf_odt writer'
501
+ config_section_dependencies = ('writers',)
502
+
503
+ def __init__(self) -> None:
504
+ writers.Writer.__init__(self)
505
+ self.translator_class = ODFTranslator
506
+
507
+ def translate(self) -> None:
508
+ self.settings = self.document.settings
509
+ self.visitor = self.translator_class(self.document)
510
+ self.visitor.retrieve_styles(self.EXTENSION)
511
+ self.document.walkabout(self.visitor)
512
+ self.visitor.add_doc_title()
513
+ self.assemble_my_parts()
514
+ self.output = self.parts['whole']
515
+
516
+ def assemble_my_parts(self) -> None:
517
+ """Assemble the `self.parts` dictionary. Extend in subclasses.
518
+ """
519
+ writers.Writer.assemble_parts(self)
520
+ f = tempfile.NamedTemporaryFile()
521
+ zfile = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
522
+ self.write_zip_str(
523
+ zfile, 'mimetype', self.MIME_TYPE,
524
+ compress_type=zipfile.ZIP_STORED)
525
+ content = self.visitor.content_astext()
526
+ self.write_zip_str(zfile, 'content.xml', content)
527
+ s1 = self.create_manifest()
528
+ self.write_zip_str(zfile, 'META-INF/manifest.xml', s1)
529
+ s1 = self.create_meta()
530
+ self.write_zip_str(zfile, 'meta.xml', s1)
531
+ s1 = self.get_stylesheet()
532
+ # Set default language in document to be generated.
533
+ # Language is specified by the -l/--language command line option.
534
+ # The format is described in BCP 47. If region is omitted, we use
535
+ # local.normalize(ll) to obtain a region.
536
+ language_code = None
537
+ region_code = None
538
+ if self.visitor.language_code:
539
+ language_ids = self.visitor.language_code.replace('_', '-')
540
+ language_ids = language_ids.split('-')
541
+ # first tag is primary language tag
542
+ language_code = language_ids[0].lower()
543
+ # 2-letter region subtag may follow in 2nd or 3rd position
544
+ for subtag in language_ids[1:]:
545
+ if len(subtag) == 2 and subtag.isalpha():
546
+ region_code = subtag.upper()
547
+ break
548
+ elif len(subtag) == 1:
549
+ break # 1-letter tag is never before valid region tag
550
+ if region_code is None:
551
+ try:
552
+ rcode = locale.normalize(language_code)
553
+ except NameError:
554
+ rcode = language_code
555
+ rcode = rcode.split('_')
556
+ if len(rcode) > 1:
557
+ rcode = rcode[1].split('.')
558
+ region_code = rcode[0]
559
+ if region_code is None:
560
+ self.document.reporter.warning(
561
+ 'invalid language-region.\n'
562
+ ' Could not find region with locale.normalize().\n'
563
+ ' Please specify both language and region (ll-RR).\n'
564
+ ' Examples: es-MX (Spanish, Mexico),\n'
565
+ ' en-AU (English, Australia).')
566
+ # Update the style ElementTree with the language and region.
567
+ # Note that we keep a reference to the modified node because
568
+ # it is possible that ElementTree will throw away the Python
569
+ # representation of the updated node if we do not.
570
+ updated, new_dom_styles, updated_node = self.update_stylesheet(
571
+ self.visitor.get_dom_stylesheet(), language_code, region_code)
572
+ if updated:
573
+ s1 = ET.tostring(new_dom_styles)
574
+ self.write_zip_str(zfile, 'styles.xml', s1)
575
+ self.store_embedded_files(zfile)
576
+ self.copy_from_stylesheet(zfile)
577
+ zfile.close()
578
+ f.seek(0)
579
+ whole = f.read()
580
+ f.close()
581
+ self.parts['whole'] = whole
582
+ self.parts['encoding'] = self.document.settings.output_encoding
583
+ self.parts['version'] = docutils.__version__
584
+
585
+ def update_stylesheet(self, stylesheet_root, language_code, region_code):
586
+ """Update xml style sheet element with language and region/country."""
587
+ updated = False
588
+ modified_nodes = set()
589
+ if language_code is not None or region_code is not None:
590
+ n1 = stylesheet_root.find(
591
+ '{urn:oasis:names:tc:opendocument:xmlns:office:1.0}'
592
+ 'styles')
593
+ if n1 is None:
594
+ raise RuntimeError(
595
+ "Cannot find 'styles' element in styles.odt/styles.xml")
596
+ n2_nodes = n1.findall(
597
+ '{urn:oasis:names:tc:opendocument:xmlns:style:1.0}'
598
+ 'default-style')
599
+ if not n2_nodes:
600
+ raise RuntimeError(
601
+ "Cannot find 'default-style' "
602
+ "element in styles.xml")
603
+ for node in n2_nodes:
604
+ family = node.attrib.get(
605
+ '{urn:oasis:names:tc:opendocument:xmlns:style:1.0}'
606
+ 'family')
607
+ if family == 'paragraph' or family == 'graphic':
608
+ n3 = node.find(
609
+ '{urn:oasis:names:tc:opendocument:xmlns:style:1.0}'
610
+ 'text-properties')
611
+ if n3 is None:
612
+ raise RuntimeError(
613
+ "Cannot find 'text-properties' "
614
+ "element in styles.xml")
615
+ if language_code is not None:
616
+ n3.attrib[
617
+ '{urn:oasis:names:tc:opendocument:xmlns:'
618
+ 'xsl-fo-compatible:1.0}language'] = language_code
619
+ n3.attrib[
620
+ '{urn:oasis:names:tc:opendocument:xmlns:'
621
+ 'style:1.0}language-complex'] = language_code
622
+ updated = True
623
+ modified_nodes.add(n3)
624
+ if region_code is not None:
625
+ n3.attrib[
626
+ '{urn:oasis:names:tc:opendocument:xmlns:'
627
+ 'xsl-fo-compatible:1.0}country'] = region_code
628
+ n3.attrib[
629
+ '{urn:oasis:names:tc:opendocument:xmlns:'
630
+ 'style:1.0}country-complex'] = region_code
631
+ updated = True
632
+ modified_nodes.add(n3)
633
+ return updated, stylesheet_root, modified_nodes
634
+
635
+ def write_zip_str(
636
+ self, zfile, name, bytes_, compress_type=zipfile.ZIP_DEFLATED,
637
+ ) -> None:
638
+ localtime = time.localtime(time.time())
639
+ zinfo = zipfile.ZipInfo(name, localtime)
640
+ # Add some standard UNIX file access permissions (-rw-r--r--).
641
+ zinfo.external_attr = (0x81a4 & 0xFFFF) << 16
642
+ zinfo.compress_type = compress_type
643
+ zfile.writestr(zinfo, bytes_)
644
+
645
+ def store_embedded_files(self, zfile) -> None:
646
+ embedded_files = self.visitor.get_embedded_file_list()
647
+ for source, destination in embedded_files:
648
+ if source is None:
649
+ continue
650
+ try:
651
+ zfile.write(source, destination)
652
+ except OSError:
653
+ self.document.reporter.warning(
654
+ "Can't open file %s." % (source, ))
655
+
656
+ def get_settings(self):
657
+ """
658
+ modeled after get_stylesheet
659
+ """
660
+ stylespath = self.settings.stylesheet
661
+ zfile = zipfile.ZipFile(stylespath, 'r')
662
+ s1 = zfile.read('settings.xml')
663
+ zfile.close()
664
+ return s1
665
+
666
+ def get_stylesheet(self):
667
+ """Get the stylesheet from the visitor.
668
+ Ask the visitor to setup the page.
669
+ """
670
+ return self.visitor.setup_page()
671
+
672
+ def copy_from_stylesheet(self, outzipfile) -> None:
673
+ """Copy images, settings, etc from the stylesheet doc into target doc.
674
+ """
675
+ stylespath = self.settings.stylesheet
676
+ if not stylespath.endswith('.odt'):
677
+ return # an '.xml' stylesheet does not have settings or images
678
+ inzipfile = zipfile.ZipFile(stylespath, 'r')
679
+ # Copy the settings.
680
+ s1 = inzipfile.read('settings.xml')
681
+ self.write_zip_str(outzipfile, 'settings.xml', s1)
682
+ # Copy the images.
683
+ namelist = inzipfile.namelist()
684
+ for name in namelist:
685
+ if name.startswith('Pictures/'):
686
+ imageobj = inzipfile.read(name)
687
+ outzipfile.writestr(name, imageobj)
688
+ inzipfile.close()
689
+
690
+ def assemble_parts(self) -> None:
691
+ pass
692
+
693
+ def create_manifest(self):
694
+ root = Element(
695
+ 'manifest:manifest',
696
+ attrib=MANIFEST_NAMESPACE_ATTRIB,
697
+ nsdict=MANIFEST_NAMESPACE_DICT,
698
+ )
699
+ doc = ET.ElementTree(root)
700
+ SubElement(root, 'manifest:file-entry', attrib={
701
+ 'manifest:media-type': self.MIME_TYPE,
702
+ 'manifest:full-path': '/',
703
+ }, nsdict=MANNSD)
704
+ SubElement(root, 'manifest:file-entry', attrib={
705
+ 'manifest:media-type': 'text/xml',
706
+ 'manifest:full-path': 'content.xml',
707
+ }, nsdict=MANNSD)
708
+ SubElement(root, 'manifest:file-entry', attrib={
709
+ 'manifest:media-type': 'text/xml',
710
+ 'manifest:full-path': 'styles.xml',
711
+ }, nsdict=MANNSD)
712
+ SubElement(root, 'manifest:file-entry', attrib={
713
+ 'manifest:media-type': 'text/xml',
714
+ 'manifest:full-path': 'settings.xml',
715
+ }, nsdict=MANNSD)
716
+ SubElement(root, 'manifest:file-entry', attrib={
717
+ 'manifest:media-type': 'text/xml',
718
+ 'manifest:full-path': 'meta.xml',
719
+ }, nsdict=MANNSD)
720
+ s1 = ToString(doc)
721
+ doc = minidom.parseString(s1)
722
+ return doc.toprettyxml(' ')
723
+
724
+ def create_meta(self):
725
+ root = Element(
726
+ 'office:document-meta',
727
+ attrib=META_NAMESPACE_ATTRIB,
728
+ nsdict=META_NAMESPACE_DICT,
729
+ )
730
+ doc = ET.ElementTree(root)
731
+ root = SubElement(root, 'office:meta', nsdict=METNSD)
732
+ el1 = SubElement(root, 'meta:generator', nsdict=METNSD)
733
+ el1.text = 'Docutils/rst2odf.py/%s' % (VERSION, )
734
+ s1 = os.environ.get('USER', '')
735
+ el1 = SubElement(root, 'meta:initial-creator', nsdict=METNSD)
736
+ el1.text = s1
737
+ s2 = time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime())
738
+ el1 = SubElement(root, 'meta:creation-date', nsdict=METNSD)
739
+ el1.text = s2
740
+ el1 = SubElement(root, 'dc:creator', nsdict=METNSD)
741
+ el1.text = s1
742
+ el1 = SubElement(root, 'dc:date', nsdict=METNSD)
743
+ el1.text = s2
744
+ el1 = SubElement(root, 'dc:language', nsdict=METNSD)
745
+ el1.text = 'en-US'
746
+ el1 = SubElement(root, 'meta:editing-cycles', nsdict=METNSD)
747
+ el1.text = '1'
748
+ el1 = SubElement(root, 'meta:editing-duration', nsdict=METNSD)
749
+ el1.text = 'PT00M01S'
750
+ el1 = SubElement(root, 'dc:title', nsdict=METNSD)
751
+ el1.text = self.document.get('title', '[no title]')
752
+ for prop, value in self.visitor.get_meta_dict().items():
753
+ # 'keywords', 'description', and 'subject' have their own fields:
754
+ if prop == 'keywords':
755
+ keywords = re.split(', *', value)
756
+ for keyword in keywords:
757
+ el1 = SubElement(root, 'meta:keyword', nsdict=METNSD)
758
+ el1.text = keyword
759
+ elif prop == 'description':
760
+ el1 = SubElement(root, 'dc:description', nsdict=METNSD)
761
+ el1.text = value
762
+ elif prop == 'subject':
763
+ el1 = SubElement(root, 'dc:subject', nsdict=METNSD)
764
+ el1.text = value
765
+ else: # Store remaining properties as custom/user-defined
766
+ el1 = SubElement(root, 'meta:user-defined',
767
+ attrib={'meta:name': prop}, nsdict=METNSD)
768
+ el1.text = value
769
+ s1 = ToString(doc)
770
+ # doc = minidom.parseString(s1)
771
+ # s1 = doc.toprettyxml(' ')
772
+ return s1
773
+
774
+
775
+ # class ODFTranslator(nodes.SparseNodeVisitor):
776
+ class ODFTranslator(nodes.GenericNodeVisitor):
777
+
778
+ used_styles = (
779
+ 'attribution', 'blockindent', 'blockquote', 'blockquote-bulletitem',
780
+ 'blockquote-bulletlist', 'blockquote-enumitem', 'blockquote-enumlist',
781
+ 'bulletitem', 'bulletlist',
782
+ 'caption', 'legend',
783
+ 'centeredtextbody', 'codeblock', 'codeblock-indented',
784
+ 'codeblock-classname', 'codeblock-comment', 'codeblock-functionname',
785
+ 'codeblock-keyword', 'codeblock-name', 'codeblock-number',
786
+ 'codeblock-operator', 'codeblock-string', 'emphasis', 'enumitem',
787
+ 'enumlist', 'epigraph', 'epigraph-bulletitem', 'epigraph-bulletlist',
788
+ 'epigraph-enumitem', 'epigraph-enumlist', 'footer',
789
+ 'footnote', 'citation',
790
+ 'header', 'highlights', 'highlights-bulletitem',
791
+ 'highlights-bulletlist', 'highlights-enumitem', 'highlights-enumlist',
792
+ 'horizontalline', 'inlineliteral', 'quotation', 'rubric',
793
+ 'strong', 'table-title', 'textbody', 'tocbulletlist', 'tocenumlist',
794
+ 'title',
795
+ 'subtitle',
796
+ 'heading1',
797
+ 'heading2',
798
+ 'heading3',
799
+ 'heading4',
800
+ 'heading5',
801
+ 'heading6',
802
+ 'heading7',
803
+ 'admon-attention-hdr',
804
+ 'admon-attention-body',
805
+ 'admon-caution-hdr',
806
+ 'admon-caution-body',
807
+ 'admon-danger-hdr',
808
+ 'admon-danger-body',
809
+ 'admon-error-hdr',
810
+ 'admon-error-body',
811
+ 'admon-generic-hdr',
812
+ 'admon-generic-body',
813
+ 'admon-hint-hdr',
814
+ 'admon-hint-body',
815
+ 'admon-important-hdr',
816
+ 'admon-important-body',
817
+ 'admon-note-hdr',
818
+ 'admon-note-body',
819
+ 'admon-tip-hdr',
820
+ 'admon-tip-body',
821
+ 'admon-warning-hdr',
822
+ 'admon-warning-body',
823
+ 'tableoption',
824
+ 'tableoption.%c', 'tableoption.%c%d', 'Table%d', 'Table%d.%c',
825
+ 'Table%d.%c%d',
826
+ 'lineblock1',
827
+ 'lineblock2',
828
+ 'lineblock3',
829
+ 'lineblock4',
830
+ 'lineblock5',
831
+ 'lineblock6',
832
+ 'image', 'figureframe',
833
+ )
834
+
835
+ def __init__(self, document) -> None:
836
+ # nodes.SparseNodeVisitor.__init__(self, document)
837
+ nodes.GenericNodeVisitor.__init__(self, document)
838
+ self.settings = document.settings
839
+ if self.settings.output_encoding == 'unicode':
840
+ self.document.reporter.severe('The ODT writer returns `bytes` '
841
+ 'that cannot be decoded to `str`')
842
+ # TODO: return document as "flat" XML?
843
+ self.language_code = self.settings.language_code
844
+ self.language = languages.get_language(
845
+ self.language_code,
846
+ document.reporter)
847
+ self.format_map = {}
848
+ if self.settings.odf_config_file:
849
+ parser = ConfigParser()
850
+ parser.read(self.settings.odf_config_file)
851
+ for rststyle, format in parser.items("Formats"):
852
+ if rststyle not in self.used_styles:
853
+ self.document.reporter.warning(
854
+ 'Style "%s" is not a style used by odtwriter.' % (
855
+ rststyle, ))
856
+ self.format_map[rststyle] = format
857
+ self.section_level = 0
858
+ self.section_count = 0
859
+ # Create ElementTree content and styles documents.
860
+ root = Element(
861
+ 'office:document-content',
862
+ attrib=CONTENT_NAMESPACE_ATTRIB,
863
+ )
864
+ self.content_tree = ET.ElementTree(element=root)
865
+ self.current_element = root
866
+ SubElement(root, 'office:scripts')
867
+ SubElement(root, 'office:font-face-decls')
868
+ el = SubElement(root, 'office:automatic-styles')
869
+ self.automatic_styles = el
870
+ el = SubElement(root, 'office:body')
871
+ el = self.generate_content_element(el)
872
+ self.current_element = el
873
+ self.body_text_element = el
874
+ self.paragraph_style_stack = [self.rststyle('textbody'), ]
875
+ self.list_style_stack = []
876
+ self.table_count = 0
877
+ self.column_count = ord('A') - 1
878
+ self.trace_level = -1
879
+ self.optiontablestyles_generated = False
880
+ self.field_name = None
881
+ self.field_element = None
882
+ self.title = None
883
+ self.image_count = 0
884
+ self.image_style_count = 0
885
+ self.image_dict = {}
886
+ self.embedded_file_list = []
887
+ self.syntaxhighlighting = 1
888
+ self.syntaxhighlight_lexer = 'python'
889
+ self.header_content = []
890
+ self.footer_content = []
891
+ self.in_header = False
892
+ self.in_footer = False
893
+ self.blockstyle = ''
894
+ self.in_table_of_contents = False
895
+ self.table_of_content_index_body = None
896
+ self.list_level = 0
897
+ self.def_list_level = 0
898
+ self.footnote_ref_dict = {}
899
+ self.footnote_list = []
900
+ self.footnote_chars_idx = 0
901
+ self.footnote_level = 0
902
+ self.pending_ids = []
903
+ self.in_paragraph = False
904
+ self.found_doc_title = False
905
+ self.bumped_list_level_stack = []
906
+ self.meta_dict = {}
907
+ self.line_block_level = 0
908
+ self.line_indent_level = 0
909
+ self.citation_id = None
910
+ self.style_index = 0 # use to form unique style names
911
+ self.str_stylesheet = ''
912
+ self.str_stylesheetcontent = ''
913
+ self.dom_stylesheet = None
914
+ self.table_styles = None
915
+ self.in_citation = False
916
+
917
+ # Keep track of nested styling classes
918
+ self.inline_style_count_stack = []
919
+
920
+ def get_str_stylesheet(self):
921
+ return self.str_stylesheet
922
+
923
+ def retrieve_styles(self, extension):
924
+ """Retrieve the stylesheet from a .xml or .odt (zip) file.
925
+
926
+ Store in `self.*_styles*` attributes.
927
+ """
928
+ stylespath = self.settings.stylesheet
929
+ ext = os.path.splitext(stylespath)[1]
930
+ if ext == '.xml':
931
+ s1 = Path(stylespath).read_text(encoding='utf-8')
932
+ s2 = ''
933
+ elif ext == extension:
934
+ zfile = zipfile.ZipFile(stylespath, 'r')
935
+ s1 = zfile.read('styles.xml')
936
+ s2 = zfile.read('content.xml')
937
+ zfile.close()
938
+ else:
939
+ raise RuntimeError('stylesheet path (%s) must be %s or '
940
+ '.xml file' % (stylespath, extension))
941
+ self.str_stylesheet = s1
942
+ self.str_stylesheetcontent = s2
943
+ self.dom_stylesheet = ET.fromstring(self.str_stylesheet)
944
+ if not s2:
945
+ return
946
+ # TODO: dom_stylesheetcontent is never used. Remove?
947
+ self.dom_stylesheetcontent = ET.fromstring(
948
+ self.str_stylesheetcontent)
949
+ self.table_styles = self.extract_table_styles(s2)
950
+
951
+ def extract_table_styles(self, styles_str):
952
+ root = ET.fromstring(styles_str)
953
+ table_styles = {}
954
+ auto_styles = root.find(
955
+ '{%s}automatic-styles' % (CNSD['office'], ))
956
+ for stylenode in auto_styles:
957
+ name = stylenode.get('{%s}name' % (CNSD['style'], ))
958
+ tablename = name.split('.')[0]
959
+ family = stylenode.get('{%s}family' % (CNSD['style'], ))
960
+ if name.startswith(TABLESTYLEPREFIX):
961
+ tablestyle = table_styles.get(tablename)
962
+ if tablestyle is None:
963
+ tablestyle = TableStyle()
964
+ table_styles[tablename] = tablestyle
965
+ if family == 'table':
966
+ properties = stylenode.find(
967
+ '{%s}table-properties' % (CNSD['style'], ))
968
+ property_ = properties.get(
969
+ '{%s}%s' % (CNSD['fo'], 'background-color', ))
970
+ if property_ is not None and property_ != 'none':
971
+ tablestyle.backgroundcolor = property_
972
+ elif family == 'table-cell':
973
+ properties = stylenode.find(
974
+ '{%s}table-cell-properties' % (CNSD['style'], ))
975
+ if properties is not None:
976
+ border = self.get_property(properties)
977
+ if border is not None:
978
+ tablestyle.border = border
979
+ return table_styles
980
+
981
+ def get_property(self, stylenode):
982
+ border = None
983
+ for propertyname in TABLEPROPERTYNAMES:
984
+ border = stylenode.get('{%s}%s' % (CNSD['fo'], propertyname, ))
985
+ if border is not None and border != 'none':
986
+ return border
987
+ return border
988
+
989
+ def add_doc_title(self) -> None:
990
+ text = self.settings.title
991
+ if text:
992
+ self.title = text
993
+ if not self.found_doc_title:
994
+ el = Element('text:p', attrib={
995
+ 'text:style-name': self.rststyle('title'),
996
+ })
997
+ el.text = text
998
+ self.body_text_element.insert(0, el)
999
+ el = self.find_first_text_p(self.body_text_element)
1000
+ if el is not None:
1001
+ self.attach_page_style(el)
1002
+
1003
+ def find_first_text_p(self, el):
1004
+ """Search the generated doc and return the first <text:p> element.
1005
+ """
1006
+ if el.tag == 'text:p' or el.tag == 'text:h':
1007
+ return el
1008
+ else:
1009
+ for child in el:
1010
+ el1 = self.find_first_text_p(child)
1011
+ if el1 is not None:
1012
+ return el1
1013
+ return None
1014
+
1015
+ def attach_page_style(self, el) -> None:
1016
+ """Attach the default page style.
1017
+
1018
+ Create an automatic-style that refers to the current style
1019
+ of this element and that refers to the default page style.
1020
+ """
1021
+ current_style = el.get('text:style-name')
1022
+ style_name = 'P1003'
1023
+ el1 = SubElement(
1024
+ self.automatic_styles, 'style:style', attrib={
1025
+ 'style:name': style_name,
1026
+ 'style:master-page-name': "rststyle-pagedefault",
1027
+ 'style:family': "paragraph",
1028
+ }, nsdict=SNSD)
1029
+ if current_style:
1030
+ el1.set('style:parent-style-name', current_style)
1031
+ el.set('text:style-name', style_name)
1032
+
1033
+ def rststyle(self, name, parameters=()):
1034
+ """
1035
+ Returns the style name to use for the given style.
1036
+
1037
+ If `parameters` is given `name` must contain a matching number of
1038
+ ``%`` and is used as a format expression with `parameters` as
1039
+ the value.
1040
+ """
1041
+ name1 = name % parameters
1042
+ return self.format_map.get(name1, 'rststyle-%s' % name1)
1043
+
1044
+ def generate_content_element(self, root):
1045
+ return SubElement(root, 'office:text')
1046
+
1047
+ def setup_page(self):
1048
+ self.setup_paper(self.dom_stylesheet)
1049
+ if (len(self.header_content) > 0
1050
+ or len(self.footer_content) > 0
1051
+ or self.settings.custom_header
1052
+ or self.settings.custom_footer):
1053
+ self.add_header_footer(self.dom_stylesheet)
1054
+ return ET.tostring(self.dom_stylesheet)
1055
+
1056
+ def get_dom_stylesheet(self):
1057
+ return self.dom_stylesheet
1058
+
1059
+ def setup_paper(self, root_el) -> None:
1060
+ # TODO: only call paperconf, if it is actually used
1061
+ # (i.e. page size removed from "styles.odt" with rst2odt_prepstyles.py
1062
+ # cf. conditional in walk() below)?
1063
+ try:
1064
+ dimensions = subprocess.check_output(('paperconf', '-s'),
1065
+ stderr=subprocess.STDOUT)
1066
+ w, h = (float(s) for s in dimensions.split())
1067
+ except (subprocess.CalledProcessError, FileNotFoundError, ValueError):
1068
+ self.document.reporter.info(
1069
+ 'Cannot use `paperconf`, defaulting to Letter.')
1070
+ w, h = 612, 792 # default to Letter
1071
+
1072
+ def walk(el) -> None:
1073
+ if el.tag == "{%s}page-layout-properties" % SNSD["style"] and \
1074
+ "{%s}page-width" % SNSD["fo"] not in el.attrib:
1075
+ el.attrib["{%s}page-width" % SNSD["fo"]] = "%.3fpt" % w
1076
+ el.attrib["{%s}page-height" % SNSD["fo"]] = "%.3fpt" % h
1077
+ el.attrib["{%s}margin-left" % SNSD["fo"]] = \
1078
+ el.attrib["{%s}margin-right" % SNSD["fo"]] = \
1079
+ "%.3fpt" % (.1 * w)
1080
+ el.attrib["{%s}margin-top" % SNSD["fo"]] = \
1081
+ el.attrib["{%s}margin-bottom" % SNSD["fo"]] = \
1082
+ "%.3fpt" % (.1 * h)
1083
+ else:
1084
+ for subel in el:
1085
+ walk(subel)
1086
+ walk(root_el)
1087
+
1088
+ def add_header_footer(self, root_el) -> None:
1089
+ automatic_styles = root_el.find(
1090
+ '{%s}automatic-styles' % SNSD['office'])
1091
+ path = '{%s}master-styles' % (NAME_SPACE_1, )
1092
+ master_el = root_el.find(path)
1093
+ if master_el is None:
1094
+ return
1095
+ path = '{%s}master-page' % (SNSD['style'], )
1096
+ master_el_container = master_el.findall(path)
1097
+ master_el = None
1098
+ target_attrib = '{%s}name' % (SNSD['style'], )
1099
+ target_name = self.rststyle('pagedefault')
1100
+ for el in master_el_container:
1101
+ if el.get(target_attrib) == target_name:
1102
+ master_el = el
1103
+ break
1104
+ if master_el is None:
1105
+ return
1106
+ el1 = master_el
1107
+ if self.header_content or self.settings.custom_header:
1108
+ el2 = SubElement(
1109
+ el1, 'style:header',
1110
+ attrib=STYLES_NAMESPACE_ATTRIB,
1111
+ nsdict=STYLES_NAMESPACE_DICT,
1112
+ )
1113
+ for el in self.header_content:
1114
+ attrkey = add_ns('text:style-name', nsdict=SNSD)
1115
+ el.attrib[attrkey] = self.rststyle('header')
1116
+ el2.append(el)
1117
+ if self.settings.custom_header:
1118
+ self.create_custom_headfoot(
1119
+ el2,
1120
+ self.settings.custom_header, 'header', automatic_styles)
1121
+ if self.footer_content or self.settings.custom_footer:
1122
+ el2 = SubElement(
1123
+ el1, 'style:footer',
1124
+ attrib=STYLES_NAMESPACE_ATTRIB,
1125
+ nsdict=STYLES_NAMESPACE_DICT,
1126
+ )
1127
+ for el in self.footer_content:
1128
+ attrkey = add_ns('text:style-name', nsdict=SNSD)
1129
+ el.attrib[attrkey] = self.rststyle('footer')
1130
+ el2.append(el)
1131
+ if self.settings.custom_footer:
1132
+ self.create_custom_headfoot(
1133
+ el2,
1134
+ self.settings.custom_footer, 'footer', automatic_styles)
1135
+
1136
+ code_none, code_field, code_text = list(range(3))
1137
+ field_pat = re.compile(r'%(..?)%')
1138
+
1139
+ def create_custom_headfoot(
1140
+ self, parent, text, style_name, automatic_styles):
1141
+ parent = SubElement(parent, 'text:p', attrib={
1142
+ 'text:style-name': self.rststyle(style_name),
1143
+ })
1144
+ current_element = None
1145
+ field_iter = self.split_field_specifiers_iter(text)
1146
+ for item in field_iter:
1147
+ if item[0] == ODFTranslator.code_field:
1148
+ if item[1] not in (
1149
+ 'p', 'P',
1150
+ 't1', 't2', 't3', 't4',
1151
+ 'd1', 'd2', 'd3', 'd4', 'd5',
1152
+ 's', 't', 'a'):
1153
+ msg = 'bad field spec: %%%s%%' % (item[1], )
1154
+ raise RuntimeError(msg)
1155
+ el1 = self.make_field_element(
1156
+ parent,
1157
+ item[1], style_name, automatic_styles)
1158
+ if el1 is None:
1159
+ msg = 'bad field spec: %%%s%%' % (item[1], )
1160
+ raise RuntimeError(msg)
1161
+ else:
1162
+ current_element = el1
1163
+ else:
1164
+ if current_element is None:
1165
+ parent.text = item[1]
1166
+ else:
1167
+ current_element.tail = item[1]
1168
+
1169
+ def make_field_element(self, parent, text, style_name, automatic_styles):
1170
+ if text == 'p':
1171
+ el1 = SubElement(parent, 'text:page-number', attrib={
1172
+ # 'text:style-name': self.rststyle(style_name),
1173
+ 'text:select-page': 'current',
1174
+ })
1175
+ elif text == 'P':
1176
+ el1 = SubElement(parent, 'text:page-count', attrib={
1177
+ # 'text:style-name': self.rststyle(style_name),
1178
+ })
1179
+ elif text == 't1':
1180
+ self.style_index += 1
1181
+ el1 = SubElement(parent, 'text:time', attrib={
1182
+ 'text:style-name': self.rststyle(style_name),
1183
+ 'text:fixed': 'true',
1184
+ 'style:data-style-name':
1185
+ 'rst-time-style-%d' % self.style_index,
1186
+ })
1187
+ el2 = SubElement(automatic_styles, 'number:time-style', attrib={
1188
+ 'style:name': 'rst-time-style-%d' % self.style_index,
1189
+ 'xmlns:number': SNSD['number'],
1190
+ 'xmlns:style': SNSD['style'],
1191
+ })
1192
+ el3 = SubElement(el2, 'number:hours', attrib={
1193
+ 'number:style': 'long',
1194
+ })
1195
+ el3 = SubElement(el2, 'number:text')
1196
+ el3.text = ':'
1197
+ el3 = SubElement(el2, 'number:minutes', attrib={
1198
+ 'number:style': 'long',
1199
+ })
1200
+ elif text == 't2':
1201
+ self.style_index += 1
1202
+ el1 = SubElement(parent, 'text:time', attrib={
1203
+ 'text:style-name': self.rststyle(style_name),
1204
+ 'text:fixed': 'true',
1205
+ 'style:data-style-name':
1206
+ 'rst-time-style-%d' % self.style_index,
1207
+ })
1208
+ el2 = SubElement(automatic_styles, 'number:time-style', attrib={
1209
+ 'style:name': 'rst-time-style-%d' % self.style_index,
1210
+ 'xmlns:number': SNSD['number'],
1211
+ 'xmlns:style': SNSD['style'],
1212
+ })
1213
+ el3 = SubElement(el2, 'number:hours', attrib={
1214
+ 'number:style': 'long',
1215
+ })
1216
+ el3 = SubElement(el2, 'number:text')
1217
+ el3.text = ':'
1218
+ el3 = SubElement(el2, 'number:minutes', attrib={
1219
+ 'number:style': 'long',
1220
+ })
1221
+ el3 = SubElement(el2, 'number:text')
1222
+ el3.text = ':'
1223
+ el3 = SubElement(el2, 'number:seconds', attrib={
1224
+ 'number:style': 'long',
1225
+ })
1226
+ elif text == 't3':
1227
+ self.style_index += 1
1228
+ el1 = SubElement(parent, 'text:time', attrib={
1229
+ 'text:style-name': self.rststyle(style_name),
1230
+ 'text:fixed': 'true',
1231
+ 'style:data-style-name':
1232
+ 'rst-time-style-%d' % self.style_index,
1233
+ })
1234
+ el2 = SubElement(automatic_styles, 'number:time-style', attrib={
1235
+ 'style:name': 'rst-time-style-%d' % self.style_index,
1236
+ 'xmlns:number': SNSD['number'],
1237
+ 'xmlns:style': SNSD['style'],
1238
+ })
1239
+ el3 = SubElement(el2, 'number:hours', attrib={
1240
+ 'number:style': 'long',
1241
+ })
1242
+ el3 = SubElement(el2, 'number:text')
1243
+ el3.text = ':'
1244
+ el3 = SubElement(el2, 'number:minutes', attrib={
1245
+ 'number:style': 'long',
1246
+ })
1247
+ el3 = SubElement(el2, 'number:text')
1248
+ el3.text = ' '
1249
+ el3 = SubElement(el2, 'number:am-pm')
1250
+ elif text == 't4':
1251
+ self.style_index += 1
1252
+ el1 = SubElement(parent, 'text:time', attrib={
1253
+ 'text:style-name': self.rststyle(style_name),
1254
+ 'text:fixed': 'true',
1255
+ 'style:data-style-name':
1256
+ 'rst-time-style-%d' % self.style_index,
1257
+ })
1258
+ el2 = SubElement(automatic_styles, 'number:time-style', attrib={
1259
+ 'style:name': 'rst-time-style-%d' % self.style_index,
1260
+ 'xmlns:number': SNSD['number'],
1261
+ 'xmlns:style': SNSD['style'],
1262
+ })
1263
+ el3 = SubElement(el2, 'number:hours', attrib={
1264
+ 'number:style': 'long',
1265
+ })
1266
+ el3 = SubElement(el2, 'number:text')
1267
+ el3.text = ':'
1268
+ el3 = SubElement(el2, 'number:minutes', attrib={
1269
+ 'number:style': 'long',
1270
+ })
1271
+ el3 = SubElement(el2, 'number:text')
1272
+ el3.text = ':'
1273
+ el3 = SubElement(el2, 'number:seconds', attrib={
1274
+ 'number:style': 'long',
1275
+ })
1276
+ el3 = SubElement(el2, 'number:text')
1277
+ el3.text = ' '
1278
+ el3 = SubElement(el2, 'number:am-pm')
1279
+ elif text == 'd1':
1280
+ self.style_index += 1
1281
+ el1 = SubElement(parent, 'text:date', attrib={
1282
+ 'text:style-name': self.rststyle(style_name),
1283
+ 'style:data-style-name':
1284
+ 'rst-date-style-%d' % self.style_index,
1285
+ })
1286
+ el2 = SubElement(automatic_styles, 'number:date-style', attrib={
1287
+ 'style:name': 'rst-date-style-%d' % self.style_index,
1288
+ 'number:automatic-order': 'true',
1289
+ 'xmlns:number': SNSD['number'],
1290
+ 'xmlns:style': SNSD['style'],
1291
+ })
1292
+ el3 = SubElement(el2, 'number:month', attrib={
1293
+ 'number:style': 'long',
1294
+ })
1295
+ el3 = SubElement(el2, 'number:text')
1296
+ el3.text = '/'
1297
+ el3 = SubElement(el2, 'number:day', attrib={
1298
+ 'number:style': 'long',
1299
+ })
1300
+ el3 = SubElement(el2, 'number:text')
1301
+ el3.text = '/'
1302
+ el3 = SubElement(el2, 'number:year')
1303
+ elif text == 'd2':
1304
+ self.style_index += 1
1305
+ el1 = SubElement(parent, 'text:date', attrib={
1306
+ 'text:style-name': self.rststyle(style_name),
1307
+ 'style:data-style-name':
1308
+ 'rst-date-style-%d' % self.style_index,
1309
+ })
1310
+ el2 = SubElement(automatic_styles, 'number:date-style', attrib={
1311
+ 'style:name': 'rst-date-style-%d' % self.style_index,
1312
+ 'number:automatic-order': 'true',
1313
+ 'xmlns:number': SNSD['number'],
1314
+ 'xmlns:style': SNSD['style'],
1315
+ })
1316
+ el3 = SubElement(el2, 'number:month', attrib={
1317
+ 'number:style': 'long',
1318
+ })
1319
+ el3 = SubElement(el2, 'number:text')
1320
+ el3.text = '/'
1321
+ el3 = SubElement(el2, 'number:day', attrib={
1322
+ 'number:style': 'long',
1323
+ })
1324
+ el3 = SubElement(el2, 'number:text')
1325
+ el3.text = '/'
1326
+ el3 = SubElement(el2, 'number:year', attrib={
1327
+ 'number:style': 'long',
1328
+ })
1329
+ elif text == 'd3':
1330
+ self.style_index += 1
1331
+ el1 = SubElement(parent, 'text:date', attrib={
1332
+ 'text:style-name': self.rststyle(style_name),
1333
+ 'style:data-style-name':
1334
+ 'rst-date-style-%d' % self.style_index,
1335
+ })
1336
+ el2 = SubElement(automatic_styles, 'number:date-style', attrib={
1337
+ 'style:name': 'rst-date-style-%d' % self.style_index,
1338
+ 'number:automatic-order': 'true',
1339
+ 'xmlns:number': SNSD['number'],
1340
+ 'xmlns:style': SNSD['style'],
1341
+ })
1342
+ el3 = SubElement(el2, 'number:month', attrib={
1343
+ 'number:textual': 'true',
1344
+ })
1345
+ el3 = SubElement(el2, 'number:text')
1346
+ el3.text = ' '
1347
+ el3 = SubElement(el2, 'number:day', attrib={})
1348
+ el3 = SubElement(el2, 'number:text')
1349
+ el3.text = ', '
1350
+ el3 = SubElement(el2, 'number:year', attrib={
1351
+ 'number:style': 'long',
1352
+ })
1353
+ elif text == 'd4':
1354
+ self.style_index += 1
1355
+ el1 = SubElement(parent, 'text:date', attrib={
1356
+ 'text:style-name': self.rststyle(style_name),
1357
+ 'style:data-style-name':
1358
+ 'rst-date-style-%d' % self.style_index,
1359
+ })
1360
+ el2 = SubElement(automatic_styles, 'number:date-style', attrib={
1361
+ 'style:name': 'rst-date-style-%d' % self.style_index,
1362
+ 'number:automatic-order': 'true',
1363
+ 'xmlns:number': SNSD['number'],
1364
+ 'xmlns:style': SNSD['style'],
1365
+ })
1366
+ el3 = SubElement(el2, 'number:month', attrib={
1367
+ 'number:textual': 'true',
1368
+ 'number:style': 'long',
1369
+ })
1370
+ el3 = SubElement(el2, 'number:text')
1371
+ el3.text = ' '
1372
+ el3 = SubElement(el2, 'number:day', attrib={})
1373
+ el3 = SubElement(el2, 'number:text')
1374
+ el3.text = ', '
1375
+ el3 = SubElement(el2, 'number:year', attrib={
1376
+ 'number:style': 'long',
1377
+ })
1378
+ elif text == 'd5':
1379
+ self.style_index += 1
1380
+ el1 = SubElement(parent, 'text:date', attrib={
1381
+ 'text:style-name': self.rststyle(style_name),
1382
+ 'style:data-style-name':
1383
+ 'rst-date-style-%d' % self.style_index,
1384
+ })
1385
+ el2 = SubElement(automatic_styles, 'number:date-style', attrib={
1386
+ 'style:name': 'rst-date-style-%d' % self.style_index,
1387
+ 'xmlns:number': SNSD['number'],
1388
+ 'xmlns:style': SNSD['style'],
1389
+ })
1390
+ el3 = SubElement(el2, 'number:year', attrib={
1391
+ 'number:style': 'long',
1392
+ })
1393
+ el3 = SubElement(el2, 'number:text')
1394
+ el3.text = '-'
1395
+ el3 = SubElement(el2, 'number:month', attrib={
1396
+ 'number:style': 'long',
1397
+ })
1398
+ el3 = SubElement(el2, 'number:text')
1399
+ el3.text = '-'
1400
+ el3 = SubElement(el2, 'number:day', attrib={
1401
+ 'number:style': 'long',
1402
+ })
1403
+ elif text == 's':
1404
+ el1 = SubElement(parent, 'text:subject', attrib={
1405
+ 'text:style-name': self.rststyle(style_name),
1406
+ })
1407
+ elif text == 't':
1408
+ el1 = SubElement(parent, 'text:title', attrib={
1409
+ 'text:style-name': self.rststyle(style_name),
1410
+ })
1411
+ elif text == 'a':
1412
+ el1 = SubElement(parent, 'text:author-name', attrib={
1413
+ 'text:fixed': 'false',
1414
+ })
1415
+ else:
1416
+ el1 = None
1417
+ return el1
1418
+
1419
+ def split_field_specifiers_iter(self, text):
1420
+ pos1 = 0
1421
+ while True:
1422
+ mo = ODFTranslator.field_pat.search(text, pos1)
1423
+ if mo:
1424
+ pos2 = mo.start()
1425
+ if pos2 > pos1:
1426
+ yield ODFTranslator.code_text, text[pos1:pos2]
1427
+ yield ODFTranslator.code_field, mo.group(1)
1428
+ pos1 = mo.end()
1429
+ else:
1430
+ break
1431
+ trailing = text[pos1:]
1432
+ if trailing:
1433
+ yield ODFTranslator.code_text, trailing
1434
+
1435
+ def astext(self):
1436
+ root = self.content_tree.getroot()
1437
+ et = ET.ElementTree(root)
1438
+ return ToString(et)
1439
+
1440
+ def content_astext(self):
1441
+ return self.astext()
1442
+
1443
+ def set_title(self, title) -> None:
1444
+ self.title = title
1445
+
1446
+ def get_title(self):
1447
+ return self.title
1448
+
1449
+ def set_embedded_file_list(self, embedded_file_list) -> None:
1450
+ self.embedded_file_list = embedded_file_list
1451
+
1452
+ def get_embedded_file_list(self):
1453
+ return self.embedded_file_list
1454
+
1455
+ def get_meta_dict(self):
1456
+ return self.meta_dict
1457
+
1458
+ def process_footnotes(self) -> None:
1459
+ for node, el1 in self.footnote_list:
1460
+ backrefs = node.attributes.get('backrefs', [])
1461
+ first = True
1462
+ for ref in backrefs:
1463
+ el2 = self.footnote_ref_dict.get(ref)
1464
+ if el2 is not None:
1465
+ if first:
1466
+ first = False
1467
+ el3 = copy.deepcopy(el1)
1468
+ el2.append(el3)
1469
+ else:
1470
+ if len(el2) > 0: # and 'id' in el2.attrib:
1471
+ child = el2[0]
1472
+ ref1 = child.text
1473
+ attribkey = add_ns('text:id', nsdict=SNSD)
1474
+ id1 = el2.get(attribkey, 'footnote-error')
1475
+ if id1 is None:
1476
+ id1 = ''
1477
+ tag = add_ns('text:note-ref', nsdict=SNSD)
1478
+ el2.tag = tag
1479
+ if self.settings.endnotes_end_doc:
1480
+ note_class = 'endnote'
1481
+ else:
1482
+ note_class = 'footnote'
1483
+ el2.attrib.clear()
1484
+ attribkey = add_ns('text:note-class', nsdict=SNSD)
1485
+ el2.attrib[attribkey] = note_class
1486
+ attribkey = add_ns('text:ref-name', nsdict=SNSD)
1487
+ el2.attrib[attribkey] = id1
1488
+ attribkey = add_ns(
1489
+ 'text:reference-format', nsdict=SNSD)
1490
+ el2.attrib[attribkey] = 'page'
1491
+ el2.text = ref1
1492
+
1493
+ #
1494
+ # Utility methods
1495
+
1496
+ def append_child(self, tag, attrib=None, parent=None):
1497
+ if parent is None:
1498
+ parent = self.current_element
1499
+ return SubElement(parent, tag, attrib)
1500
+
1501
+ def append_p(self, style, text=None):
1502
+ result = self.append_child('text:p', attrib={
1503
+ 'text:style-name': self.rststyle(style)})
1504
+ self.append_pending_ids(result)
1505
+ if text is not None:
1506
+ result.text = text
1507
+ return result
1508
+
1509
+ def append_pending_ids(self, el) -> None:
1510
+ if self.settings.create_links:
1511
+ for id in self.pending_ids:
1512
+ SubElement(el, 'text:reference-mark', attrib={
1513
+ 'text:name': id})
1514
+ self.pending_ids = []
1515
+
1516
+ def set_current_element(self, el) -> None:
1517
+ self.current_element = el
1518
+
1519
+ def set_to_parent(self) -> None:
1520
+ self.current_element = self.current_element.getparent()
1521
+
1522
+ def generate_labeled_block(self, node, label):
1523
+ label = '%s:' % (self.language.labels[label], )
1524
+ el = self.append_p('textbody')
1525
+ el1 = SubElement(
1526
+ el, 'text:span',
1527
+ attrib={'text:style-name': self.rststyle('strong')})
1528
+ el1.text = label
1529
+ return self.append_p('blockindent')
1530
+
1531
+ def generate_labeled_line(self, node, label):
1532
+ label = '%s:' % (self.language.labels[label], )
1533
+ el = self.append_p('textbody')
1534
+ el1 = SubElement(
1535
+ el, 'text:span',
1536
+ attrib={'text:style-name': self.rststyle('strong')})
1537
+ el1.text = label
1538
+ el1.tail = node.astext()
1539
+ return el
1540
+
1541
+ def encode(self, text):
1542
+ return text.replace('\n', " ")
1543
+
1544
+ #
1545
+ # Visitor functions
1546
+ #
1547
+ # In alphabetic order, more or less.
1548
+ # See docutils.docutils.nodes.node_class_names.
1549
+ #
1550
+
1551
+ def dispatch_visit(self, node) -> None:
1552
+ """Override to catch basic attributes which many nodes have."""
1553
+ self.handle_basic_atts(node)
1554
+ nodes.GenericNodeVisitor.dispatch_visit(self, node)
1555
+
1556
+ def handle_basic_atts(self, node) -> None:
1557
+ if isinstance(node, nodes.Element) and node['ids']:
1558
+ self.pending_ids += node['ids']
1559
+
1560
+ def default_visit(self, node) -> None:
1561
+ self.document.reporter.warning(f'missing visit_{node.tagname}',
1562
+ base_node=node)
1563
+
1564
+ def default_departure(self, node) -> None:
1565
+ self.document.reporter.warning(f'missing depart_{node.tagname}',
1566
+ base_node=node)
1567
+
1568
+ def visit_Text(self, node) -> None:
1569
+ # Skip nodes whose text has been processed in parent nodes.
1570
+ if isinstance(node.parent, docutils.nodes.literal_block):
1571
+ return
1572
+ text = node.astext()
1573
+ # Are we in mixed content? If so, add the text to the
1574
+ # etree tail of the previous sibling element.
1575
+ if len(self.current_element) > 0:
1576
+ if self.current_element[-1].tail:
1577
+ self.current_element[-1].tail += text
1578
+ else:
1579
+ self.current_element[-1].tail = text
1580
+ else:
1581
+ if self.current_element.text:
1582
+ self.current_element.text += text
1583
+ else:
1584
+ self.current_element.text = text
1585
+
1586
+ def depart_Text(self, node) -> None:
1587
+ pass
1588
+
1589
+ #
1590
+ # Pre-defined fields
1591
+ #
1592
+
1593
+ def visit_address(self, node) -> None:
1594
+ el = self.generate_labeled_block(node, 'address')
1595
+ self.set_current_element(el)
1596
+
1597
+ def depart_address(self, node) -> None:
1598
+ self.set_to_parent()
1599
+
1600
+ def visit_author(self, node) -> None:
1601
+ if isinstance(node.parent, nodes.authors):
1602
+ el = self.append_p('blockindent')
1603
+ else:
1604
+ el = self.generate_labeled_block(node, 'author')
1605
+ self.set_current_element(el)
1606
+
1607
+ def depart_author(self, node) -> None:
1608
+ self.set_to_parent()
1609
+
1610
+ def visit_authors(self, node) -> None:
1611
+ label = '%s:' % (self.language.labels['authors'], )
1612
+ el = self.append_p('textbody')
1613
+ el1 = SubElement(
1614
+ el, 'text:span',
1615
+ attrib={'text:style-name': self.rststyle('strong')})
1616
+ el1.text = label
1617
+
1618
+ def depart_authors(self, node) -> None:
1619
+ pass
1620
+
1621
+ def visit_contact(self, node) -> None:
1622
+ el = self.generate_labeled_block(node, 'contact')
1623
+ self.set_current_element(el)
1624
+
1625
+ def depart_contact(self, node) -> None:
1626
+ self.set_to_parent()
1627
+
1628
+ def visit_copyright(self, node) -> None:
1629
+ el = self.generate_labeled_block(node, 'copyright')
1630
+ self.set_current_element(el)
1631
+
1632
+ def depart_copyright(self, node) -> None:
1633
+ self.set_to_parent()
1634
+
1635
+ def visit_date(self, node) -> None:
1636
+ self.generate_labeled_line(node, 'date')
1637
+
1638
+ def depart_date(self, node) -> None:
1639
+ pass
1640
+
1641
+ def visit_organization(self, node) -> None:
1642
+ el = self.generate_labeled_block(node, 'organization')
1643
+ self.set_current_element(el)
1644
+
1645
+ def depart_organization(self, node) -> None:
1646
+ self.set_to_parent()
1647
+
1648
+ def visit_status(self, node) -> None:
1649
+ el = self.generate_labeled_block(node, 'status')
1650
+ self.set_current_element(el)
1651
+
1652
+ def depart_status(self, node) -> None:
1653
+ self.set_to_parent()
1654
+
1655
+ def visit_revision(self, node) -> None:
1656
+ self.generate_labeled_line(node, 'revision')
1657
+
1658
+ def depart_revision(self, node) -> None:
1659
+ pass
1660
+
1661
+ def visit_version(self, node) -> None:
1662
+ self.generate_labeled_line(node, 'version')
1663
+ # self.set_current_element(el)
1664
+
1665
+ def depart_version(self, node) -> None:
1666
+ # self.set_to_parent()
1667
+ pass
1668
+
1669
+ def visit_attribution(self, node) -> None:
1670
+ self.append_p('attribution', node.astext())
1671
+
1672
+ def depart_attribution(self, node) -> None:
1673
+ pass
1674
+
1675
+ def visit_block_quote(self, node) -> None:
1676
+ if 'epigraph' in node.attributes['classes']:
1677
+ self.paragraph_style_stack.append(self.rststyle('epigraph'))
1678
+ self.blockstyle = self.rststyle('epigraph')
1679
+ elif 'highlights' in node.attributes['classes']:
1680
+ self.paragraph_style_stack.append(self.rststyle('highlights'))
1681
+ self.blockstyle = self.rststyle('highlights')
1682
+ else:
1683
+ self.paragraph_style_stack.append(self.rststyle('blockquote'))
1684
+ self.blockstyle = self.rststyle('blockquote')
1685
+ self.line_indent_level += 1
1686
+
1687
+ def depart_block_quote(self, node) -> None:
1688
+ self.paragraph_style_stack.pop()
1689
+ self.blockstyle = ''
1690
+ self.line_indent_level -= 1
1691
+
1692
+ def visit_bullet_list(self, node) -> None:
1693
+ self.list_level += 1
1694
+ if self.in_table_of_contents:
1695
+ if self.settings.generate_oowriter_toc:
1696
+ pass
1697
+ else:
1698
+ if 'classes' in node and \
1699
+ 'auto-toc' in node.attributes['classes']:
1700
+ el = SubElement(self.current_element, 'text:list', attrib={
1701
+ 'text:style-name': self.rststyle('tocenumlist'),
1702
+ })
1703
+ self.list_style_stack.append(self.rststyle('enumitem'))
1704
+ else:
1705
+ el = SubElement(self.current_element, 'text:list', attrib={
1706
+ 'text:style-name': self.rststyle('tocbulletlist'),
1707
+ })
1708
+ self.list_style_stack.append(self.rststyle('bulletitem'))
1709
+ self.set_current_element(el)
1710
+ else:
1711
+ if self.blockstyle == self.rststyle('blockquote'):
1712
+ el = SubElement(self.current_element, 'text:list', attrib={
1713
+ 'text:style-name': self.rststyle('blockquote-bulletlist'),
1714
+ })
1715
+ self.list_style_stack.append(
1716
+ self.rststyle('blockquote-bulletitem'))
1717
+ elif self.blockstyle == self.rststyle('highlights'):
1718
+ el = SubElement(self.current_element, 'text:list', attrib={
1719
+ 'text:style-name': self.rststyle('highlights-bulletlist'),
1720
+ })
1721
+ self.list_style_stack.append(
1722
+ self.rststyle('highlights-bulletitem'))
1723
+ elif self.blockstyle == self.rststyle('epigraph'):
1724
+ el = SubElement(self.current_element, 'text:list', attrib={
1725
+ 'text:style-name': self.rststyle('epigraph-bulletlist'),
1726
+ })
1727
+ self.list_style_stack.append(
1728
+ self.rststyle('epigraph-bulletitem'))
1729
+ else:
1730
+ el = SubElement(self.current_element, 'text:list', attrib={
1731
+ 'text:style-name': self.rststyle('bulletlist'),
1732
+ })
1733
+ self.list_style_stack.append(self.rststyle('bulletitem'))
1734
+ self.set_current_element(el)
1735
+
1736
+ def depart_bullet_list(self, node) -> None:
1737
+ if self.in_table_of_contents:
1738
+ if self.settings.generate_oowriter_toc:
1739
+ pass
1740
+ else:
1741
+ self.set_to_parent()
1742
+ self.list_style_stack.pop()
1743
+ else:
1744
+ self.set_to_parent()
1745
+ self.list_style_stack.pop()
1746
+ self.list_level -= 1
1747
+
1748
+ def visit_caption(self, node):
1749
+ raise nodes.SkipChildren
1750
+
1751
+ def depart_caption(self, node) -> None:
1752
+ pass
1753
+
1754
+ def visit_comment(self, node) -> None:
1755
+ el = self.append_p('textbody')
1756
+ el1 = SubElement(el, 'office:annotation', attrib={})
1757
+ el2 = SubElement(el1, 'dc:creator', attrib={})
1758
+ s1 = os.environ.get('USER', '')
1759
+ el2.text = s1
1760
+ el2 = SubElement(el1, 'text:p', attrib={})
1761
+ el2.text = node.astext()
1762
+
1763
+ def depart_comment(self, node) -> None:
1764
+ pass
1765
+
1766
+ def visit_compound(self, node) -> None:
1767
+ # The compound directive currently receives no special treatment.
1768
+ pass
1769
+
1770
+ def depart_compound(self, node) -> None:
1771
+ pass
1772
+
1773
+ def visit_container(self, node) -> None:
1774
+ styles = node.attributes.get('classes', ())
1775
+ if len(styles) > 0:
1776
+ self.paragraph_style_stack.append(self.rststyle(styles[0]))
1777
+
1778
+ def depart_container(self, node) -> None:
1779
+ styles = node.attributes.get('classes', ())
1780
+ if len(styles) > 0:
1781
+ self.paragraph_style_stack.pop()
1782
+
1783
+ def visit_decoration(self, node) -> None:
1784
+ pass
1785
+
1786
+ def depart_decoration(self, node) -> None:
1787
+ pass
1788
+
1789
+ def visit_definition_list(self, node):
1790
+ self.def_list_level += 1
1791
+ if self.list_level > 5:
1792
+ raise RuntimeError(
1793
+ 'max definition list nesting level exceeded')
1794
+
1795
+ def depart_definition_list(self, node) -> None:
1796
+ self.def_list_level -= 1
1797
+
1798
+ def visit_definition_list_item(self, node) -> None:
1799
+ pass
1800
+
1801
+ def depart_definition_list_item(self, node) -> None:
1802
+ pass
1803
+
1804
+ def visit_term(self, node):
1805
+ el = self.append_p('deflist-term-%d' % self.def_list_level)
1806
+ el.text = node.astext()
1807
+ self.set_current_element(el)
1808
+ raise nodes.SkipChildren
1809
+
1810
+ def depart_term(self, node) -> None:
1811
+ self.set_to_parent()
1812
+
1813
+ def visit_definition(self, node) -> None:
1814
+ self.paragraph_style_stack.append(
1815
+ self.rststyle('deflist-def-%d' % self.def_list_level))
1816
+ self.bumped_list_level_stack.append(ListLevel(1))
1817
+
1818
+ def depart_definition(self, node) -> None:
1819
+ self.paragraph_style_stack.pop()
1820
+ self.bumped_list_level_stack.pop()
1821
+
1822
+ def visit_classifier(self, node) -> None:
1823
+ if len(self.current_element) > 0:
1824
+ el = self.current_element[-1]
1825
+ el1 = SubElement(
1826
+ el, 'text:span',
1827
+ attrib={'text:style-name': self.rststyle('emphasis')})
1828
+ el1.text = ' (%s)' % (node.astext(), )
1829
+
1830
+ def depart_classifier(self, node) -> None:
1831
+ pass
1832
+
1833
+ def visit_document(self, node) -> None:
1834
+ pass
1835
+
1836
+ def depart_document(self, node) -> None:
1837
+ self.process_footnotes()
1838
+
1839
+ def visit_docinfo(self, node) -> None:
1840
+ self.section_level += 1
1841
+ self.section_count += 1
1842
+ if self.settings.create_sections:
1843
+ el = self.append_child(
1844
+ 'text:section', attrib={
1845
+ 'text:name': 'Section%d' % self.section_count,
1846
+ 'text:style-name': 'Sect%d' % self.section_level,
1847
+ }
1848
+ )
1849
+ self.set_current_element(el)
1850
+
1851
+ def depart_docinfo(self, node) -> None:
1852
+ self.section_level -= 1
1853
+ if self.settings.create_sections:
1854
+ self.set_to_parent()
1855
+
1856
+ def visit_emphasis(self, node) -> None:
1857
+ el = SubElement(
1858
+ self.current_element, 'text:span',
1859
+ attrib={'text:style-name': self.rststyle('emphasis')})
1860
+ self.set_current_element(el)
1861
+
1862
+ def depart_emphasis(self, node) -> None:
1863
+ self.set_to_parent()
1864
+
1865
+ def visit_enumerated_list(self, node) -> None:
1866
+ el1 = self.current_element
1867
+ if self.blockstyle == self.rststyle('blockquote'):
1868
+ el2 = SubElement(el1, 'text:list', attrib={
1869
+ 'text:style-name': self.rststyle('blockquote-enumlist'),
1870
+ })
1871
+ self.list_style_stack.append(self.rststyle('blockquote-enumitem'))
1872
+ elif self.blockstyle == self.rststyle('highlights'):
1873
+ el2 = SubElement(el1, 'text:list', attrib={
1874
+ 'text:style-name': self.rststyle('highlights-enumlist'),
1875
+ })
1876
+ self.list_style_stack.append(self.rststyle('highlights-enumitem'))
1877
+ elif self.blockstyle == self.rststyle('epigraph'):
1878
+ el2 = SubElement(el1, 'text:list', attrib={
1879
+ 'text:style-name': self.rststyle('epigraph-enumlist'),
1880
+ })
1881
+ self.list_style_stack.append(self.rststyle('epigraph-enumitem'))
1882
+ else:
1883
+ liststylename = 'enumlist-%s' % (node.get('enumtype', 'arabic'), )
1884
+ el2 = SubElement(el1, 'text:list', attrib={
1885
+ 'text:style-name': self.rststyle(liststylename),
1886
+ })
1887
+ self.list_style_stack.append(self.rststyle('enumitem'))
1888
+ self.set_current_element(el2)
1889
+
1890
+ def depart_enumerated_list(self, node) -> None:
1891
+ self.set_to_parent()
1892
+ self.list_style_stack.pop()
1893
+
1894
+ def visit_list_item(self, node) -> None:
1895
+ # If we are in a "bumped" list level, then wrap this
1896
+ # list in an outer lists in order to increase the
1897
+ # indentation level.
1898
+ if self.in_table_of_contents:
1899
+ if self.settings.generate_oowriter_toc:
1900
+ self.paragraph_style_stack.append(
1901
+ self.rststyle('contents-%d' % (self.list_level, )))
1902
+ else:
1903
+ el1 = self.append_child('text:list-item')
1904
+ self.set_current_element(el1)
1905
+ else:
1906
+ el1 = self.append_child('text:list-item')
1907
+ el3 = el1
1908
+ if len(self.bumped_list_level_stack) > 0:
1909
+ level_obj = self.bumped_list_level_stack[-1]
1910
+ if level_obj.get_sibling():
1911
+ level_obj.set_nested(False)
1912
+ for level_obj1 in self.bumped_list_level_stack:
1913
+ for idx in range(level_obj1.get_level()):
1914
+ el2 = self.append_child('text:list', parent=el3)
1915
+ el3 = self.append_child(
1916
+ 'text:list-item', parent=el2)
1917
+ self.paragraph_style_stack.append(self.list_style_stack[-1])
1918
+ self.set_current_element(el3)
1919
+
1920
+ def depart_list_item(self, node) -> None:
1921
+ if self.in_table_of_contents:
1922
+ if self.settings.generate_oowriter_toc:
1923
+ self.paragraph_style_stack.pop()
1924
+ else:
1925
+ self.set_to_parent()
1926
+ else:
1927
+ if len(self.bumped_list_level_stack) > 0:
1928
+ level_obj = self.bumped_list_level_stack[-1]
1929
+ if level_obj.get_sibling():
1930
+ level_obj.set_nested(True)
1931
+ for level_obj1 in self.bumped_list_level_stack:
1932
+ for idx in range(level_obj1.get_level()):
1933
+ self.set_to_parent()
1934
+ self.set_to_parent()
1935
+ self.paragraph_style_stack.pop()
1936
+ self.set_to_parent()
1937
+
1938
+ def visit_header(self, node) -> None:
1939
+ self.in_header = True
1940
+
1941
+ def depart_header(self, node) -> None:
1942
+ self.in_header = False
1943
+
1944
+ def visit_footer(self, node) -> None:
1945
+ self.in_footer = True
1946
+
1947
+ def depart_footer(self, node) -> None:
1948
+ self.in_footer = False
1949
+
1950
+ def visit_field(self, node) -> None:
1951
+ pass
1952
+
1953
+ def depart_field(self, node) -> None:
1954
+ pass
1955
+
1956
+ def visit_field_list(self, node) -> None:
1957
+ pass
1958
+
1959
+ def depart_field_list(self, node) -> None:
1960
+ pass
1961
+
1962
+ def visit_field_name(self, node) -> None:
1963
+ el = self.append_p('textbody')
1964
+ el1 = SubElement(
1965
+ el, 'text:span',
1966
+ attrib={'text:style-name': self.rststyle('strong')})
1967
+ el1.text = node.astext()
1968
+
1969
+ def depart_field_name(self, node) -> None:
1970
+ pass
1971
+
1972
+ def visit_field_body(self, node) -> None:
1973
+ self.paragraph_style_stack.append(self.rststyle('blockindent'))
1974
+
1975
+ def depart_field_body(self, node) -> None:
1976
+ self.paragraph_style_stack.pop()
1977
+
1978
+ def visit_figure(self, node) -> None:
1979
+ pass
1980
+
1981
+ def depart_figure(self, node) -> None:
1982
+ pass
1983
+
1984
+ def visit_footnote(self, node) -> None:
1985
+ self.footnote_level += 1
1986
+ self.save_footnote_current = self.current_element
1987
+ el1 = Element('text:note-body')
1988
+ self.current_element = el1
1989
+ self.footnote_list.append((node, el1))
1990
+ if isinstance(node, docutils.nodes.citation):
1991
+ self.paragraph_style_stack.append(self.rststyle('citation'))
1992
+ else:
1993
+ self.paragraph_style_stack.append(self.rststyle('footnote'))
1994
+
1995
+ def depart_footnote(self, node) -> None:
1996
+ self.paragraph_style_stack.pop()
1997
+ self.current_element = self.save_footnote_current
1998
+ self.footnote_level -= 1
1999
+
2000
+ footnote_chars = [
2001
+ '*', '**', '***',
2002
+ '++', '+++',
2003
+ '##', '###',
2004
+ '@@', '@@@',
2005
+ ]
2006
+
2007
+ def visit_footnote_reference(self, node):
2008
+ if self.footnote_level <= 0:
2009
+ id = node.attributes['ids'][0]
2010
+ refid = node.attributes.get('refid')
2011
+ if refid is None:
2012
+ refid = ''
2013
+ if self.settings.endnotes_end_doc:
2014
+ note_class = 'endnote'
2015
+ else:
2016
+ note_class = 'footnote'
2017
+ el1 = self.append_child('text:note', attrib={
2018
+ 'text:id': '%s' % (refid, ),
2019
+ 'text:note-class': note_class,
2020
+ })
2021
+ note_auto = str(node.attributes.get('auto', 1))
2022
+ if isinstance(node, docutils.nodes.citation_reference):
2023
+ citation = '[%s]' % node.astext()
2024
+ el2 = SubElement(el1, 'text:note-citation', attrib={
2025
+ 'text:label': citation,
2026
+ })
2027
+ el2.text = citation
2028
+ elif note_auto == '1':
2029
+ el2 = SubElement(el1, 'text:note-citation', attrib={
2030
+ 'text:label': node.astext(),
2031
+ })
2032
+ el2.text = node.astext()
2033
+ elif note_auto == '*':
2034
+ if self.footnote_chars_idx >= len(
2035
+ ODFTranslator.footnote_chars):
2036
+ self.footnote_chars_idx = 0
2037
+ footnote_char = ODFTranslator.footnote_chars[
2038
+ self.footnote_chars_idx]
2039
+ self.footnote_chars_idx += 1
2040
+ el2 = SubElement(el1, 'text:note-citation', attrib={
2041
+ 'text:label': footnote_char,
2042
+ })
2043
+ el2.text = footnote_char
2044
+ self.footnote_ref_dict[id] = el1
2045
+ raise nodes.SkipChildren
2046
+
2047
+ def depart_footnote_reference(self, node) -> None:
2048
+ pass
2049
+
2050
+ def visit_citation(self, node) -> None:
2051
+ self.in_citation = True
2052
+ for id in node.attributes['ids']:
2053
+ self.citation_id = id
2054
+ break
2055
+ self.paragraph_style_stack.append(self.rststyle('blockindent'))
2056
+ self.bumped_list_level_stack.append(ListLevel(1))
2057
+
2058
+ def depart_citation(self, node) -> None:
2059
+ self.citation_id = None
2060
+ self.paragraph_style_stack.pop()
2061
+ self.bumped_list_level_stack.pop()
2062
+ self.in_citation = False
2063
+
2064
+ def visit_citation_reference(self, node) -> None:
2065
+ if self.settings.create_links:
2066
+ id = node.attributes['refid']
2067
+ el = self.append_child('text:reference-ref', attrib={
2068
+ 'text:ref-name': '%s' % (id, ),
2069
+ 'text:reference-format': 'text',
2070
+ })
2071
+ el.text = '['
2072
+ self.set_current_element(el)
2073
+ elif self.current_element.text is None:
2074
+ self.current_element.text = '['
2075
+ else:
2076
+ self.current_element.text += '['
2077
+
2078
+ def depart_citation_reference(self, node) -> None:
2079
+ self.current_element.text += ']'
2080
+ if self.settings.create_links:
2081
+ self.set_to_parent()
2082
+
2083
+ def visit_label(self, node):
2084
+ if isinstance(node.parent, docutils.nodes.footnote):
2085
+ raise nodes.SkipChildren
2086
+ elif self.citation_id is not None:
2087
+ el = self.append_p('textbody')
2088
+ self.set_current_element(el)
2089
+ if self.settings.create_links:
2090
+ el0 = SubElement(el, 'text:span')
2091
+ el0.text = '['
2092
+ self.append_child('text:reference-mark-start', attrib={
2093
+ 'text:name': '%s' % (self.citation_id, ),
2094
+ })
2095
+ else:
2096
+ el.text = '['
2097
+
2098
+ def depart_label(self, node) -> None:
2099
+ if isinstance(node.parent, docutils.nodes.footnote):
2100
+ pass
2101
+ elif self.citation_id is not None:
2102
+ if self.settings.create_links:
2103
+ self.append_child('text:reference-mark-end', attrib={
2104
+ 'text:name': '%s' % (self.citation_id, ),
2105
+ })
2106
+ el0 = SubElement(self.current_element, 'text:span')
2107
+ el0.text = ']'
2108
+ else:
2109
+ self.current_element.text += ']'
2110
+ self.set_to_parent()
2111
+
2112
+ def visit_generated(self, node) -> None:
2113
+ pass
2114
+
2115
+ def depart_generated(self, node) -> None:
2116
+ pass
2117
+
2118
+ def check_file_exists(self, path) -> int:
2119
+ if os.path.exists(path):
2120
+ return 1
2121
+ else:
2122
+ return 0
2123
+
2124
+ def visit_image(self, node) -> None:
2125
+ # Capture the image file.
2126
+ source = node['uri']
2127
+ uri_parts = urllib.parse.urlparse(source)
2128
+ if uri_parts.scheme in ('', 'file'):
2129
+ source = urllib.parse.unquote(uri_parts.path)
2130
+ if self.settings.root_prefix and source.startswith('/'):
2131
+ root_prefix = Path(self.settings.root_prefix)
2132
+ source = (root_prefix/source[1:]).as_posix()
2133
+ else:
2134
+ # adapt relative paths
2135
+ docsource, line = utils.get_source_line(node)
2136
+ if docsource:
2137
+ dirname = os.path.dirname(docsource)
2138
+ if dirname:
2139
+ source = os.path.join(dirname, source)
2140
+ if not self.check_file_exists(source):
2141
+ self.document.reporter.warning(
2142
+ f'Cannot find image file "{source}".', base_node=node)
2143
+ return
2144
+ if source in self.image_dict:
2145
+ filename, destination = self.image_dict[source]
2146
+ else:
2147
+ self.image_count += 1
2148
+ filename = os.path.split(source)[1]
2149
+ destination = 'Pictures/1%08x%s' % (self.image_count, filename)
2150
+ if uri_parts.scheme in ('', 'file'):
2151
+ spec = (os.path.abspath(source), destination,)
2152
+ else:
2153
+ try:
2154
+ with urllib.request.urlopen(source) as imgfile:
2155
+ content = imgfile.read()
2156
+ except urllib.error.URLError as err:
2157
+ self.document.reporter.warning(
2158
+ f'Cannot open image URL "{source}". {err}',
2159
+ base_node=node)
2160
+ return
2161
+ with tempfile.NamedTemporaryFile('wb',
2162
+ delete=False) as imgfile2:
2163
+ imgfile2.write(content)
2164
+ source = imgfile2.name
2165
+ spec = (source, destination,)
2166
+ self.embedded_file_list.append(spec)
2167
+ self.image_dict[source] = (source, destination,)
2168
+ # Is this a figure (containing an image) or just a plain image?
2169
+ if self.in_paragraph:
2170
+ el1 = self.current_element
2171
+ else:
2172
+ el1 = SubElement(
2173
+ self.current_element, 'text:p',
2174
+ attrib={'text:style-name': self.rststyle('textbody')})
2175
+ el2 = el1
2176
+ if isinstance(node.parent, docutils.nodes.figure):
2177
+ el3, el4, el5, caption = self.generate_figure(
2178
+ node, source,
2179
+ destination, el2)
2180
+ attrib = {}
2181
+ el6, width = self.generate_image(
2182
+ node, source, destination,
2183
+ el5, attrib)
2184
+ if caption is not None:
2185
+ el6.tail = caption
2186
+ else: # if isinstance(node.parent, docutils.nodes.image):
2187
+ self.generate_image(node, source, destination, el2)
2188
+
2189
+ def depart_image(self, node) -> None:
2190
+ pass
2191
+
2192
+ def get_image_width_height(self, node, attr):
2193
+ size = None
2194
+ unit = None
2195
+ if attr in node.attributes:
2196
+ size = node.attributes[attr]
2197
+ size = size.strip()
2198
+ # For conversion factors, see:
2199
+ # http://www.unitconversion.org/unit_converter/typography-ex.html
2200
+ try:
2201
+ if size.endswith('%'):
2202
+ if attr == 'height':
2203
+ # Percentage allowed for width but not height.
2204
+ raise ValueError('percentage not allowed for height')
2205
+ size = size.rstrip(' %')
2206
+ size = float(size) / 100.0
2207
+ unit = '%'
2208
+ else:
2209
+ size, unit = self.convert_to_cm(size)
2210
+ except ValueError as exp:
2211
+ self.document.reporter.warning(
2212
+ f'Invalid {attr} for image: "{node.attributes[attr]}". '
2213
+ f'Error: "{exp}".', base_node=node)
2214
+ size, unit = 0.5, 'cm' # fallback to avoid consequential error
2215
+ return size, unit
2216
+
2217
+ def convert_to_cm(self, size):
2218
+ """Convert various units to centimeters.
2219
+
2220
+ Note that a call to this method should be wrapped in:
2221
+ try: except ValueError:
2222
+ """
2223
+ size = size.strip()
2224
+ if size.endswith('px'):
2225
+ size = float(size[:-2]) * 0.026 # convert px to cm
2226
+ elif size.endswith('in'):
2227
+ size = float(size[:-2]) * 2.54 # convert in to cm
2228
+ elif size.endswith('pt'):
2229
+ size = float(size[:-2]) * 0.035 # convert pt to cm
2230
+ elif size.endswith('pc'):
2231
+ size = float(size[:-2]) * 0.423 # convert pc to cm
2232
+ elif size.endswith('mm'):
2233
+ size = float(size[:-2]) * 0.1 # convert mm to cm
2234
+ elif size.endswith('Q'):
2235
+ size = float(size[:-1]) * 0.25 # convert Q to cm
2236
+ elif size.endswith('cm'):
2237
+ size = float(size[:-2])
2238
+ elif size[-1:] in '0123456789.': # no unit, use px
2239
+ size = float(size) * 0.026 # convert px to cm
2240
+ else:
2241
+ raise ValueError('unit not supported with ODT')
2242
+ unit = 'cm'
2243
+ return size, unit
2244
+
2245
+ def get_image_scale(self, node):
2246
+ if 'scale' in node.attributes:
2247
+ scale = node.attributes['scale']
2248
+ if scale < 1:
2249
+ self.document.reporter.warning(
2250
+ f'scale out of range ({scale}), using 1.', base_node=node)
2251
+ scale = 1
2252
+ scale = scale * 0.01
2253
+ else:
2254
+ scale = 1.0
2255
+ return scale
2256
+
2257
+ def get_image_scaled_width_height(self, node, source):
2258
+ """Return the image size in centimeters adjusted by image attrs."""
2259
+ scale = self.get_image_scale(node)
2260
+ width, width_unit = self.get_image_width_height(node, 'width')
2261
+ height, _ = self.get_image_width_height(node, 'height')
2262
+ dpi = (96, 96) # image resolution in pixel per inch
2263
+ if width is None or height is None:
2264
+ if PIL is None:
2265
+ self.document.reporter.warning(
2266
+ 'image size not fully specified and PIL not installed',
2267
+ base_node=node)
2268
+ return '0.5cm', '0.5cm' # prevent consequential error
2269
+ filename, destination = self.image_dict[source]
2270
+ with PIL.Image.open(filename, 'r') as img:
2271
+ img_size = img.size
2272
+ dpi = img.info.get('dpi', dpi)
2273
+ # dpi information can be (xdpi, ydpi) or xydpi
2274
+ try:
2275
+ iter(dpi)
2276
+ except TypeError:
2277
+ dpi = (dpi, dpi)
2278
+ # TODO: use dpi when converting px to cm
2279
+ if width is None:
2280
+ width = img_size[0] * 0.026 # convert px to cm
2281
+ if height is None and width_unit != '%':
2282
+ height = img_size[1] * 0.026 # convert px to cm
2283
+ if width_unit == '%':
2284
+ factor = width
2285
+ line_width = self.get_page_width()
2286
+ width = factor * line_width
2287
+ if height is None:
2288
+ # scale proportionally
2289
+ image_width = img_size[0] * 0.026 # convert px to cm
2290
+ image_height = img_size[1] * 0.026 # convert px to cm
2291
+ factor = (factor * line_width) / image_width
2292
+ height = factor * image_height
2293
+ width *= scale
2294
+ height *= scale
2295
+ width = '%.2fcm' % width
2296
+ height = '%.2fcm' % height
2297
+ return width, height
2298
+
2299
+ def get_page_width(self):
2300
+ """Return the document's page width in centimeters."""
2301
+ root = self.get_dom_stylesheet()
2302
+ nodes = root.iterfind(
2303
+ './/{urn:oasis:names:tc:opendocument:xmlns:style:1.0}'
2304
+ 'page-layout/'
2305
+ '{urn:oasis:names:tc:opendocument:xmlns:style:1.0}'
2306
+ 'page-layout-properties')
2307
+ width = None
2308
+ for node in nodes:
2309
+ page_width = node.get(
2310
+ '{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}'
2311
+ 'page-width')
2312
+ margin_left = node.get(
2313
+ '{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}'
2314
+ 'margin-left')
2315
+ margin_right = node.get(
2316
+ '{urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0}'
2317
+ 'margin-right')
2318
+ if (page_width is None
2319
+ or margin_left is None
2320
+ or margin_right is None):
2321
+ continue
2322
+ try:
2323
+ page_width, _ = self.convert_to_cm(page_width)
2324
+ margin_left, _ = self.convert_to_cm(margin_left)
2325
+ margin_right, _ = self.convert_to_cm(margin_right)
2326
+ except ValueError:
2327
+ self.document.reporter.warning(
2328
+ 'Stylesheet file contains invalid page width '
2329
+ 'or margin size.')
2330
+ width = page_width - margin_left - margin_right
2331
+ if width is None:
2332
+ # We can't find the width in styles, so we make a guess.
2333
+ # Use a width of 6 in = 15.24 cm.
2334
+ width = 15.24
2335
+ return width
2336
+
2337
+ def generate_figure(self, node, source, destination, current_element):
2338
+ caption = None
2339
+ width, height = self.get_image_scaled_width_height(node, source)
2340
+ for node1 in node.parent.children:
2341
+ if node1.tagname == 'caption':
2342
+ caption = node1.astext()
2343
+ self.image_style_count += 1
2344
+ #
2345
+ # Add the style for the caption.
2346
+ if caption is not None:
2347
+ attrib = {
2348
+ 'style:class': 'extra',
2349
+ 'style:family': 'paragraph',
2350
+ 'style:name': 'Caption',
2351
+ 'style:parent-style-name': 'Standard',
2352
+ }
2353
+ el1 = SubElement(self.automatic_styles, 'style:style',
2354
+ attrib=attrib, nsdict=SNSD)
2355
+ attrib = {
2356
+ 'fo:margin-bottom': '0.0835in',
2357
+ 'fo:margin-top': '0.0835in',
2358
+ 'text:line-number': '0',
2359
+ 'text:number-lines': 'false',
2360
+ }
2361
+ SubElement(el1, 'style:paragraph-properties',
2362
+ attrib=attrib, nsdict=SNSD)
2363
+ attrib = {
2364
+ 'fo:font-size': '12pt',
2365
+ 'fo:font-style': 'italic',
2366
+ 'style:font-name': 'Times',
2367
+ 'style:font-name-complex': 'Lucidasans1',
2368
+ 'style:font-size-asian': '12pt',
2369
+ 'style:font-size-complex': '12pt',
2370
+ 'style:font-style-asian': 'italic',
2371
+ 'style:font-style-complex': 'italic',
2372
+ }
2373
+ SubElement(el1, 'style:text-properties',
2374
+ attrib=attrib, nsdict=SNSD)
2375
+ style_name = 'rstframestyle%d' % self.image_style_count
2376
+ draw_name = 'graphics%d' % next(IMAGE_NAME_COUNTER)
2377
+ # Add the styles
2378
+ attrib = {
2379
+ 'style:name': style_name,
2380
+ 'style:family': 'graphic',
2381
+ 'style:parent-style-name': self.rststyle('figureframe'),
2382
+ }
2383
+ el1 = SubElement(self.automatic_styles,
2384
+ 'style:style', attrib=attrib, nsdict=SNSD)
2385
+ attrib = {}
2386
+ wrap = False
2387
+ classes = node.parent.attributes.get('classes')
2388
+ if classes and 'wrap' in classes:
2389
+ wrap = True
2390
+ if wrap:
2391
+ attrib['style:wrap'] = 'dynamic'
2392
+ else:
2393
+ attrib['style:wrap'] = 'none'
2394
+ SubElement(el1, 'style:graphic-properties',
2395
+ attrib=attrib, nsdict=SNSD)
2396
+ attrib = {
2397
+ 'draw:style-name': style_name,
2398
+ 'draw:name': draw_name,
2399
+ 'text:anchor-type': 'paragraph',
2400
+ 'draw:z-index': '0',
2401
+ }
2402
+ attrib['svg:width'] = width
2403
+ el3 = SubElement(current_element, 'draw:frame', attrib=attrib)
2404
+ attrib = {}
2405
+ el4 = SubElement(el3, 'draw:text-box', attrib=attrib)
2406
+ attrib = {
2407
+ 'text:style-name': self.rststyle('caption'),
2408
+ }
2409
+ el5 = SubElement(el4, 'text:p', attrib=attrib)
2410
+ return el3, el4, el5, caption
2411
+
2412
+ def generate_image(self, node, source, destination, current_element,
2413
+ frame_attrs=None):
2414
+ width, height = self.get_image_scaled_width_height(node, source)
2415
+ self.image_style_count += 1
2416
+ style_name = 'rstframestyle%d' % self.image_style_count
2417
+ # Add the style.
2418
+ attrib = {
2419
+ 'style:name': style_name,
2420
+ 'style:family': 'graphic',
2421
+ 'style:parent-style-name': self.rststyle('image'),
2422
+ }
2423
+ el1 = SubElement(self.automatic_styles,
2424
+ 'style:style', attrib=attrib, nsdict=SNSD)
2425
+ halign = None
2426
+ valign = None
2427
+ if 'align' in node.attributes:
2428
+ align = node.attributes['align'].split()
2429
+ for val in align:
2430
+ if val in ('left', 'center', 'right'):
2431
+ halign = val
2432
+ elif val in ('top', 'middle', 'bottom'):
2433
+ valign = val
2434
+ if frame_attrs is None:
2435
+ attrib = {
2436
+ 'style:vertical-pos': 'top',
2437
+ 'style:vertical-rel': 'paragraph',
2438
+ 'style:horizontal-rel': 'paragraph',
2439
+ 'style:mirror': 'none',
2440
+ 'fo:clip': 'rect(0cm 0cm 0cm 0cm)',
2441
+ 'draw:luminance': '0%',
2442
+ 'draw:contrast': '0%',
2443
+ 'draw:red': '0%',
2444
+ 'draw:green': '0%',
2445
+ 'draw:blue': '0%',
2446
+ 'draw:gamma': '100%',
2447
+ 'draw:color-inversion': 'false',
2448
+ 'draw:image-opacity': '100%',
2449
+ 'draw:color-mode': 'standard',
2450
+ }
2451
+ else:
2452
+ attrib = frame_attrs
2453
+ if halign is not None:
2454
+ attrib['style:horizontal-pos'] = halign
2455
+ if valign is not None:
2456
+ attrib['style:vertical-pos'] = valign
2457
+ # If there is a classes/wrap directive or we are
2458
+ # inside a table, add a no-wrap style.
2459
+ wrap = False
2460
+ classes = node.attributes.get('classes')
2461
+ if classes and 'wrap' in classes:
2462
+ wrap = True
2463
+ if wrap:
2464
+ attrib['style:wrap'] = 'dynamic'
2465
+ else:
2466
+ attrib['style:wrap'] = 'none'
2467
+ # If we are inside a table, add a no-wrap style.
2468
+ if self.is_in_table(node):
2469
+ attrib['style:wrap'] = 'none'
2470
+ SubElement(el1, 'style:graphic-properties',
2471
+ attrib=attrib, nsdict=SNSD)
2472
+ draw_name = 'graphics%d' % next(IMAGE_NAME_COUNTER)
2473
+ # Add the content.
2474
+ # el = SubElement(current_element, 'text:p',
2475
+ # attrib={'text:style-name': self.rststyle('textbody')})
2476
+ attrib = {
2477
+ 'draw:style-name': style_name,
2478
+ 'draw:name': draw_name,
2479
+ 'draw:z-index': '1',
2480
+ }
2481
+ if isinstance(node.parent, nodes.TextElement):
2482
+ attrib['text:anchor-type'] = 'as-char' # vds
2483
+ else:
2484
+ attrib['text:anchor-type'] = 'paragraph'
2485
+ attrib['svg:width'] = width
2486
+ attrib['svg:height'] = height
2487
+ el1 = SubElement(current_element, 'draw:frame', attrib=attrib)
2488
+ SubElement(el1, 'draw:image', attrib={
2489
+ 'xlink:href': '%s' % (destination, ),
2490
+ 'xlink:type': 'simple',
2491
+ 'xlink:show': 'embed',
2492
+ 'xlink:actuate': 'onLoad',
2493
+ })
2494
+ return el1, width
2495
+
2496
+ def is_in_table(self, node) -> bool:
2497
+ node1 = node.parent
2498
+ while node1:
2499
+ if isinstance(node1, docutils.nodes.entry):
2500
+ return True
2501
+ node1 = node1.parent
2502
+ return False
2503
+
2504
+ def visit_legend(self, node) -> None:
2505
+ if isinstance(node.parent, docutils.nodes.figure):
2506
+ el1 = self.current_element[-1]
2507
+ el1 = el1[0][0]
2508
+ self.current_element = el1
2509
+ self.paragraph_style_stack.append(self.rststyle('legend'))
2510
+
2511
+ def depart_legend(self, node) -> None:
2512
+ if isinstance(node.parent, docutils.nodes.figure):
2513
+ self.paragraph_style_stack.pop()
2514
+ self.set_to_parent()
2515
+ self.set_to_parent()
2516
+ self.set_to_parent()
2517
+
2518
+ def visit_line_block(self, node) -> None:
2519
+ self.line_indent_level += 1
2520
+ self.line_block_level += 1
2521
+
2522
+ def depart_line_block(self, node) -> None:
2523
+ self.line_indent_level -= 1
2524
+ self.line_block_level -= 1
2525
+
2526
+ def visit_line(self, node) -> None:
2527
+ style = 'lineblock%d' % self.line_indent_level
2528
+ el1 = SubElement(self.current_element, 'text:p',
2529
+ attrib={'text:style-name': self.rststyle(style), })
2530
+ self.current_element = el1
2531
+
2532
+ def depart_line(self, node) -> None:
2533
+ self.set_to_parent()
2534
+
2535
+ def visit_literal(self, node) -> None:
2536
+ el = SubElement(
2537
+ self.current_element, 'text:span',
2538
+ attrib={'text:style-name': self.rststyle('inlineliteral')})
2539
+ self.set_current_element(el)
2540
+
2541
+ def depart_literal(self, node) -> None:
2542
+ self.set_to_parent()
2543
+
2544
+ def visit_inline(self, node) -> None:
2545
+ styles = node.attributes.get('classes', ())
2546
+ if styles:
2547
+ el = self.current_element
2548
+ for inline_style in styles:
2549
+ el = SubElement(el, 'text:span',
2550
+ attrib={'text:style-name':
2551
+ self.rststyle(inline_style)})
2552
+ count = len(styles)
2553
+ else:
2554
+ # No style was specified so use a default style (old code
2555
+ # crashed if no style was given)
2556
+ el = SubElement(self.current_element, 'text:span')
2557
+ count = 1
2558
+
2559
+ self.set_current_element(el)
2560
+ self.inline_style_count_stack.append(count)
2561
+
2562
+ def depart_inline(self, node) -> None:
2563
+ count = self.inline_style_count_stack.pop()
2564
+ for x in range(count):
2565
+ self.set_to_parent()
2566
+
2567
+ def _calculate_code_block_padding(self, line):
2568
+ count = 0
2569
+ matchobj = SPACES_PATTERN.match(line)
2570
+ if matchobj:
2571
+ pad = matchobj.group()
2572
+ count = len(pad)
2573
+ else:
2574
+ matchobj = TABS_PATTERN.match(line)
2575
+ if matchobj:
2576
+ pad = matchobj.group()
2577
+ count = len(pad) * 8
2578
+ return count
2579
+
2580
+ def _add_syntax_highlighting(self, insource, language):
2581
+ lexer = pygments.lexers.get_lexer_by_name(language, stripall=True)
2582
+ if language in ('latex', 'tex'):
2583
+ fmtr = OdtPygmentsLaTeXFormatter(
2584
+ self.rststyle, escape_function=escape_cdata
2585
+ )
2586
+ else:
2587
+ fmtr = OdtPygmentsProgFormatter(
2588
+ self.rststyle, escape_function=escape_cdata
2589
+ )
2590
+ return pygments.highlight(insource, lexer, fmtr)
2591
+
2592
+ def fill_line(self, line):
2593
+ line = FILL_PAT1.sub(self.fill_func1, line)
2594
+ return FILL_PAT2.sub(self.fill_func2, line)
2595
+
2596
+ def fill_func1(self, matchobj) -> str:
2597
+ spaces = matchobj.group(0)
2598
+ return '<text:s text:c="%d"/>' % (len(spaces), )
2599
+
2600
+ def fill_func2(self, matchobj) -> str:
2601
+ spaces = matchobj.group(0)
2602
+ return ' <text:s text:c="%d"/>' % (len(spaces) - 1, )
2603
+
2604
+ def visit_literal_block(self, node) -> None:
2605
+ if len(self.paragraph_style_stack) > 1:
2606
+ wrapper1 = '<text:p text:style-name="%s">%%s</text:p>' % (
2607
+ self.rststyle('codeblock-indented'), )
2608
+ else:
2609
+ wrapper1 = '<text:p text:style-name="%s">%%s</text:p>' % (
2610
+ self.rststyle('codeblock'), )
2611
+ source = node.astext()
2612
+ if (pygments and self.settings.add_syntax_highlighting):
2613
+ language = node.get('language', 'python')
2614
+ source = self._add_syntax_highlighting(source, language)
2615
+ else:
2616
+ source = escape_cdata(source)
2617
+ lines = source.split('\n')
2618
+ # If there is an empty last line, remove it.
2619
+ if lines[-1] == '':
2620
+ del lines[-1]
2621
+ lines1 = ['<wrappertag1 xmlns:text="urn:oasis:names:tc:'
2622
+ 'opendocument:xmlns:text:1.0">']
2623
+ my_lines = []
2624
+ for my_line in lines:
2625
+ my_line = self.fill_line(my_line)
2626
+ my_line = my_line.replace("&#10;", "\n")
2627
+ my_lines.append(my_line)
2628
+ my_lines_str = '<text:line-break/>'.join(my_lines)
2629
+ my_lines_str2 = wrapper1 % (my_lines_str, )
2630
+ lines1.extend((my_lines_str2, '</wrappertag1>'))
2631
+ s1 = ''.join(lines1)
2632
+ s1 = s1.encode("utf-8")
2633
+ el1 = ET.fromstring(s1)
2634
+ for child in el1:
2635
+ self.current_element.append(child)
2636
+
2637
+ def depart_literal_block(self, node) -> None:
2638
+ pass
2639
+
2640
+ visit_doctest_block = visit_literal_block
2641
+ depart_doctest_block = depart_literal_block
2642
+
2643
+ # placeholder for math (see docs/dev/todo.rst)
2644
+ def visit_math(self, node) -> None:
2645
+ self.document.reporter.warning('"math" role not supported',
2646
+ base_node=node)
2647
+ self.visit_literal(node)
2648
+
2649
+ def depart_math(self, node) -> None:
2650
+ self.depart_literal(node)
2651
+
2652
+ def visit_math_block(self, node) -> None:
2653
+ self.document.reporter.warning('"math" directive not supported',
2654
+ base_node=node)
2655
+ self.visit_literal_block(node)
2656
+
2657
+ def depart_math_block(self, node) -> None:
2658
+ self.depart_literal_block(node)
2659
+
2660
+ def visit_meta(self, node) -> None:
2661
+ name = node.attributes.get('name')
2662
+ content = node.attributes.get('content')
2663
+ if name is not None and content is not None:
2664
+ self.meta_dict[name] = content
2665
+
2666
+ def depart_meta(self, node) -> None:
2667
+ pass
2668
+
2669
+ def visit_option_list(self, node) -> None:
2670
+ table_name = 'tableoption'
2671
+ #
2672
+ # Generate automatic styles
2673
+ if not self.optiontablestyles_generated:
2674
+ self.optiontablestyles_generated = True
2675
+ el = SubElement(self.automatic_styles, 'style:style', attrib={
2676
+ 'style:name': self.rststyle(table_name),
2677
+ 'style:family': 'table'}, nsdict=SNSD)
2678
+ el1 = SubElement(el, 'style:table-properties', attrib={
2679
+ 'style:width': '17.59cm',
2680
+ 'table:align': 'left',
2681
+ 'style:shadow': 'none'}, nsdict=SNSD)
2682
+ el = SubElement(self.automatic_styles, 'style:style', attrib={
2683
+ 'style:name': self.rststyle('%s.%%c' % table_name, ('A', )),
2684
+ 'style:family': 'table-column'}, nsdict=SNSD)
2685
+ el1 = SubElement(el, 'style:table-column-properties', attrib={
2686
+ 'style:column-width': '4.999cm'}, nsdict=SNSD)
2687
+ el = SubElement(self.automatic_styles, 'style:style', attrib={
2688
+ 'style:name': self.rststyle('%s.%%c' % table_name, ('B', )),
2689
+ 'style:family': 'table-column'}, nsdict=SNSD)
2690
+ el1 = SubElement(el, 'style:table-column-properties', attrib={
2691
+ 'style:column-width': '12.587cm'}, nsdict=SNSD)
2692
+ el = SubElement(self.automatic_styles, 'style:style', attrib={
2693
+ 'style:name': self.rststyle(
2694
+ '%s.%%c%%d' % table_name, ('A', 1, )),
2695
+ 'style:family': 'table-cell'}, nsdict=SNSD)
2696
+ el1 = SubElement(el, 'style:table-cell-properties', attrib={
2697
+ 'fo:background-color': 'transparent',
2698
+ 'fo:padding': '0.097cm',
2699
+ 'fo:border-left': '0.035cm solid #000000',
2700
+ 'fo:border-right': 'none',
2701
+ 'fo:border-top': '0.035cm solid #000000',
2702
+ 'fo:border-bottom': '0.035cm solid #000000'}, nsdict=SNSD)
2703
+ el2 = SubElement(el1, 'style:background-image', nsdict=SNSD)
2704
+ el = SubElement(self.automatic_styles, 'style:style', attrib={
2705
+ 'style:name': self.rststyle(
2706
+ '%s.%%c%%d' % table_name, ('B', 1, )),
2707
+ 'style:family': 'table-cell'}, nsdict=SNSD)
2708
+ el1 = SubElement(el, 'style:table-cell-properties', attrib={
2709
+ 'fo:padding': '0.097cm',
2710
+ 'fo:border': '0.035cm solid #000000'}, nsdict=SNSD)
2711
+ el = SubElement(self.automatic_styles, 'style:style', attrib={
2712
+ 'style:name': self.rststyle(
2713
+ '%s.%%c%%d' % table_name, ('A', 2, )),
2714
+ 'style:family': 'table-cell'}, nsdict=SNSD)
2715
+ el1 = SubElement(el, 'style:table-cell-properties', attrib={
2716
+ 'fo:padding': '0.097cm',
2717
+ 'fo:border-left': '0.035cm solid #000000',
2718
+ 'fo:border-right': 'none',
2719
+ 'fo:border-top': 'none',
2720
+ 'fo:border-bottom': '0.035cm solid #000000'}, nsdict=SNSD)
2721
+ el = SubElement(self.automatic_styles, 'style:style', attrib={
2722
+ 'style:name': self.rststyle(
2723
+ '%s.%%c%%d' % table_name, ('B', 2, )),
2724
+ 'style:family': 'table-cell'}, nsdict=SNSD)
2725
+ el1 = SubElement(el, 'style:table-cell-properties', attrib={
2726
+ 'fo:padding': '0.097cm',
2727
+ 'fo:border-left': '0.035cm solid #000000',
2728
+ 'fo:border-right': '0.035cm solid #000000',
2729
+ 'fo:border-top': 'none',
2730
+ 'fo:border-bottom': '0.035cm solid #000000'}, nsdict=SNSD)
2731
+ #
2732
+ # Generate table data
2733
+ el = self.append_child('table:table', attrib={
2734
+ 'table:name': self.rststyle(table_name),
2735
+ 'table:style-name': self.rststyle(table_name),
2736
+ })
2737
+ el1 = SubElement(el, 'table:table-column', attrib={
2738
+ 'table:style-name': self.rststyle(
2739
+ '%s.%%c' % table_name, ('A', ))})
2740
+ el1 = SubElement(el, 'table:table-column', attrib={
2741
+ 'table:style-name': self.rststyle(
2742
+ '%s.%%c' % table_name, ('B', ))})
2743
+ el1 = SubElement(el, 'table:table-header-rows')
2744
+ el2 = SubElement(el1, 'table:table-row')
2745
+ el3 = SubElement(el2, 'table:table-cell', attrib={
2746
+ 'table:style-name': self.rststyle(
2747
+ '%s.%%c%%d' % table_name, ('A', 1, )),
2748
+ 'office:value-type': 'string'})
2749
+ el4 = SubElement(el3, 'text:p', attrib={
2750
+ 'text:style-name': 'Table_20_Heading'})
2751
+ el4.text = 'Option'
2752
+ el3 = SubElement(el2, 'table:table-cell', attrib={
2753
+ 'table:style-name': self.rststyle(
2754
+ '%s.%%c%%d' % table_name, ('B', 1, )),
2755
+ 'office:value-type': 'string'})
2756
+ el4 = SubElement(el3, 'text:p', attrib={
2757
+ 'text:style-name': 'Table_20_Heading'})
2758
+ el4.text = 'Description'
2759
+ self.set_current_element(el)
2760
+
2761
+ def depart_option_list(self, node) -> None:
2762
+ self.set_to_parent()
2763
+
2764
+ def visit_option_list_item(self, node) -> None:
2765
+ el = self.append_child('table:table-row')
2766
+ self.set_current_element(el)
2767
+
2768
+ def depart_option_list_item(self, node) -> None:
2769
+ self.set_to_parent()
2770
+
2771
+ def visit_option_group(self, node) -> None:
2772
+ el = self.append_child('table:table-cell', attrib={
2773
+ 'table:style-name': 'Table%d.A2' % self.table_count,
2774
+ 'office:value-type': 'string',
2775
+ })
2776
+ self.set_current_element(el)
2777
+
2778
+ def depart_option_group(self, node) -> None:
2779
+ self.set_to_parent()
2780
+
2781
+ def visit_option(self, node) -> None:
2782
+ el = self.append_child('text:p', attrib={
2783
+ 'text:style-name': 'Table_20_Contents'})
2784
+ el.text = node.astext()
2785
+
2786
+ def depart_option(self, node) -> None:
2787
+ pass
2788
+
2789
+ def visit_option_string(self, node) -> None:
2790
+ pass
2791
+
2792
+ def depart_option_string(self, node) -> None:
2793
+ pass
2794
+
2795
+ def visit_option_argument(self, node) -> None:
2796
+ pass
2797
+
2798
+ def depart_option_argument(self, node) -> None:
2799
+ pass
2800
+
2801
+ def visit_description(self, node):
2802
+ el = self.append_child('table:table-cell', attrib={
2803
+ 'table:style-name': 'Table%d.B2' % self.table_count,
2804
+ 'office:value-type': 'string',
2805
+ })
2806
+ el1 = SubElement(el, 'text:p', attrib={
2807
+ 'text:style-name': 'Table_20_Contents'})
2808
+ el1.text = node.astext()
2809
+ raise nodes.SkipChildren
2810
+
2811
+ def depart_description(self, node) -> None:
2812
+ pass
2813
+
2814
+ def visit_paragraph(self, node) -> None:
2815
+ self.in_paragraph = True
2816
+ if self.in_header:
2817
+ el = self.append_p('header')
2818
+ elif self.in_footer:
2819
+ el = self.append_p('footer')
2820
+ else:
2821
+ style_name = self.paragraph_style_stack[-1]
2822
+ el = self.append_child(
2823
+ 'text:p',
2824
+ attrib={'text:style-name': style_name})
2825
+ self.append_pending_ids(el)
2826
+ self.set_current_element(el)
2827
+
2828
+ def depart_paragraph(self, node) -> None:
2829
+ self.in_paragraph = False
2830
+ self.set_to_parent()
2831
+ if self.in_header:
2832
+ self.header_content.append(self.current_element[-1])
2833
+ self.current_element.remove(self.current_element[-1])
2834
+ elif self.in_footer:
2835
+ self.footer_content.append(self.current_element[-1])
2836
+ self.current_element.remove(self.current_element[-1])
2837
+
2838
+ def visit_problematic(self, node) -> None:
2839
+ pass
2840
+
2841
+ def depart_problematic(self, node) -> None:
2842
+ pass
2843
+
2844
+ def visit_raw(self, node):
2845
+ if 'format' in node.attributes:
2846
+ formats = node.attributes['format']
2847
+ formatlist = formats.split()
2848
+ if 'odt' in formatlist:
2849
+ rawstr = node.astext()
2850
+ attrstr = ' '.join(
2851
+ '%s="%s"' % (k, v, )
2852
+ for k, v in list(CONTENT_NAMESPACE_ATTRIB.items()))
2853
+ contentstr = '<stuff %s>%s</stuff>' % (attrstr, rawstr, )
2854
+ contentstr = contentstr.encode("utf-8")
2855
+ content = ET.fromstring(contentstr)
2856
+ if len(content) > 0:
2857
+ el1 = content[0]
2858
+ if self.in_header:
2859
+ pass
2860
+ elif self.in_footer:
2861
+ pass
2862
+ else:
2863
+ self.current_element.append(el1)
2864
+ raise nodes.SkipChildren
2865
+
2866
+ def depart_raw(self, node) -> None:
2867
+ if self.in_header:
2868
+ pass
2869
+ elif self.in_footer:
2870
+ pass
2871
+ else:
2872
+ pass
2873
+
2874
+ def visit_reference(self, node) -> None:
2875
+ # text = node.astext()
2876
+ if self.settings.create_links:
2877
+ if 'refuri' in node:
2878
+ href = node['refuri']
2879
+ if (self.settings.cloak_email_addresses
2880
+ and href.startswith('mailto:')):
2881
+ href = self.cloak_mailto(href)
2882
+ el = self.append_child('text:a', attrib={
2883
+ 'xlink:href': '%s' % href,
2884
+ 'xlink:type': 'simple',
2885
+ })
2886
+ self.set_current_element(el)
2887
+ elif 'refid' in node:
2888
+ if self.settings.create_links:
2889
+ href = node['refid']
2890
+ el = self.append_child('text:reference-ref', attrib={
2891
+ 'text:ref-name': '%s' % href,
2892
+ 'text:reference-format': 'text',
2893
+ })
2894
+ else:
2895
+ self.document.reporter.warning(
2896
+ 'References must have "refuri" or "refid" attribute.',
2897
+ base_node=node)
2898
+ if (self.in_table_of_contents
2899
+ and len(node.children) >= 1
2900
+ and isinstance(node.children[0], docutils.nodes.generated)):
2901
+ node.remove(node.children[0])
2902
+
2903
+ def depart_reference(self, node) -> None:
2904
+ if self.settings.create_links:
2905
+ if 'refuri' in node:
2906
+ self.set_to_parent()
2907
+
2908
+ def visit_rubric(self, node) -> None:
2909
+ style_name = self.rststyle('rubric')
2910
+ classes = node.get('classes')
2911
+ if classes:
2912
+ class1 = classes[0]
2913
+ if class1:
2914
+ style_name = class1
2915
+ el = SubElement(self.current_element, 'text:h', attrib={
2916
+ # 'text:outline-level': '%d' % section_level,
2917
+ # 'text:style-name': 'Heading_20_%d' % section_level,
2918
+ 'text:style-name': style_name,
2919
+ })
2920
+ text = node.astext()
2921
+ el.text = self.encode(text)
2922
+
2923
+ def depart_rubric(self, node) -> None:
2924
+ pass
2925
+
2926
+ def visit_section(self, node, move_ids=1) -> None:
2927
+ self.section_level += 1
2928
+ self.section_count += 1
2929
+ if self.settings.create_sections:
2930
+ el = self.append_child('text:section', attrib={
2931
+ 'text:name': 'Section%d' % self.section_count,
2932
+ 'text:style-name': 'Sect%d' % self.section_level,
2933
+ })
2934
+ self.set_current_element(el)
2935
+
2936
+ def depart_section(self, node) -> None:
2937
+ self.section_level -= 1
2938
+ if self.settings.create_sections:
2939
+ self.set_to_parent()
2940
+
2941
+ def visit_strong(self, node) -> None:
2942
+ el = SubElement(self.current_element, 'text:span',
2943
+ attrib={'text:style-name': self.rststyle('strong')})
2944
+ self.set_current_element(el)
2945
+
2946
+ def depart_strong(self, node) -> None:
2947
+ self.set_to_parent()
2948
+
2949
+ def visit_substitution_definition(self, node):
2950
+ raise nodes.SkipChildren
2951
+
2952
+ def depart_substitution_definition(self, node) -> None:
2953
+ pass
2954
+
2955
+ def visit_system_message(self, node) -> None:
2956
+ pass
2957
+
2958
+ def depart_system_message(self, node) -> None:
2959
+ pass
2960
+
2961
+ def get_table_style(self, node):
2962
+ table_style = None
2963
+ table_name = None
2964
+ str_classes = node.get('classes')
2965
+ if str_classes is not None:
2966
+ for str_class in str_classes:
2967
+ if str_class.startswith(TABLESTYLEPREFIX):
2968
+ table_name = str_class
2969
+ break
2970
+ if table_name is not None:
2971
+ table_style = self.table_styles.get(table_name)
2972
+ if table_style is None:
2973
+ # If we can't find the table style, issue warning
2974
+ # and use the default table style.
2975
+ self.document.reporter.warning(
2976
+ f'Can\'t find table style "{table_name}". Using default.',
2977
+ base_node=node)
2978
+ table_name = TABLENAMEDEFAULT
2979
+ table_style = self.table_styles.get(table_name)
2980
+ if table_style is None:
2981
+ # If we can't find the default table style, issue a warning
2982
+ # and use a built-in default style.
2983
+ self.document.reporter.warning(
2984
+ f'Can\'t find default table style "{table_name}". '
2985
+ 'Using built-in default.', base_node=node)
2986
+ table_style = BUILTIN_DEFAULT_TABLE_STYLE
2987
+ else:
2988
+ table_name = TABLENAMEDEFAULT
2989
+ table_style = self.table_styles.get(table_name)
2990
+ if table_style is None:
2991
+ # If we can't find the default table style, issue a warning
2992
+ # and use a built-in default style.
2993
+ self.document.reporter.warning(
2994
+ 'Can\'t find default table style "{table_name}". '
2995
+ 'Using built-in default.', base_node=node)
2996
+ table_style = BUILTIN_DEFAULT_TABLE_STYLE
2997
+ return table_style
2998
+
2999
+ def visit_table(self, node) -> None:
3000
+ self.table_count += 1
3001
+ table_style = self.get_table_style(node)
3002
+ table_name = '%s%%d' % TABLESTYLEPREFIX
3003
+ el1 = SubElement(self.automatic_styles, 'style:style', attrib={
3004
+ 'style:name': self.rststyle(
3005
+ '%s' % table_name, (self.table_count, )),
3006
+ 'style:family': 'table',
3007
+ }, nsdict=SNSD)
3008
+ if table_style.backgroundcolor is None:
3009
+ SubElement(el1, 'style:table-properties', attrib={
3010
+ # 'style:width': '17.59cm',
3011
+ # 'table:align': 'margins',
3012
+ 'table:align': 'left',
3013
+ 'fo:margin-top': '0in',
3014
+ 'fo:margin-bottom': '0.10in',
3015
+ }, nsdict=SNSD)
3016
+ else:
3017
+ SubElement(el1, 'style:table-properties', attrib={
3018
+ # 'style:width': '17.59cm',
3019
+ 'table:align': 'margins',
3020
+ 'fo:margin-top': '0in',
3021
+ 'fo:margin-bottom': '0.10in',
3022
+ 'fo:background-color': table_style.backgroundcolor,
3023
+ }, nsdict=SNSD)
3024
+ # We use a single cell style for all cells in this table.
3025
+ # That's probably not correct, but seems to work.
3026
+ el2 = SubElement(self.automatic_styles, 'style:style', attrib={
3027
+ 'style:name': self.rststyle(
3028
+ '%s.%%c%%d' % table_name, (self.table_count, 'A', 1, )),
3029
+ 'style:family': 'table-cell',
3030
+ }, nsdict=SNSD)
3031
+ thickness = self.settings.table_border_thickness
3032
+ if thickness is None:
3033
+ line_style1 = table_style.border
3034
+ else:
3035
+ line_style1 = '0.%03dcm solid #000000' % (thickness, )
3036
+ SubElement(el2, 'style:table-cell-properties', attrib={
3037
+ 'fo:padding': '0.049cm',
3038
+ 'fo:border-left': line_style1,
3039
+ 'fo:border-right': line_style1,
3040
+ 'fo:border-top': line_style1,
3041
+ 'fo:border-bottom': line_style1,
3042
+ }, nsdict=SNSD)
3043
+ title = None
3044
+ for child in node.children:
3045
+ if child.tagname == 'title':
3046
+ title = child.astext()
3047
+ break
3048
+ if title is not None:
3049
+ self.append_p('table-title', title)
3050
+ else:
3051
+ pass
3052
+ el4 = SubElement(self.current_element, 'table:table', attrib={
3053
+ 'table:name': self.rststyle(
3054
+ '%s' % table_name, (self.table_count, )),
3055
+ 'table:style-name': self.rststyle(
3056
+ '%s' % table_name, (self.table_count, )),
3057
+ })
3058
+ self.set_current_element(el4)
3059
+ self.current_table_style = el1
3060
+ self.table_width = 0.0
3061
+
3062
+ def depart_table(self, node) -> None:
3063
+ attribkey = add_ns('style:width', nsdict=SNSD)
3064
+ attribval = '%.4fin' % (self.table_width, )
3065
+ el1 = self.current_table_style
3066
+ el2 = el1[0]
3067
+ el2.attrib[attribkey] = attribval
3068
+ self.set_to_parent()
3069
+
3070
+ def visit_tgroup(self, node) -> None:
3071
+ self.column_count = ord('A') - 1
3072
+
3073
+ def depart_tgroup(self, node) -> None:
3074
+ pass
3075
+
3076
+ def visit_colspec(self, node) -> None:
3077
+ self.column_count += 1
3078
+ colspec_name = self.rststyle(
3079
+ '%s%%d.%%s' % TABLESTYLEPREFIX,
3080
+ (self.table_count, chr(self.column_count), )
3081
+ )
3082
+ colwidth = node.propwidth() / 12.0
3083
+ el1 = SubElement(self.automatic_styles, 'style:style', attrib={
3084
+ 'style:name': colspec_name,
3085
+ 'style:family': 'table-column',
3086
+ }, nsdict=SNSD)
3087
+ SubElement(el1, 'style:table-column-properties',
3088
+ attrib={'style:column-width': '%.4fin' % colwidth},
3089
+ nsdict=SNSD)
3090
+ self.append_child('table:table-column',
3091
+ attrib={'table:style-name': colspec_name, })
3092
+ self.table_width += colwidth
3093
+
3094
+ def depart_colspec(self, node) -> None:
3095
+ pass
3096
+
3097
+ def visit_thead(self, node) -> None:
3098
+ el = self.append_child('table:table-header-rows')
3099
+ self.set_current_element(el)
3100
+ self.in_thead = True
3101
+ self.paragraph_style_stack.append('Table_20_Heading')
3102
+
3103
+ def depart_thead(self, node) -> None:
3104
+ self.set_to_parent()
3105
+ self.in_thead = False
3106
+ self.paragraph_style_stack.pop()
3107
+
3108
+ def visit_row(self, node) -> None:
3109
+ self.column_count = ord('A') - 1
3110
+ el = self.append_child('table:table-row')
3111
+ self.set_current_element(el)
3112
+
3113
+ def depart_row(self, node) -> None:
3114
+ self.set_to_parent()
3115
+
3116
+ def visit_entry(self, node) -> None:
3117
+ self.column_count += 1
3118
+ cellspec_name = self.rststyle(
3119
+ '%s%%d.%%c%%d' % TABLESTYLEPREFIX,
3120
+ (self.table_count, 'A', 1, )
3121
+ )
3122
+ attrib = {
3123
+ 'table:style-name': cellspec_name,
3124
+ 'office:value-type': 'string',
3125
+ }
3126
+ morecols = node.get('morecols', 0)
3127
+ if morecols > 0:
3128
+ attrib['table:number-columns-spanned'] = '%d' % (morecols + 1,)
3129
+ self.column_count += morecols
3130
+ morerows = node.get('morerows', 0)
3131
+ if morerows > 0:
3132
+ attrib['table:number-rows-spanned'] = '%d' % (morerows + 1,)
3133
+ el1 = self.append_child('table:table-cell', attrib=attrib)
3134
+ self.set_current_element(el1)
3135
+
3136
+ def depart_entry(self, node) -> None:
3137
+ self.set_to_parent()
3138
+
3139
+ def visit_tbody(self, node) -> None:
3140
+ pass
3141
+
3142
+ def depart_tbody(self, node) -> None:
3143
+ pass
3144
+
3145
+ def visit_target(self, node) -> None:
3146
+ #
3147
+ # I don't know how to implement targets in ODF.
3148
+ # How do we create a target in oowriter? A cross-reference?
3149
+ if ('refuri' not in node
3150
+ and 'refid' not in node
3151
+ and 'refname' not in node):
3152
+ pass
3153
+ else:
3154
+ pass
3155
+
3156
+ def depart_target(self, node) -> None:
3157
+ pass
3158
+
3159
+ def visit_title(self, node, move_ids=1, title_type='title') -> None:
3160
+ if isinstance(node.parent, docutils.nodes.section):
3161
+ section_level = self.section_level
3162
+ if section_level > 7:
3163
+ self.document.reporter.warning(
3164
+ 'Heading/section levels greater than 7 not supported.'
3165
+ ' Reducing to heading level 7 for heading: "%s"' % (
3166
+ node.astext(), ), base_node=node)
3167
+ section_level = 7
3168
+ el1 = self.append_child(
3169
+ 'text:h', attrib={
3170
+ 'text:outline-level': '%d' % section_level,
3171
+ # 'text:style-name': 'Heading_20_%d' % section_level,
3172
+ 'text:style-name': self.rststyle(
3173
+ 'heading%d', (section_level, )),
3174
+ })
3175
+ self.append_pending_ids(el1)
3176
+ self.set_current_element(el1)
3177
+ elif isinstance(node.parent, docutils.nodes.document):
3178
+ # text = self.settings.title
3179
+ # else:
3180
+ # text = node.astext()
3181
+ el1 = SubElement(self.current_element, 'text:p', attrib={
3182
+ 'text:style-name': self.rststyle(title_type),
3183
+ })
3184
+ self.append_pending_ids(el1)
3185
+ text = node.astext()
3186
+ self.title = text
3187
+ self.found_doc_title = True
3188
+ self.set_current_element(el1)
3189
+
3190
+ def depart_title(self, node) -> None:
3191
+ if (isinstance(node.parent, docutils.nodes.section)
3192
+ or isinstance(node.parent, docutils.nodes.document)):
3193
+ self.set_to_parent()
3194
+
3195
+ def visit_subtitle(self, node, move_ids=1) -> None:
3196
+ self.visit_title(node, move_ids, title_type='subtitle')
3197
+
3198
+ def depart_subtitle(self, node) -> None:
3199
+ self.depart_title(node)
3200
+
3201
+ def visit_title_reference(self, node):
3202
+ el = self.append_child('text:span', attrib={
3203
+ 'text:style-name': self.rststyle('quotation')})
3204
+ el.text = self.encode(node.astext())
3205
+ raise nodes.SkipChildren
3206
+
3207
+ def depart_title_reference(self, node) -> None:
3208
+ pass
3209
+
3210
+ def generate_table_of_content_entry_template(self, el1) -> None:
3211
+ for idx in range(1, 11):
3212
+ el2 = SubElement(
3213
+ el1,
3214
+ 'text:table-of-content-entry-template',
3215
+ attrib={
3216
+ 'text:outline-level': "%d" % (idx, ),
3217
+ 'text:style-name': self.rststyle('contents-%d' % (idx, )),
3218
+ })
3219
+ SubElement(el2, 'text:index-entry-chapter')
3220
+ SubElement(el2, 'text:index-entry-text')
3221
+ SubElement(el2, 'text:index-entry-tab-stop', attrib={
3222
+ 'style:leader-char': ".",
3223
+ 'style:type': "right",
3224
+ })
3225
+ SubElement(el2, 'text:index-entry-page-number')
3226
+
3227
+ def find_title_label(self, node, class_type, label_key):
3228
+ label = ''
3229
+ title_node = None
3230
+ for child in node.children:
3231
+ if isinstance(child, class_type):
3232
+ title_node = child
3233
+ break
3234
+ if title_node is not None:
3235
+ label = title_node.astext()
3236
+ else:
3237
+ label = self.language.labels[label_key]
3238
+ return label
3239
+
3240
+ def visit_topic(self, node) -> None:
3241
+ if 'classes' in node.attributes:
3242
+ if 'contents' in node.attributes['classes']:
3243
+ label = self.find_title_label(
3244
+ node, docutils.nodes.title, 'contents')
3245
+ if self.settings.generate_oowriter_toc:
3246
+ el1 = self.append_child('text:table-of-content', attrib={
3247
+ 'text:name': 'Table of Contents1',
3248
+ 'text:protected': 'true',
3249
+ 'text:style-name': 'Sect1',
3250
+ })
3251
+ el2 = SubElement(
3252
+ el1,
3253
+ 'text:table-of-content-source',
3254
+ attrib={
3255
+ 'text:outline-level': '10',
3256
+ })
3257
+ el3 = SubElement(el2, 'text:index-title-template', attrib={
3258
+ 'text:style-name': 'Contents_20_Heading',
3259
+ })
3260
+ el3.text = label
3261
+ self.generate_table_of_content_entry_template(el2)
3262
+ el4 = SubElement(el1, 'text:index-body')
3263
+ el5 = SubElement(el4, 'text:index-title')
3264
+ el6 = SubElement(el5, 'text:p', attrib={
3265
+ 'text:style-name': self.rststyle('contents-heading'),
3266
+ })
3267
+ el6.text = label
3268
+ self.save_current_element = self.current_element
3269
+ self.table_of_content_index_body = el4
3270
+ self.set_current_element(el4)
3271
+ else:
3272
+ el = self.append_p('horizontalline')
3273
+ el = self.append_p('centeredtextbody')
3274
+ el1 = SubElement(
3275
+ el, 'text:span',
3276
+ attrib={'text:style-name': self.rststyle('strong')})
3277
+ el1.text = label
3278
+ self.in_table_of_contents = True
3279
+ elif 'abstract' in node.attributes['classes']:
3280
+ el = self.append_p('horizontalline')
3281
+ el = self.append_p('centeredtextbody')
3282
+ el1 = SubElement(
3283
+ el, 'text:span',
3284
+ attrib={'text:style-name': self.rststyle('strong')})
3285
+ label = self.find_title_label(
3286
+ node, docutils.nodes.title,
3287
+ 'abstract')
3288
+ el1.text = label
3289
+ elif 'dedication' in node.attributes['classes']:
3290
+ el = self.append_p('horizontalline')
3291
+ el = self.append_p('centeredtextbody')
3292
+ el1 = SubElement(
3293
+ el, 'text:span',
3294
+ attrib={'text:style-name': self.rststyle('strong')})
3295
+ label = self.find_title_label(
3296
+ node, docutils.nodes.title,
3297
+ 'dedication')
3298
+ el1.text = label
3299
+
3300
+ def depart_topic(self, node) -> None:
3301
+ if 'classes' in node.attributes:
3302
+ if 'contents' in node.attributes['classes']:
3303
+ if self.settings.generate_oowriter_toc:
3304
+ self.update_toc_page_numbers(
3305
+ self.table_of_content_index_body)
3306
+ self.set_current_element(self.save_current_element)
3307
+ else:
3308
+ self.append_p('horizontalline')
3309
+ self.in_table_of_contents = False
3310
+
3311
+ def update_toc_page_numbers(self, el) -> None:
3312
+ collection = []
3313
+ self.update_toc_collect(el, 0, collection)
3314
+ self.update_toc_add_numbers(collection)
3315
+
3316
+ def update_toc_collect(self, el, level, collection) -> None:
3317
+ collection.append((level, el))
3318
+ level += 1
3319
+ for child_el in el:
3320
+ if child_el.tag != 'text:index-body':
3321
+ self.update_toc_collect(child_el, level, collection)
3322
+
3323
+ def update_toc_add_numbers(self, collection) -> None:
3324
+ for level, el1 in collection:
3325
+ if (el1.tag == 'text:p'
3326
+ and el1.text != 'Table of Contents'):
3327
+ el2 = SubElement(el1, 'text:tab')
3328
+ el2.tail = '9999'
3329
+
3330
+ def visit_transition(self, node) -> None:
3331
+ self.append_p('horizontalline')
3332
+
3333
+ def depart_transition(self, node) -> None:
3334
+ pass
3335
+
3336
+ #
3337
+ # Admonitions
3338
+ #
3339
+ def visit_warning(self, node) -> None:
3340
+ self.generate_admonition(node, 'warning')
3341
+
3342
+ def depart_warning(self, node) -> None:
3343
+ self.paragraph_style_stack.pop()
3344
+
3345
+ def visit_attention(self, node) -> None:
3346
+ self.generate_admonition(node, 'attention')
3347
+
3348
+ depart_attention = depart_warning
3349
+
3350
+ def visit_caution(self, node) -> None:
3351
+ self.generate_admonition(node, 'caution')
3352
+
3353
+ depart_caution = depart_warning
3354
+
3355
+ def visit_danger(self, node) -> None:
3356
+ self.generate_admonition(node, 'danger')
3357
+
3358
+ depart_danger = depart_warning
3359
+
3360
+ def visit_error(self, node) -> None:
3361
+ self.generate_admonition(node, 'error')
3362
+
3363
+ depart_error = depart_warning
3364
+
3365
+ def visit_hint(self, node) -> None:
3366
+ self.generate_admonition(node, 'hint')
3367
+
3368
+ depart_hint = depart_warning
3369
+
3370
+ def visit_important(self, node) -> None:
3371
+ self.generate_admonition(node, 'important')
3372
+
3373
+ depart_important = depart_warning
3374
+
3375
+ def visit_note(self, node) -> None:
3376
+ self.generate_admonition(node, 'note')
3377
+
3378
+ depart_note = depart_warning
3379
+
3380
+ def visit_tip(self, node) -> None:
3381
+ self.generate_admonition(node, 'tip')
3382
+
3383
+ depart_tip = depart_warning
3384
+
3385
+ def visit_admonition(self, node) -> None:
3386
+ title = None
3387
+ for child in node.children:
3388
+ if child.tagname == 'title':
3389
+ title = child.astext()
3390
+ if title is None:
3391
+ classes1 = node.get('classes')
3392
+ if classes1:
3393
+ title = classes1[0]
3394
+ self.generate_admonition(node, 'generic', title)
3395
+
3396
+ depart_admonition = depart_warning
3397
+
3398
+ def generate_admonition(self, node, label, title=None) -> None:
3399
+ if hasattr(self.language, 'labels'):
3400
+ translated_label = self.language.labels.get(label, label)
3401
+ else:
3402
+ translated_label = label
3403
+ el1 = SubElement(self.current_element, 'text:p', attrib={
3404
+ 'text:style-name': self.rststyle(
3405
+ 'admon-%s-hdr', (label, )),
3406
+ })
3407
+ if title:
3408
+ el1.text = title
3409
+ else:
3410
+ el1.text = '%s!' % (translated_label.capitalize(), )
3411
+ s1 = self.rststyle('admon-%s-body', (label, ))
3412
+ self.paragraph_style_stack.append(s1)
3413
+
3414
+ #
3415
+ # Roles (e.g. subscript, superscript, strong, ...
3416
+ #
3417
+ def visit_subscript(self, node) -> None:
3418
+ el = self.append_child('text:span', attrib={
3419
+ 'text:style-name': 'rststyle-subscript',
3420
+ })
3421
+ self.set_current_element(el)
3422
+
3423
+ def depart_subscript(self, node) -> None:
3424
+ self.set_to_parent()
3425
+
3426
+ def visit_superscript(self, node) -> None:
3427
+ el = self.append_child('text:span', attrib={
3428
+ 'text:style-name': 'rststyle-superscript',
3429
+ })
3430
+ self.set_current_element(el)
3431
+
3432
+ def depart_superscript(self, node) -> None:
3433
+ self.set_to_parent()
3434
+
3435
+ def visit_abbreviation(self, node) -> None:
3436
+ pass
3437
+
3438
+ def depart_abbreviation(self, node) -> None:
3439
+ pass
3440
+
3441
+ def visit_acronym(self, node) -> None:
3442
+ pass
3443
+
3444
+ def depart_acronym(self, node) -> None:
3445
+ pass
3446
+
3447
+ def visit_sidebar(self, node) -> None:
3448
+ pass
3449
+
3450
+ def depart_sidebar(self, node) -> None:
3451
+ pass
3452
+
3453
+
3454
+ # Use an own reader to modify transformations done.
3455
+ class Reader(standalone.Reader):
3456
+
3457
+ def get_transforms(self):
3458
+ transforms = super().get_transforms()
3459
+ if not self.settings.create_links:
3460
+ transforms.remove(references.DanglingReferences)
3461
+ return transforms