X-Git-Url: https://git.ladys.computer/LesML/blobdiff_plain/94f395fe0062092ce69390b661f8543a3fbf5b7b..10e5f7f3eed0f44a9bdbf1f7276ab546fbe27dc1:/parser.xslt diff --git a/parser.xslt b/parser.xslt index 6e0d82a..8f80c39 100644 --- a/parser.xslt +++ b/parser.xslt @@ -12,19 +12,23 @@ This Source Code Form is subject to the terms of the Mozilla Public License, v 2 If a copy of the M·P·L was not distributed with this file, You can obtain one at <https://mozilla.org/MPL/2.0/>. --> <!DOCTYPE transform [ + <!ENTITY LesML "urn:fdc:ladys.computer:20240512:LesML"> <!ENTITY section-break "*-.=_~·․‥…⁂⋯─━┄┅┈┉╌╍═╴╶╸╺☙❧ ・*-.=_~"> - <!ENTITY sigiled-text "(string-length($text)=1 or substring($text, 2, 1)=' ')"> - <!ENTITY unsigiled-text "substring($text, 3, string-length($text)-2)"> + <!ENTITY sigiled-text "(string-length($text)=1 or substring($text, 2, 1)=' ' or substring($text, 2, 1)='¶')"> + <!ENTITY unsigiled-text "concat(translate(substring($text, 2, 1), ' ', ''), substring($text, 3, string-length($text)-2))"> + <!ENTITY xhtml "http://www.w3.org/1999/xhtml"> ]> <transform xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:LesML="urn:fdc:ladys.computer:20240512:LesML" xmlns:exsl="http://exslt.org/common" + xmlns:exsldyn="http://exslt.org/dynamic" + xmlns:exslset="http://exslt.org/sets" xmlns:exslstr="http://exslt.org/strings" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4" exclude-result-prefixes="LesML" - extension-element-prefixes="exsl exslstr" + extension-element-prefixes="exsl exsldyn exslset exslstr" version="1.0" > <书社:id>urn:fdc:ladys.computer:20240512:LesML:parser.xslt</书社:id> @@ -62,7 +66,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <with-param name="source" select="string()"/> </call-template> <if test="position()!=count($broken)"> - <element name="html:br"/> + <element name="br" namespace="&xhtml;"/> </if> </for-each> </template> @@ -119,29 +123,69 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </template> <template name="LesML:id-and-contents"> <param name="source"/> - <choose> - <when test="starts-with($source, '¶')"> + <variable name="id-and-lang"> + <if test="starts-with($source, '¶')"> <choose> <when test="contains($source, ' ')"> - <variable name="id" select="substring-before(substring-after($source, '¶'), ' ')"/> - <if test="$id!=''"> - <attribute name="id"> - <value-of select="$id"/> - </attribute> - </if> - <value-of select="substring-after($source, ' ')"/> + <value-of select="substring-before(substring-after($source, '¶'), ' ')"/> </when> <otherwise> - <attribute name="id"> - <value-of select="substring-after($source, '¶')"/> - </attribute> + <value-of select="substring-after($source, '¶')"/> </otherwise> </choose> - </when> - <otherwise> - <value-of select="$source"/> - </otherwise> - </choose> + </if> + </variable> + <variable name="restoftext"> + <choose> + <when test="starts-with($source, '¶') and contains($source, ' ')"> + <value-of select="substring-after($source, ' ')"/> + </when> + <when test="starts-with($source, '¶')"/> + <otherwise> + <value-of select="$source"/> + </otherwise> + </choose> + </variable> + <variable name="maybe-langtag"> + <if test="substring($id-and-lang, string-length($id-and-lang), 1)='$' and contains($id-and-lang, '@')"> + <variable name="split-tag-fragment"> + <call-template name="LesML:split"> + <with-param name="source" select="substring($id-and-lang, 2, string-length($id-and-lang)-2)"/> + <with-param name="separator" select="'@'"/> + </call-template> + </variable> + <value-of select="exsl:node-set($split-tag-fragment)/*[last()]"/> + </if> + </variable> + <variable name="langtag"> + <if test="translate($maybe-langtag, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-', '')=''"> + <value-of select="$maybe-langtag"/> + </if> + </variable> + <variable name="id"> + <choose> + <when test="string($langtag)!=''"> + <value-of select="substring($id-and-lang, 1, string-length($id-and-lang)-(string-length($langtag)+2))"/> + </when> + <otherwise> + <value-of select="$id-and-lang"/> + </otherwise> + </choose> + </variable> + <if test="string($id)!=''"> + <attribute name="id"> + <value-of select="$id"/> + </attribute> + </if> + <if test="string($langtag)!=''"> + <attribute name="lang"> + <value-of select="$langtag"/> + </attribute> + <attribute name="xml:lang"> + <value-of select="$langtag"/> + </attribute> + </if> + <value-of select="$restoftext"/> </template> <template name="LesML:parse"> <param name="lines" select="/.."/> @@ -211,15 +255,15 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <variable name="params" select="exsl:node-set($params-fragment)/*"/> <variable name="noshebang" select="$lines[position()>1 or not(starts-with(., '#!lesml') or starts-with(., '##'))]"/> <variable name="docsep" select="$noshebang[starts-with(., '#!lesml') or starts-with(., '##')][1]"/> - <variable name="doclines" select="$noshebang[not($docsep) or following-sibling::*[generate-id()=generate-id($docsep)]]"/> + <variable name="doclines" select="exslset:leading($noshebang, $docsep)"/> <if test="starts-with($first-line, '##') and $first-line!='##'"> <comment> <value-of select="substring-after($first-line, '##')"/> </comment> </if> - <if test="$shebang!='' or $doclines[normalize-space()!='']"> + <if test="$doclines[normalize-space()!='']"> <variable name="record-separators" select="$doclines[starts-with(., '%%')]"/> - <element name="html:article"> + <element name="article" namespace="&xhtml;"> <for-each select="$params/html:div/html:dt[string()=' LANG ']"> <attribute name="lang"> <value-of select="following-sibling::html:dd"/> @@ -234,26 +278,26 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </attribute> </for-each> <if test="$record-separators[preceding-sibling::*[normalize-space()!='']]"> - <element name="html:footer"> + <element name="footer" namespace="&xhtml;"> <attribute name="class"> <text>head</text> </attribute> <for-each select="$record-separators"> <variable name="position" select="position()"/> <variable name="prev-separator" select="$record-separators[($position)-1]"/> - <variable name="fields" select="$noshebang[following-sibling::*[generate-id()=generate-id(current())] and (not($prev-separator) or preceding-sibling::*[generate-id()=generate-id($prev-separator)])]"/> + <variable name="fields" select="exslset:leading(exslset:trailing($doclines, $prev-separator), .)"/> <if test="$fields"> - <element name="html:dl"> + <element name="dl" namespace="&xhtml;"> <for-each select="$fields"> <choose> - <when test="starts-with(., ' ') and $fields[generate-id()=generate-id(current()/preceding-sibling::*[1])]"/> + <when test="starts-with(., ' ') and exslset:leading($fields, .)"/> <otherwise> - <variable name="next" select="following-sibling::*[not(starts-with(., ' '))]"/> - <element name="html:div"> - <element name="html:dt"> + <variable name="next" select="exslset:intersection(following-sibling::*[not(starts-with(., ' '))][1], $fields)"/> + <element name="div" namespace="&xhtml;"> + <element name="dt" namespace="&xhtml;"> <value-of select="normalize-space(substring-before(., ':'))"/> </element> - <element name="html:dd"> + <element name="dd" namespace="&xhtml;"> <variable name="firstline"> <choose> <when test="contains(., ':')"> @@ -272,7 +316,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <value-of select="$firstline"/> </otherwise> </choose> - <for-each select="following-sibling::*[starts-with(., ' ') and not(preceding-sibling::*[generate-id()=generate-id($next)])]"> + <for-each select="exslset:intersection(following-sibling::*[starts-with(., ' ')], exslset:leading($fields, $next))"> <variable name="nextline" select="normalize-space(.)"/> <choose> <when test="substring($nextline, string-length($nextline))='\' and following-sibling::*[position()=1 and starts-with(., ' ')]"> @@ -298,19 +342,19 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </for-each> </element> </if> - <element name="html:div"> + <element name="div" namespace="&xhtml;"> <attribute name="class"> <text>body</text> </attribute> <call-template name="LesML:paragraphize"> - <with-param name="lines" select="$doclines[not($record-separators) or preceding-sibling::*[generate-id()=generate-id($record-separators[last()])]]"/> + <with-param name="lines" select="exslset:trailing($doclines, $record-separators[last()])"/> </call-template> </element> </element> </if> <if test="$docsep"> <call-template name="LesML:parse"> - <with-param name="lines" select="$docsep|$lines[preceding-sibling::*[generate-id()=generate-id($docsep)]]"/> + <with-param name="lines" select="$docsep|exslset:trailing($lines, $docsep)"/> <with-param name="parent-params" select="$params"/> </call-template> </if> @@ -322,7 +366,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <for-each select="$last-lines"> <variable name="position" select="position()"/> <variable name="prev-last" select="$last-lines[($position)-1]"/> - <variable name="linespans" select="$lines[following-sibling::*[generate-id()=generate-id(current())] and (not($prev-last) or preceding-sibling::*[generate-id()=generate-id($prev-last)]) and normalize-space()!='']|."/> + <variable name="linespans" select="(exslset:intersection(exslset:trailing($lines, $prev-last), exslset:leading($lines, .))|.)[normalize-space()!='']"/> <variable name="quoted" select="not($linespans[not(starts-with(., ' ') or starts-with(., '	'))])"/> <variable name="preformatted" select="not($linespans[not(starts-with(normalize-space(), '|'))])"/> <variable name="text"> @@ -351,49 +395,49 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <variable name="par"> <choose> <when test="$preformatted"> - <element name="html:pre"> + <element name="pre" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="$text"/> </call-template> </element> </when> <when test="starts-with($text, '⁌') and &sigiled-text;"> - <element name="html:h1"> + <element name="h1" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> </element> </when> <when test="starts-with($text, '§') and &sigiled-text;"> - <element name="html:h2"> + <element name="h2" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> </element> </when> <when test="starts-with($text, '❦') and &sigiled-text;"> - <element name="html:h3"> + <element name="h3" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> </element> </when> <when test="starts-with($text, '✠') and &sigiled-text;"> - <element name="html:h4"> + <element name="h4" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> </element> </when> <when test="starts-with($text, '•') and &sigiled-text;"> - <element name="html:li"> + <element name="li" namespace="&xhtml;"> <attribute name="class"> <text>unordered</text> </attribute> <attribute name="data-level"> <text>1</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -401,14 +445,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '🔢') and &sigiled-text;"> - <element name="html:li"> + <element name="li" namespace="&xhtml;"> <attribute name="class"> <text>ordered</text> </attribute> <attribute name="data-level"> <text>1</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -416,14 +460,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '◦') and &sigiled-text;"> - <element name="html:li"> + <element name="li" namespace="&xhtml;"> <attribute name="class"> <text>unordered</text> </attribute> <attribute name="data-level"> <text>2</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -431,14 +475,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '🔠') and &sigiled-text;"> - <element name="html:li"> + <element name="li" namespace="&xhtml;"> <attribute name="class"> <text>ordered</text> </attribute> <attribute name="data-level"> <text>2</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -446,14 +490,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '▪') and &sigiled-text;"> - <element name="html:li"> + <element name="li" namespace="&xhtml;"> <attribute name="class"> <text>unordered</text> </attribute> <attribute name="data-level"> <text>3</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -461,14 +505,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '🔡') and &sigiled-text;"> - <element name="html:li"> + <element name="li" namespace="&xhtml;"> <attribute name="class"> <text>ordered</text> </attribute> <attribute name="data-level"> <text>3</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -476,14 +520,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '⁃') and &sigiled-text;"> - <element name="html:li"> + <element name="li" namespace="&xhtml;"> <attribute name="class"> <text>unordered</text> </attribute> <attribute name="data-level"> <text>4</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -491,14 +535,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '🔣') and &sigiled-text;"> - <element name="html:li"> + <element name="li" namespace="&xhtml;"> <attribute name="class"> <text>ordered</text> </attribute> <attribute name="data-level"> <text>4</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -506,14 +550,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '🛈') and &sigiled-text;"> - <element name="html:div"> + <element name="div" namespace="&xhtml;"> <attribute name="role"> <text>note</text> </attribute> <attribute name="class"> <text>info</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -521,14 +565,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '⯑') and &sigiled-text;"> - <element name="html:div"> + <element name="div" namespace="&xhtml;"> <attribute name="role"> <text>note</text> </attribute> <attribute name="class"> <text>query</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -536,14 +580,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '⚠︎') and &sigiled-text;"> - <element name="html:div"> + <element name="div" namespace="&xhtml;"> <attribute name="role"> <text>note</text> </attribute> <attribute name="class"> <text>warn</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -551,14 +595,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '※') and &sigiled-text;"> - <element name="html:div"> + <element name="div" namespace="&xhtml;"> <attribute name="role"> <text>note</text> </attribute> <attribute name="class"> <text>note</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -566,14 +610,14 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '☡') and &sigiled-text;"> - <element name="html:div"> + <element name="div" namespace="&xhtml;"> <attribute name="role"> <text>note</text> </attribute> <attribute name="class"> <text>caution</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -581,11 +625,11 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </element> </when> <when test="starts-with($text, '⋯') and &sigiled-text;"> - <element name="html:div"> + <element name="div" namespace="&xhtml;"> <attribute name="class"> <text>continuation</text> </attribute> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="&unsigiled-text;"/> </call-template> @@ -598,7 +642,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </comment> </when> <otherwise> - <element name="html:p"> + <element name="p" namespace="&xhtml;"> <call-template name="LesML:id-and-contents"> <with-param name="source" select="$text"/> </call-template> @@ -608,10 +652,10 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </variable> <choose> <when test="translate(string($text), '§ion-break; ', '')=''"> - <element name="html:hr"/> + <element name="hr" namespace="&xhtml;"/> </when> <when test="$quoted"> - <element name="html:blockquote"> + <element name="blockquote" namespace="&xhtml;"> <copy-of select="$par"/> </element> </when> @@ -623,7 +667,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </for-each> </variable> <variable name="inlined"> - <apply-templates select="exsl:node-set($blocked)/node()" mode="LesML:linkify"/> + <apply-templates select="exsl:node-set($blocked)/node()" mode="LesML:comment"/> </variable> <apply-templates select="exsl:node-set($inlined)/node()" mode="LesML:finalize-tree"/> </template> @@ -637,16 +681,40 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </with-param> </call-template> </variable> - <call-template name="LesML:parse"> - <with-param name="lines" select="exsl:node-set($lines-fragment)/*"/> - </call-template> + <element name="div" namespace="&xhtml;"> + <call-template name="LesML:parse"> + <with-param name="lines" select="exsl:node-set($lines-fragment)/*"/> + </call-template> + </element> + </template> + <template match="node()" mode="LesML:finalize-attributes"> + <variable name="notattr" select="following-sibling::node()[not(self::text() and translate(., ' 	', '')='' or self::LesML:attribute)]"/> + <for-each select="(.|exslset:leading(following-sibling::node(), $notattr)[self::LesML:attribute])/@*"> + <copy-of select="."/> + <if test="local-name()='lang' and namespace-uri()=''"> + <attribute name="xml:lang"> + <value-of select="."/> + </attribute> + </if> + </for-each> + </template> + <template match="LesML:attribute[preceding-sibling::node()[position()=1 and (self::text() or self::*)]]|text()[preceding-sibling::node()[position()=1 and self::*] and following-sibling::node()[position()=1 and self::LesML:attribute] and translate(., ' 	', '')='']" mode="LesML:finalize-tree" priority="2"/> + <template match="LesML:attribute|text()[following-sibling::node()[position()=1 and self::LesML:attribute]]" mode="LesML:finalize-tree" priority="1"> + <element name="span" namespace="&xhtml;"> + <apply-templates select="." mode="LesML:finalize-attributes"/> + <if test="self::text()"> + <call-template name="LesML:break-and-unescape"> + <with-param name="source" select="string(.)"/> + </call-template> + </if> + </element> </template> <template match="html:blockquote" mode="LesML:finalize-tree"> <if test="not(preceding-sibling::node()) or preceding-sibling::node()[position()=1 and not(self::html:blockquote)]"> <variable name="notquote" select="following-sibling::node()[not(self::html:blockquote)][1]"/> <variable name="contents"> <copy-of select="node()"/> - <for-each select="following-sibling::node()[not($notquote) or following-sibling::node()[generate-id()=generate-id($notquote)]]"> + <for-each select="exslset:leading(following-sibling::node(), $notquote)"> <copy-of select="node()"/> </for-each> </variable> @@ -659,11 +727,11 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <value-of select="substring-after($laststarttext, '— ')"/> <copy-of select="$laststarttext/following-sibling::node()"/> </variable> - <element name="html:figure"> + <element name="figure" namespace="&xhtml;"> <copy> <apply-templates select="@*|$content-nodes[position()!=last()]" mode="LesML:finalize-tree"/> </copy> - <element name="html:figcaption"> + <element name="figcaption" namespace="&xhtml;"> <for-each select="$content-nodes[last()]"> <copy> <apply-templates select="@*|exsl:node-set($caption)/node()" mode="LesML:finalize-tree"/> @@ -685,7 +753,7 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <variable name="notcontinuation" select="following-sibling::node()[not(self::html:div and @class='continuation')][1]"/> <copy> <apply-templates select="@*|node()" mode="LesML:finalize-tree"/> - <for-each select="following-sibling::node()[not($notcontinuation) or following-sibling::node()[generate-id()=generate-id($notcontinuation)]]"> + <for-each select="exslset:leading(following-sibling::node(), $notcontinuation)"> <apply-templates select="node()" mode="LesML:finalize-tree"/> </for-each> </copy> @@ -711,12 +779,12 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </choose> </variable> <variable name="notinlist" select="following-sibling::node()[not(self::html:div and @class='continuation' or self::html:li and (@data-level>$current-level or @data-level=$current-level and @class=$current-class))][1]"/> - <element name="html:{$wrapper}" namespace="http://www.w3.org/1999/xhtml"> - <for-each select=".|following-sibling::html:li[@data-level=$current-level and (not($notinlist) or following-sibling::node()[generate-id()=generate-id($notinlist)])]"> + <element name="{$wrapper}" namespace="&xhtml;"> + <for-each select=".|exslset:leading(following-sibling::node(), $notinlist)[self::html:li and @data-level=$current-level]"> <variable name="notcontinuation" select="following-sibling::node()[not(self::html:div and @class='continuation')][1]"/> <copy> <apply-templates select="@*|node()" mode="LesML:finalize-tree"/> - <for-each select="following-sibling::node()[not($notcontinuation) or following-sibling::node()[generate-id()=generate-id($notcontinuation)]]"> + <for-each select="exslset:leading(following-sibling::node(), $notcontinuation)"> <apply-templates select="node()" mode="LesML:finalize-tree"/> </for-each> <if test="$notcontinuation/self::html:li[@data-level>$current-level]"> @@ -733,8 +801,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </apply-templates> </if> </template> - <template match="processing-instruction()[local-name()='LesML-Link-Escape']" mode="LesML:finalize-tree"> - <text>🔗</text> + <template match="processing-instruction()[local-name()='LesML-Token-Escape']" mode="LesML:finalize-tree"> + <value-of select="."/> </template> <template match="text()" mode="LesML:finalize-tree"> <call-template name="LesML:break-and-unescape"> @@ -743,16 +811,110 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </template> <template match="@*|node()" mode="LesML:finalize-tree" priority="-1"> <copy> - <apply-templates select="@*|node()" mode="LesML:finalize-tree"/> + <apply-templates select="." mode="LesML:finalize-attributes"/> + <apply-templates select="node()" mode="LesML:finalize-tree"/> </copy> </template> + <template match="node()" mode="LesML:comment"> + <variable name="result"> + <choose> + <when test="self::*"> + <variable name="start-node" select="text()[contains(., '⌦')][1]"/> + <variable name="after-start"> + <if test="$start-node"> + <value-of select="substring-after($start-node, '⌦')"/> + </if> + </variable> + <variable name="has-end-node" select="contains($after-start, '⌫') or $start-node/following-sibling::text()[contains(., '⌫')]"/> + <choose> + <when test="$start-node and $has-end-node"> + <variable name="following"> + <value-of select="$after-start"/> + <copy-of select="$start-node/following-sibling::node()"/> + </variable> + <variable name="end-node" select="exsl:node-set($following)/text()[contains(., '⌫')][last()]"/> + <variable name="comment"> + <for-each select="$end-node/preceding-sibling::node()"> + <value-of select="."/> + </for-each> + <value-of select="substring-before($end-node, '⌫')"/> + </variable> + <variable name="comment-split-fragment"> + <call-template name="LesML:split"> + <with-param name="source" select="string($comment)"/> + <with-param name="separator" select="'--'"/> + </call-template> + </variable> + <variable name="rest-fragment"> + <element name="span" namespace="&xhtml;"> + <value-of select="substring-after($end-node, '⌫')"/> + <copy-of select="$end-node/following-sibling::node()"/> + </element> + </variable> + <variable name="commented-rest-fragment"> + <apply-templates select="exsl:node-set($rest-fragment)/node()" mode="LesML:comment"/> + </variable> + <copy> + <copy-of select="@*"/> + <copy-of select="$start-node/preceding-sibling::node()"/> + <copy-of select="substring-before($start-node, '⌦')"/> + <comment> + <for-each select="exsl:node-set($comment-split-fragment)/*"> + <if test="string()='' or starts-with(., '‐')"> + <text>͏</text> + </if> + <value-of select="."/> + <if test="substring(., string-length(.), 1)='‐'"> + <text>͏</text> + </if> + <choose> + <when test="position()!=last()"> + <text>-͏-</text> + </when> + </choose> + </for-each> + </comment> + <copy-of select="exsl:node-set($commented-rest-fragment)/*/node()"/> + </copy> + </when> + <otherwise> + <copy> + <copy-of select="@*"/> + <apply-templates select="node()" mode="LesML:comment"/> + </copy> + </otherwise> + </choose> + </when> + <when test="self::text()[contains(., '⌧')]"> + <variable name="split-fragment"> + <call-template name="LesML:split"> + <with-param name="source" select="string()"/> + <with-param name="separator" select="'⌧'"/> + </call-template> + </variable> + <for-each select="exsl:node-set($split-fragment)/node()"> + <value-of select="."/> + <if test="position()!=last()"> + <comment> + <text>͏</text> + </comment> + </if> + </for-each> + </when> + <otherwise> + <copy-of select="."/> + </otherwise> + </choose> + </variable> + <apply-templates select="exsl:node-set($result)/node()" mode="LesML:attrify"/> + </template> <template match="node()" mode="LesML:inline"> <param name="element-name"/> <param name="element-namespace" select="'http://www.w3.org/1999/xhtml'"/> <param name="start-sigil"/> <param name="end-sigil"/> + <param name="class"/> <param name="role"/> - <param name="langtag-supported" select="false()"/> <choose> <when test="self::*"> <variable name="end-node" select="text()[contains(., $end-sigil)][1]"/> @@ -764,17 +926,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <value-of select="substring-before($end-node, $end-sigil)"/> </variable> <variable name="start-node" select="exsl:node-set($preceding)/text()[contains(., $start-sigil)][last()]"/> - <variable name="restoftext" select="substring-after($end-node, $end-sigil)"/> - <variable name="maybe-langtag"> - <if test="$langtag-supported and starts-with($restoftext, '@') and contains($restoftext, '$')"> - <value-of select="substring-before(substring-after($restoftext, '@'), '$')"/> - </if> - </variable> - <variable name="langtag"> - <if test="translate($maybe-langtag, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-', '')=''"> - <value-of select="$maybe-langtag"/> - </if> - </variable> <variable name="start-tokens-fragment"> <call-template name="LesML:split"> <with-param name="source" select="string($start-node)"/> @@ -798,27 +949,15 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <value-of select="$role"/> </attribute> </if> - <if test="string($langtag)!=''"> - <if test="$element-namespace='http://www.w3.org/1999/xhtml'"> - <attribute name="lang"> - <value-of select="$langtag"/> - </attribute> - </if> - <attribute name="xml:lang"> - <value-of select="$langtag"/> + <if test="string($class)!=''"> + <attribute name="class"> + <value-of select="$class"/> </attribute> </if> <value-of select="$start-tokens[last()]"/> <copy-of select="$start-node/following-sibling::node()"/> </element> - <choose> - <when test="string($langtag)!=''"> - <value-of select="substring-after($restoftext, '$')"/> - </when> - <otherwise> - <value-of select="$restoftext"/> - </otherwise> - </choose> + <value-of select="substring-after($end-node, $end-sigil)"/> <copy-of select="$end-node/following-sibling::node()"/> </copy> </variable> @@ -828,7 +967,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <with-param name="start-sigil" select="$start-sigil"/> <with-param name="end-sigil" select="$end-sigil"/> <with-param name="role" select="$role"/> - <with-param name="langtag-supported" select="$langtag-supported"/> </apply-templates> </when> <otherwise> @@ -840,7 +978,6 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <with-param name="start-sigil" select="$start-sigil"/> <with-param name="end-sigil" select="$end-sigil"/> <with-param name="role" select="$role"/> - <with-param name="langtag-supported" select="$langtag-supported"/> </apply-templates> </copy> </otherwise> @@ -851,110 +988,261 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </otherwise> </choose> </template> - <template match="node()" mode="LesML:linkify"> + <template match="*" mode="LesML:partition"> + <param name="start-sigil"/> + <param name="end-sigil"/> + <param name="separator"/> + <param name="ncname-keys" select="false()"/> + <variable name="end-node" select="text()[contains(., $end-sigil)][1]"/> + <variable name="has-start-node" select="$end-node/preceding-sibling::text()[contains(., $start-sigil) and not(following-sibling::* or following-sibling::comment())] or string-length(substring-after($end-node, $start-sigil))>string-length(substring-after($end-node, $end-sigil))"/> + <choose> + <when test="$end-node and $has-start-node"> + <variable name="preceding"> + <copy-of select="$end-node/preceding-sibling::node()"/> + <value-of select="substring-before($end-node, $end-sigil)"/> + </variable> + <variable name="start-node" select="exsl:node-set($preceding)/text()[contains(., $start-sigil) and not(following-sibling::*)][last()]"/> + <variable name="start-tokens-fragment"> + <call-template name="LesML:split"> + <with-param name="source" select="string($start-node)"/> + <with-param name="separator" select="$start-sigil"/> + </call-template> + </variable> + <variable name="start-tokens" select="exsl:node-set($start-tokens-fragment)/*"/> + <variable name="innards"> + <value-of select="$start-tokens[last()]"/> + <for-each select="$start-node/following-sibling::node()"> + <value-of select="."/> + </for-each> + </variable> + <choose> + <when test="contains($innards, $separator)"> + <variable name="keyval-fragment"> + <call-template name="LesML:split"> + <with-param name="source" select="$innards"/> + <with-param name="separator" select="$separator"/> + </call-template> + </variable> + <variable name="keyval" select="exsl:node-set($keyval-fragment)/*"/> + <variable name="key"> + <choose> + <when test="$ncname-keys"> + <value-of select="$keyval[1]"/> + </when> + <otherwise> + <for-each select="$keyval[position()!=last()]"> + <value-of select="."/> + <if test="position()!=last()"> + <value-of select="$separator"/> + </if> + </for-each> + </otherwise> + </choose> + </variable> + <variable name="value"> + <choose> + <when test="$ncname-keys"> + <for-each select="$keyval[position()!=1]"> + <value-of select="."/> + <if test="position()!=last()"> + <value-of select="$separator"/> + </if> + </for-each> + </when> + <otherwise> + <value-of select="$keyval[last()]"/> + </otherwise> + </choose> + </variable> + <choose> + <when test="not($ncname-keys) or /self::node()[translate(normalize-space($key), ' /([,*', '')=string($key) and exsldyn:evaluate(concat('not(self::html:', $key, ')'))]"> + <element name="span" namespace="&xhtml;"> + <copy-of select="$start-node/preceding-sibling::node()"/> + <for-each select="$start-tokens[position()!=last()]"> + <value-of select="."/> + <if test="position()!=last()"> + <value-of select="$start-sigil"/> + </if> + </for-each> + </element> + <element name="span" namespace="&xhtml;"> + <value-of select="$key"/> + </element> + <element name="span" namespace="&xhtml;"> + <value-of select="$value"/> + </element> + <element name="span" namespace="&xhtml;"> + <value-of select="substring-after($end-node, $end-sigil)"/> + <copy-of select="$end-node/following-sibling::node()"/> + </element> + </when> + <otherwise> + <element name="span" namespace="&xhtml;"> + <copy-of select="$start-node/preceding-sibling::node()"/> + <for-each select="$start-tokens[position()!=last()]"> + <value-of select="."/> + <if test="position()!=last()"> + <value-of select="$start-sigil"/> + </if> + </for-each> + <processing-instruction name="LesML-Token-Escape"> + <value-of select="$start-sigil"/> + </processing-instruction> + <value-of select="$start-tokens[last()]"/> + <value-of select="$start-node/following-sibling::node()"/> + <value-of select="$end-sigil"/> + <value-of select="substring-after($end-node, $end-sigil)"/> + <copy-of select="$end-node/following-sibling::node()"/> + </element> + </otherwise> + </choose> + </when> + <otherwise> + <element name="span" namespace="&xhtml;"> + <copy-of select="$start-node/preceding-sibling::node()"/> + <for-each select="$start-tokens[position()!=last()]"> + <value-of select="."/> + <if test="position()!=last()"> + <value-of select="$start-sigil"/> + </if> + </for-each> + <processing-instruction name="LesML-Token-Escape"> + <value-of select="$start-sigil"/> + </processing-instruction> + <value-of select="$start-tokens[last()]"/> + <value-of select="$start-node/following-sibling::node()"/> + <value-of select="$end-sigil"/> + <value-of select="substring-after($end-node, $end-sigil)"/> + <copy-of select="$end-node/following-sibling::node()"/> + </element> + </otherwise> + </choose> + </when> + <when test="$end-node"> + <element name="span" namespace="&xhtml;"> + <copy-of select="$end-node/preceding-sibling::node()"/> + <value-of select="substring-before($end-node, $end-sigil)"/> + <processing-instruction name="LesML-Token-Escape"> + <value-of select="$end-sigil"/> + </processing-instruction> + <value-of select="substring-after($end-node, $end-sigil)"/> + <copy-of select="$end-node/following-sibling::node()"/> + </element> + </when> + <otherwise> + <processing-instruction name="LesML-All-Done"/> + </otherwise> + </choose> + </template> + <template match="node()" mode="LesML:attrify"> <variable name="result"> <choose> <when test="self::*"> - <variable name="end-node" select="text()[contains(., '>}')][1]"/> - <variable name="has-start-node" select="$end-node/preceding-sibling::text()[contains(., '{🔗') and not(following-sibling::*)] or string-length(substring-after($end-node, '{🔗'))>string-length(substring-after($end-node, '>}'))"/> + <variable name="partitioned-fragment"> + <apply-templates mode="LesML:partition" select="."> + <with-param name="start-sigil" select="'{@'"/> + <with-param name="end-sigil" select="'"}'"/> + <with-param name="separator" select="'="'"/> + <with-param name="ncname-keys" select="true()"/> + </apply-templates> + </variable> + <variable name="partitioned" select="exsl:node-set($partitioned-fragment)/node()"/> <choose> - <when test="$end-node and $has-start-node"> - <variable name="preceding"> - <copy-of select="$end-node/preceding-sibling::node()"/> - <value-of select="substring-before($end-node, '>}')"/> + <when test="count($partitioned)>1"> + <variable name="processed"> + <copy> + <copy-of select="@*"/> + <copy-of select="$partitioned[1]/node()"/> + <element name="LesML:attribute" namespace="&LesML;"> + <attribute name="{$partitioned[2]}"> + <value-of select="$partitioned[3]"/> + </attribute> + </element> + <copy-of select="$partitioned[4]/node()"/> + </copy> </variable> - <variable name="start-node" select="exsl:node-set($preceding)/text()[contains(., '{🔗') and not(following-sibling::*)][last()]"/> - <variable name="start-tokens-fragment"> - <call-template name="LesML:split"> - <with-param name="source" select="string($start-node)"/> - <with-param name="separator" select="'{🔗'"/> - </call-template> + <apply-templates select="exsl:node-set($processed)/node()" mode="LesML:attrify"/> + </when> + <when test="$partitioned[self::processing-instruction() and local-name()='LesML-All-Done']"> + <copy> + <copy-of select="@*"/> + <apply-templates select="node()" mode="LesML:attrify"/> + </copy> + </when> + <otherwise> + <variable name="processed"> + <copy> + <copy-of select="@*"/> + <copy-of select="$partitioned/node()"/> + </copy> </variable> - <variable name="start-tokens" select="exsl:node-set($start-tokens-fragment)/*"/> - <variable name="hyperlink"> - <value-of select="$start-tokens[last()]"/> - <for-each select="$start-node/following-sibling::node()"> - <choose> - <when test="self::text()"> - <value-of select="."/> - </when> - <when test="self::processing-instruction()[local-name()='LesML-Link-Escape']"> - <text>🔗</text> - </when> - </choose> - </for-each> + <apply-templates select="exsl:node-set($processed)/node()" mode="LesML:attrify"/> + </otherwise> + </choose> + </when> + <otherwise> + <copy-of select="."/> + </otherwise> + </choose> + </variable> + <apply-templates select="exsl:node-set($result)/node()" mode="LesML:linkify"/> + </template> + <template match="node()" mode="LesML:linkify"> + <variable name="result"> + <choose> + <when test="processing-instruction()[local-name()='LesML-All-Done']"> + <copy> + <copy-of select="@*|node()[not(self::processing-instruction() and local-name()='LesML-All-Done')]"/> + </copy> + </when> + <when test="self::*"> + <variable name="partitioned-fragment"> + <apply-templates mode="LesML:partition" select="."> + <with-param name="start-sigil" select="'{🔗'"/> + <with-param name="end-sigil" select="'>}'"/> + <with-param name="separator" select="'<'"/> + </apply-templates> + </variable> + <variable name="partitioned" select="exsl:node-set($partitioned-fragment)/node()"/> + <choose> + <when test="count($partitioned)>1"> + <variable name="processed"> + <copy> + <copy-of select="@*"/> + <copy-of select="$partitioned[1]/node()"/> + <element name="a" namespace="&xhtml;"> + <attribute name="href"> + <value-of select="$partitioned[3]"/> + </attribute> + <processing-instruction name="LesML-All-Done"/> + <choose> + <when test="string($partitioned[2])=''"> + <value-of select="$partitioned[3]"/> + </when> + <otherwise> + <value-of select="$partitioned[2]"/> + </otherwise> + </choose> + </element> + <copy-of select="$partitioned[4]/node()"/> + </copy> </variable> - <choose> - <when test="contains($hyperlink, '<')"> - <variable name="ltcomponents-fragment"> - <call-template name="LesML:split"> - <with-param name="source" select="$hyperlink"/> - <with-param name="separator" select="'<'"/> - </call-template> - </variable> - <variable name="ltcomponents" select="exsl:node-set($ltcomponents-fragment)/*"/> - <variable name="wrapped"> - <copy> - <copy-of select="@*"/> - <copy-of select="$start-node/preceding-sibling::node()"/> - <for-each select="$start-tokens[position()!=last()]"> - <value-of select="."/> - <if test="position()!=last()"> - <text>{🔗</text> - </if> - </for-each> - <element name="html:a"> - <attribute name="href"> - <value-of select="$ltcomponents[last()]"/> - </attribute> - <choose> - <when test="count($ltcomponents)>2 or normalize-space($ltcomponents[1])!=''"> - <for-each select="$ltcomponents[position()!=last()]"> - <value-of select="."/> - <if test="position()!=last()"> - <text><</text> - </if> - </for-each> - </when> - <otherwise> - <value-of select="$ltcomponents[last()]"/> - </otherwise> - </choose> - </element> - <value-of select="substring-after($end-node, '>}')"/> - <copy-of select="$end-node/following-sibling::node()"/> - </copy> - </variable> - <apply-templates select="exsl:node-set($wrapped)/*" mode="LesML:linkify"/> - </when> - <otherwise> - <variable name="escaped"> - <copy> - <copy-of select="@*"/> - <copy-of select="$start-node/preceding-sibling::node()"/> - <for-each select="$start-tokens[position()!=last()]"> - <value-of select="."/> - <if test="position()!=last()"> - <text>{🔗</text> - </if> - </for-each> - <text>{</text> - <processing-instruction name="LesML-Link-Escape"/> - <copy-of select="$hyperlink"/> - <text>>}</text> - <value-of select="substring-after($end-node, '>}')"/> - <copy-of select="$end-node/following-sibling::node()"/> - </copy> - </variable> - <apply-templates select="exsl:node-set($escaped)/*" mode="LesML:linkify"/> - </otherwise> - </choose> + <apply-templates select="exsl:node-set($processed)/node()" mode="LesML:linkify"/> </when> - <otherwise> + <when test="$partitioned[self::processing-instruction() and local-name()='LesML-All-Done']"> <copy> <copy-of select="@*"/> <apply-templates select="node()" mode="LesML:linkify"/> </copy> + </when> + <otherwise> + <variable name="processed"> + <copy> + <copy-of select="@*"/> + <copy-of select="$partitioned/node()"/> + </copy> + </variable> + <apply-templates select="exsl:node-set($processed)/node()" mode="LesML:linkify"/> </otherwise> </choose> </when> @@ -968,7 +1256,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <template match="node()" mode="LesML:strikethrough"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:s'"/> + <with-param name="element-name" select="'s'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'⸠'"/> <with-param name="end-sigil" select="'⸡'"/> </apply-templates> @@ -978,7 +1267,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <template match="node()" mode="LesML:underline"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:u'"/> + <with-param name="element-name" select="'u'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'⸤'"/> <with-param name="end-sigil" select="'⸥'"/> </apply-templates> @@ -988,7 +1278,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <template match="node()" mode="LesML:noted"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:small'"/> + <with-param name="element-name" select="'small'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'⟦'"/> <with-param name="end-sigil" select="'⟧'"/> <with-param name="role" select="'note'"/> @@ -999,7 +1290,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <template match="node()" mode="LesML:parenthetical"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:small'"/> + <with-param name="element-name" select="'small'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'⸨'"/> <with-param name="end-sigil" select="'⸩'"/> </apply-templates> @@ -1009,7 +1301,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <template match="node()" mode="LesML:code"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:code'"/> + <with-param name="element-name" select="'code'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'`'"/> <with-param name="end-sigil" select="'´'"/> </apply-templates> @@ -1019,20 +1312,33 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <template match="node()" mode="LesML:titled"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:cite'"/> + <with-param name="element-name" select="'cite'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'⟪'"/> <with-param name="end-sigil" select="'⟫'"/> </apply-templates> </variable> + <apply-templates select="exsl:node-set($result)/node()" mode="LesML:named"/> + </template> + <template match="node()" mode="LesML:named"> + <variable name="result"> + <apply-templates select="." mode="LesML:inline"> + <with-param name="element-name" select="'u'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> + <with-param name="start-sigil" select="'⸶'"/> + <with-param name="end-sigil" select="'⸷'"/> + <with-param name="class" select="'name'"/> + </apply-templates> + </variable> <apply-templates select="exsl:node-set($result)/node()" mode="LesML:offset"/> </template> <template match="node()" mode="LesML:offset"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:i'"/> + <with-param name="element-name" select="'i'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'⟨'"/> <with-param name="end-sigil" select="'⟩'"/> - <with-param name="langtag-supported" select="true()"/> </apply-templates> </variable> <apply-templates select="exsl:node-set($result)/node()" mode="LesML:bolded"/> @@ -1040,7 +1346,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <template match="node()" mode="LesML:bolded"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:b'"/> + <with-param name="element-name" select="'b'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'⦃'"/> <with-param name="end-sigil" select="'⦄'"/> </apply-templates> @@ -1050,7 +1357,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <template match="node()" mode="LesML:important"> <variable name="result"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:strong'"/> + <with-param name="element-name" select="'strong'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'☞'"/> <with-param name="end-sigil" select="'☜'"/> </apply-templates> @@ -1059,7 +1367,8 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one </template> <template match="node()" mode="LesML:emphasized"> <apply-templates select="." mode="LesML:inline"> - <with-param name="element-name" select="'html:em'"/> + <with-param name="element-name" select="'em'"/> + <with-param name="element-namespace" select="'&xhtml;'"/> <with-param name="start-sigil" select="'⹐'"/> <with-param name="end-sigil" select="'⹑'"/> </apply-templates>