import re import os import tempfile import sys import klammer_base import urllib import kutil def html_link(target, link_text, is_section, no_quotation_marks): # [__link__target__text__] if not link_text: if is_section: link_text = target if no_quotation_marks else f"“{target}”" else: # Allow long URLs to break at a slash: link_text = re.sub('/', '/', target) link_text = re.sub('//', '//', link_text) link_text = f'{link_text}' target = f"[{target}]" if is_section else target #result = f"[__link__{target}__{link_text}__]" #return result if target.startswith("http") or ".html" in target: url = target elif is_section: url = f"__sectionlink__{target}__" else: url = f"^#{target}" result = f'{link_text}' return result def add_latex_footnote_if_necessary(url, link_text): result = "" if (('http://' in url or 'https://' in url) and ('http://' not in link_text and 'https://' not in link_text)): escaped_url = re.sub('#', '\\#', url) escaped_url = re.sub('%', '\\%', escaped_url) result += f'\\footnote{{\\\rule{{0pt}}{{12pt}}\\texttt{{{escaped_url}}}}}' return result def latex_link(target, link_text, is_section, no_quotation_marks, add_footnote): if target.startswith("http"): if link_text and link_text != "URL": result = f"#/ \\href{{{target}}}{{{link_text}}} #/" else: #result = f"\\\url{{{target}}}" result = f"#/ \\href{{{target}}}{{{target}}} #/" elif is_section: if not link_text: link_text = target if no_quotation_marks else f"``{target}''" result = f"\\hyperlink{{__seclink__{target}__}}{{{link_text}}}" else: result = f"\\hyperlink{{{target}}}{{{link_text}}}" # if add_footnote: # if self.footnote: # result += add_latex_footnote_if_necessary(target, link_text) # print(result) return result class Link(klammer_base.Klammer_base): def __init__(self, K): super().__init__(K) # self.show("Link") def html(self): return html_link(self.target, self.text, self.section == "true", self.nq) def tex(self): return latex_link(self.target, self.text, self.section, self.nq, self.footnote) def txt(self): text = f'{self.text} ' if self.text else '' return f'{text}[{self.url}]' class Target(klammer_base.Klammer_base): def __init__(self, K): super().__init__(K) id = K.id.strip() id = re.compile(r'\s+', re.S).sub('-', id) self.id = re.sub('_', '-', id) def html(self): id = self.id.split(':')[-1] return f'{self.text}' def tex(self): result = f'\\hypertarget{{{self.id}}}{{{self.text}}}' #result += '\\label{{{}-label}}'.format(id) return result def txt(self): return "" class Email(klammer_base.Klammer_base): def __init__(self, K): super().__init__(K) def html(self): def val(attr, s): return "{}={}&".format(attr, re.sub(" ", "%20", s)) domain = "&^#46;".join(self.domain.split(".")) address = "{}&^#64;{}".format(self.name, domain) href = "mailto&^#58;{}?".format(address) if self.subject: href += val("subject", self.subject) if self.body: href += val("body", self.body) href = href[:-1] result = '{}'.format(href, address) return result def tex(self): return r'\texttt{{{}^@{}}}'.format(self.name, self.domain)