transform for index.html and storting data.xml

This commit is contained in:
vv01f 2019-06-13 03:29:43 +02:00
parent 90a4320282
commit cc4a355cba
No known key found for this signature in database
GPG Key ID: 02625A16AC1D1FF6
3 changed files with 402 additions and 2 deletions

12
gen.sh
View File

@ -1,3 +1,11 @@
#!/usr/bin/env sh #!/usr/bin/env sh
xsltproc --encoding utf-8 -o ds-feed.xml rss.xsl data.xml test $# -eq 0 && {
xsltproc --encoding iso-8859-1 -o download.html download.xsl data.xml xsltproc --encoding utf-8 -o ds-feed.xml rss.xsl data.xml
xsltproc --encoding iso-8859-1 -o download.html download.xsl data.xml
xsltproc --encoding utf-8 -o index.html index.xsl data.xml
exit 0
}
test "$1" = "sort" && {
xsltproc --encoding utf-8 -o sorted.xml sort.xsl data.xml
mv -i sorted.xml data.xml
}

311
index.xsl Normal file
View File

@ -0,0 +1,311 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" encoding="UTF-8" version="1.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/schleudern">
<xsl:variable name="limitelements">0</xsl:variable><!-- limit as integer, 0:no limit -->
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;</xsl:text>
<xsl:element name="html">
<xsl:attribute name="xml:lang">de</xsl:attribute>
<xsl:attribute name="lang">de</xsl:attribute>
<xsl:element name="head">
<meta charset="utf-8"/>
<title>Die Datenschleuder</title>
<meta name="robots" content="index,follow"/>
<link rel="schema.DC" href="http://purl.org/dc/terms/"/>
<link rel="alternate" type="application/rss+xml" title="Datenschleuder als RSS-Feed abonnieren" href="ds-feed.xml"/>
<meta name="dc.publisher" content="Chaos Computer Club" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<xsl:element name="style">
<xsl:attribute name="type">text/css</xsl:attribute>
<xsl:attribute name="media">screen,projection</xsl:attribute>
<!--
<xsl:attribute name="src">style.css</xsl:attribute>
-->
<xsl:text> @import "style.css";
time { font-family: Arial, sans-serif; font-size: 10pt; }</xsl:text>
</xsl:element>
<!--
<xsl:element name="style">
<xsl:attribute name="type">text/css</xsl:attribute>
<xsl:attribute name="media">all</xsl:attribute>
</xsl:element>
-->
<!--
<style type="text/css" media="screen,projection" src="style.css"/>
-->
<!--
<style type="text/css">
time { font-family: Arial, sans-serif !important; font-size: 12pt !important; }
</style>
-->
</xsl:element>
<xsl:element name="body">
<xsl:element name="p">
<xsl:attribute name="id">top</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="src">i/ds_headline.gif</xsl:attribute>
<xsl:attribute name="alt">Die Datenschleuder</xsl:attribute>
</xsl:element><xsl:element name="br"/>
<xsl:element name="img">
<xsl:attribute name="src">i/ds_subline.gif</xsl:attribute>
<xsl:attribute name="alt">Das wissenschaftliche Fachblatt für Datenreisende Ein Organ des Chaos Computer Club</xsl:attribute>
</xsl:element>
</xsl:element>
<p>
Die Datenschleuder | <a href="download.html">Download</a> | <a href="contact.html">Kontakt</a> | <a href="imprint.html">Impressum</a> | <a href="order.html">Bestellen</a>
</p>
<xsl:element name="div">
<xsl:attribute name="style">background: #dddddd; padding: 1px 15px 10px 15px;</xsl:attribute>
<xsl:element name="h2">
Wir sind wieder da.
</xsl:element><xsl:text>&#xa;</xsl:text>
<xsl:element name="div">
<xsl:attribute name="style">float:right; margin-left: 10px; margin-right: 20px;</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="style">width: 140px;</xsl:attribute>
<xsl:attribute name="src"><xsl:value-of select="schleuder[1]/image"/></xsl:attribute>
<xsl:attribute name="alt">Die aktuelle Datenschleuder #<xsl:value-of select="schleuder[1]/@id"/></xsl:attribute>
</xsl:element><xsl:text>&#xa;</xsl:text>
<xsl:element name="a">
<xsl:attribute name="href">/pdfs/ds096.pdf</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="style">width: 140px;</xsl:attribute>
<xsl:attribute name="src"><xsl:value-of select="schleuder[2]/image"/></xsl:attribute>
<xsl:attribute name="alt">Die etwas ältere Datenschleuder #<xsl:value-of select="schleuder[2]/@id"/></xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:element>
<xsl:text>&#xa;</xsl:text>
<xsl:for-each select="schleuder">
<xsl:element name="p">
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
<xsl:text>&#xa;</xsl:text>
<xsl:for-each select="info">
<xsl:element name="time">
<xsl:attribute name="datetime">
<xsl:if test="not(@date)"><xsl:value-of select="date"/></xsl:if>
<xsl:if test="count(@date)&gt;0"><xsl:value-of select="@date"/></xsl:if>
</xsl:attribute>
<xsl:call-template name="GermanDate">
<xsl:with-param name="EmailDate" select="@date" />
</xsl:call-template>
</xsl:element><br/><xsl:text>&#xa;</xsl:text>
<xsl:copy-of select="./node()" />
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
</xsl:element><xsl:text>&#xa;</xsl:text>
<!-- limit on last n elements -->
<xsl:if test="(($limitelements = 0) or ((position() &lt;= $limitelements) and ($limitelements &gt; 0))) and (count(teaser) &gt; 0)">
<xsl:element name="p">
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
<xsl:text>&#xa;</xsl:text>
<xsl:element name="time">
<xsl:attribute name="datetime">
<xsl:if test="count(date) &gt; 0">
<xsl:value-of select="date"/>
</xsl:if>
<xsl:if test="count(date) = 0">
<xsl:value-of select="@date"/>
</xsl:if>
</xsl:attribute>
<xsl:if test="count(date) &gt; 0">
<!--
<xsl:value-of select="date"/>
-->
<xsl:call-template name="GermanDate">
<xsl:with-param name="EmailDate" select="date" />
</xsl:call-template>
</xsl:if>
<xsl:if test="count(date) = 0">
<!--
<xsl:value-of select="@date"/>
-->
<xsl:call-template name="GermanDate">
<xsl:with-param name="EmailDate" select="@date" />
</xsl:call-template>
</xsl:if>
</xsl:element><br/><xsl:text>&#xa;</xsl:text>
<xsl:if test="count(teaser) &gt; 0">
<xsl:copy-of select="teaser/node()" />
</xsl:if>
<xsl:text>&#xa;</xsl:text>
</xsl:element><xsl:text>&#xa;</xsl:text>
</xsl:if>
</xsl:for-each>
<!-- old stuff -->
<!--
<p >
<time datetime="2018-07-20">20. Juli 2018</time><br />
Die 98. Ausgabe der Datenschleuder ist erschienen und auf dem Weg zu den Abonnenten.
Sie ist wie immer im gut sortierten Buchhandel oder <a href="order.html">direkt vom CCC</a> auch als Einzelexemplar zu beziehen.<br />
Zudem gibt es einen neuen Redaktions-PGP-Key, erhältlich auf allen Keyservern oder <a href="public-key.asc">hier.</a>
</p>
<p>
<small>20. November 2014</small><br />
Lange war es ruhig um die Datenschleuder. Fast schon zu lange. Daher freuen wir uns umso mehr, dass die Ausgabe 97 fertig gedruckt und auf dem Weg zu den Mitgliedern und Abonnenten ist. Wie &uuml;blich können Abonnements und Einzelausgaben <a href="order.html">direkt beim CCC</a> erworben werden.
</p>
<p>
<small>3. Juni 2012</small><br />
Es gibt einen neuen Redaktions-PGP-Key, erh&auml;ltlich auf allen Keyservern oder <a href="public-key.asc">hier.</a>
</p>
<p>
<small>18. Dezember 2011</small><br />
Passend zum 28. Chaos Communication Congress ist die 96. Datenschleuder erschienen und befindet sich ATM auf dem Weg zu den Abonnenten. Wie immer gibt es zur Überbrückung der Wartezeit das <a href="096/editorial.html">Editorial online zum Selberausdrucken</a>.
</p>
<p>
<small>7. September 2011</small><br />
Aufgrund eines kleinen «Fuckups» wird die Datenschleuder bei den Abonnenten voraussichtlich. fünf. bis zehn Minu... äh, Tage später eintreffen. Wir bitten um Verständnis.
</p>
<p>
<small>4. September 2011</small><br /> Nach längerer
Wartezeit ist jetzt die 95. Ausgabe der Datenschleuder
erschienen und auf dem Weg zu den Abonnenten. Sie ist wie
immer im gut sortierten Buchhandel
oder <a href="order.html">direkt vom CCC</a> auch als
Einzelexemplar zu beziehen. W&auml;hrend Ihr auf Euer Exemplar
wartet, lest doch solange <a href="095/editorial.html">das
Editorial</a>.
</p>
<p>
<small>18. M&auml;rz 2009</small><br /> Der Vorstand des CCC
hat die Wiedereinf&uuml;hrung der beliebten 8-Ausgaben
Miniabos beschlossen. Details gibt
es <a href="order.html">hier.</a>
</p>
<p>
<small>17. Dezember 2008</small><br /> P&uuml;nktlich
zum <a href="http://events.ccc.de/congress/2008/wiki/Main_Page/">25. Chaos
Communication Congress</a> sollten die inzwischen fast 2800
Mitglieder und Abonnenten ihre Datenschleuder im Briefkasten
vorfinden. Schwerpunkte sind in dieser Ausgabe der
dilettantische Umgang des BNDs mit ihren achsogeheimen Netzen
und eine Analyse des XMPP-Protokolls nach kryptografischen
Gesichtspunkten. Wie immer gibt es zum Schm&ouml;kern neben
der bereits
ver&ouml;ffentlichten <a href="vorab/Sicherheitsleck_Infratest.pdf">Vorabmeldung</a>
auch das <a href="093/editorial.html">Editorial</a> zum
Internetausdrucken und vorm Kamin lesen.
</p>
<p>
<small>29. März 2008</small><br /> Die 92. Ausgabe der
Datenschleuder ist erschienen und auf dem Weg zu den
Abonnenten. Als besonderes Gimmick liegt ihr dieses Mal eine
Fingerattrappe nach dem Bild unseres geliebten Innenministers
bei. Sie ist wie immer im gut sortierten Buchhandel
oder <a href="order.html">direkt vom CCC</a> auch als
Einzelexemplar zu beziehen. W&auml;hrend ihr auf Eure Ausgabe
wartet, lest doch solange <a href="092/editorial.html">das
Editorial</a>.
</p>
<p>
<small>03. Oktober 2006</small><br /> Das Experiment ist
beendet. Die Datenschleuder ist dank dem Einsatz hochmoderner
Technologien (HTML) auf dem besten Wege, den dreijährigen
Rückstand wieder aufzuholen. Redaktionssysteme sind im Prinzip
in Ordnung. In der Praxis rockt jedoch vi.
</p>
-->
<p>
In der <a href="download.html">Download-Sektion</a> gibt es
alle Datenschleudern, derer wir in der pdf-Version habhaft
werden konnten, zum kostenlosen Herunterladen. Eventuelle Links
zu einigen Artikeln sind kurzfristig hinüber, werden jedoch
schnellstmöglich wieder hergestellt. Wir bitten um Geduld.
</p>
</xsl:element>
<xsl:element name="p">
<xsl:attribute name="style">text-align: right</xsl:attribute>
<xsl:element name="a">
<xsl:attribute name="href">#top</xsl:attribute>
top
</xsl:element>
</xsl:element>
</xsl:element><!-- /body -->
</xsl:element><!-- /html -->
</xsl:template>
<xsl:template name="copycontent"><!-- match="@*|node()" matches all -->
<xsl:copy><!-- copy subtree -->
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template name="GermanDate">
<xsl:param name="EmailDate" />
<xsl:param name="Date" />
<xsl:param name="Year" />
<xsl:param name="Month" />
<xsl:param name="Day" />
<xsl:if test="not($EmailDate)"><!-- no date --></xsl:if>
<xsl:choose>
<xsl:when test="not($Month)">
<xsl:variable name="EmailMonth">
<xsl:value-of select="substring($EmailDate,9,3)"/>
</xsl:variable>
<xsl:variable name="GermanMonth">
<xsl:choose>
<xsl:when test="$EmailMonth = 'Jan'">Januar</xsl:when>
<xsl:when test="$EmailMonth = 'Feb'">Februar</xsl:when>
<xsl:when test="$EmailMonth = 'Mar'">März</xsl:when>
<xsl:when test="$EmailMonth = 'Apr'">April</xsl:when>
<xsl:when test="$EmailMonth = 'May'">Mai</xsl:when>
<xsl:when test="$EmailMonth = 'Jun'">Juni</xsl:when>
<xsl:when test="$EmailMonth = 'Jul'">Juli</xsl:when>
<xsl:when test="$EmailMonth = 'Aug'">August</xsl:when>
<xsl:when test="$EmailMonth = 'Sep'">September</xsl:when>
<xsl:when test="$EmailMonth = 'Oct'">Oktober</xsl:when>
<xsl:when test="$EmailMonth = 'Nov'">November</xsl:when>
<xsl:when test="$EmailMonth = 'Dec'">Dezember</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="GermanDate">
<xsl:with-param name="Month" select="$GermanMonth" />
<xsl:with-param name="EmailDate" select="$EmailDate" />
</xsl:call-template>
</xsl:when>
<xsl:when test="not($Day)"><!-- 'Thu, 02 May 2019 23:01:34 +0200' -->
<xsl:variable name="EmailDay">
<xsl:value-of select="floor(substring($EmailDate,6,2))"/>
</xsl:variable>
<xsl:call-template name="GermanDate">
<xsl:with-param name="Month" select="$Month" />
<xsl:with-param name="Day" select="$EmailDay" />
<xsl:with-param name="EmailDate" select="$EmailDate" />
</xsl:call-template>
</xsl:when>
<xsl:when test="not($Year)">
<xsl:variable name="EmailYear">
<xsl:value-of select="substring($EmailDate,13,4)"/>
</xsl:variable>
<xsl:call-template name="GermanDate">
<xsl:with-param name="Month" select="$Month" />
<xsl:with-param name="Day" select="$Day" />
<xsl:with-param name="Year" select="$EmailYear" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($Day,'. ',$Month,' ',$Year)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

