metanorma-itu 1.0.12 → 1.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +8 -7
  3. data/.github/workflows/ubuntu.yml +12 -9
  4. data/.github/workflows/windows.yml +8 -8
  5. data/lib/asciidoctor/itu/biblio.rng +142 -37
  6. data/lib/asciidoctor/itu/cleanup.rb +80 -71
  7. data/lib/asciidoctor/itu/converter.rb +7 -11
  8. data/lib/asciidoctor/itu/front.rb +47 -18
  9. data/lib/asciidoctor/itu/isodoc.rng +48 -2
  10. data/lib/asciidoctor/itu/validate.rb +1 -1
  11. data/lib/isodoc/itu/base_convert.rb +63 -14
  12. data/lib/isodoc/itu/html/_coverpage.scss +7 -3
  13. data/lib/isodoc/itu/html/header.html +8 -8
  14. data/lib/isodoc/itu/html/html_itu_titlepage.html +6 -7
  15. data/lib/isodoc/itu/html/htmlstyle.scss +17 -9
  16. data/lib/isodoc/itu/html/itu.scss +28 -1
  17. data/lib/isodoc/itu/html/scripts.html +14 -27
  18. data/lib/isodoc/itu/html/word_itu_intro.html +11 -1
  19. data/lib/isodoc/itu/html/word_itu_titlepage.html +3 -6
  20. data/lib/isodoc/itu/html/wordstyle.scss +6 -5
  21. data/lib/isodoc/itu/html_convert.rb +3 -3
  22. data/lib/isodoc/itu/i18n-en.yaml +2 -1
  23. data/lib/isodoc/itu/itu.recommendation-annex.xsl +3903 -0
  24. data/lib/isodoc/itu/itu.recommendation.xsl +3903 -0
  25. data/lib/isodoc/itu/itu.resolution.xsl +3903 -0
  26. data/lib/isodoc/itu/metadata.rb +16 -6
  27. data/lib/isodoc/itu/pdf_convert.rb +17 -44
  28. data/lib/isodoc/itu/ref.rb +48 -21
  29. data/lib/isodoc/itu/terms.rb +4 -5
  30. data/lib/isodoc/itu/word_convert.rb +7 -3
  31. data/lib/isodoc/itu/xref.rb +27 -16
  32. data/lib/metanorma/itu/processor.rb +8 -0
  33. data/lib/metanorma/itu/version.rb +1 -1
  34. data/metanorma-itu.gemspec +1 -1
  35. metadata +7 -5
  36. data/lib/isodoc/itu/html/scripts.pdf.html +0 -72
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37546876b8125697954fc7ff980c07cf756aae329566249a31c9ea51fa48ec6a
4
- data.tar.gz: 5ce41dcc79d10901912a44bbaa7bdb0ed8da9cd1f1bf7a23d5e8d336fbe0f183
3
+ metadata.gz: b41712042e0f88c1a324ba578c37b2a0f53dc0b4864d33bf659d64c608374526
4
+ data.tar.gz: 1b3c37954a1e5da6b8bf4f4175befa1c3aeb08e3a27a7934086e0d088b5e131c
5
5
  SHA512:
6
- metadata.gz: dadba1953785697e5f6f49ec05696b86c3ceeaca9c437dcd6804f8270d6ebc37cab2926ec9a961232ed727af30cca7691a1799c8c8389f4245611684b6fd5d41
7
- data.tar.gz: 7b7bd5a5024cbd4b81a4dd52556bd50a0c4583394b97e3b01b159e98338a3c85748e9d238278b9b38a7501b2fff1a64fe7653ead1ff1755f86b11e3625d1b2b8
6
+ metadata.gz: 932e2f9474e91292595ea30ad42766d1b863829855fb3c66ed0d420784c184a35395258f9549a397a43d05966ad554bae21c241ad9b2f59ef7a3309fe9da6a48
7
+ data.tar.gz: 7bef0da0c481ee46241f0f5341c05b1028ec715cea0eb716594260ab04eeabd7fa1fbb8962a53c4ef38a383c958043646804deb44e0a779dafb8ccad13ed082e
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/ubuntu.yml
11
+ - .github/workflows/windows.yml
9
12
 
