kramdown-asciidoc 1.0.0.alpha.6 → 1.0.0.alpha.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +21 -1
- data/README.adoc +50 -1
- data/lib/kramdown-asciidoc/cli.rb +4 -0
- data/lib/kramdown-asciidoc/converter.rb +129 -36
- data/lib/kramdown-asciidoc/version.rb +1 -1
- data/lib/kramdown-asciidoc/writer.rb +11 -6
- data/spec/cli_spec.rb +63 -19
- data/spec/converter_spec.rb +5 -0
- data/spec/{integration_spec.rb → scenario_spec.rb} +1 -1
- data/spec/scenarios/a/bare-interdoc-xref.adoc +1 -0
- data/spec/scenarios/a/bare-interdoc-xref.md +1 -0
- data/spec/scenarios/codespan/literal.adoc +7 -1
- data/spec/scenarios/codespan/literal.md +7 -1
- data/spec/scenarios/codespan/plus-plus.adoc +3 -0
- data/spec/scenarios/codespan/plus-plus.md +1 -0
- data/spec/scenarios/codespan/star-star.adoc +1 -0
- data/spec/scenarios/codespan/star-star.md +1 -0
- data/spec/scenarios/codespan/unconstrained.adoc +5 -0
- data/spec/scenarios/codespan/unconstrained.md +5 -0
- data/spec/scenarios/em/unconstrained.adoc +4 -0
- data/spec/scenarios/em/unconstrained.md +4 -0
- data/spec/scenarios/strong/unconstrained.adoc +7 -0
- data/spec/scenarios/strong/unconstrained.md +7 -0
- data/spec/scenarios/text/attribute-reference.adoc +1 -0
- data/spec/scenarios/text/attribute-reference.md +1 -0
- data/spec/scenarios/text/nbsp.adoc +1 -1
- data/spec/scenarios/text/right-arrow.adoc +1 -0
- data/spec/scenarios/text/right-arrow.md +1 -0
- data/spec/scenarios/wrap/containing-line-comment.adoc +3 -0
- data/spec/scenarios/wrap/containing-line-comment.md +3 -0
- data/spec/scenarios/wrap/containing-line-comment.opts +1 -0
- data/spec/scenarios/wrap/none.adoc +1 -0
- data/spec/scenarios/wrap/none.md +4 -0
- data/spec/scenarios/wrap/none.opts +1 -0
- data/spec/scenarios/wrap/preserve.adoc +5 -0
- data/spec/scenarios/wrap/preserve.md +5 -0
- data/spec/scenarios/wrap/preserve.opts +1 -0
- data/spec/scenarios/wrap/ventilate-table-cell.adoc +6 -0
- data/spec/scenarios/wrap/ventilate-table-cell.md +2 -0
- data/spec/scenarios/wrap/ventilate-table-cell.opts +1 -0
- data/spec/scenarios/wrap/ventilate.adoc +2 -0
- data/spec/scenarios/wrap/ventilate.md +6 -0
- data/spec/scenarios/wrap/ventilate.opts +1 -0
- data/spec/writer_spec.rb +10 -0
- metadata +68 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f7bd16c11f904bc9f55ca9ef70d3a925882bd4bdba7f118521a5020676ec4b7
|
4
|
+
data.tar.gz: e8e880f21395275db7756e626d77f9f6425d2856b32049174b8074e69717ed30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2fe378e4963ce01c8119e0512021aef55b3cbb6fe1efc1772d4dc2880d9c1b16cd83edfd20363089e83750447d627a8bec4bed88d3af041ed3a6115124af199
|
7
|
+
data.tar.gz: a8d1cbea734f4db2d71930c1e5e0f3cc6bc198c24e66117de316c1d4e35e946ed43c7181b0147acd24d73d6f7501ae7d0b6b5d20e175b5f849948a9c7fdebe18
|
data/CHANGELOG.adoc
CHANGED
@@ -5,11 +5,31 @@
|
|
5
5
|
This document provides a high-level view of the changes to {project-name} by release.
|
6
6
|
For a detailed view of what has changed, refer to the {uri-repo}/commits/master[commit history] on GitHub.
|
7
7
|
|
8
|
+
== 1.0.0.alpha.7 (2018-07-02) - @mojavelinux
|
9
|
+
|
10
|
+
=== Added
|
11
|
+
|
12
|
+
* add :wrap option to control line wrapping behavior (:ventilate, :none, and :preserve) (#11)
|
13
|
+
* add --wrap CLI option to control :wrap option (#11)
|
14
|
+
* add support for unconstrained formatting (em, strong, and codespan) (#6)
|
15
|
+
* escape all replaceable text (arrows and ellipses) when converting regular text
|
16
|
+
* replace double plus in codespan with \{pp} attribute reference
|
17
|
+
* escape attribute references in regular text
|
18
|
+
* use passthrough for codespan if text contains an attribute reference
|
19
|
+
* use pass macro to escape literal codespan that contains ++
|
20
|
+
* escape codespan that contains replacements (#12)
|
21
|
+
|
22
|
+
=== Changed
|
23
|
+
|
24
|
+
* add replace_line method to Writer
|
25
|
+
* replace .md extension with .adoc in text of interdoc xref
|
26
|
+
* replace a non-breaking space with a single space instead of \{nbsp}
|
27
|
+
|
8
28
|
== 1.0.0.alpha.6 (2018-06-26) - @mojavelinux
|
9
29
|
|
10
30
|
=== Added
|
11
31
|
|
12
|
-
*
|
32
|
+
* add options and usage to CLI (#2)
|
13
33
|
* ensure directory of output file exists
|
14
34
|
* add option to enable automatic generation of IDs for section titles
|
15
35
|
|
data/README.adoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= {project-name} (Markdown to AsciiDoc)
|
2
2
|
Dan Allen <https://github.com/mojavelinux>
|
3
|
-
v1.0.0.alpha.
|
3
|
+
v1.0.0.alpha.7, 2018-07-02
|
4
4
|
// Aliases:
|
5
5
|
:project-name: Kramdown AsciiDoc
|
6
6
|
:project-handle: kramdown-asciidoc
|
@@ -133,6 +133,55 @@ Then, use the `bundle` command to install the project dependencies under the pro
|
|
133
133
|
|
134
134
|
NOTE: You must invoke `bundle` from the project's root directory so it can locate the [.path]_Gemfile_.
|
135
135
|
|
136
|
+
=== Run the Tests
|
137
|
+
|
138
|
+
The test suite is located in the [.path]_spec_ directory.
|
139
|
+
The tests are all based on RSpec.
|
140
|
+
|
141
|
+
Most specs are scenarios, located under the [.path]_spec/scenarios_ directory.
|
142
|
+
Each scenario consists of a Markdown file that ends in .md (the given), an AsciiDoc file that ends in .adoc (the then), and an optional options file that ends in .opts.
|
143
|
+
The test converts the Markdown to AsciiDoc (the when) and validates the result against what's expected.
|
144
|
+
The specification name of each scenario is derived from the directory name.
|
145
|
+
|
146
|
+
You can run all of the tests using Rake:
|
147
|
+
|
148
|
+
$ bundle exec rake
|
149
|
+
|
150
|
+
For more fine-grained control, you can also run the tests directly using RSpec:
|
151
|
+
|
152
|
+
$ bundle exec rspec
|
153
|
+
|
154
|
+
To run all the scenarios, point RSpec at the spec file:
|
155
|
+
|
156
|
+
$ bundle exec rspec spec/scenario_spec.rb
|
157
|
+
|
158
|
+
==== Run Individual Tests
|
159
|
+
|
160
|
+
If you only want to run a single test, or a group of tests, you can do so by tagging the test cases, then filtering the test run using that tag.
|
161
|
+
|
162
|
+
Start by adding the `wip` tag to one or more specifications:
|
163
|
+
|
164
|
+
[source,ruby]
|
165
|
+
----
|
166
|
+
it 'should do something new', wip: true do
|
167
|
+
expect(true).to be true
|
168
|
+
end
|
169
|
+
----
|
170
|
+
|
171
|
+
Next, run RSpec with the `wip` flag enabled:
|
172
|
+
|
173
|
+
$ bundle exec rspec -t wip
|
174
|
+
|
175
|
+
RSpec will only run the specifications that contain this flag.
|
176
|
+
|
177
|
+
You can also filter tests by keyword.
|
178
|
+
Let's assume we want to run all the tests that have `wrap` in the description.
|
179
|
+
Run RSpec with the example filter:
|
180
|
+
|
181
|
+
$ bundle exec rspec -e wrap
|
182
|
+
|
183
|
+
RSpec will only run the specifications that have a description containing the text `wrap`.
|
184
|
+
|
136
185
|
=== Usage
|
137
186
|
|
138
187
|
When running the `kramdoc` command from source, you must prefix the command with `bundle exec`:
|
@@ -33,6 +33,10 @@ module Kramdown; module AsciiDoc
|
|
33
33
|
options[:attributes][key] = val
|
34
34
|
end
|
35
35
|
|
36
|
+
opts.on '--wrap=preserve|none|ventilate', %w(none preserve ventilate), 'Set how lines are wrapped in the AsciiDoc document (default: preserve)' do |wrap|
|
37
|
+
options[:wrap] = wrap.to_sym
|
38
|
+
end
|
39
|
+
|
36
40
|
opts.on '--heading-offset=NUMBER', 'Shift the heading level by the specified number', ::Integer do |offset|
|
37
41
|
options[:heading_offset] = offset
|
38
42
|
end
|
@@ -81,18 +81,23 @@ module Kramdown; module AsciiDoc
|
|
81
81
|
|
82
82
|
NON_DEFAULT_TABLE_ALIGNMENTS = [:center, :right]
|
83
83
|
|
84
|
+
AccidentalReplacementsRx = /[-=]>|<[-=]|\.\.\.|\{\p{Word}[\p{Word}-]*\}/
|
84
85
|
CommentPrefixRx = /^ *! ?/m
|
85
86
|
CssPropDelimRx = /\s*;\s*/
|
87
|
+
FullStopRx = /(?<=\.)\p{Blank}+(?!\Z)/
|
86
88
|
MenuRefRx = /^([\p{Word}&].*?)\s>\s([\p{Word}&].*(?:\s>\s|$))+/
|
87
|
-
ReplaceableTextRx = /[-=]>|<[-=]
|
89
|
+
ReplaceableTextRx = /[-=]>|<[-=]|--|\*\*|\.\.\.|&\S+;|\{\p{Word}[\p{Word}-]*\}|\((?:C|R|TM)\)/
|
88
90
|
SmartApostropheRx = /\b’\b/
|
89
91
|
TrailingSpaceRx = / +$/
|
90
92
|
TypographicSymbolRx = /[“”‘’—–…]/
|
93
|
+
WordishRx = /[\p{Word};:]/
|
94
|
+
WordRx = /\p{Word}/
|
91
95
|
XmlCommentRx = /\A<!--(.*)-->\Z/m
|
92
96
|
|
93
97
|
VoidElement = Element.new nil
|
94
98
|
|
95
99
|
LF = ?\n
|
100
|
+
NBSP = ?\u00a0
|
96
101
|
|
97
102
|
def initialize root, opts
|
98
103
|
super
|
@@ -100,6 +105,7 @@ module Kramdown; module AsciiDoc
|
|
100
105
|
@imagesdir = (@attributes.delete 'implicit-imagesdir') || @attributes['imagesdir']
|
101
106
|
@heading_offset = opts[:heading_offset] || 0
|
102
107
|
@current_heading_level = nil
|
108
|
+
@wrap = opts[:wrap] || :preserve
|
103
109
|
end
|
104
110
|
|
105
111
|
def convert el, opts = {}
|
@@ -114,7 +120,10 @@ module Kramdown; module AsciiDoc
|
|
114
120
|
writer.doctitle ||= fallback_doctitle
|
115
121
|
end
|
116
122
|
writer.add_attributes @attributes unless @attributes.empty?
|
117
|
-
writer.to_s.gsub TrailingSpaceRx, ''
|
123
|
+
result = writer.to_s.gsub TrailingSpaceRx, ''
|
124
|
+
# QUESTION should we add a preprocessor step to clean the source?
|
125
|
+
result = result.tr NBSP, ' ' if result.include? NBSP
|
126
|
+
result
|
118
127
|
end
|
119
128
|
|
120
129
|
def convert_heading el, opts
|
@@ -141,6 +150,7 @@ module Kramdown; module AsciiDoc
|
|
141
150
|
end
|
142
151
|
lines = []
|
143
152
|
lines << %([#{style.join}]) unless style.empty?
|
153
|
+
# NOTE kramdown removes newlines from heading
|
144
154
|
lines << %(#{'=' * level} #{compose_text el, strip: true})
|
145
155
|
if level == 1 && writer.empty? && @current_heading_level != 1
|
146
156
|
writer.header.push(*lines)
|
@@ -168,7 +178,7 @@ module Kramdown; module AsciiDoc
|
|
168
178
|
elsif (child_i = children[0]).type == :text && (child_i_text = child_i.value).start_with?(*ADMON_MARKERS)
|
169
179
|
marker, child_i_text = child_i_text.split ': ', 2
|
170
180
|
children = [(clone child_i, value: %(#{ADMON_TYPE_MAP[marker]}: #{child_i_text}))] + (children.drop 1)
|
171
|
-
lines = compose_text children, parent: el, strip: true, split: true
|
181
|
+
lines = compose_text children, parent: el, strip: true, split: true, wrap: @wrap
|
172
182
|
# NOTE detect formatted admonition marker (e.g., *Note:* ...)
|
173
183
|
elsif (child_i.type == :strong || child_i.type == :em) &&
|
174
184
|
(marker_el = child_i.children[0]) && ((marker = ADMON_FORMATTED_MARKERS[marker_el.value]) ||
|
@@ -177,10 +187,10 @@ module Kramdown; module AsciiDoc
|
|
177
187
|
children = children.drop 1
|
178
188
|
children[0] = clone child_ii, value: (child_ii_text.slice 1, child_ii_text.length) if child_ii
|
179
189
|
# Q: should we only rstrip?
|
180
|
-
lines = compose_text children, parent: el, strip: true, split: true
|
190
|
+
lines = compose_text children, parent: el, strip: true, split: true, wrap: @wrap
|
181
191
|
lines.unshift %(#{ADMON_TYPE_MAP[marker]}: #{lines.shift})
|
182
192
|
else
|
183
|
-
lines = compose_text el, strip: true, split: true
|
193
|
+
lines = compose_text el, strip: true, split: true, wrap: @wrap
|
184
194
|
end
|
185
195
|
writer.add_lines lines
|
186
196
|
end
|
@@ -200,7 +210,7 @@ module Kramdown; module AsciiDoc
|
|
200
210
|
contents.pop while contents.size > 0 && contents[-1].empty?
|
201
211
|
end
|
202
212
|
# Q: should writer handle delimited block nesting?
|
203
|
-
delimiter =
|
213
|
+
delimiter = depth > 0 ? ('____' + '__' * depth) : '_'
|
204
214
|
writer.start_delimited_block delimiter
|
205
215
|
writer.add_lines contents
|
206
216
|
writer.end_delimited_block
|
@@ -231,7 +241,7 @@ module Kramdown; module AsciiDoc
|
|
231
241
|
writer.add_lines lines
|
232
242
|
writer.add_line '....'
|
233
243
|
else
|
234
|
-
# NOTE clear the list continuation
|
244
|
+
# NOTE clear the list continuation
|
235
245
|
writer.clear_line if writer.current_line == '+'
|
236
246
|
writer.add_line lines.map {|l| %( #{l}) }
|
237
247
|
end
|
@@ -299,7 +309,7 @@ module Kramdown; module AsciiDoc
|
|
299
309
|
indent = (level = opts[:list_level]) - 1
|
300
310
|
if (children = el.children)[0].type == :p
|
301
311
|
primary, remaining = [(children = children.dup).shift, children]
|
302
|
-
primary_lines = compose_text [primary], parent: el, strip: true, split: true
|
312
|
+
primary_lines = compose_text [primary], parent: el, strip: true, split: true, wrap: @wrap
|
303
313
|
else
|
304
314
|
remaining = children
|
305
315
|
primary_lines = ['{blank}']
|
@@ -314,6 +324,7 @@ module Kramdown; module AsciiDoc
|
|
314
324
|
end
|
315
325
|
|
316
326
|
def convert_dt el, opts
|
327
|
+
# NOTE kramdown removes newlines from term
|
317
328
|
term = compose_text el, strip: true
|
318
329
|
marker = DLIST_MARKERS[opts[:dlist_level] - 1]
|
319
330
|
#opts[:writer].add_blank_line if (prev = opts[:prev]) && prev.options[:compound]
|
@@ -326,7 +337,7 @@ module Kramdown; module AsciiDoc
|
|
326
337
|
remaining = el.children
|
327
338
|
else
|
328
339
|
remaining = (children = el.children).drop 1
|
329
|
-
primary_lines = compose_text [children[0]], parent: el, strip: true, split: true
|
340
|
+
primary_lines = compose_text [children[0]], parent: el, strip: true, split: true, wrap: @wrap
|
330
341
|
if primary_lines.size == 1
|
331
342
|
opts[:writer].append %( #{primary_lines[0]})
|
332
343
|
else
|
@@ -349,14 +360,22 @@ module Kramdown; module AsciiDoc
|
|
349
360
|
colspecs = %("#{colspecs}") if cols > 1
|
350
361
|
end
|
351
362
|
table_buffer = ['|===']
|
363
|
+
ventilate = @wrap == :ventilate
|
352
364
|
el.children.each do |container|
|
353
365
|
container.children.each do |row|
|
354
366
|
row_buffer = []
|
355
367
|
row.children.each do |cell|
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
368
|
+
if ventilate
|
369
|
+
cell_contents = (compose_text cell, split: true, wrap: :ventilate).map do |line|
|
370
|
+
(line.include? '|') ? (line.gsub '|', '\|') : line
|
371
|
+
end
|
372
|
+
cell_contents[0] = %(| #{cell_contents[0]})
|
373
|
+
row_buffer += cell_contents
|
374
|
+
else
|
375
|
+
cell_contents = compose_text cell
|
376
|
+
cell_contents = cell_contents.gsub '|', '\|' if cell_contents.include? '|'
|
377
|
+
row_buffer << %(| #{cell_contents})
|
378
|
+
end
|
360
379
|
end
|
361
380
|
if container.type == :thead
|
362
381
|
head = true
|
@@ -395,43 +414,87 @@ module Kramdown; module AsciiDoc
|
|
395
414
|
opts[:writer].append bare ? url : %(#{url}[#{text.gsub ']', '\]'}])
|
396
415
|
end
|
397
416
|
elsif url.end_with? '.md'
|
398
|
-
|
417
|
+
text = (compose_text el, strip: true).gsub ']', '\]'
|
418
|
+
text = %(#{text.slice 0, text.length - 3}.adoc) if text.end_with? '.md'
|
419
|
+
opts[:writer].append %(xref:#{url.slice 0, url.length - 3}.adoc[#{text}])
|
399
420
|
else
|
400
421
|
opts[:writer].append %(link:#{url}[#{(compose_text el, strip: true).gsub ']', '\]'}])
|
401
422
|
end
|
402
423
|
end
|
403
424
|
|
404
425
|
def convert_codespan el, opts
|
405
|
-
opts[:
|
426
|
+
mark = (unconstrained? opts[:prev], opts[:next], :codespan) ? '``' : '`'
|
427
|
+
text = el.value
|
428
|
+
pass = (replaceable? text) ? :shorthand : nil
|
429
|
+
if text.include? '++'
|
430
|
+
if pass
|
431
|
+
pass = :macro
|
432
|
+
else
|
433
|
+
@attributes['pp'] = '{plus}{plus}'
|
434
|
+
text = text.gsub '++', '{pp}'
|
435
|
+
end
|
436
|
+
end
|
437
|
+
if pass == :shorthand
|
438
|
+
opts[:writer].append %(#{mark}+#{text}+#{mark})
|
439
|
+
elsif pass == :macro
|
440
|
+
opts[:writer].append %(#{mark}pass:[#{text}]#{mark})
|
441
|
+
else
|
442
|
+
opts[:writer].append %(#{mark}#{text}#{mark})
|
443
|
+
end
|
406
444
|
end
|
407
445
|
|
408
446
|
def convert_em el, opts
|
409
|
-
|
447
|
+
composed_text = compose_text el
|
448
|
+
mark = (unconstrained? opts[:prev], opts[:next], :em) ? '__' : '_'
|
449
|
+
opts[:writer].append %(#{mark}#{composed_text}#{mark})
|
410
450
|
end
|
411
451
|
|
412
452
|
def convert_strong el, opts
|
413
|
-
|
414
|
-
if (text.include? ' > ') && MenuRefRx =~ text
|
453
|
+
if ((composed_text = compose_text el).include? ' > ') && MenuRefRx =~ composed_text
|
415
454
|
@attributes['experimental'] = ''
|
416
455
|
opts[:writer].append %(menu:#{$1}[#{$2}])
|
417
456
|
else
|
418
|
-
opts[:
|
457
|
+
mark = (unconstrained? opts[:prev], opts[:next], :strong) ? '**' : '*'
|
458
|
+
opts[:writer].append %(#{mark}#{composed_text}#{mark})
|
419
459
|
end
|
420
460
|
end
|
421
461
|
|
462
|
+
def unconstrained? prev_el, next_el, enclosure
|
463
|
+
(next_char_word? next_el, enclosure) || (prev_char_wordish? prev_el)
|
464
|
+
end
|
465
|
+
|
466
|
+
def prev_char_wordish? prev_el
|
467
|
+
prev_el && (prev_el.type == :entity || ((prev_ch = prev_el.type == :text && prev_el.value[-1]) && (WordishRx.match? prev_ch)))
|
468
|
+
end
|
469
|
+
|
470
|
+
def next_char_word? next_el, enclosure
|
471
|
+
if next_el.type == :text
|
472
|
+
(next_ch = next_el.value.chr) && ((WordRx.match? next_ch) || (enclosure == :codespan && next_ch == ?'))
|
473
|
+
elsif enclosure == :codespan && next_el.type == :smart_quote
|
474
|
+
true
|
475
|
+
end if next_el
|
476
|
+
end
|
477
|
+
|
422
478
|
def convert_text el, opts
|
423
|
-
|
479
|
+
text = escape_replacements el.value
|
480
|
+
if text.include? '++'
|
424
481
|
@attributes['pp'] = '{plus}{plus}'
|
425
482
|
text = text.gsub '++', '{pp}'
|
426
483
|
end
|
427
|
-
|
428
|
-
|
484
|
+
opts[:writer].append text
|
485
|
+
end
|
486
|
+
|
487
|
+
def replaceable? text
|
488
|
+
(ReplaceableTextRx.match? text) || (text != '^' && (text.include? '^'))
|
489
|
+
end
|
490
|
+
|
491
|
+
def escape_replacements text
|
492
|
+
text = text.gsub AccidentalReplacementsRx, '\\\\\0' if AccidentalReplacementsRx.match? text
|
429
493
|
text = text.gsub '^', '{caret}' if (text.include? '^') && text != '^'
|
430
|
-
text = text.gsub '<=', '\<=' if text.include? '<='
|
431
494
|
unless text.ascii_only?
|
432
495
|
text = (text.gsub SmartApostropheRx, ?').gsub TypographicSymbolRx, TYPOGRAPHIC_SYMBOL_TO_MARKUP
|
433
496
|
end
|
434
|
-
|
497
|
+
text
|
435
498
|
end
|
436
499
|
|
437
500
|
# NOTE this logic assumes the :hard_wrap option is disabled in the parser
|
@@ -443,10 +506,7 @@ module Kramdown; module AsciiDoc
|
|
443
506
|
writer.append %(#{(writer.current_line.end_with? ' ') ? '' : ' '}+)
|
444
507
|
end
|
445
508
|
if el.options[:html_tag]
|
446
|
-
|
447
|
-
unless (next_el = siblings[(siblings.index el) + 1] || VoidElement).type == :text && (next_el.value.start_with? LF)
|
448
|
-
writer.add_blank_line
|
449
|
-
end
|
509
|
+
writer.add_blank_line unless (next_el = opts[:next] || VoidElement).type == :text && (next_el.value.start_with? LF)
|
450
510
|
end
|
451
511
|
end
|
452
512
|
|
@@ -470,7 +530,7 @@ module Kramdown; module AsciiDoc
|
|
470
530
|
return
|
471
531
|
elsif child_i_i.value == 'span' && ((role = el.attr['class'] || '').start_with? 'note') && child_i_i.attr['class'] == 'notetitle'
|
472
532
|
marker = ADMON_FORMATTED_MARKERS[(child_i_i.children[0] || VoidElement).value] || 'Note'
|
473
|
-
lines = compose_text (child_i.children.drop 1), parent: child_i, strip: true, split: true
|
533
|
+
lines = compose_text (child_i.children.drop 1), parent: child_i, strip: true, split: true, wrap: @wrap
|
474
534
|
lines.unshift %(#{ADMON_TYPE_MAP[marker]}: #{lines.shift})
|
475
535
|
opts[:writer].start_block
|
476
536
|
opts[:writer].add_lines lines
|
@@ -512,8 +572,7 @@ module Kramdown; module AsciiDoc
|
|
512
572
|
else
|
513
573
|
if (current_line = writer.current_line) && !(current_line.end_with? LF)
|
514
574
|
start_new_line = true
|
515
|
-
|
516
|
-
writer.current_line.rstrip! if current_line.end_with? ' '
|
575
|
+
writer.replace_line current_line.rstrip if current_line.end_with? ' '
|
517
576
|
end
|
518
577
|
lines = lines.map {|l| %(// #{l}) }
|
519
578
|
if start_new_line
|
@@ -544,8 +603,7 @@ module Kramdown; module AsciiDoc
|
|
544
603
|
el
|
545
604
|
end
|
546
605
|
|
547
|
-
def traverse el, opts
|
548
|
-
prev = nil
|
606
|
+
def traverse el, opts
|
549
607
|
if ::Array === el
|
550
608
|
nodes = el
|
551
609
|
parent = opts[:parent]
|
@@ -553,25 +611,60 @@ module Kramdown; module AsciiDoc
|
|
553
611
|
nodes = (parent = el).children
|
554
612
|
end
|
555
613
|
nodes.each_with_index do |child, idx|
|
556
|
-
convert child, (opts.merge parent: parent, index: idx, prev:
|
557
|
-
prev = child
|
614
|
+
convert child, (opts.merge parent: parent, index: idx, prev: (idx == 0 ? nil : nodes[idx - 1]), next: nodes[idx + 1])
|
558
615
|
end
|
559
616
|
nil
|
560
617
|
end
|
561
618
|
|
562
619
|
# Q: should we support rstrip in addition to strip?
|
563
620
|
# TODO add escaping of closing square bracket
|
564
|
-
# TODO reflow text
|
565
621
|
def compose_text el, opts = {}
|
566
622
|
strip = opts.delete :strip
|
567
623
|
split = opts.delete :split
|
624
|
+
wrap = (opts.delete :wrap) || :preserve
|
568
625
|
# Q: do we want to merge or just start fresh?
|
569
626
|
traverse el, (opts.merge writer: (span_writer = Writer.new))
|
570
627
|
# NOTE there should only ever be one line
|
571
628
|
text = span_writer.body.join LF
|
572
629
|
text = text.strip if strip
|
630
|
+
text = reflow text, wrap
|
573
631
|
split ? (text.split LF) : text
|
574
632
|
end
|
633
|
+
|
634
|
+
def reflow str, wrap
|
635
|
+
#return str if str.empty?
|
636
|
+
case wrap
|
637
|
+
when :ventilate
|
638
|
+
unwrap str, true
|
639
|
+
when :none
|
640
|
+
unwrap str
|
641
|
+
else # :preserve
|
642
|
+
str
|
643
|
+
end
|
644
|
+
end
|
645
|
+
|
646
|
+
# NOTE this method requires contiguous non-blank lines
|
647
|
+
def unwrap str, ventilate = false
|
648
|
+
result = []
|
649
|
+
start_new_line = true
|
650
|
+
lines = str.split LF
|
651
|
+
while (line = lines.shift)
|
652
|
+
if line.start_with? '//'
|
653
|
+
result << line
|
654
|
+
start_new_line = true
|
655
|
+
elsif start_new_line
|
656
|
+
result << line
|
657
|
+
start_new_line = false
|
658
|
+
else
|
659
|
+
result << %(#{result.pop} #{line})
|
660
|
+
end
|
661
|
+
end
|
662
|
+
if ventilate
|
663
|
+
result.map {|line| (line.start_with? '//') ? line : ((line.include? '.') ? (line.gsub FullStopRx, LF) : line) }.join LF
|
664
|
+
else
|
665
|
+
result.join LF
|
666
|
+
end
|
667
|
+
end
|
575
668
|
end
|
576
669
|
end; end
|
577
670
|
|
@@ -45,7 +45,7 @@ module Kramdown; module AsciiDoc
|
|
45
45
|
|
46
46
|
# Q: perhaps in_list that takes a block?
|
47
47
|
# Q: should we keep stack of list depth?
|
48
|
-
def start_list compound
|
48
|
+
def start_list compound
|
49
49
|
@body << '' unless (compound && @block_separator.last == '+') || empty?
|
50
50
|
@block_separator << '+'
|
51
51
|
nil
|
@@ -70,11 +70,6 @@ module Kramdown; module AsciiDoc
|
|
70
70
|
nil
|
71
71
|
end
|
72
72
|
|
73
|
-
def clear_line
|
74
|
-
@body[-1] = '' unless empty?
|
75
|
-
nil
|
76
|
-
end
|
77
|
-
|
78
73
|
def add_blank_line
|
79
74
|
@body << ''
|
80
75
|
nil
|
@@ -99,6 +94,16 @@ module Kramdown; module AsciiDoc
|
|
99
94
|
nil
|
100
95
|
end
|
101
96
|
|
97
|
+
def clear_line
|
98
|
+
replace_line ''
|
99
|
+
end
|
100
|
+
|
101
|
+
def replace_line line
|
102
|
+
@body.pop
|
103
|
+
@body << line
|
104
|
+
nil
|
105
|
+
end
|
106
|
+
|
102
107
|
def current_line
|
103
108
|
@body[-1]
|
104
109
|
end
|
data/spec/cli_spec.rb
CHANGED
@@ -3,6 +3,8 @@ require 'kramdown-asciidoc/cli'
|
|
3
3
|
require 'stringio'
|
4
4
|
|
5
5
|
describe Kramdown::AsciiDoc::Cli do
|
6
|
+
subject { Kramdown::AsciiDoc::Cli }
|
7
|
+
|
6
8
|
before :each do
|
7
9
|
@old_stdout, $stdout = $stdout, StringIO.new
|
8
10
|
@old_stderr, $stderr = $stderr, StringIO.new
|
@@ -15,31 +17,31 @@ describe Kramdown::AsciiDoc::Cli do
|
|
15
17
|
context 'option flags' do
|
16
18
|
it 'returns non-zero exit status and displays usage when no arguments are given' do
|
17
19
|
expected = 'kramdoc: Please specify a Markdown file to convert.'
|
18
|
-
(expect
|
20
|
+
(expect subject.run []).to eql 1
|
19
21
|
(expect $stderr.string.chomp).to eql expected
|
20
22
|
(expect $stdout.string.chomp).to start_with 'Usage: kramdoc'
|
21
23
|
end
|
22
24
|
|
23
25
|
it 'returns non-zero exit status and displays usage when more than one argument is given' do
|
24
26
|
expected = 'kramdoc: extra arguments detected (unparsed arguments: bar.md)'
|
25
|
-
(expect
|
27
|
+
(expect subject.run %w(foo.md bar.md)).to eql 1
|
26
28
|
(expect $stderr.string.chomp).to eql expected
|
27
29
|
(expect $stdout.string.chomp).to start_with 'Usage: kramdoc'
|
28
30
|
end
|
29
31
|
|
30
32
|
it 'returns non-zero exit status when invalid argument is given' do
|
31
|
-
(expect
|
33
|
+
(expect subject.run %w(--invalid-option)).to eql 1
|
32
34
|
(expect $stderr.string.chomp).to eql 'kramdoc: invalid option: --invalid-option'
|
33
35
|
(expect $stdout.string.chomp).to start_with 'Usage: kramdoc'
|
34
36
|
end
|
35
37
|
|
36
38
|
it 'displays version when -v flag is used' do
|
37
|
-
(expect
|
39
|
+
(expect subject.run %w(-v)).to eql 0
|
38
40
|
(expect $stdout.string.chomp).to eql %(kramdoc #{Kramdown::AsciiDoc::VERSION})
|
39
41
|
end
|
40
42
|
|
41
43
|
it 'displays help when -h flag is used' do
|
42
|
-
(expect
|
44
|
+
(expect subject.run %w(-h)).to eql 0
|
43
45
|
(expect $stdout.string.chomp).to start_with 'Usage: kramdoc'
|
44
46
|
end
|
45
47
|
|
@@ -47,7 +49,7 @@ describe Kramdown::AsciiDoc::Cli do
|
|
47
49
|
the_source_file = output_file 'implicit-output.md'
|
48
50
|
the_output_file = output_file 'implicit-output.adoc'
|
49
51
|
IO.write the_source_file, 'This is just a test.'
|
50
|
-
(expect
|
52
|
+
(expect subject.run %W(#{the_source_file})).to eql 0
|
51
53
|
(expect (IO.read the_output_file).chomp).to eql 'This is just a test.'
|
52
54
|
end
|
53
55
|
|
@@ -55,7 +57,7 @@ describe Kramdown::AsciiDoc::Cli do
|
|
55
57
|
the_source_file = output_file 'explicit-output.md'
|
56
58
|
the_output_file = output_file 'my-explicit-output.adoc'
|
57
59
|
IO.write the_source_file, 'This is only a test.'
|
58
|
-
(expect
|
60
|
+
(expect subject.run %W(-o #{the_output_file} #{the_source_file})).to eql 0
|
59
61
|
(expect (IO.read the_output_file).chomp).to eql 'This is only a test.'
|
60
62
|
end
|
61
63
|
|
@@ -63,13 +65,13 @@ describe Kramdown::AsciiDoc::Cli do
|
|
63
65
|
the_source_file = output_file 'ensure-output-dir.md'
|
64
66
|
the_output_file = output_file 'path/to/output/file.adoc'
|
65
67
|
IO.write the_source_file, 'Everything is going to be fine.'
|
66
|
-
(expect
|
68
|
+
(expect subject.run %W(-o #{the_output_file} #{the_source_file})).to eql 0
|
67
69
|
(expect (IO.read the_output_file).chomp).to eql 'Everything is going to be fine.'
|
68
70
|
end
|
69
71
|
|
70
72
|
it 'writes output to stdout when -o option equals -' do
|
71
73
|
the_source_file = scenario_file 'p/single-line.md'
|
72
|
-
(expect
|
74
|
+
(expect subject.run %W(-o - #{the_source_file})).to eql 0
|
73
75
|
(expect $stdout.string.chomp).to eql 'A paragraph that consists of a single line.'
|
74
76
|
end
|
75
77
|
|
@@ -78,7 +80,7 @@ describe Kramdown::AsciiDoc::Cli do
|
|
78
80
|
begin
|
79
81
|
$stdin.puts '- list item'
|
80
82
|
$stdin.rewind
|
81
|
-
(expect
|
83
|
+
(expect subject.run %W(-o - -)).to eql 0
|
82
84
|
(expect $stdout.string.chomp).to eql '* list item'
|
83
85
|
ensure
|
84
86
|
$stdin = old_stdin
|
@@ -87,35 +89,77 @@ describe Kramdown::AsciiDoc::Cli do
|
|
87
89
|
|
88
90
|
it 'removes leading blank lines and trailing whitespace from source' do
|
89
91
|
the_source_file = output_file 'leading-trailing-space.md'
|
90
|
-
IO.write the_source_file,
|
91
|
-
|
92
|
-
|
92
|
+
IO.write the_source_file, <<~EOS
|
93
|
+
\n\n\n\n
|
94
|
+
# Heading
|
95
|
+
|
96
|
+
Body content.#{' '}
|
97
|
+
\n\n\n\n
|
98
|
+
EOS
|
99
|
+
(expect subject.run %W(-o - #{the_source_file})).to eql 0
|
100
|
+
(expect $stdout.string.chomp).to eql %(= Heading\n\nBody content.)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'processes front matter in source' do
|
104
|
+
the_source_file = output_file 'front-matter.md'
|
105
|
+
IO.write the_source_file, <<~EOS
|
106
|
+
---
|
107
|
+
title: Document Title
|
108
|
+
---
|
109
|
+
Body content.
|
110
|
+
EOS
|
111
|
+
(expect subject.run %W(-o - #{the_source_file})).to eql 0
|
112
|
+
(expect $stdout.string.chomp).to eql %(= Document Title\n\nBody content.)
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'replaces explicit toc in source' do
|
116
|
+
the_source_file = output_file 'toc.md'
|
117
|
+
IO.write the_source_file, <<~EOS
|
118
|
+
# Guide
|
119
|
+
|
120
|
+
<!-- TOC depthFrom:2 depthTo:6 -->
|
121
|
+
- [Prerequisites](#prerequisites)
|
122
|
+
- [Installation](#installation)
|
123
|
+
- [Deployment](#deployment)
|
124
|
+
<!-- /TOC -->
|
125
|
+
|
126
|
+
...
|
127
|
+
EOS
|
128
|
+
(expect subject.run %W(-o - #{the_source_file})).to eql 0
|
129
|
+
(expect $stdout.string.chomp).to eql %(= Guide\n:toc: macro\n\ntoc::[]\n\n...)
|
93
130
|
end
|
94
131
|
|
95
132
|
it 'reads Markdown source using specified format' do
|
96
133
|
the_source_file = output_file 'format-markdown.md'
|
97
134
|
IO.write the_source_file, '#Heading'
|
98
|
-
(expect
|
135
|
+
(expect subject.run %W(-o - --format=markdown #{the_source_file})).to eql 0
|
99
136
|
(expect $stdout.string.chomp).to eql '= Heading'
|
100
137
|
end
|
101
138
|
|
139
|
+
it 'wraps output as specified by the --wrap option' do
|
140
|
+
the_source_file = scenario_file 'wrap/ventilate.md'
|
141
|
+
expected = IO.read scenario_file 'wrap/ventilate.adoc'
|
142
|
+
(expect subject.run %W(-o - --wrap=ventilate #{the_source_file})).to eql 0
|
143
|
+
(expect $stdout.string).to eql expected
|
144
|
+
end
|
145
|
+
|
102
146
|
it 'shifts headings by offset when --heading-offset is used' do
|
103
147
|
the_source_file = scenario_file 'heading/offset.md'
|
104
148
|
expected = IO.read scenario_file 'heading/offset.adoc'
|
105
|
-
(expect
|
149
|
+
(expect subject.run %W(-o - --heading-offset=-1 #{the_source_file})).to eql 0
|
106
150
|
(expect $stdout.string).to eql expected
|
107
151
|
end
|
108
152
|
|
109
153
|
it 'automatically generates IDs for section titles when --auto-ids is used' do
|
110
154
|
the_source_file = scenario_file 'heading/auto-ids.md'
|
111
155
|
expected = IO.read scenario_file 'heading/auto-ids.adoc'
|
112
|
-
(expect
|
156
|
+
(expect subject.run %W(-o - --auto-ids #{the_source_file})).to eql 0
|
113
157
|
(expect $stdout.string).to eql expected
|
114
158
|
end
|
115
159
|
|
116
160
|
it 'adds specified attributes to document header' do
|
117
161
|
the_source_file = scenario_file 'root/header-and-body.md'
|
118
|
-
(expect
|
162
|
+
(expect subject.run %W(-o - -a idprefix -a idseparator=- #{the_source_file})).to eql 0
|
119
163
|
expected = <<~EOS
|
120
164
|
= Document Title
|
121
165
|
:idprefix:
|
@@ -128,7 +172,7 @@ describe Kramdown::AsciiDoc::Cli do
|
|
128
172
|
|
129
173
|
it 'passes through HTML when --no-html-to-native flag is used' do
|
130
174
|
the_source_file = scenario_file 'html_element/native.md'
|
131
|
-
(expect
|
175
|
+
(expect subject.run %W(-o - --no-html-to-native #{the_source_file})).to eql 0
|
132
176
|
expected = <<~EOS
|
133
177
|
+++<p>++++++<strong>+++strong emphasis (aka bold)+++</strong>+++ +++<em>+++emphasis (aka italic)+++</em>+++ +++<code>+++monospace+++</code>++++++</p>+++
|
134
178
|
EOS
|
@@ -139,7 +183,7 @@ describe Kramdown::AsciiDoc::Cli do
|
|
139
183
|
old_ARGV = ARGV.dup
|
140
184
|
ARGV.replace %w(-v)
|
141
185
|
begin
|
142
|
-
(expect
|
186
|
+
(expect subject.run).to eql 0
|
143
187
|
(expect $stdout.string.chomp).to eql %(kramdoc #{Kramdown::AsciiDoc::VERSION})
|
144
188
|
ensure
|
145
189
|
ARGV.replace old_ARGV
|
data/spec/converter_spec.rb
CHANGED
@@ -13,6 +13,11 @@ describe Kramdown::AsciiDoc::Converter do
|
|
13
13
|
(expect converter.convert root).to end_with %(\n)
|
14
14
|
(expect doc.to_asciidoc).to end_with %(\n)
|
15
15
|
end
|
16
|
+
|
17
|
+
# Q: can we find a scenario that covers this?
|
18
|
+
it 'does not crash if element is nil' do
|
19
|
+
(expect converter.convert nil).to be_nil
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
context '#clone' do
|
@@ -0,0 +1 @@
|
|
1
|
+
See the xref:operations-guide.adoc[operations-guide.adoc].
|
@@ -0,0 +1 @@
|
|
1
|
+
See the [operations-guide.md](operations-guide.md).
|
@@ -1,5 +1,11 @@
|
|
1
1
|
Use the `+<=+` operator to define a version that is less than or equal to a specific version.
|
2
2
|
|
3
|
-
Use `+(start...end)+` to create a
|
3
|
+
Use `+(start...end)+` to create a sequence that ranges from `+start--end+`, but excludes the last element.
|
4
4
|
|
5
5
|
Use an `+<!-- XML comment -->+` to disable or hide markup.
|
6
|
+
|
7
|
+
In AsciiDoc, `+{name}+` is the syntax for an attribute reference.
|
8
|
+
|
9
|
+
`pass:[{lang}++]` is simply better than `+{lang}+`.
|
10
|
+
|
11
|
+
Type `+©+` or `+(C)+` to enter a copyright symbol.
|
@@ -1,5 +1,11 @@
|
|
1
1
|
Use the `<=` operator to define a version that is less than or equal to a specific version.
|
2
2
|
|
3
|
-
Use `(start...end)` to create a
|
3
|
+
Use `(start...end)` to create a sequence that ranges from `start--end`, but excludes the last element.
|
4
4
|
|
5
5
|
Use an `<!-- XML comment -->` to disable or hide markup.
|
6
|
+
|
7
|
+
In AsciiDoc, `{name}` is the syntax for an attribute reference.
|
8
|
+
|
9
|
+
`{lang}++` is simply better than `{lang}`.
|
10
|
+
|
11
|
+
Type `©` or `(C)` to enter a copyright symbol.
|
@@ -0,0 +1 @@
|
|
1
|
+
`C++` is hard. `C++` is fast.
|
@@ -0,0 +1 @@
|
|
1
|
+
`+**+` is the exponent operator in Ruby. For example `+4 ** 2+` is 4 to the power of 2 (i.e., 16).
|
@@ -0,0 +1 @@
|
|
1
|
+
`**` is the exponent operator in Ruby. For example `4 ** 2` is 4 to the power of 2 (i.e., 16).
|
@@ -0,0 +1 @@
|
|
1
|
+
The processor will interpolate #\{variables} in the text.
|
@@ -0,0 +1 @@
|
|
1
|
+
The processor will interpolate #{variables} in the text.
|
@@ -1 +1 @@
|
|
1
|
-
deceptive
|
1
|
+
deceptive spaces live here
|
@@ -0,0 +1 @@
|
|
1
|
+
a \-> b is the most direct route.
|
@@ -0,0 +1 @@
|
|
1
|
+
a -> b is the most direct route.
|
@@ -0,0 +1 @@
|
|
1
|
+
:wrap: :none
|
@@ -0,0 +1 @@
|
|
1
|
+
This is a test. This is only a test.
|
@@ -0,0 +1 @@
|
|
1
|
+
:wrap: :none
|
@@ -0,0 +1 @@
|
|
1
|
+
:wrap: :preserve
|
@@ -0,0 +1 @@
|
|
1
|
+
:wrap: :ventilate
|
@@ -0,0 +1 @@
|
|
1
|
+
:wrap: :ventilate
|
data/spec/writer_spec.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe Kramdown::AsciiDoc::Writer do
|
4
|
+
it 'replaces existing doctitle if present when assigning doctitle' do
|
5
|
+
header_lines = ['[#docid]', '= Document Title', ':experimental:']
|
6
|
+
subject.header.push(*header_lines)
|
7
|
+
subject.doctitle = 'New Document Title'
|
8
|
+
(expect subject.doctitle).to eql 'New Document Title'
|
9
|
+
end
|
10
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kramdown-asciidoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.alpha.
|
4
|
+
version: 1.0.0.alpha.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Allen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kramdown
|
@@ -88,7 +88,9 @@ files:
|
|
88
88
|
- lib/kramdown-asciidoc/writer.rb
|
89
89
|
- spec/cli_spec.rb
|
90
90
|
- spec/converter_spec.rb
|
91
|
-
- spec/
|
91
|
+
- spec/scenario_spec.rb
|
92
|
+
- spec/scenarios/a/bare-interdoc-xref.adoc
|
93
|
+
- spec/scenarios/a/bare-interdoc-xref.md
|
92
94
|
- spec/scenarios/a/bare-url.adoc
|
93
95
|
- spec/scenarios/a/bare-url.md
|
94
96
|
- spec/scenarios/a/containing-inline-image.adoc
|
@@ -153,6 +155,12 @@ files:
|
|
153
155
|
- spec/scenarios/codespan/constrained.md
|
154
156
|
- spec/scenarios/codespan/literal.adoc
|
155
157
|
- spec/scenarios/codespan/literal.md
|
158
|
+
- spec/scenarios/codespan/plus-plus.adoc
|
159
|
+
- spec/scenarios/codespan/plus-plus.md
|
160
|
+
- spec/scenarios/codespan/star-star.adoc
|
161
|
+
- spec/scenarios/codespan/star-star.md
|
162
|
+
- spec/scenarios/codespan/unconstrained.adoc
|
163
|
+
- spec/scenarios/codespan/unconstrained.md
|
156
164
|
- spec/scenarios/dl/compound-only.adoc
|
157
165
|
- spec/scenarios/dl/compound-only.md
|
158
166
|
- spec/scenarios/dl/compound.adoc
|
@@ -171,6 +179,8 @@ files:
|
|
171
179
|
- spec/scenarios/em/constrained.md
|
172
180
|
- spec/scenarios/em/strong.adoc
|
173
181
|
- spec/scenarios/em/strong.md
|
182
|
+
- spec/scenarios/em/unconstrained.adoc
|
183
|
+
- spec/scenarios/em/unconstrained.md
|
174
184
|
- spec/scenarios/entity/numeric.adoc
|
175
185
|
- spec/scenarios/entity/numeric.md
|
176
186
|
- spec/scenarios/entity/reverse.adoc
|
@@ -313,6 +323,8 @@ files:
|
|
313
323
|
- spec/scenarios/strong/menu.md
|
314
324
|
- spec/scenarios/strong/nested-emphasis.adoc
|
315
325
|
- spec/scenarios/strong/nested-emphasis.md
|
326
|
+
- spec/scenarios/strong/unconstrained.adoc
|
327
|
+
- spec/scenarios/strong/unconstrained.md
|
316
328
|
- spec/scenarios/table/alignment.adoc
|
317
329
|
- spec/scenarios/table/alignment.md
|
318
330
|
- spec/scenarios/table/cell-with-image.adoc
|
@@ -327,6 +339,8 @@ files:
|
|
327
339
|
- spec/scenarios/table/with-header.md
|
328
340
|
- spec/scenarios/table/without-header.adoc
|
329
341
|
- spec/scenarios/table/without-header.md
|
342
|
+
- spec/scenarios/text/attribute-reference.adoc
|
343
|
+
- spec/scenarios/text/attribute-reference.md
|
330
344
|
- spec/scenarios/text/caret.adoc
|
331
345
|
- spec/scenarios/text/caret.md
|
332
346
|
- spec/scenarios/text/lte.adoc
|
@@ -335,6 +349,8 @@ files:
|
|
335
349
|
- spec/scenarios/text/nbsp.md
|
336
350
|
- spec/scenarios/text/plus-plus.adoc
|
337
351
|
- spec/scenarios/text/plus-plus.md
|
352
|
+
- spec/scenarios/text/right-arrow.adoc
|
353
|
+
- spec/scenarios/text/right-arrow.md
|
338
354
|
- spec/scenarios/text/typographic_sym/apostrophe.adoc
|
339
355
|
- spec/scenarios/text/typographic_sym/apostrophe.md
|
340
356
|
- spec/scenarios/text/typographic_sym/double-quotes.adoc
|
@@ -375,6 +391,21 @@ files:
|
|
375
391
|
- spec/scenarios/ul/simple-separated.md
|
376
392
|
- spec/scenarios/ul/simple.adoc
|
377
393
|
- spec/scenarios/ul/simple.md
|
394
|
+
- spec/scenarios/wrap/containing-line-comment.adoc
|
395
|
+
- spec/scenarios/wrap/containing-line-comment.md
|
396
|
+
- spec/scenarios/wrap/containing-line-comment.opts
|
397
|
+
- spec/scenarios/wrap/none.adoc
|
398
|
+
- spec/scenarios/wrap/none.md
|
399
|
+
- spec/scenarios/wrap/none.opts
|
400
|
+
- spec/scenarios/wrap/preserve.adoc
|
401
|
+
- spec/scenarios/wrap/preserve.md
|
402
|
+
- spec/scenarios/wrap/preserve.opts
|
403
|
+
- spec/scenarios/wrap/ventilate-table-cell.adoc
|
404
|
+
- spec/scenarios/wrap/ventilate-table-cell.md
|
405
|
+
- spec/scenarios/wrap/ventilate-table-cell.opts
|
406
|
+
- spec/scenarios/wrap/ventilate.adoc
|
407
|
+
- spec/scenarios/wrap/ventilate.md
|
408
|
+
- spec/scenarios/wrap/ventilate.opts
|
378
409
|
- spec/scenarios/xml_comment/above-header.adoc
|
379
410
|
- spec/scenarios/xml_comment/above-header.md
|
380
411
|
- spec/scenarios/xml_comment/at-start-of-line.adoc
|
@@ -396,6 +427,7 @@ files:
|
|
396
427
|
- spec/scenarios/xml_comment/styled.adoc
|
397
428
|
- spec/scenarios/xml_comment/styled.md
|
398
429
|
- spec/spec_helper.rb
|
430
|
+
- spec/writer_spec.rb
|
399
431
|
homepage: https://github.com/asciidoctor/kramdown-asciidoc
|
400
432
|
licenses:
|
401
433
|
- MIT
|
@@ -427,7 +459,9 @@ summary: A Markdown to AsciiDoc converter based on kramdown
|
|
427
459
|
test_files:
|
428
460
|
- spec/cli_spec.rb
|
429
461
|
- spec/converter_spec.rb
|
430
|
-
- spec/
|
462
|
+
- spec/scenario_spec.rb
|
463
|
+
- spec/scenarios/a/bare-interdoc-xref.adoc
|
464
|
+
- spec/scenarios/a/bare-interdoc-xref.md
|
431
465
|
- spec/scenarios/a/bare-url.adoc
|
432
466
|
- spec/scenarios/a/bare-url.md
|
433
467
|
- spec/scenarios/a/containing-inline-image.adoc
|
@@ -492,6 +526,12 @@ test_files:
|
|
492
526
|
- spec/scenarios/codespan/constrained.md
|
493
527
|
- spec/scenarios/codespan/literal.adoc
|
494
528
|
- spec/scenarios/codespan/literal.md
|
529
|
+
- spec/scenarios/codespan/plus-plus.adoc
|
530
|
+
- spec/scenarios/codespan/plus-plus.md
|
531
|
+
- spec/scenarios/codespan/star-star.adoc
|
532
|
+
- spec/scenarios/codespan/star-star.md
|
533
|
+
- spec/scenarios/codespan/unconstrained.adoc
|
534
|
+
- spec/scenarios/codespan/unconstrained.md
|
495
535
|
- spec/scenarios/dl/compound-only.adoc
|
496
536
|
- spec/scenarios/dl/compound-only.md
|
497
537
|
- spec/scenarios/dl/compound.adoc
|
@@ -510,6 +550,8 @@ test_files:
|
|
510
550
|
- spec/scenarios/em/constrained.md
|
511
551
|
- spec/scenarios/em/strong.adoc
|
512
552
|
- spec/scenarios/em/strong.md
|
553
|
+
- spec/scenarios/em/unconstrained.adoc
|
554
|
+
- spec/scenarios/em/unconstrained.md
|
513
555
|
- spec/scenarios/entity/numeric.adoc
|
514
556
|
- spec/scenarios/entity/numeric.md
|
515
557
|
- spec/scenarios/entity/reverse.adoc
|
@@ -652,6 +694,8 @@ test_files:
|
|
652
694
|
- spec/scenarios/strong/menu.md
|
653
695
|
- spec/scenarios/strong/nested-emphasis.adoc
|
654
696
|
- spec/scenarios/strong/nested-emphasis.md
|
697
|
+
- spec/scenarios/strong/unconstrained.adoc
|
698
|
+
- spec/scenarios/strong/unconstrained.md
|
655
699
|
- spec/scenarios/table/alignment.adoc
|
656
700
|
- spec/scenarios/table/alignment.md
|
657
701
|
- spec/scenarios/table/cell-with-image.adoc
|
@@ -666,6 +710,8 @@ test_files:
|
|
666
710
|
- spec/scenarios/table/with-header.md
|
667
711
|
- spec/scenarios/table/without-header.adoc
|
668
712
|
- spec/scenarios/table/without-header.md
|
713
|
+
- spec/scenarios/text/attribute-reference.adoc
|
714
|
+
- spec/scenarios/text/attribute-reference.md
|
669
715
|
- spec/scenarios/text/caret.adoc
|
670
716
|
- spec/scenarios/text/caret.md
|
671
717
|
- spec/scenarios/text/lte.adoc
|
@@ -674,6 +720,8 @@ test_files:
|
|
674
720
|
- spec/scenarios/text/nbsp.md
|
675
721
|
- spec/scenarios/text/plus-plus.adoc
|
676
722
|
- spec/scenarios/text/plus-plus.md
|
723
|
+
- spec/scenarios/text/right-arrow.adoc
|
724
|
+
- spec/scenarios/text/right-arrow.md
|
677
725
|
- spec/scenarios/text/typographic_sym/apostrophe.adoc
|
678
726
|
- spec/scenarios/text/typographic_sym/apostrophe.md
|
679
727
|
- spec/scenarios/text/typographic_sym/double-quotes.adoc
|
@@ -714,6 +762,21 @@ test_files:
|
|
714
762
|
- spec/scenarios/ul/simple-separated.md
|
715
763
|
- spec/scenarios/ul/simple.adoc
|
716
764
|
- spec/scenarios/ul/simple.md
|
765
|
+
- spec/scenarios/wrap/containing-line-comment.adoc
|
766
|
+
- spec/scenarios/wrap/containing-line-comment.md
|
767
|
+
- spec/scenarios/wrap/containing-line-comment.opts
|
768
|
+
- spec/scenarios/wrap/none.adoc
|
769
|
+
- spec/scenarios/wrap/none.md
|
770
|
+
- spec/scenarios/wrap/none.opts
|
771
|
+
- spec/scenarios/wrap/preserve.adoc
|
772
|
+
- spec/scenarios/wrap/preserve.md
|
773
|
+
- spec/scenarios/wrap/preserve.opts
|
774
|
+
- spec/scenarios/wrap/ventilate-table-cell.adoc
|
775
|
+
- spec/scenarios/wrap/ventilate-table-cell.md
|
776
|
+
- spec/scenarios/wrap/ventilate-table-cell.opts
|
777
|
+
- spec/scenarios/wrap/ventilate.adoc
|
778
|
+
- spec/scenarios/wrap/ventilate.md
|
779
|
+
- spec/scenarios/wrap/ventilate.opts
|
717
780
|
- spec/scenarios/xml_comment/above-header.adoc
|
718
781
|
- spec/scenarios/xml_comment/above-header.md
|
719
782
|
- spec/scenarios/xml_comment/at-start-of-line.adoc
|
@@ -735,3 +798,4 @@ test_files:
|
|
735
798
|
- spec/scenarios/xml_comment/styled.adoc
|
736
799
|
- spec/scenarios/xml_comment/styled.md
|
737
800
|
- spec/spec_helper.rb
|
801
|
+
- spec/writer_spec.rb
|