pytex-preprocessor 0.4.5__tar.gz → 0.4.6__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 (140) hide show
  1. {pytex_preprocessor-0.4.5/src/pytex_preprocessor.egg-info → pytex_preprocessor-0.4.6}/PKG-INFO +1 -1
  2. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/pyproject.toml +1 -1
  3. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/biblatex.py +6 -2
  4. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_builder/tectonic.py +156 -48
  5. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_builder/variants.py +44 -4
  6. pytex_preprocessor-0.4.6/src/pytex_hsrtreport/assets/logos/MAKERS.svg +163 -0
  7. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/document.py +10 -5
  8. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/logos.py +1 -0
  9. pytex_preprocessor-0.4.6/src/pytex_hsrtreport/variants.py +39 -0
  10. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_markdown/__init__.py +9 -1
  11. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_markdown/convert.py +126 -38
  12. pytex_preprocessor-0.4.6/src/pytex_markdown/frontmatter.py +195 -0
  13. {pytex_preprocessor-0.4.5/src/pytex_protocol → pytex_preprocessor-0.4.6/src/pytex_markdown/protocol}/__init__.py +5 -2
  14. {pytex_preprocessor-0.4.5/src/pytex_protocol → pytex_preprocessor-0.4.6/src/pytex_markdown/protocol}/convert.py +5 -13
  15. {pytex_preprocessor-0.4.5/src/pytex_protocol → pytex_preprocessor-0.4.6/src/pytex_markdown/protocol}/document.py +1 -1
  16. {pytex_preprocessor-0.4.5/src/pytex_protocol → pytex_preprocessor-0.4.6/src/pytex_markdown/protocol}/header.py +1 -1
  17. {pytex_preprocessor-0.4.5/src/pytex_protocol → pytex_preprocessor-0.4.6/src/pytex_markdown/protocol}/shortcodes.py +12 -11
  18. {pytex_preprocessor-0.4.5/src/pytex_protocol → pytex_preprocessor-0.4.6/src/pytex_markdown/protocol}/signatures.py +1 -1
  19. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6/src/pytex_preprocessor.egg-info}/PKG-INFO +1 -1
  20. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_preprocessor.egg-info/SOURCES.txt +9 -6
  21. pytex_preprocessor-0.4.6/src/pytex_protocol/__init__.py +59 -0
  22. pytex_preprocessor-0.4.6/src/pytex_protocol/frontmatter.py +7 -0
  23. pytex_preprocessor-0.4.5/src/pytex_hsrtreport/variants.py +0 -26
  24. pytex_preprocessor-0.4.5/src/pytex_protocol/frontmatter.py +0 -80
  25. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/LICENSE +0 -0
  26. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/README.md +0 -0
  27. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/setup.cfg +0 -0
  28. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/__init__.py +0 -0
  29. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/__init__.py +0 -0
  30. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/builtin.py +0 -0
  31. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/captions.py +0 -0
  32. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/cleveref.py +0 -0
  33. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/colors.py +0 -0
  34. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/conditionals.py +0 -0
  35. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/counters.py +0 -0
  36. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/definitions.py +0 -0
  37. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/floats.py +0 -0
  38. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/font.py +0 -0
  39. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/fontawesome.py +0 -0
  40. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/fontspec.py +0 -0
  41. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/geometry.py +0 -0
  42. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/glossaries.py +0 -0
  43. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/graphics.py +0 -0
  44. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/hooks.py +0 -0
  45. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/hyperref.py +0 -0
  46. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/lengths.py +0 -0
  47. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/listings.py +0 -0
  48. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/mdframed.py +0 -0
  49. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/picture.py +0 -0
  50. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/setspace.py +0 -0
  51. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/commands/tables.py +0 -0
  52. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/helpers/__init__.py +0 -0
  53. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/helpers/coerce.py +0 -0
  54. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/helpers/parenting.py +0 -0
  55. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/helpers/sanitize.py +0 -0
  56. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/helpers/with_package.py +0 -0
  57. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/interface/__init__.py +0 -0
  58. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/interface/control_sequence.py +0 -0
  59. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/interface/package.py +0 -0
  60. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/interface/tex.py +0 -0
  61. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/__init__.py +0 -0
  62. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/color.py +0 -0
  63. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/comment.py +0 -0
  64. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/concat.py +0 -0
  65. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/control_sequence.py +0 -0
  66. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/document.py +0 -0
  67. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/document_class.py +0 -0
  68. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/empty.py +0 -0
  69. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/environment.py +0 -0
  70. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/image.py +0 -0
  71. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/include.py +0 -0
  72. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/length.py +0 -0
  73. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/math.py +0 -0
  74. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/package.py +0 -0
  75. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/model/raw.py +0 -0
  76. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/packages.py +0 -0
  77. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/registry.py +0 -0
  78. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex/template.py +0 -0
  79. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_analyze/__init__.py +0 -0
  80. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_analyze/analyze.py +0 -0
  81. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_analyze/optimize.py +0 -0
  82. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_builder/__init__.py +0 -0
  83. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_builder/build.py +0 -0
  84. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_builder/console.py +0 -0
  85. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_builder/render.py +0 -0
  86. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_builder/tex2py.py +0 -0
  87. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_builder/tree.py +0 -0
  88. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/__init__.py +0 -0
  89. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Bold.ttf +0 -0
  90. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-BoldItalic.ttf +0 -0
  91. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Book.ttf +0 -0
  92. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-BookItalic.ttf +0 -0
  93. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Medium.ttf +0 -0
  94. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-MediumItalic.ttf +0 -0
  95. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Strong.ttf +0 -0
  96. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-Thin.ttf +0 -0
  97. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Blender/Blender-ThinItalic.ttf +0 -0
  98. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Black.ttf +0 -0
  99. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Bold.ttf +0 -0
  100. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-BoldItalic.ttf +0 -0
  101. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Italic.ttf +0 -0
  102. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Medium.ttf +0 -0
  103. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/DIN/DIN-Regular.ttf +0 -0
  104. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/fonts/Times New Roman.ttf +0 -0
  105. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/ASTA.svg +0 -0
  106. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/DUMMY.png +0 -0
  107. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/DUMMY_FOOT.png +0 -0
  108. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/ECHO.svg +0 -0
  109. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/HSRT.pdf +0 -0
  110. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/INF.pdf +0 -0
  111. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/MAKERS-Icon.svg +0 -0
  112. /pytex_preprocessor-0.4.5/src/pytex_hsrtreport/assets/logos/MAKERS.svg → /pytex_preprocessor-0.4.6/src/pytex_hsrtreport/assets/logos/MAKERS-RAlign.svg +0 -0
  113. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/STUPA.pdf +0 -0
  114. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/assets/logos/Skyline.pdf +0 -0
  115. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/boxes.py +0 -0
  116. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/citations.py +0 -0
  117. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/cleveref_names.py +0 -0
  118. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/colors.py +0 -0
  119. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/fonts.py +0 -0
  120. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/glossary.py +0 -0
  121. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/hyperref_config.py +0 -0
  122. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/listings.py +0 -0
  123. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/pagebreak.py +0 -0
  124. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/pagesetup.py +0 -0
  125. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/tex/pagesetup.tex +0 -0
  126. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/titlepage.py +0 -0
  127. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/voting.py +0 -0
  128. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/watermark.py +0 -0
  129. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_hsrtreport/wordcount.py +0 -0
  130. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_koma/__init__.py +0 -0
  131. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_koma/commands.py +0 -0
  132. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_koma/document.py +0 -0
  133. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_markdown/escape.py +0 -0
  134. {pytex_preprocessor-0.4.5/src/pytex_protocol → pytex_preprocessor-0.4.6/src/pytex_markdown/protocol}/entries.py +0 -0
  135. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_preprocessor.egg-info/dependency_links.txt +0 -0
  136. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_preprocessor.egg-info/entry_points.txt +0 -0
  137. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_preprocessor.egg-info/requires.txt +0 -0
  138. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_preprocessor.egg-info/top_level.txt +0 -0
  139. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_tikz/__init__.py +0 -0
  140. {pytex_preprocessor-0.4.5 → pytex_preprocessor-0.4.6}/src/pytex_tikz/tikz.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytex-preprocessor
3
- Version: 0.4.5
3
+ Version: 0.4.6
4
4
  Summary: Type-safe LaTeX document generation with Python
5
5
  Author-email: Frederik Beimgraben <frederik@beimgraben.net>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pytex-preprocessor"
7
- version = "0.4.5"
7
+ version = "0.4.6"
8
8
  authors = [
9
9
  { name="Frederik Beimgraben", email="frederik@beimgraben.net" },
10
10
  ]
@@ -58,8 +58,12 @@ def Parencite(*keys: str) -> TeX:
58
58
 
59
59
  @Registry.add
60
60
  @with_package(BIBLATEX)
61
- def Autocite(*keys: str) -> TeX:
62
- return ControlSequence("autocite", (Parameter(",".join(keys)),))
61
+ def Autocite(*keys: str, postnote: str | None = None) -> TeX:
62
+ key_param = Parameter(",".join(keys))
63
+ if postnote is None:
64
+ return ControlSequence("autocite", (key_param,))
65
+ # A single optional argument to \autocite is the postnote (e.g. a page).
66
+ return ControlSequence("autocite", (Parameter(postnote, optional=True), key_param))
63
67
 
64
68
 
65
69
  @Registry.add
@@ -15,6 +15,7 @@ import subprocess
15
15
  import tarfile
16
16
  import tempfile
17
17
  import xml.etree.ElementTree as ET
18
+ import zipfile
18
19
  from pathlib import Path
19
20
  from typing import TYPE_CHECKING
20
21
 
@@ -52,20 +53,50 @@ BIBER_MIRROR_URL = (
52
53
  "/releases/download/biber-binaries/{asset}"
53
54
  )
54
55
 
