weasyprint 65.1__tar.gz → 66.0__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 (192) hide show
  1. {weasyprint-65.1 → weasyprint-66.0}/PKG-INFO +1 -1
  2. {weasyprint-65.1 → weasyprint-66.0}/docs/changelog.rst +120 -1
  3. {weasyprint-65.1 → weasyprint-66.0}/docs/first_steps.rst +8 -0
  4. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_common.py +4 -1
  5. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_counters.py +3 -3
  6. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_descriptors.py +2 -2
  7. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_variables.py +8 -8
  8. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_bounding_box.py +25 -5
  9. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_opacity.py +2 -2
  10. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_text.py +1 -1
  11. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_transform.py +25 -0
  12. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_absolute.py +38 -1
  13. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_background.py +5 -5
  14. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_box.py +4 -9
  15. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_column.py +1 -1
  16. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_current_color.py +2 -2
  17. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_float.py +72 -0
  18. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_footnote.py +12 -6
  19. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_gradient.py +1 -1
  20. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_image.py +7 -7
  21. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_leader.py +1 -1
  22. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_opacity.py +1 -1
  23. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_overflow.py +1 -1
  24. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_table.py +4 -7
  25. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_text.py +9 -7
  26. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_block.py +31 -3
  27. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_column.py +30 -6
  28. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_flex.py +101 -3
  29. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_float.py +1 -2
  30. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_footnotes.py +80 -2
  31. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_grid.py +2 -2
  32. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_image.py +1 -1
  33. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_inline.py +17 -17
  34. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_inline_block.py +1 -1
  35. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_list.py +5 -5
  36. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_page.py +5 -5
  37. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_position.py +3 -3
  38. weasyprint-65.1/tests/layout/test_shrink_to_fit.py → weasyprint-66.0/tests/layout/test_preferred.py +45 -0
  39. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/test_table.py +171 -96
  40. {weasyprint-65.1 → weasyprint-66.0}/tests/test_api.py +25 -8
  41. {weasyprint-65.1 → weasyprint-66.0}/tests/test_boxes.py +6 -7
  42. {weasyprint-65.1 → weasyprint-66.0}/tests/test_fonts.py +2 -2
  43. {weasyprint-65.1 → weasyprint-66.0}/tests/test_pdf.py +2 -2
  44. {weasyprint-65.1 → weasyprint-66.0}/tests/test_stacking.py +8 -2
  45. {weasyprint-65.1 → weasyprint-66.0}/tests/test_text.py +44 -17
  46. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/__init__.py +4 -1
  47. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/__main__.py +2 -0
  48. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/__init__.py +12 -4
  49. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/computed_values.py +8 -2
  50. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/html5_ua.css +2 -7
  51. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/html5_ua_form.css +1 -1
  52. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/utils.py +1 -1
  53. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/document.py +2 -10
  54. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/draw/__init__.py +51 -57
  55. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/draw/border.py +120 -66
  56. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/draw/text.py +1 -2
  57. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/formatting_structure/boxes.py +3 -2
  58. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/formatting_structure/build.py +32 -42
  59. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/images.py +8 -15
  60. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/__init__.py +5 -2
  61. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/absolute.py +4 -1
  62. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/block.py +60 -29
  63. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/column.py +1 -0
  64. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/flex.py +41 -21
  65. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/float.py +8 -1
  66. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/grid.py +1 -1
  67. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/inline.py +7 -8
  68. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/page.py +23 -1
  69. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/preferred.py +59 -32
  70. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/table.py +8 -4
  71. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/pdf/__init__.py +13 -6
  72. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/pdf/anchors.py +2 -2
  73. weasyprint-66.0/weasyprint/pdf/pdfua.py +17 -0
  74. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/pdf/stream.py +40 -49
  75. weasyprint-66.0/weasyprint/pdf/tags.py +305 -0
  76. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/stacking.py +14 -15
  77. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/__init__.py +22 -11
  78. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/bounding_box.py +4 -2
  79. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/defs.py +4 -9
  80. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/utils.py +9 -5
  81. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/text/fonts.py +1 -1
  82. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/text/line_break.py +45 -26
  83. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/urls.py +21 -10
  84. weasyprint-65.1/weasyprint/draw/stack.py +0 -13
  85. weasyprint-65.1/weasyprint/pdf/pdfua.py +0 -125
  86. {weasyprint-65.1 → weasyprint-66.0}/LICENSE +0 -0
  87. {weasyprint-65.1 → weasyprint-66.0}/README.rst +0 -0
  88. {weasyprint-65.1 → weasyprint-66.0}/docs/api_reference.rst +0 -0
  89. {weasyprint-65.1 → weasyprint-66.0}/docs/common_use_cases.rst +0 -0
  90. {weasyprint-65.1 → weasyprint-66.0}/docs/conf.py +0 -0
  91. {weasyprint-65.1 → weasyprint-66.0}/docs/contribute.rst +0 -0
  92. {weasyprint-65.1 → weasyprint-66.0}/docs/going_further.rst +0 -0
  93. {weasyprint-65.1 → weasyprint-66.0}/docs/index.rst +0 -0
  94. {weasyprint-65.1 → weasyprint-66.0}/docs/manpage.rst +0 -0
  95. {weasyprint-65.1 → weasyprint-66.0}/docs/support.rst +0 -0
  96. {weasyprint-65.1 → weasyprint-66.0}/pyproject.toml +0 -0
  97. {weasyprint-65.1 → weasyprint-66.0}/tests/__init__.py +0 -0
  98. {weasyprint-65.1 → weasyprint-66.0}/tests/conftest.py +0 -0
  99. {weasyprint-65.1 → weasyprint-66.0}/tests/css/__init__.py +0 -0
  100. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_errors.py +0 -0
  101. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_expanders.py +0 -0
  102. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_fonts.py +0 -0
  103. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_nesting.py +0 -0
  104. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_pages.py +0 -0
  105. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_target.py +0 -0
  106. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_ua.py +0 -0
  107. {weasyprint-65.1 → weasyprint-66.0}/tests/css/test_validation.py +0 -0
  108. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/__init__.py +0 -0
  109. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/__init__.py +0 -0
  110. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_clip.py +0 -0
  111. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_defs.py +0 -0
  112. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_gradients.py +0 -0
  113. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_images.py +0 -0
  114. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_markers.py +0 -0
  115. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_paths.py +0 -0
  116. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_patterns.py +0 -0
  117. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_shapes.py +0 -0
  118. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_units.py +0 -0
  119. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/svg/test_visibility.py +0 -0
  120. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_before_after.py +0 -0
  121. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_footnote_column.py +0 -0
  122. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_list.py +0 -0
  123. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_page.py +0 -0
  124. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_transform.py +0 -0
  125. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_visibility.py +0 -0
  126. {weasyprint-65.1 → weasyprint-66.0}/tests/draw/test_whitespace.py +0 -0
  127. {weasyprint-65.1 → weasyprint-66.0}/tests/layout/__init__.py +0 -0
  128. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/acid2-reference.html +0 -0
  129. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/acid2-test.html +0 -0
  130. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/blue.jpg +0 -0
  131. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/border.svg +0 -0
  132. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/border2.svg +0 -0
  133. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/doc1.html +0 -0
  134. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/doc1_UTF-16BE.html +0 -0
  135. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/icon.png +0 -0
  136. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/latin1-test.css +0 -0
  137. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/logo_small.png +0 -0
  138. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/mask.svg +0 -0
  139. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/mini_ua.css +0 -0
  140. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/not-optimized-exif.jpg +0 -0
  141. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/not-optimized.jpg +0 -0
  142. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/pattern-transparent.svg +0 -0
  143. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/pattern.gif +0 -0
  144. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/pattern.palette.png +0 -0
  145. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/pattern.png +0 -0
  146. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/pattern.svg +0 -0
  147. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/really-a-png.svg +0 -0
  148. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/really-a-svg.png +0 -0
  149. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/sheet2.css +0 -0
  150. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/sub_directory/sheet1.css +0 -0
  151. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/tests_ua.css +0 -0
  152. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/user.css +0 -0
  153. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/utf8-test.css +0 -0
  154. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/weasyprint.otb +0 -0
  155. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/weasyprint.otf +0 -0
  156. {weasyprint-65.1 → weasyprint-66.0}/tests/resources/weasyprint.woff +0 -0
  157. {weasyprint-65.1 → weasyprint-66.0}/tests/test_acid2.py +0 -0
  158. {weasyprint-65.1 → weasyprint-66.0}/tests/test_presentational_hints.py +0 -0
  159. {weasyprint-65.1 → weasyprint-66.0}/tests/test_unicode.py +0 -0
  160. {weasyprint-65.1 → weasyprint-66.0}/tests/test_url.py +0 -0
  161. {weasyprint-65.1 → weasyprint-66.0}/tests/testing_utils.py +0 -0
  162. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/anchors.py +0 -0
  163. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/counters.py +0 -0
  164. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/html5_ph.css +0 -0
  165. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/media_queries.py +0 -0
  166. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/properties.py +0 -0
  167. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/targets.py +0 -0
  168. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/validation/__init__.py +0 -0
  169. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/validation/descriptors.py +0 -0
  170. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/validation/expanders.py +0 -0
  171. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/css/validation/properties.py +0 -0
  172. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/draw/color.py +0 -0
  173. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/html.py +0 -0
  174. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/background.py +0 -0
  175. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/leader.py +0 -0
  176. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/min_max.py +0 -0
  177. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/percent.py +0 -0
  178. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/layout/replaced.py +0 -0
  179. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/logger.py +0 -0
  180. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/matrix.py +0 -0
  181. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/pdf/debug.py +0 -0
  182. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/pdf/fonts.py +0 -0
  183. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/pdf/metadata.py +0 -0
  184. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/pdf/pdfa.py +0 -0
  185. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/pdf/sRGB2014.icc +0 -0
  186. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/css.py +0 -0
  187. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/images.py +0 -0
  188. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/path.py +0 -0
  189. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/shapes.py +0 -0
  190. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/svg/text.py +0 -0
  191. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/text/constants.py +0 -0
  192. {weasyprint-65.1 → weasyprint-66.0}/weasyprint/text/ffi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: weasyprint
3
- Version: 65.1
3
+ Version: 66.0
4
4
  Summary: The Awesome Document Factory
5
5
  Keywords: html,css,pdf,converter
6
6
  Author-email: Simon Sapin <simon.sapin@exyr.org>
@@ -2,6 +2,125 @@ Changelog
2
2
  =========
3
3
 
4
4
 
5
+ Version 66.0
6
+ ------------
7
+
8
+ Released on 2025-07-24.
9
+
10
+ Features:
11
+
12
+ * `#2475 <https://github.com/Kozea/WeasyPrint/pull/2475>`_:
13
+ Add support for 'lh' and 'rlh' units
14
+ * `#2432 <https://github.com/Kozea/WeasyPrint/issues/2432>`_,
15
+ `#2437 <https://github.com/Kozea/WeasyPrint/pull/2437>`_:
16
+ Report footnotes when text overflows because of orphans, with financial support from Code & Co.
17
+ * `#2256 <https://github.com/Kozea/WeasyPrint/issues/2256>`_,
18
+ `#2466 <https://github.com/Kozea/WeasyPrint/pull/2466>`_:
19
+ Handle transform-origin in SVG
20
+ * `#2445 <https://github.com/Kozea/WeasyPrint/pull/2445>`_:
21
+ Add parameter to have additional HTTP headers for url_fetcher
22
+
23
+ Bug fixes:
24
+
25
+ * `#2471 <https://github.com/Kozea/WeasyPrint/pull/2471>`_,
26
+ `#2506 <https://github.com/Kozea/WeasyPrint/pull/2506>`_,
27
+ `#2500 <https://github.com/Kozea/WeasyPrint/issues/2500>`_,
28
+ `#2460 <https://github.com/Kozea/WeasyPrint/issues/2460>`_,
29
+ `#2363 <https://github.com/Kozea/WeasyPrint/issues/2363>`_,
30
+ `#2470 <https://github.com/Kozea/WeasyPrint/issues/2470>`_,
31
+ `#1872 <https://github.com/Kozea/WeasyPrint/issues/1872>`_,
32
+ `#2153 <https://github.com/Kozea/WeasyPrint/issues/2153>`_,
33
+ `#1838 <https://github.com/Kozea/WeasyPrint/issues/1838>`_,
34
+ `#1837 <https://github.com/Kozea/WeasyPrint/issues/1837>`_,
35
+ `#1784 <https://github.com/Kozea/WeasyPrint/issues/1784>`_,
36
+ `#1835 <https://github.com/Kozea/WeasyPrint/issues/1835>`_,
37
+ `#2444 <https://github.com/Kozea/WeasyPrint/issues/2444>`_,
38
+ `#2497 <https://github.com/Kozea/WeasyPrint/issues/2497>`_,
39
+ `#2505 <https://github.com/Kozea/WeasyPrint/issues/2505>`_,
40
+ `#2503 <https://github.com/Kozea/WeasyPrint/issues/2503>`_,
41
+ `#1836 <https://github.com/Kozea/WeasyPrint/issues/1836>`_,
42
+ `#2467 <https://github.com/Kozea/WeasyPrint/issues/2467>`_:
43
+ Improve PDF/UA support, with financial support from NLnet
44
+ * `#2425 <https://github.com/Kozea/WeasyPrint/pull/2425>`_,
45
+ `#1557 <https://github.com/Kozea/WeasyPrint/issues/1557>`_:
46
+ Improve position of outside markers
47
+ * `#2409 <https://github.com/Kozea/WeasyPrint/pull/2409>`_,
48
+ `#2265 <https://github.com/Kozea/WeasyPrint/issues/2265>`_:
49
+ Draw circles instead of rectangles when drawing dotted borders
50
+ * `#2416 <https://github.com/Kozea/WeasyPrint/pull/2416>`_,
51
+ `#2270 <https://github.com/Kozea/WeasyPrint/issues/2270>`_:
52
+ Correctly split words for automatic hyphenation
53
+ * `#2439 <https://github.com/Kozea/WeasyPrint/pull/2439>`_,
54
+ `#2426 <https://github.com/Kozea/WeasyPrint/issues/2426>`_:
55
+ Don’t rely on URL protocols outside URL fetcher function
56
+ * `#2433 <https://github.com/Kozea/WeasyPrint/pull/2433>`_:
57
+ Disable style for deprecated outline algorithm
58
+ * `#2447 <https://github.com/Kozea/WeasyPrint/pull/2447>`_,
59
+ `#2441 <https://github.com/Kozea/WeasyPrint/issues/2441>`_,
60
+ `#2448 <https://github.com/Kozea/WeasyPrint/issues/2448>`_:
61
+ Improve min- and max-content calculation, with financial support from Menutech
62
+ * `#2454 <https://github.com/Kozea/WeasyPrint/pull/2454>`_,
63
+ `#2442 <https://github.com/Kozea/WeasyPrint/issues/2442>`_,
64
+ `#2449 <https://github.com/Kozea/WeasyPrint/issues/2449>`_:
65
+ Minor fixes for flex layout
66
+ * `#2473 <https://github.com/Kozea/WeasyPrint/pull/2473>`_,
67
+ `#2459 <https://github.com/Kozea/WeasyPrint/issues/2459>`_:
68
+ Include out-of-flow boxes in page layout progress, with financial support from Pathfindr
69
+ * `#2458 <https://github.com/Kozea/WeasyPrint/pull/2458>`_:
70
+ Replace deprecated warn logger function
71
+ * `#2494 <https://github.com/Kozea/WeasyPrint/pull/2494>`_,
72
+ `#1856 <https://github.com/Kozea/WeasyPrint/issues/1856>`_:
73
+ Fix bug with bottom margins in columns
74
+ * `#2435 <https://github.com/Kozea/WeasyPrint/issues/2435>`_:
75
+ Make footnote calls inherit from footnotes
76
+ * `#2484 <https://github.com/Kozea/WeasyPrint/issues/2484>`_,
77
+ `#2456 <https://github.com/Kozea/WeasyPrint/issues/2456>`_:
78
+ Allow to avoid page breaks after table-row-group elements
79
+ * `#2450 <https://github.com/Kozea/WeasyPrint/issues/2450>`_:
80
+ Draw background and borders for relative grid containers
81
+ * `#2453 <https://github.com/Kozea/WeasyPrint/issues/2453>`_:
82
+ Don’t advance position_y for collapsed margins of discarded children
83
+ * `#2493 <https://github.com/Kozea/WeasyPrint/issues/2493>`_:
84
+ Fix endless loop with CSS variables referencing each other
85
+ * `#2502 <https://github.com/Kozea/WeasyPrint/issues/2502>`_:
86
+ Ignore bottom margin when calculating footnote overflow
87
+
88
+ Contributors:
89
+
90
+ * Guillaume Ayoub
91
+ * Lucie Anglade
92
+ * Alvaro Garcia Fernandez
93
+ * Emmanuel Ferdman
94
+ * Gabriel Corona
95
+ * Markus Mohanty
96
+ * Luca Vercelli
97
+ * Tre Huang
98
+
99
+ Backers and sponsors:
100
+
101
+ * Spacinov
102
+ * Kobalt
103
+ * Grip Angebotssoftware
104
+ * Syslifters
105
+ * Simon Sapin
106
+ * Manuel Barkhau
107
+ * Simonsoft
108
+ * Menutech
109
+ * KontextWork
110
+ * TrainingSparkle
111
+ * Healthchecks.io
112
+ * Hammerbacher
113
+ * DocRaptor
114
+ * Yanal-Yves Fargialla
115
+ * Method B
116
+ * FieldHub
117
+ * Morntag
118
+ * Xavid
119
+ * Kai DeLorenzo
120
+ * Charlie S.
121
+ * Alan Villalobos
122
+
123
+
5
124
  Version 65.1
