|
|
|
@ -11,6 +11,7 @@ from docutils import writers, nodes
|
|
|
|
|
from docutils.nodes import Element, Text, Node |
|
|
|
|
from sphinx.util import logging |
|
|
|
|
from sphinx.util.docutils import SphinxTranslator |
|
|
|
|
from sphinx.util.osutil import relative_uri |
|
|
|
|
from sphinx import addnodes |
|
|
|
|
from sphinx.writers.text import Table, Cell |
|
|
|
|
from sphinx.locale import __, admonitionlabels |
|
|
|
@ -71,19 +72,19 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
|
|
|
|
|
def disable_pre(self) -> None: |
|
|
|
|
if self.pre: |
|
|
|
|
self.body += '```\n' |
|
|
|
|
self.pre = True |
|
|
|
|
self.body += '\n```\n' |
|
|
|
|
self.pre = False |
|
|
|
|
|
|
|
|
|
def enable_pre(self) -> None: |
|
|
|
|
if not self.pre: |
|
|
|
|
self.body += '```\n' |
|
|
|
|
self.body += '\n```\n' |
|
|
|
|
self.pre = True |
|
|
|
|
|
|
|
|
|
def visit_document(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_document(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
|
self.add_text(self.config.gemini_footer) |
|
|
|
|
|
|
|
|
|
def visit_section(self, node: Element) -> None: |
|
|
|
|
self.sectionlevel += 1 |
|
|
|
@ -120,14 +121,14 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_title(self, node: Element) -> None: |
|
|
|
|
if isinstance(node.parent, nodes.Admonition): |
|
|
|
|
self.add_text(node.astext() + ' : ') |
|
|
|
|
else: |
|
|
|
|
if not isinstance(node.parent, nodes.Admonition): |
|
|
|
|
self.add_title(node.astext()) |
|
|
|
|
self.end_block() |
|
|
|
|
self.end_block() |
|
|
|
|
raise nodes.SkipNode |
|
|
|
|
|
|
|
|
|
def depart_title(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
|
if isinstance(node.parent, nodes.Admonition): |
|
|
|
|
self.add_text(':') |
|
|
|
|
|
|
|
|
|
def visit_subtitle(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -139,7 +140,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
self.add_text('-- ') |
|
|
|
|
|
|
|
|
|
def depart_attribution(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_desc(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -157,7 +158,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_desc_signature_line(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_desc_name(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -181,7 +182,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
self.add_text(' -> ') |
|
|
|
|
|
|
|
|
|
def depart_desc_returns(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_desc_parameterlist(self, node: Element) -> None: |
|
|
|
|
self.add_text('(') |
|
|
|
@ -189,7 +190,6 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
|
|
|
|
|
def depart_desc_parameterlist(self, node: Element) -> None: |
|
|
|
|
self.add_text(')') |
|
|
|
|
self.end_block() |
|
|
|
|
|
|
|
|
|
def visit_desc_parameter(self, node: Element) -> None: |
|
|
|
|
if not self.first_param: |
|
|
|
@ -204,7 +204,6 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
|
|
|
|
|
def depart_desc_optional(self, node: Element) -> None: |
|
|
|
|
self.add_text(']') |
|
|
|
|
self.end_block() |
|
|
|
|
|
|
|
|
|
def visit_desc_annotation(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -213,7 +212,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_desc_content(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_desc_content(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -260,7 +259,6 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
self.add_quote(node[0].astext()) |
|
|
|
|
else: |
|
|
|
|
self.add_quote() |
|
|
|
|
self.end_block() |
|
|
|
|
|
|
|
|
|
def depart_citation(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -375,13 +373,15 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
list_items = cast(Iterable[nodes.list_item], bullet_list) |
|
|
|
|
self.new_state(0) |
|
|
|
|
self.add_text(', '.join(n.astext() for n in list_items) + '.') |
|
|
|
|
self.end_block() |
|
|
|
|
raise nodes.SkipNode |
|
|
|
|
|
|
|
|
|
def visit_image(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
if 'alt' in node.attributes: |
|
|
|
|
self.add_text(__('[image: %s]') % node['alt']) |
|
|
|
|
self.add_text(__('[image]')) |
|
|
|
|
uri = relative_uri(self.builder.current_docname, node['uri']) |
|
|
|
|
self.add_link(uri, __('[image: %s]') % node['alt']) |
|
|
|
|
else: |
|
|
|
|
self.add_link(uri) |
|
|
|
|
self.end_block() |
|
|
|
|
raise nodes.SkipNode |
|
|
|
|
|
|
|
|
@ -429,7 +429,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_term(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_classifier(self, node: Element) -> None: |
|
|
|
|
self.add_text(' : ') |
|
|
|
@ -465,7 +465,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_field_body(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_centered(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -489,7 +489,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_admonition(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def _visit_admonition(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -523,7 +523,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_versionmodified(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_literal_block(self, node: Element) -> None: |
|
|
|
|
self.enable_pre() |
|
|
|
@ -545,13 +545,12 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
|
|
|
|
|
def depart_line_block(self, node: Element) -> None: |
|
|
|
|
self.disable_pre() |
|
|
|
|
self.end_block() |
|
|
|
|
|
|
|
|
|
def visit_line(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_line(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_block_quote(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
@ -572,6 +571,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
|
|
|
|
|
def depart_paragraph(self, node: Element) -> None: |
|
|
|
|
self.end_block() |
|
|
|
|
self.end_block() |
|
|
|
|
|
|
|
|
|
def visit_target(self, node: Element) -> None: |
|
|
|
|
raise nodes.SkipNode |
|
|
|
@ -690,10 +690,7 @@ class GeminiTranslator(SphinxTranslator):
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def visit_inline(self, node: Element) -> None: |
|
|
|
|
if 'xref' in node['classes'] or 'term' in node['classes']: |
|
|
|
|
self.end_block() |
|
|
|
|
self.add_link(node['classes']['xref'], node.astext()) |
|
|
|
|
self.end_block() |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def depart_inline(self, node: Element) -> None: |
|
|
|
|
pass |
|
|
|
|