t-doc-common 0.22__tar.gz → 0.23.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/.hgtags +1 -0
  2. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/PKG-INFO +4 -2
  3. t_doc_common-0.23.dev1/tdoc/common/__init__.py +5 -0
  4. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/cli.py +141 -73
  5. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/defaults.py +1 -1
  6. {t_doc_common-0.22/tdoc/common → t_doc_common-0.23.dev1/tdoc/common/ext}/__init__.py +8 -9
  7. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/ext/defaults.py +1 -1
  8. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/ext/exec.py +1 -1
  9. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/ext/iframe.py +1 -1
  10. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/ext/metadata.py +1 -1
  11. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/ext/num.py +1 -1
  12. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/ext/solution.py +1 -1
  13. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/styles.css.jinja +3 -2
  14. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/.github/workflows/deploy-github-pages.yml +0 -0
  15. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/.github/workflows/package.yml +0 -0
  16. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/.github/workflows/publish.yml +0 -0
  17. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/.gitignore +0 -0
  18. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/.hgignore +0 -0
  19. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/LICENSE.txt +0 -0
  20. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/LICENSES.deps.txt +0 -0
  21. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/README.md +0 -0
  22. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/TODO.md +0 -0
  23. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/_static/demo-html-script.js +0 -0
  24. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/_static/demo-html-styles.css +0 -0
  25. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/conf.py +0 -0
  26. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/demo/crypto.md +0 -0
  27. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/demo/elements.md +0 -0
  28. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/demo/embedding.md +0 -0
  29. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/demo/html.md +0 -0
  30. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/demo/index.md +0 -0
  31. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/demo/python.md +0 -0
  32. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/demo/sql.md +0 -0
  33. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/development.md +0 -0
  34. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/edit.md +0 -0
  35. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/index.md +0 -0
  36. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/install/index.md +0 -0
  37. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/install/release_notes.md +0 -0
  38. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/reference/elements.md +0 -0
  39. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/reference/exec.md +0 -0
  40. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/reference/index.md +0 -0
  41. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/reference/people.sql +0 -0
  42. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/docs/reference/python-libs.md +0 -0
  43. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/package-lock.json +0 -0
  44. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/package.json +0 -0
  45. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/pyproject.toml +0 -0
  46. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/rollup.config.mjs +0 -0
  47. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/serve.bat +0 -0
  48. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/serve.desktop +0 -0
  49. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/locale/__init__.py +0 -0
  50. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/python/__init__.py +0 -0
  51. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/python/core.py +0 -0
  52. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/python/svg.py +0 -0
  53. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/scripts/editor.js +0 -0
  54. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/scripts/tdoc-worker.js +0 -0
  55. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/core.js +0 -0
  56. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/crypto.js +0 -0
  57. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/early.js.jinja +0 -0
  58. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/exec-html.js +0 -0
  59. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/exec-python.js +0 -0
  60. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/exec-python.py +0 -0
  61. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/exec-sql.js +0 -0
  62. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/exec.js +0 -0
  63. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/load.js +0 -0
  64. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static/tdoc/reload.js.jinja +0 -0
  65. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/a11y/assistive-mml.js +0 -0
  66. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/a11y/complexity.js +0 -0
  67. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/a11y/explorer.js +0 -0
  68. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/a11y/semantic-enrich.js +0 -0
  69. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/a11y/sre.js +0 -0
  70. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/adaptors/liteDOM.js +0 -0
  71. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/core.js +0 -0
  72. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/asciimath.js +0 -0
  73. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/mml/entities.js +0 -0
  74. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/mml/extensions/mml3.js +0 -0
  75. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/mml/extensions/mml3.sef.json +0 -0
  76. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/mml.js +0 -0
  77. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/action.js +0 -0
  78. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/all-packages.js +0 -0
  79. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/ams.js +0 -0
  80. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/amscd.js +0 -0
  81. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/autoload.js +0 -0
  82. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/bbox.js +0 -0
  83. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/boldsymbol.js +0 -0
  84. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/braket.js +0 -0
  85. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/bussproofs.js +0 -0
  86. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/cancel.js +0 -0
  87. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/cases.js +0 -0
  88. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/centernot.js +0 -0
  89. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/color.js +0 -0
  90. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/colortbl.js +0 -0
  91. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/colorv2.js +0 -0
  92. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/configmacros.js +0 -0
  93. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/empheq.js +0 -0
  94. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/enclose.js +0 -0
  95. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/extpfeil.js +0 -0
  96. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/gensymb.js +0 -0
  97. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/html.js +0 -0
  98. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/mathtools.js +0 -0
  99. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/mhchem.js +0 -0
  100. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/newcommand.js +0 -0
  101. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/noerrors.js +0 -0
  102. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/noundefined.js +0 -0
  103. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/physics.js +0 -0
  104. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/require.js +0 -0
  105. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/setoptions.js +0 -0
  106. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/tagformat.js +0 -0
  107. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/textcomp.js +0 -0
  108. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/textmacros.js +0 -0
  109. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/unicode.js +0 -0
  110. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/upgreek.js +0 -0
  111. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex/extensions/verb.js +0 -0
  112. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex-base.js +0 -0
  113. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex-full.js +0 -0
  114. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/input/tex.js +0 -0
  115. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/latest.js +0 -0
  116. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/loader.js +0 -0
  117. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/mml-chtml.js +0 -0
  118. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/mml-svg.js +0 -0
  119. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/node-main.js +0 -0
  120. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/tex.js +0 -0
  121. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_AMS-Regular.woff +0 -0
  122. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Bold.woff +0 -0
  123. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Regular.woff +0 -0
  124. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Fraktur-Bold.woff +0 -0
  125. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Fraktur-Regular.woff +0 -0
  126. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Main-Bold.woff +0 -0
  127. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Main-Italic.woff +0 -0
  128. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Main-Regular.woff +0 -0
  129. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Math-BoldItalic.woff +0 -0
  130. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Math-Italic.woff +0 -0
  131. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Math-Regular.woff +0 -0
  132. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_SansSerif-Bold.woff +0 -0
  133. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_SansSerif-Italic.woff +0 -0
  134. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_SansSerif-Regular.woff +0 -0
  135. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Script-Regular.woff +0 -0
  136. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Size1-Regular.woff +0 -0
  137. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Size2-Regular.woff +0 -0
  138. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Size3-Regular.woff +0 -0
  139. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Size4-Regular.woff +0 -0
  140. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Typewriter-Regular.woff +0 -0
  141. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Vector-Bold.woff +0 -0
  142. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Vector-Regular.woff +0 -0
  143. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml/fonts/woff-v2/MathJax_Zero.woff +0 -0
  144. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/chtml.js +0 -0
  145. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/svg/fonts/tex.js +0 -0
  146. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/output/svg.js +0 -0
  147. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/base.json +0 -0
  148. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/ca.json +0 -0
  149. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/da.json +0 -0
  150. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/de.json +0 -0
  151. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/en.json +0 -0
  152. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/es.json +0 -0
  153. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/fr.json +0 -0
  154. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/hi.json +0 -0
  155. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/it.json +0 -0
  156. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/nb.json +0 -0
  157. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/nemeth.json +0 -0
  158. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/nn.json +0 -0
  159. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/sre/mathmaps/sv.json +0 -0
  160. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/startup.js +0 -0
  161. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/tex-chtml-full-speech.js +0 -0
  162. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/tex-chtml-full.js +0 -0
  163. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/tex-chtml.js +0 -0
  164. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/tex-mml-chtml.js +0 -0
  165. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/tex-mml-svg.js +0 -0
  166. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/tex-svg-full.js +0 -0
  167. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/tex-svg.js +0 -0
  168. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/ui/lazy.js +0 -0
  169. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/ui/menu.js +0 -0
  170. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/mathjax/ui/safe.js +0 -0
  171. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/polyscript/index.js +0 -0
  172. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/polyscript/index.js.map +0 -0
  173. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/polyscript/toml-DiUM0_qs.js +0 -0
  174. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/polyscript/toml-DiUM0_qs.js.map +0 -0
  175. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/polyscript/zip-DrwYHuF9.js +0 -0
  176. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/polyscript/zip-DrwYHuF9.js.map +0 -0
  177. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/pyodide/pyodide-lock.json +0 -0
  178. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/pyodide/pyodide.asm.js +0 -0
  179. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/pyodide/pyodide.asm.wasm +0 -0
  180. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/pyodide/pyodide.mjs +0 -0
  181. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/pyodide/pyodide.mjs.map +0 -0
  182. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/pyodide/python_stdlib.zip +0 -0
  183. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/sabayon-listeners.js +0 -0
  184. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/sqlite/sqlite3-bundler-friendly.mjs +0 -0
  185. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/sqlite/sqlite3-opfs-async-proxy.js +0 -0
  186. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/sqlite/sqlite3-worker1-bundler-friendly.mjs +0 -0
  187. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/sqlite/sqlite3-worker1-promiser.mjs +0 -0
  188. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/sqlite/sqlite3.wasm +0 -0
  189. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/static.gen/tdoc/editor.js +0 -0
  190. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/templates/copyright.html +0 -0
  191. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/theme.toml +0 -0
  192. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tdoc/common/util.py +0 -0
  193. {t_doc_common-0.22 → t_doc_common-0.23.dev1}/tools/hatch_hooks.py +0 -0
