diff --git a/pygments.patch b/pygments.patch
new file mode 100644
index 0000000..081c351
--- /dev/null
+++ b/pygments.patch
@@ -0,0 +1,224 @@
+From 5ff3740063c1ac57f17ecd697bcd06cc1de4e75c Mon Sep 17 00:00:00 2001
+From: Adam Turner <9087854+aa-turner@users.noreply.github.com>
+Date: Mon, 6 Jan 2025 06:56:10 +0000
+Subject: [PATCH] Adapt tests for Pygments 2.19
+
+---
+ tests/test_builders/test_build_html_code.py | 8 +++++++-
+ tests/test_builders/test_build_latex.py | 9 +++++++--
+ tests/test_directives/test_directive_code.py | 15 +++++++++++++--
+ tests/test_extensions/test_ext_viewcode.py | 8 +++++++-
+ tests/test_highlighting.py | 2 +-
+ tests/test_intl/test_intl.py | 15 +++++++++++++--
+ 6 files changed, 48 insertions(+), 9 deletions(-)
+
+Index: sphinx-8.1.3/tests/test_builders/test_build_html_code.py
+===================================================================
+--- sphinx-8.1.3.orig/tests/test_builders/test_build_html_code.py
++++ sphinx-8.1.3/tests/test_builders/test_build_html_code.py
+@@ -1,3 +1,4 @@
++import pygments
+ import pytest
+
+
+@@ -32,11 +33,16 @@ def test_html_codeblock_linenos_style_in
+
+ @pytest.mark.sphinx('html', testroot='reST-code-role')
+ def test_html_code_role(app):
++ if tuple(map(int, pygments.__version__.split('.')[:2])) >= (2, 19):
++ sp = ' '
++ else:
++ sp = ' '
++
+ app.build()
+ content = (app.outdir / 'index.html').read_text(encoding='utf8')
+
+ common_content = (
+- 'def foo'
++ f'def{sp}foo'
+ '('
+ '1 '
+ '+ '
+Index: sphinx-8.1.3/tests/test_builders/test_build_latex.py
+===================================================================
+--- sphinx-8.1.3.orig/tests/test_builders/test_build_latex.py
++++ sphinx-8.1.3/tests/test_builders/test_build_latex.py
+@@ -8,6 +8,7 @@ from pathlib import Path
+ from shutil import copyfile
+ from subprocess import CalledProcessError
+
++import pygments
+ import pytest
+
+ from sphinx.builders.latex import default_latex_documents
+@@ -2127,12 +2128,16 @@ def test_latex_container(app):
+
+ @pytest.mark.sphinx('latex', testroot='reST-code-role')
+ def test_latex_code_role(app):
++ if tuple(map(int, pygments.__version__.split('.')[:2])) >= (2, 19):
++ sp = r'\PYG{+w}{ }'
++ else:
++ sp = ' '
++
+ app.build()
+ content = (app.outdir / 'projectnamenotset.tex').read_text(encoding='utf8')
+
+ common_content = (
+- r'\PYG{k}{def} '
+- r'\PYG{n+nf}{foo}'
++ r'\PYG{k}{def}' + sp + r'\PYG{n+nf}{foo}'
+ r'\PYG{p}{(}'
+ r'\PYG{l+m+mi}{1} '
+ r'\PYG{o}{+} '
+Index: sphinx-8.1.3/tests/test_directives/test_directive_code.py
+===================================================================
+--- sphinx-8.1.3.orig/tests/test_directives/test_directive_code.py
++++ sphinx-8.1.3/tests/test_directives/test_directive_code.py
+@@ -2,6 +2,7 @@
+
+ import os.path
+
++import pygments
+ import pytest
+ from docutils import nodes
+
+@@ -393,6 +394,11 @@ def test_literal_include_block_start_wit
+
+ @pytest.mark.sphinx('html', testroot='directive-code')
+ def test_literal_include_linenos(app):
++ if tuple(map(int, pygments.__version__.split('.')[:2])) >= (2, 19):
++ sp = ' '
++ else:
++ sp = ' '
++
+ app.build(filenames=[app.srcdir / 'linenos.rst'])
+ html = (app.outdir / 'linenos.html').read_text(encoding='utf8')
+
+@@ -410,7 +416,7 @@ def test_literal_include_linenos(app):
+
+ # :lines: 5-9
+ assert (
+- '5class '
++ f'5class{sp}'
+ 'Foo:'
+ ) in html
+
+@@ -560,12 +566,17 @@ def test_code_block_highlighted(app):
+
+ @pytest.mark.sphinx('html', testroot='directive-code')
+ def test_linenothreshold(app):
++ if tuple(map(int, pygments.__version__.split('.')[:2])) >= (2, 19):
++ sp = ' '
++ else:
++ sp = ' '
++
+ app.build(filenames=[app.srcdir / 'linenothreshold.rst'])
+ html = (app.outdir / 'linenothreshold.html').read_text(encoding='utf8')
+
+ # code-block using linenothreshold
+ assert (
+- '1class '
++ f'1class{sp}'
+ 'Foo:'
+ ) in html
+
+Index: sphinx-8.1.3/tests/test_extensions/test_ext_viewcode.py
+===================================================================
+--- sphinx-8.1.3.orig/tests/test_extensions/test_ext_viewcode.py
++++ sphinx-8.1.3/tests/test_extensions/test_ext_viewcode.py
+@@ -6,6 +6,7 @@ import re
+ import shutil
+ from typing import TYPE_CHECKING
+
++import pygments
+ import pytest
+
+ if TYPE_CHECKING:
+@@ -13,6 +14,11 @@ if TYPE_CHECKING:
+
+
+ def check_viewcode_output(app: SphinxTestApp) -> str:
++ if tuple(map(int, pygments.__version__.split('.')[:2])) >= (2, 19):
++ sp = ' '
++ else:
++ sp = ' '
++
+ warnings = re.sub(r'\\+', '/', app.warning.getvalue())
+ assert re.findall(
+ r"index.rst:\d+: WARNING: Object named 'func1' not found in include "
+@@ -41,7 +47,7 @@ def check_viewcode_output(app: SphinxTes
+ '[docs]\n'
+ ) in result
+ assert '@decorator\n' in result
+- assert 'class Class1:\n' in result
++ assert f'class{sp}Class1:\n' in result
+ assert ' """\n' in result
+ assert ' this is Class1\n' in result
+ assert ' """\n' in result
+Index: sphinx-8.1.3/tests/test_highlighting.py
+===================================================================
+--- sphinx-8.1.3.orig/tests/test_highlighting.py
++++ sphinx-8.1.3/tests/test_highlighting.py
+@@ -10,7 +10,7 @@ from pygments.token import Name, Text
+
+ from sphinx.highlighting import PygmentsBridge
+
+-if tuple(map(int, pygments.__version__.split('.')))[:2] < (2, 18):
++if tuple(map(int, pygments.__version__.split('.')[:2])) < (2, 18):
+ from pygments.formatter import Formatter
+
+ Formatter.__class_getitem__ = classmethod(lambda cls, name: cls) # type: ignore[attr-defined]
+Index: sphinx-8.1.3/tests/test_intl/test_intl.py
+===================================================================
+--- sphinx-8.1.3.orig/tests/test_intl/test_intl.py
++++ sphinx-8.1.3/tests/test_intl/test_intl.py
+@@ -10,6 +10,7 @@ import shutil
+ import time
+ from io import StringIO
+
++import pygments
+ import pytest
+ from babel.messages import mofile, pofile
+ from babel.messages.catalog import Catalog
+@@ -1473,6 +1474,11 @@ def test_xml_strange_markup(app):
+ @pytest.mark.sphinx('html', testroot='intl')
+ @pytest.mark.test_params(shared_result='test_intl_basic')
+ def test_additional_targets_should_not_be_translated(app):
++ if tuple(map(int, pygments.__version__.split('.')[:2])) >= (2, 19):
++ sp = ' '
++ else:
++ sp = ' '
++
+ app.build()
+ # [literalblock.txt]
+ result = (app.outdir / 'literalblock.html').read_text(encoding='utf8')
+@@ -1511,7 +1517,7 @@ def test_additional_targets_should_not_b
+ # doctest block should not be translated but be highlighted
+ expected_expr = (
+ """>>> """
+- """import sys """
++ f"""import{sp}sys """
+ """# sys importing"""
+ )
+ assert_count(expected_expr, result, 1)
+@@ -1556,6 +1562,11 @@ def test_additional_targets_should_not_b
+ },
+ )
+ def test_additional_targets_should_be_translated(app):
++ if tuple(map(int, pygments.__version__.split('.')[:2])) >= (2, 19):
++ sp = ' '
++ else:
++ sp = ' '
++
+ app.build()
+ # [literalblock.txt]
+ result = (app.outdir / 'literalblock.html').read_text(encoding='utf8')
+@@ -1605,7 +1616,7 @@ def test_additional_targets_should_be_tr
+ # doctest block should not be translated but be highlighted
+ expected_expr = (
+ """>>> """
+- """import sys """
++ f"""import{sp}sys """
+ """# SYS IMPORTING"""
+ )
+ assert_count(expected_expr, result, 1)
diff --git a/python-Sphinx.changes b/python-Sphinx.changes
index 93e408c..81e807e 100644
--- a/python-Sphinx.changes
+++ b/python-Sphinx.changes
@@ -1,3 +1,8 @@
+-------------------------------------------------------------------
+Fri Jan 17 11:52:23 UTC 2025 - Markéta Machová
+
+- Add pygments.patch to fix tests with Pygments 2.19
+
-------------------------------------------------------------------
Wed Nov 20 17:51:19 UTC 2024 - Dirk Müller
diff --git a/python-Sphinx.spec b/python-Sphinx.spec
index 2e16744..219c9ed 100644
--- a/python-Sphinx.spec
+++ b/python-Sphinx.spec
@@ -1,7 +1,7 @@
#
# spec file for package python-Sphinx
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -42,6 +42,8 @@ Source3: requests.inv
Source4: readthedocs.inv
Source5: update-intersphinx.sh
Source99: python-Sphinx.keyring
+# PATCH-FIX-UPSTREAM https://github.com/sphinx-doc/sphinx/commit/5ff3740063c1ac57f17ecd697bcd06cc1de4e75c Adapt tests for Pygments 2.19
+Patch: pygments.patch
BuildRequires: %{python_module base}
BuildRequires: %{python_module flit-core}
BuildRequires: %{python_module pip}
@@ -55,29 +57,24 @@ Requires: python-Babel >= 1.3
Requires: python-Jinja2 >= 2.3
Requires: python-Pygments >= 2.14
Requires: python-alabaster >= 0.7
-Requires: python-defusedxml >= 0.7.1
Requires: python-docutils >= 0.12
Requires: python-imagesize
Requires: python-packaging
Requires: python-requests >= 2.5.0
Requires: python-snowballstemmer >= 1.1
-Requires: python-sphinx_rtd_theme
Requires: python-sphinxcontrib-applehelp
Requires: python-sphinxcontrib-devhelp
Requires: python-sphinxcontrib-htmlhelp >= 2.0.0
Requires: python-sphinxcontrib-jsmath
Requires: python-sphinxcontrib-qthelp >= 1.0.2
Requires: python-sphinxcontrib-serializinghtml >= 1.1.9
-Requires: python-sphinxcontrib-websupport
Requires(post): update-alternatives
Requires(postun): update-alternatives
Recommends: python-SQLAlchemy >= 0.9
Recommends: python-Sphinx-doc-man
Recommends: python-Whoosh >= 2.0
+Suggests: python-sphinx_rtd_theme
BuildArch: noarch
-%if 0%{?python_version_nodots} < 310
-Requires: python-importlib-metadata >= 4.4
-%endif
%if %{with test}
BuildRequires: %{python_module Cython}
BuildRequires: %{python_module Sphinx = %{version}}