55
- # SHA256 of each upstream biber tarball, keyed by the versioned mirror asset
56
- # name. Used to verify downloads from either source and to reject HTML error
57
- # pages a CDN might serve with a 200 status. Linux x86_64 only for now; other
58
- # platforms download from SourceForge without a pinned checksum.
56
+ # SHA256 of each biber binary, keyed by the versioned mirror asset name. Used
57
+ # to verify downloads from either source and to reject HTML error pages a CDN
58
+ # might serve with a 200 status. Covers every mirrored platform (glibc/musl
59
+ # Linux x86_64, Linux aarch64, macOS x86_64/universal, Windows x86_64).
59
60
  BIBER_SHA256: dict[str, str] = {
61
+ "biber-2.11-darwin_x86_64.tar.gz": "4e3343574f917d7825148e4c9ccb665154476ec0817abf67f1fea052fb8cc728",
62
+ "biber-2.11-linux_x86_64-musl.tar.gz": "a6b7e61446ee8b23cc0b6b1eaffd4a8e0d271f06874ad22b025cc41f74050617",
60
63
  "biber-2.11-linux_x86_64.tar.gz": "7fcb51491fb24151810a92b2e2d03b7a1291823c0f8d6fb53183af391fca42e7",
64
+ "biber-2.11-MSWIN64.zip": "f3a438ae8d94e7afbd069f0f941b3d93816fc06647d88460ba05a5485ed4372a",
65
+ "biber-2.12-darwin_x86_64.tar.gz": "5a5f20669bd3e4cf56fd246ef2ba37d601ca2059510590a5022da4487d5e7bb8",
61
66
  "biber-2.12-linux_x86_64.tar.gz": "fd0b5145cc908c400a701b583330635d533d750b73a272d1d5ea47e10b2fbf71",
67
+ "biber-2.12-MSWIN64.zip": "96d99e075dbb666ad4ec93bcca5fcc15ea07b6f70e9151e7d44baa4cc7c02932",
68
+ "biber-2.13-darwin_x86_64.tar.gz": "ad47307b6f27c7bb129a1a3235e01245be3e95541bba9adca6892196e599edfd",
69
+ "biber-2.13-linux_x86_64-musl.tar.gz": "d4a25d32fef6993b5ea0dece70af4b09a1f2758f8b8737924250f3e6b80a979a",
62
70
  "biber-2.13-linux_x86_64.tar.gz": "03101f418d46f4666272b68a4318d9e4b7a840d9dfa05d93ddc490d491157a75",
71
+ "biber-2.13-MSWIN64.zip": "bf3ab70629465d674d020a10f34e307c7f6fb031dc7ea73627a1fe53b1e8457b",
72
+ "biber-2.14-darwin_x86_64.tar.gz": "d834ba71c05f8dfe668d4c40d13c0e11e0fee24e567877479a0ac1c98ad89131",
73
+ "biber-2.14-linux_x86_64-musl.tar.gz": "0b6c2a8307111c6dc2897d338be1ad446ef2e1ca8d126f806ce5c9bf7ff486ca",
63
74
  "biber-2.14-linux_x86_64.tar.gz": "dab3177f03322b5529d07d47d21d9e573a90c23d86eaaf11591b2d155316ee1b",
75
+ "biber-2.14-MSWIN64.zip": "247451621ef60378045cf917a007ef3219d3cbf833f080c3333927dea854b4fe",
76
+ "biber-2.15-darwin_x86_64.tar.gz": "e2b4931db6b4a684b640f41e53faee1c68f931f03c41d8f2c40d8b11c85511c7",
77
+ "biber-2.15-linux_x86_64-musl.tar.gz": "277acd35d51a07c1b75782514f88f1ad380581b0077548eaa0db6b60263dafaa",
64
78
  "biber-2.15-linux_x86_64.tar.gz": "653c8add18d2e94a233a6b9aae6d8144f965c2ce13fb7b4e66502b55fcd06e06",
79
+ "biber-2.15-MSWIN64.zip": "61553ef3d5e8bdff86e1ac8204236fbf3980bc8ade94949f1ad874ba4031eb7f",
80
+ "biber-2.16-darwin_x86_64.tar.gz": "c396133cc924c23111353ea5cb0e9960a98f1fddca8f42fbdb89e89424fc136f",
81
+ "biber-2.16-linux_x86_64-musl.tar.gz": "e0935c8e67016889b3c8bb1f0fbd602b587f6935cd61ee23bc2eb898ae633f58",
65
82
  "biber-2.16-linux_x86_64.tar.gz": "3afb97a42d2cf272d3c0b51663725e55339c4e6f3d594cd52e16c39fa9fcfb13",
83
+ "biber-2.16-MSWIN64.zip": "8e7a4c98626511bcf1c89a1847242cdd0e0113927137577eedaa13c72ce84b4b",
84
+ "biber-2.17-darwin_universal.tar.gz": "182e1efa074d8a2a23a8893f2a22440d4e463cce55e4ed02076ac4c0ee0614b2",
85
+ "biber-2.17-darwin_x86_64.tar.gz": "aa72ccdd01d59367b919d517f7a116e5dc40848abc1909cd812b485f791df7f4",
86
+ "biber-2.17-linux_x86_64-musl.tar.gz": "8967c4d34bfd2ed3d71e54d8a20a0c766b90368348994c99fca56ee2d812619e",
66
87
  "biber-2.17-linux_x86_64.tar.gz": "129d2e0332a57e985ffa253e5e9fbd28ef99af5a068d1b141145211969aa8999",
88
+ "biber-2.17-MSWIN64.zip": "c103bffc5ae0a7f513e7c26b6d394e9be6cf41952959c5d604ee2e6581b5dea2",
89
+ "biber-2.18-darwin_universal.tar.gz": "a0848ca266334284f1145470e53c3882b2d5e8ad82828700df1f6e347f7b675b",
90
+ "biber-2.18-darwin_x86_64.tar.gz": "f05520a397162434e93ef28b6be2c866f555a1979f150601fecf6d22d4bb8f2e",
91
+ "biber-2.18-linux_x86_64-musl.tar.gz": "34da2cc489a1387bfda8c76add3d613ececd9b674d0361a2b1464cf592dee2ed",
67
92
  "biber-2.18-linux_x86_64.tar.gz": "2a6b4cd15a1139907799da0d23cd4ddcce8341af3960d2b3d1d3e4b4a9f1fb53",
93
+ "biber-2.18-MSWIN64.zip": "02ee3a8b6838b7ff1e9aea1a5342686981b9364067a7b8e7131c3b3201cf387c",
94
+ "biber-2.19-darwin_universal.tar.gz": "0ebda145064eb5b8901a4ed5c8c5e5e6a5208e0aba425f7febcb5fb5b1a9c11b",
95
+ "biber-2.19-darwin_x86_64.tar.gz": "3835aab3247d3bff79b0c2fcf061149b80e39bf11f55a3a30cf946043a85d45b",
96
+ "biber-2.19-linux_aarch64.tar.gz": "45571c262e714786ec841320ee1845f0e3e3cf29443bb58769b26c6fc6274766",
97
+ "biber-2.19-linux_x86_64-musl.tar.gz": "66e765df8b52446659a978f35d25974b835b7168ddd96f45d4a49cea6bd727eb",
68
98
  "biber-2.19-linux_x86_64.tar.gz": "e2eda3e6ea7ac7e78d60e99a0e2aeb1096829f95791c06b768ed31a12889e58e",
99
+ "biber-2.19-MSWIN64.zip": "f0bccdec320e89a04b067f1189957b4bbe6feb445005357601f6e295e83e97da",
69
100
  }
70
101
 
71
102
 
@@ -112,45 +143,140 @@ def ensure_tectonic(console: Console) -> Path:
112
143
  return cached
113
144
 
114
145
 
115
- def _biber_sf_path() -> tuple[str, str]:
116
- """Return (sourceforge_subdir, filename) for biber on this platform."""
146
+ # macOS binaries lived under OSX_Intel up to biber 2.16 and moved to MacOS
147
+ # from 2.17 on; the SourceForge fallback URL needs the right subdir per version.
148
+ _OLD_MAC_DIRS: frozenset[str] = frozenset(
149
+ {"2.11", "2.12", "2.13", "2.14", "2.15", "2.16"}
150
+ )
151
+
152
+
153
+ def _biber_candidates(version: str) -> list[tuple[str, str, str]]:
154
+ """``(sf_subdir, sf_filename, mirror_asset)`` for this platform, best first.
155
+
156
+ More than one candidate is returned where a fallback helps:
157
+
158
+ * Linux x86_64 prefers the statically-linked *musl* build, which has no
159
+ shared-library dependencies (the glibc build needs e.g. ``libnsl.so.1``,
160
+ absent on many minimal systems), then falls back to the glibc build.
161
+ * macOS prefers the *universal* build (the only arm64-native option, added
162
+ in 2.17), then the x86_64 build (runs under Rosetta on Apple silicon).
163
+
164
+ Candidates upstream never published for a given version simply 404, and the
165
+ download loop moves on to the next one.
166
+ """
117
167
  system = platform.system()
118
168
  machine = platform.machine()
169
+ mac_dir = "OSX_Intel" if version in _OLD_MAC_DIRS else "MacOS"
170
+ # biber 2.19 renamed the musl tarball; earlier releases use the old name.
171
+ musl_file = (
172
+ "biber-linux-musl_x86_64.tar.gz"
173
+ if version == "2.19"
174
+ else "biber-linux_x86_64-musl.tar.gz"
175
+ )
119
176
  if system == "Linux":
120
177
  if machine == "x86_64":
121
- return "Linux", "biber-linux_x86_64.tar.gz"
122
- return "Linux-musl", f"biber-linuxmusl_{machine}.tar.gz"
123
- if system == "Darwin":
124
- arch = "arm64" if machine == "arm64" else "x86_64"
125
- return "MacOS", f"biber-darwin_{arch}.tar.gz"
126
- if system == "Windows":
127
- return "Windows", "biber-windows_x86_64.zip"
178
+ return [
179
+ ("Linux-musl", musl_file, f"biber-{version}-linux_x86_64-musl.tar.gz"),
180
+ (
181
+ "Linux",
182
+ "biber-linux_x86_64.tar.gz",
183
+ f"biber-{version}-linux_x86_64.tar.gz",
184
+ ),
185
+ ]
186
+ if machine in ("aarch64", "arm64"):
187
+ return [
188
+ (
189
+ "Linux",
190
+ "biber-linux_aarch64.tar.gz",
191
+ f"biber-{version}-linux_aarch64.tar.gz",
192
+ ),
193
+ ]
194
+ elif system == "Darwin":
195
+ return [
196
+ (
197
+ mac_dir,
198
+ "biber-darwin_universal.tar.gz",
199
+ f"biber-{version}-darwin_universal.tar.gz",
200
+ ),
201
+ (
202
+ mac_dir,
203
+ "biber-darwin_x86_64.tar.gz",
204
+ f"biber-{version}-darwin_x86_64.tar.gz",
205
+ ),
206
+ ]
207
+ elif system == "Windows":
208
+ return [("Windows", "biber-MSWIN64.zip", f"biber-{version}-MSWIN64.zip")]
128
209
  raise BuildError(
129
210
  f"unsupported platform for biber auto-download: {system} {machine}"
130
211
  )
131
212
 
132
213
 
133
214
  def _biber_cached(version: str) -> Path:
134
- return CACHE_DIR / "biber" / version / "biber"
215
+ name = "biber.exe" if platform.system() == "Windows" else "biber"
216
+ return CACHE_DIR / "biber" / version / name
135
217
 
136
218
 
137
- def _mirror_asset(version: str, filename: str) -> str:
138
- """Versioned mirror asset name, e.g. ``biber-2.17-linux_x86_64.tar.gz``."""
139
- return filename.replace("biber-", f"biber-{version}-", 1)
219
+ def _biber_sources(version: str) -> list[tuple[str, str | None]]:
220
+ """``(url, expected_sha256 or None)`` to try in order.
140
221
 
222
+ For each platform candidate the mirror is tried first, then SourceForge.
223
+ """
224
+ sources: list[tuple[str, str | None]] = []
225
+ for sf_dir, filename, asset in _biber_candidates(version):
226
+ sha = BIBER_SHA256.get(asset)
227
+ sources.append((BIBER_MIRROR_URL.format(asset=asset), sha))
228
+ sources.append(
229
+ (
230
+ BIBER_RELEASE_URL.format(
231
+ version=version, sf_dir=sf_dir, filename=filename
232
+ ),
233
+ sha,
234
+ )
235
+ )
236
+ return sources
141
237
 
142
- def _biber_sources(version: str) -> list[tuple[str, str | None]]:
143
- """(url, expected_sha256 or None) pairs to try in order: mirror, then SourceForge."""
144
- sf_dir, filename = _biber_sf_path()
145
- asset = _mirror_asset(version, filename)
146
- sha = BIBER_SHA256.get(asset)
147
- return [
148
- (BIBER_MIRROR_URL.format(asset=asset), sha),
149
- (
150
- BIBER_RELEASE_URL.format(version=version, sf_dir=sf_dir, filename=filename),
151
- sha,
152
- ),
153
- ]
238
+
239
+ def _is_biber_member(name: str) -> bool:
240
+ """Whether an archive member is the biber executable.
241
+
242
+ Most archives hold a plain ``biber`` (``biber.exe`` on Windows), but a few
243
+ musl tarballs name the binary after the tarball (e.g.
244
+ ``biber-linux_x86_64-musl``). AppleDouble sidecars (``._biber``) are
245
+ excluded. The largest matching member is chosen by the callers.
246
+ """
247
+ base = Path(name).name
248
+ if base.startswith("._"):
249
+ return False
250
+ return base in {"biber", "biber.exe"} or base.startswith("biber")
251
+
252
+
253
+ def _extract_biber_binary(archive: Path, version: str) -> bytes:
254
+ """Read the biber executable out of a ``.tar.gz`` or ``.zip`` archive."""
255
+ if zipfile.is_zipfile(archive):
256
+ with zipfile.ZipFile(archive) as zf:
257
+ members = [
258
+ i
259
+ for i in zf.infolist()
260
+ if not i.is_dir() and _is_biber_member(i.filename)
261
+ ]
262
+ if not members:
263
+ raise BuildError(
264
+ f"biber binary not found inside the biber {version} archive"
265
+ )
266
+ return zf.read(max(members, key=lambda i: i.file_size))
267
+ with tarfile.open(archive) as tf:
268
+ tar_members = [
269
+ m for m in tf.getmembers() if m.isfile() and _is_biber_member(m.name)
270
+ ]
271
+ member = max(tar_members, key=lambda m: m.size, default=None)
272
+ if member is None:
273
+ raise BuildError(
274
+ f"biber binary not found inside the biber {version} archive"
275
+ )
276
+ src = tf.extractfile(member)
277
+ if src is None:
278
+ raise BuildError(f"could not read biber from the biber {version} archive")
279
+ return src.read()
154
280
 
155
281
 
156
282
  def _download_to(url: str, dest: Path, sha: str | None, console: Console) -> bool:
@@ -196,25 +322,7 @@ def _ensure_biber(version: str, console: Console) -> Path:
196
322
  raise BuildError(
197
323
  f"failed to download biber {version} from the mirror or SourceForge"
198
324
  )
199
- with tarfile.open(tmp) as tf:
200
- member = next(
201
- (
202
- m
203
- for m in tf.getmembers()
204
- if Path(m.name).name == "biber" and m.isfile()
205
- ),
206
- None,
207
- )
208
- if member is None:
209
- raise BuildError(
210
- f"biber binary not found inside the biber {version} archive"
211
- )
212
- src = tf.extractfile(member)
213
- if src is None:
214
- raise BuildError(
215
- f"could not read biber from the biber {version} archive"
216
- )
217
- cached.write_bytes(src.read())
325
+ cached.write_bytes(_extract_biber_binary(tmp, version))
218
326
  except Exception:
219
327
  if cached.exists():
220
328
  cached.unlink()
@@ -21,25 +21,27 @@ of the document when it is not given via frontmatter/config.
21
21
  from __future__ import annotations
22
22
 
23
23
  import re
24
+ from pathlib import Path
24
25
  from typing import TYPE_CHECKING
25
26
 
27
+ from pytex.commands.biblatex import Addbibresource
26
28
  from pytex.commands.builtin import ChapterStar
27
29
  from pytex.model.concat import Concat
28
30
  from pytex.model.document import Document
31
+ from pytex.model.empty import Empty
29
32
  from pytex.model.raw import Raw
30
33
  from pytex_hsrtreport.document import HSRTReport
31
34
  from pytex_hsrtreport.titlepage import TitlePageDataLine
32
35
  from pytex_hsrtreport.variants import Variant
33
- from pytex_markdown import Markdown, escape_latex
34
- from pytex_protocol.document import build_protocol
35
- from pytex_protocol.frontmatter import split_frontmatter
36
+ from pytex_markdown import Markdown, escape_latex, split_frontmatter
37
+ from pytex_markdown.protocol import build_protocol
36
38
 
37
39
  if TYPE_CHECKING:
38
40
  from collections.abc import Mapping
39
41
 
40
42
  from pytex.interface.package import PackageOption
41
43
  from pytex.interface.tex import TeX
42
- from pytex_protocol.frontmatter import FrontmatterValue
44
+ from pytex_markdown.frontmatter import FrontmatterValue
43
45
 
44
46
  __all__ = ["VARIANT_NAMES", "build_document"]
45
47
 
@@ -119,11 +121,14 @@ def _report(
119
121
  # The `#` heading was pulled out for the title page; re-emit it at the
120
122
  # top of the body as a big, unnumbered heading so it is not lost.
121
123
  body_tex = Concat(ChapterStar(escape_latex(title)), Raw("\n\n"), body_tex)
124
+ bibliography = _bibliography(options)
122
125
  return HSRTReport(
123
126
  variant=logo_variant,
124
127
  show_titlepage=title is not None,
125
128
  show_footer_logos=footer_logos,
126
129
  show_toc=True,
130
+ show_bibliography=bibliography is not None,
131
+ user_preamble=_bib_preamble(bibliography) if bibliography else Empty,
127
132
  title=escape_latex(title) if title is not None else None,
128
133
  author=_escaped(_str(options, "author", "autor")),
129
134
  abstract=_escaped(_str(options, "abstract", "zusammenfassung")),
@@ -161,6 +166,41 @@ def _protocol(
161
166
 
162
167
  # -- helpers ---------------------------------------------------------------
163
168
 
169
+ # Self-contained .bib name written next to the .tex via filecontents so biber
170
+ # finds it in the build dir without an external file path.
171
+ _BIB_FILENAME = "pytex-md-refs.bib"
172
+
173
+
174
+ def _bibliography(options: Mapping[str, object]) -> str | None:
175
+ """BibTeX content from the ``bibliography`` frontmatter, or ``None``.
176
+
177
+ The value is either inline BibTeX (a block scalar, recognised by an ``@``
178
+ entry) or a path to a ``.bib`` file, which is read in. A path that does not
179
+ resolve to a file is ignored.
180
+ """
181
+ value = _str(options, "bibliography", "literatur", "bibliografie", "bib")
182
+ if value is None:
183
+ return None
184
+ if "@" in value:
185
+ return value
186
+ path = Path(value)
187
+ return path.read_text(encoding="utf-8") if path.is_file() else None
188
+
189
+
190
+ def _bib_preamble(content: str) -> TeX:
191
+ """Emit the bibliography as an inline ``filecontents`` .bib + ``\\addbibresource``.
192
+
193
+ Writing the .bib via ``filecontents`` keeps the document self-contained: the
194
+ file lands in the build dir at compile time, so biber resolves it without a
195
+ separate path (and the numeric biblatex default style applies).
196
+ """
197
+ block = (
198
+ f"\\begin{{filecontents*}}[overwrite,noheader]{{{_BIB_FILENAME}}}\n"
199
+ + content.rstrip("\n")
200
+ + "\n\\end{filecontents*}\n"
201
+ )
202
+ return Concat(Raw(block, allow_replacements=False), Addbibresource(_BIB_FILENAME))
203
+
164
204
 
165
205
  def _str(options: Mapping[str, object], *keys: str) -> str | None:
166
206
  for key in keys:
@@ -0,0 +1,163 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ width="2048mm"
6
+ height="512mm"
7
+ viewBox="0 0 2048 512"
8
+ version="1.1"
9
+ id="svg1"
10
+ xml:space="preserve"
11
+ sodipodi:docname="MAKERs-Team-Wide-Color-BlackText-LAlign.svg"
12
+ inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
13
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
14
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
15
+ xmlns="http://www.w3.org/2000/svg"
16
+ xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
17
+ id="namedview1"
18
+ pagecolor="#505050"
19
+ bordercolor="#ffffff"
20
+ borderopacity="1"
21
+ inkscape:showpageshadow="0"
22
+ inkscape:pageopacity="0"
23
+ inkscape:pagecheckerboard="1"
24
+ inkscape:deskcolor="#505050"
25
+ inkscape:document-units="mm"
26
+ inkscape:zoom="0.070523658"
27
+ inkscape:cx="4388.5982"
28
+ inkscape:cy="-326.13169"
29
+ inkscape:window-width="1920"
30
+ inkscape:window-height="1043"
31
+ inkscape:window-x="0"
32
+ inkscape:window-y="0"
33
+ inkscape:window-maximized="1"
34
+ inkscape:current-layer="g1"
35
+ showguides="true"><sodipodi:guide
36
+ position="2021.8091,285.07763"
37
+ orientation="1,0"
38
+ id="guide1"
39
+ inkscape:locked="false" /><sodipodi:guide
40
+ position="0,286.10685"
41
+ orientation="1,0"
42
+ id="guide2"
43
+ inkscape:locked="false" /><sodipodi:guide
44
+ position="30.279792,199.74611"
45
+ orientation="1,0"
46
+ id="guide3"
47
+ inkscape:locked="false" /><sodipodi:guide
48
+ position="2047.9999,431.14801"
49
+ orientation="1,0"
50
+ id="guide4"
51
+ inkscape:locked="false" /><sodipodi:guide
52
+ position="263.33682,29.423434"
53
+ orientation="0,-1"
54
+ id="guide5"
55
+ inkscape:locked="false" /><sodipodi:guide
56
+ position="1699.4631,474.68773"
57
+ orientation="0,-1"
58
+ id="guide6"
59
+ inkscape:locked="false" /><sodipodi:guide
60
+ position="585.53278,35.901142"
61
+ orientation="1,0"
62
+ id="guide7"
63
+ inkscape:locked="false" /></sodipodi:namedview><defs
64
+ id="defs1" /><g
65
+ id="layer2"><g
66
+ id="g1"
67
+ style="fill:#ffffff;fill-opacity:1"
68
+ transform="translate(329.08479,-1.033803)"><path
69
+ d="m 496.61892,281.82165 v 199.81317 h -62.37106 v -99.62436 l -30.76219,99.62436 h -53.62218 l -30.7622,-99.62436 v 99.62436 H 256.44801 V 281.82165 h 76.76438 L 377.23902,401.766 420.13676,281.82165 Z m 156.35103,169.61542 h -66.60439 l -9.87777,30.19775 h -65.75772 l 73.0955,-199.81317 h 72.24882 l 72.81328,199.81317 H 662.84772 Z M 637.72997,404.306 619.66776,348.70827 601.60555,404.306 Z m 226.06002,77.32882 -58.13773,-86.64215 v 86.64215 H 742.99898 V 281.82165 h 62.65328 v 84.10216 l 57.29106,-84.10216 h 70.83772 l -68.86216,95.67326 73.37771,104.13991 z M 1018.7296,331.77495 v 24.55331 h 62.0888 v 47.13107 h -62.0888 v 28.2222 h 70.5555 v 49.95329 H 956.07631 V 281.82165 h 133.20879 v 49.9533 z m 194.7331,149.85987 -37.5355,-71.68438 h -0.2822 v 71.68438 h -62.6533 V 281.82165 h 93.1333 q 24.2711,0 41.4866,8.74889 17.2155,8.46666 25.6822,23.42442 8.7489,14.67554 8.7489,33.3022 0,20.03776 -11.2889,35.55997 -11.0067,15.5222 -31.8911,22.29553 l 43.4622,76.48216 z M 1175.645,368.18158 h 24.8355 q 9.0311,0 13.5467,-3.95111 4.5155,-4.23333 4.5155,-12.98221 0,-7.90221 -4.7977,-12.41776 -4.5156,-4.51556 -13.2645,-4.51556 h -24.8355 z m 204.6109,115.42879 q -35.8421,0 -59.2666,-16.65109 -23.1422,-16.93332 -25.1177,-49.38885 h 66.6044 q 1.4111,17.21554 15.24,17.21554 5.0799,0 8.4666,-2.25778 3.6689,-2.53999 3.6689,-7.61999 0,-7.05555 -7.62,-11.28888 -7.62,-4.51555 -23.7066,-10.15999 -19.1911,-6.77333 -31.8911,-13.26443 -12.4178,-6.49111 -21.4489,-18.90888 -9.0311,-12.41776 -8.7489,-31.89108 0,-19.47332 9.8778,-33.01997 10.16,-13.82888 27.3755,-20.88443 17.4978,-7.05555 39.2289,-7.05555 36.6888,0 58.1377,16.93332 21.7311,16.93332 22.86,47.69552 h -67.4511 q -0.2822,-8.46666 -4.2333,-12.13555 -3.9511,-3.66889 -9.5955,-3.66889 -3.9512,0 -6.4911,2.82222 -2.54,2.54 -2.54,7.33778 0,6.77332 7.3377,11.28888 7.62,4.23332 23.9889,10.44221 18.9089,7.05555 31.0444,13.54665 12.4178,6.49111 21.4489,18.06221 9.0311,11.5711 9.0311,29.06887 0,18.34442 -9.0311,33.01997 -9.0311,14.39332 -26.2467,22.57776 -17.2155,8.18443 -40.9222,8.18443 z"
70
+ id="text1"
71
+ style="font-weight:900;font-size:282.222px;font-family:Poppins;-inkscape-font-specification:'Poppins, Heavy';letter-spacing:0px;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;fill:#000000;fill-opacity:1"
72
+ aria-label="MAKERS" /><path
73
+ d="m 340.83238,243.52145 q -35.84219,0 -59.26662,-16.6511 -23.1422,-16.93332 -25.11775,-49.38885 h 66.60439 q 1.41111,17.21555 15.23998,17.21555 5.08,0 8.46666,-2.25778 3.66889,-2.54 3.66889,-7.61999 0,-7.05555 -7.61999,-11.28888 -7.62,-4.51555 -23.70665,-10.15999 -19.1911,-6.77333 -31.89109,-13.26444 -12.41776,-6.4911 -21.44887,-18.90887 -9.0311,-12.41777 -8.74888,-31.891091 0,-19.473317 9.87777,-33.019972 10.15999,-13.828877 27.37553,-20.884427 17.49777,-7.05555 39.22886,-7.05555 36.68886,0 58.13773,16.933319 21.73109,16.93332 22.85998,47.695511 h -67.45105 q -0.28223,-8.466655 -4.23333,-12.13554 -3.95111,-3.668886 -9.59555,-3.668886 -3.95111,0 -6.49111,2.82222 -2.54,2.539997 -2.54,7.337771 0,6.773325 7.33778,11.288875 7.61999,4.23334 23.98886,10.44222 18.90888,7.05555 31.04442,13.54666 12.41777,6.4911 21.44887,18.06221 9.03111,11.5711 9.03111,29.06886 0,18.34443 -9.03111,33.01997 -9.0311,14.39332 -26.24664,22.57776 -17.21554,8.18444 -40.92219,8.18444 z M 595.96105,41.732724 v 49.67107 H 542.90332 V 241.5459 H 480.25003 V 91.403794 h -52.49328 v -49.67107 z m 78.17526,0 V 154.3393 q 0,13.82888 5.92666,22.01332 6.20888,7.90221 19.75554,7.90221 13.54665,0 20.03776,-7.90221 6.4911,-8.18444 6.4911,-22.01332 V 41.732724 H 788.7184 V 154.3393 q 0,28.50442 -11.8533,48.82441 -11.8533,20.03776 -32.45552,30.19775 -20.6022,10.15999 -46.00218,10.15999 -25.39998,0 -45.15552,-10.15999 -19.47332,-10.15999 -30.47997,-30.19775 -11.00666,-20.03777 -11.00666,-48.82441 V 41.732724 Z M 979.2183,110.31266 q 0,18.90889 -8.7489,34.43109 -8.7489,15.23999 -25.9644,24.2711 -16.9334,9.0311 -41.2044,9.0311 H 878.465 V 241.5459 H 815.8117 V 41.732724 h 87.4889 q 36.6888,0 56.1621,18.626651 19.7556,18.626651 19.7556,49.953285 z M 896.245,128.6571 q 19.4733,0 19.4733,-18.34444 0,-18.344423 -19.4733,-18.344423 h -17.78 V 128.6571 Z m 230.8576,82.69104 h -66.6044 l -9.8777,30.19776 h -65.7578 l 73.0955,-199.813176 h 72.2489 l 72.8132,199.813176 h -66.0399 z m -15.24,-47.13107 -18.0622,-55.59774 -18.0622,55.59774 z"
74
+ id="text1-5"
75
+ style="font-weight:900;font-size:282.222px;font-family:Poppins;-inkscape-font-specification:'Poppins, Heavy';letter-spacing:0px;stroke-width:1.05833;stroke-linecap:round;stroke-linejoin:round;fill:#000000;fill-opacity:1"
76
+ aria-label="STUPA" /></g><g
77
+ id="layer1-4"
78
+ transform="translate(9.0596895,-1.7374416)"><g
79
+ id="g11-7-0-0-9-0-20-7"
80
+ transform="matrix(0,0.59667125,0.59667125,0,393.2673,161.87008)"
81
+ style="stroke-width:0.443432"><path
82
+ id="path3-9-3-3-8-7-0-1-0-3-2-8"
83
+ style="fill:#ffcc00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
84
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z" /><path
85
+ id="path3-9-3-3-8-7-3-1-7-3-6-3-4"
86
+ style="fill:#f18700;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
87
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
88
+ transform="rotate(120,158.4647,-495.98275)" /><path
89
+ id="path3-9-3-3-8-7-3-5-2-9-3-2-7-5"
90
+ style="fill:#ce1625;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
91
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
92
+ transform="rotate(-120,158.45415,-495.99122)" /></g><g
93
+ id="g11-7-0-0-9-0-0-5-0"
94
+ transform="matrix(0.51673246,-0.29833562,0.29833562,0.51673246,241.95468,423.93573)"
95
+ style="stroke-width:0.443432"><path
96
+ id="path3-9-3-3-8-7-0-1-0-3-1-9-3"
97
+ style="fill:#008b92;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
98
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z" /><path
99
+ id="path3-9-3-3-8-7-3-1-7-3-6-9-2-6"
100
+ style="fill:#0075bf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
101
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
102
+ transform="rotate(120,158.4647,-495.98275)" /><path
103
+ id="path3-9-3-3-8-7-3-5-2-9-3-2-6-2-1"
104
+ style="fill:#29235c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
105
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
106
+ transform="rotate(-120,158.45415,-495.99122)" /></g><g
107
+ id="g11-7-0-0-9-0-2-89-0"
108
+ transform="matrix(0,0.59667125,0.59667125,0,630.13284,25.684221)"
109
+ style="stroke-width:0.443432"><path
110
+ id="path3-9-3-3-8-7-0-1-0-3-16-7-6"
111
+ style="fill:#ffcc00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
112
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z" /><path
113
+ id="path3-9-3-3-8-7-3-1-7-3-6-2-36-3"
114
+ style="fill:#f18700;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
115
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
116
+ transform="rotate(120,158.4647,-495.98275)" /><path
117
+ id="path3-9-3-3-8-7-3-5-2-9-3-2-1-1-2"
118
+ style="fill:#ce1625;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
119
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
120
+ transform="rotate(-120,158.45415,-495.99122)" /></g><g
121
+ id="g11-7-0-0-9-0-2-8-2-0"
122
+ transform="matrix(0,0.59667125,0.59667125,0,630.43565,300.31284)"
123
+ style="stroke-width:0.443432"><path
124
+ id="path3-9-3-3-8-7-0-1-0-3-16-6-9-6"
125
+ style="fill:#ffcc00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
126
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z" /><path
127
+ id="path3-9-3-3-8-7-3-1-7-3-6-2-3-3-1"
128
+ style="fill:#f18700;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
129
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
130
+ transform="rotate(120,158.4647,-495.98275)" /><path
131
+ id="path3-9-3-3-8-7-3-5-2-9-3-2-1-8-1-5"
132
+ style="fill:#ce1625;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
133
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
134
+ transform="rotate(-120,158.45414,-495.99122)" /></g><g
135
+ id="g11-7-0-0-9-0-0-0-94-5"
136
+ transform="matrix(0.51673246,-0.29833562,0.29833562,0.51673246,478.82011,560.2897)"
137
+ style="stroke-width:0.443432"><path
138
+ id="path3-9-3-3-8-7-0-1-0-3-1-1-78-4"
139
+ style="fill:#008b92;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
140
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z" /><path
141
+ id="path3-9-3-3-8-7-3-1-7-3-6-9-9-4-7"
142
+ style="fill:#0075bf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
143
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
144
+ transform="rotate(120,158.4647,-495.98275)" /><path
145
+ id="path3-9-3-3-8-7-3-5-2-9-3-2-6-7-5-6"
146
+ style="fill:#29235c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
147
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
148
+ transform="rotate(-120,158.45415,-495.99122)" /></g><g
149
+ id="g11-7-0-0-9-0-0-0-9-0-5"
150
+ transform="matrix(0.51673246,-0.29833562,0.29833562,0.51673246,241.95467,698.73251)"
151
+ style="stroke-width:0.443432"><path
152
+ id="path3-9-3-3-8-7-0-1-0-3-1-1-5-3-6"
153
+ style="fill:#008b92;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
154
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z" /><path
155
+ id="path3-9-3-3-8-7-3-1-7-3-6-9-9-1-6-9"
156
+ style="fill:#0075bf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
157
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
158
+ transform="rotate(120,158.4647,-495.98275)" /><path
159
+ id="path3-9-3-3-8-7-3-5-2-9-3-2-6-7-2-10-3"
160
+ style="fill:#29235c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.87637;stroke-dasharray:none;stroke-opacity:1"
161
+ d="m 72.187145,-608.63455 c -8.389369,38.44406 -27.282093,70.83442 -54.178521,94.61352 -4.137019,3.65754 -5.449842,10.26951 -2.688548,15.05251 14.675938,25.42107 29.351877,50.84214 44.027816,76.26321 2.761293,4.783 8.673559,6.0982 13.068673,2.75435 28.548345,-21.71988 52.510725,-48.95763 72.013875,-81.76553 2.82204,-4.74718 3.00458,-12.6906 0.7284,-17.72185 -7.11103,-15.71813 -21.09098,-50.13052 -25.68624,-89.06116 -0.64735,-5.48427 -5.43095,-9.95351 -10.9538,-9.95353 l -24.440675,-6e-5 c -5.522847,-2e-5 -10.713598,4.42321 -11.89098,9.81854 z"
162
+ transform="rotate(-120,158.45415,-495.99122)" /></g></g></g><g
163
+ id="layer1" /></svg>
@@ -57,7 +57,7 @@ from .listings import HSRTListingStyles
57
57
  from .logos import DefaultLogos, footer_logo_hook
58
58
  from .pagesetup import HSRTPageSetup
59
59
  from .titlepage import TitlePage, TitlePageDataLine
60
- from .variants import Variant, default_logo_names
60
+ from .variants import Variant, default_logo_names, footer_logo_names
61
61
 
62
62
  __all__ = ["HSRTReport"]
63
63
 
@@ -195,7 +195,7 @@ class HSRTReport(KomaDocument):
195
195
  # that HSRTFontSetup's \renewcommand{\blenderfont} requires.
196
196
  yield HSRTPageSetup()
197
197
  # The skyline is drawn on every page; footer logos only when requested.
198
- logo_names = default_logo_names(self.variant) if self.show_footer_logos else ()
198
+ logo_names = footer_logo_names(self.variant) if self.show_footer_logos else ()
199
199
  yield Raw(footer_logo_hook(logo_names), allow_replacements=False)
200
200
  if self.inline_fonts:
201
201
  yield HSRTFontSetup()
@@ -277,9 +277,14 @@ class HSRTReport(KomaDocument):
277
277
 
278
278
  from .logos import LOGO_OUTPUT_DIR, logo_output_name, logo_path
279
279
 
280
- # Titlepage overlay + footer hook use the variant defaults; the footer
281
- # skyline is emitted on every page regardless of show_footer_logos.
282
- names = sorted(set(default_logo_names(self.variant)) | {"Skyline"})
280
+ # Titlepage overlay uses the title logos, the footer hook its own set
281
+ # (which may differ, e.g. MAKERS); the skyline is emitted on every page
282
+ # regardless of show_footer_logos.
283
+ names = sorted(
284
+ set(default_logo_names(self.variant))
285
+ | set(footer_logo_names(self.variant))
286
+ | {"Skyline"}
287
+ )
283
288
  base = Path(target_dir)
284
289
  return tuple(
285
290
  # IncludeImage.read_bytes converts svg -> pdf on the fly.
@@ -22,6 +22,7 @@ KNOWN_LOGOS: Final[dict[str, str]] = {
22
22
  "STUPA": "STUPA.pdf",
23
23
  "ECHO": "ECHO.svg",
24
24
  "MAKERS": "MAKERS.svg",
25
+ "MAKERS-RAlign": "MAKERS-RAlign.svg",
25
26
  "MAKERS-Icon": "MAKERS-Icon.svg",
26
27
  "Skyline": "Skyline.pdf",
27
28
  }