metanorma-ieee 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c8b36f29257a62401c8357b433057740ec7d9a1a94bf0f1d44916aaf7bcb2ad
4
- data.tar.gz: c1e3293746afb9c5af22399b9cc5c896f92caa2cbca50000802ee401378a3029
3
+ metadata.gz: daaebf8c438f244ad1a0cc4c804f1aac05fcdf3252bb9b2847f0ab056ed5ffc0
4
+ data.tar.gz: 4cf01847b8a56f6e9a520cd7509cc56cec8077d891bef18beed30262688e87bf
5
5
  SHA512:
6
- metadata.gz: d405aac6ed448e8763c5f0de08b8edefffb6a883f394dffb8d59205085d07a0c4436d8ac13c115d84c3258de97205bf28eb3fd2857b675124d9da1966f2784b7
7
- data.tar.gz: c509c9af29dbd57d59189adbd85e636d198c14702dd5cb4f530a6e4af7383066845c04df1b3595a08cc03debdbcf0517acd7b19a62ac37bf6b574a921874461c
6
+ metadata.gz: 8af52bc41555e8ef7ff4f296dd65522cab8896226b9cbdad0b443f49a4a428343c0c205ff733845f8a4e93f707f543e152897b5895456ab2b72494e3c0a2cddc
7
+ data.tar.gz: f2b0d65f7e1e5e853363ac60dd7608b90d04f97368360dd60701e60d115f09d7973bd4791edd76b990f13d5628224c78e0883185743187efb532e1e1a68dad00
@@ -5622,7 +5622,9 @@
5622
5622
  </xsl:template> <!-- license-statement/p -->
5623
5623
 
5624
5624
  <xsl:template match="*[local-name()='legal-statement']">
5625
+ <xsl:param name="isLegacy">false</xsl:param>
5625
5626
  <fo:block xsl:use-attribute-sets="legal-statement-style">
5627
+
5626
5628
  <xsl:apply-templates/>
5627
5629
  </fo:block>
5628
5630
  </xsl:template> <!-- legal-statement -->
@@ -7915,13 +7917,14 @@
7915
7917
  <!-- ================= -->
7916
7918
  <!-- Added,deleted text -->
7917
7919
  <!-- ================= -->
7918
- <xsl:template match="*[local-name()='add']" name="tag_add">
7920
+ <xsl:template match="*[local-name()='add'] | *[local-name() = 'change-open-tag'] | *[local-name() = 'change-close-tag']" name="tag_add">
7919
7921
  <xsl:param name="skip">true</xsl:param>
7920
7922
  <xsl:param name="block">false</xsl:param>
7921
7923
  <xsl:param name="type"/>
7922
7924
  <xsl:param name="text-align"/>
7923
7925
  <xsl:choose>
7924
- <xsl:when test="starts-with(., $ace_tag)"> <!-- examples: ace-tag_A1_start, ace-tag_A2_end, C1_start, AC_start -->
7926
+ <xsl:when test="starts-with(., $ace_tag) or local-name() = 'change-open-tag' or local-name() = 'change-close-tag'"> <!-- examples: ace-tag_A1_start, ace-tag_A2_end, C1_start, AC_start, or
7927
+ <change-open-tag>A<sub>1</sub></change-open-tag>, <change-close-tag>A<sub>1</sub></change-close-tag> -->
7925
7928
  <xsl:choose>
7926
7929
  <xsl:when test="$skip = 'true' and ((local-name(../..) = 'note' and not(preceding-sibling::node())) or (local-name(..) = 'title' and preceding-sibling::node()[1][local-name() = 'tab']) or local-name(..) = 'formattedref' and not(preceding-sibling::node())) and ../node()[last()][local-name() = 'add'][starts-with(text(), $ace_tag)]"><!-- start tag displayed in template name="note" and title --></xsl:when>
7927
7930
  <xsl:otherwise>
@@ -7929,12 +7932,32 @@
7929
7932
  <xsl:call-template name="insertTag">
7930
7933
  <xsl:with-param name="type">
7931
7934
  <xsl:choose>