10
13
  jobs:
11
14
  test-macos:
12
15
  name: Test on Ruby ${{ matrix.ruby }} macOS
13
16
  runs-on: macos-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Use Ruby
@@ -26,13 +34,6 @@ jobs:
26
34
  run: |
27
35
  sudo gem install bundler --force
28
36
  bundle install --jobs 4 --retry 3
29
- - name: Use Node
30
- uses: actions/setup-node@v1
31
- with:
32
- node-version: '8'
33
- - name: Install Puppeteer
34
- run: |
35
- npm install -g puppeteer
36
37
  - name: Run specs
37
38
  run: |
38
39
  bundle exec rake
@@ -5,16 +5,26 @@ name: ubuntu
5
5
  on:
6
6
  push:
7
7
  branches: [ master ]
8
+ tags:
9
+ - '*'
8
10
  pull_request:
11
+ paths-ignore:
12
+ - .github/workflows/macos.yml
13
+ - .github/workflows/windows.yml
9
14
 
10
15
  jobs:
11
16
  test-linux:
12
17
  name: Test on Ruby ${{ matrix.ruby }} Ubuntu
13
18
  runs-on: ubuntu-latest
19
+ continue-on-error: ${{ matrix.experimental }}
14
20
  strategy:
15
21
  fail-fast: false
16
22
  matrix:
17
23
  ruby: [ '2.6', '2.5', '2.4' ]
24
+ experimental: [false]
25
+ include:
26
+ - ruby: '2.7'
27
+ experimental: true
18
28
  steps:
19
29
  - uses: actions/checkout@master
20
30
  - name: Use Ruby
@@ -26,18 +36,11 @@ jobs:
26
36
  run: |
27
37
  gem install bundler
28
38
  bundle install --jobs 4 --retry 3
29
- - name: Use Node
30
- uses: actions/setup-node@v1
31
- with:
32
- node-version: '8'
33
- - name: Install Puppeteer
34
- run: |
35
- npm install -g puppeteer
36
39
  - name: Run specs
37
40
  run: |
38
41
  bundle exec rake
39
42
  - name: Trigger dependent repositories
40
- if: github.ref == 'refs/heads/master'
43
+ if: github.ref == 'refs/heads/master' && matrix.ruby == '2.6'
41
44
  env:
42
45
  GH_USERNAME: ${{ secrets.PAT_USERNAME }}
43
46
  GH_ACCESS_TOKEN: ${{ secrets.PAT_TOKEN }}
@@ -46,5 +49,5 @@ jobs:
46
49
  [[ -f ".github/workflows/dependent_repos.env" ]] && source .github/workflows/dependent_repos.env
47
50
  for repo in $DEPENDENT_REPOS
48
51
  do
49
- sh trigger-gh-actions.sh $ORGANISATION $repo $GH_USERNAME $GH_ACCESS_TOKEN $GITHUB_REPOSITORY
52
+ sh trigger-gh-actions.sh $ORGANISATION $repo $GH_USERNAME $GH_ACCESS_TOKEN $GITHUB_REPOSITORY "{ \"ref\": \"${GITHUB_REF}\" }"
50
53
  done
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/macos.yml
11
+ - .github/workflows/ubuntu.yml
9
12
 
10
13
  jobs:
11
14
  test-windows:
12
15
  name: Test on Ruby ${{ matrix.ruby }} Windows
13
16
  runs-on: windows-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Use Ruby
@@ -27,15 +35,7 @@ jobs:
27
35
  run: |
28
36
  gem install bundler
29
37
  bundle config --local path vendor/bundle
30
- bundle update
31
38
  bundle install --jobs 4 --retry 3
32
- - name: Use Node
33
- uses: actions/setup-node@v1
34
- with:
35
- node-version: '8'
36
- - name: Install Puppeteer
37
- run: |
38
- npm install -g puppeteer
39
39
  - name: Run specs
