asciidoctor-dita-topic 1.0.1 → 1.0.3

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dita-topic.rb +89 -43
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a78953056690681fd5bd90e2ddc9bf86fc58a97e13ef88e3493aaccfd841af38
4
- data.tar.gz: a6f0615ccc0706a2c70411596d7d6bf535530643548b45ca3647b9763e75c289
3
+ metadata.gz: 52c01d2fe1eed871381b9c7ccac78c70de1b2d3078fee28eab23a4b7ff0a261b
4
+ data.tar.gz: 39a4e1da5ba838141a929c610060a9a2e8189c292d714028af19dad236cc78bf
5
5
  SHA512:
6
- metadata.gz: e4844fa7069d23b72d084a398a1d9895e1ce34c8a2a888508d9b83aefefa36cf4c56d681a6b6ffdd5f5891f7223128f5806e73fdb94624228399726d085a9253
7
- data.tar.gz: 47bf20454de4e0b2c4ad8386ac6a4f81d5d792c3ee7ff0b73b2b2fe1cba700a3cd93f65edce4ecf082f3ea2d0954aeada3a685213005de3e49bf95dc9920736c
6
+ metadata.gz: 87721774c580b3a509ed62189fc31fcca4077bd0007a98234610f497430d3b8c6cf8adc0e71a7d752e672255e043bb2f6f335a28231fe12983772b3c1902dc58
7
+ data.tar.gz: 7a934f1f00886a4e7e8f512a1cd923b0ade242c8782810e564737075d3d3e5dea80a61c92f215162051c0de2471c9242acf5761555275c6d5f829aca9f5cb28c
data/lib/dita-topic.rb CHANGED
@@ -25,29 +25,44 @@
25
25
  # frozen_string_literal: true
26
26
 
27
27
  module Asciidoctor
28
- class DitaConverter < Asciidoctor::Converter::Base
28
+ class DitaTopic < Asciidoctor::Converter::Base
29
29
  NAME = 'dita-topic'
30
30
  register_for NAME
31
31
 
32
32
  def initialize *args
33
33
  super
34
34
  outfilesuffix '.dita'
35
+
36
+ # Enable floating and block titles by default:
37
+ @titles_allowed = true
35
38
  end
36
39
 
37
40
  def convert_document node
