# legalmd: Markdown-based legal markup # Copyright © 2019 Lee Yingtong Li (RunasSudo) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import mistletoe import mistletoe.latex_renderer LMARG = 1 #cm def cm_to_twip(cms): return int(cms * 0.3937008 * 1440) def format(fstr, *args, **kwargs): fstr2 = fstr fstr2 = fstr2.replace('\\N', '\n') fstr2 = fstr2.replace('{', '{{') fstr2 = fstr2.replace('}', '}}') fstr2 = fstr2.replace('<', '{') fstr2 = fstr2.replace('>', '}') kwargs['lmarg'] = cm_to_twip(LMARG) return fstr2.format(*args, **kwargs) class RTFRenderer(mistletoe.base_renderer.BaseRenderer): def __init__(self, *extras): super().__init__(*extras) self.render_map['Subrules'] = self.render_subrules self.render_map['SubrulesItem'] = self.render_subrules_item self.render_map['Note'] = self.render_note self.render_map['Definition'] = self.render_definition self.lastalign = 0 self.heading_last = False def render_strong(self, token): return format(r'{\b <>}', self.render_inner(token)) def render_emphasis(self, token): return format(r'{\i <>}', self.render_inner(token)) def render_inline_code(self, token): raise Exception('NYI') def render_raw_text(self, token): return token.content.replace('\\', '\\\\').replace('{', r'\{').replace('}', r'\}') def render_strikethrough(self, token): raise Exception('NYI') def render_image(self, token): raise Exception('NYI') def render_link(self, token): raise Exception('NYI') def render_auto_link(self, token): raise Exception('NYI') def render_escape_sequence(self, token): raise Exception('NYI') def render_heading(self, token): if token.level == 1: # Part heading_last, self.heading_last = self.heading_last, True return format(r'{\sb\keepn\b\fs26\qc\caps Part