diff --git a/src/osfexport/font/NotoEmoji-Regular.ttf b/src/osfexport/font/NotoEmoji-Regular.ttf new file mode 100644 index 0000000..b50618f Binary files /dev/null and b/src/osfexport/font/NotoEmoji-Regular.ttf differ diff --git a/src/osfexport/font/NotoSansSymbols2-Regular.ttf b/src/osfexport/font/NotoSansSymbols2-Regular.ttf new file mode 100644 index 0000000..429a51d Binary files /dev/null and b/src/osfexport/font/NotoSansSymbols2-Regular.ttf differ diff --git a/src/osfexport/formatter.py b/src/osfexport/formatter.py index 44ad58b..2937304 100644 --- a/src/osfexport/formatter.py +++ b/src/osfexport/formatter.py @@ -10,6 +10,12 @@ from mistletoe import markdown, HTMLRenderer import qrcode import urllib +import re + +_EMOJI_RE = re.compile(r'([\U0001F300-\U0001FAFF\U00002700-\U000027BF\U00002600-\U000026FF])') + +def wrap_emoji_with_font(html_text: str) -> str: + return _EMOJI_RE.sub(r'\1', html_text) class HTMLImageSizeCapRenderer(HTMLRenderer): @@ -109,6 +115,12 @@ def __init__(self, url=''): os.path.dirname(__file__), 'font', 'DejaVuSans-Oblique.ttf')) self.add_font(self.font, style="bi", fname=os.path.join( os.path.dirname(__file__), 'font', 'DejaVuSans-BoldOblique.ttf')) + # Extra fonts to cover emoji / symbols + self.add_font('noto-emoji', style="", fname=os.path.join( + os.path.dirname(__file__), 'font', 'NotoEmoji-Regular.ttf')) + self.add_font('noto-symbols2', style="", fname=os.path.join( + os.path.dirname(__file__), 'font', 'NotoSansSymbols2-Regular.ttf')) + def generate_qr_code(self): """ @@ -359,10 +371,12 @@ def _write_wiki_pages(self, wikis, title, parent=None): html = markdown( wikis[wiki], renderer=HTMLImageSizeCapRenderer - ) +) + html = wrap_emoji_with_font(html) self.write_html(html) + def explore_project_tree(project, projects, pdf=None): """Recursively find child projects and write them to a PDF.