From 61afd7cc3dbfaf62553ce686381a7b50e5bae49d Mon Sep 17 00:00:00 2001
From: Astro
Date: Fri, 4 Mar 2022 20:58:31 +0100
Subject: [PATCH] add initial support for Gemini
---
Makefile.gemini | 249 +++++++++++++++++++++++
content/pages/pentamusic.xml | 2 +-
content/pages/radio.xml | 3 +-
xsl/gemini.xsl | 373 +++++++++++++++++++++++++++++++++++
4 files changed, 624 insertions(+), 3 deletions(-)
create mode 100644 Makefile.gemini
create mode 100644 xsl/gemini.xsl
diff --git a/Makefile.gemini b/Makefile.gemini
new file mode 100644
index 000000000..331a6632e
--- /dev/null
+++ b/Makefile.gemini
@@ -0,0 +1,249 @@
+# eingebaute Variablen und Regeln werden nicht gebraucht
+MAKEFLAGS += -rR
+
+### Programme ###
+# XSLT-Prozessor:
+PROCESSOR=xsltproc
+PFLAGS=--novalid --catalogs --stringparam baseurl $(BASEURL)
+BASEURL=""
+RM=rm -f
+# XML-Validator
+VALIDATOR=xmllint
+VFLAGS=--noout --nonet
+# VALIDATOR-Flags für Eingabe-XML (meist c3d2web)
+VFLAGS_IN=$(VFLAGS) --schema xsd/c3d2web.xsd
+# VALIDATOR-Flags für Ausgabe-XML (xhtml, rss, atom, ...)
+VFLAGS_OUT=$(VFLAGS)
+SGML_CATALOG_FILES=$(XML_CATALOG)
+export SGML_CATALOG_FILES
+# Downloadmanager (Alternativ: curl, fetch):
+WGET=wget
+# rsync
+RSYNC=rsync
+# -l, --links copy symlinks as symlinks
+RSYNC_FLAGS=--links --verbose --recursive --delete --delete-after --delete-excluded --checksum --chmod=ugo=rX
+
+# Verzeichnis, in das exportiert werden soll
+DESTDIR?=www-export
+
+### Ressourcen ###
+# XSLT-Stylesheets:
+STYLE=xsl/gemini.xsl
+# Document-Type-Definition:
+DTD:=dtd/c3d2web.dtd
+# XML-Katalog (Pfad zu den DTDs) - wird benötigt vom Validator
+XML_CATALOG:=dtd/catalog.xml
+# Navigationsleiste:
+NAVIGATION=content/navigation.xml
+# Chaosupdates:
+#WWW_CCC_DE_UPDATES=chaosupdates.xml
+# Calendar summary::
+CALENDAR_SUMMARY=calendar-summary.xml
+
+### Ziele ###
+# Mindestens 1x täglich neubauen wegen Chaosupdates & Kalender
+DATESTAMP=build/.stamp-$(shell date +%Y-%m-%d)
+
+# Dateinamen der zu erzeugenden gmi-Dateien:
+CONTENT=$(PAGES) $(NEWS_PAGES) $(NEWSFILES) build/calendar.gmi
+
+# 'normale' Seiten:
+PAGES:=$(patsubst content/pages/%.xml, build/%.gmi, $(wildcard content/pages/*.xml))
+# Seiten zu einzelnen News-Items:
+NEWS_PAGES:=$(patsubst content/news/%.xml, build/news/%.gmi, $(wildcard content/news/*.xml))
+# News-Index und Feeds:
+NEWSFILES:=build/news.gmi build/news-rss.xml build/news-atom.xml \
+ build/podcast.xml build/pentaradio.xml build/pentacast.xml build/pentamusic.xml build/pentamedia.xml \
+ build/news-archiv-rss.xml build/news-archiv-atom.xml \
+ build/podcast-archiv.xml build/pentaradio-archiv.xml build/pentacast-archiv.xml \
+ build/pentamusic-archiv.xml build/pentamedia-archiv.xml \
+ build/ical.ics build/hq.ics build/xcal.xml build/reminders \
+ build/pentacast-ogg.xml build/pentacast-ogg-archiv.xml \
+ build/portal.gmi
+PLAYLISTS:=$(patsubst content/news/pentaradio%.xml, build/news/pentaradio%.xspf, $(wildcard content/news/pentaradio*.xml)) \
+ $(patsubst content/news/pentaradio%.xml, build/news/pentaradio%.pls, $(wildcard content/news/pentaradio*.xml)) \
+ $(patsubst content/news/pentaradio%.xml, build/news/pentaradio%.m3u, $(wildcard content/news/pentaradio*.xml))
+
+# Quellen
+NEWSITEMS:=$(wildcard content/news/*.xml)
+#CLEAN=$(CONTENT) $(NEWSFILES) $(WWW_CCC_DE_UPDATES) $(CALENDAR_SUMMARY) $(DS_PAGES) $(DS_FEEDS)
+CLEAN=$(CONTENT) $(NEWSFILES) $(CALENDAR_SUMMARY) $(DS_PAGES) $(DS_FEEDS)
+
+NOINPUTVALID:=false
+NOVALID:=false
+
+ALL_XSLS = $(wildcard xsl/*.xsl)
+
+define xml_process
+ $(PROCESSOR) $(PFLAGS) -o $@ $(STYLE) $<
+ @$(NOVALID) || echo $(VALIDATOR) $(VFLAGS_OUT) $@ || \
+ { touch -m -t 197001010000 Makefile $@ ; exit 1 ; }
+ @$(NOVALID) || $(VALIDATOR) $(VFLAGS_OUT) $@ || \
+ { touch -m -t 197001010000 Makefile $@ ; exit 1 ; }
+endef
+
+### Defaults ###
+
+.PHONY: www
+www: $(XML_CATALOG) $(CONTENT)
+ $(RSYNC) $(RSYNC_FLAGS) --exclude=".stamp-*" content/static/ content/old-site/ build/ $@
+
+.PHONY: export
+export: www
+ $(RSYNC) $(RSYNC_FLAGS) --exclude=".git/" www/ $(DESTDIR)/
+
+$(DATESTAMP):
+ mkdir -p build
+ $(RM) $(wildcard build/.stamp-*)
+ touch $@
+
+### Regeln für den XSLT-Prozess ###
+
+build/%.gmi : NOVALID:=true
+#build/news.gmi: $(WWW_CCC_DE_UPDATES) $(CALENDAR_SUMMARY) $(DATESTAMP)
+build/news.gmi: $(CALENDAR_SUMMARY) $(DATESTAMP)
+
+## Feedgrößen begrenzen!
+build/%.xml : MAX_ITEMS=23
+build/%.xml : PFLAGS+=--param maxitems $(MAX_ITEMS)
+build/%-archiv.xml build/news-archiv-%.xml : MAX_ITEMS=9999999
+## Erscheinen regelmäßig, aber guck durch mehr als 23 Items zurück
+build/podcast.xml build/pentamedia.xml build/pentaradio.xml build/pentamusic.xml : MAX_ITEMS=100
+## Erscheint leider nicht so oft
+build/pentacast.xml build/pentacast-ogg.xml : MAX_ITEMS=200
+
+build/news-rss.xml build/news-archiv-rss.xml : STYLE=xsl/rss.xsl
+build/news-rss.xml build/news-archiv-rss.xml : PFLAGS+=--stringparam prefix ""
+build/news-rss.xml build/news-archiv-rss.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
+build/news-rss.xml : PFLAGS+=--stringparam archivefeed news-archiv-rss.xml
+build/news-atom.xml build/news-archiv-atom.xml : STYLE=xsl/atom.xsl
+build/news-atom.xml build/news-archiv-atom.xml : PFLAGS+=--stringparam prefix ""
+build/news-atom.xml build/news-archiv-atom.xml : NOVALID=true
+build/news-atom.xml build/news-archiv-atom.xml : VFLAGS_OUT=$(VFLAGS) --relaxng xsd/atom.rng
+build/news-atom.xml : PFLAGS+=--stringparam archivefeed news-archiv-atom.xml
+build/podcast.xml build/podcast-archiv.xml : STYLE=xsl/podcast.xsl
+build/podcast.xml build/podcast-archiv.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
+build/podcast.xml build/podcast-archiv.xml : PFLAGS+=--stringparam format audio/mpeg,video/mp4
+build/podcast.xml build/podcast-archiv.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
+build/podcast.xml : PFLAGS+=--stringparam archivefeed podcast-archiv.xml
+build/pentaradio.xml build/pentaradio-archiv.xml : STYLE=xsl/podcast.xsl
+build/pentaradio.xml build/pentaradio-archiv.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
+build/pentaradio.xml build/pentaradio-archiv.xml : PFLAGS+=--stringparam selection pentaradio --stringparam format audio/mpeg,video/mp4
+build/pentaradio.xml build/pentaradio-archiv.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
+build/pentaradio.xml : PFLAGS+=--stringparam archivefeed pentaradio-archiv.xml
+build/pentacast.xml build/pentacast-archiv.xml : STYLE=xsl/podcast.xsl
+build/pentacast.xml build/pentacast-archiv.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
+build/pentacast.xml build/pentacast-archiv.xml : PFLAGS+=--stringparam selection pentacast --stringparam format audio/mpeg,video/mp4
+build/pentacast.xml build/pentacast-archiv.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
+build/pentacast.xml : PFLAGS+=--stringparam archivefeed pentacast-archiv.xml
+
+build/pentacast-ogg.xml build/pentacast-ogg-archiv.xml : STYLE=xsl/podcast.xsl
+build/pentacast-ogg.xml build/pentacast-ogg-archiv.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
+build/pentacast-ogg.xml build/pentacast-ogg-archiv.xml : PFLAGS+=--stringparam selection pentacast --stringparam format audio/ogg,video/ogg,application/ogg,video/webm
+build/pentacast-ogg.xml build/pentacast-ogg-archiv.xml : xsl/podcast.xsl # Does not work with $(STYLE) - why?
+build/pentacast-ogg.xml : PFLAGS+=--stringparam archivefeed pentacast-ogg-archiv.xml
+
+build/pentamusic.xml build/pentamusic-archiv.xml : STYLE=xsl/podcast.xsl
+build/pentamusic.xml build/pentamusic-archiv.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
+build/pentamusic.xml build/pentamusic-archiv.xml : PFLAGS+=--stringparam selection pentamusic --stringparam format audio/mpeg,video/mp4
+build/pentamusic.xml build/pentamusic-archiv.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
+build/pentamusic.xml : PFLAGS+=--stringparam archivefeed pentamusic-archiv.xml
+
+build/pentamedia.xml build/pentamedia-archiv.xml : STYLE=xsl/podcast.xsl
+build/pentamedia.xml build/pentamedia-archiv.xml : VFLAGS_OUT=$(VFLAGS) --schema xsd/rss20.xsd
+build/pentamedia.xml build/pentamedia-archiv.xml : PFLAGS+=--stringparam selection pentamedia --stringparam format audio/mpeg,video/mp4
+build/pentamedia.xml build/pentamedia-archiv.xml: xsl/podcast.xsl # Does not work with $(STYLE) - why?
+build/pentamedia.xml : PFLAGS+=--stringparam archivefeed pentamedia-archiv.xml
+
+#.INTERMEDIATE: news.xml
+news.xml: $(NEWSITEMS)
+ sh scripts/gen_news.xml.sh $^ > $@
+
+$(NEWSFILES): news.xml $(NAVIGATION) $(STYLE)
+ $(call xml_process)
+
+# Calendar
+$(CALENDAR_SUMMARY) : STYLE=xsl/calendar-summary.xsl
+$(CALENDAR_SUMMARY) : NOVALID:=true
+$(CALENDAR_SUMMARY) : VFLAGS_IN=$(VFLAGS)
+$(CALENDAR_SUMMARY): content/events.xml news.xml
+ $(call xml_process)
+
+# XCal
+build/xcal.xml : STYLE=xsl/xcal.xsl
+build/xcal.xml : VFLAGS_IN=$(VFLAGS)
+build/xcal.xml: $(CALENDAR_SUMMARY) $(STYLE)
+ $(call xml_process)
+
+# iCal
+build/ical.ics : STYLE=xsl/ical.xsl
+build/ical.ics : NOVALID:=true
+build/ical.ics : VFLAGS_IN=$(VFLAGS)
+build/ical.ics : VFLAGS_OUT=$(VFLAGS)
+build/ical.ics: $(CALENDAR_SUMMARY) $(STYLE)
+ $(call xml_process)
+
+# iCal with events at our hackerspace, for http://itedd.de/ + https://spaceapi.ccc.de/
+build/hq.ics : STYLE=xsl/ical.xsl
+build/hq.ics : PFLAGS+=--stringparam location-filter HQ
+build/hq.ics : NOVALID:=true
+build/hq.ics : VFLAGS_IN=$(VFLAGS)
+build/hq.ics : VFLAGS_OUT=$(VFLAGS)
+build/hq.ics: $(CALENDAR_SUMMARY) $(STYLE)
+ $(call xml_process)
+
+# Remind
+build/reminders : STYLE=xsl/remind.xsl
+build/reminders : NOVALID:=true
+build/reminders : VFLAGS_IN=$(VFLAGS)
+build/reminders : VFLAGS_OUT=$(VFLAGS)
+build/reminders: $(CALENDAR_SUMMARY) $(STYLE)
+ $(call xml_process)
+
+# Playlists
+build/%.xspf : VFLAGS_OUT=$(VFLAGS) --relaxng xsd/xspf-1_0.5.rng
+build/%.m3u : NOVALID:=true
+build/%.pls : NOVALID:=true
+
+# Portal
+portal:
+ mkdir $@
+
+portal/Makefile : STYLE=xsl/portal2fetch.xsl
+portal/Makefile : NOINPUTVALID:=true
+portal/Makefile : NOVALID:=true
+portal/Makefile: content/portal-config.xml $(STYLE)
+ $(call xml_process)
+
+portal/items.xml : STYLE=xsl/portal2items.xsl
+portal/items.xml : NOINPUTVALID:=true
+portal/items.xml : NOVALID:=true
+portal/items.xml: content/portal-config.xml $(STYLE) portal/Makefile news.xml
+ $(MAKE) -C portal fetch
+ $(call xml_process)
+
+portal/items-sorted.xml : STYLE=xsl/portal-sort.xsl
+portal/items-sorted.xml: portal/items.xml $(STYLE)
+ $(call xml_process)
+
+build/portal.gmi : NOINPUTVALID:=true
+build/portal.gmi: portal/items-sorted.xml $(CALENDAR_SUMMARY) $(STYLE) $(CALENDAR_SUMMARY)
+ $(call xml_process)
+
+# Pages:
+build/%.gmi: content/pages/%.xml $(STYLE) $(NAVIGATION) $(DATESTAMP) news.xml
+ $(call xml_process)
+
+build/calendar.gmi: content/pages/calendar.xml $(STYLE) $(NAVIGATION) $(DATESTAMP) $(CALENDAR_SUMMARY)
+ $(call xml_process)
+
+# News:
+build/news/%.gmi : BASEURL="../"
+build/news/%.gmi: content/news/%.xml $(STYLE) $(NAVIGATION) $(DATESTAMP)
+ $(call xml_process)
+
+### Mr. Propper ###
+.PHONY: clean
+clean:
+ $(RM) $(CLEAN) news.xml
+ $(RM) -r portal
diff --git a/content/pages/pentamusic.xml b/content/pages/pentamusic.xml
index 92acd96af..b8edb1530 100644
--- a/content/pages/pentamusic.xml
+++ b/content/pages/pentamusic.xml
@@ -8,8 +8,8 @@
vors Mikro zu holen um diese einer breiteren Öffentlichkeit bekannt
zu machen.
+ images/pentamusic.png
- images/pentamusic.png
Die Feeds der C3D2-News ( RSS, ATOM) beinhalten die Mitschnitte als Podcasts.
diff --git a/content/pages/radio.xml b/content/pages/radio.xml
index 12ff62152..480c617e5 100644
--- a/content/pages/radio.xml
+++ b/content/pages/radio.xml
@@ -10,9 +10,8 @@
ausgestrahlt wird, bestehend aus einem informativen Rahmenprogramm
und Beiträgen zu einem sendungsspezifischen Thema.
+ images/pentaradio.png
- images/pentaradio.png
-
Die Feeds der C3D2-News
( RSS, ATOM)
beinhalten die Mitschnitte als Podcasts.
diff --git a/xsl/gemini.xsl b/xsl/gemini.xsl
new file mode 100644
index 000000000..e34d76ca5
--- /dev/null
+++ b/xsl/gemini.xsl
@@ -0,0 +1,373 @@
+
+
+
+
+
+
+
+
+
+
+
+ C3D2.de
+
+
+
+
+
+
+
+
+
+
+
+ missing title
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+ <<</>> Chaos Computer Club Dresden | c3d2
+
+
+
+ ## Navigation
+
+
+ =>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
=>
+
+ portal.gmi Start
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ##
+
+
+
+
+
+
+ von
+
+
+
+ =>
+
+ .gmi News lesen
+
+
+
+
+
+ => news-atom.xml ATOM
+ => news-rss.xml RSS
+ => news-archiv.gmi Archiv
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ##
+
+
+
+
+
+
+ von
+
+
+
+ =>
+
+ .gmi News lesen
+
+
+
+
+
+
+
+
+
+ ## Kalender
+
+
+
+
+ ## Changelog
+
+
+
+
+
+
+
+
+
+
+
+
+ =>
+
+
+
+
+
+ *
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+ =>
+
+
+
+
+
+
+ (
+
+
+
+
+
+
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ =>
+
+
+
+ (
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+
+
+
+
+ ##
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ =>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GiB
+
+
+
+ MiB
+
+
+
+ KiB
+
+
+
+ Byte
+
+
+
+