metanorma-ieee 0.1.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8d83608460dd4f0a8b91f963553c4f9a319fe1264259f4cd51c4eaa783b2d95
4
- data.tar.gz: 7016563f5ae5736a84f1a4266d3c893ed15682e079eed0df3768b81dce174f18
3
+ metadata.gz: 403a80a30d2fd43432e4750b237712b71ad5f2af3823137d4f49b87150a67b0f
4
+ data.tar.gz: 0d98ce2b578daaa75b06800371ef595d3a11ce4a931bc267edeb63dfa17faed9
5
5
  SHA512:
6
- metadata.gz: 7a83703e3591664c3bba95732da262a9e8242fe834c223757ee52c21532c7c66e47af14d5b0d2824e22c590e134f43afbd59643749f459c3e725d78d5d30f098
7
- data.tar.gz: 2469ed39262d09ccaef4cbe0cd156453a10822156f00dc30e8717b54379b84a13e442390cf84b4f1fcd8de6616656deca4616bdd2ceca6d3c1f71cbcecabf461
6
+ metadata.gz: 4cedea29e69e7fbad2b3007b6a70f7257e0ec117b685c342a83b683c44aecf882a28774d325a163244ed74f51d93654b726704be7376a683995ab17a19785fee
7
+ data.tar.gz: 98a404455147da1f4f3ccd736218be6d6d00d69af9daddd013d82f8ec9e94a95994b9539e9826a71ef292b9c0795eebe311ac0d1d6eb5bd7ae4ad11fea6c8456
@@ -67,7 +67,7 @@ module IsoDoc
67
67
  def para_to_tr(para)
68
68
  ret = para.children.each_with_object([[]]) do |c, m|
69
69
  if c.name == "tab" then m << []
70
- else m[-1] << c.to_xml
70
+ else m[-1] << to_xml(c)
71
71
  end
72
72
  end.map { |c| "<td>#{c.join}</td>" }
73
73
  "<tr>#{ret.join}</tr>"
@@ -3,7 +3,7 @@ module IsoDoc
3
3
  class I18n < IsoDoc::I18n
4
4
  def load_yaml2x(str)
5
5
  ::YAML.load_file(File.join(File.dirname(__FILE__),
6
- "i18n-#{str}.yaml"))
6
+ "i18n-#{str}.yaml"))
7
7
  end
8
8
 
9
9
  def load_yaml1(lang, script)
@@ -77,7 +77,7 @@
77
77
  <xsl:variable name="current_template">
78
78
  <xsl:choose>
79
79
  <xsl:when test="($doctype = 'standard' or $doctype = 'guide' or $doctype = 'recommended-practice') and $stage = 'draft'">draft</xsl:when>
80
- <xsl:when test="($doctype = 'standard' or $doctype = 'guide' or $doctype = 'recommended-practice') and $stage = 'published'">standard</xsl:when>
80
+ <xsl:when test="($doctype = 'standard' or $doctype = 'guide' or $doctype = 'recommended-practice') and ($stage = 'published' or $stage = 'approved')">standard</xsl:when>
81
81
  <xsl:otherwise><xsl:value-of select="$doctype"/></xsl:otherwise>
82
82
  </xsl:choose>
83
83
  </xsl:variable>
@@ -768,7 +768,7 @@
768
768
  </fo:block>
769
769
  </fo:flow>
770
770
  </fo:page-sequence>
771
- </xsl:when> <!-- $stage = 'published' -->
771
+ </xsl:when> <!-- $current_template = 'standard' -->
772
772
 
773
773
  <xsl:when test="$current_template = 'whitepaper' or $current_template = 'icap-whitepaper' or $current_template = 'industry-connection-report'">
774
774
  <fo:page-sequence master-reference="document-nonstandard" force-page-count="no-force" font-family="Calibri Light">
@@ -873,7 +873,7 @@
873
873
  </fo:block>
874
874
 
875
875
  <fo:block font-family="Arial" font-size="12pt" role="H1" font-weight="bold" margin-top="12pt" margin-bottom="24pt">
876
- <xsl:if test="$stage = 'published'">
876
+ <xsl:if test="$stage = 'published' or $stage = 'approved'">
877
877
  <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
878
878
  </xsl:if>
879
879
  <!-- Contents -->
@@ -944,7 +944,7 @@
944
944
 
945
945
  </xsl:when> <!-- $stage = 'draft' -->
946
946
 
947
- <xsl:when test="$stage = 'published'">
947
+ <xsl:when test="$stage = 'published' or $stage = 'approved'">
948
948
 
949
949
  <xsl:variable name="provisional-distance-between-starts">10</xsl:variable>
950
950
 
@@ -1016,7 +1016,7 @@
1016
1016
  </xsl:for-each>
1017
1017
  </xsl:if>
1018
1018
 
1019
- </xsl:when> <!-- $stage = 'published' -->
1019
+ </xsl:when> <!-- $stage = 'published' or 'approved' -->
1020
1020
  </xsl:choose>
1021
1021
 
1022
1022
  </xsl:if>
@@ -1513,15 +1513,15 @@
1513
1513
  </fo:table>
1514
1514
  </fo:block>
1515
1515
 
1516
- <xsl:if test="following-sibling::*[not(@type = 'officemember' or @type = 'emeritus_sign')]">
1517
- <fo:block font-size="10pt" space-after="12pt"> </fo:block>
1516
+ <xsl:if test="following-sibling::*[1][not(@type = 'officemember' or @type = 'emeritus_sign')]">
1517
+ <fo:block font-size="10pt" space-after="12pt" keep-with-previous="always"> </fo:block>
1518
1518
  </xsl:if>
1519
1519
  </xsl:when> <!-- @type = 'officemember' -->
1520
1520
 
