<?xml version="1.0"?>
<!--
-SPDX-FileCopyrightText: 2024 Lady <https://www.ladys.computer/about/#lady>
+SPDX-FileCopyrightText: 2024, 2026 Lady <https://www.ladys.computer/about/#lady>
SPDX-License-Identifier: MPL-2.0
-->
<!--
⁌ ⛩📰 书社 ∷ parsers/record-jar.xslt
-© 2024 Lady [@ Ladys Computer].
+© 2024, 2026 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:exslset="http://exslt.org/sets"
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"
+ extension-element-prefixes="exsl exslset exslstr"
version="1.0"
>
<书社:id>urn:fdc:ladys.computer:20231231:Shu1She4:record-jar.xslt</书社:id>
<template match="html:script[@type='text/record-jar']">
- <variable name="lines" select="exslstr:tokenize(., '
')"/>
- <html:div>
- <if test="starts-with($lines[1], '%%') and substring-after($lines[1], '%%')!=''">
+ <variable name="lines" select="exslstr:tokenize(., '

')[not(normalize-space(.)='')]"/>
+ <element name="div" namespace="&xhtml;">
+ <if test="starts-with($lines[1], '%%') and $lines[1]!='%%'">
<comment>
<value-of select="substring-after($lines[1], '%%')"/>
</comment>
<for-each select="$lines[not(position()=1) and starts-with(., '%%')]">
<variable name="end" select="."/>
<variable name="start" select="preceding-sibling::*[starts-with(., '%%')][1]"/>
- <variable name="fields" select="($start/following-sibling::*|$lines[not($start)])[not(preceding-sibling::*[generate-id()=generate-id($end)]) and not(starts-with(., '%%'))]"/>
+ <variable name="fields" select="exslset:intersection(exslset:trailing($end/preceding-sibling::*, $start), $lines)"/>
<if test="$fields">
- <html:dl>
+ <element name="dl" namespace="&xhtml;">
<for-each select="$fields">
+ <variable name="following" select="exslset:intersection($fields, following-sibling::*)"/>
<choose>
- <when test="starts-with(., ' ') and $fields[generate-id()=generate-id(current()/preceding-sibling::*[1])]"/>
+ <when test="contains(' 	', substring(., 1, 1)) and exslset:has-same-node($fields, preceding-sibling::*[1])"/>
<otherwise>
- <variable name="next" select="following-sibling::*[not(starts-with(., ' '))]"/>
- <html:div>
- <html:dt>
+ <variable name="next" select="$following[not(contains(' 	', substring(., 1, 1)))][1]"/>
+ <element name="div" namespace="&xhtml;">
+ <element name="dt" namespace="&xhtml;">
<value-of select="normalize-space(substring-before(., ':'))"/>
- </html:dt>
- <html:dd>
+ </element>
+ <element name="dd" namespace="&xhtml;">
<variable name="firstline">
<choose>
<when test="contains(., ':')">
</choose>
</variable>
<choose>
- <when test="substring($firstline, string-length($firstline))='\' and following-sibling::*[position()=1 and starts-with(., ' ')]">
+ <when test="substring($firstline, string-length($firstline))='\' and $following[position()=1 and contains(' 	', substring(., 1, 1))]">
<value-of select="substring($firstline, 1, string-length($firstline)-1)"/>
</when>
<otherwise>
<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:leading($following, $next)[contains(' 	', substring(., 1, 1))]">
<variable name="nextline" select="normalize-space(.)"/>
<choose>
- <when test="substring($nextline, string-length($nextline))='\' and following-sibling::*[position()=1 and starts-with(., ' ')]">
+ <when test="substring($nextline, string-length($nextline))='\' and exslset:intersection($fields, following-sibling::*)[position()=1 and contains(' 	', substring(., 1, 1))]">
<value-of select="substring($nextline, 1, string-length($nextline)-1)"/>
</when>
<otherwise>
</otherwise>
</choose>
</for-each>
- </html:dd>
- </html:div>
+ </element>
+ </element>
</otherwise>
</choose>
</for-each>
- </html:dl>
+ </element>
</if>
<if test="substring-after(., '%%')!=''">
<comment>
</comment>
</if>
</for-each>
- </html:div>
+ </element>
</template>
</transform>