6
125
  ------------
7
126
 
@@ -65,7 +184,7 @@ Dependencies:
65
184
  Features:
66
185
 
67
186
  * `#1665 <https://github.com/Kozea/WeasyPrint/issues/1665>`_:
68
- Support gap properties in Flex layout, with financial support from NLnet.
187
+ Support gap properties in Flex layout, with financial support from NLnet
69
188
  * `#378 <https://github.com/Kozea/WeasyPrint/issues/378>`_,
70
189
  `#2405 <https://github.com/Kozea/WeasyPrint/pull/2405>`_:
71
190
  Handle @font-face unicode-range
@@ -269,6 +269,14 @@ information.
269
269
  .. _an AWS Lambda layer: https://github.com/kotify/cloud-print-utils
270
270
  .. _#1003: https://github.com/Kozea/WeasyPrint/issues/1003
271
271
 
272
+ Docker
273
+ ++++++
274
+
275
+ Luca Vercelli maintains `Docker images`_.
276
+
277
+ .. _an AWS Lambda layer: https://github.com/kotify/cloud-print-utils
278
+ .. _Docker images: https://github.com/luca-vercelli/WeasyPrint-docker-images/
279
+
272
280
 
273
281
  Troubleshooting
274
282
  ~~~~~~~~~~~~~~~
@@ -176,10 +176,13 @@ def test_important():
176
176
  # TODO: ch and ex units don't work with font-face, see computed_values.py.
177
177
  # ('1.1ch', 11),
178
178
  # ('1.5ex', 12),
179
+ # ('1.1lh', 13.2),
180
+ # ('1.1rlh', 17.6),
179
181
  ))
180
182
  def test_units(value, width):
181
183
  document = FakeHTML(base_url=BASE_URL, string='''
182
- <body style="font: 10px weasyprint">
184
+ <html style="font: 16px / 1.5 weasyprint">
185
+ <body style="font: 10px / 1.2 weasyprint">
183
186
  <p style="margin-left: %s"></p>''' % value)
184
187
  page, = document.render().pages
185
188
  html, = page._page_box.children
@@ -201,8 +201,8 @@ def test_counters_6():
201
201
 
202
202
  @assert_no_logs
203
203
  def test_counters_7():
204
- # Test that counters are case-sensitive
205
- # See https://github.com/Kozea/WeasyPrint/pull/827
204
+ # Regression test for #827.
205
+ # Test that counters are case-sensitive.
206
206
  assert_tree(parse_all('''
207
207
  <style>
208
208
  p { counter-increment: p 2 }
@@ -519,7 +519,7 @@ def test_list_style_types(style_type, values):
519
519
 
520
520
 
521
521
  def test_list_style_type_empty_string():
522
- # Test regression: https://github.com/Kozea/WeasyPrint/issues/1883
522
+ # Regression test for #1883.
523
523
  render_pages('<ul><li style="list-style-type: \'\'">')
524
524
 
525
525
 
@@ -68,7 +68,7 @@ def test_font_face_3():
68
68
 
69
69
  @assert_no_logs
70
70
  def test_font_face_4():
71
- # Test regression: https://github.com/Kozea/WeasyPrint/issues/487
71
+ # Regression test for #487.
72
72
  stylesheet = tinycss2.parse_stylesheet(
73
73
  '@font-face {'
74
74
  ' font-family: Gentium Hard;'
@@ -85,7 +85,7 @@ def test_font_face_4():
85
85
 
86
86
  @assert_no_logs
87
87
  def test_font_face_5():
88
- # Test regression: https://github.com/Kozea/WeasyPrint/issues/1653
88
+ # Regression test for #1653.
89
89
  stylesheet = tinycss2.parse_stylesheet(
90
90
  '@font-face {'
91
91
  ' font-family: Gentium Hard;'
@@ -129,7 +129,7 @@ def test_variable_chain():
129
129
 
130
130
  @assert_no_logs
131
131
  def test_variable_chain_root():
132
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1656
132
+ # Regression test for #1656.
133
133
  page, = render_pages('''
134
134
  <style>
135
135
  html { --var2: 10px; --var1: var(--var2); width: var(--var1) }
@@ -150,13 +150,13 @@ def test_variable_self():
150
150
  def test_variable_loop():
151
151
  page, = render_pages('''
152
152
  <style>
153
- html { --var1: var(--var2); --var2: var(--var1) }
153
+ html { --var1: var(--var2); --var2: var(--var1); padding: var(--var1) }
154
154
  </style>
155
155
  ''')
156
156
 
157
157
 
158
158
  def test_variable_chain_root_missing():
159
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1656
159
+ # Regression test for #1656.
160
160
  page, = render_pages('''
161
161
  <style>
162
162
  html { --var1: var(--var-missing); width: var(--var1) }
@@ -165,7 +165,7 @@ def test_variable_chain_root_missing():
165
165
 
166
166
 
167
167
  def test_variable_chain_root_missing_inherited():
168
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/2164
168
+ # Regression test for #2164.
169
169
  page, = render_pages('''
170
170
  <style>
171
171
  html { --var1: var(--var-missing); font: var(--var1) }
@@ -342,7 +342,7 @@ def test_variable_shorthand_background_invalid(var, background):
342
342
 
343
343
  @assert_no_logs
344
344
  def test_variable_initial():
345
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/2075
345
+ # Regression test for #2075.
346
346
  page, = render_pages('''
347
347
  <style>
348
348
  html { --var: initial }
@@ -358,7 +358,7 @@ def test_variable_initial():
358
358
 
359
359
  @assert_no_logs
360
360
  def test_variable_initial_default():
361
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/2075
361
+ # Regression test for #2075.
362
362
  page, = render_pages('''
363
363
  <style>
364
364
  p { --var: initial; width: var(--var, 10px) }
@@ -373,7 +373,7 @@ def test_variable_initial_default():
373
373
 
374
374
  @assert_no_logs
375
375
  def test_variable_initial_default_var():
376
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/2075
376
+ # Regression test for #2075.
377
377
  page, = render_pages('''
378
378
  <style>
379
379
  p { --var: initial; width: var(--var, var(--var)) }
@@ -401,7 +401,7 @@ def test_variable_fallback(prop):
401
401
 
402
402
  @assert_no_logs
403
403
  def test_variable_list_content():
404
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1287
404
+ # Regression test for #1287.
405
405
  page, = render_pages('''
406
406
  <style>
407
407
  :root { --var: "Page " counter(page) "/" counter(pages) }
@@ -172,7 +172,6 @@ def test_bounding_box_polyline(assert_pixels):
172
172
  ''')
173
173
 
174
174
 
175
- @pytest.mark.xfail
176
175
  @assert_no_logs
177
176
  def test_bounding_box_text(assert_pixels):
178
177
  assert_pixels('''
@@ -187,12 +186,11 @@ def test_bounding_box_text(assert_pixels):
187
186
  <defs>
188
187
  <linearGradient id="grad" x1="0" y1="0" x2="1" y2="1"
189
188
  gradientUnits="objectBoundingBox">
190
- <stop stop-color="blue" offset="55%"></stop>
191
- <stop stop-color="red" offset="55%"></stop>
189
+ <stop stop-color="blue" offset="65%"></stop>
190
+ <stop stop-color="red" offset="65%"></stop>
192
191
  </linearGradient>
193
192
  </defs>
194
- <text x="0" y="1" font-family="weasyprint" font-size="2"
195
- fill="url(#grad)">
193
+ <text x="0" y="2" font-family="weasyprint" font-size="2" fill="url(#grad)">
196
194
  A
197
195
  </text>
198
196
  </svg>
@@ -328,3 +326,25 @@ def test_svg_empty_size(assert_pixels):
328
326
  <rect x="0" y="0" width="3" height="4" fill="blue" />
329
327
  </svg>
330
328
  ''')
329
+
330
+
331
+ @assert_no_logs
332
+ def test_bounding_box_use_opacity(assert_pixels):
333
+ assert_pixels('''
334
+ sssss
335
+ sssss
336
+ sssss
337
+ sssss
338
+ sssss
339
+ ''', '''
340
+ <style>
341
+ @page { size: 5px }
342
+ svg { display: block }
343
+ </style>
344
+ <svg width="5px" height="5px" xmlns="http://www.w3.org/2000/svg">
345
+ <defs>
346
+ <rect id="rect" x="-10" y="-10" width="5" height="5" fill="red" />
347
+ </defs>
348
+ <use href="#rect" opacity="0.5" x="10" y="10" />
349
+ </svg>
350
+ ''')
@@ -132,7 +132,7 @@ def test_pattern_gradient_stroke_fill_opacity(assert_same_renderings):
132
132
 
133
133
  @assert_no_logs
134
134
  def test_translate_opacity(assert_same_renderings):
135
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1976
135
+ # Regression test for #1976.
136
136
  assert_same_renderings(
137
137
  opacity_source % '''
138
138
  <rect transform="translate(2, 2)" width="5" height="5"
@@ -147,7 +147,7 @@ def test_translate_opacity(assert_same_renderings):
147
147
 
148
148
  @assert_no_logs
149
149
  def test_translate_use_opacity(assert_same_renderings):
150
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1976
150
+ # Regression test for #1976.
151
151
  assert_same_renderings(
152
152
  opacity_source % '''
153
153
  <defs>
@@ -404,7 +404,7 @@ def test_text_anchor_middle_end_tspan(assert_pixels):
404
404
 
405
405
  @assert_no_logs
406
406
  def test_text_tspan_anchor_non_text(assert_pixels):
407
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/2375
407
+ # Regression test for #2375.
408
408
  assert_pixels('''
409
409
  _______BBBBBB_______
410
410
  _______BBBBBB_______
@@ -411,3 +411,28 @@ def test_transform_unknown(assert_pixels):
411
411
  stroke-width="2" stroke="red" fill="none" />
412
412
  </svg>
413
413
  ''')
414
+
415
+
416
+ @assert_no_logs
417
+ def test_transform_origin(assert_pixels):
418
+ assert_pixels('''
419
+ ___RRRRRR
420
+ ___RRRRRR
421
+ ___RR___R
422
+ ___RR___R
423
+ ___RRRRRR
424
+ ___RRRRRR
425
+ _________
426
+ _________
427
+ _________
428
+ ''', '''
429
+ <style>
430
+ @page { size: 9px }
431
+ svg { display: block }
432
+ </style>
433
+ <svg width="9px" height="9px" xmlns="http://www.w3.org/2000/svg">
434
+ <rect x="0" y="0" width="4" height="5"
435
+ transform="rotate(90)" transform-origin="4 5"
436
+ stroke-width="2" stroke="red" fill="none" />
437
+ </svg>
438
+ ''')
@@ -827,7 +827,7 @@ def test_absolute_image_background(assert_pixels):
827
827
 
828
828
  @assert_no_logs
829
829
  def test_absolute_in_absolute_break(assert_pixels):
830
- # Test regression: https://github.com/Kozea/WeasyPrint/issues/2134
830
+ # Regression test for #2134.
831
831
  assert_pixels('''
832
832
  BBBB
833
833
  BBBB
@@ -874,3 +874,40 @@ def test_absolute_in_absolute_break(assert_pixels):
874
874
  </div>
875
875
  <br><br><br><br><br><br><br>
876
876
  ''')
877
+
878
+
879
+ @assert_no_logs
880
+ @pytest.mark.parametrize('position, display', (
881
+ ('absolute', 'grid'),
882
+ ('absolute', 'flex'),
883
+ ('relative', 'grid'),
884
+ ('relative', 'flex'),
885
+ ))
886
+ def test_absolute_alternative_layout(assert_pixels, position, display):
887
+ # Regression test for #2450.
888
+ assert_pixels('''
889
+ ______
890
+ _RRRR_
891
+ _RBBR_
892
+ _RBBR_
893
+ _RRRR_
894
+ ______
895
+ ''', '''
896
+ <style>
897
+ @page {
898
+ size: 6px;
899
+ }
900
+ div {
901
+ background: blue;
902
+ position: %s;
903
+ display: %s;
904
+ top: 1px;
905
+ left: 1px;
906
+ border: 1px solid red;
907
+ font: 2px weasyprint;
908
+ color: transparent;
909
+ width: 2px;
910
+ }
911
+ </style>
912
+ <div>a</div>
913
+ ''' % (position, display))
@@ -484,7 +484,7 @@ def test_background_image(assert_pixels, css, pixels):
484
484
 
485
485
  @assert_no_logs
486
486
  def test_background_image_zero_size_background(assert_pixels):
487
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/217
487
+ # Regression test for #217.
488
488
  assert_pixels('''
489
489
  __________
490
490
  __________
@@ -583,7 +583,7 @@ def test_background_origin(assert_pixels, css, pixels):
583
583
 
584
584
  @assert_no_logs
585
585
  def test_background_transform(assert_pixels):
586
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1809
586
+ # Regression test for #1809.
587
587
  assert_pixels('''
588
588
  _______
589
589
  _RRRRR_
@@ -1054,7 +1054,7 @@ def test_background_size_clip(assert_pixels):
1054
1054
 
1055
1055
  @assert_no_logs
1056
1056
  def test_page_background_fixed(assert_pixels):
1057
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1993
1057
+ # Regression test for #1993.
1058
1058
  assert_pixels('''
1059
1059
  RBBB
1060
1060
  BBBB
@@ -1071,7 +1071,7 @@ def test_page_background_fixed(assert_pixels):
1071
1071
 
1072
1072
  @assert_no_logs
1073
1073
  def test_page_background_fixed_bleed(assert_pixels):
1074
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1993
1074
+ # Regression test for #1993.
1075
1075
  assert_pixels('''
1076
1076
  RRRRRR
1077
1077
  RRBBBR
@@ -1090,7 +1090,7 @@ def test_page_background_fixed_bleed(assert_pixels):
1090
1090
 
1091
1091
  @assert_no_logs
1092
1092
  def test_bleed_background_size_clip(assert_pixels):
1093
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1943
1093
+ # Regression test for #1943.
1094
1094
  assert_pixels('''
1095
1095
  BBBBBB
1096
1096
  BBBBBB
@@ -100,9 +100,7 @@ def test_outlines(assert_pixels, assert_different_renderings):
100
100
  @assert_no_logs
101
101
  @pytest.mark.parametrize('border_style', ('none', 'solid', 'dashed', 'dotted'))
102
102
  def test_small_borders_1(border_style):
103
- # Regression test for ZeroDivisionError on dashed or dotted borders
104
- # smaller than a dash/dot.
105
- # https://github.com/Kozea/WeasyPrint/issues/49
103
+ # Regression test for #49.
106
104
  html = '''
107
105
  <style>
108
106
  @page { size: 50px 50px }
@@ -115,9 +113,7 @@ def test_small_borders_1(border_style):
115
113
  @assert_no_logs
116
114
  @pytest.mark.parametrize('border_style', ('none', 'solid', 'dashed', 'dotted'))
117
115
  def test_small_borders_2(border_style):
118
- # Regression test for ZeroDivisionError on dashed or dotted borders
119
- # smaller than a dash/dot.
120
- # https://github.com/Kozea/WeasyPrint/issues/146
116
+ # Regression test for #146.
121
117
  html = '''
122
118
  <style>
123
119
  @page { size: 50px 50px }
@@ -129,7 +125,7 @@ def test_small_borders_2(border_style):
129
125
 
130
126
  @assert_no_logs
131
127
  def test_em_borders():
132
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/1378
128
+ # Regression test for #1378.
133
129
  html = '<body style="border: 1em solid">'
134
130
  HTML(string=html).write_pdf()
135
131
 
@@ -214,8 +210,7 @@ def test_margin_boxes(assert_pixels):
214
210
 
215
211
  @assert_no_logs
216
212
  def test_display_inline_block_twice():
217
- # Regression test for inline blocks displayed twice.
218
- # https://github.com/Kozea/WeasyPrint/issues/880
213
+ # Regression test for #880.
219
214
  html = '<div style="background: red; display: inline-block">'
220
215
  document = HTML(string=html).render()
221
216
  assert document.write_pdf() == document.write_pdf()
@@ -84,7 +84,7 @@ def test_column_rule_span(assert_pixels):
84
84
 
85
85
  @assert_no_logs
86
86
  def test_column_rule_normal(assert_pixels):
87
- # Test regression: https://github.com/Kozea/WeasyPrint/issues/2217
87
+ # Regression test for #2217.
88
88
  assert_pixels('''
89
89
  a___a
90
90
  a___a
@@ -84,7 +84,7 @@ def test_current_color_svg_2(assert_pixels):
84
84
 
85
85
  @assert_no_logs
86
86
  def test_current_color_variable(assert_pixels):
87
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/2010
87
+ # Regression test for #2010.
88
88
  assert_pixels('GG\nGG', '''
89
89
  <style>
90
90
  @page { size: 2px }
@@ -96,7 +96,7 @@ def test_current_color_variable(assert_pixels):
96
96
 
97
97
  @assert_no_logs
98
98
  def test_current_color_variable_border(assert_pixels):
99
- # Regression test for https://github.com/Kozea/WeasyPrint/issues/2010
99
+ # Regression test for #2010.
100
100
  assert_pixels('GG\nGG', '''
101
101
  <style>
102
102
  @page { size: 2px }
@@ -833,3 +833,75 @@ def test_float_split_15(assert_pixels):
833
833
  a a
834
834
  </div>
835
835
  <div>bbbbb bbbbb bbbbb bbbbb bbbbb</div>''')
836
+
837
+
838
+ @assert_no_logs
839
+ def test_float_split_clear(assert_pixels):
840
+ assert_pixels('''
841
+ BBBB
842
+ BBBB
843
+ BBBB
844
+ BBBB
845
+ BBBB
846
+ BBBB
847
+ BBBB
848
+ BBBB
849
+ BBBB
850
+ BBBB
851
+ rrrr
852
+ rrrr
853
+ ''', '''
854
+ <style>
855
+ @page {
856
+ size: 4px;
857
+ }
858
+ body {
859
+ color: red;
860
+ font: 2px / 1 weasyprint;
861
+ }
862
+ div {
863
+ color: blue;
864
+ float: left;
865
+ }
866
+ article {
867
+ clear: left;
868
+ }
869
+ </style>
870
+ <div>bb bb bb bb bb</div>
871
+ <article>aa</article>''')
872
+
873
+
874
+ @assert_no_logs
875
+ def test_float_split_clear_empty(assert_pixels):
876
+ assert_pixels('''
877
+ BBBB
878
+ BBBB
879
+ BBBB
880
+ BBBB
881
+ BBBB
882
+ BBBB
883
+ BBBB
884
+ BBBB
885
+ BBBB
886
+ BBBB
887
+ ____
888
+ ____
889
+ ''', '''
890
+ <style>
891
+ @page {
892
+ size: 4px;
893
+ }
894
+ body {
895
+ color: red;
896
+ font: 2px / 1 weasyprint;
897
+ }
898
+ div {
899
+ color: blue;
900
+ float: left;
901
+ }
902
+ article {
903
+ clear: left;
904
+ }
905
+ </style>
906
+ <div>bb bb bb bb bb</div>
907
+ <article></article>''')