41
+ # Check if floating and block titles are enabled:
42
+ @titles_allowed = false if (node.attr 'dita-topic-titles') == 'strict'
43
+
44
+ # Check if a specific topic type is provided:
45
+ if (value = node.attr 'dita-topic-type') =~ /^(concept|reference|task)$/
46
+ type = value
47
+ body = (type == 'task') ? 'taskbody' : %(#{type[0,3]}body)
48
+ else
49
+ type = 'topic'
50
+ body = 'body'
51
+ end
52
+
38
53
  # Check if the modular documentation content type is specified:
39
- content_type = (node.attr? '_mod-docs-content-type') ? %( outputclass="#{(node.attr '_mod-docs-content-type').downcase}") : ''
54
+ outputclass = (node.attr? '_mod-docs-content-type') ? %( outputclass="#{(node.attr '_mod-docs-content-type').downcase}") : ''
40
55
 
41
56
  # Return the XML output:
42
57
  <<~EOF.chomp
43
58
  <?xml version='1.0' encoding='utf-8' ?>
44
- <!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
45
- <topic#{compose_id (node.id or node.attributes['docname'])}#{content_type}>
59
+ <!DOCTYPE #{type} PUBLIC "-//OASIS//DTD DITA #{type.capitalize}//EN" "#{type}.dtd">
60
+ <#{type}#{compose_id (node.id or node.attributes['docname'])}#{outputclass}>
46
61
  <title>#{node.doctitle}</title>
47
- <body>
62
+ <#{body}>
48
63
  #{node.content}
49
- </body>
50
- </topic>
64
+ </#{body}>
65
+ </#{type}>
51
66
  EOF
52
67
  end
53
68
 
@@ -58,7 +73,7 @@ class DitaConverter < Asciidoctor::Converter::Base
58
73
 
59
74
  # Issue a warning if the admonition has a title:
60
75
  if node.title?
61
- logger.warn "#{NAME}: Admonition title not supported in DITA: #{node.title}"
76
+ logger.warn "#{NAME}: Admonition titles not supported in DITA"
62
77
  end
63
78
 
64
79
  # Return the XML output:
@@ -83,7 +98,6 @@ class DitaConverter < Asciidoctor::Converter::Base
83
98
  return ''
84
99
  end
85
100
 
86
- # FIXME: Add support for a title.
87
101
  def convert_dlist node
88
102
  # Check if a different list style is set:
89
103
  return compose_horizontal_dlist node if node.style == 'horizontal'
@@ -123,19 +137,30 @@ class DitaConverter < Asciidoctor::Converter::Base
123
137
  result << '</dl>'
124
138
 
125
139
  # Return the XML output:
126
- result.join LF
140
+ add_block_title (result.join LF), node.title, 'dlist'
127
141
  end
128
142
 
129
143
  def convert_example node
130
144
  <<~EOF.chomp
131
145
  <example#{compose_id node.id}>
132
- #{compose_title node.title}#{node.content}
146
+ #{node.title ? %(<title>#{node.title}</title>\n) : ''}#{node.content}
133
147
  </example>
134
148
  EOF
135
149
  end
136
150
 
137
151
  def convert_floating_title node
138
- compose_floating_title node.title, node.level
152
+ # NOTE: Unlike AsciiDoc, DITA does not have a dedicated element for
153
+ # floating titles. As a workaround, I decided to use a paragraph with
154
+ # the outputclass attribute.
155
+
156
+ # Issue a warning if floating titles are disabled:
157
+ unless @titles_allowed
158
+ logger.warn "#{NAME}: Floating titles not supported in DITA"
159
+ return ''
160
+ end
161
+
162
+ # Return the XML output:
163
+ %(<p outputclass="title sect#{node.level}"><b>#{node.title}</b></p>)
139
164
  end
140
165
 
141
166
  # FIXME: Add support for additional attributes.
@@ -246,8 +271,6 @@ class DitaConverter < Asciidoctor::Converter::Base
246
271
  return ''
247
272
  end
248
273
 
249
- # FIXME: Investigate if there is an equivalent of <span> in DITA that
250
- # would group individual <uicontrol> elements together.
251
274
  def convert_inline_kbd node
252
275
  # Check if there is more than one key:
253
276
  if (keys = node.attr 'keys').size == 1
@@ -299,31 +322,37 @@ class DitaConverter < Asciidoctor::Converter::Base
299
322
  # Check whether the source language is defined:
300
323
  language = (node.attributes.key? 'language') ? %( outputclass="language-#{node.attributes['language']}") : ''
301
324
 
302
- # Return the XML output:
303
- <<~EOF.chomp
325
+ # Compose the XML output:
326
+ result = <<~EOF.chomp
304
327
  <codeblock#{language}>
305
328
  #{node.content}
306
329
  </codeblock>
307
330
  EOF
308
331
  else
309
- # Return the XML output:
310
- <<~EOF.chomp
332
+ # Compose the XML output:
333
+ result = <<~EOF.chomp
311
334
  <screen>
312
335
  #{node.content}
313
336
  </screen>
314
337
  EOF
315
338
  end
339
+
340
+ # Return the XML output:
341
+ add_block_title result, node.title, 'listing'
316
342
  end
317
343
 
318
344
  def convert_literal node
319
- <<~EOF.chomp
345
+ # Compose the XML output:
346
+ result = <<~EOF.chomp
320
347
  <pre>
321
348
  #{node.content}
322
349
  </pre>
323
350
  EOF
351
+
352
+ # Return the XML output:
353
+ add_block_title result, node.title, 'literal'
324
354
  end
325
355
 
326
- # FIXME: Add support for titles.
327
356
  def convert_olist node
328
357
  # Open the ordered list:
329
358
  result = ['<ol>']
@@ -345,7 +374,7 @@ class DitaConverter < Asciidoctor::Converter::Base
345
374
  result << '</ol>'
346
375
 
347
376
  # Return the XML output:
348
- result.join LF
377
+ add_block_title (result.join LF), node.title, 'olist'
349
378
  end
350
379
 
351
380
  # FIXME: This is not the top priority.
@@ -364,16 +393,7 @@ class DitaConverter < Asciidoctor::Converter::Base
364
393
  end
365
394
 
366
395
  def convert_paragraph node
367
- # Check if the paragraph has a title assigned:
368
- if node.title?
369
- <<~EOF.chomp
370
- <div outputclass="paragraph">
371
- #{compose_floating_title node.title}<p>#{node.content}</p>
372
- </div>
373
- EOF
374
- else
375
- %(<p>#{node.content}</p>)
376
- end
396
+ add_block_title %(<p>#{node.content}</p>), node.title, 'paragraph'
377
397
  end
378
398
 
379
399
  def convert_preamble node
@@ -542,7 +562,6 @@ class DitaConverter < Asciidoctor::Converter::Base
542
562
  %(<p outputclass="thematic-break"></p>)
543
563
  end
544
564
 
545
- # FIXME: Add support for titles.
546
565
  def convert_ulist node
547
566
  # Open the unordered list:
548
567
  result = ['<ul>']
@@ -571,7 +590,7 @@ class DitaConverter < Asciidoctor::Converter::Base
571
590
  result << '</ul>'
572
591
 
573
592
  # Returned the XML output:
574
- result.join LF
593
+ add_block_title (result.join LF), node.title, 'ulist'
575
594
  end
576
595
 
577
596
  def convert_verse node
@@ -623,7 +642,7 @@ class DitaConverter < Asciidoctor::Converter::Base
623
642
  result << '</ol>'
624
643
 
625
644
  # Return the XML output:
626
- result.join LF
645
+ add_block_title (result.join LF), node.title, 'qanda'
627
646
  end
628
647
 
629
648
  def compose_horizontal_dlist node
@@ -678,27 +697,54 @@ class DitaConverter < Asciidoctor::Converter::Base
678
697
  result << %(</table>)
679
698
 
680
699
  # Return the XML output:
681
- result.join LF
700
+ add_block_title (result.join LF), node.title, 'horizontal'
701
+ end
702
+
703
+ # Helper methods
704
+
705
+ def add_block_title content, title, context='wrapper'
706
+ # NOTE: Unlike AsciiDoc, DITA does not support titles assigned to
707
+ # certain block elements. As a workaround, I decided to use a paragraph
708
+ # with the outputclass attribute and wrap the block in a div element.
709
+
710
+ # Check if the title is defined:
711
+ return content unless title
712
+
713
+ # Issue a warning if block titles are disabled:
714
+ unless @titles_allowed
715
+ logger.warn "#{NAME}: Block titles not supported in DITA"
716
+ return content
717
+ end
718
+
719
+ # Return the XML output:
720
+ <<~EOF.chomp
721
+ <div outputclass="#{context}">
722
+ <p outputclass="title"><b>#{title}</b></p>
723
+ #{content}
724
+ </div>
725
+ EOF
682
726
  end
683
727
 
684
- def compose_floating_title title, section_level=false
728
+ def compose_floating_title title
685
729
  # NOTE: Unlike AsciiDoc, DITA does not support floating titles or
686
730
  # titles assigned to certain block elements. As a workaround, I decided
687
731
  # to use a paragraph with the outputclass attribute.
688
732
 
689
- # Check whether the section level is defined:
690
- level = section_level ? %( sect#{section_level}) : ''
733
+ # Check if the title is defined:
734
+ return '' unless title
735
+
736
+ # Issue a warning if floating titles are disabled:
737
+ unless @titles_allowed
738
+ logger.warn "#{NAME}: Floating titles not supported in DITA"
739
+ return ''
740
+ end
691
741
 
692
742
  # Return the XML output:
693
- title ? %(<p outputclass="title#{level}"><b>#{title}</b></p>\n) : ''
743
+ %(<p outputclass="title"><b>#{title}</b></p>\n)
694
744
  end
695
745
 
696
746
  def compose_id id
697
747
  id ? %( id="#{id}") : ''
698
748
  end
699
-
700
- def compose_title title
701
- title ? %(<title>#{title}</title>\n) : ''
702
- end
703
749
  end
704
750
  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.1
4
+ version: 1.0.3
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-03 00:00:00.000000000 Z
11
+ date: 2024-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor