XSLFO-Schedule-Kram
git-svn-id: svn://svn.c3d2.de/c3d2-web/trunk@930 31f61c52-7bfb-0310-b897-fc00f8a278f0
This commit is contained in:
parent
2c73b03d14
commit
d0c2f3aaaa
|
@ -0,0 +1,33 @@
|
||||||
|
EXPORT_URL=http://www.datenspuren.de/fahrplan/
|
||||||
|
FOP=~/programs/fop/fop
|
||||||
|
XSLT=xsltproc
|
||||||
|
XSLT_FLAGS=--novalid
|
||||||
|
XEP=~/Java/XEP/xep
|
||||||
|
|
||||||
|
KEEP=day_1.de.html day_2.de.html
|
||||||
|
|
||||||
|
FOP_FILES=day_1.pdf day_2.pdf
|
||||||
|
XEP_FILES=day_1-xep.pdf day_2-xep.pdf
|
||||||
|
|
||||||
|
all: $(FOP_FILES) $(XEP_FILES) $(KEEP)
|
||||||
|
|
||||||
|
day_%.de.html:
|
||||||
|
wget -O $@ $(EXPORT_URL)/$@
|
||||||
|
|
||||||
|
schedule.de.xml:
|
||||||
|
wget -O $@ $(EXPORT_URL)/$@
|
||||||
|
|
||||||
|
day_%.xml: day_%.de.html day_schedule.xsl schedule.de.xml
|
||||||
|
$(XSLT) $(XSLT_FLAGS) day_schedule.xsl $<|ruby schedule_add_spans.rb > $@
|
||||||
|
|
||||||
|
day_%.fo: day_%.xml schedule-fo.xsl
|
||||||
|
$(XSLT) $(XSLT_FLAGS) -o $@ schedule-fo.xsl $<
|
||||||
|
|
||||||
|
day_%-xep.pdf: day_%.fo
|
||||||
|
$(XEP) -fo $< -pdf $@
|
||||||
|
|
||||||
|
day_%.pdf: day_%.fo
|
||||||
|
$(FOP) $(FOP_FLAGS) -fo $< -pdf $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f day_*.{de.html,xml,fo,pdf} schedule.de.xml
|
|
@ -0,0 +1,64 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsl:stylesheet version="1.0"
|
||||||
|
xmlns:x="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:date="http://exslt.org/dates-and-times"
|
||||||
|
exclude-result-prefixes="x xsl date">
|
||||||
|
|
||||||
|
<xsl:output method="xml"
|
||||||
|
version="1.0"
|
||||||
|
encoding="utf-8"
|
||||||
|
indent="yes"/>
|
||||||
|
|
||||||
|
<xsl:strip-space elements="table thead tbody tr"/>
|
||||||
|
|
||||||
|
<xsl:template match="/x:html">
|
||||||
|
<schedule-matrix version="{document('schedule.de.xml')/schedule/conference/release}" ctime="{date:date-time()}">
|
||||||
|
<title>
|
||||||
|
<xsl:value-of select="//x:p[@class='intro']/x:strong"/>
|
||||||
|
</title>
|
||||||
|
<subtitle>
|
||||||
|
<xsl:value-of select="//x:div[@id='schedule']/x:h1"/>
|
||||||
|
</subtitle>
|
||||||
|
|
||||||
|
<xsl:apply-templates select="//x:div[@id='schedule']/x:table"/>
|
||||||
|
</schedule-matrix>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="x:table">
|
||||||
|
<rooms>
|
||||||
|
<xsl:apply-templates select="x:thead/x:tr/x:th/x:strong"/>
|
||||||
|
</rooms>
|
||||||
|
<table>
|
||||||
|
<xsl:apply-templates select="x:tbody/x:tr[string(@class)!='noprint']"/>
|
||||||
|
</table>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="x:th/x:strong">
|
||||||
|
<room>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</room>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="x:tbody/x:tr">
|
||||||
|
<timeslot time="{x:td[@class='time']}">
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</timeslot>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="x:tbody/x:tr/x:td[@class='time']"/>
|
||||||
|
|
||||||
|
<xsl:template match="x:tbody/x:tr/x:td[@class='room empty']">
|
||||||
|
<empty/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="x:tbody/x:tr/x:td[starts-with(@class,'room event ')]">
|
||||||
|
<!--xsl:variable name="id" select="substring-before(substring-after(p[@class='title']/a/@href, '/events/'), '.de.html')"/-->
|
||||||
|
<xsl:variable name="id" select="substring-before(substring-after(x:p[@class='title']/x:a/@href, '/events/'), '.de.html')"/>
|
||||||
|
|
||||||
|
<event slots="{@rowspan}" id="{$id}">
|
||||||
|
<xsl:copy-of select="document('schedule.de.xml')/schedule/day/room/event[@id=$id]/*"/>
|
||||||
|
</event>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
|
@ -0,0 +1,149 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<xsl:stylesheet version="1.0"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:date="http://exslt.org/dates-and-times"
|
||||||
|
xmlns="http://www.w3.org/1999/XSL/Format">
|
||||||
|
|
||||||
|
<xsl:attribute-set name="table-headers">
|
||||||
|
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||||
|
<xsl:attribute name="font-size">14pt</xsl:attribute>
|
||||||
|
<xsl:attribute name="text-align">center</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<xsl:template match="/schedule-matrix">
|
||||||
|
<root>
|
||||||
|
|
||||||
|
<layout-master-set>
|
||||||
|
|
||||||
|
<simple-page-master master-name="FullPage"
|
||||||
|
page-width="210mm" page-height="297mm"
|
||||||
|
margin-top="8mm" margin-bottom="8mm"
|
||||||
|
margin-left="8mm" margin-right="8mm">
|
||||||
|
<region-body/>
|
||||||
|
</simple-page-master>
|
||||||
|
|
||||||
|
</layout-master-set>
|
||||||
|
|
||||||
|
<page-sequence master-reference="FullPage">
|
||||||
|
<flow flow-name="xsl-region-body" font-size="14pt">
|
||||||
|
|
||||||
|
<block text-align="right" font-size="8pt">
|
||||||
|
Release <xsl:value-of select="@version"/>,
|
||||||
|
<!--xsl:value-of select="concat(date:day-in-month(@ctime),'.',date:month-in-year(@ctime),'.',date:year(@ctime),' ',date:hour-in-day(@ctime),':',date:minute-in-hour(@ctime),':',date:second-in-minute(@ctime))"/-->
|
||||||
|
<xsl:value-of select="concat(date:day-in-month(@ctime),'.',date:month-in-year(@ctime),'.',date:year(@ctime),' ',date:time(@ctime))"/>
|
||||||
|
</block>
|
||||||
|
|
||||||
|
<xsl:apply-templates select="title"/>
|
||||||
|
<xsl:apply-templates select="subtitle"/>
|
||||||
|
|
||||||
|
<xsl:variable name="table-width" select="210-8-8-15"/>
|
||||||
|
<table table-layout="fixed" width="{$table-width}mm" border-collapse="collapse">
|
||||||
|
|
||||||
|
<table-column column-width="15mm"/>
|
||||||
|
<xsl:for-each select="rooms/room">
|
||||||
|
<table-column column-width="{$table-width div count(../room)}mm"/>
|
||||||
|
</xsl:for-each>
|
||||||
|
|
||||||
|
<table-header>
|
||||||
|
<table-row>
|
||||||
|
<table-cell>
|
||||||
|
<xsl:element name="block" use-attribute-sets="table-headers">
|
||||||
|
Zeit
|
||||||
|
</xsl:element>
|
||||||
|
</table-cell>
|
||||||
|
<xsl:apply-templates select="rooms"/>
|
||||||
|
</table-row>
|
||||||
|
</table-header>
|
||||||
|
|
||||||
|
<table-body>
|
||||||
|
<xsl:apply-templates select="table"/>
|
||||||
|
</table-body>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</flow>
|
||||||
|
</page-sequence>
|
||||||
|
|
||||||
|
</root>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="title">
|
||||||
|
<block font-size="30pt" text-align="center" font-weight="bold" margin-bottom="1mm">
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</block>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="subtitle">
|
||||||
|
<block font-size="20pt" text-align="center" font-weight="bold" margin-bottom="5mm">
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</block>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="rooms/room">
|
||||||
|
<table-cell>
|
||||||
|
<xsl:element name="block" use-attribute-sets="table-headers">
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</xsl:element>
|
||||||
|
</table-cell>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="table/timeslot">
|
||||||
|
<xsl:variable name="timeslot" select="position()"/>
|
||||||
|
<xsl:variable name="previous-timeslot" select="preceding-sibling::*"/>
|
||||||
|
<xsl:message>== <xsl:value-of select="$previous-timeslot/@time"/> ++ <xsl:value-of select="@time"/> ==</xsl:message>
|
||||||
|
<table-row>
|
||||||
|
<table-cell display-align="center">
|
||||||
|
<block text-align="center">
|
||||||
|
|
||||||
|
<xsl:variable name="posteventempty">
|
||||||
|
<xsl:for-each select="*">
|
||||||
|
<xsl:variable name="track" select="position()"/>
|
||||||
|
<!--xsl:if test="(name(.) = 'empty') and (name(../preceding-sibling::*[position() = $track]) = 'span')"-->
|
||||||
|
<xsl:message><xsl:value-of select="$track"/>: <xsl:value-of select="name(../preceding-sibling::timeslot/*[position() = $track])"/> + <xsl:value-of select="name(.)"/></xsl:message>
|
||||||
|
<xsl:if test="name(.) != name(../preceding-sibling::timeslot/*[position() = $track])">
|
||||||
|
y
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:if test="(count(span) != count(../../rooms/room)) or contains($posteventempty, 'y')">
|
||||||
|
<xsl:value-of select="@time"/>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
</block>
|
||||||
|
</table-cell>
|
||||||
|
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
</table-row>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="table/timeslot/empty">
|
||||||
|
<table-cell margin="0" background-color="#ccc">
|
||||||
|
<block>
|
||||||
|
</block>
|
||||||
|
</table-cell>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="table/timeslot/span"/>
|
||||||
|
|
||||||
|
<xsl:template match="table/timeslot/event">
|
||||||
|
<table-cell number-rows-spanned="{@slots}"
|
||||||
|
border-style="solid" border-width="0.4mm" border-color="#333"
|
||||||
|
padding="1mm">
|
||||||
|
<block font-weight="bold">
|
||||||
|
<xsl:value-of select="title"/>
|
||||||
|
</block>
|
||||||
|
<block font-style="italic" font-size="12pt">
|
||||||
|
<xsl:value-of select="subtitle"/>
|
||||||
|
</block>
|
||||||
|
<block display-align="after" font-size="12pt">
|
||||||
|
<xsl:for-each select="persons/person[string(.) != '<<</>> Network']">
|
||||||
|
<xsl:if test="position() > 1">
|
||||||
|
<xsl:text>, </xsl:text>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:value-of select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</block>
|
||||||
|
</table-cell>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
|
@ -0,0 +1,32 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require 'rexml/document'
|
||||||
|
|
||||||
|
matrix = REXML::Document.new($stdin).root
|
||||||
|
tracks = 0
|
||||||
|
matrix.each_element('rooms/room') {
|
||||||
|
tracks += 1
|
||||||
|
}
|
||||||
|
trackspans = [0] * tracks
|
||||||
|
matrix.each_element('table/timeslot') { |timeslot|
|
||||||
|
events = []
|
||||||
|
timeslot.each_element { |event|
|
||||||
|
timeslot.delete(event)
|
||||||
|
events << event
|
||||||
|
}
|
||||||
|
$stderr.puts trackspans.inspect
|
||||||
|
tracks.times { |i|
|
||||||
|
if trackspans[i] > 1
|
||||||
|
timeslot.add(REXML::Element.new('span'))
|
||||||
|
trackspans[i] -= 1
|
||||||
|
else
|
||||||
|
event = events.shift || REXML::Element.new('empty')
|
||||||
|
timeslot.add(event)
|
||||||
|
if event.name == 'event'
|
||||||
|
trackspans[i] = (event.attributes['slots'] || 1).to_i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
$stderr.puts "Stale elements: #{events.inspect}" if events.size > 0
|
||||||
|
}
|
||||||
|
matrix.write($stdout, 0)
|
Loading…
Reference in New Issue