40
40
  run: |
41
41
  bundle exec rake
@@ -49,11 +49,17 @@
49
49
  </define>
50
50
  <define name="stage">
51
51
  <element name="stage">
52
+ <optional>
53
+ <attribute name="abbreviation"/>
54
+ </optional>
52
55
  <text/>
53
56
  </element>
54
57
  </define>
55
58
  <define name="substage">
56
59
  <element name="substage">
60
+ <optional>
61
+ <attribute name="abbreviation"/>
62
+ </optional>
57
63
  <text/>
58
64
  </element>
59
65
  </define>
@@ -82,7 +88,7 @@
82
88
  <text/>
83
89
  </element>
84
90
  </define>
85
- <define name="LocalizedString">
91
+ <define name="LocalizedString1">
86
92
  <optional>
87
93
  <!-- multiple languages and scripts possible: comma delimit them if so -->
88
94
  <attribute name="language"/>
@@ -92,6 +98,16 @@
92
98
  </optional>
93
99
  <text/>
94
100
  </define>
101
+ <define name="LocalizedString">
102
+ <choice>
103
+ <ref name="LocalizedString1"/>
104
+ <oneOrMore>
105
+ <element name="variant">
106
+ <ref name="LocalizedString1"/>
107
+ </element>
108
+ </oneOrMore>
109
+ </choice>
110
+ </define>
95
111
  <!--
96
112
  Unlike UML, change type to format: type is overloaded
97
113
  Would be need if plain were default value and could omit the attribute
@@ -115,7 +131,7 @@
115
131
  </optional>
116
132
  <ref name="LocalizedStringOrXsAny"/>
117
133
  </define>
118
- <define name="LocalizedStringOrXsAny">
134
+ <define name="LocalizedStringOrXsAny1">
119
135
  <optional>
120
136
  <!-- multiple languages and scripts possible: comma delimit them if so -->
121
137
  <attribute name="language"/>
@@ -130,6 +146,16 @@
130
146
  </choice>
131
147
  </oneOrMore>
132
148
  </define>
149
+ <define name="LocalizedStringOrXsAny">
150
+ <choice>
151
+ <ref name="LocalizedStringOrXsAny1"/>
152
+ <oneOrMore>
153
+ <element name="variant">
154
+ <ref name="LocalizedStringOrXsAny1"/>
155
+ </element>
156
+ </oneOrMore>
157
+ </choice>
158
+ </define>
133
159
  <define name="contributor">
134
160
  <element name="contributor">
135
161
  <zeroOrMore>
@@ -452,9 +478,14 @@
452
478
  <attribute name="bibitemid">
453
479
  <data type="IDREF"/>
454
480
  </attribute>
455
- <zeroOrMore>
456
- <ref name="locality"/>
457
- </zeroOrMore>
481
+ <choice>
482
+ <zeroOrMore>
483
+ <ref name="locality"/>
484
+ </zeroOrMore>
485
+ <zeroOrMore>
486
+ <ref name="localityStack"/>
487
+ </zeroOrMore>
488
+ </choice>
458
489
  <optional>
459
490
  <ref name="date"/>
460
491
  </optional>
@@ -469,6 +500,25 @@
469
500
  <ref name="BibItemLocality"/>
470
501
  </element>
471
502
  </define>
503
+ <define name="localityStack">
504
+ <element name="localityStack">
505
+ <zeroOrMore>
506
+ <ref name="locality"/>
507
+ </zeroOrMore>
508
+ </element>
509
+ </define>
510
+ <define name="sourceLocality">
511
+ <element name="sourceLocality">
512
+ <ref name="BibItemLocality"/>
513
+ </element>
514
+ </define>
515
+ <define name="sourceLocalityStack">
516
+ <element name="sourceLocalityStack">
517
+ <zeroOrMore>
518
+ <ref name="sourceLocality"/>
519
+ </zeroOrMore>
520
+ </element>
521
+ </define>
472
522
  <define name="BibItemLocality">
473
523
  <attribute name="type">
474
524
  <ref name="LocalityType"/>
@@ -611,9 +661,9 @@
611
661
  <optional>
612
662
  <ref name="status"/>
613
663
  </optional>
614
- <optional>
664
+ <zeroOrMore>
615
665
  <ref name="copyright"/>
616
- </optional>
666
+ </zeroOrMore>
617
667
  <zeroOrMore>
618
668
  <ref name="docrelation"/>
619
669
  </zeroOrMore>
@@ -737,6 +787,8 @@
737
787
  <value>unchanged</value>
738
788
  <value>circulated</value>
739
789
  <value>adapted</value>
790
+ <value>vote-started</value>
791
+ <value>vote-ended</value>
740
792
  </choice>
741
793
  </define>
742
794
  <define name="bdate">
@@ -969,7 +1021,17 @@
969
1021
  <optional>
970
1022
  <ref name="to"/>
971
1023
  </optional>
972
- <ref name="owner"/>
1024
+ <oneOrMore>
1025
+ <ref name="owner"/>
1026
+ </oneOrMore>
1027
+ <optional>
1028
+ <ref name="copyright_scope"/>
1029
+ </optional>
1030
+ </element>
1031
+ </define>
1032
+ <define name="copyright_scope">
1033
+ <element name="scope">
1034
+ <text/>
973
1035
  </element>
974
1036
  </define>
975
1037
  <define name="from">
@@ -989,38 +1051,63 @@
989
1051
  </define>
990
1052
  <define name="DocRelationType">
991
1053
  <choice>
992
- <value>obsoletes</value>
993
- <value>obsoletedBy</value>
994
- <value>supersedes</value>
995
- <value>supersededBy</value>
996
- <value>updates</value>
997
- <value>updatedBy</value>
998
- <value>complements</value>
999
- <value>derivedFrom</value>
1000
- <value>translatedFrom</value>
1001
- <value>hasTranslation</value>
1002
- <value>adoptedFrom</value>
1003
- <value>equivalent</value>
1004
- <value>identical</value>
1005
- <value>nonequivalent</value>
1006
- <value>includedIn</value>
1007
1054
  <value>includes</value>
1008
- <value>instance</value>
1009
- <value>instanceOf</value>
1010
- <value>partOf</value>
1055
+ <value>includedIn</value>
1011
1056
  <value>hasPart</value>
1012
- <value>hasDraft</value>
1013
- <value>draftOf</value>
1057
+ <value>partOf</value>
1014
1058
  <value>merges</value>
1059
+ <value>mergedInto</value>
1015
1060
  <value>splits</value>
1016
- <value>amends</value>
1017
- <value>amendedBy</value>
1018
- <value>corrects</value>
1019
- <value>correctedBy</value>
1020
- <value>revises</value>
1021
- <value>revisedBy</value>
1061
+ <value>splitInto</value>
1062
+ <value>instance</value>
1063
+ <value>hasInstance</value>
1064
+ <value>exemplarOf</value>
1065
+ <value>hasExemplar</value>
1066
+ <value>manifestationOf</value>
1067
+ <value>hasManifestation</value>
1068
+ <value>reproductionOf</value>
1069
+ <value>hasReproduction</value>
1070
+ <value>reprintOf</value>
1071
+ <value>hasReprint</value>
1072
+ <value>expressionOf</value>
1073
+ <value>hasExpression</value>
1074
+ <value>translatedFrom</value>
1075
+ <value>hasTranslation</value>
1076
+ <value>arrangementOf</value>
1077
+ <value>hasArrangement</value>
1078
+ <value>abridgementOf</value>
1079
+ <value>hasAbridgement</value>
1080
+ <value>annotationOf</value>
1081
+ <value>hasAnnotation</value>
1082
+ <value>draftOf</value>
1083
+ <value>hasDraft</value>
1084
+ <value>editionOf</value>
1085
+ <value>hasEdition</value>
1086
+ <value>updates</value>
1087
+ <value>updatedBy</value>
1088
+ <value>derivedFrom</value>
1089
+ <value>derives</value>
1022
1090
  <value>describes</value>