@@ -18,3 +18,4 @@ ad8e768d29c94dedd8d22db5d3447f9b5b810370 0.18
18
18
  dc75eb2f3b9b8554fcf4721f2bb91ac3912975c7 0.19
19
19
  d54da9f11060151a540e02c17be22fcffa5ee6f2 0.20
20
20
  bfa6d8647b36a02d24d7ebc20985aaa235385c2c 0.21
21
+ b6a1b278f82ad0041ea9bebaa81850ffa9e6026a 0.22
@@ -1,12 +1,14 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: t-doc-common
3
- Version: 0.22
3
+ Version: 0.23.dev1
4
4
  Summary: Common functionality for t-doc
5
5
  Project-URL: Code, https://github.com/t-docs/common
6
6
  Project-URL: Documentation, https://t-doc.org/common/
7
7
  Project-URL: Homepage, https://t-doc.org/
8
8
  Author-email: Remy Blank <remy@c-space.org>
9
- License: MIT
9
+ License-Expression: MIT
10
+ License-File: LICENSE.txt
11
+ License-File: LICENSES.deps.txt
10
12
  Classifier: Development Status :: 3 - Alpha
11
13
  Classifier: Framework :: Sphinx :: Extension
12
14
  Classifier: Intended Audience :: Developers
@@ -0,0 +1,5 @@
1
+ # Copyright 2024 Remy Blank <remy@c-space.org>
2
+ # SPDX-License-Identifier: MIT
3
+
4
+ __project__ = 't-doc-common'
5
+ __version__ = '0.23.dev1'
@@ -3,24 +3,27 @@
3
3
 