1521
1521
  <xsl:when test="@type = 'officemember' and preceding-sibling::*[1][self::ieee:p][@type = 'officemember']"><!-- skip --></xsl:when>
1522
1522
 
1523
1523
  <xsl:when test="@type = 'emeritus_sign'">
1524
- <fo:block font-size="9pt" margin-left="9.4mm">
1524
+ <fo:block font-size="9pt" margin-left="9.4mm" space-before="6pt" space-after="12pt" keep-with-previous="always">
1525
1525
  <xsl:apply-templates/>
1526
1526
  </fo:block>
1527
1527
  </xsl:when>
@@ -6406,6 +6406,10 @@
6406
6406
  <xsl:variable name="footnote_inline">
6407
6407
  <fo:inline xsl:use-attribute-sets="fn-num-style">
6408
6408
 
6409
+ <xsl:if test="following-sibling::*[1][local-name() = 'fn']">
6410
+ <xsl:attribute name="padding-right">0.5mm</xsl:attribute>
6411
+ </xsl:if>
6412
+
6409
6413
  <fo:basic-link internal-destination="{$ref_id}" fox:alt-text="footnote {$current_fn_number}">
6410
6414
  <xsl:value-of select="$current_fn_number_text"/>
6411
6415
  </fo:basic-link>
@@ -7563,6 +7567,23 @@
7563
7567
  <xsl:apply-templates/>
7564
7568
  </xsl:template>
7565
7569
 
7570
+ <!-- Don't break standard's numbers -->
7571
+ <!-- Example : <span class="stdpublisher">ISO</span> <span class="stddocNumber">10303</span>-<span class="stddocPartNumber">1</span>:<span class="stdyear">1994</span> -->
7572
+ <xsl:template match="*[local-name() = 'span'][@class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear']" priority="2">
7573
+ <xsl:choose>
7574
+ <xsl:when test="ancestor::*[local-name() = 'table']"><xsl:apply-templates/></xsl:when>
7575
+ <xsl:when test="following-sibling::*[2][local-name() = 'span'][@class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear']">
7576
+ <fo:inline keep-with-next.within-line="always"><xsl:apply-templates/></fo:inline>
7577
+ </xsl:when>
7578
+ <xsl:otherwise>
7579
+ <xsl:apply-templates/>
7580
+ </xsl:otherwise>
7581
+ </xsl:choose>
7582
+ </xsl:template>
7583
+ <xsl:template match="text()[not(ancestor::*[local-name() = 'table']) and preceding-sibling::*[1][local-name() = 'span'][@class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear'] and following-sibling::*[1][local-name() = 'span'][@class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear']]" priority="2">
7584
+ <fo:inline keep-with-next.within-line="always"><xsl:value-of select="."/></fo:inline>
7585
+ </xsl:template>
7586
+
7566
7587
  <!-- ========================= -->
7567
7588
  <!-- END Rich text formatting -->
7568
7589
  <!-- ========================= -->
@@ -7958,7 +7979,7 @@
7958
7979
  <xsl:choose>
7959
7980
  <xsl:when test="@colspan">
7960
7981
  <xsl:variable name="td">
7961
- <xsl:element name="td">
7982
+ <xsl:element name="{local-name()}">
7962
7983
  <xsl:attribute name="divide"><xsl:value-of select="@colspan"/></xsl:attribute>
7963
7984
  <xsl:if test="local-name()='th'">
7964
7985
  <xsl:attribute name="font-weight">bold</xsl:attribute>
@@ -7973,7 +7994,7 @@
7973
7994
  </xsl:call-template>
7974
7995
  </xsl:when>
7975
7996
  <xsl:otherwise>
7976
- <xsl:element name="td">
7997
+ <xsl:element name="{local-name()}">
7977
7998
  <xsl:apply-templates select="@*" mode="simple-table-colspan"/>
7978
7999
  <xsl:if test="local-name()='th'">
7979
8000
  <xsl:attribute name="font-weight">bold</xsl:attribute>
@@ -8040,7 +8061,7 @@
8040
8061
  <xsl:variable name="currentRow" select="."/>
8041
8062
 
8042
8063
  <xsl:variable name="normalizedTDs">
8043
- <xsl:for-each select="xalan:nodeset($previousRow)//td">
8064
+ <xsl:for-each select="xalan:nodeset($previousRow)//*[self::td or self::th]">
8044
8065
  <xsl:choose>
8045
8066
  <xsl:when test="@rowspan &gt; 1">
8046
8067
  <xsl:copy>
@@ -8052,7 +8073,7 @@
8052
8073
  </xsl:copy>
8053
8074
  </xsl:when>
8054
8075
  <xsl:otherwise>
8055
- <xsl:copy-of select="$currentRow/td[1 + count(current()/preceding-sibling::td[not(@rowspan) or (@rowspan = 1)])]"/>
8076
+ <xsl:copy-of select="$currentRow/*[self::td or self::th][1 + count(current()/preceding-sibling::*[self::td or self::th][not(@rowspan) or (@rowspan = 1)])]"/>
8056
8077
  </xsl:otherwise>
8057
8078
  </xsl:choose>
8058
8079
  </xsl:for-each>
@@ -8736,12 +8757,6 @@
8736
8757
 
8737
8758
  <fo:block-container margin-left="0mm">
8738
8759
 
8739
- <!-- <xsl:if test="$namespace = 'iho'">
8740
- <xsl:if test="ancestor::iho:td">
8741
- <xsl:attribute name="font-size">12pt</xsl:attribute>
8742
- </xsl:if>
8743
- </xsl:if> -->
8744
-
8745
8760
  <fo:block>
8746
8761
 
8747
8762
  <fo:inline xsl:use-attribute-sets="note-name-style">
@@ -9249,6 +9264,31 @@
9249
9264
  <xsl:apply-templates mode="svg_update"/>
