asciidoctor 2.0.9 → 2.0.14
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 +193 -16
- data/LICENSE +1 -1
- data/README-de.adoc +12 -13
- data/README-fr.adoc +11 -15
- data/README-jp.adoc +242 -185
- data/README-zh_CN.adoc +17 -18
- data/README.adoc +133 -131
- data/asciidoctor.gemspec +6 -6
- data/data/locale/attributes-ar.adoc +4 -3
- data/data/locale/attributes-be.adoc +23 -0
- data/data/locale/attributes-bg.adoc +4 -3
- data/data/locale/attributes-ca.adoc +6 -5
- data/data/locale/attributes-cs.adoc +4 -3
- data/data/locale/attributes-da.adoc +6 -5
- data/data/locale/attributes-de.adoc +4 -4
- data/data/locale/attributes-en.adoc +4 -4
- data/data/locale/attributes-es.adoc +6 -5
- data/data/locale/attributes-fa.adoc +4 -3
- data/data/locale/attributes-fi.adoc +4 -3
- data/data/locale/attributes-fr.adoc +6 -5
- data/data/locale/attributes-hu.adoc +4 -3
- data/data/locale/attributes-id.adoc +4 -3
- data/data/locale/attributes-it.adoc +6 -5
- data/data/locale/attributes-ja.adoc +4 -3
- data/data/locale/{attributes-kr.adoc → attributes-ko.adoc} +4 -3
- data/data/locale/attributes-nb.adoc +4 -3
- data/data/locale/attributes-nl.adoc +6 -5
- data/data/locale/attributes-nn.adoc +4 -3
- data/data/locale/attributes-pl.adoc +8 -7
- data/data/locale/attributes-pt.adoc +6 -5
- data/data/locale/attributes-pt_BR.adoc +6 -5
- data/data/locale/attributes-ro.adoc +4 -3
- data/data/locale/attributes-ru.adoc +6 -5
- data/data/locale/attributes-sr.adoc +4 -4
- data/data/locale/attributes-sr_Latn.adoc +4 -4
- data/data/locale/attributes-sv.adoc +4 -4
- data/data/locale/attributes-tr.adoc +4 -3
- data/data/locale/attributes-uk.adoc +6 -5
- data/data/locale/attributes-zh_CN.adoc +4 -3
- data/data/locale/attributes-zh_TW.adoc +4 -3
- data/data/reference/syntax.adoc +14 -7
- data/data/stylesheets/asciidoctor-default.css +30 -30
- data/lib/asciidoctor.rb +40 -14
- data/lib/asciidoctor/abstract_block.rb +9 -4
- data/lib/asciidoctor/abstract_node.rb +16 -6
- data/lib/asciidoctor/attribute_list.rb +63 -71
- data/lib/asciidoctor/cli/invoker.rb +2 -0
- data/lib/asciidoctor/cli/options.rb +10 -9
- data/lib/asciidoctor/convert.rb +167 -162
- data/lib/asciidoctor/converter.rb +13 -12
- data/lib/asciidoctor/converter/docbook5.rb +5 -9
- data/lib/asciidoctor/converter/html5.rb +58 -45
- data/lib/asciidoctor/converter/manpage.rb +61 -38
- data/lib/asciidoctor/converter/template.rb +3 -0
- data/lib/asciidoctor/document.rb +44 -51
- data/lib/asciidoctor/extensions.rb +2 -4
- data/lib/asciidoctor/helpers.rb +20 -15
- data/lib/asciidoctor/load.rb +102 -101
- data/lib/asciidoctor/parser.rb +40 -32
- data/lib/asciidoctor/path_resolver.rb +14 -12
- data/lib/asciidoctor/reader.rb +20 -13
- data/lib/asciidoctor/rx.rb +7 -6
- data/lib/asciidoctor/substitutors.rb +69 -50
- data/lib/asciidoctor/syntax_highlighter.rb +15 -7
- data/lib/asciidoctor/syntax_highlighter/coderay.rb +1 -1
- data/lib/asciidoctor/syntax_highlighter/highlightjs.rb +12 -4
- data/lib/asciidoctor/syntax_highlighter/prettify.rb +7 -4
- data/lib/asciidoctor/syntax_highlighter/pygments.rb +6 -7
- data/lib/asciidoctor/syntax_highlighter/rouge.rb +33 -19
- data/lib/asciidoctor/table.rb +52 -23
- data/lib/asciidoctor/version.rb +1 -1
- data/man/asciidoctor.1 +8 -8
- data/man/asciidoctor.adoc +4 -4
- metadata +16 -15
@@ -39,14 +39,15 @@ module Asciidoctor
|
|
39
39
|
# NOTE don't use squiggly heredoc to maintain compatibility with Ruby < 2.3
|
40
40
|
opts.banner = <<-'EOS'.gsub ' ', ''
|
41
41
|
Usage: asciidoctor [OPTION]... FILE...
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
Convert the AsciiDoc input FILE(s) to the backend output format (e.g., HTML 5, DocBook 5, etc.)
|
43
|
+
Unless specified otherwise, the output is written to a file whose name is derived from the input file.
|
44
|
+
Application log messages are printed to STDERR.
|
45
|
+
Example: asciidoctor input.adoc
|
45
46
|
|
46
47
|
EOS
|
47
48
|
|
48
|
-
opts.on('-b', '--backend BACKEND', 'set output format
|
49
|
-
'additional backends are supported via
|
49
|
+
opts.on('-b', '--backend BACKEND', 'set backend output format: [html5, xhtml5, docbook5, manpage] (default: html5)',
|
50
|
+
'additional backends are supported via extended converters (e.g., pdf, epub3)') do |backend|
|
50
51
|
self[:attributes]['backend'] = backend
|
51
52
|
end
|
52
53
|
opts.on('-d', '--doctype DOCTYPE', ['article', 'book', 'manpage', 'inline'],
|
@@ -76,8 +77,8 @@ module Asciidoctor
|
|
76
77
|
opts.on('-n', '--section-numbers', 'auto-number section titles in the HTML backend; disabled by default') do
|
77
78
|
self[:attributes]['sectnums'] = ''
|
78
79
|
end
|
79
|
-
opts.on('--eruby ERUBY', ['erb', 'erubis'],
|
80
|
-
'specify eRuby implementation to use when rendering custom ERB templates: [erb, erubis] (default: erb)') do |eruby|
|
80
|
+
opts.on('--eruby ERUBY', ['erb', 'erubi', 'erubis'],
|
81
|
+
'specify eRuby implementation to use when rendering custom ERB templates: [erb, erubi, erubis] (default: erb)') do |eruby|
|
81
82
|
self[:eruby] = eruby
|
82
83
|
end
|
83
84
|
opts.on('-a', '--attribute name[=value]', 'a document attribute to set in the form of name, name!, or name=value pair',
|
@@ -128,7 +129,7 @@ module Asciidoctor
|
|
128
129
|
opts.on('--trace', 'include backtrace information when reporting errors (default: false)') do |trace|
|
129
130
|
self[:trace] = true
|
130
131
|
end
|
131
|
-
opts.on('-v', '--verbose', '
|
132
|
+
opts.on('-v', '--verbose', 'directs application messages logged at DEBUG or INFO level to STDERR (default: false)') do |verbose|
|
132
133
|
self[:verbose] = 2
|
133
134
|
end
|
134
135
|
opts.on('-w', '--warnings', 'turn on script warnings (default: false)') do |warnings|
|
@@ -205,7 +206,7 @@ module Asciidoctor
|
|
205
206
|
# shave off the file to process so that options errors appear correctly
|
206
207
|
if args.size == 1 && args[0] == '-'
|
207
208
|
infiles << args.pop
|
208
|
-
|
209
|
+
else
|
209
210
|
args.each do |file|
|
210
211
|
if file.start_with? '-'
|
211
212
|
# warn, but don't panic; we may have enough to proceed, so we won't force a failure
|
data/lib/asciidoctor/convert.rb
CHANGED
@@ -1,193 +1,198 @@
|
|
1
1
|
module Asciidoctor
|
2
|
-
|
2
|
+
class << self
|
3
|
+
# Public: Parse the AsciiDoc source input into an Asciidoctor::Document and
|
4
|
+
# convert it to the specified backend format.
|
5
|
+
#
|
6
|
+
# Accepts input as an IO (or StringIO), String or String Array object. If the
|
7
|
+
# input is a File, the object is expected to be opened for reading and is not
|
8
|
+
# closed afterwards by this method. Information about the file (filename,
|
9
|
+
# directory name, etc) gets assigned to attributes on the Document object.
|
10
|
+
#
|
11
|
+
# If the :to_file option is true, and the input is a File, the output is
|
12
|
+
# written to a file adjacent to the input file, having an extension that
|
13
|
+
# corresponds to the backend format. Otherwise, if the :to_file option is
|
14
|
+
# specified, the file is written to that file. If :to_file is not an absolute
|
15
|
+
# path, it is resolved relative to :to_dir, if given, otherwise the
|
16
|
+
# Document#base_dir. If the target directory does not exist, it will not be
|
17
|
+
# created unless the :mkdirs option is set to true. If the file cannot be
|
18
|
+
# written because the target directory does not exist, or because it falls
|
19
|
+
# outside of the Document#base_dir in safe mode, an IOError is raised.
|
20
|
+
#
|
21
|
+
# If the output is going to be written to a file, the header and footer are
|
22
|
+
# included unless specified otherwise (writing to a file implies creating a
|
23
|
+
# standalone document). Otherwise, the header and footer are not included by
|
24
|
+
# default and the converted result is returned.
|
25
|
+
#
|
26
|
+
# input - the String AsciiDoc source filename
|
27
|
+
# options - a String, Array or Hash of options to control processing (default: {})
|
28
|
+
# String and Array values are converted into a Hash.
|
29
|
+
# See Asciidoctor::Document#initialize for details about options.
|
30
|
+
#
|
31
|
+
# Returns the Document object if the converted String is written to a
|
32
|
+
# file, otherwise the converted String
|
33
|
+
def convert input, options = {}
|
34
|
+
(options = options.merge).delete :parse
|
35
|
+
to_dir = options.delete :to_dir
|
36
|
+
mkdirs = options.delete :mkdirs
|
3
37
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
# path, it is resolved relative to :to_dir, if given, otherwise the
|
17
|
-
# Document#base_dir. If the target directory does not exist, it will not be
|
18
|
-
# created unless the :mkdirs option is set to true. If the file cannot be
|
19
|
-
# written because the target directory does not exist, or because it falls
|
20
|
-
# outside of the Document#base_dir in safe mode, an IOError is raised.
|
21
|
-
#
|
22
|
-
# If the output is going to be written to a file, the header and footer are
|
23
|
-
# included unless specified otherwise (writing to a file implies creating a
|
24
|
-
# standalone document). Otherwise, the header and footer are not included by
|
25
|
-
# default and the converted result is returned.
|
26
|
-
#
|
27
|
-
# input - the String AsciiDoc source filename
|
28
|
-
# options - a String, Array or Hash of options to control processing (default: {})
|
29
|
-
# String and Array values are converted into a Hash.
|
30
|
-
# See Asciidoctor::Document#initialize for details about options.
|
31
|
-
#
|
32
|
-
# Returns the Document object if the converted String is written to a
|
33
|
-
# file, otherwise the converted String
|
34
|
-
def convert input, options = {}
|
35
|
-
(options = options.merge).delete :parse
|
36
|
-
to_dir = options.delete :to_dir
|
37
|
-
mkdirs = options.delete :mkdirs
|
38
|
-
|
39
|
-
case (to_file = options.delete :to_file)
|
40
|
-
when true, nil
|
41
|
-
unless (write_to_target = to_dir)
|
42
|
-
sibling_path = ::File.absolute_path input.path if ::File === input
|
38
|
+
case (to_file = options.delete :to_file)
|
39
|
+
when true, nil
|
40
|
+
unless (write_to_target = to_dir)
|
41
|
+
sibling_path = ::File.absolute_path input.path if ::File === input
|
42
|
+
end
|
43
|
+
to_file = nil
|
44
|
+
when false
|
45
|
+
to_file = nil
|
46
|
+
when '/dev/null'
|
47
|
+
return load input, options
|
48
|
+
else
|
49
|
+
options[:to_file] = write_to_target = to_file unless (stream_output = to_file.respond_to? :write)
|
43
50
|
end
|
44
|
-
to_file = nil
|
45
|
-
when false
|
46
|
-
to_file = nil
|
47
|
-
when '/dev/null'
|
48
|
-
return load input, options
|
49
|
-
else
|
50
|
-
options[:to_file] = write_to_target = to_file unless (stream_output = to_file.respond_to? :write)
|
51
|
-
end
|
52
51
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
unless options.key? :standalone
|
53
|
+
if sibling_path || write_to_target
|
54
|
+
options[:standalone] = options.fetch :header_footer, true
|
55
|
+
elsif options.key? :header_footer
|
56
|
+
options[:standalone] = options[:header_footer]
|
57
|
+
end
|
58
58
|
end
|
59
|
-
end
|
60
59
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
60
|
+
# NOTE outfile may be controlled by document attributes, so resolve outfile after loading
|
61
|
+
if sibling_path
|
62
|
+
options[:to_dir] = outdir = ::File.dirname sibling_path
|
63
|
+
elsif write_to_target
|
64
|
+
if to_dir
|
65
|
+
if to_file
|
66
|
+
options[:to_dir] = ::File.dirname ::File.expand_path to_file, to_dir
|
67
|
+
else
|
68
|
+
options[:to_dir] = ::File.expand_path to_dir
|
69
|
+
end
|
70
|
+
elsif to_file
|
71
|
+
options[:to_dir] = ::File.dirname ::File.expand_path to_file
|
70
72
|
end
|
71
|
-
elsif to_file
|
72
|
-
options[:to_dir] = ::File.dirname ::File.expand_path to_file
|
73
73
|
end
|
74
|
-
end
|
75
74
|
|
76
|
-
|
77
|
-
|
78
|
-
|
75
|
+
# NOTE :to_dir is always set when outputting to a file
|
76
|
+
# NOTE :to_file option only passed if assigned an explicit path
|
77
|
+
doc = load input, options
|
79
78
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
79
|
+
if sibling_path # write to file in same directory
|
80
|
+
outfile = ::File.join outdir, %(#{doc.attributes['docname']}#{doc.outfilesuffix})
|
81
|
+
raise ::IOError, %(input file and output file cannot be the same: #{outfile}) if outfile == sibling_path
|
82
|
+
elsif write_to_target # write to explicit file or directory
|
83
|
+
working_dir = (options.key? :base_dir) ? (::File.expand_path options[:base_dir]) : ::Dir.pwd
|
84
|
+
# QUESTION should the jail be the working_dir or doc.base_dir???
|
85
|
+
jail = doc.safe >= SafeMode::SAFE ? working_dir : nil
|
86
|
+
if to_dir
|
87
|
+
outdir = doc.normalize_system_path(to_dir, working_dir, jail, target_name: 'to_dir', recover: false)
|
88
|
+
if to_file
|
89
|
+
outfile = doc.normalize_system_path(to_file, outdir, nil, target_name: 'to_dir', recover: false)
|
90
|
+
# reestablish outdir as the final target directory (in the case to_file had directory segments)
|
91
|
+
outdir = ::File.dirname outfile
|
92
|
+
else
|
93
|
+
outfile = ::File.join outdir, %(#{doc.attributes['docname']}#{doc.outfilesuffix})
|
94
|
+
end
|
95
|
+
elsif to_file
|
96
|
+
outfile = doc.normalize_system_path(to_file, working_dir, jail, target_name: 'to_dir', recover: false)
|
97
|
+
# establish outdir as the final target directory (in the case to_file had directory segments)
|
92
98
|
outdir = ::File.dirname outfile
|
93
|
-
else
|
94
|
-
outfile = ::File.join outdir, %(#{doc.attributes['docname']}#{doc.outfilesuffix})
|
95
99
|
end
|
96
|
-
elsif to_file
|
97
|
-
outfile = doc.normalize_system_path(to_file, working_dir, jail, target_name: 'to_dir', recover: false)
|
98
|
-
# establish outdir as the final target directory (in the case to_file had directory segments)
|
99
|
-
outdir = ::File.dirname outfile
|
100
|
-
end
|
101
100
|
|
102
|
-
|
103
|
-
|
101
|
+
if ::File === input && outfile == (::File.absolute_path input.path)
|
102
|
+
raise ::IOError, %(input file and output file cannot be the same: #{outfile})
|
103
|
+
end
|
104
|
+
|
105
|
+
if mkdirs
|
106
|
+
Helpers.mkdir_p outdir
|
107
|
+
else
|
108
|
+
# NOTE we intentionally refer to the directory as it was passed to the API
|
109
|
+
raise ::IOError, %(target directory does not exist: #{to_dir} (hint: set :mkdirs option)) unless ::File.directory? outdir
|
110
|
+
end
|
111
|
+
else # write to stream
|
112
|
+
outfile = to_file
|
113
|
+
outdir = nil
|
104
114
|
end
|
105
115
|
|
106
|
-
if
|
107
|
-
|
116
|
+
if outfile && !stream_output
|
117
|
+
output = doc.convert 'outfile' => outfile, 'outdir' => outdir
|
108
118
|
else
|
109
|
-
|
110
|
-
raise ::IOError, %(target directory does not exist: #{to_dir} (hint: set :mkdirs option)) unless ::File.directory? outdir
|
119
|
+
output = doc.convert
|
111
120
|
end
|
112
|
-
else # write to stream
|
113
|
-
outfile = to_file
|
114
|
-
outdir = nil
|
115
|
-
end
|
116
|
-
|
117
|
-
if outfile && !stream_output
|
118
|
-
output = doc.convert 'outfile' => outfile, 'outdir' => outdir
|
119
|
-
else
|
120
|
-
output = doc.convert
|
121
|
-
end
|
122
121
|
|
123
|
-
|
124
|
-
|
122
|
+
if outfile
|
123
|
+
doc.write output, outfile
|
125
124
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
end
|
137
|
-
copy_syntax_hl_stylesheet = (syntax_hl = doc.syntax_highlighter) && (syntax_hl.write_stylesheet? doc)
|
138
|
-
if copy_asciidoctor_stylesheet || copy_user_stylesheet || copy_syntax_hl_stylesheet
|
139
|
-
stylesoutdir = doc.normalize_system_path(stylesdir, outdir, doc.safe >= SafeMode::SAFE ? outdir : nil)
|
140
|
-
if mkdirs
|
141
|
-
Helpers.mkdir_p stylesoutdir
|
142
|
-
else
|
143
|
-
raise ::IOError, %(target stylesheet directory does not exist: #{stylesoutdir} (hint: set :mkdirs option)) unless ::File.directory? stylesoutdir
|
125
|
+
# NOTE document cannot control this behavior if safe >= SafeMode::SERVER
|
126
|
+
# NOTE skip if stylesdir is a URI
|
127
|
+
if !stream_output && doc.safe < SafeMode::SECURE && (doc.attr? 'linkcss') && (doc.attr? 'copycss') &&
|
128
|
+
(doc.basebackend? 'html') && !((stylesdir = (doc.attr 'stylesdir')) && (Helpers.uriish? stylesdir))
|
129
|
+
if (stylesheet = doc.attr 'stylesheet')
|
130
|
+
if DEFAULT_STYLESHEET_KEYS.include? stylesheet
|
131
|
+
copy_asciidoctor_stylesheet = true
|
132
|
+
elsif !(Helpers.uriish? stylesheet)
|
133
|
+
copy_user_stylesheet = true
|
134
|
+
end
|
144
135
|
end
|
145
|
-
|
146
|
-
if copy_asciidoctor_stylesheet
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
if (stylesheet_src = doc.attr 'copycss').empty?
|
151
|
-
stylesheet_src = doc.normalize_system_path stylesheet
|
136
|
+
copy_syntax_hl_stylesheet = (syntax_hl = doc.syntax_highlighter) && (syntax_hl.write_stylesheet? doc)
|
137
|
+
if copy_asciidoctor_stylesheet || copy_user_stylesheet || copy_syntax_hl_stylesheet
|
138
|
+
stylesoutdir = doc.normalize_system_path(stylesdir, outdir, doc.safe >= SafeMode::SAFE ? outdir : nil)
|
139
|
+
if mkdirs
|
140
|
+
Helpers.mkdir_p stylesoutdir
|
152
141
|
else
|
153
|
-
|
154
|
-
stylesheet_src = doc.normalize_system_path stylesheet_src
|
142
|
+
raise ::IOError, %(target stylesheet directory does not exist: #{stylesoutdir} (hint: set :mkdirs option)) unless ::File.directory? stylesoutdir
|
155
143
|
end
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
144
|
+
|
145
|
+
if copy_asciidoctor_stylesheet
|
146
|
+
Stylesheets.instance.write_primary_stylesheet stylesoutdir
|
147
|
+
# FIXME should Stylesheets also handle the user stylesheet?
|
148
|
+
elsif copy_user_stylesheet
|
149
|
+
if (stylesheet_src = doc.attr 'copycss') == '' || stylesheet_src == true
|
150
|
+
stylesheet_src = doc.normalize_system_path stylesheet
|
151
|
+
else
|
152
|
+
# NOTE in this case, copycss is a source location (but cannot be a URI)
|
153
|
+
stylesheet_src = doc.normalize_system_path stylesheet_src.to_s
|
154
|
+
end
|
155
|
+
stylesheet_dest = doc.normalize_system_path stylesheet, stylesoutdir, (doc.safe >= SafeMode::SAFE ? outdir : nil)
|
156
|
+
# NOTE don't warn if src can't be read and dest already exists (see #2323)
|
157
|
+
if stylesheet_src != stylesheet_dest && (stylesheet_data = doc.read_asset stylesheet_src,
|
158
|
+
warn_on_failure: !(::File.file? stylesheet_dest), label: 'stylesheet')
|
159
|
+
if (stylesheet_outdir = ::File.dirname stylesheet_dest) != stylesoutdir && !(::File.directory? stylesheet_outdir)
|
160
|
+
if mkdirs
|
161
|
+
Helpers.mkdir_p stylesheet_outdir
|
162
|
+
else
|
163
|
+
raise ::IOError, %(target stylesheet directory does not exist: #{stylesheet_outdir} (hint: set :mkdirs option))
|
164
|
+
end
|
165
|
+
end
|
166
|
+
::File.write stylesheet_dest, stylesheet_data, mode: FILE_WRITE_MODE
|
167
|
+
end
|
161
168
|
end
|
169
|
+
syntax_hl.write_stylesheet doc, stylesoutdir if copy_syntax_hl_stylesheet
|
162
170
|
end
|
163
|
-
syntax_hl.write_stylesheet doc, stylesoutdir if copy_syntax_hl_stylesheet
|
164
171
|
end
|
172
|
+
doc
|
173
|
+
else
|
174
|
+
output
|
165
175
|
end
|
166
|
-
doc
|
167
|
-
else
|
168
|
-
output
|
169
176
|
end
|
170
|
-
end
|
171
177
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
178
|
+
# Public: Parse the contents of the AsciiDoc source file into an
|
179
|
+
# Asciidoctor::Document and convert it to the specified backend format.
|
180
|
+
#
|
181
|
+
# input - the String AsciiDoc source filename
|
182
|
+
# options - a String, Array or Hash of options to control processing (default: {})
|
183
|
+
# String and Array values are converted into a Hash.
|
184
|
+
# See Asciidoctor::Document#initialize for details about options.
|
185
|
+
#
|
186
|
+
# Returns the Document object if the converted String is written to a
|
187
|
+
# file, otherwise the converted String
|
188
|
+
def convert_file filename, options = {}
|
189
|
+
::File.open(filename, FILE_READ_MODE) {|file| convert file, options }
|
190
|
+
end
|
185
191
|
|
186
|
-
|
187
|
-
|
188
|
-
module_function :render
|
192
|
+
# Deprecated: Use {Asciidoctor.convert} instead.
|
193
|
+
alias render convert
|
189
194
|
|
190
|
-
|
191
|
-
|
192
|
-
|
195
|
+
# Deprecated: Use {Asciidoctor.convert_file} instead.
|
196
|
+
alias render_file convert_file
|
197
|
+
end
|
193
198
|
end
|
@@ -85,23 +85,24 @@ module Converter
|
|
85
85
|
# Public: Derive backend traits (basebackend, filetype, outfilesuffix, htmlsyntax) from the given backend.
|
86
86
|
#
|
87
87
|
# backend - the String backend from which to derive the traits
|
88
|
+
# basebackend - the String basebackend to use in favor of deriving one from the backend (optional, default: nil)
|
88
89
|
#
|
89
90
|
# Returns the backend traits for the given backend as a [Hash].
|
90
|
-
def self.derive_backend_traits backend
|
91
|
+
def self.derive_backend_traits backend, basebackend = nil
|
91
92
|
return {} unless backend
|
92
|
-
if (
|
93
|
-
|
93
|
+
if (outfilesuffix = DEFAULT_EXTENSIONS[(basebackend ||= backend.sub TrailingDigitsRx, '')])
|
94
|
+
filetype = outfilesuffix.slice 1, outfilesuffix.length
|
94
95
|
else
|
95
|
-
|
96
|
+
outfilesuffix = %(.#{filetype = basebackend})
|
96
97
|
end
|
97
|
-
|
98
|
-
{ basebackend:
|
99
|
-
{ basebackend:
|
98
|
+
filetype == 'html' ?
|
99
|
+
{ basebackend: basebackend, filetype: filetype, htmlsyntax: 'html', outfilesuffix: outfilesuffix } :
|
100
|
+
{ basebackend: basebackend, filetype: filetype, outfilesuffix: outfilesuffix }
|
100
101
|
end
|
101
102
|
|
102
103
|
module BackendTraits
|
103
104
|
def basebackend value = nil
|
104
|
-
value ? (backend_traits[:basebackend] = value) : backend_traits[:basebackend]
|
105
|
+
value ? ((backend_traits value)[:basebackend] = value) : backend_traits[:basebackend]
|
105
106
|
end
|
106
107
|
|
107
108
|
def filetype value = nil
|
@@ -128,15 +129,15 @@ module Converter
|
|
128
129
|
@backend_traits = value || {}
|
129
130
|
end
|
130
131
|
|
131
|
-
def backend_traits
|
132
|
-
@backend_traits ||= Converter.derive_backend_traits @backend
|
132
|
+
def backend_traits basebackend = nil
|
133
|
+
@backend_traits ||= Converter.derive_backend_traits @backend, basebackend
|
133
134
|
end
|
134
135
|
|
135
136
|
alias backend_info backend_traits
|
136
137
|
|
137
138
|
# Deprecated: Use {Converter.derive_backend_traits} instead.
|
138
|
-
def self.derive_backend_traits backend
|
139
|
-
Converter.derive_backend_traits backend
|
139
|
+
def self.derive_backend_traits backend, basebackend = nil
|
140
|
+
Converter.derive_backend_traits backend, basebackend
|
140
141
|
end
|
141
142
|
end
|
142
143
|
|