metanorma-ieee 1.0.15 → 1.1.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 +4 -4
- data/lib/isodoc/ieee/base_convert.rb +11 -6
- data/lib/isodoc/ieee/html/htmlstyle.css +8 -8
- data/lib/isodoc/ieee/html/htmlstyle.scss +8 -8
- data/lib/isodoc/ieee/html/wordstyle.css +15 -15
- data/lib/isodoc/ieee/html/wordstyle.scss +15 -15
- data/lib/isodoc/ieee/ieee.amendment.xsl +109 -51
- data/lib/isodoc/ieee/ieee.standard.xsl +109 -51
- data/lib/isodoc/ieee/init.rb +41 -0
- data/lib/isodoc/ieee/presentation_bibdata.rb +100 -0
- data/lib/isodoc/ieee/presentation_ref.rb +5 -1
- data/lib/isodoc/ieee/presentation_xml_convert.rb +21 -113
- data/lib/isodoc/ieee/word_convert.rb +14 -13
- data/lib/isodoc/ieee/xref.rb +14 -24
- data/lib/metanorma/ieee/isodoc.rng +29 -4
- data/lib/metanorma/ieee/version.rb +1 -1
- data/metanorma-ieee.gemspec +1 -1
- metadata +5 -4
@@ -1061,23 +1061,22 @@
|
|
1061
1061
|
<fo:flow flow-name="xsl-region-body">
|
1062
1062
|
<!-- debugpage=<xsl:copy-of select="."/> -->
|
1063
1063
|
|
1064
|
-
<xsl:if test="position() = 1">
|
1065
|
-
|
1064
|
+
<!-- <xsl:if test="position() = 1">
|
1065
|
+
|
1066
1066
|
<xsl:choose>
|
1067
1067
|
<xsl:when test="$current_template = 'draft'">
|
1068
1068
|
<fo:block font-family="Arial" font-size="23pt" font-weight="bold" margin-top="70pt" margin-bottom="48pt">
|
1069
|
-
|
1069
|
+
|
1070
1070
|
<xsl:if test="contains('amendment corrigendum erratum', $subdoctype) and $subdoctype != ''">
|
1071
1071
|
<xsl:attribute name="font-size">24pt</xsl:attribute>
|
1072
1072
|
</xsl:if>
|
1073
|
-
|
1073
|
+
|
1074
1074
|
<xsl:copy-of select="$title_prefix"/>
|
1075
1075
|
<xsl:copy-of select="$title"/>
|
1076
|
-
|
1077
|
-
<!-- <xsl:copy-of select="$draft_title_part"/> -->
|
1076
|
+
|
1078
1077
|
</fo:block>
|
1079
1078
|
</xsl:when>
|
1080
|
-
|
1079
|
+
|
1081
1080
|
<xsl:when test="$current_template = 'standard'">
|
1082
1081
|
<fo:block font-family="Arial" font-weight="bold" margin-top="13mm" space-after="12pt">
|
1083
1082
|
<fo:block font-weight="bold" space-before="13mm">
|
@@ -1085,30 +1084,21 @@
|
|
1085
1084
|
</fo:block>
|
1086
1085
|
</fo:block>
|
1087
1086
|
</xsl:when>
|
1087
|
+
|
1088
|
+
<xsl:otherwise> --><!-- $current_template = 'whitepaper' or $current_template = 'icap-whitepaper' or $current_template = 'industry-connection-report' -->
|
1088
1089
|
|
1089
|
-
|
1090
|
-
|
1091
|
-
<xsl:attribute name="font-family">Calibri Light</xsl:attribute>
|
1090
|
+
<!-- <xsl:attribute name="font-family">Calibri Light</xsl:attribute>
|
1092
1091
|
<xsl:attribute name="font-size">12pt</xsl:attribute>
|
1093
|
-
|
1092
|
+
|
1094
1093
|
<fo:block font-family="Arial Black" font-size="20pt" margin-top="18pt">
|
1095
1094
|
<xsl:copy-of select="$title"/>
|
1096
|
-
<!-- <xsl:copy-of select="$draft_title_part"/> -->
|
1097
1095
|
</fo:block>
|
1098
1096
|
<xsl:call-template name="addBlueBox"/>
|
1099
|
-
|
1100
|
-
<fo:instream-foreign-object content-width="57mm" content-height="3mm" scaling="non-uniform" fox:alt-text="Image Box">
|
1101
|
-
<xsl:call-template name="insertImageBoxSVG">
|
1102
|
-
<xsl:with-param name="color"><xsl:value-of select="$color_blue"/></xsl:with-param>
|
1103
|
-
</xsl:call-template>
|
1104
|
-
</fo:instream-foreign-object>
|
1105
|
-
</fo:block>
|
1106
|
-
<fo:block margin-top="12pt" margin-bottom="12pt"> </fo:block> -->
|
1107
|
-
<fo:block margin-bottom="12pt"> </fo:block>
|
1097
|
+
<fo:block margin-bottom="12pt"> </fo:block>
|
1108
1098
|
</xsl:otherwise>
|
1109
1099
|
</xsl:choose>
|
1110
|
-
|
1111
|
-
</xsl:if>
|
1100
|
+
|
1101
|
+
</xsl:if> -->
|
1112
1102
|
|
1113
1103
|
<xsl:apply-templates select="*" mode="page"/>
|
1114
1104
|
<xsl:if test="position() = last()"><fo:block id="lastBlockMain"/></xsl:if>
|
@@ -1736,6 +1726,32 @@
|
|
1736
1726
|
</xsl:choose>
|
1737
1727
|
</xsl:template>
|
1738
1728
|
|
1729
|
+
<xsl:template match="ieee:p[@class = 'zzSTDTitle1']" priority="4">
|
1730
|
+
<xsl:choose>
|
1731
|
+
<xsl:when test="$current_template = 'draft'">
|
1732
|
+
<fo:block font-family="Arial" font-size="23pt" font-weight="bold" margin-top="70pt" margin-bottom="48pt">
|
1733
|
+
<xsl:if test="contains('amendment corrigendum erratum', $subdoctype) and $subdoctype != ''">
|
1734
|
+
<xsl:attribute name="font-size">24pt</xsl:attribute>
|
1735
|
+
</xsl:if>
|
1736
|
+
<xsl:apply-templates/>
|
1737
|
+
</fo:block>
|
1738
|
+
</xsl:when>
|
1739
|
+
<xsl:when test="$current_template = 'standard'">
|
1740
|
+
<fo:block font-family="Arial" font-weight="bold" margin-top="13mm" space-after="12pt">
|
1741
|
+
<xsl:apply-templates/>
|
1742
|
+
</fo:block>
|
1743
|
+
</xsl:when>
|
1744
|
+
<xsl:otherwise> <!-- $current_template = 'whitepaper' or $current_template = 'icap-whitepaper' or $current_template = 'industry-connection-report' -->
|
1745
|
+
|
1746
|
+
<fo:block font-family="Arial Black" font-size="20pt" margin-top="18pt">
|
1747
|
+
<xsl:apply-templates/>
|
1748
|
+
</fo:block>
|
1749
|
+
<xsl:call-template name="addBlueBox"/>
|
1750
|
+
<fo:block margin-bottom="12pt"> </fo:block>
|
1751
|
+
</xsl:otherwise>
|
1752
|
+
</xsl:choose>
|
1753
|
+
</xsl:template>
|
1754
|
+
|
1739
1755
|
<xsl:template match="node()">
|
1740
1756
|
<xsl:apply-templates/>
|
1741
1757
|
</xsl:template>
|
@@ -4056,11 +4072,26 @@
|
|
4056
4072
|
<xsl:value-of select="$font_extended"/><xsl:text>, </xsl:text>
|
4057
4073
|
</xsl:if>
|
4058
4074
|
|
4059
|
-
<xsl:
|
4075
|
+
<xsl:variable name="font_family" select="."/>
|
4060
4076
|
|
4061
|
-
<xsl:
|
4062
|
-
<xsl:
|
4063
|
-
|
4077
|
+
<xsl:choose>
|
4078
|
+
<xsl:when test="$additional_fonts = ''">
|
4079
|
+
<xsl:value-of select="$font_family"/>
|
4080
|
+
</xsl:when>
|
4081
|
+
<xsl:otherwise> <!-- $additional_fonts != '' -->
|
4082
|
+
<xsl:choose>
|
4083
|
+
<xsl:when test="contains($font_family, ',')">
|
4084
|
+
<xsl:value-of select="substring-before($font_family, ',')"/>
|
4085
|
+
<xsl:text>, </xsl:text><xsl:value-of select="$additional_fonts"/>
|
4086
|
+
<xsl:text>, </xsl:text><xsl:value-of select="substring-after($font_family, ',')"/>
|
4087
|
+
</xsl:when>
|
4088
|
+
<xsl:otherwise>
|
4089
|
+
<xsl:value-of select="$font_family"/>
|
4090
|
+
<xsl:text>, </xsl:text><xsl:value-of select="$additional_fonts"/>
|
4091
|
+
</xsl:otherwise>
|
4092
|
+
</xsl:choose>
|
4093
|
+
</xsl:otherwise>
|
4094
|
+
</xsl:choose>
|
4064
4095
|
</xsl:attribute>
|
4065
4096
|
</xsl:when>
|
4066
4097
|
<xsl:otherwise>
|
@@ -6668,21 +6699,21 @@
|
|
6668
6699
|
|
6669
6700
|
<xsl:template match="*[local-name()='table']/*[local-name()='note' or local-name() = 'example']" priority="2">
|
6670
6701
|
|
6671
|
-
|
6702
|
+
<fo:block xsl:use-attribute-sets="table-note-style">
|
6672
6703
|
|
6673
|
-
|
6704
|
+
<xsl:call-template name="refine_table-note-style"/>
|
6674
6705
|
|
6675
|
-
|
6676
|
-
|
6706
|
+
<!-- Table's note/example name (NOTE, for example) -->
|
6707
|
+
<fo:inline xsl:use-attribute-sets="table-note-name-style">
|
6677
6708
|
|
6678
|
-
|
6709
|
+
<xsl:call-template name="refine_table-note-name-style"/>
|
6679
6710
|
|
6680
|
-
|
6711
|
+
<xsl:apply-templates select="*[local-name() = 'name']"/>
|
6681
6712
|
|
6682
|
-
|
6713
|
+
</fo:inline>
|
6683
6714
|
|
6684
|
-
|
6685
|
-
|
6715
|
+
<xsl:apply-templates select="node()[not(local-name() = 'name')]"/>
|
6716
|
+
</fo:block>
|
6686
6717
|
|
6687
6718
|
</xsl:template> <!-- table/note -->
|
6688
6719
|
|
@@ -7747,6 +7778,9 @@
|
|
7747
7778
|
<!-- END Definition List -->
|
7748
7779
|
<!-- ===================== -->
|
7749
7780
|
|
7781
|
+
<!-- default: ignore title in sections/p -->
|
7782
|
+
<xsl:template match="*[local-name() = 'sections']/*[local-name() = 'p'][starts-with(@class, 'zzSTDTitle')]" priority="3"/>
|
7783
|
+
|
7750
7784
|
<!-- ========================= -->
|
7751
7785
|
<!-- Rich text formatting -->
|
7752
7786
|
<!-- ========================= -->
|
@@ -9797,8 +9831,12 @@
|
|
9797
9831
|
<xsl:variable name="isAdded" select="../@added"/>
|
9798
9832
|
<xsl:variable name="isDeleted" select="../@deleted"/>
|
9799
9833
|
<xsl:choose>
|
9800
|
-
<xsl:when test="ancestor::*[local-name() = 'title']">
|
9834
|
+
<xsl:when test="ancestor::*[local-name() = 'title'] or not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']">
|
9801
9835
|
<fo:inline padding-left="1mm" padding-right="1mm">
|
9836
|
+
<xsl:if test="not(parent::*[local-name() = 'figure']) or parent::*[local-name() = 'p']">
|
9837
|
+
<xsl:attribute name="padding-left">0mm</xsl:attribute>
|
9838
|
+
<xsl:attribute name="padding-right">0mm</xsl:attribute>
|
9839
|
+
</xsl:if>
|
9802
9840
|
<xsl:variable name="src">
|
9803
9841
|
<xsl:call-template name="image_src"/>
|
9804
9842
|
</xsl:variable>
|
@@ -9831,25 +9869,45 @@
|
|
9831
9869
|
<fo:external-graphic src="{$src}" fox:alt-text="Image {@alt}" xsl:use-attribute-sets="image-graphic-style">
|
9832
9870
|
<xsl:if test="not(@mimetype = 'image/svg+xml') and ../*[local-name() = 'name'] and not(ancestor::*[local-name() = 'table'])">
|
9833
9871
|
|
9834
|
-
<xsl:
|
9835
|
-
<xsl:
|
9836
|
-
<xsl:
|
9837
|
-
|
9838
|
-
|
9839
|
-
</xsl:variable>
|
9872
|
+
<xsl:if test="@width != '' and @width != 'auto' and @width != 'text-width' and @width != 'full-page-width' and @width != 'narrow'">
|
9873
|
+
<xsl:attribute name="width">
|
9874
|
+
<xsl:value-of select="@width"/>
|
9875
|
+
</xsl:attribute>
|
9876
|
+
</xsl:if>
|
9840
9877
|
|
9841
|
-
<xsl:
|
9878
|
+
<xsl:if test="@height != '' and @height != 'auto'">
|
9879
|
+
<xsl:attribute name="height">
|
9880
|
+
<xsl:value-of select="@height"/>
|
9881
|
+
</xsl:attribute>
|
9882
|
+
</xsl:if>
|
9842
9883
|
|
9843
|
-
|
9884
|
+
<xsl:choose>
|
9885
|
+
<xsl:when test="@width != '' and @width != 'auto' and @height != '' and @height != 'auto'">
|
9886
|
+
<xsl:attribute name="scaling">non-uniform</xsl:attribute>
|
9887
|
+
</xsl:when>
|
9888
|
+
<xsl:otherwise>
|
9844
9889
|
|
9845
|
-
|
9890
|
+
<xsl:variable name="img_src">
|
9891
|
+
<xsl:choose>
|
9892
|
+
<xsl:when test="not(starts-with(@src, 'data:'))"><xsl:value-of select="concat($basepath, @src)"/></xsl:when>
|
9893
|
+
<xsl:otherwise><xsl:value-of select="@src"/></xsl:otherwise>
|
9894
|
+
</xsl:choose>
|
9895
|
+
</xsl:variable>
|
9846
9896
|
|
9847
|
-
|
9848
|
-
<xsl:if test="number($scale) < 100">
|
9897
|
+
<xsl:variable name="image_width_effective">
|
9849
9898
|
|
9850
|
-
|
9899
|
+
<xsl:value-of select="$width_effective"/>
|
9851
9900
|
|
9852
|
-
|
9901
|
+
</xsl:variable>
|
9902
|
+
|
9903
|
+
<xsl:variable name="scale" select="java:org.metanorma.fop.Util.getImageScale($img_src, $image_width_effective, $height_effective)"/>
|
9904
|
+
<xsl:if test="number($scale) < 100">
|
9905
|
+
|
9906
|
+
<xsl:attribute name="content-width"><xsl:value-of select="$scale"/>%</xsl:attribute>
|
9907
|
+
|
9908
|
+
</xsl:if>
|
9909
|
+
</xsl:otherwise>
|
9910
|
+
</xsl:choose>
|
9853
9911
|
|
9854
9912
|
</xsl:if>
|
9855
9913
|
|
@@ -13544,7 +13602,7 @@
|
|
13544
13602
|
<xsl:template match="*[local-name() = 'span']" mode="update_xml_step1">
|
13545
13603
|
<xsl:apply-templates mode="update_xml_step1"/>
|
13546
13604
|
</xsl:template>
|
13547
|
-
<xsl:template match="*[local-name() = 'sourcecode']//*[local-name() = 'span'][@class]" mode="update_xml_step1" priority="2">
|
13605
|
+
<xsl:template match="*[local-name() = 'sections']/*[local-name() = 'p'][starts-with(@class, 'zzSTDTitle')]/*[local-name() = 'span'][@class] | *[local-name() = 'sourcecode']//*[local-name() = 'span'][@class]" mode="update_xml_step1" priority="2">
|
13548
13606
|
<xsl:copy>
|
13549
13607
|
<xsl:copy-of select="@*"/>
|
13550
13608
|
<xsl:apply-templates mode="update_xml_step1"/>
|
data/lib/isodoc/ieee/init.rb
CHANGED
@@ -24,6 +24,47 @@ module IsoDoc
|
|
24
24
|
def fileloc(loc)
|
25
25
|
File.join(File.dirname(__FILE__), loc)
|
26
26
|
end
|
27
|
+
|
28
|
+
def std_docid_semantic(id)
|
29
|
+
id.nil? and return nil
|
30
|
+
ret = Nokogiri::XML.fragment(id)
|
31
|
+
ret.traverse do |x|
|
32
|
+
x.text? or next
|
33
|
+
x.replace(std_docid_semantic1(x.text))
|
34
|
+
end
|
35
|
+
to_xml(ret)
|
36
|
+
end
|
37
|
+
|
38
|
+
def std_docid_semantic1(id)
|
39
|
+
ids = id.split(/\p{Zs}/)
|
40
|
+
agency?(ids[0].sub(/\/.*$/, "")) or return id
|
41
|
+
std_docid_semantic_full(id)
|
42
|
+
end
|
43
|
+
|
44
|
+
# AGENCY+ TYPE NUMBER YEAR
|
45
|
+
def std_docid_semantic_full(ident)
|
46
|
+
m = ident.match(%r{(?<text>[^0-9]+\p{Zs})
|
47
|
+
(?<num>[0-9]+)
|
48
|
+
(?:[:](?<yr>(?:19|20)\d\d))?}x)
|
49
|
+
m or return ident
|
50
|
+
ret = std_docid_sdo(m[:text]) +
|
51
|
+
"<span class='std_docNumber'>#{m[:num]}</span>"
|
52
|
+
m[:yr] and ret += ":<span class='std_year'>#{m[:yr]}</span>"
|
53
|
+
ret
|
54
|
+
end
|
55
|
+
|
56
|
+
def std_docid_sdo(text)
|
57
|
+
found = false
|
58
|
+
text.split(%r{([\p{Zs}|/]+)}).reverse.map do |x|
|
59
|
+
if /[A-Za-z]/.match?(x)
|
60
|
+
k = if found || agency?(x) then "std_publisher"
|
61
|
+
else "std_documentType"
|
62
|
+
end
|
63
|
+
found = true
|
64
|
+
"<span class='#{k}'>#{x}</span>"
|
65
|
+
else x end
|
66
|
+
end.reverse.join
|
67
|
+
end
|
27
68
|
end
|
28
69
|
end
|
29
70
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module IEEE
|
3
|
+
class PresentationXMLConvert < IsoDoc::PresentationXMLConvert
|
4
|
+
def bibdata_i18n(bib)
|
5
|
+
super
|
6
|
+
bibdata_dates(bib)
|
7
|
+
end
|
8
|
+
|
9
|
+
def bibdata_dates(bib)
|
10
|
+
bib.xpath(ns("./date")).each do |d|
|
11
|
+
d.next = d.dup
|
12
|
+
d.next["format"] = "ddMMMyyyy"
|
13
|
+
d.next.xpath(ns("./from | ./to | ./on")).each do |x|
|
14
|
+
x.children = ddMMMyyyy(x.text)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def ddMMMyyyy(isodate)
|
20
|
+
return nil if isodate.nil?
|
21
|
+
|
22
|
+
arr = isodate.split("-")
|
23
|
+
if arr.size == 1 && (/^\d+$/.match isodate)
|
24
|
+
Date.new(*arr.map(&:to_i)).strftime("%Y")
|
25
|
+
elsif arr.size == 2
|
26
|
+
Date.new(*arr.map(&:to_i)).strftime("%b %Y")
|
27
|
+
else
|
28
|
+
Date.parse(isodate).strftime("%d %b %Y")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def boilerplate(docxml)
|
33
|
+
docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/" \
|
34
|
+
"clause/title")).each(&:remove)
|
35
|
+
docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/clause"))
|
36
|
+
.each do |clause|
|
37
|
+
participants(clause)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def participants(clause)
|
42
|
+
clause.xpath(ns(".//ul")).each_with_index do |ulist, idx|
|
43
|
+
ulist.xpath(ns("./li")).each { |list| participants1(list, idx) }
|
44
|
+
ulist.replace(ulist.children)
|
45
|
+
end
|
46
|
+
affiliation_header(clause)
|
47
|
+
end
|
48
|
+
|
49
|
+
def affiliation_header(clause)
|
50
|
+
clause.xpath(ns(".//p[@type = 'officeorgrepmember']")).each do |p|
|
51
|
+
prev = p.previous_element
|
52
|
+
prev && prev.name == "p" &&
|
53
|
+
prev["type"] == "officeorgrepmember" and next
|
54
|
+
p.previous = <<~HDR
|
55
|
+
<p type='officeorgrepmemberhdr'><em>Organization
|
56
|
+
Represented</em><tab/><em>Name of Representative</em></p>
|
57
|
+
HDR
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def participants1(list, idx)
|
62
|
+
key = ""
|
63
|
+
map = list.xpath(ns(".//dt | .//dd")).each_with_object({}) do |dtd, m|
|
64
|
+
(dtd.name == "dt" and key = dtd.text) or
|
65
|
+
m[key] = @c.encode(dtd.text.strip, :hexadecimal)
|
66
|
+
end
|
67
|
+
list.replace(participant_para(map, idx))
|
68
|
+
end
|
69
|
+
|
70
|
+
def participant_para(map, idx)
|
71
|
+
name = participant_name(map)
|
72
|
+
if map["role"]&.casecmp("member")&.zero?
|
73
|
+
participant_member_para(map, name, idx)
|
74
|
+
else
|
75
|
+
participant_officeholder_para(map, name, idx)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def participant_member_para(map, name, _idx)
|
80
|
+
if map["company"] && (map["name"] || map["surname"])
|
81
|
+
pers = map["name"] || "#{map['given']} #{map['surname']}"
|
82
|
+
"<p type='officeorgrepmember'>#{name}<tab/>#{pers}</p>"
|
83
|
+
elsif map["company"] then "<p type='officeorgmember'>#{name}</p>"
|
84
|
+
else "<p type='officemember'>#{name}</p>"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def participant_officeholder_para(map, name, idx)
|
89
|
+
name = "<strong>#{name}</strong>" if idx.zero?
|
90
|
+
br = map["role"].size > 30 ? "<br/>" : ""
|
91
|
+
"<p type='officeholder' align='center'>#{name}, #{br}" \
|
92
|
+
"<em>#{map['role']}</em></p>"
|
93
|
+
end
|
94
|
+
|
95
|
+
def participant_name(map)
|
96
|
+
map["company"] || map["name"] || "#{map['given']} #{map['surname']}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -29,7 +29,7 @@ module IsoDoc
|
|
29
29
|
b.at(ns("./formattedref")))&.text,
|
30
30
|
author: @author[b["id"]] || (b.at(ns("./title")) ||
|
31
31
|
b.at(ns("./formattedref")))&.text,
|
32
|
-
ord: b.at(ns("./docidentifier[@type = 'metanorma' or "\
|
32
|
+
ord: b.at(ns("./docidentifier[@type = 'metanorma' or " \
|
33
33
|
"@type = 'metanorma-ordinal']"))&.text }
|
34
34
|
end
|
35
35
|
end
|
@@ -78,6 +78,10 @@ module IsoDoc
|
|
78
78
|
end
|
79
79
|
idx
|
80
80
|
end
|
81
|
+
|
82
|
+
def expand_citeas(text)
|
83
|
+
std_docid_semantic(super)
|
84
|
+
end
|
81
85
|
end
|
82
86
|
end
|
83
87
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative "init"
|
2
|
+
require_relative "presentation_bibdata"
|
2
3
|
require_relative "presentation_terms"
|
3
4
|
require_relative "presentation_ref"
|
4
5
|
require "isodoc"
|
@@ -25,7 +26,6 @@ module IsoDoc
|
|
25
26
|
|
26
27
|
def prefix_clause(target, loc)
|
27
28
|
loc["type"] == "clause" or return loc["type"]
|
28
|
-
|
29
29
|
if subclause?(target, loc["type"],
|
30
30
|
loc&.at(ns("./referenceFrom"))&.text)
|
31
31
|
""
|
@@ -79,20 +79,6 @@ module IsoDoc
|
|
79
79
|
prefix_name(elem, block_delim, lbl, "name")
|
80
80
|
end
|
81
81
|
|
82
|
-
def display_order(docxml)
|
83
|
-
i = 0
|
84
|
-
i = display_order_xpath(docxml, "//preface/*", i)
|
85
|
-
i = display_order_at(docxml, "//clause[@type = 'overview']", i)
|
86
|
-
i = display_order_at(docxml, @xrefs.klass.norm_ref_xpath, i)
|
87
|
-
i = display_order_at(docxml, "//sections/terms | " \
|
88
|
-
"//sections/clause[descendant::terms]", i)
|
89
|
-
i = display_order_at(docxml, "//sections/definitions", i)
|
90
|
-
i = display_order_xpath(docxml, @xrefs.klass.middle_clause(docxml), i)
|
91
|
-
i = display_order_xpath(docxml, "//annex", i)
|
92
|
-
i = display_order_xpath(docxml, @xrefs.klass.bibliography_xpath, i)
|
93
|
-
display_order_xpath(docxml, "//indexsect", i)
|
94
|
-
end
|
95
|
-
|
96
82
|
def annex1(elem)
|
97
83
|
lbl = @xrefs.anchor(elem["id"], :label)
|
98
84
|
if t = elem.at(ns("./title"))
|
@@ -101,34 +87,6 @@ module IsoDoc
|
|
101
87
|
prefix_name(elem, "<br/>", lbl, "title")
|
102
88
|
end
|
103
89
|
|
104
|
-
def bibdata_i18n(bib)
|
105
|
-
super
|
106
|
-
bibdata_dates(bib)
|
107
|
-
end
|
108
|
-
|
109
|
-
def bibdata_dates(bib)
|
110
|
-
bib.xpath(ns("./date")).each do |d|
|
111
|
-
d.next = d.dup
|
112
|
-
d.next["format"] = "ddMMMyyyy"
|
113
|
-
d.next.xpath(ns("./from | ./to | ./on")).each do |x|
|
114
|
-
x.children = ddMMMyyyy(x.text)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def ddMMMyyyy(isodate)
|
120
|
-
return nil if isodate.nil?
|
121
|
-
|
122
|
-
arr = isodate.split("-")
|
123
|
-
if arr.size == 1 && (/^\d+$/.match isodate)
|
124
|
-
Date.new(*arr.map(&:to_i)).strftime("%Y")
|
125
|
-
elsif arr.size == 2
|
126
|
-
Date.new(*arr.map(&:to_i)).strftime("%b %Y")
|
127
|
-
else
|
128
|
-
Date.parse(isodate).strftime("%d %b %Y")
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
90
|
def amend1(elem)
|
133
91
|
elem.xpath(ns("./description/p")).each do |p|
|
134
92
|
p.children = to_xml(p.children).strip
|
@@ -151,73 +109,6 @@ module IsoDoc
|
|
151
109
|
super
|
152
110
|
end
|
153
111
|
|
154
|
-
def boilerplate(docxml)
|
155
|
-
docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/" \
|
156
|
-
"clause/title")).each(&:remove)
|
157
|
-
docxml.xpath(ns("//clause[@id = 'boilerplate-participants']/clause"))
|
158
|
-
.each do |clause|
|
159
|
-
participants(clause)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
def participants(clause)
|
164
|
-
clause.xpath(ns(".//ul")).each_with_index do |ulist, idx|
|
165
|
-
ulist.xpath(ns("./li")).each { |list| participants1(list, idx) }
|
166
|
-
ulist.replace(ulist.children)
|
167
|
-
end
|
168
|
-
affiliation_header(clause)
|
169
|
-
end
|
170
|
-
|
171
|
-
def affiliation_header(clause)
|
172
|
-
clause.xpath(ns(".//p[@type = 'officeorgrepmember']")).each do |p|
|
173
|
-
prev = p.previous_element
|
174
|
-
prev && prev.name == "p" &&
|
175
|
-
prev["type"] == "officeorgrepmember" and next
|
176
|
-
p.previous = <<~HDR
|
177
|
-
<p type='officeorgrepmemberhdr'><em>Organization
|
178
|
-
Represented</em><tab/><em>Name of Representative</em></p>
|
179
|
-
HDR
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
def participants1(list, idx)
|
184
|
-
key = ""
|
185
|
-
map = list.xpath(ns(".//dt | .//dd")).each_with_object({}) do |dtd, m|
|
186
|
-
(dtd.name == "dt" and key = dtd.text) or
|
187
|
-
m[key] = @c.encode(dtd.text.strip, :hexadecimal)
|
188
|
-
end
|
189
|
-
list.replace(participant_para(map, idx))
|
190
|
-
end
|
191
|
-
|
192
|
-
def participant_para(map, idx)
|
193
|
-
name = participant_name(map)
|
194
|
-
if map["role"]&.casecmp("member")&.zero?
|
195
|
-
participant_member_para(map, name, idx)
|
196
|
-
else
|
197
|
-
participant_officeholder_para(map, name, idx)
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
def participant_member_para(map, name, _idx)
|
202
|
-
if map["company"] && (map["name"] || map["surname"])
|
203
|
-
pers = map["name"] || "#{map['given']} #{map['surname']}"
|
204
|
-
"<p type='officeorgrepmember'>#{name}<tab/>#{pers}</p>"
|
205
|
-
elsif map["company"] then "<p type='officeorgmember'>#{name}</p>"
|
206
|
-
else "<p type='officemember'>#{name}</p>"
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
def participant_officeholder_para(map, name, idx)
|
211
|
-
name = "<strong>#{name}</strong>" if idx.zero?
|
212
|
-
br = map["role"].size > 30 ? "<br/>" : ""
|
213
|
-
"<p type='officeholder' align='center'>#{name}, #{br}" \
|
214
|
-
"<em>#{map['role']}</em></p>"
|
215
|
-
end
|
216
|
-
|
217
|
-
def participant_name(map)
|
218
|
-
map["company"] || map["name"] || "#{map['given']} #{map['surname']}"
|
219
|
-
end
|
220
|
-
|
221
112
|
def asciimath_dup(node)
|
222
113
|
@suppressasciimathdup and return
|
223
114
|
super
|
@@ -243,9 +134,15 @@ module IsoDoc
|
|
243
134
|
end
|
244
135
|
|
245
136
|
def ol_numbering(docxml)
|
246
|
-
|
247
|
-
|
248
|
-
|
137
|
+
p = "//clause | //annex | //foreword | //acknowledgements | " \
|
138
|
+
"//introduction | //preface/abstract | //appendix | //terms | " \
|
139
|
+
"//term | //definitions | //references | //colophon"
|
140
|
+
docxml.xpath(ns(p)).each do |c|
|
141
|
+
(c.xpath(ns(".//ol")) -
|
142
|
+
c.xpath(ns("./clause//ol | ./appendix//ol | ./term//ol | " \
|
143
|
+
"./terms//ol | ./definitions//ol | " \
|
144
|
+
"/references//ol | ./colophon//ol")))
|
145
|
+
.each_with_index do |o, i|
|
249
146
|
ol_numbering1(o, i)
|
250
147
|
end
|
251
148
|
end
|
@@ -266,6 +163,17 @@ module IsoDoc
|
|
266
163
|
type
|
267
164
|
end
|
268
165
|
|
166
|
+
def middle_title(docxml)
|
167
|
+
s = docxml.at(ns("//sections")) or return
|
168
|
+
ret = "<p class='zzSTDTitle1'>#{@meta.get[:full_doctitle]}"
|
169
|
+
@meta.get[:amd] || @meta.get[:corr] and ret += "<br/>"
|
170
|
+
@meta.get[:amd] and ret += "Amendment #{@meta.get[:amd]}"
|
171
|
+
@meta.get[:amd] && @meta.get[:corr] and ret += " "
|
172
|
+
@meta.get[:corr] and ret += "Corrigenda #{@meta.get[:corr]}"
|
173
|
+
ret += "</p>"
|
174
|
+
s.children.first.previous = ret
|
175
|
+
end
|
176
|
+
|
269
177
|
include Init
|
270
178
|
end
|
271
179
|
end
|
@@ -50,32 +50,34 @@ module IsoDoc
|
|
50
50
|
def abstract(clause, out)
|
51
51
|
page_break(out)
|
52
52
|
out.div **attr_code(id: clause["id"], class: "abstract") do |s|
|
53
|
-
clause_name(clause, clause.at(ns("./title")), s,
|
53
|
+
clause_name(clause, clause.at(ns("./title")), s,
|
54
|
+
{ class: "AbstractTitle" })
|
54
55
|
clause.elements.each { |e| parse(e, s) unless e.name == "title" }
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
59
|
+
MAIN_ELEMENTS =
|
60
|
+
"//sections/*[@displayorder][not(@class = 'zzSTDTitle1')] | " \
|
61
|
+
"//annex[@displayorder] | " \
|
62
|
+
"//bibliography/*[@displayorder] | //colophon/*[@displayorder] | " \
|
63
|
+
"//indexsect[@displayorder]".freeze
|
64
|
+
|
58
65
|
def make_body3(body, docxml)
|
59
|
-
body.div class: "WordSectionMiddleTitle" do |
|
60
|
-
middle_title_ieee(docxml,
|
66
|
+
body.div class: "WordSectionMiddleTitle" do |div3|
|
67
|
+
middle_title_ieee(docxml, div3)
|
61
68
|
end
|
62
69
|
section_break(body, continuous: true)
|
63
70
|
body.div class: "WordSectionMain" do |div3|
|
64
|
-
|
71
|
+
content(div3, docxml, ns(self.class::MAIN_ELEMENTS))
|
65
72
|
footnotes div3
|
66
73
|
comments div3
|
67
74
|
end
|
68
75
|
end
|
69
76
|
|
70
|
-
def
|
71
|
-
|
72
|
-
def middle_title_ieee(_docxml, out)
|
77
|
+
def middle_title_ieee(docxml, out)
|
78
|
+
title = docxml.at(ns("//p[@class = 'zzSTDTitle1']")) or return
|
73
79
|
out.p(class: "IEEEStdsTitle", style: "margin-top:70.0pt") do |p|
|
74
|
-
p
|
75
|
-
@meta.get[:amd] || @meta.get[:corr] and p << "<br/>"
|
76
|
-
@meta.get[:amd] and p << "Amendment #{@meta.get[:amd]}"
|
77
|
-
@meta.get[:amd] && @meta.get[:corr] and p << " "
|
78
|
-
@meta.get[:corr] and p << "Corrigenda #{@meta.get[:corr]}"
|
80
|
+
title.children.each { |n| parse(n, p) }
|
79
81
|
end
|
80
82
|
end
|
81
83
|
|
@@ -137,7 +139,6 @@ module IsoDoc
|
|
137
139
|
end
|
138
140
|
|
139
141
|
def annex_name(_annex, name, div)
|
140
|
-
preceding_floating_titles(name, div)
|
141
142
|
return if name.nil?
|
142
143
|
|
143
144
|
name&.at(ns("./strong"))&.remove # supplied by CSS list numbering
|