Skip to content
Snippets Groups Projects
Commit 3e947738 authored by Thorsten Vitt's avatar Thorsten Vitt
Browse files

Basic TOC infrastructure

parent d7b357d3
No related branches found
No related tags found
No related merge requests found
......@@ -130,6 +130,7 @@ public Response getHTML(
@Description("The requested content type. E.g., text/html or text/xml") @QueryParam("mediatype") final String mediaType,
@Description("An XML ID. If given, only this element will be transformed.") @QueryParam("id") final String id,
@Description("If true, a full webpage that looks similar to textgridrep.de's browse view will be returned") @QueryParam("simulate") @DefaultValue("false") final boolean simulate,
@Description("If given, generate a table of contents instead of a full HTML document") @QueryParam("toc") final String toc,
@Context final Request request) throws ObjectNotFoundFault,
MetadataParseFault, IoFault, AuthFault,
ProtocolNotImplementedFault, WebApplicationException, IOException,
......@@ -140,6 +141,7 @@ public Response getHTML(
embedded, css, sid, mediaType, id, request);
writer.simulate(simulate);
writer.linkUrlPattern(linkURLPattern);
writer.toc(toc);
return writer.createResponse().build();
}
......
......@@ -99,6 +99,7 @@ public class HTMLWriter extends CorpusBasedExporter implements StreamingOutput {
private final StylesheetManager stylesheetManager;
private Optional<String> id = Optional.absent();
private Optional<String> linkUrlPattern = Optional.absent();
private Optional<String> toc = Optional.absent();
private static final Logger logger = Logger.getLogger(HTMLWriter.class.getCanonicalName());
......@@ -240,6 +241,9 @@ public XsltTransformer getTransformer() throws SaxonApiException, IOException {
if (id.isPresent())
transformer.setParameter(new QName("ID"), new XdmAtomicValue(id.get()));
if (toc.isPresent())
transformer.setParameter(new QName("onlyTOC"), new XdmAtomicValue(toc.get()));
transformer.setSource(source);
......@@ -312,4 +316,9 @@ public ResponseBuilder createResponse() throws ObjectNotFoundFault, MetadataPars
}
return super.createResponse();
}
public HTMLWriter toc(final String toc) {
this.toc = Optional.fromNullable(toc);
return this;
}
}
\ No newline at end of file
......@@ -63,6 +63,7 @@
<xsl:param name="autoHead">false</xsl:param>
<xsl:param name="showTitleAuthor">false</xsl:param>
<xsl:param name="cssFile"/>
<xsl:param name="onlyTOC"/>
<xsl:output method="xhtml"/>
......@@ -78,7 +79,57 @@
<xsl:template name="stdheader">
<xsl:param name="title">(no title)</xsl:param>
</xsl:template>
<xsl:template match="/">
<xsl:choose>
<xsl:when test="$onlyTOC">
<xsl:message>Tunelling ...</xsl:message>
<ul class="toc">
<xsl:apply-templates mode="toc">
<xsl:with-param name="currentDepth" tunnel="yes" select="0"/>
</xsl:apply-templates>
</ul>
</xsl:when>
<xsl:otherwise>
<xsl:next-match/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template mode="toc" match="node()">
<xsl:apply-templates mode="#current"/>
</xsl:template>
<xsl:template mode="toc" match="div[head][@xml:id]">
<xsl:param name="currentDepth" tunnel="yes"/>
<li>
<a href="#{@xml:id}">
<xsl:apply-templates select="head[1]/node()"/>
</a>
<xsl:if test="$currentDepth lt $tocDepth and (descendant::div[head] or descendant::TEI)">
<ul>
<xsl:apply-templates>
<xsl:with-param name="currentDepth" tunnel="yes" select="$currentDepth + 1"/>
</xsl:apply-templates>
</ul>
</xsl:if>
</li>
</xsl:template>
<xsl:template mode="toc" match="TEI[parent::teiCorpus][@xml:id]|teiCorpus[parent::teiCorpus][@xml:id]">
<xsl:param name="currentDepth" as="xs:integer" tunnel="yes"></xsl:param>
<li>
<a href="#{@xml:id}">
<xsl:call-template name="generateTitle"/>
</a>
<xsl:if test="$currentDepth &lt; $tocDepth and (descendant::div[head] or descendant::TEI)">
<ul>
<xsl:apply-templates mode="#current">
<xsl:with-param name="currentDepth" tunnel="yes" select="$currentDepth + 1"/>
</xsl:apply-templates>
</ul>
</xsl:if>
</li>
</xsl:template>
<xsl:template name="generateTitle">
<xsl:variable name="result">
......
......@@ -18,16 +18,14 @@
</field>
<field name="scenarioIds">
<list>
<String>db2xhtml</String>
<String>db2xhtml-soll-haben</String>
<String>db2xhtml fragment</String>
<String>toc</String>
<String>notoc</String>
</list>
</field>
<field name="scenarioTypes">
<list>
<String>XML</String>
<String>XML</String>
<String>XML</String>
</list>
</field>
</scenarioAssociation>
......@@ -345,6 +343,111 @@
<String-array/>
</field>
</scenario>
<scenario>
<field name="advancedOptionsMap">
<null/>
</field>
<field name="name">
<String>db2xhtml fragment</String>
</field>
<field name="baseURL">
<String></String>
</field>
<field name="footerURL">
<String></String>
</field>
<field name="fOPMethod">
<String>pdf</String>
</field>
<field name="fOProcessorName">
<String>Apache FOP</String>
</field>
<field name="headerURL">
<String></String>
</field>
<field name="inputXSLURL">
<String>${currentFileURL}</String>
</field>
<field name="inputXMLURL">
<String>${pdu}/src/test/resources/enztest.xml</String>
</field>
<field name="defaultScenario">
<Boolean>false</Boolean>
</field>
<field name="isFOPPerforming">
<Boolean>false</Boolean>
</field>
<field name="type">
<String>XML</String>
</field>
<field name="saveAs">
<Boolean>true</Boolean>
</field>
<field name="openInBrowser">
<Boolean>false</Boolean>
</field>
<field name="outputFile">
<null/>
</field>
<field name="openOtherLocationInBrowser">
<Boolean>false</Boolean>
</field>
<field name="locationToOpenInBrowserURL">
<null/>
</field>
<field name="openInEditor">
<Boolean>true</Boolean>
</field>
<field name="showInHTMLPane">
<Boolean>false</Boolean>
</field>
<field name="showInXMLPane">
<Boolean>false</Boolean>
</field>
<field name="showInSVGPane">
<Boolean>false</Boolean>
</field>
<field name="showInResultSetPane">
<Boolean>false</Boolean>
</field>
<field name="useXSLTInput">
<Boolean>true</Boolean>
</field>
<field name="xsltParams">
<list>
<transformationParameter>
<field name="paramDescription">
<paramDescriptor>
<field name="localName">
<String>ID</String>
</field>
<field name="prefix">
<null/>
</field>
<field name="namespace">
<null/>
</field>
</paramDescriptor>
</field>
<field name="value">
<String>ler-19122-d1e641</String>
</field>
<field name="hasXPathValue">
<Boolean>false</Boolean>
</field>
</transformationParameter>
</list>
</field>
<field name="cascadingStylesheets">
<String-array/>
</field>
<field name="xslTransformer">
<String>Saxon-PE</String>
</field>
<field name="extensionURLs">
<String-array/>
</field>
</scenario>
<scenario>
<field name="advancedOptionsMap">
<null/>
......@@ -682,7 +785,7 @@
<null/>
</field>
<field name="name">
<String>db2xhtml fragment</String>
<String>toc</String>
</field>
<field name="baseURL">
<String></String>
......@@ -703,7 +806,7 @@
<String>${currentFileURL}</String>
</field>
<field name="inputXMLURL">
<String>${pdu}/src/test/resources/enztest.xml</String>
<String>${pdu}/src/test/resources/gedichte-anakreons-corpus.xml</String>
</field>
<field name="defaultScenario">
<Boolean>false</Boolean>
......@@ -733,7 +836,7 @@
<Boolean>true</Boolean>
</field>
<field name="showInHTMLPane">
<Boolean>false</Boolean>
<Boolean>true</Boolean>
</field>
<field name="showInXMLPane">
<Boolean>false</Boolean>
......@@ -753,7 +856,7 @@
<field name="paramDescription">
<paramDescriptor>
<field name="localName">
<String>ID</String>
<String>onlyTOC</String>
</field>
<field name="prefix">
<null/>
......@@ -764,7 +867,7 @@
</paramDescriptor>
</field>
<field name="value">
<String>ler-19122-d1e641</String>
<String>true</String>
</field>
<field name="hasXPathValue">
<Boolean>false</Boolean>
......@@ -782,6 +885,89 @@
<String-array/>
</field>
</scenario>
<scenario>
<field name="advancedOptionsMap">
<null/>
</field>
<field name="name">
<String>notoc</String>
</field>
<field name="baseURL">
<String></String>
</field>
<field name="footerURL">
<String></String>
</field>
<field name="fOPMethod">
<String>pdf</String>
</field>
<field name="fOProcessorName">
<String>Apache FOP</String>
</field>
<field name="headerURL">
<String></String>
</field>
<field name="inputXSLURL">
<String>${currentFileURL}</String>
</field>
<field name="inputXMLURL">
<String>${pdu}/src/test/resources/gedichte-anakreons-corpus.xml</String>
</field>
<field name="defaultScenario">
<Boolean>false</Boolean>
</field>
<field name="isFOPPerforming">
<Boolean>false</Boolean>
</field>
<field name="type">
<String>XML</String>
</field>
<field name="saveAs">
<Boolean>true</Boolean>
</field>
<field name="openInBrowser">
<Boolean>false</Boolean>
</field>
<field name="outputFile">
<null/>
</field>
<field name="openOtherLocationInBrowser">
<Boolean>false</Boolean>
</field>
<field name="locationToOpenInBrowserURL">
<null/>
</field>
<field name="openInEditor">
<Boolean>true</Boolean>
</field>
<field name="showInHTMLPane">
<Boolean>true</Boolean>
</field>
<field name="showInXMLPane">
<Boolean>false</Boolean>
</field>
<field name="showInSVGPane">
<Boolean>false</Boolean>
</field>
<field name="showInResultSetPane">
<Boolean>false</Boolean>
</field>
<field name="useXSLTInput">
<Boolean>true</Boolean>
</field>
<field name="xsltParams">
<list/>
</field>
<field name="cascadingStylesheets">
<String-array/>
</field>
<field name="xslTransformer">
<String>Saxon-PE</String>
</field>
<field name="extensionURLs">
<String-array/>
</field>
</scenario>
</scenario-array>
</entry>
</serializableOrderedMap>
......@@ -802,4 +988,4 @@
<file name="src/main/webapp/stylesheets/extractbody.xsl"/>
<file name="src/main/webapp/stylesheets/frame.xsl"/>
</projectTree>
</project>
</project>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment