diff options
author | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
---|---|---|
committer | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
commit | 4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch) | |
tree | ee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/docutils/writers/xetex/__init__.py | |
parent | cc961e04ba734dd72309fb548a2f97d67d578813 (diff) | |
download | gn-ai-master.tar.gz |
Diffstat (limited to '.venv/lib/python3.12/site-packages/docutils/writers/xetex/__init__.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/docutils/writers/xetex/__init__.py | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/docutils/writers/xetex/__init__.py b/.venv/lib/python3.12/site-packages/docutils/writers/xetex/__init__.py new file mode 100644 index 00000000..a7bad3fd --- /dev/null +++ b/.venv/lib/python3.12/site-packages/docutils/writers/xetex/__init__.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +# :Author: Günter Milde <milde@users.sf.net> +# :Revision: $Revision: 9293 $ +# :Date: $Date: 2022-12-01 22:13:54 +0100 (Do, 01. Dez 2022) $ +# :Copyright: © 2010 Günter Milde. +# :License: Released under the terms of the `2-Clause BSD license`_, in short: +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. +# This file is offered as-is, without any warranty. +# +# .. _2-Clause BSD license: https://opensource.org/licenses/BSD-2-Clause + +""" +XeLaTeX document tree Writer. + +A variant of Docutils' standard 'latex2e' writer producing LaTeX output +suited for processing with the Unicode-aware TeX engines +LuaTeX and XeTeX. +""" + +__docformat__ = 'reStructuredText' + +from docutils import frontend +from docutils.writers import latex2e + + +class Writer(latex2e.Writer): + """A writer for Unicode-aware LaTeX variants (XeTeX, LuaTeX)""" + + supported = ('latex', 'tex', 'xetex', 'xelatex', 'luatex', 'lualatex') + """Formats this writer supports.""" + + default_template = 'xelatex.tex' + default_preamble = """\ +% Linux Libertine (free, wide coverage, not only for Linux) +\\setmainfont{Linux Libertine O} +\\setsansfont{Linux Biolinum O} +\\setmonofont[HyphenChar=None,Scale=MatchLowercase]{DejaVu Sans Mono}""" + + config_section = 'xetex writer' + config_section_dependencies = ('writers', 'latex writers') + + # use a copy of the parent spec with some modifications: + settings_spec = frontend.filter_settings_spec( + latex2e.Writer.settings_spec, + # removed settings + 'font_encoding', + # changed settings: + template=('Template file. Default: "%s".' % default_template, + ['--template'], + {'default': default_template, 'metavar': '<file>'}), + latex_preamble=('Customization by LaTeX code in the preamble. ' + 'Default: select "Linux Libertine" fonts.', + ['--latex-preamble'], + {'default': default_preamble}), + ) + + def __init__(self): + latex2e.Writer.__init__(self) + self.settings_defaults.update({'fontencoding': ''}) # use default (TU) + self.translator_class = XeLaTeXTranslator + + +class Babel(latex2e.Babel): + """Language specifics for XeTeX. + + Use `polyglossia` instead of `babel` and adapt settings. + """ + language_codes = latex2e.Babel.language_codes.copy() + # Additionally supported or differently named languages: + language_codes.update({ + # code Polyglossia-name comment + 'cop': 'coptic', + 'de': 'german', # new spelling (de_1996) + 'de-1901': 'ogerman', # old spelling + 'dv': 'divehi', # Maldivian + 'dsb': 'lsorbian', + 'el-polyton': 'polygreek', + 'fa': 'farsi', + 'grc': 'ancientgreek', + 'ko': 'korean', + 'hsb': 'usorbian', + 'sh-Cyrl': 'serbian', # Serbo-Croatian, Cyrillic script + 'sh-Latn': 'croatian', # Serbo-Croatian, Latin script + 'sq': 'albanian', + 'sr': 'serbian', # Cyrillic script (sr-Cyrl) + 'th': 'thai', + 'vi': 'vietnamese', + # zh-Latn: ??? # Chinese Pinyin + }) + # normalize (downcase) keys + language_codes = {k.lower(): v for k, v in language_codes.items()} + + # Languages without Polyglossia support: + for key in ('af', # 'afrikaans', + 'de-AT', # 'naustrian', + 'de-AT-1901', # 'austrian', + # TODO: use variant=... for English variants + 'en-CA', # 'canadian', + 'en-GB', # 'british', + 'en-NZ', # 'newzealand', + 'en-US', # 'american', + 'fr-CA', # 'canadien', + 'grc-ibycus', # 'ibycus', (Greek Ibycus encoding) + 'sr-Latn', # 'serbian script=latin' + ): + del language_codes[key.lower()] + + def __init__(self, language_code, reporter): + self.language_code = language_code + self.reporter = reporter + self.language = self.language_name(language_code) + self.otherlanguages = {} + self.warn_msg = 'Language "%s" not supported by Polyglossia.' + self.quote_index = 0 + self.quotes = ('"', '"') + # language dependent configuration: + # double quotes are "active" in some languages (e.g. German). + self.literal_double_quote = '"' # TODO: use \textquotedbl ? + + def __call__(self): + setup = [r'\usepackage{polyglossia}', + r'\setdefaultlanguage{%s}' % self.language] + if self.otherlanguages: + setup.append(r'\setotherlanguages{%s}' % + ','.join(sorted(self.otherlanguages.keys()))) + return '\n'.join(setup) + + +class XeLaTeXTranslator(latex2e.LaTeXTranslator): + """ + Generate code for LaTeX using Unicode fonts (XeLaTex or LuaLaTeX). + + See the docstring of docutils.writers._html_base.HTMLTranslator for + notes on and examples of safe subclassing. + """ + + def __init__(self, document): + self.is_xetex = True # typeset with XeTeX or LuaTeX engine + latex2e.LaTeXTranslator.__init__(self, document, Babel) + if self.latex_encoding == 'utf8': + self.requirements.pop('_inputenc', None) + else: + self.requirements['_inputenc'] = (r'\XeTeXinputencoding %s ' + % self.latex_encoding) |