diff options
Diffstat (limited to 'creole/shared/base_emitter.py')
-rw-r--r-- | creole/shared/base_emitter.py | 69 |
1 files changed, 32 insertions, 37 deletions
diff --git a/creole/shared/base_emitter.py b/creole/shared/base_emitter.py index de6fd2f..d0c98f1 100644 --- a/creole/shared/base_emitter.py +++ b/creole/shared/base_emitter.py @@ -1,20 +1,16 @@ -#!/usr/bin/env python -# coding: utf-8 """ Base document tree emitter ~~~~~~~~~~~~~~~~~~~~~~~~~~ - :copyleft: 2008-2011 by python-creole team, see AUTHORS for more details. + :copyleft: 2008-2020 by python-creole team, see AUTHORS for more details. :license: GNU GPL v3 or above, see LICENSE for more details. """ - -from creole.parser.html_parser_config import BLOCK_TAGS from creole.html_tools.deentity import Deentity -from creole.py3compat import TEXT_TYPE +from creole.parser.html_parser_config import BLOCK_TAGS from creole.shared.markup_table import MarkupTable from creole.shared.unknown_tags import transparent_unknown_nodes @@ -24,6 +20,7 @@ class BaseEmitter(object): Build from a document_tree (html2creole.parser.HtmlParser instance) a creole markup text. """ + def __init__(self, document_tree, unknown_emit=None, debug=False): self.root = document_tree @@ -35,20 +32,20 @@ class BaseEmitter(object): self.last = None self.debugging = debug - self.deentity = Deentity() # for replacing html entities + self.deentity = Deentity() # for replacing html entities self._inner_list = "" self._mask_linebreak = False - #-------------------------------------------------------------------------- + # -------------------------------------------------------------------------- def blockdata_pass_emit(self, node): - return "%s\n\n" % node.content + return f"{node.content}\n\n" return node.content - #-------------------------------------------------------------------------- + # -------------------------------------------------------------------------- def data_emit(self, node): - #node.debug() + # node.debug() return node.content def entityref_emit(self, node): @@ -59,13 +56,13 @@ class BaseEmitter(object): try: return self.deentity.replace_named(entity) - except KeyError as err: + except KeyError: if self.debugging: - print("unknown html entity found: %r" % entity) - return "&%s" % entity # FIXME + print(f"unknown html entity found: {entity!r}") + return f"&{entity}" # FIXME except UnicodeDecodeError as err: raise UnicodeError( - "Error handling entity %r: %s" % (entity, err) + f"Error handling entity {entity!r}: {err}" ) def charref_emit(self, node): @@ -82,7 +79,7 @@ class BaseEmitter(object): # entity as a unicode number return self.deentity.replace_number(entity) - #-------------------------------------------------------------------------- + # -------------------------------------------------------------------------- def p_emit(self, node): return "%s\n\n" % self.emit_children(node) @@ -93,16 +90,16 @@ class BaseEmitter(object): else: return "\n" - #-------------------------------------------------------------------------- + # -------------------------------------------------------------------------- def _typeface(self, node, key): return key + self.emit_children(node) + key - #-------------------------------------------------------------------------- + # -------------------------------------------------------------------------- def li_emit(self, node): content = self.emit_children(node) - return "\n%s %s" % (self._inner_list, content) + return f"\n{self._inner_list} {content}" def _list_emit(self, node, list_type): start_newline = False @@ -110,7 +107,7 @@ class BaseEmitter(object): if not self.last.content or not self.last.content.endswith("\n"): start_newline = True - if self._inner_list == "": # Start a new list + if self._inner_list == "": # Start a new list self._inner_list = list_type else: self._inner_list += list_type @@ -119,7 +116,7 @@ class BaseEmitter(object): self._inner_list = self._inner_list[:-1] - if self._inner_list == "": # Start a new list + if self._inner_list == "": # Start a new list if start_newline: return "\n" + content + "\n\n" else: @@ -127,7 +124,7 @@ class BaseEmitter(object): else: return content - #-------------------------------------------------------------------------- + # -------------------------------------------------------------------------- def table_emit(self, node): self._table = MarkupTable( @@ -137,7 +134,7 @@ class BaseEmitter(object): ) self.emit_children(node) content = self._table.get_table_markup() - return "%s\n" % content + return f"{content}\n" def tr_emit(self, node): self._table.add_tr() @@ -165,13 +162,13 @@ class BaseEmitter(object): self._table.add_td(content) return "" - #-------------------------------------------------------------------------- + # -------------------------------------------------------------------------- def _emit_content(self, node): content = self.emit_children(node) content = self._escape_linebreaks(content) if node.kind in BLOCK_TAGS: - content = "%s\n\n" % content + content = f"{content}\n\n" return content def div_emit(self, node): @@ -180,7 +177,7 @@ class BaseEmitter(object): def span_emit(self, node): return self._emit_content(node) - #-------------------------------------------------------------------------- + # -------------------------------------------------------------------------- def document_emit(self, node): self.last = node @@ -196,7 +193,7 @@ class BaseEmitter(object): result = [] for child in node.children: content = self.emit_node(child) - assert isinstance(content, TEXT_TYPE) + assert isinstance(content, str) result.append(content) return result @@ -205,26 +202,24 @@ class BaseEmitter(object): def unicode_error(method_name, method, node, content): node.debug() raise AssertionError( - "Method '%s' (%s) returns no unicode - returns: %s (%s)" % ( - method_name, method, repr(content), type(content) - ) + f"Method '{method_name}' ({method}) returns no unicode - returns: {repr(content)} ({type(content)})" ) if node.level: - self.debug_msg("emit_node", "%s (level: %i): %r" % (node.kind, node.level, node.content)) + self.debug_msg("emit_node", f"{node.kind} (level: {node.level:d}): {node.content!r}") else: - self.debug_msg("emit_node", "%s: %r" % (node.kind, node.content)) + self.debug_msg("emit_node", f"{node.kind}: {node.content!r}") - method_name = "%s_emit" % node.kind + method_name = f"{node.kind}_emit" emit_method = getattr(self, method_name, None) if emit_method: content = emit_method(node) - if not isinstance(content, TEXT_TYPE): + if not isinstance(content, str): unicode_error(method_name, emit_method, node, content) else: content = self._unknown_emit(self, node) - if not isinstance(content, TEXT_TYPE): + if not isinstance(content, str): unicode_error(method_name, self._unknown_emit, node, content) self.last = node @@ -233,10 +228,10 @@ class BaseEmitter(object): # def emit(self): # """Emit the document represented by self.root DOM tree.""" # result = self.emit_node(self.root) -## return result.strip() # FIXME +# return result.strip() # FIXME # return result.rstrip() # FIXME - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- def debug_msg(self, method, txt): if not self.debugging: |