# 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