kramdown-asciidoc 1.0.0.alpha.5 → 1.0.0.alpha.6
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.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +16 -0
- data/README.adoc +15 -6
- data/bin/kramdoc +3 -16
- data/lib/kramdown-asciidoc/cli.rb +107 -0
- data/lib/kramdown-asciidoc/converter.rb +25 -16
- data/lib/kramdown-asciidoc/version.rb +1 -1
- data/lib/kramdown-asciidoc/writer.rb +8 -8
- data/spec/cli_spec.rb +149 -0
- data/spec/integration_spec.rb +1 -1
- data/spec/scenarios/dl/compound-only.adoc +16 -0
- data/spec/scenarios/dl/compound-only.md +13 -0
- data/spec/scenarios/dl/empty-dd.adoc +3 -0
- data/spec/scenarios/dl/empty-dd.md +4 -0
- data/spec/scenarios/heading/auto-ids.adoc +11 -0
- data/spec/scenarios/heading/auto-ids.md +7 -0
- data/spec/scenarios/heading/auto-ids.opts +1 -0
- data/spec/scenarios/heading/offset.adoc +5 -0
- data/spec/scenarios/heading/offset.md +5 -0
- data/spec/scenarios/heading/offset.opts +1 -0
- data/spec/scenarios/ul/compound-only.adoc +5 -0
- data/spec/scenarios/ul/compound-only.md +3 -0
- data/spec/spec_helper.rb +25 -0
- metadata +29 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7e7b3ea076bc3a4367cee05e190fd4fb7aa867c941786b122ac5696a0f8869e
|
4
|
+
data.tar.gz: 8a964360802076fdd8ccd9aa569c810fd90843b84a3394326e7b6b31d8e76f46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fd80955421722cfa21688637e06d9d94377ab46679df75958ae8e61b6ba4eb80784beea8a90cf8f1ed415389a95b316a5fc8b349a608edb406704123db92c37
|
7
|
+
data.tar.gz: 284fb8dfbd153aca87bdf10687c24e80995aee0e135709a2aca6b4b22fc4a562e36472c83cd54a7c2d17e6f53a0c7e0fff8056872a29a8218c844078c28fb6af
|
data/CHANGELOG.adoc
CHANGED
@@ -5,6 +5,22 @@
|
|
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.6 (2018-06-26) - @mojavelinux
|
9
|
+
|
10
|
+
=== Added
|
11
|
+
|
12
|
+
* added options and usage to CLI (#2)
|
13
|
+
* ensure directory of output file exists
|
14
|
+
* add option to enable automatic generation of IDs for section titles
|
15
|
+
|
16
|
+
=== Changed
|
17
|
+
|
18
|
+
* handle case when dd is nil
|
19
|
+
* handle case when dd has no primary text
|
20
|
+
* handle case when li has no primary text
|
21
|
+
* use writer to track list nesting level
|
22
|
+
* fix warnings
|
23
|
+
|
8
24
|
== 1.0.0.alpha.5 (2018-06-19) - @mojavelinux
|
9
25
|
|
10
26
|
=== Added
|
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.6, 2018-06-26
|
4
4
|
// Aliases:
|
5
5
|
:project-name: Kramdown AsciiDoc
|
6
6
|
:project-handle: kramdown-asciidoc
|
@@ -64,17 +64,26 @@ TIP: To test a feature that's not yet released, you can <<Development,run the ap
|
|
64
64
|
|
65
65
|
== Usage
|
66
66
|
|
67
|
-
To convert a Markdown file to AsciiDoc using {project-name},
|
67
|
+
To convert a Markdown file to AsciiDoc using {project-name}, pass the name of the file to the `kramdoc` command as follows:
|
68
68
|
|
69
69
|
$ kramdoc sample.md
|
70
70
|
|
71
|
-
|
72
|
-
This path is calculated by removing the Markdown file extension, `.md`, and
|
71
|
+
By default, the `kramdoc` command automatically creates the output file [.path]_sample.adoc_ in the same folder as the input file.
|
72
|
+
This path is calculated by removing the Markdown file extension, `.md`, and replacing it with the AsciiDoc file extension, `.adoc`.
|
73
73
|
|
74
74
|
NOTE: The converter assumes the input uses the GitHub-flavor Markdown (GFM) syntax.
|
75
75
|
|
76
|
-
|
77
|
-
|
76
|
+
If you want to direct the output to a different file, pass the name of that file to the `kramdoc` command using the `-o` option as follows:
|
77
|
+
|
78
|
+
$ kramdoc -o result.adoc sample.md
|
79
|
+
|
80
|
+
To direct the output to the console (i.e., STDOUT) instead of a file, use the special value `-` as follows:
|
81
|
+
|
82
|
+
$ kramdoc -o - sample.md
|
83
|
+
|
84
|
+
To see all the options the `kramdoc` command accepts, pass the `-h` option to the `kramdoc` command as follows:
|
85
|
+
|
86
|
+
$ kramdoc -h
|
78
87
|
|
79
88
|
== Development
|
80
89
|
|
data/bin/kramdoc
CHANGED
@@ -6,19 +6,6 @@ else
|
|
6
6
|
require 'kramdown-asciidoc'
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
exit 1
|
13
|
-
end
|
14
|
-
outfile = %(#{infile.slice 0, infile.length - (File.extname infile).length}.adoc)
|
15
|
-
input = (IO.read infile, mode: 'r:UTF-8', newline: :universal).rstrip
|
16
|
-
input = input.slice 1, input.length while input.start_with? ?\n
|
17
|
-
attributes = {}
|
18
|
-
input = Kramdown::AsciiDoc.extract_front_matter input, attributes
|
19
|
-
input = Kramdown::AsciiDoc.replace_toc input, attributes
|
20
|
-
# FIXME allow input type to be specified (Kramdown, GFM, etc)
|
21
|
-
doc = Kramdown::Document.new input, (Kramdown::AsciiDoc::DEFAULT_PARSER_OPTS.merge attributes: attributes)
|
22
|
-
# FIXME provide option to write to different file or stdout
|
23
|
-
IO.write outfile, doc.to_asciidoc
|
24
|
-
exit 0
|
9
|
+
require 'kramdown-asciidoc/cli'
|
10
|
+
|
11
|
+
exit Kramdown::AsciiDoc::Cli.run
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module Kramdown; module AsciiDoc
|
5
|
+
class Cli
|
6
|
+
def parse args
|
7
|
+
options = {
|
8
|
+
attributes: {},
|
9
|
+
input: 'GFM',
|
10
|
+
html_to_native: true,
|
11
|
+
}
|
12
|
+
|
13
|
+
opt_parser = ::OptionParser.new do |opts|
|
14
|
+
opts.program_name = 'kramdoc'
|
15
|
+
opts.banner = <<~EOS
|
16
|
+
Usage: #{opts.program_name} [OPTION]... FILE...
|
17
|
+
|
18
|
+
Converts Markdown to AsciiDoc.
|
19
|
+
|
20
|
+
EOS
|
21
|
+
|
22
|
+
opts.on '-o FILE', '--output=FILE', 'Set the output filename or stream' do |file|
|
23
|
+
options[:output] = file
|
24
|
+
end
|
25
|
+
|
26
|
+
opts.on '--format=GFM|kramdown|markdown', %w(kramdown markdown GFM), 'Set the flavor of Markdown to parse (default: GFM)' do |format|
|
27
|
+
options[:input] = format
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on '-a KEY[=VALUE]', '--attribute=KEY[=VALUE]', 'Set an attribute in the document header (accepts: key, key!, or key=value' do |attr|
|
31
|
+
key, val = attr.split '=', 2
|
32
|
+
val = '' unless val
|
33
|
+
options[:attributes][key] = val
|
34
|
+
end
|
35
|
+
|
36
|
+
opts.on '--heading-offset=NUMBER', 'Shift the heading level by the specified number', ::Integer do |offset|
|
37
|
+
options[:heading_offset] = offset
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.on '--[no-]html-to-native', 'Set whether to passthrough HTML or convert it to AsciiDoc syntax where possible (default: true)' do |html_to_native|
|
41
|
+
options[:html_to_native] = html_to_native
|
42
|
+
end
|
43
|
+
|
44
|
+
opts.on '--auto-ids', 'Set whether to auto-generate IDs for section titles' do |auto_ids|
|
45
|
+
options[:auto_ids] = auto_ids
|
46
|
+
end
|
47
|
+
|
48
|
+
opts.on '-h', '--help', 'Display this help text and exit' do
|
49
|
+
$stdout.puts opts.help
|
50
|
+
return 0
|
51
|
+
end
|
52
|
+
|
53
|
+
opts.on '-v', '--version', %(Display version information and exit) do
|
54
|
+
$stdout.puts %(#{opts.program_name} #{VERSION})
|
55
|
+
return 0
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
args = opt_parser.parse args
|
60
|
+
|
61
|
+
if args.empty?
|
62
|
+
opt_parser.warn 'Please specify a Markdown file to convert.'
|
63
|
+
$stdout.puts opt_parser.help
|
64
|
+
return 1
|
65
|
+
end
|
66
|
+
|
67
|
+
if args.size == 1
|
68
|
+
options[:source] = args[0]
|
69
|
+
[0, options]
|
70
|
+
else
|
71
|
+
opt_parser.warn %(extra arguments detected (unparsed arguments: #{(args.drop 1).join ' '}))
|
72
|
+
$stdout.puts opt_parser.help
|
73
|
+
[1, options]
|
74
|
+
end
|
75
|
+
rescue ::OptionParser::InvalidOption
|
76
|
+
$stderr.puts %(#{opt_parser.program_name}: #{$!.message})
|
77
|
+
$stdout.puts opt_parser.help
|
78
|
+
return 1
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.run args = ARGV
|
82
|
+
code, options = new.parse args
|
83
|
+
return code unless code == 0 && options
|
84
|
+
if (source_file = options.delete :source) == '-'
|
85
|
+
markdown = $stdin.read.rstrip
|
86
|
+
else
|
87
|
+
markdown = (::IO.read source_file, mode: 'r:UTF-8', newline: :universal).rstrip
|
88
|
+
end
|
89
|
+
if (output_file = options.delete :output)
|
90
|
+
(Pathname output_file).dirname.mkpath
|
91
|
+
else
|
92
|
+
output_file = ((Pathname source_file).sub_ext '.adoc').to_s
|
93
|
+
end
|
94
|
+
markdown = markdown.slice 1, markdown.length while markdown.start_with? ?\n
|
95
|
+
attributes = options[:attributes]
|
96
|
+
markdown = ::Kramdown::AsciiDoc.extract_front_matter markdown, attributes
|
97
|
+
markdown = ::Kramdown::AsciiDoc.replace_toc markdown, attributes
|
98
|
+
doc = ::Kramdown::Document.new markdown, (::Kramdown::AsciiDoc::DEFAULT_PARSER_OPTS.merge options)
|
99
|
+
if output_file == '-'
|
100
|
+
$stdout.puts doc.to_asciidoc
|
101
|
+
else
|
102
|
+
::IO.write output_file, doc.to_asciidoc
|
103
|
+
end
|
104
|
+
0
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end; end
|
@@ -98,11 +98,12 @@ module Kramdown; module AsciiDoc
|
|
98
98
|
super
|
99
99
|
@attributes = opts[:attributes] || {}
|
100
100
|
@imagesdir = (@attributes.delete 'implicit-imagesdir') || @attributes['imagesdir']
|
101
|
+
@heading_offset = opts[:heading_offset] || 0
|
101
102
|
@current_heading_level = nil
|
102
103
|
end
|
103
104
|
|
104
105
|
def convert el, opts = {}
|
105
|
-
send %(convert_#{el.type}), el, opts
|
106
|
+
send %(convert_#{el.type}), el, opts if el
|
106
107
|
end
|
107
108
|
|
108
109
|
def convert_root el, opts
|
@@ -118,7 +119,7 @@ module Kramdown; module AsciiDoc
|
|
118
119
|
|
119
120
|
def convert_heading el, opts
|
120
121
|
(writer = opts[:writer]).start_block
|
121
|
-
level = el.options[:level]
|
122
|
+
level = el.options[:level] + @heading_offset
|
122
123
|
style = []
|
123
124
|
# Q: should writer track last heading level?
|
124
125
|
if (discrete = @current_heading_level && level > @current_heading_level + 1)
|
@@ -280,13 +281,12 @@ module Kramdown; module AsciiDoc
|
|
280
281
|
end
|
281
282
|
|
282
283
|
def convert_ul el, opts
|
283
|
-
|
284
|
-
(writer = opts[:writer]).start_list nested && parent.type != :dd && !parent.options[:compound]
|
284
|
+
(writer = opts[:writer]).start_list (parent = opts[:parent]).type != :dd && !parent.options[:compound]
|
285
285
|
level_opt = el.type == :dl ? :dlist_level : :list_level
|
286
|
-
|
286
|
+
opts[level_opt] = (opts[level_opt] || 0) + 1
|
287
287
|
traverse el, opts
|
288
288
|
opts.delete level_opt if (opts[level_opt] -= 1) < 1
|
289
|
-
writer.end_list
|
289
|
+
writer.end_list
|
290
290
|
end
|
291
291
|
|
292
292
|
alias convert_ol convert_ul
|
@@ -297,10 +297,15 @@ module Kramdown; module AsciiDoc
|
|
297
297
|
writer.add_blank_line if (prev = opts[:prev]) && prev.options[:compound]
|
298
298
|
marker = opts[:parent].type == :ol ? '.' : '*'
|
299
299
|
indent = (level = opts[:list_level]) - 1
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
300
|
+
if (children = el.children)[0].type == :p
|
301
|
+
primary, remaining = [(children = children.dup).shift, children]
|
302
|
+
primary_lines = compose_text [primary], parent: el, strip: true, split: true
|
303
|
+
else
|
304
|
+
remaining = children
|
305
|
+
primary_lines = ['{blank}']
|
306
|
+
end
|
307
|
+
primary_lines.unshift %(#{indent > 0 ? ' ' * indent : ''}#{marker * level} #{primary_lines.shift})
|
308
|
+
writer.add_lines primary_lines
|
304
309
|
unless remaining.empty?
|
305
310
|
next_node = remaining.find {|n| n.type != :blank }
|
306
311
|
el.options[:compound] = true if next_node && (BLOCK_TYPES.include? next_node.type)
|
@@ -317,13 +322,17 @@ module Kramdown; module AsciiDoc
|
|
317
322
|
end
|
318
323
|
|
319
324
|
def convert_dd el, opts
|
320
|
-
|
321
|
-
|
322
|
-
if primary_lines.size == 1
|
323
|
-
opts[:writer].append %( #{primary_lines[0]})
|
325
|
+
if el.options[:first_as_para] == false
|
326
|
+
remaining = el.children
|
324
327
|
else
|
325
|
-
el.
|
326
|
-
|
328
|
+
remaining = (children = el.children).drop 1
|
329
|
+
primary_lines = compose_text [children[0]], parent: el, strip: true, split: true
|
330
|
+
if primary_lines.size == 1
|
331
|
+
opts[:writer].append %( #{primary_lines[0]})
|
332
|
+
else
|
333
|
+
el.options[:compound] = true
|
334
|
+
opts[:writer].add_lines primary_lines
|
335
|
+
end
|
327
336
|
end
|
328
337
|
unless remaining.empty?
|
329
338
|
next_node = remaining.find {|n| n.type != :blank }
|
@@ -10,7 +10,7 @@ module Kramdown; module AsciiDoc
|
|
10
10
|
@body = []
|
11
11
|
@nesting_stack = []
|
12
12
|
@block_delimiter = nil
|
13
|
-
@block_separator =
|
13
|
+
@block_separator = []
|
14
14
|
end
|
15
15
|
|
16
16
|
def doctitle
|
@@ -39,27 +39,27 @@ module Kramdown; module AsciiDoc
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def start_block
|
42
|
-
@body << @block_separator unless empty?
|
42
|
+
@body << (@block_separator.last || '') unless empty?
|
43
43
|
nil
|
44
44
|
end
|
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
|
49
|
-
@body << '' unless
|
50
|
-
@block_separator
|
48
|
+
def start_list compound = false
|
49
|
+
@body << '' unless (compound && @block_separator.last == '+') || empty?
|
50
|
+
@block_separator << '+'
|
51
51
|
nil
|
52
52
|
end
|
53
53
|
|
54
|
-
def end_list
|
55
|
-
@block_separator
|
54
|
+
def end_list
|
55
|
+
@block_separator.pop
|
56
56
|
nil
|
57
57
|
end
|
58
58
|
|
59
59
|
def start_delimited_block delimiter
|
60
60
|
@body << (@block_delimiter = delimiter.length == 1 ? delimiter * 4 : delimiter)
|
61
61
|
@nesting_stack << [(@body.pop @body.length), @block_delimiter, @block_separator]
|
62
|
-
@block_separator =
|
62
|
+
@block_separator = []
|
63
63
|
nil
|
64
64
|
end
|
65
65
|
|
data/spec/cli_spec.rb
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
require 'kramdown-asciidoc/cli'
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
describe Kramdown::AsciiDoc::Cli do
|
6
|
+
before :each do
|
7
|
+
@old_stdout, $stdout = $stdout, StringIO.new
|
8
|
+
@old_stderr, $stderr = $stderr, StringIO.new
|
9
|
+
end
|
10
|
+
|
11
|
+
after :each do
|
12
|
+
$stdout, $stderr = @old_stdout, @old_stderr
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'option flags' do
|
16
|
+
it 'returns non-zero exit status and displays usage when no arguments are given' do
|
17
|
+
expected = 'kramdoc: Please specify a Markdown file to convert.'
|
18
|
+
(expect Kramdown::AsciiDoc::Cli.run []).to eql 1
|
19
|
+
(expect $stderr.string.chomp).to eql expected
|
20
|
+
(expect $stdout.string.chomp).to start_with 'Usage: kramdoc'
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns non-zero exit status and displays usage when more than one argument is given' do
|
24
|
+
expected = 'kramdoc: extra arguments detected (unparsed arguments: bar.md)'
|
25
|
+
(expect Kramdown::AsciiDoc::Cli.run %w(foo.md bar.md)).to eql 1
|
26
|
+
(expect $stderr.string.chomp).to eql expected
|
27
|
+
(expect $stdout.string.chomp).to start_with 'Usage: kramdoc'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns non-zero exit status when invalid argument is given' do
|
31
|
+
(expect Kramdown::AsciiDoc::Cli.run %w(--invalid-option)).to eql 1
|
32
|
+
(expect $stderr.string.chomp).to eql 'kramdoc: invalid option: --invalid-option'
|
33
|
+
(expect $stdout.string.chomp).to start_with 'Usage: kramdoc'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'displays version when -v flag is used' do
|
37
|
+
(expect Kramdown::AsciiDoc::Cli.run %w(-v)).to eql 0
|
38
|
+
(expect $stdout.string.chomp).to eql %(kramdoc #{Kramdown::AsciiDoc::VERSION})
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'displays help when -h flag is used' do
|
42
|
+
(expect Kramdown::AsciiDoc::Cli.run %w(-h)).to eql 0
|
43
|
+
(expect $stdout.string.chomp).to start_with 'Usage: kramdoc'
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'computes output file from input file' do
|
47
|
+
the_source_file = output_file 'implicit-output.md'
|
48
|
+
the_output_file = output_file 'implicit-output.adoc'
|
49
|
+
IO.write the_source_file, 'This is just a test.'
|
50
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(#{the_source_file})).to eql 0
|
51
|
+
(expect (IO.read the_output_file).chomp).to eql 'This is just a test.'
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'writes output to file specified by the -o option' do
|
55
|
+
the_source_file = output_file 'explicit-output.md'
|
56
|
+
the_output_file = output_file 'my-explicit-output.adoc'
|
57
|
+
IO.write the_source_file, 'This is only a test.'
|
58
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o #{the_output_file} #{the_source_file})).to eql 0
|
59
|
+
(expect (IO.read the_output_file).chomp).to eql 'This is only a test.'
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'ensures directory of explicit output file exists before writing' do
|
63
|
+
the_source_file = output_file 'ensure-output-dir.md'
|
64
|
+
the_output_file = output_file 'path/to/output/file.adoc'
|
65
|
+
IO.write the_source_file, 'Everything is going to be fine.'
|
66
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o #{the_output_file} #{the_source_file})).to eql 0
|
67
|
+
(expect (IO.read the_output_file).chomp).to eql 'Everything is going to be fine.'
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'writes output to stdout when -o option equals -' do
|
71
|
+
the_source_file = scenario_file 'p/single-line.md'
|
72
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o - #{the_source_file})).to eql 0
|
73
|
+
(expect $stdout.string.chomp).to eql 'A paragraph that consists of a single line.'
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'reads input from stdin when argument is -' do
|
77
|
+
old_stdin, $stdin = $stdin, StringIO.new
|
78
|
+
begin
|
79
|
+
$stdin.puts '- list item'
|
80
|
+
$stdin.rewind
|
81
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o - -)).to eql 0
|
82
|
+
(expect $stdout.string.chomp).to eql '* list item'
|
83
|
+
ensure
|
84
|
+
$stdin = old_stdin
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'removes leading blank lines and trailing whitespace from source' do
|
89
|
+
the_source_file = output_file 'leading-trailing-space.md'
|
90
|
+
IO.write the_source_file, %(\n\n\n\n# Heading\n\ncontent. \n\n)
|
91
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o - #{the_source_file})).to eql 0
|
92
|
+
(expect $stdout.string.chomp).to eql %(= Heading\n\ncontent.)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'reads Markdown source using specified format' do
|
96
|
+
the_source_file = output_file 'format-markdown.md'
|
97
|
+
IO.write the_source_file, '#Heading'
|
98
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o - --format=markdown #{the_source_file})).to eql 0
|
99
|
+
(expect $stdout.string.chomp).to eql '= Heading'
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'shifts headings by offset when --heading-offset is used' do
|
103
|
+
the_source_file = scenario_file 'heading/offset.md'
|
104
|
+
expected = IO.read scenario_file 'heading/offset.adoc'
|
105
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o - --heading-offset=-1 #{the_source_file})).to eql 0
|
106
|
+
(expect $stdout.string).to eql expected
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'automatically generates IDs for section titles when --auto-ids is used' do
|
110
|
+
the_source_file = scenario_file 'heading/auto-ids.md'
|
111
|
+
expected = IO.read scenario_file 'heading/auto-ids.adoc'
|
112
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o - --auto-ids #{the_source_file})).to eql 0
|
113
|
+
(expect $stdout.string).to eql expected
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'adds specified attributes to document header' do
|
117
|
+
the_source_file = scenario_file 'root/header-and-body.md'
|
118
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o - -a idprefix -a idseparator=- #{the_source_file})).to eql 0
|
119
|
+
expected = <<~EOS
|
120
|
+
= Document Title
|
121
|
+
:idprefix:
|
122
|
+
:idseparator: -
|
123
|
+
|
124
|
+
Body content.
|
125
|
+
EOS
|
126
|
+
(expect $stdout.string).to eql expected
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'passes through HTML when --no-html-to-native flag is used' do
|
130
|
+
the_source_file = scenario_file 'html_element/native.md'
|
131
|
+
(expect Kramdown::AsciiDoc::Cli.run %W(-o - --no-html-to-native #{the_source_file})).to eql 0
|
132
|
+
expected = <<~EOS
|
133
|
+
+++<p>++++++<strong>+++strong emphasis (aka bold)+++</strong>+++ +++<em>+++emphasis (aka italic)+++</em>+++ +++<code>+++monospace+++</code>++++++</p>+++
|
134
|
+
EOS
|
135
|
+
(expect $stdout.string).to eql expected
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'reads arguments from ARGV by default' do
|
139
|
+
old_ARGV = ARGV.dup
|
140
|
+
ARGV.replace %w(-v)
|
141
|
+
begin
|
142
|
+
(expect Kramdown::AsciiDoc::Cli.run).to eql 0
|
143
|
+
(expect $stdout.string.chomp).to eql %(kramdoc #{Kramdown::AsciiDoc::VERSION})
|
144
|
+
ensure
|
145
|
+
ARGV.replace old_ARGV
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
data/spec/integration_spec.rb
CHANGED
@@ -4,7 +4,7 @@ require 'yaml'
|
|
4
4
|
describe 'integration scenario' do
|
5
5
|
let(:doc) { Kramdown::Document.new input, (Kramdown::AsciiDoc::DEFAULT_PARSER_OPTS.merge extra_options) }
|
6
6
|
|
7
|
-
Dir.chdir
|
7
|
+
Dir.chdir scenarios_dir do
|
8
8
|
(Dir.glob '**/*.md').each do |input_filename|
|
9
9
|
input_stem = input_filename.slice 0, input_filename.length - 3
|
10
10
|
scenario_name = input_stem.gsub '/', '::'
|
@@ -0,0 +1 @@
|
|
1
|
+
:auto_ids: true
|
@@ -0,0 +1 @@
|
|
1
|
+
:heading_offset: -1
|
data/spec/spec_helper.rb
CHANGED
@@ -8,3 +8,28 @@ when 'true'
|
|
8
8
|
end
|
9
9
|
|
10
10
|
require 'kramdown-asciidoc'
|
11
|
+
require 'fileutils'
|
12
|
+
|
13
|
+
RSpec.configure do |config|
|
14
|
+
config.after :suite do
|
15
|
+
FileUtils.rm_r output_dir, force: true, secure: true
|
16
|
+
end
|
17
|
+
|
18
|
+
def output_dir
|
19
|
+
dir = File.join __dir__, 'output'
|
20
|
+
FileUtils.mkpath dir
|
21
|
+
dir
|
22
|
+
end
|
23
|
+
|
24
|
+
def output_file path
|
25
|
+
File.join output_dir, path
|
26
|
+
end
|
27
|
+
|
28
|
+
def scenarios_dir
|
29
|
+
File.join __dir__, 'scenarios'
|
30
|
+
end
|
31
|
+
|
32
|
+
def scenario_file path
|
33
|
+
File.join scenarios_dir, path
|
34
|
+
end
|
35
|
+
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.6
|
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-06-
|
11
|
+
date: 2018-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kramdown
|
@@ -82,9 +82,11 @@ files:
|
|
82
82
|
- bin/kramdoc
|
83
83
|
- kramdown-asciidoc.gemspec
|
84
84
|
- lib/kramdown-asciidoc.rb
|
85
|
+
- lib/kramdown-asciidoc/cli.rb
|
85
86
|
- lib/kramdown-asciidoc/converter.rb
|
86
87
|
- lib/kramdown-asciidoc/version.rb
|
87
88
|
- lib/kramdown-asciidoc/writer.rb
|
89
|
+
- spec/cli_spec.rb
|
88
90
|
- spec/converter_spec.rb
|
89
91
|
- spec/integration_spec.rb
|
90
92
|
- spec/scenarios/a/bare-url.adoc
|
@@ -151,8 +153,12 @@ files:
|
|
151
153
|
- spec/scenarios/codespan/constrained.md
|
152
154
|
- spec/scenarios/codespan/literal.adoc
|
153
155
|
- spec/scenarios/codespan/literal.md
|
156
|
+
- spec/scenarios/dl/compound-only.adoc
|
157
|
+
- spec/scenarios/dl/compound-only.md
|
154
158
|
- spec/scenarios/dl/compound.adoc
|
155
159
|
- spec/scenarios/dl/compound.md
|
160
|
+
- spec/scenarios/dl/empty-dd.adoc
|
161
|
+
- spec/scenarios/dl/empty-dd.md
|
156
162
|
- spec/scenarios/dl/nested-mixed.adoc
|
157
163
|
- spec/scenarios/dl/nested-mixed.md
|
158
164
|
- spec/scenarios/dl/nested.adoc
|
@@ -169,10 +175,16 @@ files:
|
|
169
175
|
- spec/scenarios/entity/numeric.md
|
170
176
|
- spec/scenarios/entity/reverse.adoc
|
171
177
|
- spec/scenarios/entity/reverse.md
|
178
|
+
- spec/scenarios/heading/auto-ids.adoc
|
179
|
+
- spec/scenarios/heading/auto-ids.md
|
180
|
+
- spec/scenarios/heading/auto-ids.opts
|
172
181
|
- spec/scenarios/heading/block-title.adoc
|
173
182
|
- spec/scenarios/heading/block-title.md
|
174
183
|
- spec/scenarios/heading/not-block-title.adoc
|
175
184
|
- spec/scenarios/heading/not-block-title.md
|
185
|
+
- spec/scenarios/heading/offset.adoc
|
186
|
+
- spec/scenarios/heading/offset.md
|
187
|
+
- spec/scenarios/heading/offset.opts
|
176
188
|
- spec/scenarios/heading/out-of-sequence.adoc
|
177
189
|
- spec/scenarios/heading/out-of-sequence.md
|
178
190
|
- spec/scenarios/heading/outline.adoc
|
@@ -347,6 +359,8 @@ files:
|
|
347
359
|
- spec/scenarios/ul/blockquote.md
|
348
360
|
- spec/scenarios/ul/compound-nested.adoc
|
349
361
|
- spec/scenarios/ul/compound-nested.md
|
362
|
+
- spec/scenarios/ul/compound-only.adoc
|
363
|
+
- spec/scenarios/ul/compound-only.md
|
350
364
|
- spec/scenarios/ul/compound-separated.adoc
|
351
365
|
- spec/scenarios/ul/compound-separated.md
|
352
366
|
- spec/scenarios/ul/compound.adoc
|
@@ -411,6 +425,7 @@ signing_key:
|
|
411
425
|
specification_version: 4
|
412
426
|
summary: A Markdown to AsciiDoc converter based on kramdown
|
413
427
|
test_files:
|
428
|
+
- spec/cli_spec.rb
|
414
429
|
- spec/converter_spec.rb
|
415
430
|
- spec/integration_spec.rb
|
416
431
|
- spec/scenarios/a/bare-url.adoc
|
@@ -477,8 +492,12 @@ test_files:
|
|
477
492
|
- spec/scenarios/codespan/constrained.md
|
478
493
|
- spec/scenarios/codespan/literal.adoc
|
479
494
|
- spec/scenarios/codespan/literal.md
|
495
|
+
- spec/scenarios/dl/compound-only.adoc
|
496
|
+
- spec/scenarios/dl/compound-only.md
|
480
497
|
- spec/scenarios/dl/compound.adoc
|
481
498
|
- spec/scenarios/dl/compound.md
|
499
|
+
- spec/scenarios/dl/empty-dd.adoc
|
500
|
+
- spec/scenarios/dl/empty-dd.md
|
482
501
|
- spec/scenarios/dl/nested-mixed.adoc
|
483
502
|
- spec/scenarios/dl/nested-mixed.md
|
484
503
|
- spec/scenarios/dl/nested.adoc
|
@@ -495,10 +514,16 @@ test_files:
|
|
495
514
|
- spec/scenarios/entity/numeric.md
|
496
515
|
- spec/scenarios/entity/reverse.adoc
|
497
516
|
- spec/scenarios/entity/reverse.md
|
517
|
+
- spec/scenarios/heading/auto-ids.adoc
|
518
|
+
- spec/scenarios/heading/auto-ids.md
|
519
|
+
- spec/scenarios/heading/auto-ids.opts
|
498
520
|
- spec/scenarios/heading/block-title.adoc
|
499
521
|
- spec/scenarios/heading/block-title.md
|
500
522
|
- spec/scenarios/heading/not-block-title.adoc
|
501
523
|
- spec/scenarios/heading/not-block-title.md
|
524
|
+
- spec/scenarios/heading/offset.adoc
|
525
|
+
- spec/scenarios/heading/offset.md
|
526
|
+
- spec/scenarios/heading/offset.opts
|
502
527
|
- spec/scenarios/heading/out-of-sequence.adoc
|
503
528
|
- spec/scenarios/heading/out-of-sequence.md
|
504
529
|
- spec/scenarios/heading/outline.adoc
|
@@ -673,6 +698,8 @@ test_files:
|
|
673
698
|
- spec/scenarios/ul/blockquote.md
|
674
699
|
- spec/scenarios/ul/compound-nested.adoc
|
675
700
|
- spec/scenarios/ul/compound-nested.md
|
701
|
+
- spec/scenarios/ul/compound-only.adoc
|
702
|
+
- spec/scenarios/ul/compound-only.md
|
676
703
|
- spec/scenarios/ul/compound-separated.adoc
|
677
704
|
- spec/scenarios/ul/compound-separated.md
|
678
705
|
- spec/scenarios/ul/compound.adoc
|