7935
+ <xsl:when test="local-name() = 'change-open-tag'">start</xsl:when>
7936
+ <xsl:when test="local-name() = 'change-close-tag'">end</xsl:when>
7932
7937
  <xsl:when test="$type = ''"><xsl:value-of select="substring-after(substring-after(., $ace_tag), '_')"/> <!-- start or end --></xsl:when>
7933
7938
  <xsl:otherwise><xsl:value-of select="$type"/></xsl:otherwise>
7934
7939
  </xsl:choose>
7935
7940
  </xsl:with-param>
7936
- <xsl:with-param name="kind" select="substring(substring-before(substring-after(., $ace_tag), '_'), 1, 1)"/> <!-- A or C -->
7937
- <xsl:with-param name="value" select="substring(substring-before(substring-after(., $ace_tag), '_'), 2)"/> <!-- 1, 2, C -->
7941
+ <xsl:with-param name="kind">
7942
+ <xsl:choose>
7943
+ <xsl:when test="local-name() = 'change-open-tag' or local-name() = 'change-close-tag'">
7944
+ <xsl:value-of select="text()"/>
7945
+ </xsl:when>
7946
+ <xsl:otherwise>
7947
+ <xsl:value-of select="substring(substring-before(substring-after(., $ace_tag), '_'), 1, 1)"/> <!-- A or C -->
7948
+ </xsl:otherwise>
7949
+ </xsl:choose>
7950
+ </xsl:with-param>
7951
+ <xsl:with-param name="value">
7952
+ <xsl:choose>
7953
+ <xsl:when test="local-name() = 'change-open-tag' or local-name() = 'change-close-tag'">
7954
+ <xsl:value-of select="*[local-name() = 'sub']"/>
7955
+ </xsl:when>
7956
+ <xsl:otherwise>
7957
+ <xsl:value-of select="substring(substring-before(substring-after(., $ace_tag), '_'), 2)"/> <!-- 1, 2, C -->
7958
+ </xsl:otherwise>
7959
+ </xsl:choose>
7960
+ </xsl:with-param>
7938
7961
  </xsl:call-template>
7939
7962
  </xsl:variable>
7940
7963
  <xsl:choose>
@@ -10144,11 +10167,17 @@
10144
10167
  </xsl:when>
10145
10168
  <xsl:otherwise>
10146
10169
 
10170
+ <xsl:variable name="image_class" select="ancestor::*[local-name() = 'image']/@class"/>
10171
+ <xsl:variable name="ancestor_table_cell" select="normalize-space(ancestor::*[local-name() = 'td'] or ancestor::*[local-name() = 'th'])"/>
10172
+
10147
10173
  <xsl:variable name="element">
10148
10174
  <xsl:choose>
10149
10175
  <xsl:when test="ancestor::*[local-name() = 'tr'] and $isGenerateTableIF = 'true'">
10150
10176
  <fo:inline xsl:use-attribute-sets="image-style" text-align="left"/>
10151
10177
  </xsl:when>
10178
+ <xsl:when test="not(ancestor::*[local-name() = 'figure'])">
10179
+ <fo:inline xsl:use-attribute-sets="image-style" text-align="left"/>
10180
+ </xsl:when>
10152
10181
  <xsl:otherwise>
10153
10182
  <fo:block xsl:use-attribute-sets="image-style">
10154
10183
  <xsl:if test="ancestor::*[local-name() = 'dt']">
@@ -10164,10 +10193,24 @@
10164
10193
  <xsl:copy-of select="@*"/>
10165
10194
  <!-- <fo:block xsl:use-attribute-sets="image-style"> -->
10166
10195
  <fo:instream-foreign-object fox:alt-text="{$alt-text}">
10167
- <xsl:if test="$isGenerateTableIF = 'false'">
10168
- <xsl:attribute name="width">100%</xsl:attribute>
10169
- </xsl:if>
10170
- <xsl:attribute name="content-height">100%</xsl:attribute>
10196
+
10197
+ <xsl:choose>
10198
+ <xsl:when test="$image_class = 'corrigenda-tag'">
10199
+ <xsl:attribute name="fox:alt-text">CorrigendaTag</xsl:attribute>
10200
+ <xsl:attribute name="baseline-shift">-10%</xsl:attribute>
10201
+ <xsl:if test="$ancestor_table_cell = 'true'">
10202
+ <xsl:attribute name="baseline-shift">-25%</xsl:attribute>
10203
+ </xsl:if>
10204
+ <xsl:attribute name="height">3.5mm</xsl:attribute>
10205
+ </xsl:when>
10206
+ <xsl:otherwise>
10207
+ <xsl:if test="$isGenerateTableIF = 'false'">
10208
+ <xsl:attribute name="width">100%</xsl:attribute>
10209
+ </xsl:if>
10210
+ <xsl:attribute name="content-height">100%</xsl:attribute>
10211
+ </xsl:otherwise>
10212
+ </xsl:choose>
10213
+
10171
10214
  <xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute>
10172
10215
  <xsl:variable name="svg_width" select="xalan:nodeset($svg_content)/*/@width"/>
10173
10216
  <xsl:variable name="svg_height" select="xalan:nodeset($svg_content)/*/@height"/>
@@ -12364,13 +12407,19 @@
12364
12407
  <fo:block id="{@id}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
12365
12408
  </xsl:when>
12366
12409
  <!-- if there isn't element with id 'from', then create 'bookmark' here -->
12367
- <xsl:when test="not(ancestor::*[contains(local-name(), '-standard')]//*[@id = $id_from])">
12410
+ <xsl:when test="ancestor::*[contains(local-name(), '-standard')] and not(ancestor::*[contains(local-name(), '-standard')]//*[@id = $id_from])">
12411
+ <fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
12412
+ </xsl:when>
12413
+ <xsl:when test="not(//*[@id = $id_from]) and not(preceding-sibling::*[@id = $id_from])">
12368
12414
  <fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
12369
12415
  </xsl:when>
12370
12416
  </xsl:choose>
12371
12417
 
12372
12418
  </xsl:template>
12373
12419
 
12420
+ <!-- https://github.com/metanorma/mn-samples-bsi/issues/312 -->
12421
+ <xsl:template match="*[local-name() = 'review'][@type = 'other']"/>
12422
+
12374
12423
  <xsl:template match="*[local-name() = 'name']/text()">
12375
12424
  <!-- 0xA0 to space replacement -->
12376
12425
  <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),' ',' ')"/>
@@ -14137,7 +14186,7 @@
14137
14186
 
14138
14187
  <xsl:template name="printEdition">
14139
14188
  <xsl:variable name="edition_i18n" select="normalize-space((//*[contains(local-name(), '-standard')])[1]/*[local-name() = 'bibdata']/*[local-name() = 'edition'][normalize-space(@language) != ''])"/>
14140
- <xsl:text> </xsl:text>
14189
+
14141
14190
  <xsl:choose>
14142
14191
  <xsl:when test="$edition_i18n != ''">
14143
14192
  <!-- Example: <edition language="fr">deuxième édition</edition> -->
@@ -5622,7 +5622,9 @@
5622
5622
  </xsl:template> <!-- license-statement/p -->
5623
5623
 
5624
5624
  <xsl:template match="*[local-name()='legal-statement']">
5625
+ <xsl:param name="isLegacy">false</xsl:param>
5625
5626
  <fo:block xsl:use-attribute-sets="legal-statement-style">
5627
+
5626
5628
  <xsl:apply-templates/>
5627
5629
  </fo:block>
5628
5630
  </xsl:template> <!-- legal-statement -->
@@ -7915,13 +7917,14 @@
7915
7917
  <!-- ================= -->
7916
7918
  <!-- Added,deleted text -->
7917
7919
  <!-- ================= -->
7918
- <xsl:template match="*[local-name()='add']" name="tag_add">
7920
+ <xsl:template match="*[local-name()='add'] | *[local-name() = 'change-open-tag'] | *[local-name() = 'change-close-tag']" name="tag_add">
7919
7921
  <xsl:param name="skip">true</xsl:param>
7920
7922
  <xsl:param name="block">false</xsl:param>
7921
7923
  <xsl:param name="type"/>
7922
7924
  <xsl:param name="text-align"/>
7923
7925
  <xsl:choose>
7924
- <xsl:when test="starts-with(., $ace_tag)"> <!-- examples: ace-tag_A1_start, ace-tag_A2_end, C1_start, AC_start -->
7926
+ <xsl:when test="starts-with(., $ace_tag) or local-name() = 'change-open-tag' or local-name() = 'change-close-tag'"> <!-- examples: ace-tag_A1_start, ace-tag_A2_end, C1_start, AC_start, or
7927
+ <change-open-tag>A<sub>1</sub></change-open-tag>, <change-close-tag>A<sub>1</sub></change-close-tag> -->
7925
7928
  <xsl:choose>
7926
7929
  <xsl:when test="$skip = 'true' and ((local-name(../..) = 'note' and not(preceding-sibling::node())) or (local-name(..) = 'title' and preceding-sibling::node()[1][local-name() = 'tab']) or local-name(..) = 'formattedref' and not(preceding-sibling::node())) and ../node()[last()][local-name() = 'add'][starts-with(text(), $ace_tag)]"><!-- start tag displayed in template name="note" and title --></xsl:when>
7927
7930
  <xsl:otherwise>
@@ -7929,12 +7932,32 @@
7929
7932
  <xsl:call-template name="insertTag">
7930
7933
  <xsl:with-param name="type">
7931
7934
  <xsl:choose>
7935
+ <xsl:when test="local-name() = 'change-open-tag'">start</xsl:when>
7936
+ <xsl:when test="local-name() = 'change-close-tag'">end</xsl:when>
7932
7937
  <xsl:when test="$type = ''"><xsl:value-of select="substring-after(substring-after(., $ace_tag), '_')"/> <!-- start or end --></xsl:when>
7933
7938
  <xsl:otherwise><xsl:value-of select="$type"/></xsl:otherwise>
7934
7939
  </xsl:choose>
7935
7940
  </xsl:with-param>
7936
- <xsl:with-param name="kind" select="substring(substring-before(substring-after(., $ace_tag), '_'), 1, 1)"/> <!-- A or C -->
7937
- <xsl:with-param name="value" select="substring(substring-before(substring-after(., $ace_tag), '_'), 2)"/> <!-- 1, 2, C -->
7941
+ <xsl:with-param name="kind">
7942
+ <xsl:choose>
7943
+ <xsl:when test="local-name() = 'change-open-tag' or local-name() = 'change-close-tag'">
7944
+ <xsl:value-of select="text()"/>
7945
+ </xsl:when>
7946
+ <xsl:otherwise>
7947
+ <xsl:value-of select="substring(substring-before(substring-after(., $ace_tag), '_'), 1, 1)"/> <!-- A or C -->
7948
+ </xsl:otherwise>
7949
+ </xsl:choose>
7950
+ </xsl:with-param>
7951
+ <xsl:with-param name="value">
7952
+ <xsl:choose>
7953
+ <xsl:when test="local-name() = 'change-open-tag' or local-name() = 'change-close-tag'">
7954
+ <xsl:value-of select="*[local-name() = 'sub']"/>
7955
+ </xsl:when>
7956
+ <xsl:otherwise>
7957
+ <xsl:value-of select="substring(substring-before(substring-after(., $ace_tag), '_'), 2)"/> <!-- 1, 2, C -->
7958
+ </xsl:otherwise>
7959
+ </xsl:choose>
7960
+ </xsl:with-param>
7938
7961
  </xsl:call-template>
7939
7962
  </xsl:variable>
7940
7963
  <xsl:choose>
@@ -10144,11 +10167,17 @@
10144
10167
  </xsl:when>
10145
10168
  <xsl:otherwise>
10146
10169
 
10170
+ <xsl:variable name="image_class" select="ancestor::*[local-name() = 'image']/@class"/>
10171
+ <xsl:variable name="ancestor_table_cell" select="normalize-space(ancestor::*[local-name() = 'td'] or ancestor::*[local-name() = 'th'])"/>
10172
+
10147
10173
  <xsl:variable name="element">
10148
10174
  <xsl:choose>
10149
10175
  <xsl:when test="ancestor::*[local-name() = 'tr'] and $isGenerateTableIF = 'true'">
10150
10176
  <fo:inline xsl:use-attribute-sets="image-style" text-align="left"/>
10151
10177
  </xsl:when>
10178
+ <xsl:when test="not(ancestor::*[local-name() = 'figure'])">
10179
+ <fo:inline xsl:use-attribute-sets="image-style" text-align="left"/>
10180
+ </xsl:when>
10152
10181
  <xsl:otherwise>
10153
10182
  <fo:block xsl:use-attribute-sets="image-style">
10154
10183
  <xsl:if test="ancestor::*[local-name() = 'dt']">
@@ -10164,10 +10193,24 @@
10164
10193
  <xsl:copy-of select="@*"/>
10165
10194
  <!-- <fo:block xsl:use-attribute-sets="image-style"> -->
10166
10195
  <fo:instream-foreign-object fox:alt-text="{$alt-text}">
10167
- <xsl:if test="$isGenerateTableIF = 'false'">
10168
- <xsl:attribute name="width">100%</xsl:attribute>
10169
- </xsl:if>
10170
- <xsl:attribute name="content-height">100%</xsl:attribute>
10196
+
10197
+ <xsl:choose>
10198
+ <xsl:when test="$image_class = 'corrigenda-tag'">
10199
+ <xsl:attribute name="fox:alt-text">CorrigendaTag</xsl:attribute>
10200
+ <xsl:attribute name="baseline-shift">-10%</xsl:attribute>
10201
+ <xsl:if test="$ancestor_table_cell = 'true'">
10202
+ <xsl:attribute name="baseline-shift">-25%</xsl:attribute>
10203
+ </xsl:if>
10204
+ <xsl:attribute name="height">3.5mm</xsl:attribute>
10205
+ </xsl:when>
10206
+ <xsl:otherwise>
10207
+ <xsl:if test="$isGenerateTableIF = 'false'">
10208
+ <xsl:attribute name="width">100%</xsl:attribute>
10209
+ </xsl:if>
10210
+ <xsl:attribute name="content-height">100%</xsl:attribute>
10211
+ </xsl:otherwise>
10212
+ </xsl:choose>
10213
+
10171
10214
  <xsl:attribute name="content-width">scale-down-to-fit</xsl:attribute>
10172
10215
  <xsl:variable name="svg_width" select="xalan:nodeset($svg_content)/*/@width"/>
10173
10216
  <xsl:variable name="svg_height" select="xalan:nodeset($svg_content)/*/@height"/>
@@ -12364,13 +12407,19 @@
12364
12407
  <fo:block id="{@id}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
12365
12408
  </xsl:when>
12366
12409
  <!-- if there isn't element with id 'from', then create 'bookmark' here -->
12367
- <xsl:when test="not(ancestor::*[contains(local-name(), '-standard')]//*[@id = $id_from])">
12410
+ <xsl:when test="ancestor::*[contains(local-name(), '-standard')] and not(ancestor::*[contains(local-name(), '-standard')]//*[@id = $id_from])">
12411
+ <fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
12412
+ </xsl:when>
12413
+ <xsl:when test="not(//*[@id = $id_from]) and not(preceding-sibling::*[@id = $id_from])">
12368
12414
  <fo:block id="{@from}" font-size="1pt"><xsl:value-of select="$hair_space"/></fo:block>
12369
12415
  </xsl:when>
12370
12416
  </xsl:choose>
12371
12417
 
12372
12418
  </xsl:template>
12373
12419
 
12420
+ <!-- https://github.com/metanorma/mn-samples-bsi/issues/312 -->
12421
+ <xsl:template match="*[local-name() = 'review'][@type = 'other']"/>
12422
+
12374
12423
  <xsl:template match="*[local-name() = 'name']/text()">
12375
12424
  <!-- 0xA0 to space replacement -->
