Mercurial > hg > mpdl-group
comparison 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 |
comparison
equal
deleted
inserted
replaced
12:fba5577e49d9 | 13:469d927b9ca7 |
---|---|
9 | 9 |
10 <xsl:output method="xml" encoding="utf-8"/> | 10 <xsl:output method="xml" encoding="utf-8"/> |
11 <xsl:output name="myXml" indent="yes" omit-xml-declaration="yes"/> | 11 <xsl:output name="myXml" indent="yes" omit-xml-declaration="yes"/> |
12 | 12 |
13 <xsl:variable name="externalElements" select="/result/externalElements"/> | 13 <xsl:variable name="externalElements" select="/result/externalElements"/> |
14 <xsl:variable name="xpointer" select="/result/xpointer"/> | |
15 <xsl:variable name="xpointerPath"> | |
16 <xsl:choose> | |
17 <xsl:when test="contains($xpointer, '/range(')"> | |
18 <xsl:value-of select="substring-before($xpointer, '/range(')"/> | |
19 </xsl:when> | |
20 <xsl:when test="contains($xpointer, '/point(')"> | |
21 <xsl:value-of select="substring-before($xpointer, '/point(')"/> | |
22 </xsl:when> | |
23 <xsl:otherwise><xsl:value-of select="$xpointer"/></xsl:otherwise> | |
24 </xsl:choose> | |
25 </xsl:variable> | |
26 <xsl:variable name="xpointerRange"> | |
27 <xsl:choose> | |
28 <xsl:when test="contains($xpointer, '/range(')"> | |
29 <xsl:value-of select="substring-before(substring-after($xpointer, '/range('), ')')"/> | |
30 </xsl:when> | |
31 <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise> | |
32 </xsl:choose> | |
33 </xsl:variable> | |
34 <xsl:variable name="xpointerPoint"> | |
35 <xsl:choose> | |
36 <xsl:when test="contains($xpointer, '/point(')"> | |
37 <xsl:value-of select="substring-before(substring-after($xpointer, '/point('), ')')"/> | |
38 </xsl:when> | |
39 <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise> | |
40 </xsl:choose> | |
41 </xsl:variable> | |
42 <xsl:variable name="xpointerRangeFromTmp" select="substring-before($xpointerRange, ',')"/> | |
43 <xsl:variable name="xpointerRangeFrom"> | |
44 <xsl:choose> | |
45 <xsl:when test="$xpointerRangeFromTmp = ''"> | |
46 <xsl:value-of select="xs:integer(0)"/> | |
47 </xsl:when> | |
48 <xsl:when test="contains($xpointerRangeFromTmp, '-')"> | |
49 <xsl:value-of select="xs:integer(0)"/> | |
50 </xsl:when> | |
51 <xsl:otherwise><xsl:value-of select="xs:integer($xpointerRangeFromTmp)"/></xsl:otherwise> | |
52 </xsl:choose> | |
53 </xsl:variable> | |
54 <xsl:variable name="xpointerRangeToTmp" select="substring-after($xpointerRange, ',')"/> | |
55 <xsl:variable name="xpointerRangeTo"> | |
56 <xsl:choose> | |
57 <xsl:when test="$xpointerRangeToTmp = ''"> | |
58 <xsl:value-of select="xs:integer(0)"/> | |
59 </xsl:when> | |
60 <xsl:when test="contains($xpointerRangeToTmp, '-')"> | |
61 <xsl:value-of select="xs:integer(0)"/> | |
62 </xsl:when> | |
63 <xsl:otherwise><xsl:value-of select="xs:integer($xpointerRangeToTmp)"/></xsl:otherwise> | |
64 </xsl:choose> | |
65 </xsl:variable> | |
14 <xsl:variable name="fragment" select="/result/fragment"/> | 66 <xsl:variable name="fragment" select="/result/fragment"/> |
15 | 67 |
16 <xsl:template match="result"> | 68 <xsl:template match="result"> |
17 <xsl:apply-templates/> | 69 <xsl:apply-templates/> |
18 </xsl:template> | 70 </xsl:template> |
19 <xsl:template match="fragment"> | 71 <xsl:template match="fragment"> |
20 <xsl:apply-templates/> | 72 <xsl:apply-templates/> |
21 </xsl:template> | 73 </xsl:template> |
22 <xsl:template match="externalElements"> | 74 <xsl:template match="externalElements"></xsl:template> |
23 </xsl:template> | 75 <xsl:template match="xpointer"></xsl:template> |
24 | 76 |
25 <xsl:template match="attribute()|text()|comment()|processing-instruction()"> | 77 <xsl:template match="attribute()|text()|comment()|processing-instruction()"> |
26 <xsl:copy> | 78 <xsl:copy> |
27 <xsl:apply-templates select="attribute()|element()|text()|comment()|processing-instruction()"/> | 79 <xsl:apply-templates select="attribute()|element()|text()|comment()|processing-instruction()"/> |
28 </xsl:copy> | 80 </xsl:copy> |
33 <xsl:variable name="elemXmlNodeId" select="concat('/', substring-after(substring-after(substring-after($elemXmlNodeIdTmp, '/'), '/'), '/'))"/> | 85 <xsl:variable name="elemXmlNodeId" select="concat('/', substring-after(substring-after(substring-after($elemXmlNodeIdTmp, '/'), '/'), '/'))"/> |
34 <xsl:variable name="extElemXmlNodeIds" select="$externalElements//@xmlNodeId"/> | 86 <xsl:variable name="extElemXmlNodeIds" select="$externalElements//@xmlNodeId"/> |
35 <xsl:variable name="extElemIndex" select="index-of($extElemXmlNodeIds, $elemXmlNodeId)"/> | 87 <xsl:variable name="extElemIndex" select="index-of($extElemXmlNodeIds, $elemXmlNodeId)"/> |
36 <xsl:variable name="extElem" select="$externalElements/*[$extElemIndex]"/> | 88 <xsl:variable name="extElem" select="$externalElements/*[$extElemIndex]"/> |
37 <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/> | 89 <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/> |
38 <xsl:variable name="extElemContentSerialized" select="saxon:serialize($extElemContent, 'myXml')"/> | 90 <xsl:variable name="extElemXPointer" select="$extElem/@xpointer"/> |
39 <xsl:variable name="before"> | 91 <xsl:variable name="extElemXPointerPoint" select="substring-before(substring-after($extElemXPointer, '/point('), ')')"/> |
92 <xsl:variable name="extElemXPointerPointInt"> | |
40 <xsl:choose> | 93 <xsl:choose> |
41 <xsl:when test="empty($extElem/@before) or $extElem/@before = ''"> | 94 <xsl:when test="$extElemXPointerPoint != '.0' and $extElemXPointerPoint != '.1' and $extElemXPointerPoint != ''"> |
42 <xsl:value-of select="''"/> | 95 <xsl:value-of select="xs:integer($extElemXPointerPoint)"/> |
43 </xsl:when> | 96 </xsl:when> |
44 <xsl:otherwise> | 97 <xsl:otherwise> |
45 <xsl:value-of select="string($extElem/@before)"/> | 98 <xsl:value-of select="xs:integer(-1)"/> |
46 </xsl:otherwise> | 99 </xsl:otherwise> |
47 </xsl:choose> | 100 </xsl:choose> |
48 </xsl:variable> | 101 </xsl:variable> |
49 <xsl:variable name="charPos"> | 102 <xsl:variable name="insertedXPointer"> |
50 <xsl:choose> | 103 <xsl:choose> |
51 <xsl:when test="empty($extElem/@charPos) or $extElem/@charPos = ''"> | 104 <xsl:when test="$xpointerRange != ''"> |
52 <xsl:value-of select="xs:integer(-1)"/> | 105 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> |
106 <xsl:variable name="tmp" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($xpointerRangeFrom), '<seg rend="highlight">')"/> | |
107 <xsl:variable name="tmp2" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $tmp, string($xpointerRangeTo), '</seg>')"/> | |
108 <xsl:sequence select="saxon:parse($tmp2)"/> | |
109 </xsl:when> | |
110 <xsl:when test="$xpointerPoint = '.0'"> | |
111 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> | |
112 <xsl:variable name="tmp" select="'<bla>'"/><xsl:value-of select="'<seg rend="highlightPoint"/>'"/><xsl:value-of select="$elemSerialized"/><xsl:value-of select="'</bla>'"/> | |
113 <xsl:sequence select="saxon:parse($tmp)"/> | |
114 </xsl:when> | |
115 <xsl:when test="$xpointerPoint = '.1'"> | |
116 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> | |
117 <xsl:variable name="tmp" select="'<bla>'"/><xsl:value-of select="$elemSerialized"/><xsl:value-of select="'<seg rend="highlightPoint"/>'"/><xsl:value-of select="'</bla>'"/> | |
118 <xsl:sequence select="saxon:parse($tmp)"/> | |
119 </xsl:when> | |
120 <xsl:when test="$xpointerPoint != ''"> | |
121 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> | |
122 <xsl:variable name="tmp" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($xpointerPoint), '<seg rend="highlightPoint"/>')"/> | |
123 <xsl:sequence select="saxon:parse($tmp)"/> | |
53 </xsl:when> | 124 </xsl:when> |
54 <xsl:otherwise> | 125 <xsl:otherwise> |
55 <xsl:sequence select="xs:integer($extElem/@charPos)"/> | 126 <xsl:value-of select="''"/> |
56 </xsl:otherwise> | 127 </xsl:otherwise> |
57 </xsl:choose> | 128 </xsl:choose> |
58 </xsl:variable> | 129 </xsl:variable> |
59 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> | 130 <xsl:variable name="thisElement"> |
60 <xsl:variable name="insertedElemSerialized" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($charPos), $extElemContentSerialized)"/> | |
61 <xsl:variable name="insertedElemDeSerializedTmp" select="saxon:parse($insertedElemSerialized)"/> | |
62 <xsl:variable name="insertedElemDeSerialized"> | |
63 <xsl:element name="{name()}"> | |
64 <xsl:apply-templates select="attribute()"/> | |
65 <xsl:attribute name="xmlNodeId"> | |
66 <xsl:value-of select="$elemXmlNodeId"/> | |
67 </xsl:attribute> | |
68 <xsl:sequence select="$insertedElemDeSerializedTmp/*[1]/node()"/> | |
69 </xsl:element> | |
70 </xsl:variable> | |
71 <xsl:if test="$charPos < 0 and $before = 'true'"> | |
72 <xsl:sequence select="$extElemContent"/> | |
73 </xsl:if> | |
74 <xsl:if test="$charPos >= 0"> | |
75 <xsl:sequence select="$insertedElemDeSerialized"/> | |
76 </xsl:if> | |
77 <xsl:if test="$charPos < 0"> | |
78 <xsl:copy> | 131 <xsl:copy> |
79 <xsl:apply-templates select="attribute()"/> | 132 <xsl:apply-templates select="attribute()"/> |
80 <xsl:attribute name="xmlNodeId"> | 133 <xsl:attribute name="xmlNodeId"> |
81 <xsl:value-of select="$elemXmlNodeId"/> | 134 <xsl:value-of select="$elemXmlNodeId"/> |
82 </xsl:attribute> | 135 </xsl:attribute> |
83 <xsl:apply-templates select="element()|text()|comment()|processing-instruction()"/> | 136 <xsl:apply-templates select="element()|text()|comment()|processing-instruction()"/> |
84 </xsl:copy> | 137 </xsl:copy> |
138 </xsl:variable> | |
139 <xsl:if test="$extElemXPointerPoint = '.0'"> | |
140 <xsl:sequence select="$extElemContent"/> | |
85 </xsl:if> | 141 </xsl:if> |
86 <xsl:if test="$charPos < 0 and $before = 'false'"> | 142 <xsl:if test="$extElemXPointerPointInt >= 0"> |
143 <xsl:variable name="extElemContent" select="$extElem/content/*[1]"/> | |
144 <xsl:variable name="extElemContentSerialized" select="saxon:serialize($extElemContent, 'myXml')"/> | |
145 <xsl:variable name="elemSerialized" select="saxon:serialize(., 'myXml')"/> | |
146 <xsl:variable name="insertedElemSerialized" select="mpdlxmlutil:insertAtCharPos(mpdlxmlutil:new(), $elemSerialized, string($extElemXPointerPointInt), $extElemContentSerialized)"/> | |
147 <xsl:variable name="insertedElemDeSerializedTmp" select="saxon:parse($insertedElemSerialized)"/> | |
148 <xsl:variable name="insertedElemDeSerialized"> | |
149 <xsl:element name="{name()}"> | |
150 <xsl:apply-templates select="attribute()"/> | |
151 <xsl:attribute name="xmlNodeId"> | |
152 <xsl:value-of select="$elemXmlNodeId"/> | |
153 </xsl:attribute> | |
154 <xsl:sequence select="$insertedElemDeSerializedTmp/*[1]/node()"/> | |
155 </xsl:element> | |
156 </xsl:variable> | |
157 <xsl:sequence select="$insertedElemDeSerialized"/> | |
158 </xsl:if> | |
159 <xsl:if test="$extElemXPointerPoint = '.0' or $extElemXPointerPoint = '.1' or $extElemXPointerPoint = ''"> | |
160 <xsl:choose> | |
161 <xsl:when test="$xpointerPath = $elemXmlNodeId and ($xpointerRange != '' or $xpointerPoint != '')"> | |
162 <xsl:sequence select="$insertedXPointer"/> | |
163 </xsl:when> | |
164 <xsl:when test="$xpointerPath = $elemXmlNodeId and ($xpointerRange = '' and $xpointerPoint = '')"> | |
165 <seg rend="highlight"> | |
166 <xsl:sequence select="$thisElement"/> | |
167 </seg> | |
168 </xsl:when> | |
169 <xsl:otherwise> | |
170 <xsl:sequence select="$thisElement"/> | |
171 </xsl:otherwise> | |
172 </xsl:choose> | |
173 </xsl:if> | |
174 <xsl:if test="$extElemXPointerPoint = '.1'"> | |
87 <xsl:sequence select="$extElemContent"/> | 175 <xsl:sequence select="$extElemContent"/> |
88 </xsl:if> | 176 </xsl:if> |
89 </xsl:template> | 177 </xsl:template> |
90 | 178 |
91 </xsl:stylesheet> | 179 </xsl:stylesheet> |