metanorma-ieee 0.0.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.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/rake.yml +13 -0
  3. data/.rubocop.yml +10 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +11 -0
  6. data/LICENSE +25 -0
  7. data/README.adoc +30 -0
  8. data/Rakefile +8 -0
  9. data/bin/console +14 -0
  10. data/bin/rspec +17 -0
  11. data/bin/setup +8 -0
  12. data/lib/html2doc/ieee.rb +89 -0
  13. data/lib/isodoc/ieee/base_convert.rb +33 -0
  14. data/lib/isodoc/ieee/html/header.html +146 -0
  15. data/lib/isodoc/ieee/html/html_ieee_intro.html +12 -0
  16. data/lib/isodoc/ieee/html/html_ieee_titlepage.html +44 -0
  17. data/lib/isodoc/ieee/html/htmlstyle.css +1027 -0
  18. data/lib/isodoc/ieee/html/htmlstyle.scss +736 -0
  19. data/lib/isodoc/ieee/html/ieee.css +3603 -0
  20. data/lib/isodoc/ieee/html/ieee.scss +3418 -0
  21. data/lib/isodoc/ieee/html/scripts.html +70 -0
  22. data/lib/isodoc/ieee/html/word_ieee_intro.html +70 -0
  23. data/lib/isodoc/ieee/html/word_ieee_titlepage.html +28 -0
  24. data/lib/isodoc/ieee/html/wordstyle.css +5310 -0
  25. data/lib/isodoc/ieee/html/wordstyle.scss +5026 -0
  26. data/lib/isodoc/ieee/html_convert.rb +52 -0
  27. data/lib/isodoc/ieee/i18n-en.yaml +28 -0
  28. data/lib/isodoc/ieee/i18n.rb +19 -0
  29. data/lib/isodoc/ieee/ieee.amendment.xsl +11177 -0
  30. data/lib/isodoc/ieee/ieee.rb +11 -0
  31. data/lib/isodoc/ieee/ieee.standard.xsl +11177 -0
  32. data/lib/isodoc/ieee/init.rb +28 -0
  33. data/lib/isodoc/ieee/metadata.rb +136 -0
  34. data/lib/isodoc/ieee/pdf_convert.rb +24 -0
  35. data/lib/isodoc/ieee/presentation_terms.rb +181 -0
  36. data/lib/isodoc/ieee/presentation_xml_convert.rb +89 -0
  37. data/lib/isodoc/ieee/word_authority.rb +160 -0
  38. data/lib/isodoc/ieee/word_cleanup.rb +134 -0
  39. data/lib/isodoc/ieee/word_convert.rb +75 -0
  40. data/lib/isodoc/ieee/xref.rb +77 -0
  41. data/lib/isodoc/ieee.rb +11 -0
  42. data/lib/metanorma/ieee/basicdoc.rng +1150 -0
  43. data/lib/metanorma/ieee/biblio.rng +1385 -0
  44. data/lib/metanorma/ieee/boilerplate.xml +298 -0
  45. data/lib/metanorma/ieee/cleanup.rb +160 -0
  46. data/lib/metanorma/ieee/converter.rb +81 -0
  47. data/lib/metanorma/ieee/front.rb +120 -0
  48. data/lib/metanorma/ieee/ieee.rng +97 -0
  49. data/lib/metanorma/ieee/isodoc.rng +2776 -0
  50. data/lib/metanorma/ieee/processor.rb +56 -0
  51. data/lib/metanorma/ieee/reqt.rng +226 -0
  52. data/lib/metanorma/ieee/validate.rb +198 -0
  53. data/lib/metanorma/ieee/validate_section.rb +119 -0
  54. data/lib/metanorma/ieee/validate_style.rb +108 -0
  55. data/lib/metanorma/ieee/version.rb +5 -0
  56. data/lib/metanorma/ieee.rb +11 -0
  57. data/lib/metanorma-ieee.rb +8 -0
  58. data/metanorma-itu.gemspec +41 -0
  59. metadata +284 -0