4
4
  import argparse
5
5
  import contextlib
6
- from http import server
6
+ from http import HTTPMethod, HTTPStatus
7
7
  import itertools
8
8
  from importlib import metadata
9
9
  import json
10
+ import mimetypes
10
11
  import os
11
12
  import pathlib
13
+ import posixpath
12
14
  import re
13
15
  import shutil
14
16
  import socket
17
+ import socketserver
15
18
  import stat
16
19
  import subprocess
17
20
  import sys
18
21
  import threading
19
22
  import time
20
23
  from urllib import parse
24
+ from wsgiref import simple_server, util as wsgiutil
21
25
 
22
- from .. import common
23
- from . import util
26
+ from . import __project__, __version__, util
24
27
 
25
28
  # TODO: Implement incremental builds, by copying previous build output
26
29
 
@@ -86,8 +89,8 @@ def main(argv, stdin, stdout, stderr):
86
89
  "(default: %(default)s).")
87
90
  arg('--port', metavar='PORT', dest='port', default=8000, type=int,
88
91
  help="The port to bind the server to (default: %(default)s).")
89
- arg('--protocol', metavar='VERSION', dest='protocol', default='HTTP/1.0',
90
- help="The HTTP protocol version to conform to (default: %(default)s).")
92
+ arg('--restart-on-change', action='store_true', dest='restart_on_change',
93
+ help="Restart the server on changes.")
91
94
  arg('--watch', metavar='PATH', action='append', dest='watch', default=[],
92
95
  help="Additional directories to watch for changes.")
93
96
 
@@ -127,18 +130,24 @@ def cmd_serve(cfg):
127
130
 
128
131
  class Server(ServerBase):
129
132
  address_family = family
130
- class Handler(HandlerBase):
131
- protocol = cfg.protocol
132
133
 
133
- with Server(addr, Handler, cfg=cfg) as srv:
134
+ with Application(cfg, addr) as app, Server(addr, RequestHandler) as srv:
135
+ app.server = srv
136
+ srv.set_app(app)
134
137
  try:
135
138
  srv.serve_forever()
136
139
  except KeyboardInterrupt:
140
+ cfg.restart_on_change = False
137
141
  cfg.stderr.write("Interrupted, exiting\n")
138
142
 
143
+ if cfg.restart_on_change:
144
+ cfg.stdout.flush()
145
+ cfg.stderr.flush()
146
+ os.execv(sys.argv[0], sys.argv)
147
+
139
148
 
140
149
  def cmd_version(cfg):
141
- cfg.stdout.write(f"{common.__project__}-{common.__version__}\n")
150
+ cfg.stdout.write(f"{__project__}-{__version__}\n")
142
151
 
143
152
 
144
153
  def sphinx_build(cfg, target, *, build, tags=(), **kwargs):
@@ -154,9 +163,47 @@ def sphinx_build(cfg, target, *, build, tags=(), **kwargs):
154
163
  stderr=cfg.stderr, **kwargs)
155
164
 
156
165
 
157
- class ServerBase(server.ThreadingHTTPServer):
158
- def __init__(self, *args, cfg, **kwargs):
166
+ class ServerBase(socketserver.ThreadingMixIn, simple_server.WSGIServer):
167
+ daemon_threads = True
168
+
169
+ def server_bind(self):
170
+ with contextlib.suppress(Exception):
171
+ self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
172
+ return super().server_bind()
173
+
174
+
175
+ class RequestHandler(simple_server.WSGIRequestHandler):
176
+ def log_request(self, code='-', size='-'):
177
+ pass
178
+
179
+ def log_message(self, format, *args):
180
+ self.server.application.cfg.stderr.write("%s - - [%s] %s\n" % (
181
+ self.address_string(), self.log_date_time_string(),
182
+ (format % args).translate(self._control_char_table)))
183
+
184
+
185
+ def status_str(status):
186
+ return f'{status} {status.phrase}'
187
+
188
+
189
+ def error(respond, status):
190
+ respond(status_str(status), [
191
+ ('Content-Type', 'text/plain;charset=utf-8'),
192
+ ])
193
+ return [status.description.encode('utf-8')]
194
+
195
+
196
+ def try_stat(path):
197
+ try:
198
+ return path.stat()
199
+ except OSError:
200
+ return None
201
+
202
+
203
+ class Application:
204
+ def __init__(self, cfg, addr):
159
205
  self.cfg = cfg
206
+ self.addr = addr
160
207
  self.lock = threading.Condition(threading.Lock())
161
208
  self.directory = self.build_dir(0) / 'html'
162
209
  self.upgrade_msg = None
