[ Index ] |
|
Code source de Horde 3.1.3 |
1 <!-- 2 3 The Contents of this file are made available subject to the terms of 4 either of the following licenses 5 6 - GNU Lesser General Public License Version 2.1 7 - Sun Industry Standards Source License Version 1.1 8 9 Sun Microsystems Inc., October, 2000 10 11 GNU Lesser General Public License Version 2.1 12 ============================================= 13 Copyright 2000 by Sun Microsystems, Inc. 14 901 San Antonio Road, Palo Alto, CA 94303, USA 15 16 This library is free software; you can redistribute it and/or 17 modify it under the terms of the GNU Lesser General Public 18 License version 2.1, as published by the Free Software Foundation. 19 20 This library is distributed in the hope that it will be useful, 21 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23 Lesser General Public License for more details. 24 25 You should have received a copy of the GNU Lesser General Public 26 License along with this library; if not, write to the Free Software 27 Foundation, Inc., 59 Temple Place, Suite 330, Boston, 28 MA 02111-1307 USA 29 30 31 Sun Industry Standards Source License Version 1.1 32 ================================================= 33 The contents of this file are subject to the Sun Industry Standards 34 Source License Version 1.1 (the "License"); You may not use this file 35 except in compliance with the License. You may obtain a copy of the 36 License at http://www.openoffice.org/license.html. 37 38 Software provided under this License is provided on an "AS IS" basis, 39 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, 40 WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, 41 MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. 42 See the License for the specific provisions governing your rights and 43 obligations concerning the Software. 44 45 The Initial Developer of the Original Code is: Sun Microsystems, Inc. 46 47 Copyright © 2002 by Sun Microsystems, Inc. 48 49 All Rights Reserved. 50 51 Contributor(s): _______________________________________ 52 53 --> 54 <xsl:stylesheet version="1.0" 55 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 56 xmlns:office="http://openoffice.org/2000/office" 57 xmlns:style="http://openoffice.org/2000/style" 58 xmlns:text="http://openoffice.org/2000/text" 59 xmlns:table="http://openoffice.org/2000/table" 60 xmlns:draw="http://openoffice.org/2000/drawing" 61 xmlns:fo="http://www.w3.org/1999/XSL/Format" 62 xmlns:xlink="http://www.w3.org/1999/xlink" 63 xmlns:number="http://openoffice.org/2000/datastyle" 64 xmlns:svg="http://www.w3.org/2000/svg" 65 xmlns:chart="http://openoffice.org/2000/chart" 66 xmlns:dr3d="http://openoffice.org/2000/dr3d" 67 xmlns:math="http://www.w3.org/1998/Math/MathML" 68 xmlns:form="http://openoffice.org/2000/form" 69 xmlns:script="http://openoffice.org/2000/script" 70 office:class="text" 71 office:version="1.0" 72 xmlns:dc="http://purl.org/dc/elements/1.1/" 73 xmlns:meta="http://openoffice.org/2000/meta" 74 xmlns:config="http://openoffice.org/2001/config" 75 xmlns:help="http://openoffice.org/2000/help" 76 xmlns:xt="http://www.jclark.com/xt" 77 extension-element-prefixes="xt" 78 xmlns:urlencoder="http://www.jclark.com/xt/java/java.net.URLEncoder" 79 xmlns:sxghelper="http://www.jclark.com/xt/java/com.sun.star.xslt.helper.SxgChildTransformer" 80 xmlns:xalan="http://xml.apache.org/xalan" 81 xmlns:java="http://xml.apache.org/xslt/java" 82 exclude-result-prefixes="java"> 83 84 85 86 87 <!-- ********************************************** --> 88 <!-- *** Global Document - Table of Content *** --> 89 <!-- ********************************************** --> 90 91 92 93 <xsl:template match="text:table-of-content"> 94 <xsl:param name="collectedGlobalData"/> 95 96 <xsl:apply-templates> 97 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 98 </xsl:apply-templates> 99 </xsl:template> 100 101 102 103 <xsl:template match="text:index-body"> 104 <xsl:param name="collectedGlobalData"/> 105 106 <xsl:apply-templates mode="content-table"> 107 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 108 </xsl:apply-templates> 109 </xsl:template> 110 111 112 113 <xsl:template match="text:index-title" mode="content-table"> 114 <xsl:param name="collectedGlobalData"/> 115 116 <xsl:apply-templates> 117 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 118 </xsl:apply-templates> 119 </xsl:template> 120 121 <xsl:template match="text:reference-ref"> 122 <xsl:param name="collectedGlobalData"/> 123 124 <!-- Java is needed as we have to encode the relative links (bug#102311) --> 125 <xsl:if test="not($isJavaDisabled)"> 126 <xsl:element name="a"> 127 <xsl:attribute name="href"> 128 <xsl:text>#</xsl:text> 129 <xsl:call-template name="encode-string"> 130 <!-- the space has to be normalized, 131 otherwise an illegal argument exception will be thrown for XT--> 132 <xsl:with-param name="textToBeEncoded" select="@text:ref-name"/> 133 </xsl:call-template> 134 </xsl:attribute> 135 136 <xsl:apply-templates> 137 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 138 </xsl:apply-templates> 139 140 </xsl:element> 141 </xsl:if> 142 </xsl:template> 143 144 <xsl:template match="text:reference-mark"> 145 <xsl:param name="collectedGlobalData"/> 146 147 <!-- Java is needed as we have to encode the relative links (bug#102311) --> 148 <xsl:if test="not($isJavaDisabled)"> 149 <xsl:element name="a"> 150 <xsl:attribute name="name"> 151 <xsl:call-template name="encode-string"> 152 <!-- the space has to be normalized, 153 otherwise an illegal argument exception will be thrown for XT--> 154 <xsl:with-param name="textToBeEncoded" select="@text:name"/> 155 </xsl:call-template> 156 </xsl:attribute> 157 158 <xsl:apply-templates> 159 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 160 </xsl:apply-templates> 161 162 </xsl:element> 163 </xsl:if> 164 </xsl:template> 165 166 167 168 <xsl:template match="text:reference-mark-start"> 169 <xsl:param name="collectedGlobalData"/> 170 171 <!-- Java is needed as we have to encode the relative links (bug#102311) --> 172 <xsl:if test="not($isJavaDisabled)"> 173 <xsl:element name="a"> 174 <xsl:attribute name="name"> 175 <xsl:call-template name="encode-string"> 176 <!-- the space has to be normalized, 177 otherwise an illegal argument exception will be thrown for XT--> 178 <xsl:with-param name="textToBeEncoded" select="@text:name"/> 179 </xsl:call-template> 180 </xsl:attribute> 181 182 <xsl:variable name="endOfReference"> 183 <xsl:for-each select="text:reference-mark-end[@name=current()/@text:name]"> 184 <xsl:value-of select="position()"/> 185 </xsl:for-each> 186 </xsl:variable> 187 188 <xsl:for-each select="following-sibling::*[position() < $endOfReference]"> 189 <xsl:apply-templates> 190 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 191 </xsl:apply-templates> 192 </xsl:for-each> 193 </xsl:element> 194 </xsl:if> 195 </xsl:template> 196 197 198 199 200 <!-- content table link --> 201 <xsl:template match="text:a" mode="content-table"> 202 <xsl:param name="collectedGlobalData"/> 203 204 205 <!-- For anchors in content-headers a bug exists (cp. bug id# 102311) and they have to be worked out separately. 206 Currently the link used in the content-table of an Office XML (e.g. in the content table as '#7.Some%20Example%20Headline%7Outline') 207 is not a valid URL (cp. bug id# 102311). No file destination is specified nor exist any anchor element for these 208 links in the Office XML, nor is the chapter no. known in the linked files. 209 A workaround for this transformation therefore had to be made. This time-consuming mechanism is disabled by default and 210 can be activated by a parameter (i.e. 'disableLinkedTableOfContent'). A creation of an anchor is made for each header element. 211 All header titles gonna be encoding to be usable in a relative URL. --> 212 <xsl:choose> 213 <xsl:when test="$disableLinkedTableOfContent or $isJavaDisabled"> 214 <xsl:call-template name="create-common-link"> 215 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 216 </xsl:call-template> 217 </xsl:when> 218 <xsl:otherwise> 219 <xsl:call-template name="create-content-table-link"> 220 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 221 </xsl:call-template> 222 </xsl:otherwise> 223 </xsl:choose> 224 </xsl:template> 225 226 227 228 <xsl:template name="get-absolute-chapter-no"> 229 <xsl:param name="collectedGlobalData"/> 230 <xsl:param name="precedingChapterLevel1"/> 231 232 <xsl:choose> 233 <xsl:when test="$globalDocumentRefToCurrentFile"> 234 235 <xsl:variable name="currentFileHeadingNo"> 236 <xsl:call-template name="get-current-file-heading-no"/> 237 </xsl:variable> 238 <xsl:variable name="testResult" select="$contentTableHeadings/heading[$globalDocumentRefToCurrentFile = @file-url][number($currentFileHeadingNo)]"/> 239 240 <xsl:call-template name="get-global-heading-no"> 241 <xsl:with-param name="currentFileHeadingNo" select="translate($testResult/@absolute-chapter-level, '+', '.')"/> 242 <xsl:with-param name="precedingChapterLevel1" select="$precedingChapterLevel1"/> 243 </xsl:call-template> 244 245 </xsl:when> 246 <xsl:otherwise> 247 <!-- When the chapter is in the global document itself the link has to be relative (e.g. #index) a absolute href does not 248 work with the browser. In case of chapter in the global document, the output URL of the global document was taken. --> 249 <xsl:variable name="currentFileHeadingNo"> 250 <xsl:call-template name="get-current-file-heading-no"/> 251 </xsl:variable> 252 <xsl:variable name="testResult" select="$collectedGlobalData/content-table-headings/heading[$contentTableURL = @file-url][number($currentFileHeadingNo)]"/> 253 254 <xsl:call-template name="get-global-heading-no"> 255 <xsl:with-param name="currentFileHeadingNo" select="translate($testResult/@absolute-chapter-level, '+', '.')"/> 256 <xsl:with-param name="precedingChapterLevel1" select="$precedingChapterLevel1"/> 257 </xsl:call-template> 258 </xsl:otherwise> 259 </xsl:choose> 260 </xsl:template> 261 262 263 <xsl:template name="get-current-file-heading-no"> 264 <xsl:choose> 265 <xsl:when test="function-available('sxghelper:get-current-child-heading-no')"> 266 <xsl:value-of select="sxghelper:get-current-child-heading-no()"/> 267 </xsl:when> 268 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.getCurrentChildHeadingNo')"> 269 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.getCurrentChildHeadingNo()"/> 270 </xsl:when> 271 </xsl:choose> 272 </xsl:template> 273 274 275 <xsl:template name="get-next-current-file-heading-no"> 276 <xsl:param name="file"/> 277 <xsl:choose> 278 <xsl:when test="function-available('sxghelper:get-next-current-child-heading-no')"> 279 <xsl:value-of select="sxghelper:get-next-current-child-heading-no($file)"/> 280 </xsl:when> 281 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.getNextCurrentChildHeadingNo')"> 282 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.getNextCurrentChildHeadingNo($file)"/> 283 </xsl:when> 284 </xsl:choose> 285 </xsl:template> 286 287 288 <xsl:template name="get-global-heading-no"> 289 <xsl:param name="currentFileHeadingNo"/> 290 <xsl:param name="precedingChapterLevel1"/> 291 292 <xsl:choose> 293 <xsl:when test="function-available('sxghelper:get-global-heading-no')"> 294 <xsl:value-of select="sxghelper:get-global-heading-no(string($currentFileHeadingNo), number($precedingChapterLevel1))"/> 295 </xsl:when> 296 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.getGlobalHeadingNo')"> 297 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.getGlobalHeadingNo(string($currentFileHeadingNo), number($precedingChapterLevel1))"/> 298 </xsl:when> 299 </xsl:choose> 300 </xsl:template> 301 302 303 304 305 <!-- necessary as anchor for the content table --> 306 <xsl:template name="create-heading-anchor"> 307 <xsl:param name="collectedGlobalData"/> 308 309 <!-- 310 Currently the link used in the Office XML (e.g. in the content table as '#7.Some%20Example%20Headline%7Outline') 311 is not a valid URL (cmp. bug id# 102311). No file destination is specified nor exist any anchor element for these 312 links in the Office XML. 313 Here we are creating an anchor with the space normalized text of this header as potential jump address of the content table --> 314 315 <xsl:choose> 316 <xsl:when test="$globalDocumentRefToCurrentFile"> 317 318 <xsl:variable name="currentFileHeadingNo"> 319 <xsl:call-template name="get-next-current-file-heading-no"> 320 <xsl:with-param name="file" select="$globalDocumentRefToCurrentFile"/> 321 </xsl:call-template> 322 </xsl:variable> 323 324 325 <xsl:variable name="testResult" select="$contentTableHeadings/heading[$globalDocumentRefToCurrentFile = @file-url][number($currentFileHeadingNo)]"/> 326 <xsl:if test="$isDebugMode"> 327 <xsl:message>Matching child document header No. <xsl:value-of select="$currentFileHeadingNo"/></xsl:message> 328 <xsl:message>absolute-chapter-level: <xsl:value-of select="$testResult/@absolute-chapter-level"/></xsl:message> 329 <xsl:message>encodedTitle: <xsl:value-of select="$testResult/@encoded-title"/></xsl:message> 330 <xsl:message>globalDocumentRefToCurrentFile: <xsl:value-of select="$globalDocumentRefToCurrentFile"/></xsl:message> 331 <xsl:message>*** </xsl:message> 332 </xsl:if> 333 334 <xsl:element name="a"> 335 <xsl:attribute name="name"> 336 <xsl:value-of select="$testResult/@absolute-chapter-level"/> 337 <xsl:text>+</xsl:text> 338 <xsl:value-of select="$testResult/@encoded-title"/> 339 </xsl:attribute> 340 </xsl:element> 341 </xsl:when> 342 343 <xsl:otherwise> 344 <!-- When the chapter is in the global document itself the link has to be relative (e.g. #index) a absolute href does not 345 work with the browser. In case of chapter in the global document, the output URL of the global document was taken. --> 346 <xsl:variable name="currentFileHeadingNo"> 347 <xsl:call-template name="get-next-current-file-heading-no"> 348 <xsl:with-param name="file" select="$contentTableURL"/> 349 </xsl:call-template> 350 </xsl:variable> 351 352 353 <xsl:variable name="testResult" select="$collectedGlobalData/content-table-headings/heading[$contentTableURL = @file-url][number($currentFileHeadingNo)]"/> 354 355 <xsl:if test="$isDebugMode"> 356 <xsl:message>Matching global document header No. <xsl:value-of select="$currentFileHeadingNo"/></xsl:message> 357 <xsl:message>absolute-chapter-level: <xsl:value-of select="$testResult/@absolute-chapter-level"/></xsl:message> 358 <xsl:message>encodedTitle: <xsl:value-of select="$testResult/@encoded-title"/></xsl:message> 359 <xsl:message>contentTableURL: <xsl:value-of select="$contentTableURL"/></xsl:message> 360 <xsl:message>*** </xsl:message> 361 </xsl:if> 362 363 <xsl:element name="a"> 364 <xsl:attribute name="name"> 365 <xsl:value-of select="$testResult/@absolute-chapter-level"/> 366 <xsl:text>+</xsl:text> 367 <xsl:value-of select="$testResult/@encoded-title"/> 368 </xsl:attribute> 369 </xsl:element> 370 371 </xsl:otherwise> 372 </xsl:choose> 373 374 375 376 <!-- 377 378 <xsl:variable name="title" select="normalize-space(.)"/> 379 <!~~DON'T WORK <xsl:variable name="title" select="normalize-space(descendant::text())"/> ~~> 380 <xsl:choose> 381 <xsl:when test="$globalDocumentRefToCurrentFile"> 382 <xsl:variable name="testResults" select="$contentTableHeadings/heading[$globalDocumentRefToCurrentFile = @file-url][$title = @title][current()/@text:level = @level]"/> 383 <xsl:if test="1 < count($testResults)"> 384 <xsl:message> *** CAUTION: Multiple chapter headings with similar names: </xsl:message> 385 <xsl:message> *** Title: <xsl:value-of select="$title"/> Level: <xsl:value-of select="@text:level"/></xsl:message> 386 </xsl:if> 387 388 <xsl:variable name="encodedTitle" select="$testResults/@encoded-title"/> 389 <xsl:choose> 390 <xsl:when test="$encodedTitle"> 391 <xsl:element name="a"> 392 <xsl:attribute name="name"> 393 <xsl:value-of select="$encodedTitle"/> 394 </xsl:attribute> 395 </xsl:element> 396 </xsl:when> 397 <xsl:otherwise> 398 <!~~ even when it is not ~~> 399 <xsl:variable name="newEncodedTitle"> 400 <xsl:call-template name="encode-string"> 401 <!~~ the space has to be normalized, 402 otherwise an illegal argument exception will be thrown for XT~~> 403 <xsl:with-param name="textToBeEncoded" select="$title"/> 404 </xsl:call-template> 405 </xsl:variable> 406 <xsl:element name="a"> 407 <xsl:attribute name="name"> 408 <xsl:value-of select="$newEncodedTitle"/> 409 </xsl:attribute> 410 </xsl:element> 411 </xsl:otherwise> 412 </xsl:choose> 413 </xsl:when> 414 <xsl:otherwise> 415 <xsl:variable name="testResults" select="$collectedGlobalData/content-table-headings/heading[$contentTableURL = @file-url][$title = @title][current()/@text:level = @level]"/> 416 <xsl:if test="1 < count($testResults)"> 417 <xsl:message> *** CAUTION: Multiple chapter headings with similar names: </xsl:message> 418 <xsl:message> *** Title: <xsl:value-of select="$title"/> Level: <xsl:value-of select="@text:level"/></xsl:message> 419 <xsl:message> *** </xsl:message> 420 </xsl:if> 421 422 <xsl:variable name="encodedTitle" select="$testResults/@encoded-title"/> 423 <xsl:choose> 424 <xsl:when test="$encodedTitle"> 425 <xsl:element name="a"> 426 <xsl:attribute name="name"> 427 <xsl:value-of select="$encodedTitle"/> 428 </xsl:attribute> 429 </xsl:element> 430 </xsl:when> 431 <xsl:otherwise> 432 <!~~ even when it is not ~~> 433 <xsl:variable name="newEncodedTitle"> 434 <xsl:call-template name="encode-string"> 435 <!~~ the space has to be normalized, 436 otherwise an illegal argument exception will be thrown for XT~~> 437 <xsl:with-param name="textToBeEncoded" select="$title"/> 438 </xsl:call-template> 439 </xsl:variable> 440 <xsl:element name="a"> 441 <xsl:attribute name="name"> 442 <xsl:value-of select="$newEncodedTitle"/> 443 </xsl:attribute> 444 </xsl:element> 445 </xsl:otherwise> 446 </xsl:choose> 447 </xsl:otherwise> 448 </xsl:choose> 449 450 --> 451 452 </xsl:template> 453 454 455 456 457 <!-- ************************************** --> 458 <!-- CREATION OF A CONTENT TABLE LINK --> 459 <!-- ************************************** --> 460 461 462 <!-- a special behavior of text:a 463 (called from the 'text:a' template) --> 464 465 <xsl:template name="create-content-table-link"> 466 <xsl:param name="collectedGlobalData"/> 467 468 <xsl:choose> 469 <xsl:when test="not($outputType = 'WML')"> 470 <xsl:element name="a"> 471 <xsl:attribute name="href"> 472 <xsl:choose> 473 <xsl:when test="starts-with(@xlink:href, '#')"> 474 <xsl:variable name="correctHeading" select="$collectedGlobalData/content-table-headings/heading[current()/@xlink:href = @content-table-id]"/> 475 476 <xsl:value-of select="$correctHeading/@out-file-url"/> 477 <xsl:text>#</xsl:text> 478 <xsl:value-of select="$correctHeading/@absolute-chapter-level"/> 479 <xsl:text>+</xsl:text> 480 <xsl:value-of select="$correctHeading/@encoded-title"/> 481 </xsl:when> 482 <xsl:otherwise> 483 <xsl:call-template name="create-common-link"> 484 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 485 </xsl:call-template> 486 </xsl:otherwise> 487 </xsl:choose> 488 </xsl:attribute> 489 490 <xsl:call-template name="apply-styles-and-content"> 491 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 492 </xsl:call-template> 493 </xsl:element> 494 </xsl:when> 495 <xsl:otherwise> 496 <!-- 2DO: currently no WML support 497 498 <!~~ no nested p tags in wml1.1 allowed ~~> 499 <xsl:choose> 500 <xsl:when test="ancestor::*[contains($wap-paragraph-elements, name())]"> 501 <xsl:element name="a"> 502 <xsl:attribute name="href"><xsl:value-of select="@xlink:href"/></xsl:attribute> 503 <xsl:apply-templates select="."/> 504 </xsl:element> 505 </xsl:when> 506 <xsl:otherwise> 507 <xsl:element name="p"> 508 <xsl:element name="a"> 509 <xsl:attribute name="href"><xsl:value-of select="@xlink:href"/></xsl:attribute> 510 <xsl:apply-templates select="."/> 511 </xsl:element> 512 </xsl:element> 513 </xsl:otherwise> 514 </xsl:choose> --> 515 </xsl:otherwise> 516 </xsl:choose> 517 </xsl:template> 518 519 520 <!-- 521 CREATION OF A HELPER VARIABLE AS WORKAROUND FOR THE CONTENT TABLE ULR BUG 522 523 524 As no valid URL from the content table to the child documents exist in the content table, 525 a work-around is done: 526 527 First two helper variables are being created. 528 529 One containing the list of all references of the global document: 530 containg all their title, 531 for example: 532 533 <chapter-ref title="aTitle 1"/> 534 <chapter-ref title="aTitle 2"/> 535 <chapter-ref title="aTitle 2/> 536 <chapter-ref title="aTitle 3/> 537 538 The other containing all heading from the child documents linked from the global document. 539 The variable 'childrenHeadings' contains their title and the number of preceding similar titles, 540 for example: 541 542 543 <child file-url="aURL"> 544 <heading title="aTitle1" level="1"> 545 <heading title="aTitle2" level="2"> 546 <heading title="aTitle3" level="1"> 547 </child> 548 549 For each chapter reference from the content table the 550 551 by encoding the chapter names of the child document with the java URLEncoder and 552 use this as a part of a link. Furthermore for all heading elements a encoded anchor will be created from the heading. 553 Last the workaround parses all children documents for this anhor, as there is no distinction of files from the content table entries. 554 555 The new added node set to the collectedGlobalData variable concering the content table is written as 556 557 558 <content-table-headings content-table-url="aURL_ToTheGeneratedContentTable"> 559 <heading file-url="aFileURLToTheGeneratedHeading1" level="1"> 560 <heading file-url="aFileURLToTheGeneratedHeading2" level="2"> 561 <heading file-url="aFileURLToTheGeneratedHeading1" level="1"> 562 <heading file-url="aFileURLToTheGeneratedHeading2" level="2"> 563 </content-table-headings> 564 565 566 Preconditions: 567 The correct sequence of child documents according to the Content Table is necessary, granted by the office. 568 --> 569 <xsl:template name="Create-helper-variables-for-Content-Table"> 570 <xsl:param name="collectedGlobalData"/> 571 572 <xsl:if test="$isDebugMode"><xsl:message>Creation of global document helper variable for the content table....</xsl:message></xsl:if> 573 574 <!-- Here a helper variable of the content table is created, of all chapter-references which point to a child document. 575 an 'chapter-ref' element will be created, containg their title and the number of preceding similar titles, 576 for example: 577 578 <chapter-ref title="aTitle 1"/> 579 <chapter-ref title="aTitle 2"/> 580 <chapter-ref title="aTitle 2"/> 581 <chapter-ref title="aTitle 3"/> 582 --> 583 <xsl:variable name="chapterRefs-RTF"> 584 <!-- '/*/' as the flat and the zipped XML file format have different root elements --> 585 <xsl:for-each select="/*/office:body/text:table-of-content/text:index-body/text:p/text:a"> 586 <xsl:variable name="currentTitle" select="normalize-space(string(.))"/> 587 <xsl:element name="chapter-ref"> 588 <xsl:attribute name="title"> 589 <xsl:value-of select="$currentTitle"/> 590 </xsl:attribute> 591 <xsl:attribute name="content-table-id"> 592 <xsl:value-of select="@xlink:href"/> 593 </xsl:attribute> 594 </xsl:element> 595 </xsl:for-each> 596 </xsl:variable> 597 <xsl:if test="$isDebugMode"><xsl:message>Finished the Creation of global document helper variable for the content table!</xsl:message></xsl:if> 598 599 600 601 602 <xsl:if test="$isDebugMode"><xsl:message>Creation of global document helper variable for the child documents....</xsl:message></xsl:if> 603 <!-- Here a helper variable of created from the children documents. 604 Containg all heading elements from the child documents. Some or all of them are 605 chapters referenced by the Global Document. 606 The variable contains their title, the level of the heading and the file URL of the child, 607 for example: 608 609 <heading title="aTitle1" level="1" file-url="aURL1"> 610 <heading title="aTitle2" level="2" file-url="aURL1"> 611 <heading title="aTitle3" level="1" file-url="aURL1"> 612 <heading title="aTitle4" level="1" file-url="aURL2"> 613 <heading title="aTitle5" level="2" file-url="aURL2"> 614 <heading title="aTitle2" level="3" file-url="aURL2"> 615 <heading title="aTitle6" level="3" file-url="aURL2"> 616 <heading-count>7</heading-count> 617 --> 618 <xsl:variable name="childrenHeadings-RTF"> 619 <!-- all headers from children documents will be added --> 620 <xsl:apply-templates select="/*/office:body/text:section" mode="creation-of-variable"/> 621 </xsl:variable> 622 <xsl:if test="$isDebugMode"><xsl:message>Finished the Creation of global document helper variable for the child documents!</xsl:message></xsl:if> 623 624 625 <xsl:choose> 626 <xsl:when test="function-available('xt:node-set')"> 627 <xsl:call-template name="Create-global-variable-for-Content-Table"> 628 <xsl:with-param name="chapterRefs" select="xt:node-set($chapterRefs-RTF)"/> 629 <xsl:with-param name="childrenHeadings" select="xt:node-set($childrenHeadings-RTF)"/> 630 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 631 </xsl:call-template> 632 </xsl:when> 633 <xsl:when test="function-available('xalan:nodeset')"> 634 <xsl:call-template name="Create-global-variable-for-Content-Table"> 635 <xsl:with-param name="chapterRefs" select="xalan:nodeset($chapterRefs-RTF)"/> 636 <xsl:with-param name="childrenHeadings" select="xalan:nodeset($childrenHeadings-RTF)"/> 637 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 638 </xsl:call-template> 639 </xsl:when> 640 </xsl:choose> 641 </xsl:template> 642 643 644 645 646 <xsl:template name="Create-global-variable-for-Content-Table"> 647 <xsl:param name="chapterRefs"/> 648 <xsl:param name="childrenHeadings"/> 649 <xsl:param name="collectedGlobalData"/> 650 651 652 <xsl:if test="$isDebugMode"> 653 <!-- helper variable collecting all headings from the global document file children--> 654 <xsl:for-each select="$childrenHeadings/heading"> 655 <xsl:message># <xsl:value-of select="position()"/></xsl:message> 656 <xsl:message>level: <xsl:value-of select="@level"/></xsl:message> 657 <xsl:message>title: <xsl:value-of select="@title"/></xsl:message> 658 <xsl:message>encoded-title: <xsl:value-of select="@encoded-title"/></xsl:message> 659 <xsl:message>file-url: <xsl:value-of select="@file-url"/></xsl:message> 660 <xsl:message>header-no: <xsl:value-of select="@header-no"/></xsl:message> 661 <xsl:message>**</xsl:message> 662 </xsl:for-each> 663 <xsl:message>**</xsl:message> 664 <xsl:message>**</xsl:message> 665 666 <!-- helper variable collecting all heading references from the content table of the the global document --> 667 <xsl:message>childrenHeadings/heading-count: <xsl:value-of select="$childrenHeadings/heading-count"/></xsl:message> 668 <xsl:for-each select="$chapterRefs/chapter-ref"> 669 <xsl:message># <xsl:value-of select="position()"/></xsl:message> 670 <xsl:message>title: <xsl:value-of select="@title"/></xsl:message> 671 <xsl:message>**</xsl:message> 672 </xsl:for-each> 673 </xsl:if> 674 675 676 <xsl:choose> 677 <xsl:when test="function-available('sxghelper:set-heading-no')"> 678 <xsl:value-of select="sxghelper:set-heading-no(1)"/> 679 <xsl:value-of select="sxghelper:set-current-child-no(1)"/> 680 <xsl:value-of select="sxghelper:set-current-child-url(string($childrenHeadings/heading/@file-url))"/> 681 </xsl:when> 682 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.setHeadingNo')"> 683 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.setHeadingNo(1)"/> 684 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.setCurrentChildNo(1)"/> 685 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.setCurrentChildUrl(string($childrenHeadings/heading/@file-ur))"/> 686 </xsl:when> 687 </xsl:choose> 688 689 <xsl:if test="$isDebugMode"><xsl:message>Creating global document variable for chapter relations....</xsl:message></xsl:if> 690 <xsl:variable name="contentTableHeadingsGlobalData-RTF"> 691 <xsl:element name="content-table-headings"> 692 <!-- all headings are linked from the current global document input file --> 693 <xsl:attribute name="content-table-url"> 694 <xsl:value-of select="$contentTableURL"/> 695 </xsl:attribute> 696 697 <!-- had to use a for loop, as a recursion ends with an stackoverflow exception after about 600 recursive calls --> 698 <xsl:choose> 699 <xsl:when test="function-available('sxghelper:get-heading-no')"> 700 <xsl:for-each select="$chapterRefs/chapter-ref"> 701 <xsl:call-template name="searchHeadingInChildDocument"> 702 <xsl:with-param name="chapterRefs" select="$chapterRefs"/> 703 <xsl:with-param name="childrenHeadings" select="$childrenHeadings"/> 704 <xsl:with-param name="currentChapterRefNo" select="position()"/> 705 <xsl:with-param name="currentHeadingNo" select="sxghelper:get-heading-no()"/> 706 <xsl:with-param name="currentChildURL" select="sxghelper:get-current-child-url()"/> 707 <xsl:with-param name="currentChildNo" select="sxghelper:get-current-child-no()"/> 708 </xsl:call-template> 709 </xsl:for-each> 710 </xsl:when> 711 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.getHeadingNo')"> 712 <xsl:for-each select="$chapterRefs/chapter-ref"> 713 <xsl:call-template name="searchHeadingInChildDocument"> 714 <xsl:with-param name="chapterRefs" select="$chapterRefs"/> 715 <xsl:with-param name="childrenHeadings" select="$childrenHeadings"/> 716 <xsl:with-param name="currentChapterRefNo" select="position()"/> 717 <xsl:with-param name="currentHeadingNo" select="java:com.sun.star.xslt.helper.SxgChildTransformer.getHeadingNo()"/> 718 <xsl:with-param name="currentChildURL" select="java:com.sun.star.xslt.helper.SxgChildTransformer.getCurrentChildUrl()"/> 719 <xsl:with-param name="currentChildNo" select="java:com.sun.star.xslt.helper.SxgChildTransformer.getCurrentChildNo()"/> 720 </xsl:call-template> 721 </xsl:for-each> 722 </xsl:when> 723 </xsl:choose> 724 </xsl:element> 725 726 <!-- adding the already exisiting global data environment --> 727 <xsl:copy-of select="$collectedGlobalData"/> 728 </xsl:variable> 729 <xsl:if test="$isDebugMode"><xsl:message>Finished global document variable for chapter relations!</xsl:message></xsl:if> 730 731 <xsl:choose> 732 <xsl:when test="function-available('xt:node-set')"> 733 <xsl:call-template name="start-self-and-children-transformation"> 734 <xsl:with-param name="collectedGlobalData" select="xt:node-set($contentTableHeadingsGlobalData-RTF)"/> 735 </xsl:call-template> 736 </xsl:when> 737 <xsl:when test="function-available('xalan:nodeset')"> 738 <xsl:call-template name="start-self-and-children-transformation"> 739 <xsl:with-param name="collectedGlobalData" select="xalan:nodeset($contentTableHeadingsGlobalData-RTF)"/> 740 </xsl:call-template> 741 </xsl:when> 742 </xsl:choose> 743 </xsl:template> 744 745 746 <xsl:template name="searchHeadingInChildDocument"> 747 <xsl:param name="chapterRefs"/> 748 <xsl:param name="childrenHeadings"/> 749 <xsl:param name="currentChapterRefNo"/> 750 <xsl:param name="currentHeadingNo"/> 751 <xsl:param name="currentChildURL"/> 752 <xsl:param name="currentChildNo"/> 753 754 755 <xsl:variable name="currentChapterRef" select="$chapterRefs/chapter-ref[$currentChapterRefNo]"/> 756 <xsl:variable name="currentChapterID" select="$currentChapterRef/@content-table-id"/> 757 <xsl:variable name="currentChapterTitle" select="$currentChapterRef/@title"/> 758 759 <xsl:variable name="currentChildHeading" select="$childrenHeadings/heading[$currentHeadingNo]"/> 760 <xsl:variable name="headingTitle" select="$currentChildHeading/@title"/> 761 <xsl:variable name="headingLevel" select="$currentChildHeading/@level"/> 762 <xsl:variable name="headingNo" select="$currentChildHeading/@header-no"/> 763 <xsl:variable name="newChildURL" select="$currentChildHeading/@file-url"/> 764 765 <xsl:if test="$isDebugMode"> 766 <xsl:message>*** new heading </xsl:message> 767 <xsl:message>currentChapterID: <xsl:value-of select="$currentChapterID"/></xsl:message> 768 <xsl:message>currentChapterTitle: <xsl:value-of select="$currentChapterTitle"/></xsl:message> 769 <xsl:message>currentChapterID: <xsl:value-of select="$currentChapterID"/></xsl:message> 770 <xsl:message>currentHeadingNo: <xsl:value-of select="$currentHeadingNo"/></xsl:message> 771 <xsl:message>headingTitle: <xsl:value-of select="$headingTitle"/></xsl:message> 772 <xsl:message>headingLevel: <xsl:value-of select="$headingLevel"/></xsl:message> 773 <xsl:message>headingNo: <xsl:value-of select="$headingNo"/></xsl:message> 774 <xsl:message>newChildURL: <xsl:value-of select="$newChildURL"/></xsl:message> 775 </xsl:if> 776 777 <xsl:variable name="outFileURL"> 778 <xsl:choose> 779 <xsl:when test="substring-before($newChildURL,'.xml')"> 780 <xsl:value-of select="concat(substring-before($newChildURL,'.xml'),'.htm')"/> 781 </xsl:when> 782 <xsl:when test="substring-before($newChildURL,'.sx')"> 783 <xsl:value-of select="concat(substring-before($newChildURL,'.sx'),'.htm')"/> 784 </xsl:when> 785 </xsl:choose> 786 </xsl:variable> 787 <xsl:variable name="isChapterHeading" select="$headingTitle = $currentChapterTitle"/> 788 <xsl:variable name="isNewFile" select="string($newChildURL) != string($currentChildURL)"/> 789 790 791 792 793 <xsl:if test="$isNewFile"> 794 <!-- reset of the already collected child headers --> 795 <xsl:call-template name="calc-chapter-numbers"> 796 <xsl:with-param name="level" select="0"/> 797 </xsl:call-template> 798 </xsl:if> 799 <xsl:variable name="absoluteChapterLevel"> 800 <xsl:call-template name="calc-chapter-numbers"> 801 <xsl:with-param name="level" select="number($headingLevel)"/> 802 </xsl:call-template> 803 </xsl:variable> 804 805 806 <xsl:element name="heading"> 807 <!-- necessary to as ID from the content table to get the correct heading element (the buggy URL used as ID)--> 808 <xsl:attribute name="content-table-id"> 809 <xsl:choose> 810 <xsl:when test="$isChapterHeading"> 811 <xsl:value-of select="$currentChapterID"/> 812 </xsl:when> 813 <xsl:otherwise> 814 <xsl:text>only a heading, but not a chapter</xsl:text> 815 </xsl:otherwise> 816 </xsl:choose> 817 </xsl:attribute> 818 <!-- no of the used child, necessary for quick finding of chapters of next file --> 819 <xsl:attribute name="child-document-no"> 820 <xsl:choose> 821 <xsl:when test="$isNewFile"> 822 <xsl:value-of select="$currentChildNo + 1"/> 823 </xsl:when> 824 <xsl:otherwise> 825 <xsl:value-of select="$currentChildNo"/> 826 </xsl:otherwise> 827 </xsl:choose> 828 </xsl:attribute> 829 <!-- the URL of the child document source, containing the heading --> 830 <xsl:attribute name="file-url"> 831 <xsl:value-of select="$newChildURL"/> 832 </xsl:attribute> 833 <xsl:attribute name="out-file-url"> 834 <xsl:value-of select="$outFileURL"/> 835 </xsl:attribute> 836 <xsl:attribute name="level"> 837 <xsl:value-of select="$headingLevel"/> 838 </xsl:attribute> 839 <xsl:attribute name="title"> 840 <xsl:value-of select="$headingTitle"/> 841 </xsl:attribute> 842 <xsl:attribute name="encoded-title"> 843 <xsl:value-of select="$currentChildHeading/@encoded-title"/> 844 </xsl:attribute> 845 <xsl:attribute name="absolute-chapter-level"> 846 <xsl:value-of select="$absoluteChapterLevel"/> 847 </xsl:attribute> 848 </xsl:element> 849 850 851 <xsl:choose> 852 <xsl:when test="$childrenHeadings/heading-count != $currentHeadingNo"> 853 <!-- procede as long the list of children isn'nt worked through --> 854 <xsl:choose> 855 <xsl:when test="$isChapterHeading"> 856 <!-- global variables have to be set, so the for-each loop can access them --> 857 <xsl:choose> 858 <xsl:when test="function-available('sxghelper:set-heading-no')"> 859 <xsl:value-of select="sxghelper:set-heading-no($currentHeadingNo + 1)"/> 860 <xsl:if test="$isNewFile"> 861 <xsl:value-of select="sxghelper:set-current-child-no($currentChildNo + 1)"/> 862 <xsl:value-of select="sxghelper:set-current-child-url(string($newChildURL))"/> 863 </xsl:if> 864 </xsl:when> 865 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.setHeadingNo')"> 866 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.setHeadingNo($currentHeadingNo + 1)"/> 867 <xsl:if test="$isNewFile"> 868 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.setCurrentChildNo($currentChildNo + 1)"/> 869 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.setCurrentChildUrl($newChildURL)"/> 870 </xsl:if> 871 </xsl:when> 872 </xsl:choose> 873 </xsl:when> 874 <xsl:otherwise> 875 <!-- not a chapter heading, call itself until a chapter ref is found or the end of headings is reached --> 876 <xsl:call-template name="searchHeadingInChildDocument"> 877 <xsl:with-param name="chapterRefs" select="$chapterRefs"/> 878 <xsl:with-param name="childrenHeadings" select="$childrenHeadings"/> 879 <xsl:with-param name="currentChapterRefNo" select="$currentChapterRefNo"/> 880 <xsl:with-param name="currentHeadingNo" select="$currentHeadingNo + 1"/> 881 <xsl:with-param name="currentChildURL" select="$currentChildURL"/> 882 <xsl:with-param name="currentChildNo" select="$currentChildNo"/> 883 </xsl:call-template> 884 </xsl:otherwise> 885 </xsl:choose> 886 </xsl:when> 887 <xsl:otherwise> 888 <xsl:if test="$isDebugMode"> 889 <xsl:message>All child documents have been walked through without finding the chapter name!</xsl:message> 890 <xsl:message> childrenHeadings/heading-count: <xsl:value-of select="$childrenHeadings/heading-count"/></xsl:message> 891 <xsl:message> currentHeadingNo: <xsl:value-of select="$currentHeadingNo"/></xsl:message> 892 </xsl:if> 893 </xsl:otherwise> 894 </xsl:choose> 895 </xsl:template> 896 897 898 899 900 901 <!-- Chapters from the Content Table have currently no anchor to child documents in OOo XML. 902 As solution, whenever a a global document every header of the HTML output gets get's an anchor in the Therefore--> 903 <xsl:template name="encode-string"> 904 <xsl:param name="encoding" select="'UTF-8'"/> 905 <xsl:param name="textToBeEncoded"/> 906 907 <xsl:choose> 908 <xsl:when test="function-available('urlencoder:encode')"> 909 <xsl:value-of select="urlencoder:encode(normalize-space($textToBeEncoded),$encoding)"/> 910 </xsl:when> 911 <xsl:when test="function-available('java:java.net.URLEncoder.encode')"> 912 <xsl:value-of select="java:java.net.URLEncoder.encode(string(normalize-space($textToBeEncoded)),string($encoding))"/> 913 </xsl:when> 914 </xsl:choose> 915 </xsl:template> 916 917 918 919 920 921 <!-- ******************************************************************************************************** --> 922 <!-- *** TRANSFORMATION OF ALL CHILD DOCUMENTS OF THE GLOBAL DOCUMENTS BY USING A EXTERNAL HELPER CLASS *** --> 923 <!-- ******************************************************************************************************** --> 924 925 926 <!-- a new element 'contentTableHeadings' will be added to the helper variable the first time a child will be transformed --> 927 <xsl:template name="transform-global-document-and-children"> 928 <xsl:param name="collectedGlobalData"/> 929 930 931 <xsl:choose> 932 <xsl:when test="$collectedGlobalData/content-table-headings"> 933 <xsl:call-template name="start-child-transformation"> 934 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 935 </xsl:call-template> 936 </xsl:when> 937 <xsl:otherwise> 938 <!-- The necessary auxiliary variable hasn't build yet. 939 This variable gonna store all headers (with chapter numbers) and the URL of their files --> 940 941 <xsl:call-template name="Create-helper-variables-for-Content-Table"> 942 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 943 </xsl:call-template> 944 945 </xsl:otherwise> 946 </xsl:choose> 947 </xsl:template> 948 949 950 951 <xsl:template name="start-self-and-children-transformation"> 952 <xsl:param name="collectedGlobalData"/> 953 954 <xsl:if test="$isDebugMode"> 955 <xsl:call-template name="debug-content-table-headings-variable"> 956 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 957 </xsl:call-template> 958 959 <xsl:message>Parsing the global document...</xsl:message> 960 </xsl:if> 961 962 <xsl:apply-templates> 963 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 964 </xsl:apply-templates> 965 966 967 <xsl:if test="$isDebugMode"><xsl:message>Parsing the child documents...</xsl:message></xsl:if> 968 <xsl:call-template name="start-child-transformation"> 969 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 970 </xsl:call-template> 971 972 </xsl:template> 973 974 975 976 977 <xsl:template name="start-child-transformation"> 978 <xsl:param name="collectedGlobalData"/> 979 980 <xsl:if test="$isDebugMode"><xsl:message>Starting the child transformations...</xsl:message></xsl:if> 981 982 <!-- As the childs of a global document (with suffix .sxg) do not know anything about their global parent, 983 the transformation of global documents children have to be done implizit. 984 Otherwise the chapter number of the children will always start with zero, as they do not know anything about the 985 proceding chapters. 986 Furthermore, they don't have any links about preceeding and following documents and no linking for usability reasons 987 could be done. Therefore the children have to be transformed during the transformation of a global (sxg) document --> 988 <xsl:if test="$isDebugMode"> 989 <xsl:choose> 990 <xsl:when test="$collectedGlobalData/content-table-headings"> 991 <xsl:message>Contentable data exists as global data!</xsl:message> 992 </xsl:when> 993 <xsl:otherwise> 994 <xsl:message>No Contentable global data exists!</xsl:message> 995 </xsl:otherwise> 996 </xsl:choose> 997 </xsl:if> 998 999 <!-- currently this function only works with node-sets from XT --> 1000 <xsl:choose> 1001 <xsl:when test="function-available('sxghelper:transform-children')"> 1002 <xsl:message> 1003 <xsl:value-of select="sxghelper:transform-children( $collectedGlobalData/content-table-headings, 1004 string($jaredRootURL), 1005 string($absoluteSourceDirRef), 1006 string($optionalURLSuffix), 1007 string($dpi), 1008 string($outputType), 1009 $isDebugMode)"/> 1010 </xsl:message> 1011 </xsl:when> 1012 <xsl:otherwise> 1013 <xsl:message>Java method transformChildren to transform all children of a global document could not be found. Be sure to use the XT processor.</xsl:message> 1014 </xsl:otherwise> 1015 </xsl:choose> 1016 </xsl:template> 1017 1018 1019 1020 1021 1022 <!-- ******************************************************************************* --> 1023 <!-- *** Creation of helper variable of the headings of all children documents *** --> 1024 <!-- ******************************************************************************* --> 1025 1026 1027 <xsl:template match="/*/office:body/text:section" mode="creation-of-variable"> 1028 <xsl:call-template name="getChildRootNode"/> 1029 1030 <!-- after the last child document the global document will be parsed --> 1031 <xsl:if test="position() = last()"> 1032 <!-- search the global document after all child documents have been searched 1033 1034 ODK PATCH NO INDEX ELEMENT WANTED !! - null pointer exception 1035 <xsl:call-template name="getPreviousHeaderNo"> 1036 <xsl:with-param name="fileURL" select="$contentTableURL"/> 1037 <xsl:with-param name="amountOfCurrentHeading" select="count(following-sibling::text:h)"/> 1038 <xsl:with-param name="nodeToSearchForHeading" select="following-sibling::text:h"/> 1039 </xsl:call-template> 1040 --> 1041 <!-- get the overall No of Headers --> 1042 <xsl:call-template name="getAllHeaderNo"/> 1043 </xsl:if> 1044 </xsl:template> 1045 1046 1047 <xsl:template name="getChildRootNode"> 1048 <xsl:variable name="fileURL" select="text:section-source/@xlink:href"/> 1049 1050 <xsl:choose> 1051 <!-- if absolute URL or absolute DOS PATH or absolute Unix path --> 1052 <xsl:when test="contains($fileURL,'//') or (substring($fileURL,2,1) = ':') or starts-with($fileURL, '/')"> 1053 <xsl:variable name="childRootNode" select="document($fileURL)"/> 1054 <xsl:call-template name="getPreviousHeaderNo"> 1055 <xsl:with-param name="fileURL" select="$fileURL"/> 1056 <!-- NO absolute source path will be added as prefix --> 1057 <xsl:with-param name="amountOfCurrentHeading" select="count($childRootNode/*/office:body/descendant::text:h)"/> 1058 <xsl:with-param name="nodeToSearchForHeading" select="$childRootNode/*/office:body/descendant::text:h"/> 1059 </xsl:call-template> 1060 </xsl:when> 1061 <xsl:otherwise> 1062 <xsl:variable name="childRootNode" select="document(concat($absoluteSourceDirRef,'/',$fileURL))"/> 1063 <xsl:call-template name="getPreviousHeaderNo"> 1064 <xsl:with-param name="fileURL" select="$fileURL"/> 1065 <!-- the absolute source path will be added as prefix --> 1066 <xsl:with-param name="amountOfCurrentHeading" select="count($childRootNode/*/office:body/descendant::text:h)"/> 1067 <xsl:with-param name="nodeToSearchForHeading" select="$childRootNode/*/office:body/descendant::text:h"/> 1068 </xsl:call-template> 1069 </xsl:otherwise> 1070 </xsl:choose> 1071 </xsl:template> 1072 1073 1074 <xsl:template name="getPreviousHeaderNo"> 1075 <xsl:param name="fileURL"/> 1076 <xsl:param name="nodeToSearchForHeading"/> 1077 <xsl:param name="amountOfCurrentHeading"/> 1078 1079 <xsl:choose> 1080 <xsl:when test="function-available('sxghelper:get-previous-child-documents-heading-count')"> 1081 <xsl:call-template name="addHeadingInfo"> 1082 <xsl:with-param name="nodeToSearchForHeading" select="$nodeToSearchForHeading"/> 1083 <xsl:with-param name="fileURL" select="$fileURL"/> 1084 <xsl:with-param name="previousHeader" select="sxghelper:get-previous-child-documents-heading-count($amountOfCurrentHeading)"/> 1085 </xsl:call-template> 1086 </xsl:when> 1087 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.getPreviousChildDocumentsHeadingCount')"> 1088 <xsl:call-template name="addHeadingInfo"> 1089 <xsl:with-param name="nodeToSearchForHeading" select="$nodeToSearchForHeading"/> 1090 <xsl:with-param name="fileURL" select="$fileURL"/> 1091 <xsl:with-param name="previousHeader" select="java:com.sun.star.xslt.helper.SxgChildTransformer.getPreviousChildDocumentsHeadingCount($amountOfCurrentHeading)"/> 1092 </xsl:call-template> 1093 </xsl:when> 1094 </xsl:choose> 1095 1096 </xsl:template> 1097 1098 1099 <xsl:template name="addHeadingInfo"> 1100 <xsl:param name="fileURL"/> 1101 <xsl:param name="previousHeader"/> 1102 <xsl:param name="nodeToSearchForHeading"/> 1103 1104 <xsl:variable name="previousHeader2" select="number($previousHeader)"/> 1105 <xsl:for-each select="$nodeToSearchForHeading"> 1106 1107 <xsl:variable name="title" select="normalize-space(.)"/> 1108 1109 <xsl:variable name="encodedTitle"> 1110 <xsl:call-template name="encode-string"> 1111 <!-- the space has to be normalized, 1112 otherwise an illegal argument exception will be thrown for XT--> 1113 <xsl:with-param name="textToBeEncoded" select="$title"/> 1114 </xsl:call-template> 1115 </xsl:variable> 1116 1117 <xsl:element name="heading"> 1118 <!-- odd but 'descendant:text()' didn't work, but '.', to get all text nodes of the header --> 1119 <xsl:attribute name="title"><xsl:value-of select="$title"/></xsl:attribute> 1120 <xsl:attribute name="encoded-title"><xsl:value-of select="$encodedTitle"/></xsl:attribute> 1121 <xsl:attribute name="level"><xsl:value-of select="@text:level"/></xsl:attribute> 1122 <xsl:attribute name="file-url"><xsl:value-of select="$fileURL"/></xsl:attribute> 1123 <xsl:attribute name="header-no"><xsl:value-of select="position() + $previousHeader2"/></xsl:attribute> 1124 </xsl:element> 1125 </xsl:for-each> 1126 1127 </xsl:template> 1128 1129 1130 <xsl:template name="getAllHeaderNo"> 1131 1132 <xsl:choose> 1133 <xsl:when test="function-available('sxghelper:get-all-child-documents-heading-count')"> 1134 <xsl:call-template name="addAllHeaderNoElement"> 1135 <xsl:with-param name="allHeader" select="sxghelper:get-all-child-documents-heading-count()"/> 1136 </xsl:call-template> 1137 </xsl:when> 1138 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.getAllChildDocumentsHeadingCount')"> 1139 <xsl:call-template name="addAllHeaderNoElement"> 1140 <xsl:with-param name="allHeader" select="java:com.sun.star.xslt.helper.SxgChildTransformer.getAllChildDocumentsHeadingCount()"/> 1141 </xsl:call-template> 1142 </xsl:when> 1143 </xsl:choose> 1144 </xsl:template> 1145 1146 <xsl:template name="addAllHeaderNoElement"> 1147 <xsl:param name="allHeader"/> 1148 1149 <xsl:element name="heading-count"> 1150 <xsl:value-of select="$allHeader"/> 1151 </xsl:element> 1152 1153 </xsl:template> 1154 1155 1156 <!-- ******************************************************************************************************* --> 1157 <!-- *** Creation of a line of links at the beginning and end of a child document to enhance usability *** --> 1158 <!-- ******************************************************************************************************* --> 1159 1160 <xsl:template name="add-child-document-usability-links"> 1161 <xsl:element name="center"> 1162 <xsl:element name="small"> 1163 <xsl:text>[ </xsl:text> 1164 1165 1166 <xsl:variable name="globalDocumentDir" select="sxghelper:get-global-document-dir()"/> 1167 <xsl:variable name="currentChildNo" select="number($contentTableHeadings/heading[$globalDocumentRefToCurrentFile = @file-url]/@child-document-no)"/> 1168 <xsl:variable name="earlierDocURL" select="$contentTableHeadings/heading[($currentChildNo - 1) = @child-document-no]/@out-file-url"/> 1169 <!-- 1170 <xsl:message>from: <xsl:value-of select="$globalDocumentRefToCurrentFile"/></xsl:message> 1171 <xsl:message>to: <xsl:value-of select="$earlierDocURL"/></xsl:message> 1172 <xsl:message>Is: <xsl:call-template name="get-relative-file-ref"> 1173 <xsl:with-param name="sourceFileRef" select="$globalDocumentRefToCurrentFile"/> 1174 <xsl:with-param name="targetFileRef" select="$earlierDocURL"/> 1175 </xsl:call-template> 1176 </xsl:message>--> 1177 1178 1179 <xsl:if test="$earlierDocURL"> 1180 <xsl:element name="a"> 1181 <xsl:attribute name="href"> 1182 <!-- when the links starts with a '#' it's a link to the Content Table--> 1183 <xsl:choose> 1184 <xsl:when test="starts-with($earlierDocURL, '#')"> 1185 1186 <xsl:call-template name="get-relative-file-ref"> 1187 <xsl:with-param name="sourceFileRef" select="$globalDocumentRefToCurrentFile"/> 1188 <xsl:with-param name="targetFileRef" select="."/> 1189 </xsl:call-template> 1190 <!-- <xsl:value-of select="concat($contentTableURL, $earlierDocURL)"/>--> 1191 </xsl:when> 1192 <xsl:otherwise> 1193 1194 <xsl:call-template name="get-relative-file-ref"> 1195 <xsl:with-param name="sourceFileRef" select="$globalDocumentRefToCurrentFile"/> 1196 <xsl:with-param name="targetFileRef" select="$earlierDocURL"/> 1197 </xsl:call-template> 1198 <!-- 1199 1200 <xsl:value-of select="concat($globalDocumentDir, $earlierDocURL)"/>--> 1201 </xsl:otherwise> 1202 </xsl:choose> 1203 </xsl:attribute> 1204 <xsl:text>Previous document</xsl:text> 1205 </xsl:element> 1206 1207 <xsl:text> | </xsl:text> 1208 </xsl:if> 1209 1210 <xsl:element name="a"> 1211 <xsl:attribute name="href"> 1212 <!-- when globalDocumentRefToCurrentFile is unset the current file is the Content Table--> 1213 <xsl:choose> 1214 <xsl:when test="$globalDocumentRefToCurrentFile"> 1215 <xsl:variable name="contentTableDir"> 1216 <xsl:call-template name="get-name-of-table-of-content-document"/> 1217 </xsl:variable> 1218 1219 <xsl:call-template name="get-relative-file-ref"> 1220 <xsl:with-param name="sourceFileRef" select="$globalDocumentRefToCurrentFile"/> 1221 <xsl:with-param name="targetFileRef" select="$contentTableDir"/> 1222 </xsl:call-template> 1223 </xsl:when> 1224 <xsl:otherwise> 1225 <xsl:text>#</xsl:text> 1226 </xsl:otherwise> 1227 </xsl:choose> 1228 1229 <!-- <xsl:value-of select="$contentTableURL"/>--> 1230 </xsl:attribute> 1231 <xsl:text>Content Table</xsl:text> 1232 </xsl:element> 1233 1234 1235 <xsl:variable name="nextDocURL" select="$contentTableHeadings/heading[($currentChildNo + 1) = @child-document-no]/@out-file-url"/> 1236 <xsl:if test="$nextDocURL"> 1237 <xsl:text> | </xsl:text> 1238 <xsl:element name="a"> 1239 <xsl:attribute name="href"> 1240 <!-- when the links starts with a '#' it's a link to the Content Table--> 1241 <xsl:choose> 1242 <xsl:when test="starts-with($nextDocURL, '#')"> 1243 <xsl:call-template name="get-relative-file-ref"> 1244 <xsl:with-param name="sourceFileRef" select="$globalDocumentRefToCurrentFile"/> 1245 <xsl:with-param name="targetFileRef" select="."/> 1246 </xsl:call-template> 1247 <!-- <xsl:value-of select="concat($contentTableURL, $nextDocURL)"/>--> 1248 </xsl:when> 1249 <xsl:otherwise> 1250 <xsl:call-template name="get-relative-file-ref"> 1251 <xsl:with-param name="sourceFileRef" select="$globalDocumentRefToCurrentFile"/> 1252 <xsl:with-param name="targetFileRef" select="$nextDocURL"/> 1253 </xsl:call-template> 1254 <!-- <xsl:value-of select="concat($globalDocumentDir, $nextDocURL)"/>--> 1255 </xsl:otherwise> 1256 </xsl:choose> 1257 </xsl:attribute> 1258 <xsl:text>Next document</xsl:text> 1259 </xsl:element> 1260 </xsl:if> 1261 <xsl:text> ]</xsl:text> 1262 </xsl:element> 1263 </xsl:element> 1264 </xsl:template> 1265 1266 1267 <xsl:template name="get-relative-file-ref"> 1268 <xsl:param name="sourceFileRef"/> 1269 <xsl:param name="targetFileRef"/> 1270 1271 <xsl:choose> 1272 <xsl:when test="function-available('sxghelper:get-relative-file-ref')"> 1273 <xsl:value-of select="sxghelper:get-relative-file-ref(string($sourceFileRef), string($targetFileRef))"/> 1274 </xsl:when> 1275 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.getRelativeFileRef')"> 1276 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.getRelativeFileRef(string($sourceFileRef), string($targetFileRef))"/> 1277 </xsl:when> 1278 </xsl:choose> 1279 1280 </xsl:template> 1281 1282 1283 <xsl:template name="get-name-of-table-of-content-document"> 1284 1285 <xsl:choose> 1286 <xsl:when test="function-available('sxghelper:get-name-of-table-of-content-document')"> 1287 <xsl:value-of select="sxghelper:get-name-of-table-of-content-document()"/> 1288 </xsl:when> 1289 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.getNameOfTableOfContentDocument')"> 1290 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.getNameOfTableOfContentDocument()"/> 1291 </xsl:when> 1292 </xsl:choose> 1293 1294 </xsl:template> 1295 1296 1297 <xsl:template name="debug-content-table-headings-variable"> 1298 <xsl:param name="collectedGlobalData"/> 1299 1300 <xsl:message><xsl:text>**** THE HEADING VARIABLE **** </xsl:text></xsl:message> 1301 <xsl:message>content-table-url: <xsl:value-of select="collectedGlobalData/content-table-headings/content-table-url"/></xsl:message> 1302 1303 <xsl:for-each select="$collectedGlobalData/content-table-headings/heading"> 1304 <xsl:message><xsl:text>**** new heading: </xsl:text></xsl:message> 1305 <xsl:message>content-table-id: <xsl:value-of select="@content-table-id"/></xsl:message> 1306 <xsl:message>child-document-no: <xsl:value-of select="@child-document-no"/></xsl:message> 1307 <xsl:message>file-url: <xsl:value-of select="@file-url"/></xsl:message> 1308 <xsl:message>out-file-url: <xsl:value-of select="@out-file-url"/></xsl:message> 1309 <xsl:message>level: <xsl:value-of select="@level"/></xsl:message> 1310 <xsl:message>title: <xsl:value-of select="@title"/></xsl:message> 1311 <xsl:message>encoded-title: <xsl:value-of select="@encoded-title"/></xsl:message> 1312 <xsl:message>absolute-chapter-level:<xsl:value-of select="@absolute-chapter-level"/></xsl:message> 1313 </xsl:for-each> 1314 1315 </xsl:template> 1316 1317 1318 <!-- To make the headings unique, the absolute heading is added to them 1319 E.g. The level 1.2.3.4. would result into a 1+2+3+4 string --> 1320 <xsl:template name="calc-chapter-numbers"> 1321 <xsl:param name="level"/> 1322 1323 <xsl:choose> 1324 <xsl:when test="function-available('sxghelper:calc-chapter-numbers')"> 1325 <xsl:value-of select="sxghelper:calc-chapter-numbers($level)"/> 1326 </xsl:when> 1327 <xsl:when test="function-available('java:com.sun.star.xslt.helper.SxgChildTransformer.calcChapterNumbers')"> 1328 <xsl:value-of select="java:com.sun.star.xslt.helper.SxgChildTransformer.calcChapterNumbers($level)"/> 1329 </xsl:when> 1330 </xsl:choose> 1331 1332 </xsl:template> 1333 1334 1335 1336 1337 <xsl:template match="text:p" mode="content-table"> 1338 <xsl:param name="collectedGlobalData"/> 1339 1340 <xsl:variable name="allTabStopStyles" select="$office:automatic-styles/style:style[@style:name = current()/@text:style-name]/style:properties/style:tab-stops"/> 1341 1342 <xsl:element name="table"> 1343 <xsl:attribute name="border">0</xsl:attribute> 1344 <xsl:attribute name="class"><xsl:value-of select="@text:style-name"/></xsl:attribute> 1345 <!-- 1346 <xsl:message>*********</xsl:message> 1347 <xsl:message>Stylename:<xsl:value-of select="@text:style-name"/></xsl:message> 1348 <xsl:message>position: <xsl:value-of select="count($allTabStopStyles/style:tab-stop)"/></xsl:message> 1349 --> 1350 1351 <xsl:element name="colgroup"> 1352 <xsl:call-template name="create-col-element"> 1353 <xsl:with-param name="lastNodePosition" select="count($allTabStopStyles/style:tab-stop)"/> 1354 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1355 </xsl:call-template> 1356 </xsl:element> 1357 1358 1359 <!-- all elements before the first tabStop --> 1360 <xsl:variable name="testNo-RTF"> 1361 <xsl:apply-templates select="node()" mode="cell-content"/> 1362 </xsl:variable> 1363 1364 1365 <xsl:choose> 1366 <xsl:when test="function-available('xt:node-set')"> 1367 <xsl:variable name="tabNodePositions" select="xt:node-set($testNo-RTF)"/> 1368 <xsl:element name="tr"> 1369 <xsl:call-template name="create-td-elements"> 1370 <xsl:with-param name="lastNodePosition" select="count($allTabStopStyles/style:tab-stop)"/> 1371 <xsl:with-param name="position" select="1"/> 1372 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1373 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1374 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1375 </xsl:call-template> 1376 </xsl:element> 1377 1378 </xsl:when> 1379 <xsl:when test="function-available('xalan:nodeset')"> 1380 <xsl:variable name="tabNodePositions" select="xalan:nodeset($testNo-RTF)"/> 1381 <xsl:element name="tr"> 1382 <xsl:call-template name="create-td-elements"> 1383 <xsl:with-param name="lastNodePosition" select="count($allTabStopStyles/style:tab-stop)"/> 1384 <xsl:with-param name="position" select="1"/> 1385 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1386 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1387 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1388 </xsl:call-template> 1389 </xsl:element> 1390 1391 </xsl:when> 1392 </xsl:choose> 1393 1394 <!-- <xsl:variable name="tabNodePositions" select="xt:node-set($testNo-RTF)"/> 1395 1396 <xsl:element name="tr"> 1397 <xsl:call-template name="create-td-elements"> 1398 <xsl:with-param name="lastNodePosition" select="count($allTabStopStyles/style:tab-stop)"/> 1399 <xsl:with-param name="position" select="1"/> 1400 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1401 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1402 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1403 </xsl:call-template> 1404 </xsl:element>--> 1405 1406 1407 </xsl:element> 1408 </xsl:template> 1409 1410 1411 <xsl:template name="create-col-element"> 1412 <xsl:param name="lastNodePosition"/> 1413 <xsl:param name="allTabStopStyles"/> 1414 1415 <xsl:for-each select="$allTabStopStyles/style:tab-stop"> 1416 <xsl:element name="col"> 1417 <xsl:attribute name="style"> 1418 <xsl:text>width: </xsl:text> 1419 <xsl:call-template name="grap-cell-width"> 1420 <xsl:with-param name="position" select="position()"/> 1421 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1422 </xsl:call-template> 1423 </xsl:attribute> 1424 </xsl:element> 1425 </xsl:for-each> 1426 1427 </xsl:template> 1428 <!-- 1429 Scenarios tabstops 1430 1431 1) style:type of style:tab-stop is 'right' and earlier tabStop is not right 1432 -> Earlier text-nodes and following text-nodes, will be put into an inner table, with two TD first aligned left, with proceding textnodes, the latter aligned right. 1433 1434 2) style:type is 'right' and earlier tabStop is right 1435 -> following text-nodes, will be put into a right aligned TD 1436 1437 3) style:type is 'non-right' and earlier tabStop 'non-right' as well 1438 -> put the preceding tab stops into a TD (left aligned is default) 1439 1440 4) first style:type would have no right precedign tabStop 1441 -> works well with first sceanrios 1 and 3 1442 1443 5) last style:type would be a special case, if it would be left aligned, but this won't happen in our case.. :D 1444 1445 Scenarios unmatched: 1446 - text:styleposition 'center' will not be matched in our case (effort for nothing), there will be only 'right' and not 'right' 1447 - If the last tabStop is not from text:stylepostion 'right', the length of the last cell is undefined and a document length must be found. 1448 Not happens in our global document case. Also the algorithm below would have to be expanded (cp. scenario 5). 1449 1450 --> 1451 <xsl:template name="create-td-elements"> 1452 <xsl:param name="collectedGlobalData"/> 1453 <xsl:param name="lastNodePosition"/> 1454 <xsl:param name="position"/> 1455 <xsl:param name="allTabStopStyles"/> 1456 <xsl:param name="tabNodePositions"/> 1457 <!-- 1458 <xsl:message>++++++++</xsl:message> 1459 <xsl:message>Position: <xsl:value-of select="$position"/></xsl:message> 1460 <xsl:message>lastNodePosition: <xsl:value-of select="$lastNodePosition"/></xsl:message> 1461 --> 1462 1463 <xsl:variable name="currentStyleType" select="$allTabStopStyles/style:tab-stop[$position]/@style:type"/> 1464 <xsl:variable name="earlierStyleType" select="$allTabStopStyles/style:tab-stop[$position - 1]/@style:type"/> 1465 <xsl:choose> 1466 <xsl:when test="$currentStyleType = 'right'"> 1467 <xsl:choose> 1468 <xsl:when test="$earlierStyleType = 'right'"> 1469 <!-- 1470 2) style:type is 'right' and earlier tabStop is right 1471 -> following text-nodes, will be put into a right aligned TD --> 1472 <xsl:element name="td"> 1473 <xsl:attribute name="style"> 1474 <xsl:text>align: right</xsl:text> 1475 </xsl:attribute> 1476 <xsl:call-template name="grap-cell-content-before-tab-stop"> 1477 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1478 <xsl:with-param name="endingTabStopPosition" select="$position + 1"/> 1479 <xsl:with-param name="lastNodePosition" select="$lastNodePosition"/> 1480 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1481 </xsl:call-template> 1482 </xsl:element> 1483 </xsl:when> 1484 <xsl:otherwise> 1485 <!-- 1486 1) style:type of style:tab-stop is 'right' and earlier tabStop is not right 1487 -> Earlier text-nodes and following text-nodes, will be put into an inner table, with two TD first aligned left, with proceding textnodes, the latter aligned right.--> 1488 <!-- valid HTML but browsers make a line break (border=0 and paragraphstyle also missing): 1489 <xsl:element name="table"> 1490 <xsl:element name="td"> 1491 <xsl:call-template name="grap-cell-content-before-tab-stop"> 1492 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1493 <xsl:with-param name="endingTabStopPosition" select="$position"/> 1494 <xsl:with-param name="lastNodePosition" select="$lastNodePosition"/> 1495 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1496 </xsl:call-template> 1497 </xsl:element> 1498 <xsl:element name="td"> 1499 <xsl:attribute name="style"> 1500 <xsl:text>align: right</xsl:text> 1501 </xsl:attribute> 1502 <xsl:call-template name="grap-cell-content-before-tab-stop"> 1503 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1504 <xsl:with-param name="endingTabStopPosition" select="$position + 1"/> 1505 <xsl:with-param name="lastNodePosition" select="$lastNodePosition"/> 1506 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1507 </xsl:call-template> 1508 </xsl:element> 1509 </xsl:element> 1510 --> 1511 <xsl:element name="td"> 1512 <xsl:call-template name="grap-cell-content-before-tab-stop"> 1513 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1514 <xsl:with-param name="endingTabStopPosition" select="$position"/> 1515 <xsl:with-param name="lastNodePosition" select="$lastNodePosition"/> 1516 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1517 </xsl:call-template> 1518 <!-- ODK FEATURE NO PAGES 1519 <xsl:element name="td"> 1520 <xsl:attribute name="style"> 1521 <xsl:text>align: right</xsl:text> 1522 </xsl:attribute> 1523 <xsl:call-template name="grap-cell-content-before-tab-stop"> 1524 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1525 <xsl:with-param name="endingTabStopPosition" select="$position + 1"/> 1526 <xsl:with-param name="lastNodePosition" select="$lastNodePosition"/> 1527 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1528 </xsl:call-template> 1529 </xsl:element> --> 1530 </xsl:element> 1531 </xsl:otherwise> 1532 </xsl:choose> 1533 </xsl:when> 1534 <xsl:otherwise> 1535 <xsl:choose> 1536 <xsl:when test="$earlierStyleType = 'right'"> 1537 </xsl:when> 1538 <xsl:otherwise> 1539 <!-- 1540 3) style:type is 'non-right' and earlier tabStop 'non-right' as well 1541 -> put the preceding tab stops into a TD (left aligned is default) --> 1542 <xsl:element name="td"> 1543 <xsl:call-template name="grap-cell-content-before-tab-stop"> 1544 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1545 <xsl:with-param name="endingTabStopPosition" select="$position"/> 1546 <xsl:with-param name="lastNodePosition" select="$lastNodePosition"/> 1547 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1548 </xsl:call-template> 1549 </xsl:element> 1550 </xsl:otherwise> 1551 </xsl:choose> 1552 </xsl:otherwise> 1553 </xsl:choose> 1554 1555 <xsl:if test="$position != $lastNodePosition"> 1556 <xsl:call-template name="create-td-elements"> 1557 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1558 <xsl:with-param name="lastNodePosition" select="$lastNodePosition"/> 1559 <xsl:with-param name="position" select="$position + 1"/> 1560 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1561 <xsl:with-param name="tabNodePositions" select="$tabNodePositions"/> 1562 </xsl:call-template> 1563 </xsl:if> 1564 </xsl:template> 1565 1566 1567 <xsl:template name="grap-cell-content-before-tab-stop"> 1568 <xsl:param name="collectedGlobalData"/> 1569 <xsl:param name="endingTabStopPosition"/> 1570 <xsl:param name="tabNodePositions"/> 1571 <xsl:param name="lastNodePosition"/> 1572 1573 <xsl:choose> 1574 <xsl:when test="$endingTabStopPosition = 1"> 1575 <xsl:apply-templates mode="content-table" select="node()[position() < $tabNodePositions/tab-stop-node-position[$endingTabStopPosition]]"> 1576 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1577 </xsl:apply-templates> 1578 </xsl:when> 1579 <xsl:when test="$endingTabStopPosition > $lastNodePosition"> 1580 <xsl:apply-templates mode="content-table" select="node()[position() > $tabNodePositions/tab-stop-node-position[$endingTabStopPosition - 1]]"> 1581 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1582 </xsl:apply-templates> 1583 </xsl:when> 1584 <xsl:otherwise> 1585 <xsl:apply-templates mode="content-table" select="node()[position() < $tabNodePositions/tab-stop-node-position[$endingTabStopPosition]][position() > $tabNodePositions/tab-stop-node-position[$endingTabStopPosition - 1]]"> 1586 <xsl:with-param name="collectedGlobalData" select="$collectedGlobalData"/> 1587 </xsl:apply-templates> 1588 </xsl:otherwise> 1589 </xsl:choose> 1590 </xsl:template> 1591 1592 <xsl:template mode="content-table" match="text:s"> 1593 <xsl:call-template name="write-breakable-whitespace"> 1594 <xsl:with-param name="whitespaces" select="@text:c"/> 1595 </xsl:call-template> 1596 </xsl:template> 1597 1598 1599 <xsl:template match="*" mode="cell-content"> 1600 1601 <xsl:if test="name() = 'text:tab-stop' or *[name() = 'text:tab-stop']"> 1602 <xsl:element name="tab-stop-node-position"> 1603 <xsl:value-of select="position()"/> 1604 </xsl:element> 1605 </xsl:if> 1606 </xsl:template> 1607 1608 1609 <xsl:template name="grap-cell-width"> 1610 <xsl:param name="position"/> 1611 <xsl:param name="allTabStopStyles"/> 1612 1613 <xsl:variable name="tabStopPosition" select="$allTabStopStyles/style:tab-stop[$position]/@style:position"/> 1614 <xsl:choose> 1615 <xsl:when test="contains($tabStopPosition, 'cm')"> 1616 <xsl:call-template name="create-cell-width"> 1617 <xsl:with-param name="width" select="number(substring-before($tabStopPosition,'cm'))"/> 1618 <xsl:with-param name="unit" select="'cm'"/> 1619 <xsl:with-param name="position" select="$position - 1"/> 1620 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1621 </xsl:call-template> 1622 </xsl:when> 1623 <xsl:when test="contains($tabStopPosition, 'in')"> 1624 <xsl:call-template name="create-cell-width"> 1625 <xsl:with-param name="width" select="number(substring-before($tabStopPosition,'in'))"/> 1626 <xsl:with-param name="unit" select="'in'"/> 1627 <xsl:with-param name="position" select="$position - 1"/> 1628 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1629 </xsl:call-template> 1630 </xsl:when> 1631 <xsl:when test="contains($tabStopPosition, 'ch')"> 1632 <xsl:call-template name="create-cell-width"> 1633 <xsl:with-param name="width" select="number(substring-before($tabStopPosition,'ch'))"/> 1634 <xsl:with-param name="unit" select="'ch'"/> 1635 <xsl:with-param name="position" select="$position - 1"/> 1636 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1637 </xsl:call-template> 1638 </xsl:when> 1639 <xsl:when test="contains($tabStopPosition, 'pt')"> 1640 <xsl:call-template name="create-cell-width"> 1641 <xsl:with-param name="width" select="number(substring-before($tabStopPosition,'pt'))"/> 1642 <xsl:with-param name="unit" select="'pt'"/> 1643 <xsl:with-param name="position" select="$position - 1"/> 1644 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1645 </xsl:call-template> 1646 </xsl:when> 1647 </xsl:choose> 1648 </xsl:template> 1649 1650 <xsl:template name="create-cell-width"> 1651 <xsl:param name="width"/> 1652 <xsl:param name="unit"/> 1653 <xsl:param name="position"/> 1654 <xsl:param name="allTabStopStyles"/> 1655 1656 <xsl:choose> 1657 <xsl:when test="$position > 1"> 1658 <xsl:call-template name="create-cell-width"> 1659 <xsl:with-param name="width" select="$width - number(substring-before($allTabStopStyles/style:tab-stop[$position]/@style:position,$unit))"/> 1660 <xsl:with-param name="unit" select="$unit"/> 1661 <xsl:with-param name="position" select="$position - 1"/> 1662 <xsl:with-param name="allTabStopStyles" select="$allTabStopStyles"/> 1663 </xsl:call-template> 1664 </xsl:when> 1665 <xsl:when test="$position = 1"> 1666 <xsl:value-of select="concat($width - number(substring-before($allTabStopStyles/style:tab-stop[$position]/@style:position,$unit)), $unit)"/> 1667 </xsl:when> 1668 <xsl:otherwise> 1669 <xsl:value-of select="concat($width, $unit)"/> 1670 </xsl:otherwise> 1671 </xsl:choose> 1672 </xsl:template> 1673 1674 </xsl:stylesheet>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 18:01:28 2007 | par Balluche grâce à PHPXref 0.7 |