asciidoctor-reducer 1.0.0.alpha.5 → 1.0.0.alpha.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +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
|