relaton-iec 1.7.7 → 1.10.0

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -11
  3. data/.rubocop.yml +3 -1
  4. data/README.adoc +36 -0
  5. data/grammars/basicdoc.rng +191 -27
  6. data/grammars/biblio.rng +7 -8
  7. data/grammars/iec.rng +144 -1
  8. data/grammars/isodoc.rng +1156 -112
  9. data/grammars/isostandard.rng +69 -115
  10. data/grammars/reqt.rng +65 -7
  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/hit_collection.rb +1 -1
  29. data/lib/relaton_iec/iec_bibliographic_item.rb +93 -1
  30. data/lib/relaton_iec/processor.rb +1 -2
  31. data/lib/relaton_iec/tc_sc_officers_note.rb +24 -0
  32. data/lib/relaton_iec/version.rb +1 -1
  33. data/lib/relaton_iec/xml_parser.rb +20 -0
  34. data/relaton_iec.gemspec +2 -4
  35. metadata +23 -5
@@ -38,6 +38,12 @@
38
38
  </define>
39
39
  <define name="BibDataExtensionType">
40
40
  <ref name="doctype"/>
41
+ <optional>
42
+ <ref name="docsubtype"/>
43
+ </optional>
44
+ <optional>
45
+ <ref name="horizontal"/>
46
+ </optional>
41
47
  <ref name="editorialgroup"/>
42
48
  <zeroOrMore>
43
49
  <ref name="ics"/>
@@ -76,19 +82,6 @@
76
82
  </choice>
77
83
  </element>
78
84
  </define>
79
- <define name="ul">
80
- <element name="ul">
81
- <attribute name="id">
82
- <data type="ID"/>
83
- </attribute>
84
- <oneOrMore>
85
- <ref name="ul_li"/>
86
- </oneOrMore>
87
- <zeroOrMore>
88
- <ref name="note"/>
89
- </zeroOrMore>
90
- </element>
91
- </define>
92
85
  <define name="sections">
93
86
  <element name="sections">
94
87
  <zeroOrMore>
@@ -108,7 +101,11 @@
108
101
  <ref name="definitions"/>
109
102
  </optional>
110
103
  <oneOrMore>
111
- <ref name="clause"/>
104
+ <choice>
105
+ <ref name="clause"/>
106
+ <ref name="term-clause"/>
107
+ <ref name="terms"/>
108
+ </choice>
112
109
  </oneOrMore>
113
110
  </element>
114
111
  </define>
@@ -137,18 +134,19 @@
137
134
  </choice>
138
135
  </attribute>
139
136
  </optional>
137
+ <optional>
138
+ <attribute name="type"/>
139
+ </optional>
140
140
  <optional>
141
141
  <ref name="section-title"/>
142
142
  </optional>
143
143
  <choice>
144
- <group>
144
+ <choice>
145
145
  <oneOrMore>
146
146
  <ref name="BasicBlock"/>
147
147
  </oneOrMore>
148
- <zeroOrMore>
149
- <ref name="note"/>
150
- </zeroOrMore>
151
- </group>
148
+ <ref name="amend"/>
149
+ </choice>
152
150
  <oneOrMore>
153
151
  <ref name="clause-subsection"/>
154
152
  </oneOrMore>
@@ -161,6 +159,20 @@
161
159
  <data type="ID"/>
162
160
  </attribute>
163
161
  </optional>
162
+ <optional>
163
+ <attribute name="language"/>
164
+ </optional>
165
+ <optional>
166
+ <attribute name="script"/>
167
+ </optional>
168
+ <optional>
169
+ <attribute name="tag"/>
170
+ </optional>
171
+ <optional>
172
+ <attribute name="multilingual-rendering">
173
+ <ref name="MultilingualRenderingType"/>
174
+ </attribute>
175
+ </optional>
164
176
  <ref name="preferred"/>
165
177
  <zeroOrMore>
166
178
  <ref name="admitted"/>
@@ -171,7 +183,7 @@
171
183
  <optional>
172
184
  <ref name="termdomain"/>
173
185
  </optional>
174
- <ref name="definition"/>
186
+ <ref name="termdefinition"/>
175
187
  <zeroOrMore>
176
188
  <ref name="termnote"/>
177
189
  </zeroOrMore>
@@ -181,17 +193,9 @@
181
193
  <zeroOrMore>
182
194
  <ref name="termsource"/>
183
195
  </zeroOrMore>
184
- </element>
185
- </define>
186
- <define name="definition">
187
- <element name="definition">
188
- <oneOrMore>
189
- <choice>
190
- <ref name="paragraph"/>
191
- <ref name="figure"/>
192
- <ref name="formula"/>
193
- </choice>
194
- </oneOrMore>
196
+ <zeroOrMore>
197
+ <ref name="term"/>
198
+ </zeroOrMore>
195
199
  </element>
