asciidoctor 2.0.17 → 2.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +77 -10
- data/README-de.adoc +0 -1
- data/README-fr.adoc +0 -1
- data/README-jp.adoc +0 -1
- data/README-zh_CN.adoc +0 -1
- data/README.adoc +10 -8
- data/asciidoctor.gemspec +3 -3
- data/data/locale/attributes-sw.adoc +23 -0
- data/data/stylesheets/asciidoctor-default.css +5 -8
- data/lib/asciidoctor/abstract_block.rb +1 -0
- data/lib/asciidoctor/block.rb +2 -2
- data/lib/asciidoctor/cli/invoker.rb +1 -1
- data/lib/asciidoctor/cli/options.rb +5 -1
- data/lib/asciidoctor/converter/docbook5.rb +19 -17
- data/lib/asciidoctor/converter/html5.rb +1 -1
- data/lib/asciidoctor/converter/manpage.rb +3 -3
- data/lib/asciidoctor/converter/template.rb +2 -1
- data/lib/asciidoctor/document.rb +1 -0
- data/lib/asciidoctor/extensions.rb +38 -5
- data/lib/asciidoctor/helpers.rb +8 -2
- data/lib/asciidoctor/parser.rb +43 -27
- data/lib/asciidoctor/path_resolver.rb +11 -2
- data/lib/asciidoctor/reader.rb +35 -34
- data/lib/asciidoctor/rx.rb +14 -16
- data/lib/asciidoctor/substitutors.rb +28 -42
- data/lib/asciidoctor/syntax_highlighter/highlightjs.rb +1 -1
- data/lib/asciidoctor/version.rb +1 -1
- data/man/asciidoctor.1 +5 -5
- data/man/asciidoctor.adoc +5 -4
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ec8c2a1b561249c43342cc6d9fa2b970bc097ee4814c2e3b8e602fe259912b7
|
4
|
+
data.tar.gz: 2a096894e6fa57eee3857b07ca793e41ec6943524197c6f4a410fb08ac920147
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a22a6420efa77f814a864e23b9be00875bd4454e7d0cec8ca835ca5bf0a4976b27b4ca7baeacc6e7f5dc41647a4aa41b0383c8f26fc201d4e59634cdc8ca99a
|
7
|
+
data.tar.gz: 996d37bc44cf38e6cbf9d1e2c1088ebb3ace5e590a2f3ebb75ba09609107983fee462ad08f5e2f00b64138f0baeac59b7cc349b788e57808743f544f8614628a
|
data/CHANGELOG.adoc
CHANGED
@@ -1,21 +1,89 @@
|
|
1
1
|
= Asciidoctor Changelog
|
2
|
-
:
|
3
|
-
:
|
4
|
-
:
|
2
|
+
:url-asciidoctor: https://asciidoctor.org
|
3
|
+
:url-asciidoc: https://docs.asciidoctor.org/asciidoc/latest/
|
4
|
+
:url-repo: https://github.com/asciidoctor/asciidoctor
|
5
5
|
:icons: font
|
6
6
|
:star: icon:star[role=red]
|
7
7
|
ifndef::icons[]
|
8
8
|
:star: ★
|
9
9
|
endif::[]
|
10
10
|
|
11
|
-
{
|
11
|
+
{url-asciidoctor}[Asciidoctor] is a _fast_, open source text processor and publishing toolchain for converting {url-asciidoc}[AsciiDoc] content into HTML 5, DocBook 5, and other formats.
|
12
12
|
|
13
13
|
This document provides a high-level view of the changes introduced in Asciidoctor by release.
|
14
|
-
For an even more detailed look at what has changed, refer to the {
|
14
|
+
For an even more detailed look at what has changed, refer to the {url-repo}/commits/[commit history] on GitHub.
|
15
15
|
|
16
16
|
This project utilizes semantic versioning.
|
17
17
|
|
18
18
|
// tag::compact[]
|
19
|
+
== 2.0.19 (2023-05-17) - @mojavelinux
|
20
|
+
|
21
|
+
Improvements::
|
22
|
+
|
23
|
+
* Return empty string instead of nil if raw or verbatim block has no lines
|
24
|
+
* Don't uppercase monospace span in section title in manpage output (#4402)
|
25
|
+
* Simplify processing of implicit link (i.e., autolink) by separating implicit and explicit match
|
26
|
+
* Generate partintro block consistently (#4450)
|
27
|
+
* Add Kiswahili translation for built-in labels (PR #4454) *@bkmgit*
|
28
|
+
|
29
|
+
Compliance::
|
30
|
+
|
31
|
+
* Fix call order so use of an include file with invalid encoding continues to raise error when using Ruby >= 3.2.0
|
32
|
+
* Fix test assertion for fallback Rouge stylesheet to be compatible with Rouge 4.1 (#4406) (*@tmzullinger*)
|
33
|
+
* Support `notitle` option on section as alternative to `untitled` to hide title (#4437)
|
34
|
+
* Add support for Haml 6 to template converter (#4429)
|
35
|
+
|
36
|
+
Bug Fixes::
|
37
|
+
|
38
|
+
* Process constrained inline passthrough inside monospace span (#4458)
|
39
|
+
* Catalog inline ref defined using anchor macro even when resolved reftext is empty
|
40
|
+
* Use while loop rather than recursion to locate next line to process; prevents stack limit error (#4368)
|
41
|
+
* Avoid matching numeric character references when searching for # in xref target (#4393)
|
42
|
+
* Use correct selector to collapse margin on first and last child of sidebar
|
43
|
+
* Don't allow target of include directive to start with a space (to distinguish it from a dlist item) or to end with a space
|
44
|
+
* Manify alt text of block image in manpage output (#4401)
|
45
|
+
* Adjust font size of term in horizontal dlist to match font size of term in regular dlist
|
46
|
+
* Implicitly attach nested list that starts with block attribute lines to dlist entry (#4268)
|
47
|
+
* Don't swallow square brackets when processing escaped URL macro
|
48
|
+
* Treat `uri:classloader:` as an absolute path prefix when running on JRuby (#3929)
|
49
|
+
* Apply reftext substitutions to value of `mantitle` attribute in DocBook output (#4448)
|
50
|
+
* Enclose `<reftext>` tag in `<article>` tag in DocBook output for man page (#4452)
|
51
|
+
* Correctly handle compat role on monospace and constrained passthrough when box attrlist or formatted text is escaped
|
52
|
+
|
53
|
+
Build / Infrastructure::
|
54
|
+
|
55
|
+
* Update latest CRuby in CI workflow to 3.2
|
56
|
+
* Update latest JRuby in CI workflow to 9.4.2.0
|
57
|
+
|
58
|
+
=== Details
|
59
|
+
|
60
|
+
{url-repo}/releases/tag/v2.0.19[git tag] | {url-repo}/compare/v2.0.18\...v2.0.19[source diff]
|
61
|
+
// end::compact[]
|
62
|
+
|
63
|
+
== 2.0.18 (2022-10-15) - @mojavelinux
|
64
|
+
|
65
|
+
Improvements::
|
66
|
+
|
67
|
+
* Propagate `:to_dir` option to document of AsciiDoc table cell (#4297)
|
68
|
+
* Force encoding of attribute data passed via CLI to UTF-8 if transcoding fails (#4351) (*@zkaip*)
|
69
|
+
* Add include role to link macro that replaces include directive when include is not enabled
|
70
|
+
|
71
|
+
Bug Fixes::
|
72
|
+
|
73
|
+
* Change internal `uriish?` helper to only detect a URI pattern at start of a string; avoids misleading messages (#4357)
|
74
|
+
* Prevent highlight.js warning when no language is set on source block; don't call `highlightBlock` if `data-lang` attribute is absent (#4263)
|
75
|
+
* Don't raise error if `Asciidoctor::Extensions.unregister` is called before groups are initialized (#4270)
|
76
|
+
* If path is included both partially and fully, store it with true value (included fully) in includes table of document catalog
|
77
|
+
* Reset registry if activate is called on it again (#4256)
|
78
|
+
* Format source location in exception message when extension code is malformed
|
79
|
+
* Fix lineno on reader when `skip-front-matter` attribute is set but end of front matter is not found
|
80
|
+
* Fix `Asciidoctor::Cli::Invoker` constructor when first argument is a hash
|
81
|
+
* Update default stylesheet to honor marker on unordered list when marker is defined on ancestor unordered list (#4361)
|
82
|
+
|
83
|
+
=== Details
|
84
|
+
|
85
|
+
{url-repo}/releases/tag/v2.0.18[git tag] | {url-repo}/compare/v2.0.17\...v2.0.18[source diff]
|
86
|
+
|
19
87
|
== 2.0.17 (2022-01-05) - @mojavelinux
|
20
88
|
|
21
89
|
Bug Fixes::
|
@@ -27,12 +95,12 @@ Bug Fixes::
|
|
27
95
|
* Change `AbstractBlock#sections?` to return false when called on block that isn't a Section or Document (PR #3591) *@mogztter*
|
28
96
|
* Hide built-in marker on HTML summary element in Safari when using default stylesheet (#4162)
|
29
97
|
* Hide outline around HTML summary when activated in Safari (#4162)
|
30
|
-
* Include primary video in value of `playlist` attribute when
|
31
|
-
* Honor stripes=none on nested table (#4165)
|
98
|
+
* Include primary video in value of `playlist` attribute when embedding YouTube video (#4156)
|
99
|
+
* Honor `stripes=none` on nested table (#4165)
|
32
100
|
* Update default stylesheet to fix spacing around empty list item (#4184)
|
33
101
|
* Honor `:header_only` option when parsing document with manpage doctype (#4192)
|
34
102
|
* Use numeric character reference for closing square bracket around alt text of icon
|
35
|
-
* Process author or authors document attribute in document header when implicit doctitle is absent (#4206)
|
103
|
+
* Process `author` or `authors` document attribute in document header when implicit doctitle is absent (#4206)
|
36
104
|
* Patch open-uri-cached gem to work with Ruby 3.1 (update: drop patch now that open-uri-cached has been fixed) (#4227)
|
37
105
|
|
38
106
|
Improvements::
|
@@ -43,7 +111,7 @@ Improvements::
|
|
43
111
|
* Remove obsolete gist embed styles from default stylesheet
|
44
112
|
* Allow `--failure-level` to be set to default value, `FATAL`
|
45
113
|
* Sort levels in help for `--failure-level` option in ascending order
|
46
|
-
* Invert FR translations for caution & warning admonition labels (#4212) (
|
114
|
+
* Invert FR translations for caution & warning admonition labels (#4212) (*@cyChop*)
|
47
115
|
* Add tests for open-uri-cached integration that is activated by the `cache-uri` attribute
|
48
116
|
* Don't warn if negated tag is not found in include file (#4230)
|
49
117
|
|
@@ -55,7 +123,6 @@ Documentation::
|
|
55
123
|
* Document how to enable and use the sourcemap (the `:sourcemap` option)
|
56
124
|
* Document how to catalog additional assets (the `:catalog_assets` option)
|
57
125
|
|
58
|
-
// end::compact[]
|
59
126
|
== 2.0.16 (2021-08-03) - @mojavelinux
|
60
127
|
|
61
128
|
Bug Fixes::
|
data/README-de.adoc
CHANGED
data/README-fr.adoc
CHANGED
data/README-jp.adoc
CHANGED
data/README-zh_CN.adoc
CHANGED
data/README.adoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= Asciidoctor
|
2
2
|
Dan Allen <https://github.com/mojavelinux[@mojavelinux]>; Sarah White <https://github.com/graphitefriction[@graphitefriction]>
|
3
|
-
v2.0.
|
3
|
+
v2.0.19, 2023-05-17
|
4
4
|
// settings:
|
5
5
|
:idprefix:
|
6
6
|
:idseparator: -
|
@@ -16,7 +16,7 @@ ifdef::env-github[]
|
|
16
16
|
:warning-caption: :warning:
|
17
17
|
endif::[]
|
18
18
|
// Variables:
|
19
|
-
:release-version: 2.0.
|
19
|
+
:release-version: 2.0.18
|
20
20
|
// URLs:
|
21
21
|
:url-org: https://github.com/asciidoctor
|
22
22
|
:url-repo: {url-org}/asciidoctor
|
@@ -130,20 +130,22 @@ If you're using AsciiDoc.py, see {url-docs}/asciidoctor/latest/migrate/asciidoc-
|
|
130
130
|
|
131
131
|
Asciidoctor works on Linux, macOS and Windows and requires one of the following implementations of {url-ruby}[Ruby]:
|
132
132
|
|
133
|
-
* CRuby (aka MRI) 2.3 - 3.
|
134
|
-
* JRuby 9.1 - 9.
|
133
|
+
* CRuby (aka MRI) 2.3 - 3.2
|
134
|
+
* JRuby 9.1 - 9.4
|
135
135
|
* TruffleRuby (GraalVM)
|
136
136
|
|
137
137
|
[CAUTION]
|
138
138
|
====
|
139
139
|
If you're using a non-English Windows environment, you may bump into an `Encoding::UndefinedConversionError` when invoking Asciidoctor.
|
140
|
-
To solve this issue, we recommend
|
140
|
+
To solve this issue, we recommend overriding the default external and internal character encodings to `utf-8`.
|
141
|
+
You can do so by setting the `RUBYOPT` environment variable as follows:
|
141
142
|
|
142
|
-
|
143
|
+
RUBYOPT="-E utf-8:utf-8"
|
144
|
+
|
145
|
+
Once you make this change, all your Unicode headaches should be behind you.
|
143
146
|
|
144
|
-
Once you make this change, all your Unicode headaches will be behind you.
|
145
147
|
If you're using an IDE like Eclipse, make sure you set the encoding to UTF-8 there as well.
|
146
|
-
Asciidoctor
|
148
|
+
Asciidoctor is optimized to work with UTF-8 as the default encoding.
|
147
149
|
====
|
148
150
|
|
149
151
|
== Installation
|
data/asciidoctor.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.metadata = {
|
19
19
|
'bug_tracker_uri' => 'https://github.com/asciidoctor/asciidoctor/issues',
|
20
20
|
'changelog_uri' => 'https://github.com/asciidoctor/asciidoctor/blob/HEAD/CHANGELOG.adoc',
|
21
|
-
'mailing_list_uri' => '
|
21
|
+
'mailing_list_uri' => 'https://chat.asciidoctor.org',
|
22
22
|
'source_code_uri' => 'https://github.com/asciidoctor/asciidoctor'
|
23
23
|
}
|
24
24
|
|
@@ -38,9 +38,9 @@ Gem::Specification.new do |s|
|
|
38
38
|
s.add_development_dependency 'cucumber', '~> 3.1.0'
|
39
39
|
# erubi is needed for testing alternate eRuby impls
|
40
40
|
s.add_development_dependency 'erubi', '~> 1.10.0'
|
41
|
-
s.add_development_dependency 'haml', '~>
|
41
|
+
s.add_development_dependency 'haml', '~> 6.1.0'
|
42
42
|
s.add_development_dependency 'minitest', '~> 5.14.0'
|
43
|
-
s.add_development_dependency 'nokogiri', '~> 1.
|
43
|
+
s.add_development_dependency 'nokogiri', '~> 1.13.0'
|
44
44
|
s.add_development_dependency 'rake', '~> 12.3.0'
|
45
45
|
s.add_development_dependency 'slim', '~> 4.1.0'
|
46
46
|
s.add_development_dependency 'tilt', '~> 2.0.0'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
// Kiswahili translation, Benson Muite
|
2
|
+
:appendix-caption: Kiambatisho
|
3
|
+
:appendix-refsig: {appendix-caption}
|
4
|
+
:caution-caption: Hatari
|
5
|
+
:chapter-signifier: Somo
|
6
|
+
:chapter-refsig: {chapter-signifier}
|
7
|
+
:example-caption: Mfano
|
8
|
+
:figure-caption: Picha
|
9
|
+
:important-caption: Muhimu
|
10
|
+
:last-update-label: Geuza la mwisho
|
11
|
+
ifdef::listing-caption[:listing-caption: Orodha]
|
12
|
+
ifdef::manname-title[:manname-title: Jina]
|
13
|
+
:note-caption: Muhtasari
|
14
|
+
:part-signifier: Sehemu
|
15
|
+
:part-refsig: {part-signifier}
|
16
|
+
ifdef::preface-title[:preface-title: Dibaji]
|
17
|
+
:section-refsig: Fungu
|
18
|
+
:table-caption: Ratiba
|
19
|
+
:tip-caption: Shauri
|
20
|
+
:toc-title: Fahirisi
|
21
|
+
:untitled-label: Bila kichwa
|
22
|
+
:version-label: Toleo
|
23
|
+
:warning-caption: Onyo
|
@@ -74,10 +74,10 @@ code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;
|
|
74
74
|
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
|
75
75
|
ul,ol{margin-left:1.5em}
|
76
76
|
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
|
77
|
-
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
|
78
|
-
ul.square{list-style-type:square}
|
79
77
|
ul.circle{list-style-type:circle}
|
80
78
|
ul.disc{list-style-type:disc}
|
79
|
+
ul.square{list-style-type:square}
|
80
|
+
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
|
81
81
|
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
|
82
82
|
dl dt{margin-bottom:.3125em;font-weight:bold}
|
83
83
|
dl dd{margin-bottom:1.25em}
|
@@ -198,13 +198,10 @@ table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
|
|
198
198
|
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
|
199
199
|
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
|
200
200
|
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
|
201
|
-
.exampleblock>.content>:first-child{margin-top:0}
|
202
|
-
.exampleblock>.content>:last-child{margin-bottom:0}
|
203
201
|
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
|
204
|
-
.sidebarblock>:first-child{margin-top:0}
|
205
|
-
.sidebarblock>:last-child{margin-bottom:0}
|
206
202
|
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
|
207
|
-
.exampleblock>.content>:
|
203
|
+
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
|
204
|
+
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
|
208
205
|
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
|
209
206
|
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
|
210
207
|
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
|
@@ -383,7 +380,7 @@ b.conum *{color:inherit!important}
|
|
383
380
|
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
|
384
381
|
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
|
385
382
|
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
|
386
|
-
p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem}
|
383
|
+
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
|
387
384
|
p{margin-bottom:1.25rem}
|
388
385
|
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
|
389
386
|
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
|
@@ -24,6 +24,7 @@ class AbstractBlock < AbstractNode
|
|
24
24
|
attr_accessor :numeral
|
25
25
|
|
26
26
|
# Public: Gets/Sets the location in the AsciiDoc source where this block begins.
|
27
|
+
# Tracking source location is not enabled by default, and is controlled by the sourcemap option.
|
27
28
|
attr_accessor :source_location
|
28
29
|
|
29
30
|
# Public: Get/Set the String style (block type qualifier) for this block.
|
data/lib/asciidoctor/block.rb
CHANGED
@@ -116,14 +116,14 @@ class Block < AbstractBlock
|
|
116
116
|
# maybe apply_subs can know how to strip whitespace?
|
117
117
|
result = apply_subs @lines, @subs
|
118
118
|
if result.size < 2
|
119
|
-
result[0]
|
119
|
+
result[0] || ''
|
120
120
|
else
|
121
121
|
result.shift while (first = result[0]) && first.rstrip.empty?
|
122
122
|
result.pop while (last = result[-1]) && last.rstrip.empty?
|
123
123
|
result.join LF
|
124
124
|
end
|
125
125
|
else
|
126
|
-
logger.warn %(
|
126
|
+
logger.warn %(unknown content model '#{@content_model}' for block: #{self}) unless @content_model == :empty
|
127
127
|
nil
|
128
128
|
end
|
129
129
|
end
|
@@ -85,7 +85,11 @@ module Asciidoctor
|
|
85
85
|
'this attribute takes precedence over the same attribute defined in the source document',
|
86
86
|
'unless either the name or value ends in @ (i.e., name@=value or name=value@)') do |attr|
|
87
87
|
next if (attr = attr.rstrip).empty? || attr == '='
|
88
|
-
|
88
|
+
begin
|
89
|
+
attr = attr.encode UTF_8
|
90
|
+
rescue ::EncodingError
|
91
|
+
attr = attr.force_encoding UTF_8
|
92
|
+
end unless attr.encoding == UTF_8
|
89
93
|
name, _, val = attr.partition '='
|
90
94
|
self[:attributes][name] = val
|
91
95
|
end
|
@@ -39,11 +39,25 @@ class Converter::DocBook5Converter < Converter::Base
|
|
39
39
|
result << ((node.attr? 'sectnumlevels') ? %(<?asciidoc-numbered maxdepth="#{node.attr 'sectnumlevels'}"?>) : '<?asciidoc-numbered?>') if node.attr? 'sectnums'
|
40
40
|
lang_attribute = (node.attr? 'nolang') ? '' : %( xml:lang="#{node.attr 'lang', 'en'}")
|
41
41
|
if (root_tag_name = node.doctype) == 'manpage'
|
42
|
-
|
42
|
+
manpage = true
|
43
|
+
root_tag_name = 'article'
|
43
44
|
end
|
44
45
|
root_tag_idx = result.size
|
45
46
|
id = node.id
|
46
47
|
result << (document_info_tag node) unless node.noheader
|
48
|
+
if manpage
|
49
|
+
result << '<refentry>'
|
50
|
+
result << '<refmeta>'
|
51
|
+
result << %(<refentrytitle>#{node.apply_reftext_subs node.attr 'mantitle'}</refentrytitle>) if node.attr? 'mantitle'
|
52
|
+
result << %(<manvolnum>#{node.attr 'manvolnum'}</manvolnum>) if node.attr? 'manvolnum'
|
53
|
+
result << %(<refmiscinfo class="source">#{node.attr 'mansource', ' '}</refmiscinfo>)
|
54
|
+
result << %(<refmiscinfo class="manual">#{node.attr 'manmanual', ' '}</refmiscinfo>)
|
55
|
+
result << '</refmeta>'
|
56
|
+
result << '<refnamediv>'
|
57
|
+
result += (node.attr 'mannames').map {|n| %(<refname>#{n}</refname>) } if node.attr? 'mannames'
|
58
|
+
result << %(<refpurpose>#{node.attr 'manpurpose'}</refpurpose>) if node.attr? 'manpurpose'
|
59
|
+
result << '</refnamediv>'
|
60
|
+
end
|
47
61
|
unless (docinfo_content = node.docinfo :header).empty?
|
48
62
|
result << docinfo_content
|
49
63
|
end
|
@@ -51,6 +65,7 @@ class Converter::DocBook5Converter < Converter::Base
|
|
51
65
|
unless (docinfo_content = node.docinfo :footer).empty?
|
52
66
|
result << docinfo_content
|
53
67
|
end
|
68
|
+
result << '</refentry>' if manpage
|
54
69
|
id, node.id = node.id, nil unless id
|
55
70
|
# defer adding root tag in case document ID is auto-generated on demand
|
56
71
|
result.insert root_tag_idx, %(<#{root_tag_name} xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0"#{lang_attribute}#{common_attributes id}>)
|
@@ -66,7 +81,7 @@ class Converter::DocBook5Converter < Converter::Base
|
|
66
81
|
else
|
67
82
|
tag_name = node.sectname
|
68
83
|
end
|
69
|
-
title_el = node.special && (node.option? 'untitled') ? '' : %(<title>#{node.title}</title>\n)
|
84
|
+
title_el = node.special && ((node.option? 'notitle') || (node.option? 'untitled')) ? '' : %(<title>#{node.title}</title>\n)
|
70
85
|
%(<#{tag_name}#{common_attributes node.id, node.role, node.reftext}>
|
71
86
|
#{title_el}#{node.content}
|
72
87
|
</#{tag_name}>)
|
@@ -248,10 +263,10 @@ class Converter::DocBook5Converter < Converter::Base
|
|
248
263
|
def convert_stem node
|
249
264
|
if (idx = node.subs.index :specialcharacters)
|
250
265
|
node.subs.delete_at idx
|
251
|
-
equation = node.content
|
266
|
+
equation = node.content
|
252
267
|
idx > 0 ? (node.subs.insert idx, :specialcharacters) : (node.subs.unshift :specialcharacters)
|
253
268
|
else
|
254
|
-
equation = node.content
|
269
|
+
equation = node.content
|
255
270
|
end
|
256
271
|
if node.style == 'asciimath'
|
257
272
|
# NOTE fop requires jeuclid to process mathml markup
|
@@ -702,19 +717,6 @@ class Converter::DocBook5Converter < Converter::Base
|
|
702
717
|
end
|
703
718
|
result << '</info>'
|
704
719
|
|
705
|
-
if doc.doctype == 'manpage'
|
706
|
-
result << '<refmeta>'
|
707
|
-
result << %(<refentrytitle>#{doc.attr 'mantitle'}</refentrytitle>) if doc.attr? 'mantitle'
|
708
|
-
result << %(<manvolnum>#{doc.attr 'manvolnum'}</manvolnum>) if doc.attr? 'manvolnum'
|
709
|
-
result << %(<refmiscinfo class="source">#{doc.attr 'mansource', ' '}</refmiscinfo>)
|
710
|
-
result << %(<refmiscinfo class="manual">#{doc.attr 'manmanual', ' '}</refmiscinfo>)
|
711
|
-
result << '</refmeta>'
|
712
|
-
result << '<refnamediv>'
|
713
|
-
result += (doc.attr 'mannames').map {|n| %(<refname>#{n}</refname>) } if doc.attr? 'mannames'
|
714
|
-
result << %(<refpurpose>#{doc.attr 'manpurpose'}</refpurpose>) if doc.attr? 'manpurpose'
|
715
|
-
result << '</refnamediv>'
|
716
|
-
end
|
717
|
-
|
718
720
|
result.join LF
|
719
721
|
end
|
720
722
|
|
@@ -675,7 +675,7 @@ Your browser does not support the audio tag.
|
|
675
675
|
title_element = node.title? ? %(<div class="title">#{node.captioned_title}</div>\n) : ''
|
676
676
|
%(<div#{id_attribute} class="listingblock#{(role = node.role) ? " #{role}" : ''}">
|
677
677
|
#{title_element}<div class="content">
|
678
|
-
#{syntax_hl ? (syntax_hl.format node, lang, opts) : pre_open +
|
678
|
+
#{syntax_hl ? (syntax_hl.format node, lang, opts) : pre_open + node.content + pre_close}
|
679
679
|
</div>
|
680
680
|
</div>)
|
681
681
|
end
|
@@ -28,7 +28,7 @@ class Converter::ManPageConverter < Converter::Base
|
|
28
28
|
EllipsisCharRefRx = /…(?:​)?/
|
29
29
|
WrappedIndentRx = /#{CG_BLANK}*#{LF}#{CG_BLANK}*/
|
30
30
|
XMLMarkupRx = /&#?[a-z\d]+;|</
|
31
|
-
PCDATAFilterRx =
|
31
|
+
PCDATAFilterRx = %r((&#?[a-z\d]+;|<#{ESC}\\f\(CR.*?</#{ESC}\\fP>|<[^>]+>)|([^&<]+))
|
32
32
|
|
33
33
|
def initialize backend, opts = {}
|
34
34
|
@backend = backend
|
@@ -39,7 +39,7 @@ class Converter::ManPageConverter < Converter::Base
|
|
39
39
|
unless node.attr? 'mantitle'
|
40
40
|
raise 'asciidoctor: ERROR: doctype must be set to manpage when using manpage backend'
|
41
41
|
end
|
42
|
-
mantitle = node.attr 'mantitle'
|
42
|
+
mantitle = (node.attr 'mantitle').gsub InvalidSectionIdCharsRx, ''
|
43
43
|
manvolnum = node.attr 'manvolnum', '1'
|
44
44
|
manname = node.attr 'manname', mantitle
|
45
45
|
manmanual = node.attr 'manmanual'
|
@@ -236,7 +236,7 @@ r lw(\n(.lu*75u/100u).'
|
|
236
236
|
result << (node.title? ? %(.sp
|
237
237
|
.B #{manify node.captioned_title}
|
238
238
|
.br) : '.sp')
|
239
|
-
result << %([#{node.alt}])
|
239
|
+
result << %([#{manify node.alt}])
|
240
240
|
result.join LF
|
241
241
|
end
|
242
242
|
|
@@ -29,7 +29,7 @@ class Converter::TemplateConverter < Converter::Base
|
|
29
29
|
erb: { trim: 0 },
|
30
30
|
# TODO line 466 of haml/compiler.rb sorts the attributes; file an issue to make this configurable
|
31
31
|
# NOTE AsciiDoc syntax expects HTML/XML output to use double quotes around attribute values
|
32
|
-
haml: { format: :xhtml, attr_wrapper: '"', escape_attrs: false, ugly: true },
|
32
|
+
haml: { format: :xhtml, attr_wrapper: '"', escape_html: false, escape_attrs: false, ugly: true },
|
33
33
|
slim: { disable_escape: true, sort_attrs: false, pretty: false },
|
34
34
|
}
|
35
35
|
|
@@ -227,6 +227,7 @@ class Converter::TemplateConverter < Converter::Base
|
|
227
227
|
Helpers.require_library 'haml' unless defined? ::Haml::Engine
|
228
228
|
# NOTE Haml 5 dropped support for pretty printing
|
229
229
|
@engine_options[extsym].delete :ugly if defined? ::Haml::TempleEngine
|
230
|
+
@engine_options[extsym][:attr_quote] = @engine_options[extsym].delete :attr_wrapper unless defined? ::Haml::Options
|
230
231
|
@active_engines[extsym] = true
|
231
232
|
end
|
232
233
|
when :erb
|
data/lib/asciidoctor/document.rb
CHANGED
@@ -257,6 +257,7 @@ class Document < AbstractBlock
|
|
257
257
|
@parent_document = parent_doc
|
258
258
|
options[:base_dir] ||= parent_doc.base_dir
|
259
259
|
options[:catalog_assets] = true if parent_doc.options[:catalog_assets]
|
260
|
+
options[:to_dir] = parent_doc.options[:to_dir] if parent_doc.options[:to_dir]
|
260
261
|
@catalog = parent_doc.catalog.merge footnotes: []
|
261
262
|
# QUESTION should we support setting attribute in parent document from nested document?
|
262
263
|
@attribute_overrides = attr_overrides = (parent_doc.instance_variable_get :@attribute_overrides).merge parent_doc.attributes
|
@@ -513,7 +513,12 @@ module Extensions
|
|
513
513
|
#
|
514
514
|
# If the process method returns an instance of Block, the content model of that
|
515
515
|
# Block is :compound, and the Block contains at least one line, the parser will
|
516
|
-
# parse those lines into blocks
|
516
|
+
# parse those lines into blocks and append them to the returned block.
|
517
|
+
#
|
518
|
+
# If your custom block can be applied to a paragraph or delimited block, and you
|
519
|
+
# want to preserve the content model of the input, check whether the value of
|
520
|
+
# the cloaked-context attribute is :paragraph. If it is, set the content model of
|
521
|
+
# the returned block to :simple. Otherwise, set the content model to :compound.
|
517
522
|
#
|
518
523
|
# AsciiDoc example:
|
519
524
|
#
|
@@ -716,6 +721,7 @@ module Extensions
|
|
716
721
|
|
717
722
|
def initialize groups = {}
|
718
723
|
@groups = groups
|
724
|
+
reset
|
719
725
|
@preprocessor_extensions = @tree_processor_extensions = @postprocessor_extensions = @include_processor_extensions = @docinfo_processor_extensions = @block_extensions = @block_macro_extensions = @inline_macro_extensions = nil
|
720
726
|
@document = nil
|
721
727
|
end
|
@@ -727,6 +733,7 @@ module Extensions
|
|
727
733
|
#
|
728
734
|
# Returns the instance of this [Registry].
|
729
735
|
def activate document
|
736
|
+
reset if @document
|
730
737
|
@document = document
|
731
738
|
unless (ext_groups = Extensions.groups.values + @groups.values).empty?
|
732
739
|
ext_groups.each do |group|
|
@@ -1102,6 +1109,9 @@ module Extensions
|
|
1102
1109
|
# Public: Checks whether any {BlockProcessor} extensions are registered to
|
1103
1110
|
# handle the specified block name appearing on the specified context.
|
1104
1111
|
#
|
1112
|
+
# This method assumes you've called blocks? first to check whether any
|
1113
|
+
# block extensions are registered.
|
1114
|
+
#
|
1105
1115
|
# Returns the [Extension] proxy object for the BlockProcessor that matches
|
1106
1116
|
# the block name and context or false if no match is found.
|
1107
1117
|
def registered_for_block? name, context
|
@@ -1117,6 +1127,9 @@ module Extensions
|
|
1117
1127
|
#
|
1118
1128
|
# name - the String or Symbol (coersed to a Symbol) macro name
|
1119
1129
|
#
|
1130
|
+
# This method assumes you've called blocks? first to check whether any
|
1131
|
+
# block extensions are registered.
|
1132
|
+
#
|
1120
1133
|
# Returns the [Extension] object stored in the registry that proxies the
|
1121
1134
|
# corresponding BlockProcessor or nil if a match is not found.
|
1122
1135
|
def find_block_extension name
|
@@ -1193,6 +1206,9 @@ module Extensions
|
|
1193
1206
|
#
|
1194
1207
|
# name - the String or Symbol (coersed to a Symbol) macro name
|
1195
1208
|
#
|
1209
|
+
# This method assumes you've called block_macros? first to check whether any
|
1210
|
+
# block macro extensions are registered.
|
1211
|
+
#
|
1196
1212
|
# Returns the [Extension] proxy object for the BlockMacroProcessor that matches
|
1197
1213
|
# the macro name or false if no match is found.
|
1198
1214
|
#--
|
@@ -1206,6 +1222,9 @@ module Extensions
|
|
1206
1222
|
#
|
1207
1223
|
# name - the String or Symbol (coersed to a Symbol) macro name
|
1208
1224
|
#
|
1225
|
+
# This method assumes you've called block_macros? first to check whether any
|
1226
|
+
# block macro extensions are registered.
|
1227
|
+
#
|
1209
1228
|
# Returns the [Extension] object stored in the registry that proxies the
|
1210
1229
|
# corresponding BlockMacroProcessor or nil if a match is not found.
|
1211
1230
|
def find_block_macro_extension name
|
@@ -1282,6 +1301,9 @@ module Extensions
|
|
1282
1301
|
#
|
1283
1302
|
# name - the String or Symbol (coersed to a Symbol) macro name
|
1284
1303
|
#
|
1304
|
+
# This method assumes you've called inline_macros? first to check whether any
|
1305
|
+
# inline macro extensions are registered.
|
1306
|
+
#
|
1285
1307
|
# Returns the [Extension] proxy object for the InlineMacroProcessor that matches
|
1286
1308
|
# the macro name or false if no match is found.
|
1287
1309
|
def registered_for_inline_macro? name
|
@@ -1293,6 +1315,9 @@ module Extensions
|
|
1293
1315
|
#
|
1294
1316
|
# name - the String or Symbol (coersed to a Symbol) macro name
|
1295
1317
|
#
|
1318
|
+
# This method assumes you've called inline_macros? first to check whether any
|
1319
|
+
# inline macro extensions are registered.
|
1320
|
+
#
|
1296
1321
|
# Returns the [Extension] object stored in the registry that proxies the
|
1297
1322
|
# corresponding InlineMacroProcessor or nil if a match is not found.
|
1298
1323
|
def find_inline_macro_extension name
|
@@ -1302,6 +1327,9 @@ module Extensions
|
|
1302
1327
|
# Public: Retrieves the {Extension} proxy objects for all
|
1303
1328
|
# InlineMacroProcessor instances in this registry.
|
1304
1329
|
#
|
1330
|
+
# This method assumes you've called inline_macros? first to check whether any
|
1331
|
+
# inline macro extensions are registered.
|
1332
|
+
#
|
1305
1333
|
# Returns an [Array] of Extension proxy objects.
|
1306
1334
|
def inline_macros
|
1307
1335
|
@inline_macro_extensions.values
|
@@ -1345,7 +1373,7 @@ module Extensions
|
|
1345
1373
|
yield processor
|
1346
1374
|
end
|
1347
1375
|
unless processor.process_block_given?
|
1348
|
-
raise ::
|
1376
|
+
raise ::NoMethodError, %(No block specified to process #{kind_name} extension at #{block.source_location.join ':'})
|
1349
1377
|
end
|
1350
1378
|
processor.freeze
|
1351
1379
|
extension = ProcessorExtension.new kind, processor
|
@@ -1389,10 +1417,10 @@ module Extensions
|
|
1389
1417
|
yield processor
|
1390
1418
|
end
|
1391
1419
|
unless (name = as_symbol processor.name)
|
1392
|
-
raise ::ArgumentError, %(No name specified for #{kind_name} extension at #{block.source_location})
|
1420
|
+
raise ::ArgumentError, %(No name specified for #{kind_name} extension at #{block.source_location.join ':'})
|
1393
1421
|
end
|
1394
1422
|
unless processor.process_block_given?
|
1395
|
-
raise ::NoMethodError, %(No block specified to process #{kind_name} extension at #{block.source_location})
|
1423
|
+
raise ::NoMethodError, %(No block specified to process #{kind_name} extension at #{block.source_location.join ':'})
|
1396
1424
|
end
|
1397
1425
|
processor.freeze
|
1398
1426
|
kind_store[name] = ProcessorExtension.new kind, processor
|
@@ -1424,6 +1452,11 @@ module Extensions
|
|
1424
1452
|
end
|
1425
1453
|
end
|
1426
1454
|
|
1455
|
+
def reset
|
1456
|
+
@preprocessor_extensions = @tree_processor_extensions = @postprocessor_extensions = @include_processor_extensions = @docinfo_processor_extensions = @block_extensions = @block_macro_extensions = @inline_macro_extensions = nil
|
1457
|
+
@document = nil
|
1458
|
+
end
|
1459
|
+
|
1427
1460
|
def resolve_args args, expect
|
1428
1461
|
opts = ::Hash === args[-1] ? args.pop : {}
|
1429
1462
|
return opts if expect == 1
|
@@ -1528,7 +1561,7 @@ module Extensions
|
|
1528
1561
|
#
|
1529
1562
|
# Returns nothing
|
1530
1563
|
def unregister *names
|
1531
|
-
names.
|
1564
|
+
names.each_with_object(groups) {|group, catalog| catalog.delete group.to_sym }
|
1532
1565
|
nil
|
1533
1566
|
end
|
1534
1567
|
end
|