git @ Cat's Eye Technologies Cleandown / d3cfda2
Debug how Marko formats reference links. Chris Pressey 7 months ago
2 changed file(s) with 58 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
33
44 from argparse import ArgumentParser
55 import codecs
6 import logging
67 import sys
78
89 from marko import Parser
2425 f.write(result)
2526
2627
28 def initialize_logging(level):
29 root = logging.getLogger()
30 root.setLevel(level)
31
32 handler = logging.StreamHandler(sys.stdout)
33 handler.setLevel(level)
34
35 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
36 handler.setFormatter(formatter)
37
38 root.addHandler(handler)
39
40
2741 def main(args):
2842 argparser = ArgumentParser()
2943 argparser.add_argument('filenames', metavar='FILENAME', type=str, nargs='+',
3044 help='Names of Markdown files to pretty-print'
45 )
46 argparser.add_argument('--debug', action='store_true',
47 help='If given, display debugging information'
3148 )
3249 argparser.add_argument('-i', '--in-place', action='store_true',
3350 help='If given, rewrite Markdown files in place instead of creating new files'
3552 argparser.add_argument('--version', action='version', version="%(prog)s 0.0")
3653
3754 options = argparser.parse_args(sys.argv[1:])
55
56 initialize_logging(logging.DEBUG if options.debug else logging.INFO)
3857
3958 for in_filename in options.filenames:
4059 out_filename = in_filename if options.in_place else in_filename + '.out.md'
55 #
66 # SPDX-License-Identifier: LicenseRef-MIT-X-Cleandown
77
8 import logging
89
910 from marko.md_renderer import MarkdownRenderer
1011
1112
13 logger = logging.getLogger(__name__)
14
15
1216 class CleanMarkdownRenderer(MarkdownRenderer):
17
18 def __init__(self) -> None:
19 super().__init__()
20 logger.debug(f"Created new {self.__class__.__name__}")
1321
1422 def render_heading(self, element) -> str:
1523 if element.level in (1, 2):
5361 def render_line_break(self, element) -> str:
5462 result = "\n" + self._second_prefix if element.soft else "\\\n" + self._second_prefix
5563 return result
64
65 # debug how it formats reference links
66 def render_link(self, element) -> str:
67 link_text = self.render_children(element)
68 link_title = (
69 '"{}"'.format(element.title.replace('"', '\\"')) if element.title else None
70 )
71 assert self.root_node
72 logger.debug(f"Link ref defs: {self.root_node.link_ref_defs.items()}")
73 label = next(
74 (
75 k
76 for k, v in self.root_node.link_ref_defs.items()
77 if v == (element.dest, link_title)
78 ),
79 None,
80 )
81 logger.debug(f"rendering link, link_text '{link_text}', label '{label}'")
82 if label is not None:
83 if label == link_text:
84 return f"[{label}]"
85 return f"[{link_text}][{label}]"
86 title = f" {link_title}" if link_title is not None else ""
87 return f"[{link_text}]({element.dest}{title})"
88
89 def render_link_ref_def(self, element) -> str:
90 link_text = element.dest
91 if element.title:
92 link_text += f" {element.title}"
93 logger.debug(f"rendering link ref def, link_text '{link_text}', label '{element.label}'")
94 return f"[{element.label}]: {link_text}\n"