196
200
  </define>
197
201
  <define name="annex">
@@ -230,9 +234,6 @@
230
234
  -->
231
235
  <ref name="BasicBlock"/>
232
236
  </zeroOrMore>
233
- <zeroOrMore>
234
- <ref name="note"/>
235
- </zeroOrMore>
236
237
  <zeroOrMore>
237
238
  <ref name="clause-hanging-paragraph-with-footnote"/>
238
239
  </zeroOrMore>
@@ -271,6 +272,15 @@
271
272
  <value>guide</value>
272
273
  <value>amendment</value>
273
274
  <value>technical-corrigendum</value>
275
+ <value>directive</value>
276
+ </choice>
277
+ </define>
278
+ <define name="DocumentSubtype">
279
+ <choice>
280
+ <value>specification</value>
281
+ <value>method-of-test</value>
282
+ <value>vocabulary</value>
283
+ <value>code-of-practice</value>
274
284
  </choice>
275
285
  </define>
276
286
  <define name="structuredidentifier">
@@ -324,6 +334,11 @@
324
334
  <optional>
325
335
  <attribute name="script"/>
326
336
  </optional>
337
+ <optional>
338
+ <attribute name="inline-header">
339
+ <data type="boolean"/>
340
+ </attribute>
341
+ </optional>
327
342
  <optional>
328
343
  <attribute name="obligation">
329
344
  <choice>
@@ -332,71 +347,24 @@
332
347
  </choice>
333
348
  </attribute>
334
349
  </optional>
350
+ <optional>
351
+ <attribute name="number"/>
352
+ </optional>
353
+ <optional>
354
+ <attribute name="type"/>
355
+ </optional>
335
356
  <optional>
336
357
  <ref name="section-title"/>
337
358
  </optional>
338
359
  <choice>
339
- <group>
340
- <zeroOrMore>
341
- <ref name="BasicBlock"/>
342
- </zeroOrMore>
343
- <zeroOrMore>
344
- <ref name="note"/>
345
- </zeroOrMore>
346
- </group>
360
+ <zeroOrMore>
361
+ <ref name="BasicBlock"/>
362
+ </zeroOrMore>
347
363
  <oneOrMore>
348
364
  <ref name="content-subsection"/>
349
365
  </oneOrMore>
350
366
  </choice>
351
367
  </define>
352
- <define name="table">
353
- <element name="table">
354
- <attribute name="id">
355
- <data type="ID"/>
356
- </attribute>
357
- <optional>
358
- <attribute name="width"/>
359
- </optional>
360
- <optional>
361
- <attribute name="unnumbered">
362
- <data type="boolean"/>
363
- </attribute>
364
- </optional>
365
- <optional>
366
- <attribute name="number"/>
367
- </optional>
368
- <optional>
369
- <attribute name="subsequence"/>
370
- </optional>
371
- <optional>
372
- <attribute name="alt"/>
373
- </optional>
374
- <optional>
375
- <attribute name="summary"/>
376
- </optional>
377
- <optional>
378
- <attribute name="uri">
379
- <data type="anyURI"/>
380
- </attribute>
381
- </optional>
382
- <optional>
383
- <ref name="tname"/>
384
- </optional>
385
- <optional>
386
- <ref name="thead"/>
387
- </optional>
388
- <ref name="tbody"/>
389
- <optional>
390
- <ref name="tfoot"/>
391
- </optional>
392
- <zeroOrMore>
393
- <ref name="table-note"/>
394
- </zeroOrMore>
395
- <optional>
396
- <ref name="dl"/>
397
- </optional>
398
- </element>
399
- </define>
400
368
  </include>
401
369
  <!-- end overrides -->
402
370
  <!--
@@ -416,6 +384,9 @@
416
384
  <zeroOrMore>
417
385
  <ref name="termdocsource"/>
418
386
  </zeroOrMore>
387
+ <optional>
388
+ <ref name="misccontainer"/>
389
+ </optional>
419
390
  <optional>
420
391
  <ref name="boilerplate"/>
421
392
  </optional>
@@ -427,6 +398,14 @@
427
398
  <ref name="annex"/>
428
399
  </zeroOrMore>
429
400
  <ref name="bibliography"/>
401
+ <zeroOrMore>
402
+ <ref name="indexsect"/>
403
+ </zeroOrMore>
404
+ </element>
405
+ </define>
406
+ <define name="horizontal">
407
+ <element name="horizontal">
408
+ <data type="boolean"/>
430
409
  </element>
431
410
  </define>
432
411
  <define name="documentnumber">
@@ -497,9 +476,6 @@
497
476
  <!-- allow hanging paragraphs in annexes: they introduce lists -->
498
477
  <ref name="BasicBlock"/>