12376
12425
  <xsl:value-of select="java:replaceAll(java:java.lang.String.new(.),' ',' ')"/>
@@ -14137,7 +14186,7 @@
14137
14186
 
14138
14187
  <xsl:template name="printEdition">
14139
14188
  <xsl:variable name="edition_i18n" select="normalize-space((//*[contains(local-name(), '-standard')])[1]/*[local-name() = 'bibdata']/*[local-name() = 'edition'][normalize-space(@language) != ''])"/>
14140
- <xsl:text> </xsl:text>
14189
+
14141
14190
  <xsl:choose>
14142
14191
  <xsl:when test="$edition_i18n != ''">
14143
14192
  <!-- Example: <edition language="fr">deuxième édition</edition> -->
@@ -17,8 +17,7 @@ module IsoDoc
17
17
  end
18
18
 
19
19
  def ddMMMyyyy(isodate)
20
- return nil if isodate.nil?
21
-
20
+ isodate.nil? and return nil
22
21
  arr = isodate.split("-")
23
22
  if arr.size == 1 && (/^\d+$/.match isodate)
24
23
  Date.new(*arr.map(&:to_i)).strftime("%Y")
@@ -62,11 +61,17 @@ module IsoDoc
62
61
  key = ""
63
62
  map = list.xpath(ns(".//dt | .//dd")).each_with_object({}) do |dtd, m|
64
63
  (dtd.name == "dt" and key = dtd.text) or
65
- m[key] = @c.encode(dtd.text.strip, :hexadecimal)
64
+ m[key] = text_from_paras(dtd)
65
+ .gsub(/\*/, "<span class='cite_fn'>*</span>")
66
66
  end
67
67
  list.replace(participant_para(map, idx))
68
68
  end
69
69
 
70
+ def text_from_paras(node)
71
+ r = node.at(ns("./p")) and node = r
72
+ node.children.to_xml.strip
73
+ end
74
+
70
75
  def participant_para(map, idx)
71
76
  name = participant_name(map)
72
77
  if map["role"]&.casecmp("member")&.zero?
@@ -89,7 +94,7 @@ module IsoDoc
89
94
  name = "<strong>#{name}</strong>" if idx.zero?
90
95
  br = map["role"].size > 30 ? "<br/>" : ""
91
96
  "<p type='officeholder' align='center'>#{name}, #{br}" \
92
- "<em>#{map['role']}</em></p>"
97
+ "<em><span class='au_role'>#{map['role']}</span></em></p>"
93
98
  end
94
99
 
95
100
  def participant_name(map)
@@ -134,6 +134,8 @@ module IsoDoc
134
134
  table_columnhead: "IEEEStdsTableColumnHead",
135
135
  nameslist: "IEEEStdsNamesList",
136
136
  intro: "IEEEStdsIntroduction",
137
+ surname: "au_surname",
138
+ forename: "au_fname",
137
139
  }
138
140
  end
139
141
 
@@ -244,6 +244,9 @@
244
244
  <data type="ID"/>
245
245
  </attribute>
246
246
  <attribute name="reviewer"/>
247
+ <optional>
248
+ <attribute name="type"/>
249
+ </optional>
247
250
  <optional>
248
251
  <attribute name="date">
249
252
  <data type="dateTime"/>
@@ -382,7 +382,7 @@ role::: Member
382
382
  ++++
383
383
 
384
384
  [type=emeritus_sign]
385
- *Member Emeritus
385
+ span:cite_fn[*]Member Emeritus
386
386
 
387
387
  == feedback-statement
388
388
  === {blank}
@@ -190,14 +190,13 @@ module Metanorma
190
190
 
191
191
  def populate_participants2(list)
192
192
  curr = list
193
- p = curr.at("./p") and curr = p
193
+ p = curr.at("./p[text() != '']") and curr = p
194
194
  if dl = curr.at("./dl")
195
195
  ret = extract_participants(dl)
196
196
  dl.children = ret.keys.map do |k|
197
197
  "<dt>#{k}</dt><dd><p>#{ret[k]}</p></dd>"
198
198
  end.join