9250
9265
  </xsl:copy>
9251
9266
  </xsl:template>
9267
+
9268
+ <!-- regex for 'display: inline-block;' -->
9269
+ <xsl:variable name="regex_svg_style_notsupported">display(\s|\h)*:(\s|\h)*inline-block(\s|\h)*;</xsl:variable>
9270
+ <xsl:template match="*[local-name() = 'svg']//*[local-name() = 'style']/text()" mode="svg_update">
9271
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.), $regex_svg_style_notsupported, '')"/>
9272
+ </xsl:template>
9273
+
9274
+ <!-- replace
9275
+ stroke="rgba(r, g, b, alpha)" to
9276
+ stroke="rgb(r,g,b)" stroke-opacity="alpha", and
9277
+ fill="rgba(r, g, b, alpha)" to
9278
+ fill="rgb(r,g,b)" fill-opacity="alpha" -->
9279
+ <xsl:template match="@*[local-name() = 'stroke' or local-name() = 'fill'][starts-with(normalize-space(.), 'rgba')]" mode="svg_update">
9280
+ <xsl:variable name="components_">
9281
+ <xsl:call-template name="split">
9282
+ <xsl:with-param name="pText" select="substring-before(substring-after(., '('), ')')"/>
9283
+ <xsl:with-param name="sep" select="','"/>
9284
+ </xsl:call-template>
9285
+ </xsl:variable>
9286
+ <xsl:variable name="components" select="xalan:nodeset($components_)"/>
9287
+ <xsl:variable name="att_name" select="local-name()"/>
9288
+ <xsl:attribute name="{$att_name}"><xsl:value-of select="concat('rgb(', $components/item[1], ',', $components/item[2], ',', $components/item[3], ')')"/></xsl:attribute>
9289
+ <xsl:attribute name="{$att_name}-opacity"><xsl:value-of select="$components/item[4]"/></xsl:attribute>
9290
+ </xsl:template>
9291
+
9252
9292
  <!-- ============== -->
9253
9293
  <!-- END: svg_update -->
9254
9294
  <!-- ============== -->
@@ -12257,7 +12297,9 @@
12257
12297
  <!-- Update xml -->
12258
12298
  <!-- ===================================== -->
12259
12299
  <!-- =========================================================================== -->
12260
- <!-- STEP1: Re-order elements in 'preface', 'sections' based on @displayorder -->
12300
+ <!-- STEP1: -->
12301
+ <!-- - Re-order elements in 'preface', 'sections' based on @displayorder -->
12302
+ <!-- - Ignore 'span' without style -->
12261
12303
  <!-- =========================================================================== -->
12262
12304
  <xsl:template match="@*|node()" mode="update_xml_step1">
12263
12305
  <xsl:copy>
@@ -12340,7 +12382,8 @@
12340
12382
  </xsl:copy>
12341
12383
  </xsl:template>
12342
12384
 
12343
- <xsl:template match="*[local-name() = 'span'][@style]" mode="update_xml_step1" priority="2">
12385
+ <!-- Example with 'class': <span class="stdpublisher">ISO</span> <span class="stddocNumber">10303</span>-<span class="stddocPartNumber">1</span>:<span class="stdyear">1994</span> -->
12386
+ <xsl:template match="*[local-name() = 'span'][@style or @class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear']" mode="update_xml_step1" priority="2">
12344
12387
  <xsl:copy>
12345
12388
  <xsl:copy-of select="@*"/>
12346
12389
  <xsl:apply-templates mode="update_xml_step1"/>
@@ -77,7 +77,7 @@
77
77
  <xsl:variable name="current_template">
78
78
  <xsl:choose>
79
79
  <xsl:when test="($doctype = 'standard' or $doctype = 'guide' or $doctype = 'recommended-practice') and $stage = 'draft'">draft</xsl:when>
80
- <xsl:when test="($doctype = 'standard' or $doctype = 'guide' or $doctype = 'recommended-practice') and $stage = 'published'">standard</xsl:when>
80
+ <xsl:when test="($doctype = 'standard' or $doctype = 'guide' or $doctype = 'recommended-practice') and ($stage = 'published' or $stage = 'approved')">standard</xsl:when>
81
81
  <xsl:otherwise><xsl:value-of select="$doctype"/></xsl:otherwise>
82
82
  </xsl:choose>
83
83
  </xsl:variable>
@@ -768,7 +768,7 @@
768
768
  </fo:block>
769
769
  </fo:flow>
770
770
  </fo:page-sequence>
771
- </xsl:when> <!-- $stage = 'published' -->
771
+ </xsl:when> <!-- $current_template = 'standard' -->
772
772
 
773
773
  <xsl:when test="$current_template = 'whitepaper' or $current_template = 'icap-whitepaper' or $current_template = 'industry-connection-report'">
774
774
  <fo:page-sequence master-reference="document-nonstandard" force-page-count="no-force" font-family="Calibri Light">
@@ -873,7 +873,7 @@
873
873
  </fo:block>
874
874
 
875
875
  <fo:block font-family="Arial" font-size="12pt" role="H1" font-weight="bold" margin-top="12pt" margin-bottom="24pt">
876
- <xsl:if test="$stage = 'published'">
876
+ <xsl:if test="$stage = 'published' or $stage = 'approved'">
877
877
  <xsl:attribute name="margin-bottom">12pt</xsl:attribute>
878
878
  </xsl:if>
879
879
  <!-- Contents -->
@@ -944,7 +944,7 @@
944
944
 
945
945
  </xsl:when> <!-- $stage = 'draft' -->
946
946
 
947
- <xsl:when test="$stage = 'published'">
947
+ <xsl:when test="$stage = 'published' or $stage = 'approved'">
948
948
 
