X-Git-Url: https://git.ladys.computer/Shushe/blobdiff_plain/d71cc3861468e5ce418a3cf3ace5730689e41dce..ca7be60f15de191e25f8cc1890e13dc499576ec4:/parsers/tsv.xslt?ds=sidebyside diff --git a/parsers/tsv.xslt b/parsers/tsv.xslt index 44a161c..90e156e 100644 --- a/parsers/tsv.xslt +++ b/parsers/tsv.xslt @@ -6,16 +6,19 @@ SPDX-License-Identifier: MPL-2.0 <!-- ⁌ ⛩📰 书社 ∷ parsers/tsv.xslt -© 2023–2024 Lady [@ Lady’s Computer]. +© 2023–2024 Lady [@ Ladys Computer]. This Source Code Form is subject to the terms of the Mozilla Public License, v 2.0. 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 xhtml 'http://www.w3.org/1999/xhtml'> +]> <transform xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" xmlns:exslstr="http://exslt.org/strings" - xmlns:html="http://www.w3.org/1999/xhtml" + xmlns:html="&xhtml;" xmlns:书社="urn:fdc:ladys.computer:20231231:Shu1She4" extension-element-prefixes="exsl exslstr" version="1.0" @@ -23,54 +26,70 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one <import href="../lib/split.xslt"/> <书社:id>urn:fdc:ladys.computer:20231231:Shu1She4:tsv.xslt</书社:id> <template match="html:script[@type='text/tab-separated-values']"> - <variable name="rows" select="exslstr:tokenize(., '
')[normalize-space(.)!='' and not(starts-with(., '#'))]"/> - <variable name="head" select="$rows[1]"/> + <variable name="lines" select="exslstr:tokenize(., '
')"/> + <variable name="head" select="$lines[normalize-space(.)!='' and not(starts-with(., '#'))][1]"/> <variable name="headcols"> <call-template name="书社:split"> <with-param name="source" select="string($head)"/> <with-param name="separator" select="'	'"/> </call-template> </variable> - <variable name="body" select="$rows[not(position()=1)]"/> - <html:table> - <html:thead> - <html:tr> + <element name="table" namespace="&xhtml;"> + <for-each select="$lines[starts-with(., '#') and following-sibling::*[generate-id(.)=generate-id($head)]]"> + <comment> + <value-of select="substring-after(., '#')"/> + </comment> + </for-each> + <element name="thead" namespace="&xhtml;"> + <element name="tr" namespace="&xhtml;"> <for-each select="exsl:node-set($headcols)/*"> - <html:th scope="col"> + <element name="th" namespace="&xhtml;"> + <attribute name="scope"> + <text>col</text> + </attribute> <value-of select="."/> - </html:th> + </element> </for-each> - </html:tr> - </html:thead> - <html:tbody> - <for-each select="$body"> - <variable name="cols"> - <call-template name="书社:split"> - <with-param name="source" select="string(.)"/> - <with-param name="separator" select="'	'"/> - </call-template> - </variable> - <html:tr> - <for-each select="exsl:node-set($cols)/*[count(exsl:node-set($headcols)/*)>=position()]"> - <html:td> - <attribute name="data-tsv-header"> - <value-of select="exsl:node-set($headcols)/*[count(current()/preceding-sibling::*)+1]"/> - </attribute> - <value-of select="."/> - <if test="position()=count(exsl:node-set($headcols)/*)"> - <for-each select="following-sibling::*"> - <text>	</text> + </element> + </element> + <element name="tbody" namespace="&xhtml;"> + <for-each select="$head/following-sibling::*[normalize-space(.)!='']"> + <choose> + <when test="starts-with(., '#')"> + <comment> + <value-of select="substring-after(., '#')"/> + </comment> + </when> + <otherwise> + <variable name="cols"> + <call-template name="书社:split"> + <with-param name="source" select="string(.)"/> + <with-param name="separator" select="'	'"/> + </call-template> + </variable> + <element name="tr" namespace="&xhtml;"> + <for-each select="exsl:node-set($cols)/*[count(exsl:node-set($headcols)/*)>=position()]"> + <element name="td" namespace="&xhtml;"> + <attribute name="data-tsv-header"> + <value-of select="exsl:node-set($headcols)/*[count(current()/preceding-sibling::*)+1]"/> + </attribute> <value-of select="."/> - </for-each> - </if> - </html:td> - </for-each> - <for-each select="exsl:node-set($headcols)/*[position()>count(exsl:node-set($cols)/*)]"> - <html:td/> - </for-each> - </html:tr> + <if test="position()=count(exsl:node-set($headcols)/*)"> + <for-each select="following-sibling::*"> + <text>	</text> + <value-of select="."/> + </for-each> + </if> + </element> + </for-each> + <for-each select="exsl:node-set($headcols)/*[position()>count(exsl:node-set($cols)/*)]"> + <element name="td" namespace="&xhtml;"/> + </for-each> + </element> + </otherwise> + </choose> </for-each> - </html:tbody> - </html:table> + </element> + </element> </template> </transform>