1*cda5da8dSAndroid Build Coastguard Worker<?xml version="1.0" encoding="UTF-8"?> 2*cda5da8dSAndroid Build Coastguard Worker 3*cda5da8dSAndroid Build Coastguard Worker<!-- 4*cda5da8dSAndroid Build Coastguard Worker xml2text.xsl - transform Bison XML Report into plain text. 5*cda5da8dSAndroid Build Coastguard Worker 6*cda5da8dSAndroid Build Coastguard Worker Copyright (C) 2007-2015, 2018-2021 Free Software Foundation, Inc. 7*cda5da8dSAndroid Build Coastguard Worker 8*cda5da8dSAndroid Build Coastguard Worker This file is part of Bison, the GNU Compiler Compiler. 9*cda5da8dSAndroid Build Coastguard Worker 10*cda5da8dSAndroid Build Coastguard Worker This program is free software: you can redistribute it and/or modify 11*cda5da8dSAndroid Build Coastguard Worker it under the terms of the GNU General Public License as published by 12*cda5da8dSAndroid Build Coastguard Worker the Free Software Foundation, either version 3 of the License, or 13*cda5da8dSAndroid Build Coastguard Worker (at your option) any later version. 14*cda5da8dSAndroid Build Coastguard Worker 15*cda5da8dSAndroid Build Coastguard Worker This program is distributed in the hope that it will be useful, 16*cda5da8dSAndroid Build Coastguard Worker but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cda5da8dSAndroid Build Coastguard Worker MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cda5da8dSAndroid Build Coastguard Worker GNU General Public License for more details. 19*cda5da8dSAndroid Build Coastguard Worker 20*cda5da8dSAndroid Build Coastguard Worker You should have received a copy of the GNU General Public License 21*cda5da8dSAndroid Build Coastguard Worker along with this program. If not, see <https://www.gnu.org/licenses/>. 22*cda5da8dSAndroid Build Coastguard Worker 23*cda5da8dSAndroid Build Coastguard Worker Written by Wojciech Polak <[email protected]>. 24*cda5da8dSAndroid Build Coastguard Worker --> 25*cda5da8dSAndroid Build Coastguard Worker 26*cda5da8dSAndroid Build Coastguard Worker<xsl:stylesheet version="1.0" 27*cda5da8dSAndroid Build Coastguard Worker xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 28*cda5da8dSAndroid Build Coastguard Worker xmlns:bison="https://www.gnu.org/software/bison/"> 29*cda5da8dSAndroid Build Coastguard Worker 30*cda5da8dSAndroid Build Coastguard Worker<xsl:import href="bison.xsl"/> 31*cda5da8dSAndroid Build Coastguard Worker<xsl:output method="text" encoding="UTF-8" indent="no"/> 32*cda5da8dSAndroid Build Coastguard Worker 33*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="/"> 34*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="bison-xml-report"/> 35*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 36*cda5da8dSAndroid Build Coastguard Worker 37*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="bison-xml-report"> 38*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="grammar" mode="reductions"/> 39*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="grammar" mode="useless-in-parser"/> 40*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="automaton" mode="conflicts"/> 41*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="grammar"/> 42*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="automaton"/> 43*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 44*cda5da8dSAndroid Build Coastguard Worker 45*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar" mode="reductions"> 46*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="nonterminals" mode="useless-in-grammar"/> 47*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="terminals" mode="unused-in-grammar"/> 48*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="rules" mode="useless-in-grammar"/> 49*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 50*cda5da8dSAndroid Build Coastguard Worker 51*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="nonterminals" mode="useless-in-grammar"> 52*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="nonterminal[@usefulness='useless-in-grammar']"> 53*cda5da8dSAndroid Build Coastguard Worker <xsl:text>Nonterminals useless in grammar </xsl:text> 54*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="nonterminal[@usefulness='useless-in-grammar']"> 55*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 56*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@name"/> 57*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 58*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 59*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 60*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 61*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 62*cda5da8dSAndroid Build Coastguard Worker 63*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="terminals" mode="unused-in-grammar"> 64*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="terminal[@usefulness='unused-in-grammar']"> 65*cda5da8dSAndroid Build Coastguard Worker <xsl:text>Terminals unused in grammar </xsl:text> 66*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="terminal[@usefulness='unused-in-grammar']"> 67*cda5da8dSAndroid Build Coastguard Worker <xsl:sort select="@symbol-number" data-type="number"/> 68*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 69*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@name"/> 70*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 71*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 72*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 73*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 74*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 75*cda5da8dSAndroid Build Coastguard Worker 76*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="rules" mode="useless-in-grammar"> 77*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="set" select="rule[@usefulness='useless-in-grammar']"/> 78*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$set"> 79*cda5da8dSAndroid Build Coastguard Worker <xsl:text>Rules useless in grammar </xsl:text> 80*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="style-rule-set"> 81*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="rule-set" select="$set"/> 82*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 83*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 84*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 85*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 86*cda5da8dSAndroid Build Coastguard Worker 87*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar" mode="useless-in-parser"> 88*cda5da8dSAndroid Build Coastguard Worker <xsl:variable 89*cda5da8dSAndroid Build Coastguard Worker name="set" select="rules/rule[@usefulness='useless-in-parser']" 90*cda5da8dSAndroid Build Coastguard Worker /> 91*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$set"> 92*cda5da8dSAndroid Build Coastguard Worker <xsl:text>Rules useless in parser due to conflicts </xsl:text> 93*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="style-rule-set"> 94*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="rule-set" select="$set"/> 95*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 96*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 97*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 98*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 99*cda5da8dSAndroid Build Coastguard Worker 100*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar"> 101*cda5da8dSAndroid Build Coastguard Worker <xsl:text>Grammar </xsl:text> 102*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="style-rule-set"> 103*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param 104*cda5da8dSAndroid Build Coastguard Worker name="rule-set" select="rules/rule[@usefulness!='useless-in-grammar']" 105*cda5da8dSAndroid Build Coastguard Worker /> 106*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 107*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 108*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="terminals"/> 109*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="nonterminals"/> 110*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 111*cda5da8dSAndroid Build Coastguard Worker 112*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="style-rule-set"> 113*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="rule-set"/> 114*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="$rule-set"> 115*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="."> 116*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="'3'"/> 117*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="prev-lhs"> 118*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="position()>1"> 119*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="position" select="position()"/> 120*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$rule-set[$position - 1]/lhs"/> 121*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 122*cda5da8dSAndroid Build Coastguard Worker </xsl:with-param> 123*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 124*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 125*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 126*cda5da8dSAndroid Build Coastguard Worker 127*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar/terminals"> 128*cda5da8dSAndroid Build Coastguard Worker <xsl:text>Terminals, with rules where they appear </xsl:text> 129*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="terminal"/> 130*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 131*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 132*cda5da8dSAndroid Build Coastguard Worker 133*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="grammar/nonterminals"> 134*cda5da8dSAndroid Build Coastguard Worker <xsl:text>Nonterminals, with rules where they appear </xsl:text> 135*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="nonterminal[@usefulness!='useless-in-grammar']"/> 136*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 137*cda5da8dSAndroid Build Coastguard Worker 138*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="terminal"> 139*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 140*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@name"/> 141*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="line-wrap"> 142*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="first-line-length"> 143*cda5da8dSAndroid Build Coastguard Worker <xsl:choose> 144*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="string-length(@name) > 66">0</xsl:when> 145*cda5da8dSAndroid Build Coastguard Worker <xsl:otherwise> 146*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="66 - string-length(@name)" /> 147*cda5da8dSAndroid Build Coastguard Worker </xsl:otherwise> 148*cda5da8dSAndroid Build Coastguard Worker </xsl:choose> 149*cda5da8dSAndroid Build Coastguard Worker </xsl:with-param> 150*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="line-length" select="66" /> 151*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="text"> 152*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="string-length(@type) != 0"> 153*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' <', @type, '>')"/> 154*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 155*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' (', @token-number, ')')"/> 156*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="key('bison:ruleByRhs', @name)"> 157*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' ', @number)"/> 158*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 159*cda5da8dSAndroid Build Coastguard Worker </xsl:with-param> 160*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 161*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 162*cda5da8dSAndroid Build Coastguard Worker 163*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="nonterminal"> 164*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 165*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@name"/> 166*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="string-length(@type) != 0"> 167*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' <', @type, '>')"/> 168*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 169*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' (', @symbol-number, ')')"/> 170*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 171*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="output"> 172*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="line-wrap"> 173*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="line-length" select="66" /> 174*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="text"> 175*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 176*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="key('bison:ruleByLhs', @name)"> 177*cda5da8dSAndroid Build Coastguard Worker <xsl:text>on@left:</xsl:text> 178*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="key('bison:ruleByLhs', @name)"> 179*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' ', @number)"/> 180*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 181*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 182*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="key('bison:ruleByRhs', @name)"> 183*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="key('bison:ruleByLhs', @name)"> 184*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 185*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 186*cda5da8dSAndroid Build Coastguard Worker <xsl:text>on@right:</xsl:text> 187*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="key('bison:ruleByRhs', @name)"> 188*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' ', @number)"/> 189*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 190*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 191*cda5da8dSAndroid Build Coastguard Worker </xsl:with-param> 192*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 193*cda5da8dSAndroid Build Coastguard Worker </xsl:variable> 194*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="translate($output, '@', ' ')" /> 195*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 196*cda5da8dSAndroid Build Coastguard Worker 197*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="automaton" mode="conflicts"> 198*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="conflict-report"> 199*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="state" mode="conflicts"/> 200*cda5da8dSAndroid Build Coastguard Worker </xsl:variable> 201*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="string-length($conflict-report) != 0"> 202*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$conflict-report"/> 203*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 204*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 205*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 206*cda5da8dSAndroid Build Coastguard Worker 207*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="state" mode="conflicts"> 208*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="conflict-counts"> 209*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="." mode="bison:count-conflicts" /> 210*cda5da8dSAndroid Build Coastguard Worker </xsl:variable> 211*cda5da8dSAndroid Build Coastguard Worker <xsl:variable 212*cda5da8dSAndroid Build Coastguard Worker name="sr-count" select="substring-before($conflict-counts, ',')" 213*cda5da8dSAndroid Build Coastguard Worker /> 214*cda5da8dSAndroid Build Coastguard Worker <xsl:variable 215*cda5da8dSAndroid Build Coastguard Worker name="rr-count" select="substring-after($conflict-counts, ',')" 216*cda5da8dSAndroid Build Coastguard Worker /> 217*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$sr-count > 0 or $rr-count > 0"> 218*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat('State ', @number, ' conflicts:')"/> 219*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$sr-count > 0"> 220*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' ', $sr-count, ' shift/reduce')"/> 221*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$rr-count > 0"> 222*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="(',')"/> 223*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 224*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 225*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$rr-count > 0"> 226*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat(' ', $rr-count, ' reduce/reduce')"/> 227*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 228*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="' '"/> 229*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 230*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 231*cda5da8dSAndroid Build Coastguard Worker 232*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="automaton"> 233*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="state"> 234*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="'3'"/> 235*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 236*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 237*cda5da8dSAndroid Build Coastguard Worker 238*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="automaton/state"> 239*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="pad"/> 240*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 241*cda5da8dSAndroid Build Coastguard Worker <xsl:text>State </xsl:text> 242*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@number"/> 243*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 244*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="itemset/item"> 245*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="$pad"/> 246*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 247*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="actions/transitions"> 248*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="type" select="'shift'"/> 249*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 250*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="actions/errors"/> 251*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="actions/reductions"/> 252*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="actions/transitions"> 253*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="type" select="'goto'"/> 254*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 255*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="solved-conflicts"/> 256*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 257*cda5da8dSAndroid Build Coastguard Worker 258*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="actions/transitions"> 259*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="type"/> 260*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="transition[@type = $type]"> 261*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 262*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="transition[@type = $type]"> 263*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad"> 264*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="max-width-symbol"> 265*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="node" select="transition[@type = $type]"/> 266*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 267*cda5da8dSAndroid Build Coastguard Worker </xsl:with-param> 268*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 269*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 270*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 271*cda5da8dSAndroid Build Coastguard Worker 272*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="actions/errors"> 273*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="error"> 274*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 275*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="error"> 276*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad"> 277*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="max-width-symbol"> 278*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="node" select="error"/> 279*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 280*cda5da8dSAndroid Build Coastguard Worker </xsl:with-param> 281*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 282*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 283*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 284*cda5da8dSAndroid Build Coastguard Worker 285*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="actions/reductions"> 286*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="reduction"> 287*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 288*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="reduction"> 289*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad"> 290*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="max-width-symbol"> 291*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="node" select="reduction"/> 292*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 293*cda5da8dSAndroid Build Coastguard Worker </xsl:with-param> 294*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 295*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 296*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 297*cda5da8dSAndroid Build Coastguard Worker 298*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="item"> 299*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="pad"/> 300*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="prev-rule-number" 301*cda5da8dSAndroid Build Coastguard Worker select="preceding-sibling::item[1]/@rule-number"/> 302*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates 303*cda5da8dSAndroid Build Coastguard Worker select="key('bison:ruleByNumber', current()/@rule-number)" 304*cda5da8dSAndroid Build Coastguard Worker > 305*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="itemset" select="'true'"/> 306*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="$pad"/> 307*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param 308*cda5da8dSAndroid Build Coastguard Worker name="prev-lhs" 309*cda5da8dSAndroid Build Coastguard Worker select="key('bison:ruleByNumber', $prev-rule-number)/lhs[text()]" 310*cda5da8dSAndroid Build Coastguard Worker /> 311*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="dot" select="@dot"/> 312*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="lookaheads"> 313*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="lookaheads"/> 314*cda5da8dSAndroid Build Coastguard Worker </xsl:with-param> 315*cda5da8dSAndroid Build Coastguard Worker </xsl:apply-templates> 316*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 317*cda5da8dSAndroid Build Coastguard Worker 318*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="rule"> 319*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="itemset"/> 320*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="pad"/> 321*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="prev-lhs"/> 322*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="dot"/> 323*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="lookaheads"/> 324*cda5da8dSAndroid Build Coastguard Worker 325*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$itemset != 'true' and not($prev-lhs = lhs[text()])"> 326*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 327*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 328*cda5da8dSAndroid Build Coastguard Worker 329*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 330*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="lpad"> 331*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="str" select="string(@number)"/> 332*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="number($pad)"/> 333*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 334*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 335*cda5da8dSAndroid Build Coastguard Worker 336*cda5da8dSAndroid Build Coastguard Worker <!-- LHS --> 337*cda5da8dSAndroid Build Coastguard Worker <xsl:choose> 338*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="$itemset != 'true' and $prev-lhs = lhs[text()]"> 339*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="lpad"> 340*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="str" select="'|'"/> 341*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 1"/> 342*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 343*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 344*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="$itemset = 'true' and $prev-lhs = lhs[text()]"> 345*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="lpad"> 346*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="str" select="'|'"/> 347*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="number(string-length(lhs[text()])) + 1"/> 348*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 349*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 350*cda5da8dSAndroid Build Coastguard Worker <xsl:otherwise> 351*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="lhs"/> 352*cda5da8dSAndroid Build Coastguard Worker <xsl:text>:</xsl:text> 353*cda5da8dSAndroid Build Coastguard Worker </xsl:otherwise> 354*cda5da8dSAndroid Build Coastguard Worker </xsl:choose> 355*cda5da8dSAndroid Build Coastguard Worker 356*cda5da8dSAndroid Build Coastguard Worker <!-- RHS --> 357*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="rhs/*"> 358*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="position() = $dot + 1"> 359*cda5da8dSAndroid Build Coastguard Worker <xsl:text> •</xsl:text> 360*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 361*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="."/> 362*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="position() = last() and position() = $dot"> 363*cda5da8dSAndroid Build Coastguard Worker <xsl:text> •</xsl:text> 364*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 365*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 366*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="$lookaheads"> 367*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$lookaheads"/> 368*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 369*cda5da8dSAndroid Build Coastguard Worker 370*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 371*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 372*cda5da8dSAndroid Build Coastguard Worker 373*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="symbol"> 374*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 375*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="."/> 376*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 377*cda5da8dSAndroid Build Coastguard Worker 378*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="empty"> 379*cda5da8dSAndroid Build Coastguard Worker <xsl:text> %empty</xsl:text> 380*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 381*cda5da8dSAndroid Build Coastguard Worker 382*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="lookaheads"> 383*cda5da8dSAndroid Build Coastguard Worker <xsl:text> [</xsl:text> 384*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="symbol"/> 385*cda5da8dSAndroid Build Coastguard Worker <xsl:text>]</xsl:text> 386*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 387*cda5da8dSAndroid Build Coastguard Worker 388*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="lookaheads/symbol"> 389*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="."/> 390*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="position() != last()"> 391*cda5da8dSAndroid Build Coastguard Worker <xsl:text>, </xsl:text> 392*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 393*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 394*cda5da8dSAndroid Build Coastguard Worker 395*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="transition"> 396*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="pad"/> 397*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 398*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="rpad"> 399*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="str" select="string(@symbol)"/> 400*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="number($pad) + 2"/> 401*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 402*cda5da8dSAndroid Build Coastguard Worker <xsl:choose> 403*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="@type = 'shift'"> 404*cda5da8dSAndroid Build Coastguard Worker <xsl:text>shift, and go to state </xsl:text> 405*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@state"/> 406*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 407*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="@type = 'goto'"> 408*cda5da8dSAndroid Build Coastguard Worker <xsl:text>go to state </xsl:text> 409*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@state"/> 410*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 411*cda5da8dSAndroid Build Coastguard Worker </xsl:choose> 412*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 413*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 414*cda5da8dSAndroid Build Coastguard Worker 415*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="error"> 416*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="pad"/> 417*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 418*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="rpad"> 419*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="str" select="string(@symbol)"/> 420*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="number($pad) + 2"/> 421*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 422*cda5da8dSAndroid Build Coastguard Worker <xsl:text>error</xsl:text> 423*cda5da8dSAndroid Build Coastguard Worker <xsl:text> (</xsl:text> 424*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="text()"/> 425*cda5da8dSAndroid Build Coastguard Worker <xsl:text>)</xsl:text> 426*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 427*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 428*cda5da8dSAndroid Build Coastguard Worker 429*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="reduction"> 430*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="pad"/> 431*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 432*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="rpad"> 433*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="str" select="string(@symbol)"/> 434*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="pad" select="number($pad) + 2"/> 435*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 436*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="@enabled = 'false'"> 437*cda5da8dSAndroid Build Coastguard Worker <xsl:text>[</xsl:text> 438*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 439*cda5da8dSAndroid Build Coastguard Worker <xsl:choose> 440*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="@rule = 'accept'"> 441*cda5da8dSAndroid Build Coastguard Worker <xsl:text>accept</xsl:text> 442*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 443*cda5da8dSAndroid Build Coastguard Worker <xsl:otherwise> 444*cda5da8dSAndroid Build Coastguard Worker <xsl:text>reduce using rule </xsl:text> 445*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@rule"/> 446*cda5da8dSAndroid Build Coastguard Worker <xsl:text> (</xsl:text> 447*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of 448*cda5da8dSAndroid Build Coastguard Worker select="key('bison:ruleByNumber', current()/@rule)/lhs[text()]"/> 449*cda5da8dSAndroid Build Coastguard Worker <xsl:text>)</xsl:text> 450*cda5da8dSAndroid Build Coastguard Worker </xsl:otherwise> 451*cda5da8dSAndroid Build Coastguard Worker </xsl:choose> 452*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="@enabled = 'false'"> 453*cda5da8dSAndroid Build Coastguard Worker <xsl:text>]</xsl:text> 454*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 455*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 456*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 457*cda5da8dSAndroid Build Coastguard Worker 458*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="solved-conflicts"> 459*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="resolution"> 460*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 461*cda5da8dSAndroid Build Coastguard Worker <xsl:apply-templates select="resolution"/> 462*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 463*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 464*cda5da8dSAndroid Build Coastguard Worker 465*cda5da8dSAndroid Build Coastguard Worker<xsl:template match="resolution"> 466*cda5da8dSAndroid Build Coastguard Worker <xsl:text> Conflict between rule </xsl:text> 467*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@rule"/> 468*cda5da8dSAndroid Build Coastguard Worker <xsl:text> and token </xsl:text> 469*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@symbol"/> 470*cda5da8dSAndroid Build Coastguard Worker <xsl:text> resolved as </xsl:text> 471*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="@type = 'error'"> 472*cda5da8dSAndroid Build Coastguard Worker <xsl:text>an </xsl:text> 473*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 474*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="@type"/> 475*cda5da8dSAndroid Build Coastguard Worker <xsl:text> (</xsl:text> 476*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="."/> 477*cda5da8dSAndroid Build Coastguard Worker <xsl:text>). </xsl:text> 478*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 479*cda5da8dSAndroid Build Coastguard Worker 480*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="max-width-symbol"> 481*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="node"/> 482*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="longest"> 483*cda5da8dSAndroid Build Coastguard Worker <xsl:for-each select="$node"> 484*cda5da8dSAndroid Build Coastguard Worker <xsl:sort data-type="number" select="string-length(@symbol)" 485*cda5da8dSAndroid Build Coastguard Worker order="descending"/> 486*cda5da8dSAndroid Build Coastguard Worker <xsl:if test="position() = 1"> 487*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="string-length(@symbol)"/> 488*cda5da8dSAndroid Build Coastguard Worker </xsl:if> 489*cda5da8dSAndroid Build Coastguard Worker </xsl:for-each> 490*cda5da8dSAndroid Build Coastguard Worker </xsl:variable> 491*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$longest"/> 492*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 493*cda5da8dSAndroid Build Coastguard Worker 494*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="lpad"> 495*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="str" select="''"/> 496*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="pad" select="0"/> 497*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="diff" select="$pad - string-length($str)" /> 498*cda5da8dSAndroid Build Coastguard Worker <xsl:choose> 499*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="$diff < 0"> 500*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$str"/> 501*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 502*cda5da8dSAndroid Build Coastguard Worker <xsl:otherwise> 503*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="space"> 504*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="repeat" select="$diff"/> 505*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 506*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$str"/> 507*cda5da8dSAndroid Build Coastguard Worker </xsl:otherwise> 508*cda5da8dSAndroid Build Coastguard Worker </xsl:choose> 509*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 510*cda5da8dSAndroid Build Coastguard Worker 511*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="rpad"> 512*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="str" select="''"/> 513*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="pad" select="0"/> 514*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="diff" select="$pad - string-length($str)"/> 515*cda5da8dSAndroid Build Coastguard Worker <xsl:choose> 516*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="$diff < 0"> 517*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$str"/> 518*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 519*cda5da8dSAndroid Build Coastguard Worker <xsl:otherwise> 520*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="$str"/> 521*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="space"> 522*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="repeat" select="$diff"/> 523*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 524*cda5da8dSAndroid Build Coastguard Worker </xsl:otherwise> 525*cda5da8dSAndroid Build Coastguard Worker </xsl:choose> 526*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 527*cda5da8dSAndroid Build Coastguard Worker 528*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="line-wrap"> 529*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="line-length"/> <!-- required --> 530*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="first-line-length" select="$line-length"/> 531*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="text"/> <!-- required --> 532*cda5da8dSAndroid Build Coastguard Worker <xsl:choose> 533*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="normalize-space($text) = ''" /> 534*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="string-length($text) <= $first-line-length"> 535*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="concat($text, ' ')" /> 536*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 537*cda5da8dSAndroid Build Coastguard Worker <xsl:otherwise> 538*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="break-pos"> 539*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="ws-search"> 540*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="text" select="$text" /> 541*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="start" select="$first-line-length+1" /> 542*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 543*cda5da8dSAndroid Build Coastguard Worker </xsl:variable> 544*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="substring($text, 1, $break-pos - 1)" /> 545*cda5da8dSAndroid Build Coastguard Worker <xsl:text> </xsl:text> 546*cda5da8dSAndroid Build Coastguard Worker <xsl:call-template name="line-wrap"> 547*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param name="line-length" select="$line-length" /> 548*cda5da8dSAndroid Build Coastguard Worker <xsl:with-param 549*cda5da8dSAndroid Build Coastguard Worker name="text" select="concat(' ', substring($text, $break-pos+1))" 550*cda5da8dSAndroid Build Coastguard Worker /> 551*cda5da8dSAndroid Build Coastguard Worker </xsl:call-template> 552*cda5da8dSAndroid Build Coastguard Worker </xsl:otherwise> 553*cda5da8dSAndroid Build Coastguard Worker </xsl:choose> 554*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 555*cda5da8dSAndroid Build Coastguard Worker 556*cda5da8dSAndroid Build Coastguard Worker<xsl:template name="ws-search"> 557*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="text"/> <!-- required --> 558*cda5da8dSAndroid Build Coastguard Worker <xsl:param name="start"/> <!-- required --> 559*cda5da8dSAndroid Build Coastguard Worker <xsl:variable name="search-text" select="substring($text, $start)" /> 560*cda5da8dSAndroid Build Coastguard Worker <xsl:choose> 561*cda5da8dSAndroid Build Coastguard Worker <xsl:when test="not(contains($search-text, ' '))"> 562*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of select="string-length($text)+1" /> 563*cda5da8dSAndroid Build Coastguard Worker </xsl:when> 564*cda5da8dSAndroid Build Coastguard Worker <xsl:otherwise> 565*cda5da8dSAndroid Build Coastguard Worker <xsl:value-of 566*cda5da8dSAndroid Build Coastguard Worker select="$start + string-length(substring-before($search-text, ' '))" 567*cda5da8dSAndroid Build Coastguard Worker /> 568*cda5da8dSAndroid Build Coastguard Worker </xsl:otherwise> 569*cda5da8dSAndroid Build Coastguard Worker </xsl:choose> 570*cda5da8dSAndroid Build Coastguard Worker</xsl:template> 571*cda5da8dSAndroid Build Coastguard Worker 572*cda5da8dSAndroid Build Coastguard Worker</xsl:stylesheet> 573