949
949
  <xsl:variable name="provisional-distance-between-starts">10</xsl:variable>
950
950
 
@@ -1016,7 +1016,7 @@
1016
1016
  </xsl:for-each>
1017
1017
  </xsl:if>
1018
1018
 
1019
- </xsl:when> <!-- $stage = 'published' -->
1019
+ </xsl:when> <!-- $stage = 'published' or 'approved' -->
1020
1020
  </xsl:choose>
1021
1021
 
1022
1022
  </xsl:if>
@@ -1513,15 +1513,15 @@
1513
1513
  </fo:table>
1514
1514
  </fo:block>
1515
1515
 
1516
- <xsl:if test="following-sibling::*[not(@type = 'officemember' or @type = 'emeritus_sign')]">
1517
- <fo:block font-size="10pt" space-after="12pt"> </fo:block>
1516
+ <xsl:if test="following-sibling::*[1][not(@type = 'officemember' or @type = 'emeritus_sign')]">
1517
+ <fo:block font-size="10pt" space-after="12pt" keep-with-previous="always"> </fo:block>
1518
1518
  </xsl:if>
1519
1519
  </xsl:when> <!-- @type = 'officemember' -->
1520
1520
 
1521
1521
  <xsl:when test="@type = 'officemember' and preceding-sibling::*[1][self::ieee:p][@type = 'officemember']"><!-- skip --></xsl:when>
1522
1522
 
1523
1523
  <xsl:when test="@type = 'emeritus_sign'">
1524
- <fo:block font-size="9pt" margin-left="9.4mm">
1524
+ <fo:block font-size="9pt" margin-left="9.4mm" space-before="6pt" space-after="12pt" keep-with-previous="always">
1525
1525
  <xsl:apply-templates/>
1526
1526
  </fo:block>
1527
1527
  </xsl:when>
@@ -6406,6 +6406,10 @@
6406
6406
  <xsl:variable name="footnote_inline">
6407
6407
  <fo:inline xsl:use-attribute-sets="fn-num-style">
6408
6408
 
6409
+ <xsl:if test="following-sibling::*[1][local-name() = 'fn']">
6410
+ <xsl:attribute name="padding-right">0.5mm</xsl:attribute>
6411
+ </xsl:if>
6412
+
6409
6413
  <fo:basic-link internal-destination="{$ref_id}" fox:alt-text="footnote {$current_fn_number}">
6410
6414
  <xsl:value-of select="$current_fn_number_text"/>
6411
6415
  </fo:basic-link>
@@ -7563,6 +7567,23 @@
7563
7567
  <xsl:apply-templates/>
7564
7568
  </xsl:template>
7565
7569
 
7570
+ <!-- Don't break standard's numbers -->
7571
+ <!-- Example : <span class="stdpublisher">ISO</span> <span class="stddocNumber">10303</span>-<span class="stddocPartNumber">1</span>:<span class="stdyear">1994</span> -->
7572
+ <xsl:template match="*[local-name() = 'span'][@class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear']" priority="2">
7573
+ <xsl:choose>
7574
+ <xsl:when test="ancestor::*[local-name() = 'table']"><xsl:apply-templates/></xsl:when>
7575
+ <xsl:when test="following-sibling::*[2][local-name() = 'span'][@class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear']">
7576
+ <fo:inline keep-with-next.within-line="always"><xsl:apply-templates/></fo:inline>
7577
+ </xsl:when>
7578
+ <xsl:otherwise>
7579
+ <xsl:apply-templates/>
7580
+ </xsl:otherwise>
7581
+ </xsl:choose>
7582
+ </xsl:template>
7583
+ <xsl:template match="text()[not(ancestor::*[local-name() = 'table']) and preceding-sibling::*[1][local-name() = 'span'][@class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear'] and following-sibling::*[1][local-name() = 'span'][@class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear']]" priority="2">
7584
+ <fo:inline keep-with-next.within-line="always"><xsl:value-of select="."/></fo:inline>
7585
+ </xsl:template>
7586
+
7566
7587
  <!-- ========================= -->
7567
7588
  <!-- END Rich text formatting -->
7568
7589
  <!-- ========================= -->
@@ -7958,7 +7979,7 @@
7958
7979
  <xsl:choose>
7959
7980
  <xsl:when test="@colspan">
7960
7981
  <xsl:variable name="td">
7961
- <xsl:element name="td">
7982
+ <xsl:element name="{local-name()}">
7962
7983
  <xsl:attribute name="divide"><xsl:value-of select="@colspan"/></xsl:attribute>
7963
7984
  <xsl:if test="local-name()='th'">
7964
7985
  <xsl:attribute name="font-weight">bold</xsl:attribute>
@@ -7973,7 +7994,7 @@
7973
7994
  </xsl:call-template>
7974
7995
  </xsl:when>
7975
7996
  <xsl:otherwise>
7976
- <xsl:element name="td">
7997
+ <xsl:element name="{local-name()}">
7977
7998
  <xsl:apply-templates select="@*" mode="simple-table-colspan"/>
7978
7999
  <xsl:if test="local-name()='th'">
7979
8000
  <xsl:attribute name="font-weight">bold</xsl:attribute>
@@ -8040,7 +8061,7 @@
8040
8061
  <xsl:variable name="currentRow" select="."/>
8041
8062
 
8042
8063
  <xsl:variable name="normalizedTDs">
8043
- <xsl:for-each select="xalan:nodeset($previousRow)//td">
8064
+ <xsl:for-each select="xalan:nodeset($previousRow)//*[self::td or self::th]">
8044
8065
  <xsl:choose>
8045
8066
  <xsl:when test="@rowspan &gt; 1">
8046
8067
  <xsl:copy>
@@ -8052,7 +8073,7 @@
8052
8073
  </xsl:copy>