81
sort.xsl Normal file
View File

@ -0,0 +1,81 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" encoding="UTF-8" version="1.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="/schleudern">
<xsl:text disable-output-escaping='yes'>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE schleudern [
&lt;!ELEMENT schleudern (schleuder)&gt;&lt;!-- wrapper --&gt;
&lt;!ELEMENT schleuder (date,image,link,filesize,teaser,preface,info)&gt;&lt;!-- issue --&gt;
&lt;!ATTLIST schleuder id CDATA #REQUIRED&gt;
&lt;!ELEMENT date (#PCDATA)&gt;&lt;!-- date of publication, https://www.w3.org/Protocols/rfc822/ as in cli `date -R` or 'Thu, 02 May 2019 23:01:34 +0200' --&gt;
&lt;!ELEMENT image (#PCDATA)&gt;&lt;!-- usually the cover page --&gt;
&lt;!ELEMENT link (#PCDATA)&gt;&lt;!-- file location or fallback link, here attachments for rss and linked files for download --&gt;
&lt;!ATTLIST link filesize CDATA #IMPLIED&gt;&lt;!-- attribute filesize for multiple attachments: as PDF, ePUB etc. --&gt;
&lt;!ELEMENT filesize (#PCDATA)&gt;&lt;!-- size of a single linked file, needed for attachments --&gt;
&lt;!ELEMENT teaser (#PCDATA)&gt;&lt;!-- short hint on recent print and newest issue online --&gt;
&lt;!ELEMENT preface (#PCDATA)&gt;&lt;!-- link to preface, html byproduct of ePUB workflow --&gt;
&lt;!ELEMENT info (#PCDATA)&gt;&lt;!-- short information in between two issues, added as child to the last published issue, newest first --&gt;
&lt;!ATTLIST info date CDATA #IMPLIED&gt;&lt;!-- date for information, if missing the date of the parent schleuder will be used --&gt;
&lt;!ENTITY PUBLISHER "Chaos Computer Club"&gt;
]&gt;&#xa;
</xsl:text>
<xsl:element name="schleudern"><xsl:text>&#xa;</xsl:text>
<!--
<xsl:apply-templates select="//comment()[position()=2]"/>
-->
<xsl:for-each select="schleuder">
<xsl:element name="schleuder">
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute><xsl:text>&#xa;</xsl:text>
<xsl:if test="count(date) &gt; 0">
<xsl:text>&#9;</xsl:text><xsl:element name="date"><xsl:value-of select="date"/></xsl:element><xsl:text>&#xa;</xsl:text>
</xsl:if>
<xsl:text>&#9;</xsl:text><xsl:element name="image"><xsl:value-of select="image"/></xsl:element><xsl:text>&#xa;</xsl:text>
<xsl:for-each select="link">
<xsl:text>&#9;</xsl:text><xsl:element name="link">
<xsl:if test="count(@filesize) &gt; 0">
<xsl:attribute name="filesize"><xsl:value-of select="@filesize"/></xsl:attribute>
</xsl:if>
<xsl:value-of select="."/>
</xsl:element><xsl:text>&#xa;</xsl:text>
<!-- <xsl:if test="position() = 1">
</xsl:if>-->
</xsl:for-each>
<xsl:if test="count(filesize) &gt; 0">
<xsl:text>&#9;</xsl:text><xsl:element name="filesize"><xsl:value-of select="filesize"/></xsl:element><xsl:text>&#xa;</xsl:text>
</xsl:if>
<xsl:if test="count(teaser) &gt; 0">
<xsl:text>&#9;</xsl:text>
<xsl:apply-templates select="teaser"/>
<xsl:text>&#xa;</xsl:text>
</xsl:if>
<xsl:if test="count(preface) &gt; 0">
<xsl:text>&#9;</xsl:text><xsl:element name="preface">
<xsl:value-of select="preface"/>
</xsl:element><xsl:text>&#xa;</xsl:text>
</xsl:if>
<xsl:for-each select="info">
<xsl:text>&#9;</xsl:text>
<xsl:apply-templates select="."/>
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
</xsl:element>
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="comment()"><xsl:comment><xsl:value-of select="."/></xsl:comment></xsl:template>
<xsl:template match="@*|node()"><!-- matches all -->
<xsl:copy><!-- copy subtree -->
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>