summaryrefslogtreecommitdiff
path: root/build-feed.py
diff options
context:
space:
mode:
Diffstat (limited to 'build-feed.py')
-rwxr-xr-xbuild-feed.py45
1 files changed, 43 insertions, 2 deletions
diff --git a/build-feed.py b/build-feed.py
index d3409f9..a8cb733 100755
--- a/build-feed.py
+++ b/build-feed.py
@@ -4,7 +4,13 @@ from sys import argv
from urllib.parse import urljoin
from xml.etree.ElementTree import Element, SubElement, indent, tostring
-from helpers import guess_language, read_concerts, tmplocale
+from helpers import (
+ DATE_FORMATTERS,
+ guess_language,
+ read_concerts,
+ tmplocale,
+ touchup_plaintext,
+)
LOCALIZED_TEXT = {
@@ -36,6 +42,39 @@ def text_element(tag, text, /, **kwargs):
return elt
+def block(tag, content):
+ return f'<{tag}>{content}</{tag}>'
+
+
+def cdata_concert(concert, lang):
+ formatters = DATE_FORMATTERS[lang]
+
+ blocks = []
+
+ if concert.warning is None:
+ blocks.append(block('p', concert.warning))
+
+ blocks.extend((
+ block('p', formatters['date'](concert.time)),
+ block('p', formatters['time'](concert.time)),
+ block('p', concert.address.replace('\n', '<br>'))
+ ))
+
+ piece_list = '\n'.join(
+ block('li', touchup_plaintext(p)) for p in concert.pieces.splitlines()
+ )
+ blocks.append(block('ol', piece_list))
+
+ blocks.extend(
+ block('p', touchup_plaintext(line))
+ for line in concert.instructions.splitlines()
+ )
+
+ cdata = '\n'.join((blocks))
+
+ return f'<![CDATA[{cdata}]]'
+
+
def generate_concert(concert, concerts_url, lang):
formatters = LOCALIZED_FORMATS[lang]
@@ -48,11 +87,13 @@ def generate_concert(concert, concerts_url, lang):
anchor = f'concert-{concert.time.strftime("%F")}'
item.append(text_element('link', f'{concerts_url}#{anchor}'))
+ cdata = cdata_concert(concert, lang)
+ item.append(text_element('description', cdata))
+
return item
def generate_concerts(concerts_src, concerts_url, lang):
-
for c in read_concerts(concerts_src):
yield generate_concert(c, concerts_url, lang)