199
- else
200
- list.children = "<dl><dt>name</dt><dd><p>#{curr.children.to_xml}" \
199
+ else list.children = "<dl><dt>name</dt><dd><p>#{curr.children.to_xml}" \
201
200
  "</p></dd><dt>role</dt><dd><p>member</p></dd></dl>"
202
201
  end
203
202
  end
@@ -206,13 +205,18 @@ module Metanorma
206
205
  key = ""
207
206
  map = dlist.xpath("./dt | ./dd").each_with_object({}) do |dtd, m|
208
207
  (dtd.name == "dt" and key = dtd.text.sub(/:+$/, "")) or
209
- m[key.strip.downcase] =
210
- @c.encode(@c.decode(dtd.text.strip), :hexadecimal)
208
+ m[key.strip.downcase] = text_from_paras(dtd)
211
209
  end
210
+ map["company"] &&= "<span class='organization'>#{map['company']}</span>"
212
211
  map["role"] ||= "member"
213
212
  map
214
213
  end
215
214
 
215
+ def text_from_paras(node)
216
+ r = node.at("./p") and node = r
217
+ node.children.to_xml.strip
218
+ end
219
+
216
220
  def bibdata_cleanup(xmldoc)
217
221
  super
218
222
  provenance_title(xmldoc)
@@ -1,4 +1,5 @@
1
1
  require "isoics"
2
+ require "pubid-ieee"
2
3
 
3
4
  module Metanorma
4
5
  module IEEE
@@ -16,7 +17,8 @@ module Metanorma
16
17
  def metadata_committee_prep(node)
17
18
  node.attr("doctype") == "whitepaper" &&
18
19
  node.attr("docsubtype") == "industry-connection-report" and
19
- node.set_attr("working-group", "IEEE SA Industry Connections activity")
20
+ node.set_attr("working-group",
21
+ "IEEE SA Industry Connections activity")
20
22
  node.attr("committee") || node.attr("society") ||
21
23
  node.attr("working-group") or return
22
24
  node.attr("balloting-group") && !node.attr("balloting-group-type") and
@@ -32,8 +34,10 @@ module Metanorma
32
34
  end
33
35
 
34
36
  def metadata_id(node, xml)
35
- id = node.attr("docnumber") || ""
36
- xml.docidentifier (node.attr("docidentifier") || id), type: "IEEE"
37
+ if id = node.attr("docidentifier")
38
+ xml.docidentifier id, **attr_code(type: "IEEE")
39
+ else ieee_id(node, xml)
40
+ end
37
41
  id = node.attr("stdid-pdf") and
38
42
  xml.docidentifier id, type: "IEEE", scope: "PDF"
39
43
  id = node.attr("stdid-print") and
@@ -41,6 +45,65 @@ module Metanorma
41
45
  xml.docnumber node.attr("docnumber")
42
46
  end
43
47
 
48
+ def ieee_id(node, xml)
49
+ params = ieee_id_params(node)
50
+ params[:number] or return
51
+ ieee_id_out(xml, params)
52
+ end
53
+
54
+ def ieee_id_params(node)
55
+ core = ieee_id_params_core(node)
56
+ amd = ieee_id_params_amd(node, core) || {}
57
+ core.merge(amd)
58
+ end
59
+
60
+ def ieee_id_params_core(node)
61
+ pub = ieee_id_pub(node)
62
+ ret = { number: node.attr("docnumber"),
63
+ part: node.attr("partnumber"),
64
+ year: ieee_id_year(node, initial: true),
65
+ redline: @doctype == "redline",
66
+ publisher: pub[0],
67
+ copublisher: pub[1..-1] }.compact
68
+ ret[:copublisher].empty? and ret.delete(:copublisher)
69
+ ret
70
+ end
71
+
72
+ def ieee_id_params_amd(node, core)
73
+ if a = node.attr("corrigendum-number")
74
+ { corrigendum: { version: a,
75
+ year: ieee_id_year(node, initial: false) } }
76
+ elsif node.attr("amendment-number")
77
+ { amendment: pubid_select(core).create(**core) }
78
+ end
79
+ end
80
+
81
+ def ieee_id_pub(node)
82
+ (node.attr("publisher") || default_publisher).split(/[;,]/)
83
+ .map(&:strip).map { |x| org_abbrev[x] || x }
84
+ end
85
+
86
+ def ieee_id_year(node, initial: false)
87
+ unless initial
88
+ y = node.attr("copyright-year") || node.attr("updated-date")
89
+ end
90
+ y ||= node.attr("published-date") || node.attr("copyright-year")
91
+ y&.sub(/-.*$/, "") || Date.today.year
92
+ end
93
+
94
+ def ieee_id_out(xml, params)
95
+ id = pubid_select(params).create(**params)
96
+ xml.docidentifier id.to_s, type: "IEEE"
97
+ end
98
+
99
+ def pubid_select(_params)
100
+ base_pubid
101
+ end
102
+
103
+ def base_pubid
104
+ Pubid::Ieee::Identifier
105
+ end
106
+
44
107
  def default_publisher
