Mercurial > hg > mpdl-group
diff software/eXist/webapp/mpdl/presentation/insertExternalElements.xsl @ 13:469d927b9ca7
diverse Fehlerbehebungen
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 19 Apr 2011 16:51:59 +0200 |
parents | 1ec29fdd0db8 |
children | e99964f390e4 |
line wrap: on
line diff
--- a/software/eXist/webapp/mpdl/presentation/insertExternalElements.xsl Tue Apr 19 16:51:26 2011 +0200 +++ b/software/eXist/webapp/mpdl/presentation/insertExternalElements.xsl Tue Apr 19 16:51:59 2011 +0200 @@ -11,6 +11,58 @@ <xsl:output name="myXml" indent="yes" omit-xml-declaration="yes"/> <xsl:variable name="externalElements" select="/result/externalElements"/> +<xsl:variable name="xpointer" select="/result/xpointer"/> +<xsl:variable name="xpointerPath"> + <xsl:choose> + <xsl:when test="contains($xpointer, '/range(')"> + <xsl:value-of select="substring-before($xpointer, '/range(')"/> + </xsl:when> + <xsl:when test="contains($xpointer, '/point(')"> + <xsl:value-of select="substring-before($xpointer, '/point(')"/> + </xsl:when> + <xsl:otherwise><xsl:value-of select="$xpointer"/></xsl:otherwise> + </xsl:choose> +</xsl:variable> +<xsl:variable name="xpointerRange"> + <xsl:choose> + <xsl:when test="contains($xpointer, '/range(')"> + <xsl:value-of select="substring-before(substring-after($xpointer, '/range('), ')')"/> + </xsl:when> + <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise> + </xsl:choose> +</xsl:variable> +<xsl:variable name="xpointerPoint"> + <xsl:choose> + <xsl:when test="contains($xpointer, '/point(')"> + <xsl:value-of select="substring-before(substring-after($xpointer, '/point('), ')')"/> + </xsl:when> + <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise> + </xsl:choose> +</xsl:variable> +<xsl:variable name="xpointerRangeFromTmp" select="substring-before($xpointerRange, ',')"/> +<xsl:variable name="xpointerRangeFrom"> + <xsl:choose> + <xsl:when test="$xpointerRangeFromTmp = ''"> + <xsl:value-of select="xs:integer(0)"/> + </xsl:when> + <xsl:when test="contains($xpointerRangeFromTmp, '-')"> + <xsl:value-of select="xs:integer(0)"/> + </xsl:when> + <xsl:otherwise><xsl:value-of select="xs:integer($xpointerRangeFromTmp)"/></xsl:otherwise> + </xsl:choose> +</xsl:variable> +<xsl:variable name="xpointerRangeToTmp" select="substring-after($xpointerRange, ',')"/> +<xsl:variable name="xpointerRangeTo"> + <xsl:choose> + <xsl:when test="$xpointerRangeToTmp = ''"> + <xsl:value-of select="xs:integer(0)"/> + </xsl:when> + <xsl:when test="contains($xpointerRangeToTmp, '-')"> + <xsl:value-of select="xs:integer(0)"/> + </xsl:when> + <xsl:otherwise><xsl:value-of select="xs:integer($xpointerRangeToTmp)"/></xsl:otherwise> + </xsl:choose> +</xsl:variable> <xsl:variable name="fragment" select="/result/fragment"/> <xsl:template match="result"> @@ -19,8 +71,8 @@ <xsl:template match="fragment"> <xsl:apply-templates/> </xsl:template> -<xsl:template match="externalElements"> -</xsl:template> +<xsl:template match="externalElements"></xsl:template> +<xsl:template match="xpointer"></xsl:template> <xsl:template match="attribute()|text()|comment()|processing-instruction()"> <xsl:copy> @@ -35,46 +87,47 @@ <xsl:variable name="extElemIndex" select="index-of($extElemXmlNodeIds, $elemXmlNodeId)"/> <xsl:variable name="extElem" select="$externalElements/*[$extElemIndex]"/> <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/> - <xsl:variable name="extElemContentSerialized" select="saxon:serialize($extElemContent, 'myXml')"/> - <xsl:variable name="before"> + <xsl:variable name="extElemXPointer" select="$extElem/@xpointer"/> + <xsl:variable name="extElemXPointerPoint" select="substring-before(substring-after($extElemXPointer, '/point('), ')')"/> + <xsl:variable name="extElemXPointerPointInt"> <xsl:choose> - <xsl:when test="empty($extElem/@before) or $extElem/@before = ''"> - <xsl:value-of select="''"/> + <xsl:when test="$extElemXPointerPoint != '.0' and $extElemXPointerPoint != '.1' and $extElemXPointerPoint != ''"> + <xsl:value-of select="xs:integer($extElemXPointerPoint)"/> </xsl:when> <xsl:otherwise> - <xsl:value-of select="string($extElem/@before)"/> + <xsl:value-of select="xs:integer(-1)"/> </xsl:otherwise> </xsl:choose> </xsl:variable> - <xsl:variable name="charPos"> + <xsl:variable name="insertedXPointer"> <xsl:choose> - <xsl:when test="empty($extElem/@charPos) or $extElem/@charPos = ''"> - <xsl:value-of select="xs:integer(-1)"/> + <xsl:when test="$xpointerRange != ''"> + <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> + <xsl:variable name="tmp" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($xpointerRangeFrom), '<seg rend="highlight">')"/> + <xsl:variable name="tmp2" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $tmp, string($xpointerRangeTo), '</seg>')"/> + <xsl:sequence select="saxon:parse($tmp2)"/> + </xsl:when> + <xsl:when test="$xpointerPoint = '.0'"> + <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> + <xsl:variable name="tmp" select="'<bla>'"/><xsl:value-of select="'<seg rend="highlightPoint"/>'"/><xsl:value-of select="$elemSerialized"/><xsl:value-of select="'</bla>'"/> + <xsl:sequence select="saxon:parse($tmp)"/> + </xsl:when> + <xsl:when test="$xpointerPoint = '.1'"> + <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> + <xsl:variable name="tmp" select="'<bla>'"/><xsl:value-of select="$elemSerialized"/><xsl:value-of select="'<seg rend="highlightPoint"/>'"/><xsl:value-of select="'</bla>'"/> + <xsl:sequence select="saxon:parse($tmp)"/> + </xsl:when> + <xsl:when test="$xpointerPoint != ''"> + <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> + <xsl:variable name="tmp" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($xpointerPoint), '<seg rend="highlightPoint"/>')"/> + <xsl:sequence select="saxon:parse($tmp)"/> </xsl:when> <xsl:otherwise> - <xsl:sequence select="xs:integer($extElem/@charPos)"/> + <xsl:value-of select="''"/> </xsl:otherwise> </xsl:choose> </xsl:variable> - <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> - <xsl:variable name="insertedElemSerialized" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($charPos), $extElemContentSerialized)"/> - <xsl:variable name="insertedElemDeSerializedTmp" select="saxon:parse($insertedElemSerialized)"/> - <xsl:variable name="insertedElemDeSerialized"> - <xsl:element name="{name()}"> - <xsl:apply-templates select="attribute()"/> - <xsl:attribute name="xmlNodeId"> - <xsl:value-of select="$elemXmlNodeId"/> - </xsl:attribute> - <xsl:sequence select="$insertedElemDeSerializedTmp/*[1]/node()"/> - </xsl:element> - </xsl:variable> - <xsl:if test="$charPos < 0 and $before = 'true'"> - <xsl:sequence select="$extElemContent"/> - </xsl:if> - <xsl:if test="$charPos >= 0"> - <xsl:sequence select="$insertedElemDeSerialized"/> - </xsl:if> - <xsl:if test="$charPos < 0"> + <xsl:variable name="thisElement"> <xsl:copy> <xsl:apply-templates select="attribute()"/> <xsl:attribute name="xmlNodeId"> @@ -82,8 +135,43 @@ </xsl:attribute> <xsl:apply-templates select="element()|text()|comment()|processing-instruction()"/> </xsl:copy> + </xsl:variable> + <xsl:if test="$extElemXPointerPoint = '.0'"> + <xsl:sequence select="$extElemContent"/> </xsl:if> - <xsl:if test="$charPos < 0 and $before = 'false'"> + <xsl:if test="$extElemXPointerPointInt >= 0"> + <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/> + <xsl:variable name="extElemContentSerialized" select="saxon:serialize($extElemContent, 'myXml')"/> + <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> + <xsl:variable name="insertedElemSerialized" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($extElemXPointerPointInt), $extElemContentSerialized)"/> + <xsl:variable name="insertedElemDeSerializedTmp" select="saxon:parse($insertedElemSerialized)"/> + <xsl:variable name="insertedElemDeSerialized"> + <xsl:element name="{name()}"> + <xsl:apply-templates select="attribute()"/> + <xsl:attribute name="xmlNodeId"> + <xsl:value-of select="$elemXmlNodeId"/> + </xsl:attribute> + <xsl:sequence select="$insertedElemDeSerializedTmp/*[1]/node()"/> + </xsl:element> + </xsl:variable> + <xsl:sequence select="$insertedElemDeSerialized"/> + </xsl:if> + <xsl:if test="$extElemXPointerPoint = '.0' or $extElemXPointerPoint = '.1' or $extElemXPointerPoint = ''"> + <xsl:choose> + <xsl:when test="$xpointerPath = $elemXmlNodeId and ($xpointerRange != '' or $xpointerPoint != '')"> + <xsl:sequence select="$insertedXPointer"/> + </xsl:when> + <xsl:when test="$xpointerPath = $elemXmlNodeId and ($xpointerRange = '' and $xpointerPoint = '')"> + <seg rend="highlight"> + <xsl:sequence select="$thisElement"/> + </seg> + </xsl:when> + <xsl:otherwise> + <xsl:sequence select="$thisElement"/> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + <xsl:if test="$extElemXPointerPoint = '.1'"> <xsl:sequence select="$extElemContent"/> </xsl:if> </xsl:template>