63 lines
2.9 KiB
Python
63 lines
2.9 KiB
Python
|
#!/usr/bin/python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import datetime
|
||
|
import xml.etree.ElementTree as ET
|
||
|
|
||
|
class XmlXhtml:
|
||
|
|
||
|
def generate_xhtml(atom: dict):
|
||
|
"""Generate an XHTML document."""
|
||
|
e_html = ET.Element('html')
|
||
|
e_html.set('xmlns', 'http://www.w3.org/1999/xhtml')
|
||
|
e_head = ET.SubElement(e_html, 'head')
|
||
|
ET.SubElement(e_head, 'title').text = atom['title']
|
||
|
ET.SubElement(e_head, 'link', {'rel': 'stylesheet',
|
||
|
'href': 'pubsub.css'})
|
||
|
e_body = ET.SubElement(e_html, "body")
|
||
|
ET.SubElement(e_body, "h1").text = atom['title']
|
||
|
ET.SubElement(e_body, "h2").text = atom['subtitle']
|
||
|
for item in atom['items']:
|
||
|
item_id = item['id']
|
||
|
title = item['title']
|
||
|
links = item['links']
|
||
|
e_article = ET.SubElement(e_body, 'article')
|
||
|
e_title = ET.SubElement(e_article, 'h3')
|
||
|
e_title.text = item['title']
|
||
|
e_title.set('id', item['id'])
|
||
|
e_date = ET.SubElement(e_article, 'h4')
|
||
|
e_date.text = item['published']
|
||
|
e_date.set('title', 'Updated: ' + item['updated'])
|
||
|
authors = item['authors']
|
||
|
if authors:
|
||
|
e_authors = ET.SubElement(e_article, "dl")
|
||
|
ET.SubElement(e_authors, "dt").text = 'Authors'
|
||
|
for author in authors:
|
||
|
e_dd = ET.SubElement(e_authors, 'dd')
|
||
|
e_author = ET.SubElement(e_dd, 'a')
|
||
|
e_author.text = author['name'] or author['uri'] or author['email']
|
||
|
if 'email' in author and author['email']:
|
||
|
e_author.set('href', 'mailto:' + author['email'])
|
||
|
elif 'uri' in author and author['uri']:
|
||
|
e_author.set('href', author['uri'])
|
||
|
for content in item['contents']:
|
||
|
ET.SubElement(e_article, 'p', {'type': content['type']}).text = content['text']
|
||
|
if links:
|
||
|
e_links = ET.SubElement(e_article, "dl")
|
||
|
e_links.set('class', 'links')
|
||
|
ET.SubElement(e_links, "dt").text = 'Links'
|
||
|
for link in links:
|
||
|
e_dd = ET.SubElement(e_links, 'dd')
|
||
|
e_link = ET.SubElement(e_dd, 'a')
|
||
|
e_link.set('href', link['href'])
|
||
|
e_link.text = link['rel']
|
||
|
if link['type']: ET.SubElement(e_dd, 'span').text = link['type']
|
||
|
categories = item['categories']
|
||
|
if categories:
|
||
|
e_categories = ET.SubElement(e_article, "dl")
|
||
|
e_categories.set('class', 'categories')
|
||
|
ET.SubElement(e_categories, "dt").text = 'Categories'
|
||
|
for category in categories:
|
||
|
ET.SubElement(e_categories, 'dd').text = category
|
||
|
return ET.tostring(e_html, encoding='unicode')
|