SF.net SVN: docutils:[10156 ] trunk/docutils/docutils/ writers/latex2e/__init__ .py
milde--- via Docutils-checkins <[email protected]> Fri, 06 Jun 2025 08:29:43 +0000
| Newsgroups | gmane.text.docutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
Revision: 10156
http://sourceforge.net/p/docutils/code/10156
Author: milde
Date: 2025-06-06 08:29:43 +0000 (Fri, 06 Jun 2025)
Log Message:
-----------
LaTeX writer: reduce code duplication.
New auxiliary method `LaTeXTranslator.provide_fallback()` to replace
conditional statement with one-liner.
Output unchanged.
Modified Paths:
--------------
trunk/docutils/docutils/writers/latex2e/__init__.py
Modified: trunk/docutils/docutils/writers/latex2e/__init__.py
===================================================================
--- trunk/docutils/docutils/writers/latex2e/__init__.py 2025-06-06 08:29:30 UTC (rev 10155)
+++ trunk/docutils/docutils/writers/latex2e/__init__.py 2025-06-06 08:29:43 UTC (rev 10156)
@@ -1593,6 +1593,13 @@
elif align == 'right':
self.out.append('\\raggedleft\n')
+ def provide_fallback(self, feature, key=None) -> None:
+ if key is None:
+ key = feature
+ if self.fallback_stylesheet:
+ return # provided by the included style sheet
+ self.fallbacks[key] = getattr(PreambleCmds, feature)
+
def duclass_open(self, node) -> None:
"""Open a group and insert declarations for class values."""
if not isinstance(node.parent, nodes.compound):
@@ -1607,8 +1614,7 @@
and cls in Writer.table_style_values + ['colwidths-given']):
pass
else:
- if not self.fallback_stylesheet:
- self.fallbacks['DUclass'] = PreambleCmds.duclass
+ self.provide_fallback('duclass', 'DUclass')
self.out.append('\\begin{DUclass}{%s}\n' % cls)
def duclass_close(self, node) -> None:
@@ -1622,8 +1628,7 @@
and cls in Writer.table_style_values + ['colwidths-given']):
pass
else:
- if not self.fallback_stylesheet:
- self.fallbacks['DUclass'] = PreambleCmds.duclass
+ self.provide_fallback('duclass', 'DUclass')
self.out.append('\\end{DUclass}\n')
def push_output_collector(self, new_out: list) -> None:
@@ -1699,10 +1704,9 @@
self.fallbacks['error'] = PreambleCmds.error_legacy
self.out.append('\n\\DUadmonition[%s]{'%','.join(node['classes']))
return
- if not self.fallback_stylesheet:
- self.fallbacks['admonition'] = PreambleCmds.admonition
- if 'error' in node['classes'] and not self.fallback_stylesheet:
- self.fallbacks['error'] = PreambleCmds.error
+ self.provide_fallback('admonition')
+ if 'error' in node['classes']:
+ self.provide_fallback('error')
self.duclass_open(node)
self.out.append('\\begin{DUadmonition}')
@@ -1775,8 +1779,7 @@
self.out.append('}\n')
def visit_title_reference(self, node) -> None:
- if not self.fallback_stylesheet:
- self.fallbacks['titlereference'] = PreambleCmds.titlereference
+ self.provide_fallback('titlereference')
self.out.append(r'\DUroletitlereference{')
self.visit_inline(node)
@@ -1939,9 +1942,8 @@
if self.docinfo:
# tabularx: automatic width of columns, no page breaks allowed.
self.requirements['tabularx'] = r'\usepackage{tabularx}'
- if not self.fallback_stylesheet:
- self.fallbacks['_providelength'] = PreambleCmds.providelength
- self.fallbacks['docinfo'] = PreambleCmds.docinfo
+ self.provide_fallback('providelength', '_providelength')
+ self.provide_fallback('docinfo')
#
self.docinfo.insert(0, '\n% Docinfo\n'
'\\begin{center}\n'
@@ -2272,8 +2274,7 @@
def visit_field_list(self, node) -> None:
self.duclass_open(node)
if self.out is not self.docinfo:
- if not self.fallback_stylesheet:
- self.fallbacks['fieldlist'] = PreambleCmds.fieldlist
+ self.provide_fallback('fieldlist')
self.out.append('\\begin{DUfieldlist}')
def depart_field_list(self, node) -> None:
@@ -2329,8 +2330,7 @@
except IndexError:
backref = node['ids'][0] # no backref, use self-ref instead
if self.docutils_footnotes:
- if not self.fallback_stylesheet:
- self.fallbacks['footnotes'] = PreambleCmds.footnotes
+ self.provide_fallback('footnotes')
num = node[0].astext()
if self.settings.footnote_references == 'brackets':
num = '[%s]' % num
@@ -2368,8 +2368,7 @@
self.out.append('\\hyperlink{%s}{[' % href)
self.context.append(']}')
else:
- if not self.fallback_stylesheet:
- self.fallbacks['footnotes'] = PreambleCmds.footnotes
+ self.provide_fallback('footnotes')
self.out.append(r'\DUfootnotemark{%s}{%s}{' %
(node['ids'][0], href))
self.context.append('}')
@@ -2437,9 +2436,9 @@
base_node=node)
elif unit == 'ch':
self.fallbacks['ch'] = PreambleCmds.ch
- elif not self.fallback_stylesheet:
- self.fallbacks['_providelength'] = PreambleCmds.providelength
- self.fallbacks[unit] = getattr(PreambleCmds, unit)
+ else:
+ self.provide_fallback('providelength', '_providelength')
+ self.provide_fallback(unit)
return f'{value}\\DU{unit}dimen'
def visit_image(self, node) -> None:
@@ -2526,8 +2525,7 @@
self.babel.otherlanguages[language] = True
self.out.append(r'\foreignlanguage{%s}{' % language)
else:
- if not self.fallback_stylesheet:
- self.fallbacks['inline'] = PreambleCmds.inline
+ self.provide_fallback('inline')
self.out.append(r'\DUrole{%s}{' % cls)
def depart_inline(self, node) -> None:
@@ -2534,8 +2532,7 @@
self.out.append('}' * len(node['classes']))
def visit_legend(self, node) -> None:
- if not self.fallback_stylesheet:
- self.fallbacks['legend'] = PreambleCmds.legend
+ self.provide_fallback('legend')
self.out.append('\\begin{DUlegend}')
def depart_legend(self, node) -> None:
@@ -2548,9 +2545,8 @@
self.out.append('\n')
def visit_line_block(self, node) -> None:
- if not self.fallback_stylesheet:
- self.fallbacks['_providelength'] = PreambleCmds.providelength
- self.fallbacks['lineblock'] = PreambleCmds.lineblock
+ self.provide_fallback('providelength', '_providelength')
+ self.provide_fallback('lineblock')
self.set_align_from_classes(node)
if isinstance(node.parent, nodes.line_block):
self.out.append('\\item[]\n'
@@ -2576,8 +2572,7 @@
if ('code' in node['classes']
and self.settings.syntax_highlight != 'none'):
self.requirements['color'] = PreambleCmds.color
- if not self.fallback_stylesheet:
- self.fallbacks['code'] = PreambleCmds.highlight_rules
+ self.provide_fallback('highlight_rules', 'code')
self.out.append('\\texttt{')
self.visit_inline(node)
@@ -2639,8 +2634,7 @@
and 'code' in node['classes']
and self.settings.syntax_highlight != 'none'):
self.requirements['color'] = PreambleCmds.color
- if not self.fallback_stylesheet:
- self.fallbacks['code'] = PreambleCmds.highlight_rules
+ self.provide_fallback('highlight_rules', 'code')
# Wrap?
if _in_table and _use_env and not _autowidth_table:
# Wrap in minipage to prevent extra vertical space
@@ -2736,8 +2730,7 @@
def visit_math_block(self, node) -> None:
self.requirements['amsmath'] = r'\usepackage{amsmath}'
for cls in node['classes']:
- if not self.fallback_stylesheet:
- self.fallbacks['inline'] = PreambleCmds.inline
+ self.provide_fallback('inline')
self.out.append(r'\DUrole{%s}{' % cls)
math_env = pick_math_environment(node.astext())
labels = self.ids_to_labels(node, set_anchor=False, newline=True)
@@ -2778,9 +2771,8 @@
self.out.append('] ')
def visit_option_list(self, node) -> None:
- if not self.fallback_stylesheet:
- self.fallbacks['_providelength'] = PreambleCmds.providelength
- self.fallbacks['optionlist'] = PreambleCmds.optionlist
+ self.provide_fallback('providelength', '_providelength')
+ self.provide_fallback('optionlist')
self.duclass_open(node)
self.out.append('\\begin{DUoptionlist}\n')
@@ -2921,8 +2913,7 @@
self.depart_docinfo_item(node)
def visit_rubric(self, node) -> None:
- if not self.fallback_stylesheet:
- self.fallbacks['rubric'] = PreambleCmds.rubric
+ self.provide_fallback('rubric')
# class wrapper would interfere with ``\section*"`` type commands
# (spacing/indent of first paragraph)
self.out.append('\n\\DUrubric{')
@@ -2972,8 +2963,7 @@
def visit_sidebar(self, node) -> None:
self.duclass_open(node)
self.requirements['color'] = PreambleCmds.color
- if not self.fallback_stylesheet:
- self.fallbacks['sidebar'] = PreambleCmds.sidebar
+ self.provide_fallback('sidebar')
self.out.append('\\DUsidebar{')
def depart_sidebar(self, node) -> None:
@@ -3017,8 +3007,7 @@
def visit_subtitle(self, node) -> None:
if isinstance(node.parent, nodes.document):
self.push_output_collector(self.subtitle)
- if not self.fallback_stylesheet:
- self.fallbacks['documentsubtitle'] = PreambleCmds.documentsubtitle # noqa:E501
+ self.provide_fallback('documentsubtitle')
protect = (self.settings.documentclass == 'memoir')
self.subtitle_labels += self.ids_to_labels(node, set_anchor=False,
protect=protect)
@@ -3027,8 +3016,7 @@
self.out.append(r'\%s*{' %
self.d_class.section(self.section_level + 1))
else:
- if not self.fallback_stylesheet:
- self.fallbacks['subtitle'] = PreambleCmds.subtitle
+ self.provide_fallback('subtitle')
self.out.append('\n\\DUsubtitle{')
def depart_subtitle(self, node) -> None:
@@ -3039,8 +3027,7 @@
def visit_system_message(self, node) -> None:
self.requirements['color'] = PreambleCmds.color
- if not self.fallback_stylesheet:
- self.fallbacks['title'] = PreambleCmds.title
+ self.provide_fallback('title')
if self.settings.legacy_class_functions:
self.fallbacks['title'] = PreambleCmds.title_legacy
node['classes'] = ['system-message']
@@ -3206,8 +3193,7 @@
self.fallbacks['title'] = PreambleCmds.title_legacy
self.out.append('\n\\DUtitle[%s]{' % ','.join(classes))
else:
- if not self.fallback_stylesheet:
- self.fallbacks['title'] = PreambleCmds.title
+ self.provide_fallback('title')
self.out.append('\n\\DUtitle{')
self.context.append('}\n')
# Table caption
@@ -3225,9 +3211,8 @@
self.fallbacks['title'] = PreambleCmds.title_legacy
section_name += '[section%s]' % RomanNumeral(level)
else:
- if not self.fallback_stylesheet:
- self.fallbacks['title'] = PreambleCmds.title
- self.fallbacks['DUclass'] = PreambleCmds.duclass
+ self.provide_fallback('title')
+ self.provide_fallback('duclass', 'DUclass')
self.out.append('\\begin{DUclass}{section%s}\n'
% RomanNumeral(level))
@@ -3356,14 +3341,12 @@
else:
# special topics:
if 'abstract' in node['classes']:
- if not self.fallback_stylesheet:
- self.fallbacks['abstract'] = PreambleCmds.abstract
+ self.provide_fallback('abstract')
if self.settings.legacy_class_functions:
self.fallbacks['abstract'] = PreambleCmds.abstract_legacy
self.push_output_collector(self.abstract)
elif 'dedication' in node['classes']:
- if not self.fallback_stylesheet:
- self.fallbacks['dedication'] = PreambleCmds.dedication
+ self.provide_fallback('dedication')
self.push_output_collector(self.dedication)
else:
node['classes'].insert(0, 'topic')
@@ -3382,8 +3365,7 @@
self.pop_output_collector()
def visit_transition(self, node) -> None:
- if not self.fallback_stylesheet:
- self.fallbacks['transition'] = PreambleCmds.transition
+ self.provide_fallback('transition')
self.out.append('\n%' + '_' * 75 + '\n')
self.out.append('\\DUtransition\n')
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.