From: Jakub Wilk <jwilk@debian.org>
Date: Thu, 8 Oct 2015 11:57:09 -0700
Subject: Allow all data files to be moved to /usr/share/docutils/.

Forwarded: not-needed
Last-Update: 2022-07-08
---
 docutils/__init__.py                                      | 15 +++++++++++++++
 docutils/parsers/rst/directives/misc.py                   |  3 ++-
 docutils/writers/html4css1/__init__.py                    | 11 ++++++-----
 docutils/writers/html5_polyglot/__init__.py               |  5 +++--
 docutils/writers/latex2e/__init__.py                      |  4 ++--
 docutils/writers/odf_odt/__init__.py                      |  4 ++--
 docutils/writers/pep_html/__init__.py                     |  5 +++--
 docutils/writers/s5_html/__init__.py                      |  2 +-
 .../test_parsers/test_rst/test_directives/test_include.py |  3 ++-
 9 files changed, 36 insertions(+), 16 deletions(-)

--- a/docutils/__init__.py
+++ b/docutils/__init__.py
@@ -282,3 +282,30 @@
         a certain input context or output format.
         """
         return format in self.supported
+
+import os
+
+_debian_package = 0
+
+if _debian_package:
+    def _datadir(path):
+        dirname = os.path.dirname(path)
+        prefix = os.path.join(os.path.dirname(__file__), '') # _datadir
+        assert path.startswith(prefix), "%r doesn't start with %r" % (path, prefix)
+        suffix = dirname[len(prefix):]
+        return os.path.join('/usr/share/docutils/', suffix)
+
+    # If we are in the process of building the Debian python-docutils
+    # package, we must look for latex files in the build directory rather
+    # than in /usr, as they don't yet exist there.
+    if _debian_package == 'build':
+        def _datadir_latex(path):
+            system_path = _datadir(path)
+            return 'debian/tmp' + system_path
+    else:
+        _datadir_latex = _datadir
+else:
+    def _datadir(path):
+        return os.path.dirname(path)
+
+    _datadir_latex = _datadir
--- a/docutils/parsers/rst/directives/misc.py
+++ b/docutils/parsers/rst/directives/misc.py
@@ -9,6 +9,7 @@
 import os.path
 import re
 import time
+import docutils
 from docutils import io, nodes, statemachine, utils
 from docutils.parsers.rst import Directive, convert_directive_function
 from docutils.parsers.rst import directives, roles, states
@@ -45,7 +46,7 @@
                    'class': directives.class_option,
                    'name': directives.unchanged}
 
-    standard_include_path = os.path.join(os.path.dirname(states.__file__),
+    standard_include_path = os.path.join(docutils._datadir(states.__file__),
                                          'include')
 
     def run(self):
--- a/docutils/writers/html4css1/__init__.py
+++ b/docutils/writers/html4css1/__init__.py
@@ -17,6 +17,7 @@
 import os.path
 import re
 
+import docutils
 from docutils import frontend, nodes, writers
 from docutils.writers import _html_base
 from docutils.writers._html_base import PIL, url2pathname
@@ -29,13 +30,13 @@
 
     default_stylesheets = ['html4css1.css']
     default_stylesheet_dirs = ['.',
-                               os.path.abspath(os.path.dirname(__file__)),
-                               os.path.abspath(os.path.join(
-                                   os.path.dirname(os.path.dirname(__file__)),
-                                   'html5_polyglot'))  # for math.css
+                               docutils._datadir(os.path.abspath(__file__)),
+                               os.path.join(
+                                   docutils._datadir(os.path.dirname(os.path.abspath(__file__))),
+                                   'html5_polyglot')  # for math.css
                                ]
     default_template = os.path.join(
-        os.path.dirname(os.path.abspath(__file__)), 'template.txt')
+        docutils._datadir(os.path.abspath(__file__)), 'template.txt')
 
     # use a copy of the parent spec with some modifications
     settings_spec = frontend.filter_settings_spec(
--- a/docutils/writers/html5_polyglot/__init__.py
+++ b/docutils/writers/html5_polyglot/__init__.py
@@ -29,6 +29,7 @@
 import mimetypes
 import os.path
 
+import docutils
 from docutils import frontend, nodes
 from docutils.writers import _html_base
 
@@ -39,9 +40,9 @@
     """Formats this writer supports."""
 
     default_stylesheets = ['minimal.css', 'plain.css']
-    default_stylesheet_dirs = ['.', os.path.abspath(os.path.dirname(__file__))]
+    default_stylesheet_dirs = ['.', docutils._datadir(os.path.abspath(__file__))]
     default_template = os.path.join(
-        os.path.dirname(os.path.abspath(__file__)), 'template.txt')
+        docutils._datadir(os.path.abspath(__file__)), 'template.txt')
 
     # use a copy of the parent spec with some modifications
     settings_spec = frontend.filter_settings_spec(
--- a/docutils/writers/latex2e/__init__.py
+++ b/docutils/writers/latex2e/__init__.py
@@ -35,7 +35,7 @@
     """Formats this writer supports."""
 
     default_template = 'default.tex'
-    default_template_path = os.path.dirname(os.path.abspath(__file__))
+    default_template_path = docutils._datadir(os.path.abspath(__file__))
     default_preamble = ('% PDF Standard Fonts\n'
                         '\\usepackage{mathptmx} % Times\n'
                         '\\usepackage[scaled=.90]{helvet}\n'
@@ -595,7 +595,7 @@
     return ''.join(block).rstrip()
 
 
-_docutils_sty = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+_docutils_sty = os.path.join(docutils._datadir_latex(os.path.abspath(__file__)),
                              'docutils.sty')
 with open(_docutils_sty, encoding='utf-8') as fp:
     for line in fp:
--- a/docutils/writers/odf_odt/__init__.py
+++ b/docutils/writers/odf_odt/__init__.py
@@ -370,13 +370,13 @@
 
     default_stylesheet_path = utils.relative_path(
         os.path.join(os.getcwd(), 'dummy'),
-        os.path.join(os.path.dirname(__file__), default_stylesheet))
+        os.path.join(docutils._datadir(__file__), default_stylesheet))
 
     default_template = 'template.txt'
 
     default_template_path = utils.relative_path(
         os.path.join(os.getcwd(), 'dummy'),
-        os.path.join(os.path.dirname(__file__), default_template))
+        os.path.join(docutils._datadir(__file__), default_template))
 
     settings_spec = (
         'ODF-Specific Options',
--- a/docutils/writers/pep_html/__init__.py
+++ b/docutils/writers/pep_html/__init__.py
@@ -12,6 +12,7 @@
 import os
 import os.path
 
+import docutils
 from docutils import frontend, nodes, utils
 from docutils.writers import html4css1
 
@@ -22,13 +23,13 @@
 
     default_stylesheet_path = utils.relative_path(
         os.path.join(os.getcwd(), 'dummy'),
-        os.path.join(os.path.dirname(__file__), default_stylesheet))
+        os.path.join(docutils._datadir(__file__), default_stylesheet))
 
     default_template = 'template.txt'
 
     default_template_path = utils.relative_path(
         os.path.join(os.getcwd(), 'dummy'),
-        os.path.join(os.path.dirname(__file__), default_template))
+        os.path.join(docutils._datadir(__file__), default_template))
 
     settings_spec = html4css1.Writer.settings_spec + (
         'PEP/HTML Writer Options',
--- a/docutils/writers/s5_html/__init__.py
+++ b/docutils/writers/s5_html/__init__.py
@@ -19,7 +19,7 @@
 
 themes_dir_path = utils.relative_path(
     os.path.join(os.getcwd(), 'dummy'),
-    os.path.join(os.path.dirname(__file__), 'themes'))
+    os.path.join(docutils._datadir(__file__), 'themes'))
 
 
 def find_theme(name):
--- a/test/test_parsers/test_rst/test_directives/test_include.py
+++ b/test/test_parsers/test_rst/test_directives/test_include.py
@@ -11,6 +11,7 @@
 if __name__ == '__main__':
     import __init__  # noqa: F401
 from test_parsers import DocutilsTestSupport
+import docutils
 from docutils import parsers
 from docutils.utils.code_analyzer import with_pygments
 
@@ -60,7 +61,7 @@
 utf_16_file = mydir('utf-16.csv')
 utf_16_error_str = ("UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe "
                     "in position 0: ordinal not in range(128)")
-nonexistent = os.path.join(os.path.dirname(parsers.rst.states.__file__),
+nonexistent = os.path.join(docutils._datadir(parsers.rst.states.__file__),
                            'include', 'nonexistent')
 nonexistent_rel = DocutilsTestSupport.utils.relative_path(
     os.path.join(DocutilsTestSupport.testroot, 'dummy'), nonexistent)
