asciidoctor-reducer 1.0.0.alpha.5 → 1.0.0.alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +27 -3
- data/README.adoc +8 -6
- data/lib/asciidoctor/reducer/cli.rb +43 -17
- data/lib/asciidoctor/reducer/preprocessor.rb +2 -2
- data/lib/asciidoctor/reducer/preprocessor_directive_tracker.rb +8 -11
- data/lib/asciidoctor/reducer/tree_processor.rb +8 -2
- data/lib/asciidoctor/reducer/version.rb +1 -1
- data/lib/asciidoctor/reducer.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30089ea8ab059ef848713ada56dd9457f4d6681c80de8028b92a9d02b21b0544
|
4
|
+
data.tar.gz: f38c68d1f15627a4d74fd5376fb3ec9a5b6ad29345c10ea882ff988c875922a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3ec843b92513164762d9647d963238073bff89c66619205166b26199a23e65d85ee5aaf23c2a60c953eae52d17ed36cbb7499dd7afb2040692912065171db12
|
7
|
+
data.tar.gz: df40e3f0c244ed21ea052536844df17f536c84a12252008d1c7dbdc04ad85ec00f3aabae81242550eda9a394497db386bd12b34f5110f323f61a8bdbc8ec30c6
|
data/CHANGELOG.adoc
CHANGED
@@ -4,6 +4,26 @@
|
|
4
4
|
This document provides a high-level view of the changes to the Asciidoctor Reducer by release.
|
5
5
|
For a detailed view of what has changed, refer to the {url-repo}/commits/main[commit history] on GitHub.
|
6
6
|
|
7
|
+
== 1.0.0.alpha.6 (2022-02-10) - @mojavelinux
|
8
|
+
|
9
|
+
=== Added
|
10
|
+
|
11
|
+
* Add `-S`, `--safe-mode` option to CLI to set safe mode (#13)
|
12
|
+
* Add `-r`, `--require` option to CLI to specify additional libraries to require before running (#17)
|
13
|
+
|
14
|
+
=== Changed
|
15
|
+
|
16
|
+
* Sort CLI options in help text, except for the `-h`, `--help` option
|
17
|
+
* Update CLI to always use a new logger instance
|
18
|
+
* Defer initializing logger until run method is called
|
19
|
+
|
20
|
+
=== Fixed
|
21
|
+
|
22
|
+
* Replace include directives that follow an unresolved include (#19)
|
23
|
+
* Don't activate reducer extensions on reduced document
|
24
|
+
* Prevent custom extension registry from activating extensions twice during reload (#21)
|
25
|
+
* Retain includes table in document catalog when reloading document (#23)
|
26
|
+
|
7
27
|
== 1.0.0.alpha.5 (2022-02-06) - @mojavelinux
|
8
28
|
|
9
29
|
=== Changed
|
@@ -36,15 +56,15 @@ For a detailed view of what has changed, refer to the {url-repo}/commits/main[co
|
|
36
56
|
|
37
57
|
=== Added
|
38
58
|
|
39
|
-
* Add `-a
|
59
|
+
* Add `-a`, `--attribute` option to CLI for setting an AsciiDoc document attribute at runtime (#6)
|
40
60
|
|
41
61
|
=== Changed
|
42
62
|
|
43
|
-
* Reduce preprocessor conditionals by default; add option (`--preserve-conditionals
|
63
|
+
* Reduce preprocessor conditionals by default; add option (`--preserve-conditionals`, `:preserve_conditionals`) to preserve them (#8)
|
44
64
|
* Don't enable sourcemap automatically (#4)
|
45
65
|
* Don't override logger by default; instead, rely on `:logger` API option to change logger
|
46
66
|
* Add `--log-level` option to CLI to set severity level on logger (#9)
|
47
|
-
* Add `-q
|
67
|
+
* Add `-q`, `--quiet` option to CLI to suppress log messages (#9)
|
48
68
|
* Reserve zero index in include replacements for top-level document
|
49
69
|
|
50
70
|
=== Fixed
|
@@ -74,3 +94,7 @@ Initial release.
|
|
74
94
|
=== Details
|
75
95
|
|
76
96
|
{url-repo}/releases/tag/v1.0.0.alpha.5[git tag]
|
97
|
+
|
98
|
+
=== Details
|
99
|
+
|
100
|
+
{url-repo}/releases/tag/v1.0.0.alpha.6[git tag]
|
data/README.adoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= {project-name}
|
2
2
|
Dan Allen <https://github.com/mojavelinux[@mojavelinux]>
|
3
|
-
v1.0.0.alpha.
|
3
|
+
v1.0.0.alpha.6, 2022-02-10
|
4
4
|
:idprefix:
|
5
5
|
:idseparator: -
|
6
6
|
ifndef::env-github[:icons: font]
|
@@ -23,14 +23,14 @@ If the document does not contain any preprocessor directives, the tool returns t
|
|
23
23
|
== Prerequisites
|
24
24
|
|
25
25
|
{project-name} is a Ruby program that you install using Ruby packaging.
|
26
|
-
|
26
|
+
To install and run {project-name}, you need Ruby 2.5 or better.
|
27
27
|
|
28
|
-
|
28
|
+
Run the following command to check whether you have Ruby installed and to check which version:
|
29
29
|
|
30
30
|
$ ruby -v
|
31
31
|
|
32
32
|
If Ruby is not installed, you can install it using {url-rvm}[RVM] (or, if you prefer, the package manager for your system).
|
33
|
-
We generally recommend using RVM
|
33
|
+
We generally recommend using RVM as it allows you to install gems without requiring elevated privileges or messing with system libraries.
|
34
34
|
|
35
35
|
== Installation
|
36
36
|
|
@@ -75,7 +75,9 @@ asciidoctor-reducer [OPTION]... FILE
|
|
75
75
|
....
|
76
76
|
|
77
77
|
The argument `FILE` is the AsciiDoc file you want to reduce.
|
78
|
-
|
78
|
+
The options, represented by `[OPTION]...`, are optional, as the name suggestions.
|
79
|
+
|
80
|
+
Thus, to use the command, pass the AsciiDoc file as the sole argument:
|
79
81
|
|
80
82
|
$ asciidoctor-reducer input.adoc
|
81
83
|
|
@@ -234,7 +236,7 @@ When running the `asciidoctor-reducer` command from source, you must prefix the
|
|
234
236
|
[subs=attributes+]
|
235
237
|
$ bundle exec asciidoctor-reducer sample.adoc
|
236
238
|
|
237
|
-
To avoid having to do this, or make the `asciidoctor-reducer` command available from anywhere, you need to build the development gem and install it.
|
239
|
+
To avoid having to do this, or to make the `asciidoctor-reducer` command available from anywhere, you need to build the development gem and install it.
|
238
240
|
|
239
241
|
== Copyright and License
|
240
242
|
|
@@ -7,8 +7,12 @@ module Asciidoctor::Reducer
|
|
7
7
|
autoload :VERSION, (::File.join __dir__, 'version.rb')
|
8
8
|
|
9
9
|
class Cli
|
10
|
+
LOG_LEVELS = (::Logger::Severity.constants false).each_with_object({}) do |level, accum|
|
11
|
+
accum[level.to_s.downcase] = (::Logger::Severity.const_get level) unless level == :UNKNOWN
|
12
|
+
end
|
13
|
+
|
10
14
|
def parse args
|
11
|
-
options = { attributes: {}, safe: :unsafe }
|
15
|
+
options = { attributes: {}, log_level: LOG_LEVELS['warn'], safe: :unsafe }
|
12
16
|
|
13
17
|
opt_parser = ::OptionParser.new do |opts|
|
14
18
|
opts.program_name = 'asciidoctor-reducer'
|
@@ -19,10 +23,6 @@ module Asciidoctor::Reducer
|
|
19
23
|
|
20
24
|
EOS
|
21
25
|
|
22
|
-
opts.on '-o FILE', '--output=FILE', 'set the output filename or stream' do |file|
|
23
|
-
options[:output_file] = file
|
24
|
-
end
|
25
|
-
|
26
26
|
opts.on '-a KEY[=VALUE]', '--attribute=KEY[=VALUE]',
|
27
27
|
'set a document attribute in the AsciiDoc document: [key, key!, key=value]' do |attr|
|
28
28
|
key, val = attr.split '=', 2
|
@@ -30,28 +30,41 @@ module Asciidoctor::Reducer
|
|
30
30
|
options[:attributes][key] = val
|
31
31
|
end
|
32
32
|
|
33
|
+
opts.on '--log-level LEVEL', %w(debug info warn error fatal),
|
34
|
+
'set the minimum level of messages to log: [debug, info, warn, error, fatal] (default: warn)' do |level|
|
35
|
+
options[:log_level] = level
|
36
|
+
end
|
37
|
+
|
38
|
+
opts.on '-o FILE', '--output=FILE', 'set the output filename or stream' do |file|
|
39
|
+
options[:output_file] = file
|
40
|
+
end
|
41
|
+
|
33
42
|
opts.on '--preserve-conditionals', 'preserve preprocessor conditional directives in the reduced source' do
|
34
43
|
options[:preserve_conditionals] = true
|
35
44
|
end
|
36
45
|
|
37
|
-
opts.on '
|
38
|
-
|
39
|
-
(options[:logger] = ::Asciidoctor::Logger.new $stderr).level = level unless level == 'warn'
|
46
|
+
opts.on '-q', '--quiet', 'suppress all application log messages' do
|
47
|
+
options[:log_level] = nil
|
40
48
|
end
|
41
49
|
|
42
|
-
opts.on '-
|
43
|
-
options[:
|
50
|
+
opts.on '-rLIBRARY', '--require LIBRARY', 'require the specified library or libraries before running' do |path|
|
51
|
+
(options[:requires] ||= []).concat path.split ','
|
44
52
|
end
|
45
53
|
|
46
|
-
opts.on '-
|
47
|
-
|
48
|
-
|
54
|
+
opts.on '-S', '--safe-mode SAFE_MODE', ['unsafe', 'safe', 'server'],
|
55
|
+
'set supported safe mode level: [unsafe, safe, server] (default: unsafe)' do |name|
|
56
|
+
options[:safe] = ::Asciidoctor::SafeMode.value_for_name name
|
49
57
|
end
|
50
58
|
|
51
59
|
opts.on '-v', '--version', 'display the version information and exit' do
|
52
60
|
$stdout.write %(#{opts.program_name} #{VERSION}\n)
|
53
61
|
return 0
|
54
62
|
end
|
63
|
+
|
64
|
+
opts.on '-h', '--help', 'display this help text and exit' do
|
65
|
+
$stdout.write opts.help
|
66
|
+
return 0
|
67
|
+
end
|
55
68
|
end
|
56
69
|
|
57
70
|
args = opt_parser.parse args
|
@@ -61,13 +74,21 @@ module Asciidoctor::Reducer
|
|
61
74
|
$stdout.write opt_parser.help
|
62
75
|
1
|
63
76
|
elsif args.size == 1
|
77
|
+
if (requires = options.delete :requires)
|
78
|
+
requires.uniq.each do |path|
|
79
|
+
require path
|
80
|
+
rescue ::LoadError
|
81
|
+
$stderr.write %(#{opt_parser.program_name}: '#{path}' could not be required (reason: #{$!.message})\n)
|
82
|
+
return 1
|
83
|
+
end
|
84
|
+
end
|
64
85
|
options[:input_file] = args[0]
|
65
86
|
options[:output_file] = '-' unless options[:output_file]
|
66
87
|
[0, options]
|
67
88
|
else
|
68
89
|
opt_parser.warn %(extra arguments detected (unparsed arguments: #{(args.drop 1).join ' '}))
|
69
90
|
$stdout.write opt_parser.help
|
70
|
-
|
91
|
+
1
|
71
92
|
end
|
72
93
|
rescue ::OptionParser::InvalidOption
|
73
94
|
$stderr.write %(#{opt_parser.program_name}: #{$!.message}\n)
|
@@ -76,9 +97,14 @@ module Asciidoctor::Reducer
|
|
76
97
|
end
|
77
98
|
|
78
99
|
def self.run args = ARGV
|
79
|
-
old_logger = ::Asciidoctor::LoggerManager.logger
|
80
100
|
code, options = new.parse (Array args)
|
81
101
|
return code unless code == 0 && options
|
102
|
+
old_logger = ::Asciidoctor::LoggerManager.logger
|
103
|
+
if (log_level = options.delete :log_level)
|
104
|
+
(options[:logger] = ::Asciidoctor::Logger.new $stderr).level = log_level
|
105
|
+
else
|
106
|
+
options[:logger] = nil
|
107
|
+
end
|
82
108
|
if (output_file = options.delete :output_file) == '-'
|
83
109
|
to = $stdout
|
84
110
|
else
|
@@ -87,7 +113,7 @@ module Asciidoctor::Reducer
|
|
87
113
|
if (input_file = options.delete :input_file) == '-'
|
88
114
|
reduced = (::Asciidoctor.load $stdin, options).source + ?\n
|
89
115
|
else
|
90
|
-
reduced = (::Asciidoctor.load_file input_file,
|
116
|
+
reduced = (::Asciidoctor.load_file input_file, options).source + ?\n
|
91
117
|
end
|
92
118
|
::Pathname === to ? (to.write reduced, encoding: ::Encoding::UTF_8) : (to.write reduced)
|
93
119
|
0
|
@@ -95,7 +121,7 @@ module Asciidoctor::Reducer
|
|
95
121
|
$stderr.write %(asciidoctor-reducer: #{$!.message}\n)
|
96
122
|
1
|
97
123
|
ensure
|
98
|
-
::Asciidoctor::LoggerManager.logger = old_logger
|
124
|
+
::Asciidoctor::LoggerManager.logger = old_logger if old_logger
|
99
125
|
end
|
100
126
|
end
|
101
127
|
end
|
@@ -4,8 +4,8 @@ require_relative 'preprocessor_directive_tracker'
|
|
4
4
|
|
5
5
|
module Asciidoctor::Reducer
|
6
6
|
class Preprocessor < ::Asciidoctor::Extensions::Preprocessor
|
7
|
-
def process
|
8
|
-
|
7
|
+
def process _, reader
|
8
|
+
reader.extend PreprocessorDirectiveTracker
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -12,7 +12,7 @@ module Asciidoctor::Reducer
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def preprocess_conditional_directive keyword, target, delimiter, text
|
15
|
-
return super if
|
15
|
+
return super if @document.options[:preserve_conditionals]
|
16
16
|
skip_active = @skipping
|
17
17
|
depth = @conditional_stack.length
|
18
18
|
cond_lineno = @lineno - 1
|
@@ -38,12 +38,10 @@ module Asciidoctor::Reducer
|
|
38
38
|
@x_include_pushed = false
|
39
39
|
inc_lineno = @lineno - 1 # we're currently on the include line, which is 1-based
|
40
40
|
result = super
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
unless @x_include_pushed
|
42
|
+
unresolved = (l = peek_line true) && (l.start_with? 'Unresolved directive in ') && (l.end_with? ']') || nil
|
43
|
+
push_include_replacement inc_lineno, (unresolved ? [l] : []), unresolved
|
44
44
|
end
|
45
|
-
inc_lines = ((line = lines[0].to_s).start_with? 'Unresolved directive in ') && (line.end_with? ']') ? [line] : []
|
46
|
-
push_include_replacement inc_lineno, inc_lines
|
47
45
|
@x_include_directive_line = @x_include_pushed = nil
|
48
46
|
result
|
49
47
|
end
|
@@ -53,8 +51,7 @@ module Asciidoctor::Reducer
|
|
53
51
|
inc_lineno = @lineno - 2 # we're below the include line, which is 1-based
|
54
52
|
prev_inc_depth = @include_stack.length
|
55
53
|
result = super
|
56
|
-
|
57
|
-
push_include_replacement inc_lineno, inc_lines
|
54
|
+
push_include_replacement inc_lineno, (@include_stack.length > prev_inc_depth ? lines : [])
|
58
55
|
result
|
59
56
|
end
|
60
57
|
|
@@ -65,15 +62,15 @@ module Asciidoctor::Reducer
|
|
65
62
|
|
66
63
|
private
|
67
64
|
|
68
|
-
def push_include_replacement inc_lineno, inc_lines
|
65
|
+
def push_include_replacement inc_lineno, inc_lines, unresolved = false
|
69
66
|
@x_include_replacements << {
|
70
67
|
into: @x_include_replacements.pos,
|
71
68
|
lineno: inc_lineno,
|
72
69
|
line: @x_include_directive_line,
|
73
|
-
lines: inc_lines
|
70
|
+
lines: inc_lines,
|
74
71
|
drop: [],
|
75
72
|
}
|
76
|
-
@x_include_replacements.pos = @x_include_replacements.length - 1
|
73
|
+
@x_include_replacements.pos = @x_include_replacements.length - 1 unless unresolved || inc_lines.empty?
|
77
74
|
nil
|
78
75
|
end
|
79
76
|
end
|
@@ -3,7 +3,6 @@
|
|
3
3
|
module Asciidoctor::Reducer
|
4
4
|
class TreeProcessor < ::Asciidoctor::Extensions::TreeProcessor
|
5
5
|
def process doc
|
6
|
-
return if doc.options[:reduced]
|
7
6
|
unless (inc_replacements = doc.reader.x_include_replacements).length == 1 && inc_replacements[0][:drop].empty?
|
8
7
|
inc_replacements[0][:lines] = doc.source_lines.dup
|
9
8
|
inc_replacements.reverse_each do |it|
|
@@ -21,7 +20,14 @@ module Asciidoctor::Reducer
|
|
21
20
|
source_lines = inc_replacements[0][:lines].flatten
|
22
21
|
if doc.sourcemap
|
23
22
|
logger = ::Asciidoctor::LoggerManager.logger
|
24
|
-
|
23
|
+
opts = doc.options.merge logger: nil, parse: false, reduced: true
|
24
|
+
if (ext_reg = opts[:extension_registry])
|
25
|
+
opts[:extension_registry] = ::Asciidoctor::Extensions::Registry.new ext_reg.groups
|
26
|
+
end
|
27
|
+
includes = doc.catalog[:includes]
|
28
|
+
doc = ::Asciidoctor.load source_lines, opts
|
29
|
+
doc.catalog[:includes] = includes
|
30
|
+
doc.parse
|
25
31
|
::Asciidoctor::LoggerManager.logger = logger
|
26
32
|
else
|
27
33
|
source_lines.pop while (last = source_lines[-1]) && last.empty?
|
data/lib/asciidoctor/reducer.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asciidoctor-reducer
|
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: 2022-02-
|
11
|
+
date: 2022-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|