499
478
  </zeroOrMore>
500
- <zeroOrMore>
501
- <ref name="note"/>
502
- </zeroOrMore>
503
479
  <zeroOrMore>
504
480
  <ref name="clause-hanging-paragraph-with-footnote"/>
505
481
  </zeroOrMore>
@@ -510,28 +486,6 @@
510
486
  <ref name="Clause-Section"/>
511
487
  </element>
512
488
  </define>
513
- <define name="ul_li">
514
- <element name="li">
515
- <optional>
516
- <attribute name="id">
517
- <data type="ID"/>
518
- </attribute>
519
- </optional>
520
- <optional>
521
- <attribute name="uncheckedcheckbox">
522
- <data type="boolean"/>
523
- </attribute>
524
- </optional>
525
- <optional>
526
- <attribute name="checkedcheckbox">
527
- <data type="boolean"/>
528
- </attribute>
529
- </optional>
530
- <oneOrMore>
531
- <ref name="BasicBlock"/>
532
- </oneOrMore>
533
- </element>
534
- </define>
535
489
  <define name="stagename">
536
490
  <element name="stagename">
537
491
  <text/>
data/grammars/reqt.rng CHANGED
@@ -30,9 +30,22 @@
30
30
  <data type="boolean"/>
31
31
  </attribute>
32
32
  </optional>
33
+ <optional>
34
+ <attribute name="number"/>
35
+ </optional>
33
36
  <optional>
34
37
  <attribute name="subsequence"/>
35
38
  </optional>
39
+ <optional>
40
+ <attribute name="keep-with-next">
41
+ <data type="boolean"/>
42
+ </attribute>
43
+ </optional>
44
+ <optional>
45
+ <attribute name="keep-lines-together">
46
+ <data type="boolean"/>
47
+ </attribute>
48
+ </optional>
36
49
  <attribute name="id">
37
50
  <data type="ID"/>
38
51
  </attribute>
@@ -40,17 +53,31 @@
40
53
  <attribute name="filename"/>
41
54
  </optional>
42
55
  <optional>
43
- <ref name="reqtitle"/>
56
+ <attribute name="model"/>
44
57
  </optional>
45
58
  <optional>
46
- <ref name="label"/>
59
+ <attribute name="type"/>
47
60
  </optional>
48
61
  <optional>
49
- <ref name="subject"/>
62
+ <attribute name="tag"/>
50
63
  </optional>
51
64
  <optional>
52
- <ref name="reqinherit"/>
65
+ <attribute name="multilingual-rendering">
66
+ <ref name="MultilingualRenderingType"/>
67
+ </attribute>
53
68
  </optional>
69
+ <optional>
70
+ <ref name="reqtitle"/>
71
+ </optional>
72
+ <optional>
73
+ <ref name="label"/>
74
+ </optional>
75
+ <zeroOrMore>
76
+ <ref name="subject"/>
77
+ </zeroOrMore>
78
+ <zeroOrMore>
79
+ <ref name="reqinherit"/>
80
+ </zeroOrMore>
54
81
  <zeroOrMore>
55
82
  <ref name="classification"/>
56
83
  </zeroOrMore>
@@ -61,6 +88,7 @@
61
88
  <ref name="verification"/>
62
89
  <ref name="import"/>
63
90
  <ref name="description"/>
91
+ <ref name="component"/>
64
92
  </choice>
65
93
  </zeroOrMore>
66
94
  <optional>
@@ -81,17 +109,23 @@
81
109
  </define>
82
110
  <define name="label">
83
111
  <element name="label">
84
- <text/>
112
+ <oneOrMore>
113
+ <ref name="TextElement"/>
114
+ </oneOrMore>
85
115
  </element>
86
116
  </define>
87
117
  <define name="subject">
88
118
  <element name="subject">
89
- <text/>
119
+ <oneOrMore>
120
+ <ref name="TextElement"/>
121
+ </oneOrMore>
90
122
  </element>
91
123
  </define>
92
124
  <define name="reqinherit">
93
125
  <element name="inherit">
94
- <text/>
126
+ <oneOrMore>
127
+ <ref name="TextElement"/>
128
+ </oneOrMore>
95
129
  </element>
96
130
  </define>
97
131
  <define name="measurementtarget">
@@ -119,6 +153,12 @@
119
153
  <ref name="RequirementSubpart"/>
120
154
  </element>
121
155
  </define>
156
+ <define name="component">
157
+ <element name="component">
158
+ <attribute name="class"/>
159
+ <ref name="RequirementSubpart"/>
160
+ </element>
161
+ </define>
122
162
  <define name="reqt_references">
123
163
  <element name="references">
124
164
  <oneOrMore>
@@ -135,6 +175,24 @@
135
175
  <data type="boolean"/>
