diff --git a/.gitignore b/.gitignore
index d5f51f8..5a0b857 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,9 @@
/v0.19.2.tar.gz
/v0.21.tar.gz
/v0.22.tar.gz
-/weasyprint-0.22.tar.gz
-/weasyprint-0.39.tar.gz
-/WeasyPrint-47.tar.gz
+/WeasyPrint-*
+/WeasyPrint-*.tar.gz
+/weasyprint-*.tar.gz
+/*.src.rpm
+/results_weasyprint
+/weasyprint-??.?
diff --git a/sources b/sources
index c8ffc9c..4008ca2 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (WeasyPrint-47.tar.gz) = 1f840d997d33aebd2a8a4c2dafdfec0dfe13a97beda21438f69e28f6bfca8a6fcfe0496cb5a9fa4307e6807b23e2ba656093fe90e3fb2269a865e56a9a83fe1b
+SHA512 (weasyprint-69.0.tar.gz) = fb56d7f6173f8a67f8ef4c31408c03625b0a774d0efde003f779e3da054737c88afe9f44ee40b6dda5fc92cfacfa5709d4d96bf1a112862d309eaf2d93881ef6
diff --git a/weasyprint-disable-flake8-isort-for-pytest.patch b/weasyprint-disable-flake8-isort-for-pytest.patch
deleted file mode 100644
index c7a23f5..0000000
--- a/weasyprint-disable-flake8-isort-for-pytest.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git a/setup.cfg b/setup.cfg
-index 1e88b56..62725f6 100644
---- a/setup.cfg
-+++ b/setup.cfg
-@@ -52,8 +52,6 @@ install_requires =
- tests_require =
- pytest-runner
- pytest-cov
-- pytest-flake8
-- pytest-isort
- python_requires = >= 3.5
-
- [options.entry_points]
-@@ -71,8 +69,6 @@ doc =
- test =
- pytest-runner
- pytest-cov
-- pytest-flake8
-- pytest-isort
-
- [bdist_wheel]
- python-tag = py3
-@@ -85,7 +81,6 @@ build-dir = docs/_build
- test = pytest
-
- [tool:pytest]
--addopts = --flake8 --isort
- norecursedirs = build dist .cache .eggs .git
-
- [coverage:run]
diff --git a/weasyprint-disable-hyphenation-tests.patch b/weasyprint-disable-hyphenation-tests.patch
deleted file mode 100644
index 9b8498c..0000000
--- a/weasyprint-disable-hyphenation-tests.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-diff --git a/weasyprint/tests/test_text.py b/weasyprint/tests/test_text.py
-index 1bebd57..df67943 100644
---- a/weasyprint/tests/test_text.py
-+++ b/weasyprint/tests/test_text.py
-@@ -466,7 +466,7 @@ def test_text_indent_multipage(indent):
-
-
- @assert_no_logs
--def test_hyphenate_character_1():
-+def _test_hyphenate_character_1():
- page, = render_pages(
- ''
- ''
-@@ -483,7 +483,7 @@ def test_hyphenate_character_1():
-
-
- @assert_no_logs
--def test_hyphenate_character_2():
-+def _test_hyphenate_character_2():
- page, = render_pages(
- ''
- ''
-@@ -500,7 +500,7 @@ def test_hyphenate_character_2():
-
-
- @assert_no_logs
--def test_hyphenate_character_3():
-+def _test_hyphenate_character_3():
- page, = render_pages(
- ''
- ''
-@@ -517,7 +517,7 @@ def test_hyphenate_character_3():
-
-
- @assert_no_logs
--def test_hyphenate_character_4():
-+def _test_hyphenate_character_4():
- page, = render_pages(
- ''
- ''
-@@ -533,7 +533,7 @@ def test_hyphenate_character_4():
-
-
- @assert_no_logs
--def test_hyphenate_character_5():
-+def _test_hyphenate_character_5():
- page, = render_pages(
- ''
- ''
-@@ -600,7 +600,7 @@ def test_hyphenate_manual_2():
-
-
- @assert_no_logs
--def test_hyphenate_manual_3():
-+def _test_hyphenate_manual_3():
- # Automatic hyphenation opportunities within a word must be ignored if the
- # word contains a conditional hyphen, in favor of the conditional
- # hyphen(s).
-@@ -617,7 +617,7 @@ def test_hyphenate_manual_3():
-
-
- @assert_no_logs
--def test_hyphenate_limit_zone_1():
-+def _test_hyphenate_limit_zone_1():
- page, = render_pages(
- ''
- ''
-@@ -651,7 +651,7 @@ def test_hyphenate_limit_zone_2():
-
-
- @assert_no_logs
--def test_hyphenate_limit_zone_3():
-+def _test_hyphenate_limit_zone_3():
- page, = render_pages(
- ''
- ''
-@@ -686,19 +686,10 @@ def test_hyphenate_limit_zone_4():
-
- @assert_no_logs
- @pytest.mark.parametrize('css, result', (
-- ('auto', 2),
-- ('auto auto 0', 2),
-- ('0 0 0', 2),
- ('4 4 auto', 1),
-- ('6 2 4', 2),
-- ('auto 1 auto', 2),
- ('7 auto auto', 1),
-- ('6 auto auto', 2),
-- ('5 2', 2),
-- ('3', 2),
- ('2 4 6', 1),
- ('auto 4', 1),
-- ('auto 2', 2),
- ))
- def test_hyphenate_limit_chars(css, result):
- page, = render_pages((
-@@ -738,10 +729,6 @@ def test_hyphenate_limit_chars_punctuation(css):
- @pytest.mark.parametrize('wrap, text, test, full_text', (
- ('break-word', 'aaaaaaaa', lambda a: a > 1, 'aaaaaaaa'),
- ('normal', 'aaaaaaaa', lambda a: a == 1, 'aaaaaaaa'),
-- ('break-word', 'hyphenations', lambda a: a > 3,
-- 'hy\u2010phen\u2010ations'),
-- ('break-word', "A splitted word. An hyphenated word.",
-- lambda a: a > 8, "Asplittedword.Anhy\u2010phen\u2010atedword."),
- ))
- def test_overflow_wrap(wrap, text, test, full_text):
- page, = render_pages('''
diff --git a/weasyprint-fix-pango-144.patch b/weasyprint-fix-pango-144.patch
deleted file mode 100644
index 9210fb3..0000000
--- a/weasyprint-fix-pango-144.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-commit aab0fa5b9d8c8a3960ba79f6c54ad56c64a1c06d
-Author: Guillaume Ayoub
-Date: Wed Aug 14 18:32:44 2019 +0200
-
- Fix line height with Pango > 1.44
-
- Pango > 1.44 returns a wrong baseline when no text is set on the layout. We
- now have to set text when calculating metrics for strut layouts.
-
- Fix #917.
-
-diff --git a/weasyprint/css/computed_values.py b/weasyprint/css/computed_values.py
-index 37f8b1b4..87c83ed4 100644
---- a/weasyprint/css/computed_values.py
-+++ b/weasyprint/css/computed_values.py
-@@ -742,6 +742,7 @@ def strut_layout(style, context=None):
- return context.strut_layouts[key]
-
- layout = text.Layout(context, style['font_size'], style)
-+ layout.set_text(' ')
- line, _ = layout.get_first_line()
- _, _, _, _, text_height, baseline = text.first_line_metrics(
- line, '', layout, resume_at=None, space_collapse=False, style=style)
diff --git a/weasyprint-set-tab-size.patch b/weasyprint-set-tab-size.patch
deleted file mode 100644
index 6da3a24..0000000
--- a/weasyprint-set-tab-size.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-commit b06a3a9a6f3609a0257b3270875ae3d91dad609b
-Author: Guillaume Ayoub
-Date: Thu Sep 5 13:46:01 2019 +0200
-
- Always set tabulation width
-
- Not setting it makes Pango use a slightly different value of tabulation width,
- breaking a test.
-
-diff --git a/weasyprint/text.py b/weasyprint/text.py
-index 24681e58..20c613a5 100644
---- a/weasyprint/text.py
-+++ b/weasyprint/text.py
-@@ -728,10 +728,6 @@ class Layout(object):
- pango.pango_attr_list_insert(attr_list, attr)
- pango.pango_layout_set_attributes(self.layout, attr_list)
-
-- # Tabs width
-- if style['tab_size'] != 8: # Default Pango value is 8
-- self.set_tabs()
--
- def get_first_line(self):
- layout_iter = ffi.gc(
- pango.pango_layout_get_iter(self.layout),
-@@ -783,6 +779,10 @@ class Layout(object):
- pango.pango_layout_set_attributes(self.layout, attr_list)
- pango.pango_attr_list_unref(attr_list)
-
-+ # Tabs width
-+ if b'\t' in bytestring:
-+ self.set_tabs()
-+
- def get_font_metrics(self):
- context = pango.pango_layout_get_context(self.layout)
- return FontMetrics(context, self.font, self.language)
-@@ -792,14 +792,12 @@ class Layout(object):
-
- def set_tabs(self):
- if isinstance(self.style['tab_size'], int):
-- style = self.style.copy()
-- style['tab_size'] = 8
- layout = Layout(
-- self.context, style['font_size'], style,
-+ self.context, self.style['font_size'], self.style,
- self.justification_spacing)
- layout.set_text(' ' * self.style['tab_size'])
- line, _ = layout.get_first_line()
-- width, _ = get_size(line, style)
-+ width, _ = get_size(line, self.style)
- width = int(round(width))
- else:
- width = int(self.style['tab_size'].value)
diff --git a/weasyprint.spec b/weasyprint.spec
index 0b33645..d5a01df 100644
--- a/weasyprint.spec
+++ b/weasyprint.spec
@@ -1,50 +1,30 @@
%global modname weasyprint
-%global srcname WeasyPrint
+%global srcname weasyprint
Name: weasyprint
-Version: 47
-Release: 1%{?dist}
+Version: 69.0
+Release: 2%{?dist}
Summary: Utility to render HTML and CSS to PDF
-License: BSD
-URL: http://weasyprint.org/
-Source0: %pypi_source
-Patch0: %{name}-disable-flake8-isort-for-pytest.patch
-# both patches already in WeasyPrint 50
-Patch1: weasyprint-fix-pango-144.patch
-Patch2: weasyprint-set-tab-size.patch
-# several tests in "test_text.py" fail because Fedora's python3-pyphen does
-# not ship hyphenation dicts but relies on system-provided dicts (F30/F31).
-Patch3: weasyprint-disable-hyphenation-tests.patch
+License: BSD-3-Clause
+URL: https://weasyprint.org
+Source0: %{pypi_source weasyprint}
BuildArch: noarch
BuildRequires: python3-devel
-# upstream installation docs say:
-# "setuptools ≥ 30.3.0 is required to install WeasyPrint from wheel,
-# but 39.2.0 is required to build the package or install from source."
-BuildRequires: python3-setuptools >= 39.2.0
-BuildRequires: python3-pytest
-BuildRequires: python3-pytest-cov
-BuildRequires: python3-pytest-runner
-BuildRequires: python3-setuptools >= 39.2.0
-BuildRequires: /usr/bin/pathfix.py
-
+BuildRequires: pyproject-rpm-macros
+# used as "build-backend" in pyproject.toml but not detected by Fedora's
+# macros to generate build requirements
+BuildRequires: python3dist(flit-core)
# requirements for testing
-BuildRequires: cairo >= 1.15.4
-BuildRequires: dejavu-sans-fonts
-BuildRequires: gdk-pixbuf2 >= 2.25.0
-BuildRequires: gdk-pixbuf2-modules
-# gdk-pixbuf2 does not require libjpeg directly but tests try to load jpg
-# images via gdk-pixbuf2
-BuildRequires: libjpeg-turbo
-BuildRequires: pango >= 1.38.0
-BuildRequires: python3-cairosvg >= 1.0.20
-BuildRequires: python3-cssselect2 >= 0.1
-BuildRequires: python3-cairocffi >= 0.9.0
-BuildRequires: python3-html5lib >= 0.999999999
-BuildRequires: python3-pyphen >= 0.8
-BuildRequires: python3-tinycss2 >= 1.0
+BuildRequires: dejavu-fonts-all
+BuildRequires: google-noto-emoji-fonts
+BuildRequires: ghostscript
+# https://doc.courtbouillon.org/weasyprint/latest/first_steps.html
+BuildRequires: pango >= 1.44.0
+BuildRequires: python3dist(pytest)
+BuildRequires: python3dist(pytest-xdist)
Requires: python3-weasyprint = %{version}-%{release}
@@ -55,18 +35,11 @@ for printing.
%package -n python3-weasyprint
Summary: Python library to render HTML and CSS to PDF
-Requires: cairo >= 1.15.4
-Requires: pango >= 1.38.0
-Requires: gdk-pixbuf2 >= 2.25.0
-# workaround for bug 1685654
-# actually python3-cairocffi should have that dependency (see bug 1698217) but
-# for now just add the requirement here.
-Requires: python3-xcffib
+Requires: pango >= 1.44.0
# other Python dependencies will be picked up automatically
# Weasyprint will fail if no fonts are installed. There's no way to know
# what fonts the user would actually want, but require a few common ones
# that might be useful:
-Requires: dejavu-fonts-common
Requires: dejavu-sans-fonts
Requires: dejavu-sans-mono-fonts
Requires: dejavu-serif-fonts
@@ -76,17 +49,19 @@ The WeasyPrint Python library is a rendering engine for HTML and CSS that
can export to PDF. It aims to support web standards for printing.
%prep
-%autosetup -p1 -n WeasyPrint-%{version}
-pathfix.py -pni "%{__python3} %{py3_shbang_opts}" .
+%autosetup -p1 -n %{srcname}-%{version}
+
+%generate_buildrequires
+%pyproject_buildrequires -r
%build
-%py3_build
+%pyproject_wheel
%install
-%py3_install
+%pyproject_install
%check
-%{__python3} setup.py test
+%pytest -n auto
# do not ship tests
rm -rf %{buildroot}%{python3_sitelib}/%{modname}/tests
@@ -98,12 +73,223 @@ rm -rf %{buildroot}%{python3_sitelib}/%{modname}/tests
%files -n python3-weasyprint
%license LICENSE
%doc README.rst
-%{python3_sitelib}/%{srcname}-%{version}-*/
+%{python3_sitelib}/%{modname}-%{version}.dist-info/
%{python3_sitelib}/%{modname}/
%changelog
-* Mon Nov 04 2019 Felix Schwarz 47-1
-- update to upstream version 47
+* Fri Jul 17 2026 Fedora Release Engineering - 69.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
+
+* Thu Jun 11 2026 Felix Schwarz - 69.0-1
+- update to 69.0
+
+* Fri Jun 05 2026 Python Maint - 68.1-2
+- Rebuilt for Python 3.15
+
+* Sat Feb 07 2026 Felix Schwarz - 68.1-1
+- update to 68.1
+
+* Tue Jan 20 2026 Felix Schwarz - 68.0-1
+- update to 68.0
+
+* Sat Jan 17 2026 Fedora Release Engineering - 67.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
+
+* Wed Dec 03 2025 Felix Schwarz - 67.0-1
+- update to 67.0
+
+* Fri Sep 19 2025 Python Maint - 66.0-3
+- Rebuilt for Python 3.14.0rc3 bytecode
+
+* Fri Aug 15 2025 Python Maint - 66.0-2
+- Rebuilt for Python 3.14.0rc2 bytecode
+
+* Mon Jul 28 2025 Felix Schwarz - 66.0-1
+- update to 66.0
+
+* Fri Jul 25 2025 Fedora Release Engineering - 65.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
+
+* Tue Jun 03 2025 Python Maint - 65.1-2
+- Rebuilt for Python 3.14
+
+* Mon Apr 14 2025 Felix Schwarz - 65.1-1
+- update to 65.1
+
+* Sun Mar 23 2025 Felix Schwarz - 65.0-1
+- update to 65.0
+
+* Wed Mar 05 2025 Felix Schwarz - 64.1-1
+- update to 64.1
+
+* Thu Jan 30 2025 Felix Schwarz - 64.0-1
+- update to 64.0
+
+* Sun Jan 19 2025 Fedora Release Engineering - 63.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
+
+* Sat Jan 11 2025 Felix Schwarz - 63.1-1
+- update to 63.1
+
+* Sat Jul 20 2024 Fedora Release Engineering - 62.3-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
+
+* Mon Jun 24 2024 Felix Schwarz - 62.3-1
+- update to 62.3
+
+* Sat Jun 08 2024 Python Maint - 62.2-2
+- Rebuilt for Python 3.13
+
+* Tue Jun 04 2024 Felix Schwarz - 62.2-1
+- update to 62.2
+
+* Mon May 06 2024 Felix Schwarz - 62.1-1
+- update to 62.1
+
+* Thu May 02 2024 Felix Schwarz - 62.0-1
+- update to 62.0
+
+* Sat Mar 09 2024 Felix Schwarz - 61.2-1
+- update to 61.2
+
+* Mon Feb 26 2024 Felix Schwarz - 61.1-1
+- update to 61.1
+
+* Mon Feb 12 2024 Felix Schwarz - 61.0-1
+- update to 61.0
+
+* Thu Jan 25 2024 Felix Schwarz - 60.2-2
+- use just flit-core as build dependency
+
+* Tue Dec 12 2023 Felix Schwarz - 60.2-1
+- update to 60.2
+
+* Thu Oct 05 2023 Felix Schwarz - 60.1-1
+- update to 60.1
+
+* Sat Jul 22 2023 Fedora Release Engineering - 59.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Sun Jul 09 2023 Felix Schwarz - 59.0-2
+- add patch so the test suite passes for Python 3.12
+
+* Thu May 11 2023 Felix Schwarz - 59.0-1
+- update to 59.0
+
+* Sat Apr 15 2023 Felix Schwarz - 58.1-2
+- SPDX migration
+- make tests pass with pydyf 0.6
+
+* Tue Mar 07 2023 Felix Schwarz - 58.1-1
+- update to 58.1
+
+* Fri Feb 17 2023 Felix Schwarz - 58.0-1
+- update to 58.0
+
+* Sat Jan 21 2023 Fedora Release Engineering - 57.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Tue Dec 27 2022 Felix Schwarz - 57.2-1
+- update to 57.2
+
+* Sat Nov 05 2022 Felix Schwarz - 57.1-1
+- update to 57.1
+
+* Mon Jul 25 2022 Felix Schwarz - 56.1-1
+- update to 56.1
+
+* Sat Jul 23 2022 Fedora Release Engineering - 56.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Thu Jul 07 2022 Felix Schwarz - 56.0-1
+- update to 56.0
+
+* Mon Jun 20 2022 Python Maint - 55.0-2
+- Rebuilt for Python 3.11
+
+* Thu May 12 2022 Felix Schwarz - 55.0-1
+- update to 55.0
+
+* Mon Apr 04 2022 Felix Schwarz - 54.3-1
+- update to 54.3
+
+* Tue Mar 01 2022 Felix Schwarz - 54.2-1
+- update to 54.2
+
+* Mon Jan 31 2022 Felix Schwarz - 54.1-1
+- update to 54.1
+
+* Sat Jan 22 2022 Fedora Release Engineering - 54.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Sat Jan 08 2022 Felix Schwarz - 54.0-1
+- update to 54.0
+
+* Sun Nov 14 2021 Felix Schwarz - 53.4-1
+- update to 53.4
+
+* Fri Sep 10 2021 Felix Schwarz - 53.3-1
+- update to 53.3
+
+* Fri Aug 27 2021 Felix Schwarz - 53.2-1
+- update to 53.2
+
+* Sun Aug 22 2021 Felix Schwarz - 53.1-1
+- update to 53.1
+
+* Sun Aug 01 2021 Felix Schwarz - 53.0-1
+- update to 53.0
+
+* Fri Jul 23 2021 Fedora Release Engineering - 52.5-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Fri Jun 04 2021 Python Maint - 52.5-2
+- Rebuilt for Python 3.10
+
+* Sun Apr 18 2021 Felix Schwarz - 52.5-1
+- update to 52.5
+
+* Tue Mar 23 2021 Felix Schwarz - 52.4-2
+- add patch for pango 1.48.3
+
+* Fri Mar 12 2021 Felix Schwarz - 52.4-1
+- update to 52.4
+
+* Tue Mar 02 2021 Felix Schwarz - 52.3-1
+- update to 52.3
+
+* Wed Jan 27 2021 Fedora Release Engineering - 52.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Sun Dec 6 2020 Felix Schwarz - 52.2-1
+- update to 52.2
+
+* Sun Nov 08 2020 Felix Schwarz - 52.1-1
+- update to 52.1
+
+* Wed Jul 29 2020 Fedora Release Engineering - 51-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Tue May 26 2020 Miro Hrončok - 51-4
+- Rebuilt for Python 3.9
+
+* Wed Mar 04 2020 Felix Schwarz - 51-3
+- drop runtime requirement on "dejavu-fonts-common" (#1810150)
+
+* Fri Jan 31 2020 Fedora Release Engineering - 51-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Wed Dec 25 2019 Felix Schwarz 51-1
+- update to upstream version 51
+
+* Sun Dec 01 2019 Felix Schwarz 50-1
+- update to new upstream version
+
+* Thu Oct 03 2019 Miro Hrončok - 0.39-5
+- Rebuilt for Python 3.8.0rc1 (#1748018)
+
+* Mon Aug 19 2019 Miro Hrončok - 0.39-4
+- Rebuilt for Python 3.8
* Sat Jul 27 2019 Fedora Release Engineering - 0.39-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild