kramdown-asciidoc 1.0.0.alpha.5 → 1.0.0.alpha.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|