136
176
  </attribute>
137
177
  </optional>
178
+ <optional>
179
+ <attribute name="keep-with-next">
180
+ <data type="boolean"/>
181
+ </attribute>
182
+ </optional>
183
+ <optional>
184
+ <attribute name="keep-lines-together">
185
+ <data type="boolean"/>
186
+ </attribute>
187
+ </optional>
188
+ <optional>
189
+ <attribute name="tag"/>
190
+ </optional>
191
+ <optional>
192
+ <attribute name="multilingual-rendering">
193
+ <ref name="MultilingualRenderingType"/>
194
+ </attribute>
195
+ </optional>
138
196
  <oneOrMore>
139
197
  <ref name="BasicBlock"/>
140
198
  </oneOrMore>
@@ -0,0 +1,30 @@
1
+ module BasicBlock
2
+ class Alignment
3
+ ALIGNS = %w[left right center justified].freeze
4
+
5
+ #
6
+ # @param [String] content
7
+ #
8
+ def initialize(content)
9
+ unless ALIGNS.include?(content)
10
+ warn "[basic-block] WARNING: invalid alignment \"#{content}\""
11
+ warn "[basic-block] alloved aligments are: #{ALIGNS.join ', '}"
12
+ end
13
+ @content = content
14
+ end
15
+
16
+ #
17
+ # @return [String]
18
+ #
19
+ def to_s
20
+ @content
21
+ end
22
+
23
+ #
24
+ # @return [String]
25
+ #
26
+ def inspect
27
+ to_s
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ require_relative "alignment"
2
+ require_relative "citation_type"
3
+ require_relative "dl"
4
+ require_relative "eref_type"
5
+ require_relative "eref"
6
+ require_relative "formula"
7
+ require_relative "image"
8
+ require_relative "index_xref"
9
+ require_relative "index"
10
+ require_relative "note"
11
+ require_relative "paragraph_with_footnote"
12
+ require_relative "paragraph"
13
+ require_relative "reference_format"
14
+ require_relative "stem"
15
+ require_relative "text_element"
@@ -0,0 +1,32 @@
1
+ module RelatonIec
2
+ class CitationType
3
+ # @return [String]
4
+ attr_reader :bibitemid
5
+
6
+ # @return [Array<elatonBib::Locality, RelatonBib::LocalityStack>]
7
+ attr_reader :locality
8
+
9
+ # @return [String, nil]
10
+ attr_reader :date
11
+
12
+ #
13
+ # @param [String] bibitemid
14
+ # @param [Array<RelatonBib::Locality, RelatonBib::LocalityStack>] locality
15
+ # @param [String, nil] date
16
+ #
17
+ def initialize(bibitemid:, locality:, date: nil)
18
+ @bibitemid = bibitemid
19
+ @locality = locality
20
+ @date = date
21
+ end
22
+
23
+ #
24
+ # @param [Nokogiri::XML::Builder] builder
25
+ #
26
+ def to_xml(builder)
27
+ builder.parent[:bibitemid] = bibitemid
28
+ locality.each { |l| l.to_xml builder }
29
+ builder.date date if date
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,60 @@
1
+ module BasicBlock
2
+ class Dl
3
+ #
4
+ # @param [String] id
5
+ # @param [Array<BasicBlock::Dl::Dt, BasicBlock::Dl::Dd>] content
6
+ # @param [Array<BasicBlock::Note>] note
7
+ #
8
+ def initialize(id:, content:, note:)
9
+ @id = id
10
+ @content = content
11
+ @note = note
12
+ end
13
+
14
+ #
15
+ # @param [Nokogiri::XML::Builder] builder
16
+ #
17
+ def to_xml(builder)
18
+ builder.dl id: @id do |b|
19
+ @content.each { |c| c.to_xml b }
20
+ @note.each { |n| n.to_xml b }
21
+ end
22
+ end
23
+
24
+ class Dt
25
+ #
26
+ # @param [Array<BasicBlock::TextElement>] content
27
+ #
28
+ def initialize(content)
29
+ @content = content
30
+ end
31
+
32
+ #
33
+ # @param [Nokogiri::XML::Builder] builder
34
+ #
35
+ def to_xml(builder)
36
+ builder.dt do |b|
37
+ @content.each { |c| c.to_xml b }
38
+ end
39
+ end
40
+ end
41
+
42
+ class Dd
43
+ #
44
+ # @param [Array<BasicBlock::ParagraphWithFootnote>] content
45
+ #
46
+ def initialize(content)
47
+ @content = content
48
+ end
49
+
50
+ #
51
+ # @param [Nokogiri::XML::Builder] builder
52
+ #
53
+ def to_xml(builder)
54
+ builder.dd do |b|
55
+ @content.each { |c| c.to_xml b }
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -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