@@ -0,0 +1,108 @@
1
+ module Metanorma
2
+ module IEEE
3
+ class Converter < Standoc::Converter
4
+ ASSETS_TO_STYLE =
5
+ "//termsource | //formula | //termnote | "\
6
+ "//p[not(ancestor::boilerplate)] | //li[not(p)] | //dt | "\
7
+ "//dd[not(p)] | //td[not(p)][not(ancestor::boilerplate)] | "\
8
+ "//th[not(p)][not(ancestor::boilerplate)] | //example".freeze
9
+
10
+ def extract_text(node)
11
+ return "" if node.nil?
12
+
13
+ node1 = Nokogiri::XML.fragment(node.to_s)
14
+ node1.xpath("//link | //locality | //localityStack").each(&:remove)
15
+ ret = ""
16
+ node1.traverse { |x| ret += x.text if x.text? }
17
+ HTMLEntities.new.decode(ret)
18
+ end
19
+
20
+ def asset_style(root)
21
+ root.xpath(ASSETS_TO_STYLE).each { |e| style(e, extract_text(e)) }
22
+ end
23
+
24
+ def style_regex(regex, warning, node, text)
25
+ (m = regex.match(text)) && style_warning(node, warning, m[:num])
26
+ end
27
+
28
+ def style_warning(node, msg, text = nil)
29
+ return if @novalid
30
+
31
+ w = msg
32
+ w += ": #{text}" if text
33
+ @log.add("Style", node, w)
34
+ end
35
+
36
+ def style(node, text)
37
+ return if @novalid
38
+
39
+ style_number(node, text)
40
+ style_percent(node, text)
41
+ style_units(node, text)
42
+ end
43
+
44
+ # Style manual 14.2
45
+ def style_number(node, text)
46
+ style_regex(/\b(?<num>[0-9]+,[0-9]+)/i,
47
+ "possible decimal comma", node, text)
48
+ style_regex(/(?:^|\s)(?<num>[\u2212-]?\.[0-9]+)/i,
49
+ "decimal without initial zero", node, text)
50
+ end
51
+
52
+ # Style manual 14.2
53
+ def style_percent(node, text)
54
+ style_regex(/\b(?<num>[0-9.]+%)/,
55
+ "no space before percent sign", node, text)
56
+ end
57
+
58
+ # leaving out as problematic: N J K C S T H h d B o E
59
+ SI_UNIT = "(m|cm|mm|km|μm|nm|g|kg|mgmol|cd|rad|sr|Hz|Hz|MHz|Pa|hPa|kJ|"\
60
+ "V|kV|W|MW|kW|F|μF|Ω|Wb|°C|lm|lx|Bq|Gy|Sv|kat|l|t|eV|u|Np|Bd|"\
61
+ "bit|kB|MB|Hart|nat|Sh|var)".freeze
62
+
63
+ # Style manual 14.2
64
+ def style_units(node, text)
65
+ style_regex(/(\b|^)(?<num>[0-9][0-9.]*#{SI_UNIT})\b/o,
66
+ "no space between number and SI unit", node, text)
67
+ style_regex(/(\b|^)(?<num>[0-9.]+\s*\u00b1\s*[0-9.]+\s*#{SI_UNIT})\b/o,
68
+ "unit is needed on both value and tolerance", node, text)
69
+ end
70
+
71
+ # Style manual 16.3.2
72
+ def table_style(docxml)
73
+ docxml.xpath("//td").each do |td|
74
+ style_regex(/^(?<num>[\u2212-]?[0-9]{5,}[.0-9]*|-?[0-9]+\.[0-9]{5,})$/,
75
+ "number in table not broken up in threes", td, td.text)
76
+ end
77
+ docxml.xpath("//table").each { |t| table_style_columns(t) }
78
+ end
79
+
80
+ # deliberately doing naive, ignoring rowspan
81
+ def table_style_columns(table)
82
+ table_extract_columns(table).each do |col|
83
+ next unless col.any? do |x|
84
+ /^[0-9. ]+$/.match?(x) &&
85
+ (/\d{3} \d/.match?(x) || /\d \d{3}/.match?(x))
86
+ end
87
+
88
+ col.each do |x|
89
+ /^[0-9. ]+$/.match?(x) && /\d{4}/.match?(x) and
90
+ @log.add("Style", table,
91
+ "#{x} is a 4-digit number in a table column with "\
92
+ "numbers broken up in threes")
93
+ end
94
+ end
95
+ end
96
+
97
+ def table_extract_columns(table)
98
+ ret = table.xpath(".//tr").each_with_object([]) do |tr, m|
99
+ tr.xpath("./td | ./th").each_with_index do |d, i|
100
+ m[i] ||= []
101
+ m[i] << d.text
102
+ end
103
+ end
104
+ ret.map { |x| x.is_a?(Array) ? x : [] }
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,5 @@
1
+ module Metanorma
2
+ module IEEE
3
+ VERSION = "0.0.1".freeze
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ require "metanorma/ieee/version"
2
+ require "metanorma/ieee/processor"
3
+ require "metanorma/ieee/converter"
4
+
5
+ module Metanorma
6
+ module IEEE
7
+ ORGANIZATION_NAME_SHORT = "IEEE"
8
+ ORGANIZATION_NAME_LONG = "Institute of Electrical and Electronics Engineers"
9
+ end
10
+ end
11
+
@@ -0,0 +1,8 @@
1
+ require "metanorma/ieee"
2
+ require "asciidoctor"
3
+ require "isodoc/ieee"
4
+ require "html2doc/ieee"
5
+
6
+ if defined? Metanorma
7
+ Metanorma::Registry.instance.register(Metanorma::IEEE::Processor)
8
+ end
@@ -0,0 +1,41 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "metanorma/ieee/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "metanorma-ieee"
7
+ spec.version = Metanorma::IEEE::VERSION
8
+ spec.authors = ["Ribose Inc."]
9
+ spec.email = ["open.source@ribose.com"]
10
+
11
+ spec.summary = "Metanorma for the IEEE"
12
+ spec.description = <<~DESCRIPTION
13
+ Metanorma for the ITU.
14
+ DESCRIPTION
15
+
16
+ spec.homepage = "https://github.com/metanorma/metanorma-ieee"
17
+ spec.license = "BSD-2-Clause"
18
+
19
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
+ f.match(%r{^(test|spec|features)/})
21
+ end
22
+ spec.bindir = "exe"
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ["lib"]
25
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
26
+
27
+ spec.add_dependency "metanorma-standoc", "~> 2.1.0"
28
+
29
+ spec.add_development_dependency "debug"
30
+ spec.add_development_dependency "equivalent-xml", "~> 0.6"
31
+ spec.add_development_dependency "guard", "~> 2.14"
32
+ spec.add_development_dependency "guard-rspec", "~> 4.7"
33
+ spec.add_development_dependency "rake", "~> 13.0"
34
+ spec.add_development_dependency "rspec", "~> 3.6"
35
+ spec.add_development_dependency "rubocop", "~> 1.5.2"
36
+ spec.add_development_dependency "sassc", "2.4.0"
37
+ spec.add_development_dependency "simplecov", "~> 0.15"
38
+ spec.add_development_dependency "timecop", "~> 0.9"
39
+ spec.add_development_dependency "vcr", "~> 6.1.0"
40
+ spec.add_development_dependency "webmock"
41
+ end
metadata ADDED
@@ -0,0 +1,284 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: metanorma-ieee
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ribose Inc.
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-06-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: metanorma-standoc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: debug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: equivalent-xml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.14'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.14'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '13.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '13.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.6'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.6'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 1.5.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.5.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: sassc
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 2.4.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 2.4.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.15'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.15'
153
+ - !ruby/object:Gem::Dependency
154
+ name: timecop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.9'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.9'
167
+ - !ruby/object:Gem::Dependency
168
+ name: vcr
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 6.1.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 6.1.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: webmock
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ description: 'Metanorma for the ITU.
196
+
197
+ '
198
+ email:
199
+ - open.source@ribose.com
200
+ executables: []
201
+ extensions: []
202
+ extra_rdoc_files: []
203
+ files:
204
+ - ".github/workflows/rake.yml"
205
+ - ".rubocop.yml"
206
+ - CODE_OF_CONDUCT.md
207
+ - Gemfile
208
+ - LICENSE
209
+ - README.adoc
210
+ - Rakefile
211
+ - bin/console
212
+ - bin/rspec
213
+ - bin/setup
214
+ - lib/html2doc/ieee.rb
215
+ - lib/isodoc/ieee.rb
216
+ - lib/isodoc/ieee/base_convert.rb
217
+ - lib/isodoc/ieee/html/header.html
218
+ - lib/isodoc/ieee/html/html_ieee_intro.html
219
+ - lib/isodoc/ieee/html/html_ieee_titlepage.html
220
+ - lib/isodoc/ieee/html/htmlstyle.css
221
+ - lib/isodoc/ieee/html/htmlstyle.scss
222
+ - lib/isodoc/ieee/html/ieee.css
223
+ - lib/isodoc/ieee/html/ieee.scss
224
+ - lib/isodoc/ieee/html/scripts.html
225
+ - lib/isodoc/ieee/html/word_ieee_intro.html
226
+ - lib/isodoc/ieee/html/word_ieee_titlepage.html
227
+ - lib/isodoc/ieee/html/wordstyle.css
228
+ - lib/isodoc/ieee/html/wordstyle.scss
229
+ - lib/isodoc/ieee/html_convert.rb
230
+ - lib/isodoc/ieee/i18n-en.yaml
231
+ - lib/isodoc/ieee/i18n.rb
232
+ - lib/isodoc/ieee/ieee.amendment.xsl
233
+ - lib/isodoc/ieee/ieee.rb
234
+ - lib/isodoc/ieee/ieee.standard.xsl
235
+ - lib/isodoc/ieee/init.rb
236
+ - lib/isodoc/ieee/metadata.rb
237
+ - lib/isodoc/ieee/pdf_convert.rb
238
+ - lib/isodoc/ieee/presentation_terms.rb
239
+ - lib/isodoc/ieee/presentation_xml_convert.rb
240
+ - lib/isodoc/ieee/word_authority.rb
241
+ - lib/isodoc/ieee/word_cleanup.rb
242
+ - lib/isodoc/ieee/word_convert.rb
243
+ - lib/isodoc/ieee/xref.rb
244
+ - lib/metanorma-ieee.rb
245
+ - lib/metanorma/ieee.rb
246
+ - lib/metanorma/ieee/basicdoc.rng
247
+ - lib/metanorma/ieee/biblio.rng
248
+ - lib/metanorma/ieee/boilerplate.xml
249
+ - lib/metanorma/ieee/cleanup.rb
250
+ - lib/metanorma/ieee/converter.rb
251
+ - lib/metanorma/ieee/front.rb
252
+ - lib/metanorma/ieee/ieee.rng
253
+ - lib/metanorma/ieee/isodoc.rng
254
+ - lib/metanorma/ieee/processor.rb
255
+ - lib/metanorma/ieee/reqt.rng
256
+ - lib/metanorma/ieee/validate.rb
257
+ - lib/metanorma/ieee/validate_section.rb
258
+ - lib/metanorma/ieee/validate_style.rb
259
+ - lib/metanorma/ieee/version.rb
260
+ - metanorma-itu.gemspec
261
+ homepage: https://github.com/metanorma/metanorma-ieee
262
+ licenses:
263
+ - BSD-2-Clause
264
+ metadata: {}
265
+ post_install_message:
266
+ rdoc_options: []
267
+ require_paths:
268
+ - lib
269
+ required_ruby_version: !ruby/object:Gem::Requirement
270
+ requirements:
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ version: 2.5.0
274
+ required_rubygems_version: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ requirements: []
280
+ rubygems_version: 3.3.16
281
+ signing_key:
282
+ specification_version: 4
283
+ summary: Metanorma for the IEEE
284
+ test_files: []