]> Lady’s Gitweb - Shushe/commitdiff
Preserve comments in Record‐Jar and T·S·V formats
authorLady <redacted>
Fri, 20 Sep 2024 03:20:43 +0000 (23:20 -0400)
committerLady <redacted>
Fri, 20 Sep 2024 03:20:43 +0000 (23:20 -0400)
parsers/record-jar.xslt
parsers/tsv.xslt

index bd047305f6d4d12376c2183579264bce40555ff0..abaf08c04e450c09331cc81e3d55722448cc1ae6 100644 (file)
@@ -24,6 +24,11 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
        <template match="html:script[@type='text/record-jar']">
                <variable name="lines" select="exslstr:tokenize(., '&#xA;')"/>
                <html:div>
+                       <if test="starts-with($lines[1], '%%') and substring-after($lines[1], '%%')!=''">
+                               <comment>
+                                       <value-of select="substring-after($lines[1], '%%')"/>
+                               </comment>
+                       </if>
                        <for-each select="$lines[not(position()=1) and starts-with(., '%%')]">
                                <variable name="end" select="."/>
                                <variable name="start" select="preceding-sibling::*[starts-with(., '%%')][1]"/>
@@ -76,6 +81,11 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                                </for-each>
                                        </html:dl>
                                </if>
+                               <if test="substring-after(., '%%')!=''">
+                                       <comment>
+                                               <value-of select="substring-after(., '%%')"/>
+                                       </comment>
+                               </if>
                        </for-each>
                </html:div>
        </template>
index 21ad1e0b6bdccaaa52ddd2859c1fd4b1aa6d593c..5b3cc684f6821c0e3a85f09e2637d7027c391c00 100644 (file)
@@ -23,16 +23,20 @@ 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(., '&#xA;')[normalize-space(.)!='' and not(starts-with(., '#'))]"/>
-               <variable name="head" select="$rows[1]"/>
+               <variable name="lines" select="exslstr:tokenize(., '&#xA;')"/>
+               <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="'&#x9;'"/>
                        </call-template>
                </variable>
-               <variable name="body" select="$rows[not(position()=1)]"/>
                <html:table>
+                       <for-each select="$lines[starts-with(., '#') and following-sibling::*[generate-id(.)=generate-id($head)]]">
+                               <comment>
+                                       <value-of select="substring-after(., '#')"/>
+                               </comment>
+                       </for-each>
                        <html:thead>
                                <html:tr>
                                        <for-each select="exsl:node-set($headcols)/*">
@@ -43,32 +47,41 @@ If a copy of the M·P·L was not distributed with this file, You can obtain one
                                </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="'&#x9;'"/>
-                                               </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>&#x9;</text>
+                               <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="'&#x9;'"/>
+                                                               </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="."/>
-                                                                       </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>&#x9;</text>
+                                                                                               <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>
+                                               </otherwise>
+                                       </choose>
                                </for-each>
                        </html:tbody>
                </html:table>
This page took 0.030301 seconds and 4 git commands to generate.