asciidoctor-dita-topic 1.0.3 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dita-topic.rb +103 -22
  3. metadata +46 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 52c01d2fe1eed871381b9c7ccac78c70de1b2d3078fee28eab23a4b7ff0a261b
4
- data.tar.gz: 39a4e1da5ba838141a929c610060a9a2e8189c292d714028af19dad236cc78bf
3
+ metadata.gz: 5d8849df85b9b5beff0e0e583464b4e1398ca56fe49b52255dd27a9f072ddf9a
4
+ data.tar.gz: dff16a2d22920219d867521ed689df99cde217c750394010e5057c10a7b68730
5
5
  SHA512:
6
- metadata.gz: 87721774c580b3a509ed62189fc31fcca4077bd0007a98234610f497430d3b8c6cf8adc0e71a7d752e672255e043bb2f6f335a28231fe12983772b3c1902dc58
7
- data.tar.gz: 7a934f1f00886a4e7e8f512a1cd923b0ade242c8782810e564737075d3d3e5dea80a61c92f215162051c0de2471c9242acf5761555275c6d5f829aca9f5cb28c
6
+ metadata.gz: 01752f000d44a620eb19726e23a86b2d67eb9fe5559dd1a7949d75af941ce7dfabdb9e7d49aa7342a8c5742984d078149d029062d6778fed9e3b0d21071e926b
7
+ data.tar.gz: fe84a2ebe09d0376897a9d1858b214c8103519236e4456f66d6496d152cb6d9838f3de14cce5db9576b5aa916a53f1ab956f122ac6e9a591675ebf2acd997302
data/lib/dita-topic.rb CHANGED
@@ -35,11 +35,17 @@ class DitaTopic < Asciidoctor::Converter::Base
35
35
 
36
36
  # Enable floating and block titles by default:
37
37
  @titles_allowed = true
38
+
39
+ # Enable callouts by default:
40
+ @callouts_allowed = true
38
41
  end
39
42
 
40
43
  def convert_document node
41
44
  # Check if floating and block titles are enabled:
42
- @titles_allowed = false if (node.attr 'dita-topic-titles') == 'strict'
45
+ @titles_allowed = false if (node.attr 'dita-topic-titles') == 'off'
46
+
47
+ # Check if callouts are enabled:
48
+ @callouts_allowed = false if (node.attr 'dita-topic-callouts') == 'off'
43
49
 
44
50
  # Check if a specific topic type is provided:
45
51
  if (value = node.attr 'dita-topic-type') =~ /^(concept|reference|task)$/
@@ -90,12 +96,55 @@ class DitaTopic < Asciidoctor::Converter::Base
90
96
  return ''
91
97
  end
92
98
 
93
- # FIXME: Figure out how to handle this along with convert_inline_callout.
94
- # A definition list looks like a reasonable option.
95
99
  def convert_colist node