8053
8074
  </xsl:when>
8054
8075
  <xsl:otherwise>
8055
- <xsl:copy-of select="$currentRow/td[1 + count(current()/preceding-sibling::td[not(@rowspan) or (@rowspan = 1)])]"/>
8076
+ <xsl:copy-of select="$currentRow/*[self::td or self::th][1 + count(current()/preceding-sibling::*[self::td or self::th][not(@rowspan) or (@rowspan = 1)])]"/>
8056
8077
  </xsl:otherwise>
8057
8078
  </xsl:choose>
8058
8079
  </xsl:for-each>
@@ -8736,12 +8757,6 @@
8736
8757
 
8737
8758
  <fo:block-container margin-left="0mm">
8738
8759
 
8739
- <!-- <xsl:if test="$namespace = 'iho'">
8740
- <xsl:if test="ancestor::iho:td">
8741
- <xsl:attribute name="font-size">12pt</xsl:attribute>
8742
- </xsl:if>
8743
- </xsl:if> -->
8744
-
8745
8760
  <fo:block>
8746
8761
 
8747
8762
  <fo:inline xsl:use-attribute-sets="note-name-style">
@@ -9249,6 +9264,31 @@
9249
9264
  <xsl:apply-templates mode="svg_update"/>
9250
9265
  </xsl:copy>
9251
9266
  </xsl:template>
9267
+
9268
+ <!-- regex for 'display: inline-block;' -->
9269
+ <xsl:variable name="regex_svg_style_notsupported">display(\s|\h)*:(\s|\h)*inline-block(\s|\h)*;</xsl:variable>
9270
+ <xsl:template match="*[local-name() = 'svg']//*[local-name() = 'style']/text()" mode="svg_update">
9271
+ <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.), $regex_svg_style_notsupported, '')"/>
9272
+ </xsl:template>
9273
+
9274
+ <!-- replace
9275
+ stroke="rgba(r, g, b, alpha)" to
9276
+ stroke="rgb(r,g,b)" stroke-opacity="alpha", and
9277
+ fill="rgba(r, g, b, alpha)" to
9278
+ fill="rgb(r,g,b)" fill-opacity="alpha" -->
9279
+ <xsl:template match="@*[local-name() = 'stroke' or local-name() = 'fill'][starts-with(normalize-space(.), 'rgba')]" mode="svg_update">
9280
+ <xsl:variable name="components_">
9281
+ <xsl:call-template name="split">
9282
+ <xsl:with-param name="pText" select="substring-before(substring-after(., '('), ')')"/>
9283
+ <xsl:with-param name="sep" select="','"/>
9284
+ </xsl:call-template>
9285
+ </xsl:variable>
9286
+ <xsl:variable name="components" select="xalan:nodeset($components_)"/>
9287
+ <xsl:variable name="att_name" select="local-name()"/>
9288
+ <xsl:attribute name="{$att_name}"><xsl:value-of select="concat('rgb(', $components/item[1], ',', $components/item[2], ',', $components/item[3], ')')"/></xsl:attribute>
9289
+ <xsl:attribute name="{$att_name}-opacity"><xsl:value-of select="$components/item[4]"/></xsl:attribute>
9290
+ </xsl:template>
9291
+
9252
9292
  <!-- ============== -->
9253
9293
  <!-- END: svg_update -->
9254
9294
  <!-- ============== -->
@@ -12257,7 +12297,9 @@
12257
12297
  <!-- Update xml -->
12258
12298
  <!-- ===================================== -->
12259
12299
  <!-- =========================================================================== -->
12260
- <!-- STEP1: Re-order elements in 'preface', 'sections' based on @displayorder -->
12300
+ <!-- STEP1: -->
12301
+ <!-- - Re-order elements in 'preface', 'sections' based on @displayorder -->
12302
+ <!-- - Ignore 'span' without style -->
12261
12303
  <!-- =========================================================================== -->
12262
12304
  <xsl:template match="@*|node()" mode="update_xml_step1">
12263
12305
  <xsl:copy>
@@ -12340,7 +12382,8 @@
12340
12382
  </xsl:copy>
12341
12383
  </xsl:template>
12342
12384
 
12343
- <xsl:template match="*[local-name() = 'span'][@style]" mode="update_xml_step1" priority="2">
12385
+ <!-- Example with 'class': <span class="stdpublisher">ISO</span> <span class="stddocNumber">10303</span>-<span class="stddocPartNumber">1</span>:<span class="stdyear">1994</span> -->
12386
+ <xsl:template match="*[local-name() = 'span'][@style or @class = 'stdpublisher' or @class = 'stddocNumber' or @class = 'stddocPartNumber' or @class = 'stdyear']" mode="update_xml_step1" priority="2">
12344
12387
  <xsl:copy>
12345
12388
  <xsl:copy-of select="@*"/>
12346
12389
  <xsl:apply-templates mode="update_xml_step1"/>
@@ -94,7 +94,7 @@ module IsoDoc
94
94
  set(:full_doctitle, fulltitle(@metadata[:doctype], draft))
95
95
  set(:abbrev_doctitle, fulltitle(@metadata[:doctype_abbrev], draft))
96
96
  prov = isoxml&.at(ns("//bibdata/title[@type='provenance']")) and
97
- set(:provenance_doctitle, prov.children.to_xml)
97
+ set(:provenance_doctitle, Common::to_xml(prov.children))
98
98
  end
99
99
 
100
100
  def fulltitle(type, draft)
@@ -26,19 +26,19 @@ module IsoDoc
26
26
  if coll.all? do |c|
27
27
  c.elements.size == 1 && c.elements.first.name == "p"
28
28
  end
29
- ret = coll.map { |c| c.elements.first.children.to_xml }
29
+ ret = coll.map { |c| to_xml(c.elements.first.children) }
30
30
  return "<p>#{ret.join}</p>"
31
31
  end
32
- coll.map { |c| c.children.to_xml }.join
32
+ coll.map { |c| to_xml(c.children) }.join
33
33
  end
34
34
 
35
35
  def unwrap_definition(docxml)
36
- docxml.xpath(ns("//definition/verbal-definition")).each do |v|
36
+ docxml.xpath(ns(".//definition/verbal-definition")).each do |v|
37
37
  next unless v.elements.all? { |e| %w(termsource p).include?(e.name) }
38
38
 
39
39
  p = v.xpath(ns("./p"))
40
40
  v.children =
41
- "<p>#{p.map(&:children).map(&:to_xml).join("\n")}</p>" \
41
+ "<p>#{p.map(&:children).map { |x| to_xml(x) }.join("\n")}</p>" \
42
42
  "#{v.xpath(ns('./termsource')).to_xml}"
43
43
  end
44
44
  super
@@ -60,8 +60,8 @@ module IsoDoc
60
60
  prev = i and next
61
61
  end
62
62
 
63
- coll[prev].at(ns("./preferred")) << "; #{r.at(ns('./preferred'))
64
- .children.to_xml}"
63
+ coll[prev].at(ns("./preferred")) << "; #{to_xml(r.at(ns('./preferred'))
64
+ .children)}"
65
65
  r.remove
66
66
  end
67
67
  end
@@ -129,10 +129,10 @@ module IsoDoc
129
129
  new = adm.dup
130
130
  adm["type"] = "equivalent"
131
131
  adm.name = "related"
132
- adm.children = "<preferred>#{adm.children.to_xml}</preferred>"
132
+ adm.children = "<preferred>#{to_xml(adm.children)}</preferred>"
133
133
  adm.parent.next = <<~TERM
134
- <term><preferred>#{new.children.to_xml}</preferred>
135
- <related type='see'><preferred>#{pref.children.to_xml}</preferred></related></term>
134
+ <term><preferred>#{to_xml(new.children)}</preferred>
135
+ <related type='see'><preferred>#{to_xml(pref.children)}</preferred></related></term>
136
136
  TERM
137
137
  end
138
138
 
@@ -172,8 +172,8 @@ module IsoDoc
172
172
  def collapse_term_related(rels)
173
173
  ret = rels.map do |r|
174
174
  p = r.at(ns("./preferred"))
175
- "<em>#{@i18n.relatedterms[r['type']]}:</em> " \
176
- "#{p&.children&.to_xml || '**RELATED TERM NOT FOUND**'}"
175
+ rel = p ? to_xml(p.children) : "**RELATED TERM NOT FOUND**"
176
+ "<em>#{@i18n.relatedterms[r['type']]}:</em> #{rel}"
177
177
  end.join(". ")
178
178
  ret += "." unless ret.empty?
179
179
  ret
@@ -182,10 +182,10 @@ module IsoDoc
182
182
  def collapse_term_template(opt)
183
183
  defn = collapse_unwrap_definition(opt[:def])
184
184
  src = nil
185
- opt[:source] and src = "(#{opt[:source].remove.children.to_xml.strip})"
185
+ opt[:source] and src = "(#{to_xml(opt[:source].remove.children).strip})"
186
+ t = opt[:pref] ? to_xml(opt[:pref].children) : "**TERM NOT FOUND**"
186
187
  <<~TERM
187
- <p>#{opt[:pref]&.children&.to_xml || '**TERM NOT FOUND**'}: #{defn}
188
- #{collapse_term_related(opt[:rels])} #{src}</p>
188
+ <p>#{t}: #{defn} #{collapse_term_related(opt[:rels])} #{src}</p>
189
189
  TERM
190
190
  end
191
191
 
@@ -194,7 +194,8 @@ module IsoDoc
194
194
 
195
195
  s = defn.remove.xpath(ns("./termsource"))
196
196
  p = defn.at(ns("./p"))
197
- !s.empty? && p and p << s.map(&:remove).map(&:children).map(&:to_xml).join
197
+ !s.empty? && p and p << s.map(&:remove).map(&:children)
198
+ .map { |x| to_xml(x) }.join
198
199
  if defn.elements.size == 1 && defn.elements.first.name == "p"
199
200
  defn.elements.first.children
200
201
  else defn.elements
@@ -203,10 +204,10 @@ module IsoDoc
203
204
 
204
205
  def termsource1(elem)
205
206
  while elem&.next_element&.name == "termsource"
206
- elem << "; #{elem.next_element.remove.children.to_xml}"
207
+ elem << "; #{to_xml(elem.next_element.remove.children)}"
207
208
  end
208
209
  adapt = termsource_adapt(elem["status"]) and
209
- elem.children = l10n("#{adapt}#{elem.children.to_xml.strip}")
210
+ elem.children = l10n("#{adapt}#{to_xml(elem.children).strip}")
210
211
  end
211
212
 
212
213
  def termsource_adapt(status)
@@ -218,7 +219,7 @@ module IsoDoc
218
219
  def designation_field(desgn, name)
219
220
  if desgn.name == "preferred"
220
221
  f = desgn.xpath(ns("./../domain | ./../subject")).map(&:remove)
221
- .map { |u| u.children.to_xml }.join(", ")
222
+ .map { |u| to_xml(u.children) }.join(", ")
222
223
  name << ", &#x3c;#{f}&#x3e;" unless f.empty?
223
224
  end
224
225
  super
@@ -231,7 +232,7 @@ module IsoDoc
231
232
  "./admitted[expression/name][abbreviation-type]"))
232
233
  (pref && !x.empty?) or return
233
234
  tail = x.map do |p|
