#!/usr/bin/python # -*- coding: utf-8 -*- #from markdown_text_clean import clean_text #from md2gemini import md2gemini #from rivista.gmi.markdown import GmiMarkdown from rivista.html.gmi import HtmlGmi from rivista.markdown.html import MarkdownHtml class GmiPost: def generate_gmi(atom: dict): """Generate an Gemini document.""" atom_title = atom['title'] atom_subtitle = atom['subtitle'] atom_header = f'# {atom_title}\n### {atom_subtitle}\n\n' atom_items = [] for item in atom['items']: item_title = item['title'] item_published = item['published'] item_updated = item['updated'] item_contents = '' for content in item['contents']: match content['type']: case 'text': content_html = MarkdownHtml.convert_to_html(content['text']) content_text = HtmlGmi.convert_to_gmi(content_html) #content_text = GmiMarkdown.convert_to_gmi(content['text']) #content_text = md2gemini(content['text'], links="at-end") #content_text = clean_text(content['text']) item_contents += f'\n{content_text}\n' case _ if content['type'] in ('html', 'xhtml'): content_text = HtmlGmi.convert_to_gmi(content['text']) item_contents += f'\n{content_text}\n' case _: content_text = content['text'] item_contents += f'\n```\n{content_text}\n```\n' links = item['links'] if 'links' in item else None item_links = '' if links: item_links = '\n### Related resources\n\n' for link in links: link_href = link['href'] link_rel = link['rel'] link_type = link['type'] if link_type: item_links += f'=> {link_href} {link_rel} ({link_type})\n' else: item_links += f'=> {link_href} {link_rel}\n' categories = item['categories'] if 'categories' in item else None item_categories = '' if categories: item_categories = '\n### Categories\n\n' for category in categories: item_categories += f'{category}, ' item_categories = item_categories[0:len(item_categories)-2] + '.\n' authors = item['authors'] if 'authors' in item else None item_authors = '' if authors: item_authors = '\n### Authors\n\n' for author in authors: author_text = author['name'] or author['uri'] or author['email'] if 'email' in author and author['email']: item_author_email = 'mailto:' + author['email'] item_authors += f'=> {author_text} {item_author_email}\n' elif 'uri' in author and author['uri']: item_author_uri = author['uri'] item_authors += f'=> {author_text} {item_author_uri}\n' else: item_authors += f'{author_text}\n' atom_items. append(f'\n## {item_title}\n\n' + f'Published: {item_published}\n' + f'Updated: {item_updated}\n' + item_contents + item_links + item_categories + item_authors) gmi_text = atom_header + '\n'.join(atom_items) return gmi_text