relaton-iec 1.7.6 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +36 -0
  3. data/.rubocop.yml +1 -1
  4. data/README.adoc +25 -0
  5. data/grammars/basicdoc.rng +165 -20
  6. data/grammars/biblio.rng +5 -6
  7. data/grammars/iec.rng +96 -1
  8. data/grammars/isodoc.rng +532 -16
  9. data/grammars/isostandard.rng +56 -103
  10. data/grammars/reqt.rng +31 -2
  11. data/lib/relaton_iec/basic_block/alignment.rb +30 -0
  12. data/lib/relaton_iec/basic_block/basic_block.rb +15 -0
  13. data/lib/relaton_iec/basic_block/citation_type.rb +32 -0
  14. data/lib/relaton_iec/basic_block/dl.rb +60 -0
  15. data/lib/relaton_iec/basic_block/eref.rb +10 -0
  16. data/lib/relaton_iec/basic_block/eref_type.rb +39 -0
  17. data/lib/relaton_iec/basic_block/formula.rb +34 -0
  18. data/lib/relaton_iec/basic_block/image.rb +41 -0
  19. data/lib/relaton_iec/basic_block/index.rb +27 -0
  20. data/lib/relaton_iec/basic_block/index_xref.rb +31 -0
  21. data/lib/relaton_iec/basic_block/note.rb +21 -0
  22. data/lib/relaton_iec/basic_block/paragraph.rb +27 -0
  23. data/lib/relaton_iec/basic_block/paragraph_with_footnote.rb +29 -0
  24. data/lib/relaton_iec/basic_block/reference_format.rb +38 -0
  25. data/lib/relaton_iec/basic_block/stem.rb +30 -0
  26. data/lib/relaton_iec/basic_block/table.rb +115 -0
  27. data/lib/relaton_iec/basic_block/text_element.rb +27 -0
  28. data/lib/relaton_iec/hash_converter.rb +1 -1
  29. data/lib/relaton_iec/hit_collection.rb +1 -1
  30. data/lib/relaton_iec/iec_bibliographic_item.rb +93 -1
  31. data/lib/relaton_iec/iec_bibliography.rb +6 -5
  32. data/lib/relaton_iec/processor.rb +1 -2
  33. data/lib/relaton_iec/scrapper.rb +10 -13
  34. data/lib/relaton_iec/tc_sc_officers_note.rb +24 -0
  35. data/lib/relaton_iec/version.rb +1 -1
  36. data/lib/relaton_iec/xml_parser.rb +21 -1
  37. data/relaton_iec.gemspec +2 -4
  38. metadata +25 -37
  39. data/.github/workflows/macos.yml +0 -34
  40. data/.github/workflows/ubuntu.yml +0 -33
  41. data/.github/workflows/windows.yml +0 -35