234
- p.remove.at(ns("./expression/name")).children.to_xml.strip
235
+ to_xml(p.remove.at(ns("./expression/name")).children).strip
235
236
  end.join(", ")
236
237
  pref << " (#{tail})"
237
238
  end
@@ -17,9 +17,10 @@ module IsoDoc
17
17
  ret = resolve_eref_connectives(eref_locality_stacks(refs, target,
18
18
  node))
19
19
  node["droploc"] = droploc
20
- eref_localities1(target,
21
- prefix_clause(target, refs.first.at(ns("./locality"))),
22
- l10n(ret[1..-1].join), nil, node, @lang)
20
+ eref_localities1({ target: target, number: "pl",
21
+ type: prefix_clause(target, refs.first.at(ns("./locality"))),
22
+ from: l10n(ret[1..-1].join), node: node,
23
+ lang: @lang })
23
24
  end
24
25
 
25
26
  def prefix_clause(target, loc)
@@ -37,20 +38,18 @@ module IsoDoc
37
38
  target&.gsub(/<[^>]+>/, "")&.match(/^IEV$|^IEC 60050-/)
38
39
  end
39
40
 
40
- def eref_localities1(target, type, from, upto, node, lang = "en")
41
- return nil if type == "anchor"
41
+ def eref_localities1(opt)
42
+ return nil if opt[:type] == "anchor"
42
43
 
43
- type = type.downcase
44
- lang == "zh" and
45
- return l10n(eref_localities1_zh(target, type, from, upto,
46
- node))
44
+ opt[:type] = opt[:type].downcase
45
+ opt[:lang] == "zh" and return l10n(eref_localities1_zh(opt))
47
46
  ret = ""
48
- node["droploc"] != "true" && !subclause?(target, type,
49
- from) and
50
- ret = eref_locality_populate(type, node)
51
- ret += " #{from}" if from
52
- ret += "&#x2013;#{upto}" if upto
53
- ret += ")" if type == "list"
47
+ opt[:node]["droploc"] != "true" &&
48
+ !subclause?(opt[:target], opt[:type], opt[:from]) and
49
+ ret = eref_locality_populate(opt[:type], opt[:node], opt[:number])
50
+ ret += " #{opt[:from]}" if opt[:from]
51
+ ret += "&#x2013;#{opt[:upto]}" if opt[:upto]
52
+ ret += ")" if opt[:type] == "list"
54
53
  l10n(ret)
55
54
  end
56
55
 
@@ -85,7 +84,7 @@ module IsoDoc
85
84
  i = display_order_xpath(docxml, "//preface/*", i)
86
85
  i = display_order_at(docxml, "//clause[@type = 'overview']", i)
87
86
  i = display_order_at(docxml, @xrefs.klass.norm_ref_xpath, i)
88
- i = display_order_at(docxml, "//sections/terms | "\
87
+ i = display_order_at(docxml, "//sections/terms | " \
89
88
  "//sections/clause[descendant::terms]", i)
90
89
  i = display_order_at(docxml, "//sections/definitions", i)
91
90
  i = display_order_xpath(docxml, @xrefs.klass.middle_clause(docxml), i)
@@ -97,7 +96,7 @@ module IsoDoc
97
96
  def annex1(elem)
98
97
  lbl = @xrefs.anchor(elem["id"], :label)
99
98
  if t = elem.at(ns("./title"))
100
- t.children = "<strong>#{t.children.to_xml}</strong>"
99
+ t.children = "<strong>#{to_xml(t.children)}</strong>"
101
100
  end
102
101
  prefix_name(elem, "<br/>", lbl, "title")
103
102
  end
@@ -132,7 +131,7 @@ module IsoDoc
132
131
 
133
132
  def amend1(elem)
134
133
  elem.xpath(ns("./description/p")).each do |p|
135
- p.children = p.children.to_xml.strip
134
+ p.children = to_xml(p.children).strip
136
135
  amend_format(p)
137
136
  end
138
137
  super
@@ -144,7 +143,7 @@ module IsoDoc
144
143
  %(em strong).include?(para.children.first.name) and
145
144
  para.children = para.elements.first.children
146
145
  end
147
- para.children = "<strong><em>#{para.children.to_xml}</em></strong>"
146
+ para.children = "<strong><em>#{to_xml(para.children)}</em></strong>"
148
147
  end
149
148
 
150
149
  def section(docxml)
@@ -153,7 +152,7 @@ module IsoDoc
153
152
  end
154
153
 
155
154
  def boilerplate(docxml)
156
- docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/"\
155
+ docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/" \
157
156
  "clause/title")).each(&:remove)
158
157
  docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/clause"))
159
158
  .each do |clause|
@@ -211,7 +210,7 @@ module IsoDoc
211
210
  def participant_officeholder_para(map, name, idx)
212
211
  name = "<strong>#{name}</strong>" if idx.zero?
213
212
  br = map["role"].size > 30 ? "<br/>" : ""
214
- "<p type='officeholder' align='center'>#{name}, #{br}"\
213
+ "<p type='officeholder' align='center'>#{name}, #{br}" \
215
214
  "<em>#{map['role']}</em></p>"
216
215
  end
217
216
 
@@ -15,7 +15,7 @@ module IsoDoc
15
15
  feedback_table(docxml)
16
16
  f = docxml.at("//div[@class = 'boilerplate-feedback']") or return
17
17
  docxml.at("//aside").previous = <<~FN
18
- <aside id="ftn0">#{f.remove.to_xml}</aside>
18
+ <aside id="ftn0">#{to_xml(f.remove)}</aside>
19
19
  FN
20
20
  end
21
21
 
@@ -103,7 +103,7 @@ module IsoDoc
103
103
  div.xpath(".//div").each { |d| d.replace(d.children) }
104
104
  div.elements.each_with_object([[]]) do |e, m|
105
105
  member = e.name == "p" && e["type"] == "officemember"
106
- (prev == member and m[-1] << e.to_xml) or m << [e.to_xml]
106
+ (prev == member and m[-1] << to_xml(e)) or m << [to_xml(e)]
107
107
  prev = member
108
108
  end.map(&:join)
109
109
  end
@@ -143,7 +143,7 @@ module IsoDoc
143
143
  i.zero? or div.elements.first.previous = "<p>&#xa0;</p>"
144
144
  i == 4 and
145
145
  div.xpath(".//p[br]").each do |p|
146
- p.replace(p.to_xml.gsub(%r{<br/>}, "</p><p>"))
146
+ p.replace(to_xml(p).gsub(%r{<br/>}, "</p><p>"))
147
147
  end
148
148
  feedback_style1(div, i)
149
149
  end
@@ -28,7 +28,7 @@ module IsoDoc
28
28
  end
29
29
  else
30
30
  t.children =
31
- "<p class='IEEEStdsTableColumnHead'>#{t.children.to_xml}</p>"
31
+ "<p class='IEEEStdsTableColumnHead'>#{to_xml(t.children)}</p>"
32
32
  end
33
33
  end
34
34
  end
@@ -45,9 +45,9 @@ module IsoDoc
45
45
 
46
46
  def tbody_head_cleanup(cell)
47
47
  cell.at("./p") or
48
- cell.children = "<p>#{cell.children.to_xml}</p>"
48
+ cell.children = "<p>#{to_xml(cell.children)}</p>"
49
49
  cell.xpath("./p").each do |p|
50
- p.replace p.to_xml.gsub(%r{<br/>}, "</p><p>")
50
+ p.replace to_xml(p).gsub(%r{<br/>}, "</p><p>")
51
51
  end
52
52
  end
53
53
 
@@ -58,7 +58,7 @@ module IsoDoc
58
58
  end
59
59
  else
60
60
  cell.children =
61
- "<p class='#{td_style(cell, 0)}'>#{cell.children.to_xml}</p>"
61
+ "<p class='#{td_style(cell, 0)}'>#{to_xml(cell.children)}</p>"
62
62
  end
63
63
  end
64
64
 
@@ -80,28 +80,28 @@ module IsoDoc
80
80
 
81
81
  def table_caption(docxml)
82
82
  docxml.xpath("//p[@class = 'TableTitle']").each do |s|
83
- s.children = s.children.to_xml
83
+ s.children = to_xml(s.children)
84
84
  .sub(/^#{@i18n.table}(\s+[A-Z0-9.]+)?/, "")
85
85
  end
86
86
  end
87
87
 
88
88
  def figure_caption(docxml)
89
89
  docxml.xpath("//p[@class = 'FigureTitle']").each do |s|
90
- s.children = s.children.to_xml
90
+ s.children = to_xml(s.children)
91
91
  .sub(/^#{@i18n.figure}(\s+[A-Z0-9.]+)?/, "")
92
92
  end
93
93
  end
94
94
 
95
95
  def example_caption(docxml)
96
96
  docxml.xpath("//p[@class = 'example-title']").each do |s|
97
- s.children = "<em>#{s.children.to_xml}</em>"
97
+ s.children = "<em>#{to_xml(s.children)}</em>"
98
98
  s["class"] = "IEEEStdsParagraph"
99
99
  end
100
100
  end
101
101
 
102
102
  def sourcecode_cleanup(docxml)
103
103
  docxml.xpath("//p[@class = 'Sourcecode']").each do |s|
104
- s.replace(s.to_xml.gsub(%r{<br/>}, "</p><p class='Sourcecode'>"))
104
+ s.replace(to_xml(s).gsub(%r{<br/>}, "</p><p class='Sourcecode'>"))
105
105
  end
106
106
  end
107
107
 
@@ -683,6 +683,9 @@
683
683
  </define>
684
684
  <define name="underline">
685
685
  <element name="underline">
686
+ <optional>
687
+ <attribute name="style"/>
688
+ </optional>
686
689
  <zeroOrMore>
687
690
  <ref name="PureTextElement"/>
688
691
  </zeroOrMore>
@@ -47,7 +47,7 @@
47
47
  </element>
48
48
  </define>
49
49
  <define name="DocumentType">
50
- <value>document</value>
50
+ <text/>
51
51
  </define>
52
52
  <define name="docsubtype">
53
53
  <element name="subdoctype">
@@ -2653,6 +2653,7 @@
2653
2653
  <value>full</value>
2654
2654
  <value>short</value>
2655
2655
  <value>id</value>
2656
+ <value>modspec</value>
2656
2657
  </choice>
2657
2658
  </define>
2658
2659
  <define name="erefTypeWithConnective">
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module IEEE
3
- VERSION = "0.1.3".freeze
3
+ VERSION = "1.0.0".freeze
4
4
  end
5
5
  end
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.require_paths = ["lib"]
26
26
  spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
27
27
 
28
- spec.add_dependency "metanorma-standoc", "~> 2.2.4"
28
+ spec.add_dependency "metanorma-standoc", "~> 2.3.0"
29
29
  spec.add_dependency "mnconvert", "~> 1.20"
30
30
 
31
31
  spec.add_development_dependency "debug"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-ieee
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-21 00:00:00.000000000 Z
11
+ date: 2022-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: metanorma-standoc
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.2.4
19
+ version: 2.3.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.2.4
26
+ version: 2.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mnconvert
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -299,7 +299,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
299
299
  - !ruby/object:Gem::Version
300
300
  version: '0'
301
301
  requirements: []
302
- rubygems_version: 3.3.7
302
+ rubygems_version: 3.3.26
303
303
  signing_key:
304
304
  specification_version: 4
305
305
  summary: Metanorma for the IEEE