@@ -168,28 +215,13 @@ class ServerBase(server.ThreadingHTTPServer):
168
215
  self.builder.start()
169
216
  self.checker = threading.Thread(target=self.check_upgrade, daemon=True)
170
217
  self.checker.start()
171
- super().__init__(*args, **kwargs)
172
-
173
- def server_bind(self):
174
- with contextlib.suppress(Exception):
175
- self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
176
- return super().server_bind()
177
-
178
- def finish_request(self, request, client_addr):
179
- with self.lock: directory = self.directory
180
- self.RequestHandlerClass(request, client_addr, self,
181
- directory=directory)
182
-
183
- IGNORED_EXCEPTIONS = (BrokenPipeError, ConnectionAbortedError)
218
+ self.apps = {'*build': self.handle_build}
184
219
 
185
- def handle_error(self, request, client_addr):
186
- if not isinstance(sys.exception(), self.IGNORED_EXCEPTIONS):
187
- super().handle_error(request, client_addr)
220
+ def __enter__(self): return self
188
221
 
189
- def server_close(self):
222
+ def __exit__(self, typ, value, tb):
190
223
  with self.lock: self.stop = True
191
224
  self.builder.join()
192
- return super().server_close()
193
225
 
194
226
  def watch_and_build(self):
195
227
  interval = self.cfg.interval * 1_000_000_000
@@ -209,6 +241,11 @@ class ServerBase(server.ThreadingHTTPServer):
209
241
  prev = mtime + delay - interval
210
242
  continue
211
243
  if prev_mtime != 0:
244
+ if self.cfg.restart_on_change:
245
+ self.cfg.stdout.write(
246
+ "\nSource change detected, restarting\n")
247
+ self.server.shutdown()
248
+ break
212
249
  self.cfg.stdout.write(
213
250
  "\nSource change detected, rebuilding\n")
214
251
  prev_mtime = mtime
@@ -267,7 +304,7 @@ class ServerBase(server.ThreadingHTTPServer):
267
304
  shutil.rmtree(build, onexc=on_error)
268
305
 
269
306
  def print_serving(self):
270
- host, port = self.socket.getsockname()[:2]
307
+ host, port = self.addr[:2]
271
308
  if ':' in host: host = f'[{host}]'
272
309
  self.cfg.stdout.write(self.cfg.ansi("Serving at <@{LBLUE}%s@{NORM}>\n")
273
310
  % f"http://{host}:{port}/")
@@ -276,14 +313,14 @@ class ServerBase(server.ThreadingHTTPServer):
276
313
 
277
314
  def check_upgrade(self):
278
315
  try:
279
- project = common.__project__
280
- upgrades, editable = pip_check_upgrades(self.cfg, project)
281
- if project not in upgrades: return
316
+ upgrades, editable = pip_check_upgrades(self.cfg, __project__)
317
+ if __project__ not in upgrades: return
282
318
  msg = self.cfg.ansi(
283
319
  "@{LYELLOW}A t-doc upgrade is available:@{NORM} "
284
320
  "%s @{CYAN}%s@{NORM} => @{CYAN}%s@{NORM}\n"
285
321
  "See <@{LBLUE}https://t-doc.org/common/%s#upgrade@{NORM}>\n"
286
- % (project, metadata.version(project), upgrades[project],
322
+ % (__project__, metadata.version(__project__),
323
+ upgrades[__project__],
287
324
  'development' if editable else 'install'))
288
325
  with self.lock:
289
326
  self.upgrade_msg = msg
@@ -291,37 +328,68 @@ class ServerBase(server.ThreadingHTTPServer):
291
328
  except Exception:
292
329
  if self.cfg.debug: raise
293
330
 
331
+ def __call__(self, env, respond):
332
+ script_name, path_info = env['SCRIPT_NAME'], env['PATH_INFO']
333
+ name = wsgiutil.shift_path_info(env)
334
+ if (handler := self.apps.get(name)) is not None:
335
+ return handler(env, respond)
336
+ env['SCRIPT_NAME'], env['PATH_INFO'] = script_name, path_info
337
+ return self.handle_default(env, respond)
338
+
339
+ def handle_default(self, env, respond):
340
+ env['wsgi.multithread'] = True
341
+ if (method := env['REQUEST_METHOD']) not in (HTTPMethod.HEAD,
342
+ HTTPMethod.GET):
343
+ return error(respond, HTTPStatus.NOT_IMPLEMENTED)
344
+ path = self.file_path(env['PATH_INFO'])
345
+ if (st := try_stat(path)) is None:
346
+ return error(respond, HTTPStatus.NOT_FOUND)
347
+
348
+ if stat.S_ISDIR(st.st_mode):
349
+ parts = parse.urlsplit(env['PATH_INFO'])
350
+ if not parts.path.endswith('/'):
351
+ location = parse.urlunsplit(
352
+ (parts[:2] + (parts[2] + '/',) + parts[3:]))
353
+ respond(status_str(HTTPStatus.MOVED_PERMANENTLY), [
354
+ ('Location', location),
355
+ ('Content-Length', '0'),
356
+ ])
357
+ return []
358
+ path = path / 'index.html'
359
+ if (st := try_stat(path)) is None:
360
+ return error(respond, HTTPStatus.NOT_FOUND)
361
+
362
+ if not stat.S_ISREG(st.st_mode):
363
+ return error(respond, HTTPStatus.NOT_FOUND)
364
+ mime_type = mimetypes.guess_type(path)[0]
365
+ if not mime_type: mime_type = 'application/octet-stream'
366
+ respond(status_str(HTTPStatus.OK), [
367
+ ('Content-Type', mime_type),
368
+ ('Content-Length', str(st.st_size)),
369
+ ])
370
+ if method == HTTPMethod.HEAD: return []
371
+ wrapper = env.get('wsgi.file_wrapper', wsgiutil.FileWrapper)
372
+ return wrapper(open(path, 'rb'))
373
+
374
+ def file_path(self, path):
375
+ trailing = path.rstrip().endswith('/')
376
+ try:
377
+ path = parse.unquote(path, errors='surrogatepass')
378
+ except UnicodeDecodeError:
379
+ path = parse.unquote(path)
380
+ with self.lock: res = self.directory
381
+ for part in filter(None, posixpath.normpath(path).split('/')):
382
+ if pathlib.Path(part).parent.name or part in (os.curdir, os.pardir):
383
+ continue
384
+ res = res / part
385
+ return res / '' if trailing else res
294
386
 
295
- class HandlerBase(server.SimpleHTTPRequestHandler):
296
- def log_request(self, code='-', size='-'):
297
- pass
298
-
299
- def log_message(self, format, *args):
300
- self.server.cfg.stderr.write("%s - - [%s] %s\n" % (
301
- self.address_string(), self.log_date_time_string(),
302
- (format % args).translate(self._control_char_table)))
303
-
304
- def do_GET(self):
305
- if not self.dispatch_star_handler(True):
306
- super().do_GET()
307
-
308
- def do_HEAD(self):
309
- if not self.dispatch_star_handler(False):
310
- super().do_HEAD()
311
-
312
- def dispatch_star_handler(self, write_content):
313
- url = parse.urlparse(self.path)
314
- if not url.path.startswith('/*'): return
315
- if handler := getattr(self, f'handle_star_{url.path[2:]}', None):
316
- content = handler(url, write_content)
317
- if write_content and content: self.wfile.write(content)
318
- else:
319
- self.send_error(server.HTTPStatus.NOT_FOUND)
320
- return True
321
-
322
- def handle_star_build(self, url, write_content):
387
+ def handle_build(self, env, respond):
388
+ if (method := env['REQUEST_METHOD']) not in (HTTPMethod.HEAD,
389
+ HTTPMethod.GET):
390
+ yield from error(respond, HTTPStatus.NOT_IMPLEMENTED)
323
391
  t = None
324
- for k, v in parse.parse_qsl(url.query):
392
+ for k, v in parse.parse_qsl(env.get('QUERY_STRING', '')):
325
393
  if k == 't':
326
394
  t = v
327
395
  break
@@ -330,20 +398,20 @@ class HandlerBase(server.SimpleHTTPRequestHandler):
330
398
  # content length is needed upfront, we return a fixed size, and
331
399
  # terminate the request if the padding exceeds the available space.
332
400
  size = 600
333
- self.send_response(server.HTTPStatus.OK)
334
- self.send_header('Content-type', 'text/plain')
335
- self.send_header('Content-Length', str(size))
336
- self.end_headers()
337
- if not write_content: return
338
- with self.server.lock:
339
- while ((mtime := self.server.build_mtime) is None
401
+ respond(status_str(HTTPStatus.OK), [
402
+ ('Content-Type', 'text/plain;charset=utf-8'),
403
+ ('Content-Length', str(size)),
404
+ ])
405
+ if method == HTTPMethod.HEAD: return
406
+ with self.lock:
407
+ while ((mtime := self.build_mtime) is None
340
408
  or t == build_tag(mtime)) and size > 0:
341
- if self.server.lock.wait(timeout=1): continue
342
- self.wfile.write(b' ')
409
+ if self.lock.wait(timeout=1): continue
410
+ yield b' '
343
411
  size -= 1
344
412
  tag = build_tag(mtime).encode('utf-8')
345
413
  if len(tag) > size: tag = b'' # Not enough remaining capacity
346
- return b' ' * (size - len(tag)) + tag
414
+ yield b' ' * (size - len(tag)) + tag
347
415
 
348
416
 
349
417
  def build_tag(mtime):
@@ -24,7 +24,7 @@ extensions = [
24
24
  'sphinx.ext.todo',
25
25
  'sphinx_copybutton',
26
26
  'sphinx_design',
27
- 'tdoc.common',
27
+ 'tdoc.common.ext',
28
28
  'tdoc.common.ext.defaults',
29
29
  'tdoc.common.ext.exec',
30
30
  'tdoc.common.ext.iframe',
@@ -7,14 +7,13 @@ import pathlib
7
7
  from sphinx import config, locale
8
8
  from sphinx.util import fileutil, logging
9
9
 
10
- __project__ = 't-doc-common'
11
- __version__ = '0.22'
10
+ from .. import __version__
12
11
 
13
12
  _log = logging.getLogger(__name__)
14
13
  _messages = 'tdoc'
15
14
  _ = locale.get_translation(_messages)
16
15
 
17
- _common = pathlib.Path(__file__).absolute().parent
16
+ _base = pathlib.Path(__file__).absolute().parent.parent
18
17
 
19
18
  _license_urls = {
20
19
  'CC0-1.0': 'https://creativecommons.org/publicdomain/zero/1.0/',
@@ -61,8 +60,8 @@ def setup(app):
61
60
  app.add_config_value('tdoc_enable_sab', 'no', 'html',
62
61
  config.ENUM('no', 'cross-origin-isolation', 'sabayon'))
63
62
 
64
- app.add_html_theme('t-doc', str(_common))
65
- app.add_message_catalog(_messages, str(_common / 'locale'))
63
+ app.add_html_theme('t-doc', str(_base))
64
+ app.add_message_catalog(_messages, str(_base / 'locale'))
66
65
 
67
66
  app.connect('config-inited', on_config_inited)
68
67
  app.connect('builder-inited', on_builder_inited)
@@ -81,7 +80,7 @@ def setup(app):
81
80
  def on_config_inited(app, config):
82
81
  cv = config.values['html_title']
83
82
  super(cv.__class__, cv).__setattr__('default', lambda c: c.project)
84
- config.templates_path.append(str(_common / 'templates'))
83
+ config.templates_path.append(str(_base / 'templates'))
85
84
 
86
85
  # Override defaults in html_theme_options.
87
86
  opts = config.html_theme_options
@@ -100,8 +99,8 @@ def on_config_inited(app, config):
100
99
 
101
100
  def on_builder_inited(app):
102
101
  # Add our own static paths.
103
- app.config.html_static_path.append(str(_common / 'static'))
104
- app.config.html_static_path.append(str(_common / 'static.gen'))
102
+ app.config.html_static_path.append(str(_base / 'static'))
103
+ app.config.html_static_path.append(str(_base / 'static.gen'))
105
104
 
106
105
  # Add a default static path.
107
106
  if '_static' not in app.config.html_static_path:
@@ -133,5 +132,5 @@ def write_static_files(app, builder):
133
132
 
134
133
  # The file must be at the root of the website, to avoid limiting the scope
135
134
  # of the service worker to _static.
136
- fileutil.copy_asset_file(_common / 'scripts' / 'tdoc-worker.js',
135
+ fileutil.copy_asset_file(_base / 'scripts' / 'tdoc-worker.js',
137
136
  builder.outdir, force=True)
@@ -6,7 +6,7 @@ import types
6
6
  from docutils.parsers.rst import directives
7
7
  from sphinx.util import docutils, logging
8
8
 
9
- from .. import __version__, report_exceptions
9
+ from . import __version__, report_exceptions
10
10
 
11
11
  _log = logging.getLogger(__name__)
12
12
 
@@ -10,7 +10,7 @@ from docutils.parsers.rst import directives
10
10
  from sphinx.directives import code
11
11
  from sphinx.util import logging, osutil
12
12
 
13
- from .. import __version__, format_attrs, format_data_attrs, report_exceptions
13
+ from . import __version__, format_attrs, format_data_attrs, report_exceptions
14
14
 
15
15
  _log = logging.getLogger(__name__)
16
16
  _base = pathlib.Path(__file__).absolute().parent.parent
@@ -5,7 +5,7 @@ from docutils import nodes
5
5
  from docutils.parsers.rst import directives
6
6
  from sphinx.util import docutils, logging
7
7
 
8
- from .. import __version__, report_exceptions
8
+ from . import __version__, report_exceptions
9
9
 
10
10
  _log = logging.getLogger(__name__)
11
11
 
@@ -6,7 +6,7 @@ import yaml
6
6
  from docutils import nodes
7
7
  from sphinx.util import docutils, logging
8
8
 
9
- from .. import __version__, report_exceptions
9
+ from . import __version__, report_exceptions
10
10
 
11
11
  _log = logging.getLogger(__name__)
12
12
 
@@ -6,7 +6,7 @@ from sphinx import errors
6
6
  from sphinx.environment import collectors
7
7
  from sphinx.util import docutils, logging, nodes as sphinx_nodes
8
8
 
9
- from .. import __version__
9
+ from . import __version__
10
10
 
11
11
  _log = logging.getLogger(__name__)
12
12
 
@@ -6,7 +6,7 @@ from docutils.parsers.rst import directives
6
6
  from docutils.parsers.rst.directives import admonitions
7
7
  from sphinx.util import logging
8
8
 
9
- from .. import _, __version__
9
+ from . import _, __version__
10
10
 
11
11
  _log = logging.getLogger(__name__)
12
12
 
@@ -336,8 +336,9 @@ div.tdoc-exec div.tdoc-exec-controls {
336
336
  .article-header-buttons button.pst-navbar-icon {
337
337
  height: inherit;
338
338
  }
339
- .article-header-buttons .svg-inline--fa {
340
- vertical-align: middle;
339
+ .article-header-buttons .btn__icon-container {
340
+ display: flex;
341
+ align-items: center;
341
342
  }
342
343
 
343
344
  /* Prevent the wrapper background set by pygments from being visible if the
File without changes
File without changes
File without changes
File without changes
File without changes