asciidoctor 1.5.8 → 2.0.0.rc.1
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 +162 -17
- data/LICENSE +1 -1
- data/README-de.adoc +12 -13
- data/README-fr.adoc +11 -12
- data/README-jp.adoc +11 -12
- data/README-zh_CN.adoc +12 -13
- data/README.adoc +6 -7
- data/asciidoctor.gemspec +19 -24
- data/bin/asciidoctor +5 -4
- data/data/reference/syntax.adoc +283 -0
- data/data/stylesheets/asciidoctor-default.css +56 -52
- data/data/stylesheets/coderay-asciidoctor.css +7 -9
- data/lib/asciidoctor.rb +171 -232
- data/lib/asciidoctor/abstract_block.rb +96 -105
- data/lib/asciidoctor/abstract_node.rb +118 -139
- data/lib/asciidoctor/attribute_list.rb +10 -14
- data/lib/asciidoctor/block.rb +20 -19
- data/lib/asciidoctor/callouts.rb +4 -2
- data/lib/asciidoctor/cli.rb +3 -2
- data/lib/asciidoctor/cli/invoker.rb +14 -21
- data/lib/asciidoctor/cli/options.rb +64 -54
- data/lib/asciidoctor/converter.rb +357 -185
- data/lib/asciidoctor/converter/composite.rb +40 -48
- data/lib/asciidoctor/converter/docbook5.rb +604 -640
- data/lib/asciidoctor/converter/html5.rb +949 -963
- data/lib/asciidoctor/converter/manpage.rb +569 -548
- data/lib/asciidoctor/converter/template.rb +231 -272
- data/lib/asciidoctor/core_ext.rb +5 -18
- data/lib/asciidoctor/core_ext/float/truncate.rb +19 -0
- data/lib/asciidoctor/core_ext/match_data/names.rb +7 -0
- data/lib/asciidoctor/core_ext/nil_or_empty.rb +1 -0
- data/lib/asciidoctor/core_ext/regexp/is_match.rb +4 -2
- data/lib/asciidoctor/document.rb +399 -377
- data/lib/asciidoctor/extensions.rb +72 -140
- data/lib/asciidoctor/helpers.rb +122 -83
- data/lib/asciidoctor/inline.rb +5 -1
- data/lib/asciidoctor/list.rb +13 -11
- data/lib/asciidoctor/logging.rb +17 -16
- data/lib/asciidoctor/parser.rb +390 -423
- data/lib/asciidoctor/path_resolver.rb +10 -5
- data/lib/asciidoctor/reader.rb +286 -263
- data/lib/asciidoctor/rouge_ext.rb +39 -0
- data/lib/asciidoctor/section.rb +9 -8
- data/lib/asciidoctor/stylesheets.rb +19 -37
- data/lib/asciidoctor/substitutors.rb +364 -509
- data/lib/asciidoctor/syntax_highlighter.rb +238 -0
- data/lib/asciidoctor/syntax_highlighter/coderay.rb +87 -0
- data/lib/asciidoctor/syntax_highlighter/highlightjs.rb +26 -0
- data/lib/asciidoctor/syntax_highlighter/html_pipeline.rb +10 -0
- data/lib/asciidoctor/syntax_highlighter/prettify.rb +27 -0
- data/lib/asciidoctor/syntax_highlighter/pygments.rb +149 -0
- data/lib/asciidoctor/syntax_highlighter/rouge.rb +129 -0
- data/lib/asciidoctor/table.rb +73 -66
- data/lib/asciidoctor/timings.rb +4 -2
- data/lib/asciidoctor/version.rb +2 -1
- data/lib/asciidoctor/writer.rb +30 -0
- data/man/asciidoctor.1 +19 -15
- data/man/asciidoctor.adoc +14 -12
- metadata +69 -216
- data/CONTRIBUTING.adoc +0 -185
- data/Gemfile +0 -60
- data/Rakefile +0 -129
- data/bin/asciidoctor-safe +0 -15
- data/features/open_block.feature +0 -92
- data/features/pass_block.feature +0 -66
- data/features/step_definitions.rb +0 -49
- data/features/text_formatting.feature +0 -57
- data/features/xref.feature +0 -1039
- data/lib/asciidoctor/converter/base.rb +0 -59
- data/lib/asciidoctor/converter/docbook45.rb +0 -93
- data/lib/asciidoctor/converter/factory.rb +0 -226
- data/lib/asciidoctor/core_ext/1.8.7/base64/strict_encode64.rb +0 -6
- data/lib/asciidoctor/core_ext/1.8.7/concurrent/hash.rb +0 -5
- data/lib/asciidoctor/core_ext/1.8.7/hash/key.rb +0 -4
- data/lib/asciidoctor/core_ext/1.8.7/io/binread.rb +0 -6
- data/lib/asciidoctor/core_ext/1.8.7/io/write.rb +0 -5
- data/lib/asciidoctor/core_ext/1.8.7/string/chr.rb +0 -6
- data/lib/asciidoctor/core_ext/1.8.7/string/limit_bytesize.rb +0 -29
- data/lib/asciidoctor/core_ext/1.8.7/symbol/empty.rb +0 -6
- data/lib/asciidoctor/core_ext/1.8.7/symbol/length.rb +0 -6
- data/lib/asciidoctor/core_ext/string/limit_bytesize.rb +0 -10
- data/test/api_test.rb +0 -1240
- data/test/attribute_list_test.rb +0 -242
- data/test/attributes_test.rb +0 -1623
- data/test/blocks_test.rb +0 -3870
- data/test/converter_test.rb +0 -470
- data/test/document_test.rb +0 -1853
- data/test/extensions_test.rb +0 -1560
- data/test/fixtures/asciidoc_index.txt +0 -521
- data/test/fixtures/basic-docinfo-footer.html +0 -6
- data/test/fixtures/basic-docinfo-footer.xml +0 -8
- data/test/fixtures/basic-docinfo.html +0 -1
- data/test/fixtures/basic-docinfo.xml +0 -4
- data/test/fixtures/basic.asciidoc +0 -5
- data/test/fixtures/chapter-a.adoc +0 -3
- data/test/fixtures/child-include.adoc +0 -5
- data/test/fixtures/circle.svg +0 -9
- data/test/fixtures/custom-backends/erb/html5/block_paragraph.html.erb +0 -6
- data/test/fixtures/custom-backends/haml/docbook45/block_paragraph.xml.haml +0 -6
- data/test/fixtures/custom-backends/haml/html5-tweaks/block_paragraph.html.haml +0 -1
- data/test/fixtures/custom-backends/haml/html5/block_paragraph.html.haml +0 -3
- data/test/fixtures/custom-backends/haml/html5/block_sidebar.html.haml +0 -5
- data/test/fixtures/custom-backends/slim/docbook45/block_paragraph.xml.slim +0 -6
- data/test/fixtures/custom-backends/slim/html5/block_paragraph.html.slim +0 -3
- data/test/fixtures/custom-backends/slim/html5/block_sidebar.html.slim +0 -5
- data/test/fixtures/custom-docinfodir/basic-docinfo.html +0 -1
- data/test/fixtures/custom-docinfodir/docinfo.html +0 -1
- data/test/fixtures/docinfo-footer.html +0 -1
- data/test/fixtures/docinfo-footer.xml +0 -9
- data/test/fixtures/docinfo.html +0 -1
- data/test/fixtures/docinfo.xml +0 -3
- data/test/fixtures/doctime-localtime.adoc +0 -2
- data/test/fixtures/dot.gif +0 -0
- data/test/fixtures/encoding.asciidoc +0 -13
- data/test/fixtures/file-with-missing-include.adoc +0 -1
- data/test/fixtures/grandchild-include.adoc +0 -3
- data/test/fixtures/hello-asciidoctor.pdf +0 -69
- data/test/fixtures/include-file.asciidoc +0 -24
- data/test/fixtures/include-file.jsx +0 -8
- data/test/fixtures/include-file.ml +0 -3
- data/test/fixtures/include-file.xml +0 -5
- data/test/fixtures/lists.adoc +0 -96
- data/test/fixtures/master.adoc +0 -5
- data/test/fixtures/mismatched-end-tag.adoc +0 -7
- data/test/fixtures/other-chapters.adoc +0 -11
- data/test/fixtures/outer-include.adoc +0 -5
- data/test/fixtures/parent-include-restricted.adoc +0 -5
- data/test/fixtures/parent-include.adoc +0 -5
- data/test/fixtures/sample.asciidoc +0 -30
- data/test/fixtures/section-a.adoc +0 -4
- data/test/fixtures/stylesheets/custom.css +0 -3
- data/test/fixtures/subdir/index.adoc +0 -3
- data/test/fixtures/subdir/inner-include.adoc +0 -3
- data/test/fixtures/subdir/middle-include.adoc +0 -5
- data/test/fixtures/subs-docinfo.html +0 -2
- data/test/fixtures/subs.adoc +0 -6
- data/test/fixtures/tagged-class-enclosed.rb +0 -25
- data/test/fixtures/tagged-class.rb +0 -23
- data/test/fixtures/tip.gif +0 -0
- data/test/fixtures/unclosed-tag.adoc +0 -3
- data/test/fixtures/unexpected-end-tag.adoc +0 -4
- data/test/invoker_test.rb +0 -745
- data/test/links_test.rb +0 -855
- data/test/lists_test.rb +0 -5151
- data/test/logger_test.rb +0 -211
- data/test/manpage_test.rb +0 -660
- data/test/options_test.rb +0 -262
- data/test/paragraphs_test.rb +0 -562
- data/test/parser_test.rb +0 -742
- data/test/paths_test.rb +0 -395
- data/test/preamble_test.rb +0 -173
- data/test/reader_test.rb +0 -2161
- data/test/sections_test.rb +0 -3575
- data/test/substitutions_test.rb +0 -2066
- data/test/tables_test.rb +0 -2036
- data/test/test_helper.rb +0 -447
- data/test/text_test.rb +0 -309
@@ -1,59 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
module Asciidoctor
|
3
|
-
module Converter; end # required for Opal
|
4
|
-
|
5
|
-
# An abstract base class for defining converters that can be used to convert
|
6
|
-
# {AbstractNode} objects in a parsed AsciiDoc document to a backend format
|
7
|
-
# such as HTML or DocBook.
|
8
|
-
#
|
9
|
-
# Concrete subclasses must implement the {#convert} method and, optionally,
|
10
|
-
# the {#convert_with_options} method.
|
11
|
-
class Converter::Base
|
12
|
-
include Logging
|
13
|
-
include Converter
|
14
|
-
end
|
15
|
-
|
16
|
-
# An abstract base class for built-in {Converter} classes.
|
17
|
-
# Does not inherit from Converter.
|
18
|
-
class Converter::BuiltIn
|
19
|
-
include Logging
|
20
|
-
|
21
|
-
def initialize backend, opts = {}
|
22
|
-
end
|
23
|
-
|
24
|
-
# Public: Converts the specified {AbstractNode} using the specified
|
25
|
-
# transform and optionally additional options (when not empty).
|
26
|
-
#
|
27
|
-
# CAUTION: Method that handles the specified transform *may not* accept the
|
28
|
-
# second argument with additional options, in which case an {ArgumentError}
|
29
|
-
# is raised if the given +opts+ Hash is not nil. The additional options are
|
30
|
-
# used in template-based backends to access convert helper methods such as
|
31
|
-
# outline.
|
32
|
-
#
|
33
|
-
# See {Converter#convert} for more details.
|
34
|
-
#
|
35
|
-
# Returns the [String] result of conversion
|
36
|
-
def convert node, transform = nil, opts = {}
|
37
|
-
transform ||= node.node_name
|
38
|
-
opts.empty? ? (send transform, node) : (send transform, node, opts)
|
39
|
-
end
|
40
|
-
|
41
|
-
alias handles? respond_to?
|
42
|
-
|
43
|
-
# Public: Returns the converted content of the {AbstractNode}.
|
44
|
-
#
|
45
|
-
# Returns the converted [String] content of the {AbstractNode}.
|
46
|
-
def content node
|
47
|
-
node.content
|
48
|
-
end
|
49
|
-
|
50
|
-
alias pass content
|
51
|
-
|
52
|
-
# Public: Skips conversion of the {AbstractNode}.
|
53
|
-
#
|
54
|
-
# Returns [NilClass]
|
55
|
-
def skip node
|
56
|
-
nil
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require 'asciidoctor/converter/docbook5'
|
3
|
-
|
4
|
-
module Asciidoctor
|
5
|
-
# A built-in {Converter} implementation that generates DocBook 4.5 output
|
6
|
-
# consistent with the docbook45 backend from AsciiDoc Python.
|
7
|
-
class Converter::DocBook45Converter < Converter::DocBook5Converter
|
8
|
-
def admonition node
|
9
|
-
# address a bug in the DocBook 4.5 DTD
|
10
|
-
if node.parent.context == :example
|
11
|
-
%(<para>
|
12
|
-
#{super}
|
13
|
-
</para>)
|
14
|
-
else
|
15
|
-
super
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def olist node
|
20
|
-
result = []
|
21
|
-
num_attribute = node.style ? %( numeration="#{node.style}") : ''
|
22
|
-
start_attribute = (node.attr? 'start') ? %( override="#{node.attr 'start'}") : ''
|
23
|
-
result << %(<orderedlist#{common_attributes node.id, node.role, node.reftext}#{num_attribute}>)
|
24
|
-
result << %(<title>#{node.title}</title>) if node.title?
|
25
|
-
node.items.each_with_index do |item, idx|
|
26
|
-
result << (idx == 0 ? %(<listitem#{start_attribute}>) : '<listitem>')
|
27
|
-
result << %(<simpara>#{item.text}</simpara>)
|
28
|
-
result << item.content if item.blocks?
|
29
|
-
result << '</listitem>'
|
30
|
-
end
|
31
|
-
result << %(</orderedlist>)
|
32
|
-
result.join LF
|
33
|
-
end
|
34
|
-
|
35
|
-
def inline_anchor node
|
36
|
-
case node.type
|
37
|
-
when :ref
|
38
|
-
%(<anchor#{common_attributes node.target, nil, node.text}/>)
|
39
|
-
when :xref
|
40
|
-
if (path = node.attributes['path'])
|
41
|
-
# QUESTION should we use refid as fallback text instead? (like the html5 backend?)
|
42
|
-
%(<ulink url="#{node.target}">#{node.text || path}</ulink>)
|
43
|
-
else
|
44
|
-
linkend = node.attributes['fragment'] || node.target
|
45
|
-
(text = node.text) ? %(<link linkend="#{linkend}">#{text}</link>) : %(<xref linkend="#{linkend}"/>)
|
46
|
-
end
|
47
|
-
when :link
|
48
|
-
%(<ulink url="#{node.target}">#{node.text}</ulink>)
|
49
|
-
when :bibref
|
50
|
-
target = node.target
|
51
|
-
%(<anchor#{common_attributes target, nil, "[#{target}]"}/>[#{target}])
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def author_tag author
|
56
|
-
result = []
|
57
|
-
result << '<author>'
|
58
|
-
result << %(<firstname>#{author.firstname}</firstname>) if author.firstname
|
59
|
-
result << %(<othername>#{author.middlename}</othername>) if author.middlename
|
60
|
-
result << %(<surname>#{author.lastname}</surname>) if author.lastname
|
61
|
-
result << %(<email>#{author.email}</email>) if author.email
|
62
|
-
result << '</author>'
|
63
|
-
result.join LF
|
64
|
-
end
|
65
|
-
|
66
|
-
def common_attributes id, role = nil, reftext = nil
|
67
|
-
res = id ? %( id="#{id}") : ''
|
68
|
-
res = %(#{res} role="#{role}") if role
|
69
|
-
res = %(#{res} xreflabel="#{reftext}") if reftext
|
70
|
-
res
|
71
|
-
end
|
72
|
-
|
73
|
-
def doctype_declaration root_tag_name
|
74
|
-
%(<!DOCTYPE #{root_tag_name} PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">)
|
75
|
-
end
|
76
|
-
|
77
|
-
def document_info_tag doc, info_tag_prefix
|
78
|
-
super doc, info_tag_prefix, true
|
79
|
-
end
|
80
|
-
|
81
|
-
def lang_attribute_name
|
82
|
-
'lang'
|
83
|
-
end
|
84
|
-
|
85
|
-
def document_ns_attributes doc
|
86
|
-
if (ns = doc.attr 'xmlns')
|
87
|
-
ns.empty? ? ' xmlns="http://docbook.org/ns/docbook"' : %( xmlns="#{ns}")
|
88
|
-
else
|
89
|
-
''
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
@@ -1,226 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
module Asciidoctor
|
3
|
-
module Converter
|
4
|
-
# A factory for instantiating converters that are used to convert a
|
5
|
-
# {Document} (i.e., a parsed AsciiDoc tree structure) or {AbstractNode} to
|
6
|
-
# a backend format such as HTML or DocBook. {Factory Converter::Factory} is
|
7
|
-
# the primary entry point for creating, registering and accessing
|
8
|
-
# converters.
|
9
|
-
#
|
10
|
-
# {Converter} objects are instantiated by passing a String backend name
|
11
|
-
# and, optionally, an options Hash to the {Factory#create} method. The
|
12
|
-
# backend can be thought of as an intent to convert a document to a
|
13
|
-
# specified format. For example:
|
14
|
-
#
|
15
|
-
# converter = Asciidoctor::Converter::Factory.create 'html5', :htmlsyntax => 'xml'
|
16
|
-
#
|
17
|
-
# Converter objects are thread safe. They only survive the lifetime of a single conversion.
|
18
|
-
#
|
19
|
-
# A singleton instance of {Factory Converter::Factory} can be accessed
|
20
|
-
# using the {Factory.default} method. This instance maintains the global
|
21
|
-
# registry of statically registered converters. The registery includes
|
22
|
-
# built-in converters for {Html5Converter HTML 5}, {DocBook5Converter
|
23
|
-
# DocBook 5} and {DocBook45Converter DocBook 4.5}, as well as any custom
|
24
|
-
# converters that have been discovered or explicitly registered.
|
25
|
-
#
|
26
|
-
# If the {https://rubygems.org/gems/concurrent-ruby concurrent-ruby} gem is
|
27
|
-
# installed, access to the default factory is guaranteed to be thread safe.
|
28
|
-
# Otherwise, a warning is issued to the user.
|
29
|
-
class Factory
|
30
|
-
@__default__ = nil
|
31
|
-
class << self
|
32
|
-
|
33
|
-
# Public: Retrieves a singleton instance of {Factory Converter::Factory}.
|
34
|
-
#
|
35
|
-
# If the concurrent-ruby gem is installed, the registry of converters is
|
36
|
-
# initialized as a Concurrent::Hash. Otherwise, a warning is issued and
|
37
|
-
# the registry of converters is initialized using a normal Hash.
|
38
|
-
#
|
39
|
-
# initialize_singleton - A Boolean to indicate whether the singleton should
|
40
|
-
# be initialized if it has not already been created.
|
41
|
-
# If false, and a singleton has not been previously
|
42
|
-
# initialized, a fresh instance is returned.
|
43
|
-
#
|
44
|
-
# Returns the default [Factory] singleton instance
|
45
|
-
def default initialize_singleton = true
|
46
|
-
return @__default__ || new unless initialize_singleton
|
47
|
-
# FIXME this assignment itself may not be thread safe; may need to use a helper here
|
48
|
-
@__default__ ||= begin
|
49
|
-
unless defined? ::Concurrent::Hash
|
50
|
-
# NOTE dynamic require is ignored by Opal
|
51
|
-
require ::RUBY_MIN_VERSION_1_9 ? 'concurrent/hash' : 'asciidoctor/core_ext/1.8.7/concurrent/hash'
|
52
|
-
end
|
53
|
-
new ::Concurrent::Hash.new
|
54
|
-
rescue ::LoadError
|
55
|
-
include Logging unless include? Logging
|
56
|
-
logger.warn 'gem \'concurrent-ruby\' is not installed. This gem is recommended when registering custom converters.'
|
57
|
-
new
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
# Public: Register a custom converter in the global converter factory to
|
62
|
-
# handle conversion to the specified backends. If the backend value is an
|
63
|
-
# asterisk, the converter is used to handle any backend that does not have
|
64
|
-
# an explicit converter.
|
65
|
-
#
|
66
|
-
# converter - The Converter class to register
|
67
|
-
# backends - A String Array of backend names that this converter should
|
68
|
-
# be registered to handle (optional, default: ['*'])
|
69
|
-
#
|
70
|
-
# Returns nothing
|
71
|
-
def register converter, backends = ['*']
|
72
|
-
default.register converter, backends
|
73
|
-
end
|
74
|
-
|
75
|
-
# Public: Lookup the custom converter for the specified backend in the
|
76
|
-
# global factory.
|
77
|
-
#
|
78
|
-
# This method does not resolve the built-in converters.
|
79
|
-
#
|
80
|
-
# backend - The String backend name
|
81
|
-
#
|
82
|
-
# Returns the [Converter] class registered to convert the specified backend
|
83
|
-
# or nil if no match is found
|
84
|
-
def resolve backend
|
85
|
-
default.resolve backend
|
86
|
-
end
|
87
|
-
|
88
|
-
# Public: Lookup the converter for the specified backend in the global
|
89
|
-
# factory and instantiate it, forwarding the Hash of options to the
|
90
|
-
# constructor of the converter class.
|
91
|
-
#
|
92
|
-
# If the custom converter is not found, an attempt will be made to find
|
93
|
-
# and instantiate a built-in converter.
|
94
|
-
#
|
95
|
-
# backend - The String backend name
|
96
|
-
# opts - A Hash of options to pass to the converter
|
97
|
-
#
|
98
|
-
# Returns an instance of [Converter] for converting the specified backend or
|
99
|
-
# nil if no match is found.
|
100
|
-
def create backend, opts = {}
|
101
|
-
default.create backend, opts
|
102
|
-
end
|
103
|
-
|
104
|
-
# Public: Retrieve the global Hash of custom Converter classes keyed by backend.
|
105
|
-
#
|
106
|
-
# Returns the the global [Hash] of custom Converter classes
|
107
|
-
def converters
|
108
|
-
default.converters
|
109
|
-
end
|
110
|
-
|
111
|
-
# Public: Unregister all Converter classes in the global factory.
|
112
|
-
#
|
113
|
-
# Returns nothing
|
114
|
-
def unregister_all
|
115
|
-
default.unregister_all
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
# Public: Get the Hash of Converter classes keyed by backend name
|
120
|
-
attr_reader :converters
|
121
|
-
|
122
|
-
def initialize converters = nil
|
123
|
-
@converters = converters || {}
|
124
|
-
@star_converter = nil
|
125
|
-
end
|
126
|
-
|
127
|
-
# Public: Register a custom converter with this factory to handle conversion
|
128
|
-
# to the specified backends. If the backend value is an asterisk, the
|
129
|
-
# converter is used to handle any backend that does not have an explicit
|
130
|
-
# converter.
|
131
|
-
#
|
132
|
-
# converter - The Converter class to register
|
133
|
-
# backends - A String Array of backend names that this converter should
|
134
|
-
# be registered to handle (optional, default: ['*'])
|
135
|
-
#
|
136
|
-
# Returns nothing
|
137
|
-
def register converter, backends = ['*']
|
138
|
-
backends.each do |backend|
|
139
|
-
@converters[backend] = converter
|
140
|
-
if backend == '*'
|
141
|
-
@star_converter = converter
|
142
|
-
end
|
143
|
-
end
|
144
|
-
nil
|
145
|
-
end
|
146
|
-
|
147
|
-
# Public: Lookup the custom converter registered with this factory to handle
|
148
|
-
# the specified backend.
|
149
|
-
#
|
150
|
-
# backend - The String backend name
|
151
|
-
#
|
152
|
-
# Returns the [Converter] class registered to convert the specified backend
|
153
|
-
# or nil if no match is found
|
154
|
-
def resolve backend
|
155
|
-
@converters && (@converters[backend] || @star_converter)
|
156
|
-
end
|
157
|
-
|
158
|
-
# Public: Unregister all Converter classes that are registered with this
|
159
|
-
# factory.
|
160
|
-
#
|
161
|
-
# Returns nothing
|
162
|
-
def unregister_all
|
163
|
-
@converters.clear
|
164
|
-
@star_converter = nil
|
165
|
-
end
|
166
|
-
|
167
|
-
# Public: Create a new Converter object that can be used to convert the
|
168
|
-
# {AbstractNode} (typically a {Document}) to the specified String backend.
|
169
|
-
# This method accepts an optional Hash of options that are passed to the
|
170
|
-
# converter's constructor.
|
171
|
-
#
|
172
|
-
# If a custom Converter is found to convert the specified backend, it is
|
173
|
-
# instantiated (if necessary) and returned immediately. If a custom
|
174
|
-
# Converter is not found, an attempt is made to resolve a built-in
|
175
|
-
# converter. If the `:template_dirs` key is found in the Hash passed as the
|
176
|
-
# second argument, a {CompositeConverter} is created that delegates to a
|
177
|
-
# {TemplateConverter} and, if resolved, the built-in converter. If the
|
178
|
-
# `:template_dirs` key is not found, the built-in converter is returned
|
179
|
-
# or nil if no converter is resolved.
|
180
|
-
#
|
181
|
-
# backend - the String backend name
|
182
|
-
# opts - an optional Hash of options that get passed on to the converter's
|
183
|
-
# constructor. If the :template_dirs key is found in the options
|
184
|
-
# Hash, this method returns a {CompositeConverter} that delegates
|
185
|
-
# to a {TemplateConverter}. (optional, default: {})
|
186
|
-
#
|
187
|
-
# Returns the [Converter] object
|
188
|
-
def create backend, opts = {}
|
189
|
-
if (converter = resolve backend)
|
190
|
-
base_converter = ::Class === converter ? (converter.new backend, opts) : converter
|
191
|
-
return base_converter unless Converter::BackendInfo === base_converter && base_converter.supports_templates?
|
192
|
-
else
|
193
|
-
case backend
|
194
|
-
when 'html5'
|
195
|
-
# NOTE .to_s hides require from Opal
|
196
|
-
require 'asciidoctor/converter/html5'.to_s unless defined? ::Asciidoctor::Converter::Html5Converter
|
197
|
-
base_converter = Html5Converter.new backend, opts
|
198
|
-
when 'docbook5'
|
199
|
-
# NOTE .to_s hides require from Opal
|
200
|
-
require 'asciidoctor/converter/docbook5'.to_s unless defined? ::Asciidoctor::Converter::DocBook5Converter
|
201
|
-
base_converter = DocBook5Converter.new backend, opts
|
202
|
-
when 'docbook45'
|
203
|
-
# NOTE .to_s hides require from Opal
|
204
|
-
require 'asciidoctor/converter/docbook45'.to_s unless defined? ::Asciidoctor::Converter::DocBook45Converter
|
205
|
-
base_converter = DocBook45Converter.new backend, opts
|
206
|
-
when 'manpage'
|
207
|
-
# NOTE .to_s hides require from Opal
|
208
|
-
require 'asciidoctor/converter/manpage'.to_s unless defined? ::Asciidoctor::Converter::ManPageConverter
|
209
|
-
base_converter = ManPageConverter.new backend, opts
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
return base_converter unless opts.key? :template_dirs
|
214
|
-
|
215
|
-
# NOTE .to_s hides require from Opal
|
216
|
-
require 'asciidoctor/converter/template'.to_s unless defined? ::Asciidoctor::Converter::TemplateConverter
|
217
|
-
template_converter = TemplateConverter.new backend, opts[:template_dirs], opts
|
218
|
-
|
219
|
-
# NOTE .to_s hides require from Opal
|
220
|
-
require 'asciidoctor/converter/composite'.to_s unless defined? ::Asciidoctor::Converter::CompositeConverter
|
221
|
-
# QUESTION should we omit the composite converter if built_in_converter is nil?
|
222
|
-
CompositeConverter.new backend, template_converter, base_converter
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
if RUBY_ENGINE_JRUBY
|
2
|
-
class String
|
3
|
-
# Safely truncate the string to the specified number of bytes.
|
4
|
-
# If a multibyte char gets split, the dangling fragment is removed.
|
5
|
-
def limit_bytesize size
|
6
|
-
return self unless size < bytesize
|
7
|
-
result = (unpack %(a#{size}))[0]
|
8
|
-
begin
|
9
|
-
result.unpack 'U*'
|
10
|
-
rescue ::ArgumentError
|
11
|
-
result.chop!
|
12
|
-
retry
|
13
|
-
end
|
14
|
-
result
|
15
|
-
end unless method_defined? :limit_bytesize
|
16
|
-
end
|
17
|
-
else
|
18
|
-
class String
|
19
|
-
ValidTrailingCharRx = /.$/u
|
20
|
-
# Safely truncate the string to the specified number of bytes.
|
21
|
-
# If a multibyte char gets split, the dangling fragment is removed.
|
22
|
-
def limit_bytesize size
|
23
|
-
return self unless size < bytesize
|
24
|
-
result = (unpack %(a#{size}))[0]
|
25
|
-
result.chop! until result.empty? || (ValidTrailingCharRx.match? result)
|
26
|
-
result
|
27
|
-
end unless method_defined? :limit_bytesize
|
28
|
-
end
|
29
|
-
end
|