45
108
  "IEEE"
46
109
  end
@@ -63,7 +126,9 @@ module Metanorma
63
126
  end
64
127
 
65
128
  def org_abbrev
66
- { "Institute of Electrical and Electronic Engineers" => "IEEE" }
129
+ { "Institute of Electrical and Electronic Engineers" => "IEEE",
130
+ "International Organization for Standardization" => "ISO",
131
+ "International Electrotechnical Commission" => "IEC" }
67
132
  end
68
133
 
69
134
  def relaton_relations
@@ -17,7 +17,7 @@
17
17
  these elements; we just want one namespace for any child grammars
18
18
  of this.
19
19
  -->
20
- <!-- VERSION v1.2.12 -->
20
+ <!-- VERSION v1.3.0 -->
21
21
  <grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
22
22
  <include href="reqt.rng"/>
23
23
  <include href="basicdoc.rng">
@@ -146,6 +146,9 @@
146
146
  <data type="boolean"/>
147
147
  </attribute>
148
148
  </optional>
149
+ <optional>
150
+ <attribute name="style"/>
151
+ </optional>
149
152
  <oneOrMore>
150
153
  <ref name="PureTextElement"/>
151
154
  </oneOrMore>
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module IEEE
3
- VERSION = "1.2.0".freeze
3
+ VERSION = "1.2.1".freeze
4
4
  end
5
5
  end
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_dependency "metanorma-standoc", "~> 2.8.0"
29
29
  spec.add_dependency "mnconvert", "~> 1.20"
30
- #spec.add_dependency "pubid-ieee", "~> 0.1.1"
30
+ spec.add_dependency "pubid-ieee"
31
31
  #spec.add_dependency "pubid-iso", "~> 0.5.3"
32
32
  #spec.add_dependency "relaton-iso", "~> 1.15.4"
33
33
 
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: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-09 00:00:00.000000000 Z
11
+ date: 2024-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: metanorma-standoc
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.20'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pubid-ieee
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: debug
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -252,11 +266,14 @@ files:
252
266
  - lib/isodoc/ieee/html/wordstyle_wp.scss
253
267
  - lib/isodoc/ieee/html/wp_image001.emz
254
268
  - lib/isodoc/ieee/html/wp_image001_icap.emz
269
+ - lib/isodoc/ieee/html/wp_image001_icr.emz
255
270
  - lib/isodoc/ieee/html/wp_image003.emz
256
271
  - lib/isodoc/ieee/html/wp_image003_icap.emz
272
+ - lib/isodoc/ieee/html/wp_image003_icr.emz
257
273
  - lib/isodoc/ieee/html/wp_image007_icr.emz
258
274
  - lib/isodoc/ieee/html/wp_image008.emz
259
275
  - lib/isodoc/ieee/html/wp_image008_icap.emz
276
+ - lib/isodoc/ieee/html/wp_image008_icr.emz
260
277
  - lib/isodoc/ieee/html_convert.rb
261
278
  - lib/isodoc/ieee/i18n-en.yaml
262
279
  - lib/isodoc/ieee/i18n.rb