96
- # Issue a warning if a callout list is present:
97
- logger.warn "#{NAME}: Callout list support not implemented"
98
- return ''
100
+ # Issue a warning if callouts are disabled:
101
+ unless @callouts_allowed
102
+ logger.warn "#{NAME}: Callouts not supported in DITA"
103
+ return ''
104
+ end
105
+
106
+ # Reset the counter:
107
+ number = 0
108
+
109
+ # Open the table:
110
+ result = ['<table>']
111
+ result << %(<tgroup cols="2">)
112
+ result << %(<colspec colwidth="#{node.attr 'labelwidth', 15}*" />)
113
+ result << %(<colspec colwidth="#{node.attr 'itemwidth', 85}*" />)
114
+ result << %(<tbody>)
115
+
116
+ # Process individual list items:
117
+ node.items.each do |item|
118
+ # Increment the counter:
119
+ number += 1
120
+
121
+ # Open the table row:
122
+ result << %(<row>)
123
+
124
+ # Compose the callout number:
125
+ result << %(<entry>#{compose_circled_number number}</entry>)
126
+
127
+ # Check if description contains multiple block elements:
128
+ if item.blocks
129
+ result << %(<entry>)
130
+ result << %(<p>#{item.text}</p>)
131
+ result << item.content
132
+ result << %(</entry>)
133
+ else
134
+ result << %(<entry>#{item.text}</entry>)
135
+ end
136
+
137
+ # Close the row:
138
+ result << %(</row>)
139
+ end
140
+
141
+ # Close the table:
142
+ result << %(</tbody>)
143
+ result << %(</tgroup>)
144
+ result << %(</table>)
145
+
146
+ # Return the XML output:
147
+ result.join LF
99
148
  end
100
149
 
101
150
  def convert_dlist node
@@ -163,21 +212,25 @@ class DitaTopic < Asciidoctor::Converter::Base
163
212
  %(<p outputclass="title sect#{node.level}"><b>#{node.title}</b></p>)
164
213
  end
165
214
 
166
- # FIXME: Add support for additional attributes.
167
- def convert_image node
215
+ def convert_image(node)
216
+ # Check if additional attributes are specified:
217
+ width = (node.attr? 'width') ? %( width="#{node.attr 'width'}") : ''
218
+ height = (node.attr? 'height') ? %( height="#{node.attr 'height'}") : ''
219
+ scale = (node.attr? 'scale') ? %( scale="#{(node.attr 'scale').tr('%', '')}") : ''
220
+
168
221
  # Check if the image has a title specified:
169
222
  if node.title?
170
223
  <<~EOF.chomp
171
224
  <fig>
172
225
  <title>#{node.title}</title>
173
- <image href="#{node.image_uri(node.attr 'target')}" placement="break">
226
+ <image href="#{node.image_uri(node.attr 'target')}"#{width}#{height}#{scale} placement="break">
174
227
  <alt>#{node.alt}</alt>
175
228
  </image>
176
229
  </fig>
177
230
  EOF
178
231
  else
179
232
  <<~EOF.chomp
180
- <image href="#{node.image_uri(node.attr 'target')}" placement="break">
233
+ <image href="#{node.image_uri(node.attr 'target')}"#{width}#{height}#{scale} placement="break">
181
234
  <alt>#{node.alt}</alt>
182
235
  </image>
183
236
  EOF
@@ -250,9 +303,14 @@ class DitaTopic < Asciidoctor::Converter::Base
250
303
  end
251
304
 
252
305
  def convert_inline_callout node
253
- # Issue a warning if an inline callout is present:
254
- logger.warn "#{NAME}: Inline callout support not implemented"
255
- return ''
306
+ # Issue a warning if callouts are disabled:
307
+ unless @callouts_allowed
308
+ logger.warn "#{NAME}: Callouts not supported in DITA"
309
+ return ''
310
+ end
311
+
312
+ # Return the XML entity:
313
+ compose_circled_number node.text.to_i
256
314
  end
257
315
 
258
316
  # FIXME: Add support for footnoteref equivalent.
@@ -260,9 +318,13 @@ class DitaTopic < Asciidoctor::Converter::Base
260
318
  %(<fn>#{node.text}</fn>)
261
319
  end
262
320
 
263
- # FIXME: Add support for additional attributes.
264
321
  def convert_inline_image node
265
- %(<image href="#{node.image_uri node.target}" placement="inline"><alt>#{node.alt}</alt></image>)
322
+ # Check if additional attributes are specified:
323
+ width = (node.attr? 'width') ? %( width="#{node.attr 'width'}") : ''
324
+ height = (node.attr? 'height') ? %( height="#{node.attr 'height'}") : ''
325
+
326
+ # Return the XML output:
327
+ %(<image href="#{node.image_uri node.target}"#{width}#{height} placement="inline"><alt>#{node.alt}</alt></image>)
266
328
  end
267
329
 
268
330
  def convert_inline_indexterm node
@@ -504,12 +566,12 @@ class DitaTopic < Asciidoctor::Converter::Base
504
566
  # Process each row:
505
567
  rows.each do |row|
506
568
  # Open the row:
507
- result <<%(<row>)
569
+ result << %(<row>)
508
570
 
509
571
  # Process each cell:
510
572
  row.each do |cell|
511
573
  # Check if the cell spans multiple columns:
512
- colspan = cell.colspan ? %( namest="col_#{colnum = cell.column.attr 'colnumber'}" nameend="col_#{column + cell.colspan - 1}") : ''
574
+ colspan = cell.colspan ? %( namest="col_#{colnum = cell.column.attr 'colnumber'}" nameend="col_#{colnum + cell.colspan - 1}") : ''
513
575
 
514
576
  # Check if the cell spans multiple rows:
515
577
  rowspan = cell.rowspan ? %( morerows="#{cell.rowspan - 1}") : ''
@@ -537,7 +599,7 @@ class DitaTopic < Asciidoctor::Converter::Base
537
599
  end
538
600
 
539
601
  # Close the row:
540
- result <<%(</row>)
602
+ result << %(</row>)
541
603
  end
542
604
 
543
605
  # Close the section:
@@ -648,13 +710,9 @@ class DitaTopic < Asciidoctor::Converter::Base
648
710
  def compose_horizontal_dlist node
649
711
  # Open the table:
650
712
  result = ['<table>']
651
-
652
- # Define the table properties and open the tgroup:
653
713
  result << %(<tgroup cols="2">)
654
714
  result << %(<colspec colwidth="#{node.attr 'labelwidth', 15}*" />)
655
715
  result << %(<colspec colwidth="#{node.attr 'itemwidth', 85}*" />)
656
-
657
- # Open the table body:
658
716
  result << %(<tbody>)
659
717
 
660
718
  # Process individual list items:
@@ -700,6 +758,12 @@ class DitaTopic < Asciidoctor::Converter::Base
700
758
  add_block_title (result.join LF), node.title, 'horizontal'
701
759
  end
702
760
 
761
+ # Method aliases
762
+
763
+ alias convert_embedded content_only
764
+ alias convert_pass content_only
765
+ alias convert_toc skip
766
+
703
767
  # Helper methods
704
768
 
705
769
  def add_block_title content, title, context='wrapper'
@@ -746,5 +810,22 @@ class DitaTopic < Asciidoctor::Converter::Base
746
810
  def compose_id id
747
811
  id ? %( id="#{id}") : ''
748
812
  end
813
+
814
+ def compose_circled_number number
815
+ # Verify the number is in a supported range:
816
+ if number < 1 || number > 50
817
+ logger.warn "#{NAME}: Callout number not in range between 1 and 50"
818
+ return number
819
+ end
820
+
821
+ # Compose the XML entity:
822
+ if number < 21
823
+ %(&##{9311 + number};)
824
+ elsif number < 36
825
+ %(&##{12860 + number};)
826
+ else
827
+ %(&##{12941 + number};)
828
+ end
829
+ end
749
830
  end
750
831
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-dita-topic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jaromir Hradilek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-06 00:00:00.000000000 Z
11
+ date: 2024-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -30,6 +30,48 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 2.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 12.3.0
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 12.3.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: minitest
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 5.22.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 5.22.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: rexml
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 3.2.6
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 3.2.6
33
75
  description: An extension for AsciiDoctor that converts a single AsciiDoc file to
34
76
  a DITA topic.
35
77
  email: jhradilek@gmail.com
@@ -44,6 +86,7 @@ licenses:
44
86
  metadata:
45
87
  homepage_uri: https://github.com/jhradilek/asciidoctor-dita-topic
46
88
  bug_tracker_uri: https://github.com/jhradilek/asciidoctor-dita-topic/issues
89
+ documentation_uri: https://github.com/jhradilek/asciidoctor-dita-topic/blob/main/README.adoc
47
90
  post_install_message:
48
91
  rdoc_options: []
49
92
  require_paths:
@@ -59,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
102
  - !ruby/object:Gem::Version
60
103
  version: '0'
61
104
  requirements: []
62
- rubygems_version: 3.5.9
105
+ rubygems_version: 3.5.11
63
106
  signing_key:
64
107
  specification_version: 4
65
108
  summary: A custom AsciiDoc converter that generates individual DITA topics