1023
1091
  <value>describedBy</value>
1092
+ <value>catalogues</value>
1093
+ <value>cataloguedBy</value>
1094
+ <value>hasSuccessor</value>
1095
+ <value>successorOf</value>
1096
+ <value>adaptedFrom</value>
1097
+ <value>hasAdaptation</value>
1098
+ <value>adoptedFrom</value>
1099
+ <value>adoptedAs</value>
1100
+ <value>reviewOf</value>
1101
+ <value>hasReview</value>
1102
+ <value>commentaryOf</value>
1103
+ <value>hasCommentary</value>
1104
+ <value>related</value>
1105
+ <value>complements</value>
1106
+ <value>complementOf</value>
1107
+ <value>obsoletes</value>
1108
+ <value>obsoletedBy</value>
1109
+ <value>cited</value>
1110
+ <value>isCitedIn</value>
1024
1111
  </choice>
1025
1112
  </define>
1026
1113
  <define name="docrelation">
@@ -1028,12 +1115,30 @@
1028
1115
  <attribute name="type">
1029
1116
  <ref name="DocRelationType"/>
1030
1117
  </attribute>
1118
+ <optional>
1119
+ <element name="description">
1120
+ <ref name="FormattedString"/>
1121
+ </element>
1122
+ </optional>
1031
1123
  <element name="bibitem">
1032
1124
  <ref name="BibliographicItem"/>
1033
1125
  </element>
1034
- <zeroOrMore>
1035
- <ref name="locality"/>
1036
- </zeroOrMore>
1126
+ <choice>
1127
+ <zeroOrMore>
1128
+ <ref name="locality"/>
1129
+ </zeroOrMore>
1130
+ <zeroOrMore>
1131
+ <ref name="localityStack"/>
1132
+ </zeroOrMore>
1133
+ </choice>
1134
+ <choice>
1135
+ <zeroOrMore>
1136
+ <ref name="sourceLocality"/>
1137
+ </zeroOrMore>
1138
+ <zeroOrMore>
1139
+ <ref name="sourceLocalityStack"/>
1140
+ </zeroOrMore>
1141
+ </choice>
1037
1142
  </element>
1038
1143
  </define>
1039
1144
  <define name="version">
@@ -3,9 +3,6 @@ module Asciidoctor
3
3
  class Converter < Standoc::Converter
4
4
  def sections_cleanup(x)
5
5
  super
6
- x.xpath("//*[@inline-header]").each do |h|
7
- h.delete("inline-header")
8
- end
9
6
  insert_missing_sections(x) unless @no_insert_missing_sections
10
7
  end
11
8
 
@@ -43,9 +40,11 @@ module Asciidoctor
43
40
  x.at("./*/annex[last()] | ./*/sections").next =
44
41
  "<bibliography><sentinel/></bibliography>"
45
42
  ins = x.at("//bibliography").elements.first
46
- unless x.at("//bibliography/references/title[text() = 'References']")
47
- ins.previous = "<references><title>References</title><p>"\
48
- "#{@labels['clause_empty']}</p></references>"
43
+ unless x.at("//bibliography/references[@normative = 'true']")
44
+ #ins.previous = "<references normative='true'><title>References</title><p>"\
45
+ # "#{@labels['clause_empty']}</p></references>"
46
+ ins.previous = "<references normative='true'><title>References</title>"\
47
+ "</references>"
49
48
  end
50
49
  x&.at("//sentinel")&.remove
51
50
  end
@@ -62,7 +61,7 @@ module Asciidoctor
62
61
  ins = x.at("//sections/terms") ||
63
62
  x.at("//sections/clause[descendant::terms]")
64
63
  unless x.at("//sections//definitions")
65
- ins.next = "<definitions><title>Definitions</title><p>"\
64
+ ins.next = "<definitions><title>Abbreviations and acronyms</title><p>"\
66
65
  "#{@labels['clause_empty']}</p></definitions>"