@@ -0,0 +1,10 @@
1
+ module RelatonIec
2
+ class Eref < RelatonIec::ErefType
3
+ #
4
+ # @param [Nokogiri::XML::Builder] builder
5
+ #
6
+ def to_xml(builder)
7
+ builder.eref { super }
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,39 @@
1
+ module RelatonIec
2
+ class ErefType < RelatonIec::CitationType
3
+ # @return [String]
4
+ attr_reader :citeas
5
+
6
+ # @return [RelatonIec::ReferenceFormat]
7
+ attr_reader :type
8
+
9
+ # @return [Boolean, nil]
10
+ attr_reader :normative
11
+
12
+ # @return [String, nil]
13
+ attr_reader :alt
14
+
15
+ # @param [String] citeas
16
+ # @param [RelatonIec::ReferenceFormat] type
17
+ # @param [Hash] args
18
+ # @option args [Boolean, nil] :normative
19
+ # @option args [String, nil] :alt
20
+ def initialize(citeas:, type:, bibitemid:, locality:, **args)
21
+ super bibitemid, locality, args[:date]
22
+ @citeas = citeas
23
+ @type = type
24
+ @normative = args[:normative]
25
+ @alt = args[:alt]
26
+ end
27
+
28
+ #
29
+ # @param [Nokogiri::XML::Builder] builder <description>
30
+ #
31
+ def to_xml(builder) # rubocop:disable Metrics/AbcSize
32
+ builder.parent[:normative] = normative unless normative.nil?
33
+ builder.parent[:citeas] = citeas
34
+ builder.parent[:type] = type
35
+ builder.parent[:alt] = alt if alt
36
+ super
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,34 @@
1
+ module BasicBlock
2
+ class Formula
3
+ #
4
+ # @param [String] id
5
+ # @param [BasicBlock::Stem] content
6
+ # @param [Array<BasicBlock::Note>] note
7
+ # @param [Hash] args
8
+ # @option args [Boolean, nil] :unnumbered
9
+ # @option args [String, nil] :subsequence
10
+ # @option args [Boolean, nil] :inequality
11
+ # @option args [BasicBlock::Dl, nil] :dl
12
+ #
13
+ def initialize(id:, content:, note:, **args)
14
+ @id = id
15
+ @content = content
16
+ @note = note
17
+ @unnumbered = args[:unnumbered]
18
+ end
19
+
20
+ #
21
+ # @param [Builder] builder
22
+ #
23
+ def to_xml(builder) # rubocop:disable Metrics/CyclomaticComplexity
24
+ f = builder.formula id: @id do |b|
25
+ @content.to_xml b
26
+ @dl&.each { |d| d.to_xml b }
27
+ @note.each { |n| n.to_xml b }
28
+ end
29
+ f[:unnumbered] = @unnumbered if @unnumbered
30
+ f[:subsequence] = @subsequence if @subsequence
31
+ f[:inequality] = @inequality if @ineainequality
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,41 @@
1
+ module BasicBlock
2
+ class Image
3
+ #
4
+ # @param [String] id
5
+ # @param [String] src
6
+ # @param [String] mimetype
7
+ # @param [Hash] args
8
+ # @option args [String] :filename
9
+ #
10
+ def initialize(id:, src:, mimetype:, **args) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength
11
+ @id = id
12
+ @src = src
13
+ @mimetype = mimetype
14
+ @filename = args[:filename]
15
+ if args[:width] && !args[:width].is_a?(Integer) && args[:width] != "auto"
16
+ warn "[basic-block] WARNING: invalid image width attribute \"#{args[:width]}"
17
+ warn "[basic-block] image width should be integer or \"auto\""
18
+ end
19
+ if args[:height] && !args[:height].is_a?(Integer) && args[:height] != "auto"
20
+ warn "[basic-block] WARNING: invalid image height attribute \"#{args[:height]}"
21
+ warn "[basic-block] image height should be integer or \"auto\""
22
+ end
23
+ @width = args[:width]
24
+ @height = args[:height]
25
+ @alt = args[:alt]
26
+ @title = args[:title]
27
+ @longdesc = args[:longdesc]
28
+ end
29
+
30
+ # @param [Nokogiri::XML::Builder]
31
+ def to_xml(builder) # rubocop:disable Metrics/CyclomaticComplexity
32
+ img = builder.image id: @id, src: @src, mimetype: @mimetype
33
+ img[:filename] = @filename if @filename
34
+ img[:width] = @width if @width
35
+ img[:height] = @height if @height
36
+ img[:alt] = @alt if @alt
37
+ img[:title] = @title if @title
38
+ img[:longdesc] = @longdesc if @longdesc
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,27 @@
1
+ module BasicBlock
2
+ class Index
3
+ #
4
+ # @param [Array<BasicBlock::TextElement] primary
5
+ # @param [Hash] args
6
+ # @option args [String, nil] :to
7
+ # @option args [Array<BasicBlock::TextElement>, nil] :secondary
8
+ # @option args [Array<BasicBlock::TextElement>, nil] :tertiary
9
+ #
10
+ def initialize(primary:, **args)
11
+ @to = args[:to]
12
+ @primary = primary
13
+ @secondary = args[:secondary]
14
+ @tertiary = args[:tertiary]
15
+ end
16
+
17
+ # @param [Nokogiri::XML::Builder] builder
18
+ def to_xml(builder) # rubocop:disable Metrics/CyclomaticComplexity
19
+ idx = builder.index do |b|
20
+ @primary.each { |p| p.to_xml b }
21
+ @secondary&.each { |s| s.to_xml b }
22
+ @tertiary&.each { |t| t.to_xml b }
23
+ end
24
+ idx[:to] = @to if @to
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,31 @@
1
+ module BasicBlock
2
+ class IndexXref
3
+ #
4
+ # @param [Boolean] also
5
+ # @param [Array<BasicBlock::TextElement>] primary
6
+ # @param [Array<BasicBlock::TextElement>] target
7
+ # @param [Hash] args
8
+ # @option args [Array<BasicBlock::TextElement>, nil] secondary
9
+ # @option args [Array<BasicBlock::TextElement>, nil] tertiary
10
+ #
11
+ def initialize(also:, primary:, target:, **args)
12
+ @also = also
13
+ @primary = primary
14
+ @target = target
15
+ @secondary = args[:secondary]
16
+ @tertiary = args[:tertiary]
17
+ end
18
+
19
+ #
20
+ # @param [Nokogiri::XML::Builder] builder
21
+ #
22
+ def to_xml(builder) # rubocop:disable Metrics/CyclomaticComplexity
23
+ builder.send "index-xref", also: @also do |b|
24
+ @primary.each { |p| p.to_xml b }
25
+ @secondary&.each { |s| s.to_xml b }
26
+ @tertiary&.each { |t| t.to_xml b }
27
+ @target.each { |t| t.to_xml b }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ module BasicBlock
2
+ class Note
3
+ #
4
+ # @param [String] id
5
+ # @param [Array<BasicBlock::Paragraph>] content
6
+ #
7
+ def initialize(id:, content:)
8
+ @id = id
9
+ @contain = content
10
+ end
11
+
12
+ #
13
+ # @param [Nokogiei::XMO::Builder] builder
14
+ #
15
+ def to_xml(builder)
16
+ builder.note id: @id do |b|
17
+ @content.each { |c| c.to_xm b }
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ module BasicBlock
2
+ class Paragraph
3
+ #
4
+ # @param [String] id
5
+ # @param [Array<BasicBlock::TextElement>] content
6
+ # @param [Array<BasicBlock::Note>] note
7
+ # @param [BasicBlock::Alignment, nil] align
8
+ #
9
+ def initialize(id:, content:, note:, align: nil)
10
+ @id = id
11
+ @content = content
12
+ @note = note
13
+ @align = align
14
+ end
15
+ end
16
+
17
+ #
18
+ # @param [Nokogiri::XML::Builder] builder
19
+ #
20
+ def to_xml(builder)
21
+ p = builder.p id: @id do |b|
22
+ @content.each { |c| c.to_xml b }
23
+ @note.each { |n| n.to_xml b }
24
+ end
25
+ p[:align] = @align if @align
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ module BasicBlock
2
+ class ParagraphWithFootnote
3
+ #
4
+ # @param [String] id
5
+ # @param [Hash] args
6
+ # @param [BasicBlock::Alignment, nil] align
7
+ # @param [Array<BasicBlock::TextElement, BasicBlock::Eref, BasicBlock::Stem,
8
+ # BasicBlock::Image, BasicBlock::Index, BasicBlock::IndexXref>] content
9
+ # @param [Array<RelatonIec::Note>] note
10
+ #
11
+ def initialize(id:, align: nil, content: [], note: [])
12
+ @id = id
13
+ @aligments = align
14
+ @content = content
15
+ @note = note
16
+ end
17
+
18
+ #
19
+ # @param [Nokogiri::XML::Builder] builder
20
+ #
21
+ def to_xml(builder)
22
+ elm = builder.p(@id) do |b|
23
+ @content.each { |te| te.to_xml b }
24
+ @note.each { |n| n.to_xml b }
25
+ end
26
+ elm[:align] = @align if @align
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,38 @@
1
+ module RelatonIec
2
+ def self.respond_to_missing?(method, _include_private)
3
+ method == "ReferenceFormat"
4
+ end
5
+
6
+ def self.method_missing(_method, *args)
7
+ ReferenceFormat.new *args
8
+ end
9
+
10
+ class ReferenceFormat
11
+ FORMATS = %w[external inline footnote callout].freeze
12
+
13
+ #
14
+ # @param [String] format
15
+ #
16
+ def initialize(format)
17
+ unless FORMATS.include? format
18
+ warn "[relaton-iec] WARNING: invalid reference format \"#{format}\""
19
+ warn "[relaton-iec] alloved reference formats are: #{FORMATS.join ', '}"
20
+ end
21
+ @format = format
22
+ end
23
+
24
+ #
25
+ # @return [String]
26
+ #
27
+ def to_s
28
+ @format
29
+ end
30
+
31
+ #
32
+ # @return [Sting] <description>
33
+ #
34
+ def inspect
35
+ to_s
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,30 @@
1
+ module BasicBlock
2
+ class Stem
3
+ TYPES = %w[MathML AsciiMath].freeze
4
+
5
+ # @return [String]
6
+ attr_reader :type
7
+
8
+ #
9
+ # @param [String] type
10
+ # @param [Array<#to_xml>] content any element
11
+ #
12
+ def initialize(type:, content: [])
13
+ unless TYPES.include? type
14
+ warn "[relaton-iec] WARNING: invalud type \"#{type}\""
15
+ warn "[relaton-iec] allowed types are: #{TYPES.join ', '}"
16
+ end
17
+ @type = type
18
+ @content = content
19
+ end
20
+
21
+ #
22
+ # @param [Nokogiri::XML::Builder] builder
23
+ #
24
+ def to_xml(builder)
25
+ builder.stem(type) do |b|
26
+ content.each { |c| c.to_xml b }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,115 @@
1
+ module BasicBlock
2
+ class Table
3
+ #
4
+ # @param [String] id
5
+ # @param [Array<BasicBlock::Tr>] tbody
6
+ # @param [Array<BasicBlock::Paragraph>] note
7
+ # @param [Hash] args
8
+ # @option args [Boolean, nil] :unnumbered
9
+ # @option args [String, nil] :subsequence
10
+ # @option args [String, nil] :alt
11
+ # @option args [String, nil] :summary
12
+ # @option args [String, nil] :uri
13
+ # @option args [BasicBlock::TextElement, nil] :tname
14
+ # @option args [BasicBlock::Table::Tr, nil] :thead
15
+ # @option args [BasicBlock::TextElement, nil] :tfoot
16
+ # @option args [BasicBlock::Dl, nil] :dl
17
+ #
18
+ def initialize(id:, tbody:, note:, **args) # rubocop:disable Metrics/MethodLength
19
+ @id = id
20
+ @unnumbered = args[:unnumbered]
21
+ @subsequence = args[:subsequence]
22
+ @alt = args[:alt]
23
+ @summary = args[:summary]
24
+ @uri = args[:uri]
25
+ @tname = args[:tname]
26
+ @thead = args[:thead]
27
+ @tbody = tbody
28
+ @tfoot = args[:tfoot]
29
+ @note = note
30
+ @dl = args[:dl]
31
+ end
32
+
33
+ # @param [Nokogiri::XML::Builder] builder
34
+ def to_xml(builder) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
35
+ tab = builder.table id: @id do |b|
36
+ b.name { @tname.to_xml b } if @tname
37
+ b.thead { @thead.to_xml b } if @thead
38
+ @tbody.each { |tb| tb.to_xml b }
39
+ b.name { @tfoot.to_xml b } if @tfoot
40
+ @note.each { |n| b.note { n.to_xml b } }
41
+ @dl.to_xml b
42
+ end
43
+ tab[:unnumbered] = @unnumbered if @unnumbered
44
+ tab[:subsequence] = @subsequence if @subsequence
45
+ tab[:alt] = @alt if @alt
46
+ tab[:summary] = @summary if @summary
47
+ tab[:uri] = @uri if @uri
48
+ end
49
+
50
+ class Tr
51
+ # @param [Array<BasicBlock::Table::Td, BasicBlock::Table::Th>] content
52
+ def initialize(content)
53
+ @content = content
54
+ end
55
+
56
+ # @param [Nokogiri::XML::Builder] builder
57
+ def to_xml(builder)
58
+ builder.tr do |b|
59
+ @content.each { |c| c.to_xm b }
60
+ end
61
+ end
62
+ end
63
+
64
+ class TabCell
65
+ ALIGNS = %w[left right ceter].freeze
66
+ VALIGNS = %w[top middle bottom baseline].freeze
67
+
68
+ # @param [Array<BasicBlock::TextElement,
69
+ # BasicBlock::ParagraphWithFootnote>] content
70
+ # @param [Hssh] args
71
+ # @option args [String, nil] :colspan
72
+ # @option args [String, nil] :rowspan
73
+ # @option args [String, nil] :align
74
+ # @option args [String, nil] :valign
75
+ def initialize(content, **args) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
76
+ if args[:align] && !ALIGNS.include?(args[:align])
77
+ warn "[basic-block] WARNING: invalid table/tr/td align \"#{args[:align]}\""
78
+ warn "[basic-block] alloved aligns are: #{ALIGNS.join ', '}"
79
+ end
80
+ if args[:valign] && !VALIGNS.include?(args[:valign])
81
+ warn "[basic-block] WARNING: invalid table/tr/td valign \"#{args[:valign]}\""
82
+ warn "[basic-block] alloved valigns are: #{VALIGNS.join ', '}"
83
+ end
84
+ @content = content
85
+ @colspan = args[:colspan]
86
+ @rowspan = args[:rowspan]
87
+ @align = args[:align]
88
+ @valign = args[:valign]
89
+ end
90
+
91
+ # @param [Nokogiri::XML::Builder] builder
92
+ def to_xml(builder)
93
+ td = @content.each { |c| c.to_xml builder }
94
+ td[:colspan] = @colspan if @colspan
95
+ td[:rowspan] = @rowspan if @rowspan
96
+ td[:align] = @align if @align
97
+ td[:valign] = @valign if @valign
98
+ end
99
+ end
100
+
101
+ class Td < BasicBlock::Table::TabCell
102
+ # @param [Nokogiri::XML::Builder] builder
103
+ def to_xml(builder)
104
+ builder.th { super }
105
+ end
106
+ end
107
+
108
+ class Th < BasicBlock::Table::TabCell
109
+ # @param [Nokogiri::XML::Builder] builder
110
+ def to_xml(builder)
111
+ builder.td { super }
112
+ end
113
+ end
114
+ end
115
+ end