-From a5fce9f3b5bddb166e9be71d9a0120a012d632b7 Mon Sep 17 00:00:00 2001
-From: Jakob Gahde <j5lx@fmail.co.uk>
-Date: Tue, 10 Sep 2019 16:51:32 +0200
-Subject: [PATCH] Add compatibility for Sphinx 2 (fixes #2732)
-
-This allows the documentation to be generated using version 2 of Sphinx.
-Nearly all of the changes are directly based on changes in upstream Sphinx,
-however they have been adapted to also keep compatibility with version 1.3.2
-(which is the minimum version required by the current configuration).
----
- docsrc/conf.py | 6 +++---
- docsrc/exts/sphinxlocal/builders/manpage.py | 19 ++++++++++++++-----
- docsrc/exts/sphinxlocal/roles/cyrusman.py | 11 ++++++++++-
- docsrc/exts/sphinxlocal/writers/manpage.py | 11 ++++++++---
- 4 files changed, 35 insertions(+), 12 deletions(-)
-
-diff --git a/docsrc/conf.py b/docsrc/conf.py
-index c241cff77..ecb83768e 100644
---- a/docsrc/conf.py
-+++ b/docsrc/conf.py
-@@ -301,7 +301,7 @@
- for tuple in pathset:
- os.chdir(tuple[0])
- for rstfile in glob.glob("*.rst"):
-- author = [("The Cyrus Team")]
-+ authors = [("The Cyrus Team")]
- orphan = 'False';
- with io.open(rstfile,'r',encoding="utf8") as f:
- for line in f:
-@@ -309,14 +309,14 @@
- orphan = 'True';
- break;
- if line.startswith('.. author: '):
-- author.append(line[11: len(line.strip())])
-+ authors.append(line[11: len(line.strip())])
- f.close()
- if orphan == 'False':
- man_pages.append(
- (os.path.splitext(os.path.join(tuple[0],rstfile))[0],
- os.path.splitext(rstfile)[0],
- u'Cyrus IMAP documentation',
-- author,
-+ authors,
- tuple[1])
- )
-
-diff --git a/docsrc/exts/sphinxlocal/builders/manpage.py b/docsrc/exts/sphinxlocal/builders/manpage.py
-index a6281f799..856530b62 100644
---- a/docsrc/exts/sphinxlocal/builders/manpage.py
-+++ b/docsrc/exts/sphinxlocal/builders/manpage.py
-@@ -32,6 +32,12 @@
- # Translater in it.
- from sphinxlocal.writers.manpage import CyrusManualPageWriter
-
-+try:
-+ from sphinx.util import logging
-+ logger = logging.getLogger(__name__)
-+except:
-+ logger = None
-+
- class CyrusManualPageBuilder(ManualPageBuilder):
- """
- Builds groff output in manual page format.
-@@ -44,8 +50,11 @@ class CyrusManualPageBuilder(ManualPageBuilder):
- #settings_defaults = {}
-
- def init(self):
-+ global logger
-+ if logger is None:
-+ logger = self
- if not self.config.man_pages:
-- self.warn('no "man_pages" config value found; no manual pages '
-+ logger.warn('no "man_pages" config value found; no manual pages '
- 'will be written')
-
- def write(self, *ignored):
-@@ -56,7 +65,7 @@ def write(self, *ignored):
- components=(docwriter,),
- read_config_files=True).get_default_values()
-
-- self.info(bold('writing... '), nonl=True)
-+ logger.info(bold('writing... '), nonl=True)
-
- for info in self.config.man_pages:
- docname, name, description, authors, section = info
-@@ -67,7 +76,7 @@ def write(self, *ignored):
- authors = []
-
- targetname = '%s.%s' % (name, section)
-- self.info(darkgreen(targetname) + ' { ', nonl=True)
-+ logger.info(darkgreen(targetname) + ' { ', nonl=True)
- destination = FileOutput(
- destination_path=path.join(self.outdir, targetname),
- encoding='utf-8')
-@@ -76,7 +85,7 @@ def write(self, *ignored):
- docnames = set()
- largetree = inline_all_toctrees(self, docnames, docname, tree,
- darkgreen, [docname])
-- self.info('} ', nonl=True)
-+ logger.info('} ', nonl=True)
- self.env.resolve_references(largetree, docname, self)
- # remove pending_xref nodes
- for pendingnode in largetree.traverse(addnodes.pending_xref):
-@@ -89,7 +98,7 @@ def write(self, *ignored):
- largetree.settings.section = section
-
- docwriter.write(largetree, destination)
-- self.info()
-+ logger.info('')
-
- def setup(app):
- app.add_builder(CyrusManualPageBuilder)
-diff --git a/docsrc/exts/sphinxlocal/roles/cyrusman.py b/docsrc/exts/sphinxlocal/roles/cyrusman.py
-index 5d7eb6c65..6f2e94a8e 100644
---- a/docsrc/exts/sphinxlocal/roles/cyrusman.py
-+++ b/docsrc/exts/sphinxlocal/roles/cyrusman.py
-@@ -17,8 +17,17 @@
- from string import Template
- import re
-
-+try:
-+ from sphinx.util import logging
-+ logger = logging.getLogger(__name__)
-+except:
-+ logger = None
-+
- def setup(app):
-- app.info('Initializing cyrusman plugin')
-+ global logger
-+ if logger is None:
-+ logger = app
-+ logger.info('Initializing cyrusman plugin')
- app.add_crossref_type('cyrusman', 'cyrusman', '%s', nodes.generated)
- return
-
-diff --git a/docsrc/exts/sphinxlocal/writers/manpage.py b/docsrc/exts/sphinxlocal/writers/manpage.py
-index 13864e0d9..c5dfdfbeb 100644
---- a/docsrc/exts/sphinxlocal/writers/manpage.py
-+++ b/docsrc/exts/sphinxlocal/writers/manpage.py
-@@ -12,13 +12,17 @@
- :license: BSD, see LICENSE for details.
- """
-
-+import docutils
- from docutils import nodes
- from sphinx.writers.manpage import (
-- MACRO_DEF,
- ManualPageWriter,
- ManualPageTranslator as BaseTranslator
- )
-
-+docutils_version_info = tuple(map(int, docutils.__version__.split('.')))
-+if docutils_version_info < (0, 11):
-+ from sphinx.writers.manpage import MACRO_DEF
-+
-
- from sphinx import addnodes
- from sphinx.locale import admonitionlabels, _
-@@ -73,8 +77,9 @@ def __init__(self, builder, *args, **kwds):
- self._docinfo['version'] = builder.config.version
- self._docinfo['manual_group'] = builder.config.project
-
-- # since self.append_header() is never called, need to do this here
-- self.body.append(MACRO_DEF)
-+ # In docutils < 0.11 self.append_header() was never called
-+ if docutils_version_info < (0, 11):
-+ self.body.append(MACRO_DEF)
-
- # overwritten -- don't wrap literal_block with font calls
- self.defs['literal_block'] = ('.sp\n.nf\n', '\n.fi\n')