67
66
  end
68
67
  end
@@ -71,44 +70,47 @@ module Asciidoctor
71
70
  ins = x.at("//sections//definitions") ||
72
71
  x.at("//sections/clause[descendant::definitions]")
73
72
  unless x.at("//sections/clause/title[text() = 'Conventions']")
74
- ins.next = "<clause><title>Conventions</title><p>"\
75
- "#{@labels['clause_empty']}</p></clause>"
76
- end
77
- end
73
+ ins.next = "<clause id='_#{UUIDTools::UUID.random_create}'>"\
74
+ "<title>Conventions</title><p>"\
75
+ "#{@labels['clause_empty']}</p></clause>"
76
+ end
77
+ end
78
78
 
79
- def cleanup(xmldoc)
80
- symbols_cleanup(xmldoc)
81
- super
82
- end
79
+ def cleanup(xmldoc)
80
+ symbols_cleanup(xmldoc)
81
+ super
82
+ obligations_cleanup(xmldoc)
83
+ xmldoc
84
+ end
83
85
 
84
- def smartquotes_cleanup(xmldoc)
85
- return super if @smartquotes
86
- xmldoc.traverse do |n|
86
+ def smartquotes_cleanup(xmldoc)
87
+ return super if @smartquotes
88
+ xmldoc.traverse do |n|
87
89
  next unless n.text?
88
90
  n.replace(HTMLEntities.new.encode(
89
91
  n.text.gsub(/\u2019|\u2018|\u201a|\u201b/, "'").
90
92
  gsub(/\u201c|\u201d|\u201e|\u201f/, '"'), :basic))
91
- end
92
- xmldoc
93
- end
93
+ end
94
+ xmldoc
95
+ end
94
96
 
95
- def termdef_cleanup(xmldoc)
96
- xmldoc.xpath("//term/preferred").each do |p|
97
+ def termdef_cleanup(xmldoc)
98
+ xmldoc.xpath("//term/preferred").each do |p|
97
99
  if ["terms defined elsewhere",
98
- "terms defined in this recommendation"].include? p.text.downcase
99
- p.name = "title"
100
- p.parent.name = "terms"
100
+ "terms defined in this recommendation"].include? p.text.downcase
101
+ p.name = "title"
102
+ p.parent.name = "terms"
103
+ end
104
+ end
105
+ super
101
106
  end
102
- end
103
- super
104
- end
105
107
 
106
- def termdef_boilerplate_cleanup(xmldoc)
107
- end
108
+ def termdef_boilerplate_cleanup(xmldoc)
109
+ end
108
110
 
109
- def symbols_cleanup(xmldoc)
110
- sym = xmldoc.at("//definitions/title")
111
- sym and sym&.next_element&.name == "dl" and
111
+ def symbols_cleanup(xmldoc)
112
+ sym = xmldoc.at("//definitions/title")
113
+ sym and sym&.next_element&.name == "dl" and
112
114
  sym.next = "<p>#{@symbols_boilerplate}</p>"
113
115
  end
114
116
 
@@ -116,48 +118,55 @@ module Asciidoctor
116
118
 
117
119
  def pub_class(bib)
118
120
  return 1 if bib.at("#{PUBLISHER}[abbreviation = 'ITU']")
119
- return 1 if bib.at("#{PUBLISHER}[name = 'International "\
120
- "Telecommunication Union']")
121
- return 2 if bib.at("#{PUBLISHER}[abbreviation = 'ISO']")
122
- return 2 if bib.at("#{PUBLISHER}[name = 'International Organization "\
123
- "for Standardization']")
124
- return 3 if bib.at("#{PUBLISHER}[abbreviation = 'IEC']")
125
- return 3 if bib.at("#{PUBLISHER}[name = 'International "\
126
- "Electrotechnical Commission']")
127
- return 4 if bib.at("./docidentifier[@type][not(@type = 'DOI' or "\
128
- "@type = 'metanorma' or @type = 'ISSN' or @type = "\
129
- "'ISBN')]")
130
- 5
131
- end
121
+ return 1 if bib.at("#{PUBLISHER}[name = 'International "\
122
+ "Telecommunication Union']")
123
+ return 2 if bib.at("#{PUBLISHER}[abbreviation = 'ISO']")
124
+ return 2 if bib.at("#{PUBLISHER}[name = 'International Organization "\
125
+ "for Standardization']")
126
+ return 3 if bib.at("#{PUBLISHER}[abbreviation = 'IEC']")
127
+ return 3 if bib.at("#{PUBLISHER}[name = 'International "\
128
+ "Electrotechnical Commission']")
129
+ return 4 if bib.at("./docidentifier[@type][not(@type = 'DOI' or "\
130
+ "@type = 'metanorma' or @type = 'ISSN' or @type = "\
131
+ "'ISBN')]")
132
+ 5
133
+ end
132
134
 
133
- def sort_biblio(bib)
134
- bib.sort do |a, b|
135
- sort_biblio_key(a) <=> sort_biblio_key(b)
135
+ def sort_biblio(bib)
136
+ bib.sort do |a, b|
137
+ sort_biblio_key(a) <=> sort_biblio_key(b)
138
+ end
136
139
  end
137
- end
138
140
 
139
- # sort by: doc class (ITU, ISO, IEC, other standard (not DOI &c), other
140
- # then standard class (docid class other than DOI &c)
141
- # then alphanumeric doc id (not DOI &c)
142
- # then title
143
- def sort_biblio_key(bib)
144
- pubclass = pub_class(bib)
145
- num = bib&.at("./docnumber")&.text
146
- id = bib&.at("./docidentifier[not(@type = 'DOI' or @type = "\
147
- "'metanorma' or @type = 'ISSN' or @type = 'ISBN')]")
148
- metaid = bib&.at("./docidentifier[@type = 'metanorma']")&.text
149
- abbrid = metaid unless /^\[\d+\]$/.match(metaid)
150
- type = id['type'] if id
151
- title = bib&.at("./title[@type = 'main']")&.text ||
152
- bib&.at("./title")&.text || bib&.at("./formattedref")&.text
153
- "#{pubclass} :: #{type} :: #{id&.text || metaid} :: #{title}"
154
- end
141
+ # sort by: doc class (ITU, ISO, IEC, other standard (not DOI &c), other
142
+ # then standard class (docid class other than DOI &c)
143
+ # then alphanumeric doc id (not DOI &c)
144
+ # then title
145
+ def sort_biblio_key(bib)
146
+ pubclass = pub_class(bib)
147
+ num = bib&.at("./docnumber")&.text
148
+ id = bib&.at("./docidentifier[not(@type = 'DOI' or @type = "\
149
+ "'metanorma' or @type = 'ISSN' or @type = 'ISBN')]")
150
+ metaid = bib&.at("./docidentifier[@type = 'metanorma']")&.text
151
+ abbrid = metaid unless /^\[\d+\]$/.match(metaid)
152
+ type = id['type'] if id
153
+ title = bib&.at("./title[@type = 'main']")&.text ||
154
+ bib&.at("./title")&.text || bib&.at("./formattedref")&.text
155
+ "#{pubclass} :: #{type} :: #{id&.text || metaid} :: #{title}"
156
+ end
157
+
158
+ def biblio_reorder(xmldoc)
159
+ xmldoc.xpath("//references").each do |r|
160
+ biblio_reorder1(r)
161
+ end
162
+ end
155
163
 
156
- def biblio_reorder(xmldoc)
157
- xmldoc.xpath("//references").each do |r|
158
- biblio_reorder1(r)
164
+ def normref_cleanup(xmldoc)
165
+ super
166
+ r = xmldoc.at(NORM_REF) || return
167
+ title = r.at("./title") and
168
+ title.content = "References"
159
169
  end
160
170
  end
161
171
  end
162
172
  end
163
- end