bookbindery 7.4.4 → 7.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bookbinder.gemspec +1 -1
- data/lib/bookbinder/cli.rb +1 -1
- data/lib/bookbinder/commands/bind.rb +17 -17
- data/lib/bookbinder/commands/collection.rb +48 -26
- data/lib/bookbinder/commands/components/bind/directory_preparer.rb +33 -0
- data/lib/bookbinder/commands/components/bind/layout_preparer.rb +27 -0
- data/lib/bookbinder/commands/{bind/bind_options.rb → components/command_options.rb} +2 -2
- data/lib/bookbinder/commands/components/imprint/directory_preparer.rb +24 -0
- data/lib/bookbinder/commands/imprint.rb +62 -0
- data/lib/bookbinder/commands/watch.rb +0 -1
- data/lib/bookbinder/config/checkers/ditamap_presence_checker.rb +27 -0
- data/lib/bookbinder/config/checkers/section_presence_checker.rb +15 -0
- data/lib/bookbinder/config/configuration.rb +18 -27
- data/lib/bookbinder/config/dita_config_generator.rb +61 -0
- data/lib/bookbinder/config/fetcher.rb +4 -3
- data/lib/bookbinder/config/imprint/configuration.rb +24 -0
- data/lib/bookbinder/config/section_config.rb +4 -0
- data/lib/bookbinder/config/validator.rb +4 -2
- data/lib/bookbinder/dita_command_creator.rb +31 -16
- data/lib/bookbinder/ingest/section_repository.rb +2 -1
- data/lib/bookbinder/local_filesystem_accessor.rb +9 -2
- data/lib/bookbinder/preprocessing/dita_html_preprocessor.rb +94 -0
- data/lib/bookbinder/preprocessing/dita_pdf_preprocessor.rb +50 -0
- data/lib/bookbinder/preprocessing/dita_preprocessor.rb +2 -86
- data/lib/bookbinder/values/output_locations.rb +12 -0
- data/lib/bookbinder/values/section.rb +3 -1
- data/master_middleman/bookbinder_helpers.rb +7 -6
- metadata +13 -6
- data/lib/bookbinder/commands/bind/directory_preparer.rb +0 -31
- data/lib/bookbinder/commands/bind/layout_preparer.rb +0 -25
- data/lib/bookbinder/config/checkers/dita_section_checker.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dd2c6b574a77666001273739f0136dd0465e51c
|
4
|
+
data.tar.gz: 854939e21e33cc8bd187f2b7560966d3b0698cb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a56e6c5664b07e1b6bc862bc21ad716b299999a36baed3889fec5aa227ca8d8c962e3e71dd0281f6bd677dbdc64ff77e154d53ac6597658e7c2c27f3aa32208a
|
7
|
+
data.tar.gz: 863e5303ef86d674eba079dd486278e7e11e44f143140b858c8743c2567e31afe73db57315c1946b63b3a159222e460840648b0cbe4cc9a9fd83fb366b62c0cd
|
data/bookbinder.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'base64'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'bookbindery'
|
5
|
-
s.version = '7.
|
5
|
+
s.version = '7.5.0'
|
6
6
|
s.summary = 'Markdown to Rackup application documentation generator'
|
7
7
|
s.description = 'A command line utility to be run in Book repositories to stitch together their constituent Markdown repos into a static-HTML-serving application'
|
8
8
|
s.authors = ['Mike Grafton', 'Lucas Marks', 'Gavin Morgan', 'Nikhil Gajwani', 'Dan Wendorf', 'Brenda Chan', 'Matthew Boedicker', 'Frank Kotsianas', 'Elena Sharma', 'Christa Hartsock', 'Michael Trestman']
|
data/lib/bookbinder/cli.rb
CHANGED
@@ -36,7 +36,7 @@ module Bookbinder
|
|
36
36
|
end
|
37
37
|
|
38
38
|
begin
|
39
|
-
command_runner.run
|
39
|
+
command_runner.run(command_name, command_arguments)
|
40
40
|
|
41
41
|
rescue Config::CfCredentials::CredentialKeyError => e
|
42
42
|
colorized_streams[:err].puts "#{e.message}, in credentials.yml"
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'middleman-syntax'
|
2
2
|
|
3
|
-
require_relative '
|
4
|
-
require_relative 'bind/bind_options'
|
3
|
+
require_relative 'components/command_options'
|
5
4
|
require_relative 'naming'
|
6
5
|
|
7
6
|
module Bookbinder
|
@@ -10,22 +9,23 @@ module Bookbinder
|
|
10
9
|
include Commands::Naming
|
11
10
|
|
12
11
|
def initialize(base_streams,
|
13
|
-
output_locations,
|
14
|
-
config_fetcher,
|
15
|
-
config_decorator,
|
16
|
-
file_system_accessor,
|
17
|
-
|
18
|
-
sitemap_writer,
|
19
|
-
preprocessor,
|
20
|
-
cloner_factory,
|
21
|
-
section_repository,
|
22
|
-
directory_preparer)
|
12
|
+
output_locations: nil,
|
13
|
+
config_fetcher: nil,
|
14
|
+
config_decorator: nil,
|
15
|
+
file_system_accessor: nil,
|
16
|
+
middleman_runner: nil,
|
17
|
+
sitemap_writer: nil,
|
18
|
+
preprocessor: nil,
|
19
|
+
cloner_factory: nil,
|
20
|
+
section_repository: nil,
|
21
|
+
directory_preparer: nil)
|
22
|
+
|
23
23
|
@base_streams = base_streams
|
24
24
|
@output_locations = output_locations
|
25
25
|
@config_fetcher = config_fetcher
|
26
26
|
@config_decorator = config_decorator
|
27
27
|
@file_system_accessor = file_system_accessor
|
28
|
-
@
|
28
|
+
@middleman_runner = middleman_runner
|
29
29
|
@sitemap_writer = sitemap_writer
|
30
30
|
@preprocessor = preprocessor
|
31
31
|
@cloner_factory = cloner_factory
|
@@ -34,7 +34,7 @@ module Bookbinder
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def usage
|
37
|
-
["bind <local|remote> [--verbose] [--dita-flags
|
37
|
+
["bind <local|remote> [--verbose] [--dita-flags=\\\"<dita-option>=<value>\\\"]",
|
38
38
|
"Bind the sections specified in config.yml from <local> or <remote> into the final_app directory"]
|
39
39
|
end
|
40
40
|
|
@@ -47,7 +47,7 @@ module Bookbinder
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def run(cli_arguments)
|
50
|
-
bind_options =
|
50
|
+
bind_options = Components::CommandOptions.new(cli_arguments, base_streams).tap(&:validate!)
|
51
51
|
bind_config = config_fetcher.fetch_config
|
52
52
|
cloner = cloner_factory.produce(bind_options.local_repo_dir)
|
53
53
|
|
@@ -75,7 +75,7 @@ module Bookbinder
|
|
75
75
|
if file_system_accessor.file_exist?('redirects.rb')
|
76
76
|
file_system_accessor.copy('redirects.rb', output_locations.final_app_dir)
|
77
77
|
end
|
78
|
-
generation_result =
|
78
|
+
generation_result = middleman_runner.run(
|
79
79
|
["build", bind_options.verbosity].compact.join(" "),
|
80
80
|
streams: bind_options.streams,
|
81
81
|
output_locations: output_locations,
|
@@ -114,7 +114,7 @@ module Bookbinder
|
|
114
114
|
:preprocessor,
|
115
115
|
:section_repository,
|
116
116
|
:sitemap_writer,
|
117
|
-
:
|
117
|
+
:middleman_runner,
|
118
118
|
)
|
119
119
|
|
120
120
|
def subnavs(sections)
|
@@ -2,12 +2,15 @@ Dir.glob(File.expand_path('../../commands/*.rb', __FILE__)).each do |command_fil
|
|
2
2
|
require command_file
|
3
3
|
end
|
4
4
|
|
5
|
-
require_relative '../commands/bind/directory_preparer'
|
5
|
+
require_relative '../commands/components/bind/directory_preparer'
|
6
|
+
require_relative '../commands/components/imprint/directory_preparer'
|
6
7
|
require_relative '../config/configuration_decorator'
|
7
8
|
require_relative '../config/fetcher'
|
8
9
|
require_relative '../config/remote_yaml_credential_provider'
|
9
10
|
require_relative '../config/validator'
|
10
11
|
require_relative '../config/yaml_loader'
|
12
|
+
require_relative '../config/configuration'
|
13
|
+
require_relative '../config/imprint/configuration'
|
11
14
|
require_relative '../dita_command_creator'
|
12
15
|
require_relative '../dita_html_for_middleman_formatter'
|
13
16
|
require_relative '../html_document_manipulator'
|
@@ -16,7 +19,8 @@ require_relative '../ingest/section_repository'
|
|
16
19
|
require_relative '../local_filesystem_accessor'
|
17
20
|
require_relative '../middleman_runner'
|
18
21
|
require_relative '../postprocessing/sitemap_writer'
|
19
|
-
require_relative '../preprocessing/
|
22
|
+
require_relative '../preprocessing/dita_html_preprocessor'
|
23
|
+
require_relative '../preprocessing/dita_pdf_preprocessor'
|
20
24
|
require_relative '../preprocessing/link_to_site_gen_dir'
|
21
25
|
require_relative '../preprocessing/preprocessor'
|
22
26
|
require_relative '../subnav/subnav_generator_factory'
|
@@ -67,17 +71,18 @@ module Bookbinder
|
|
67
71
|
),
|
68
72
|
build_and_push_tarball,
|
69
73
|
bind,
|
70
|
-
Commands::PushFromLocal.new(streams, logger, configuration_fetcher, 'acceptance'),
|
74
|
+
Commands::PushFromLocal.new(streams, logger, configuration_fetcher(Config::Configuration), 'acceptance'),
|
71
75
|
push_local_to_staging,
|
72
|
-
Commands::PushToProd.new(streams, logger, configuration_fetcher, Dir.mktmpdir),
|
76
|
+
Commands::PushToProd.new(streams, logger, configuration_fetcher(Config::Configuration), Dir.mktmpdir),
|
73
77
|
Commands::RunPublishCI.new(bind, push_local_to_staging, build_and_push_tarball),
|
74
|
-
Commands::Punch.new(streams, configuration_fetcher, version_control_system),
|
78
|
+
Commands::Punch.new(streams, configuration_fetcher(Config::Configuration), version_control_system),
|
75
79
|
Commands::UpdateLocalDocRepos.new(
|
76
80
|
streams,
|
77
|
-
configuration_fetcher,
|
81
|
+
configuration_fetcher(Config::Configuration),
|
78
82
|
version_control_system
|
79
83
|
),
|
80
|
-
watch
|
84
|
+
watch,
|
85
|
+
imprint
|
81
86
|
]
|
82
87
|
end
|
83
88
|
|
@@ -88,34 +93,38 @@ module Bookbinder
|
|
88
93
|
def bind
|
89
94
|
@bind ||= Commands::Bind.new(
|
90
95
|
streams,
|
91
|
-
output_locations,
|
92
|
-
configuration_fetcher,
|
93
|
-
Config::ConfigurationDecorator.new(loader: config_loader, config_filename: 'bookbinder.yml'),
|
94
|
-
local_filesystem_accessor,
|
95
|
-
runner,
|
96
|
-
Postprocessing::SitemapWriter.build(logger, final_app_directory, sitemap_port),
|
97
|
-
Preprocessing::Preprocessor.new(
|
98
|
-
Preprocessing::
|
96
|
+
output_locations: output_locations,
|
97
|
+
config_fetcher: configuration_fetcher(Config::Configuration),
|
98
|
+
config_decorator: Config::ConfigurationDecorator.new(loader: config_loader, config_filename: 'bookbinder.yml'),
|
99
|
+
file_system_accessor: local_filesystem_accessor,
|
100
|
+
middleman_runner: runner,
|
101
|
+
sitemap_writer: Postprocessing::SitemapWriter.build(logger, final_app_directory, sitemap_port),
|
102
|
+
preprocessor: Preprocessing::Preprocessor.new(
|
103
|
+
Preprocessing::DitaHTMLPreprocessor.new(
|
99
104
|
local_filesystem_accessor,
|
100
105
|
subnav_generator_factory,
|
101
106
|
DitaHtmlForMiddlemanFormatter.new(local_filesystem_accessor, html_document_manipulator),
|
102
|
-
|
107
|
+
dita_command_creator,
|
103
108
|
sheller
|
104
109
|
),
|
105
110
|
Preprocessing::LinkToSiteGenDir.new(local_filesystem_accessor, subnav_generator_factory)
|
106
111
|
),
|
107
|
-
Ingest::ClonerFactory.new(streams, local_filesystem_accessor, version_control_system),
|
108
|
-
Ingest::SectionRepository.new,
|
109
|
-
directory_preparer
|
112
|
+
cloner_factory: Ingest::ClonerFactory.new(streams, local_filesystem_accessor, version_control_system),
|
113
|
+
section_repository: Ingest::SectionRepository.new,
|
114
|
+
directory_preparer: directory_preparer
|
110
115
|
)
|
111
116
|
end
|
112
117
|
|
118
|
+
def dita_command_creator
|
119
|
+
DitaCommandCreator.new(ENV['PATH_TO_DITA_OT_LIBRARY'])
|
120
|
+
end
|
121
|
+
|
113
122
|
def watch
|
114
123
|
@watch ||= Commands::Watch.new(
|
115
124
|
streams,
|
116
125
|
middleman_runner: runner,
|
117
126
|
output_locations: output_locations,
|
118
|
-
config_fetcher: configuration_fetcher,
|
127
|
+
config_fetcher: configuration_fetcher(Config::Configuration),
|
119
128
|
config_decorator: Config::ConfigurationDecorator.new(loader: config_loader, config_filename: 'bookbinder.yml'),
|
120
129
|
file_system_accessor: local_filesystem_accessor,
|
121
130
|
preprocessor: Preprocessing::Preprocessor.new(Preprocessing::LinkToSiteGenDir.new(local_filesystem_accessor, subnav_generator_factory)),
|
@@ -125,11 +134,23 @@ module Bookbinder
|
|
125
134
|
)
|
126
135
|
end
|
127
136
|
|
137
|
+
def imprint
|
138
|
+
Commands::Imprint.new(
|
139
|
+
streams,
|
140
|
+
output_locations: output_locations,
|
141
|
+
config_fetcher: configuration_fetcher(Config::Imprint::Configuration),
|
142
|
+
preprocessor: Preprocessing::Preprocessor.new(Preprocessing::DitaPDFPreprocessor.new(local_filesystem_accessor, dita_command_creator, sheller)),
|
143
|
+
cloner_factory: Ingest::ClonerFactory.new(streams, local_filesystem_accessor, version_control_system),
|
144
|
+
section_repository: Ingest::SectionRepository.new,
|
145
|
+
directory_preparer: Commands::Components::Imprint::DirectoryPreparer.new(local_filesystem_accessor)
|
146
|
+
)
|
147
|
+
end
|
148
|
+
|
128
149
|
def push_local_to_staging
|
129
150
|
@push_local_to_staging ||= Commands::PushFromLocal.new(
|
130
151
|
streams,
|
131
152
|
logger,
|
132
|
-
configuration_fetcher,
|
153
|
+
configuration_fetcher(Config::Configuration),
|
133
154
|
'staging'
|
134
155
|
)
|
135
156
|
end
|
@@ -137,15 +158,16 @@ module Bookbinder
|
|
137
158
|
def build_and_push_tarball
|
138
159
|
@build_and_push_tarball ||= Commands::BuildAndPushTarball.new(
|
139
160
|
streams,
|
140
|
-
configuration_fetcher
|
161
|
+
configuration_fetcher(Config::Configuration)
|
141
162
|
)
|
142
163
|
end
|
143
164
|
|
144
|
-
def configuration_fetcher
|
145
|
-
|
165
|
+
def configuration_fetcher(config_class)
|
166
|
+
Config::Fetcher.new(
|
146
167
|
Config::Validator.new(local_filesystem_accessor),
|
147
168
|
config_loader,
|
148
|
-
Config::RemoteYamlCredentialProvider.new(logger, version_control_system)
|
169
|
+
Config::RemoteYamlCredentialProvider.new(logger, version_control_system),
|
170
|
+
config_class
|
149
171
|
).tap do |fetcher|
|
150
172
|
fetcher.set_config_file_path './config.yml'
|
151
173
|
fetcher.set_config_dir_path './config/'
|
@@ -161,7 +183,7 @@ module Bookbinder
|
|
161
183
|
end
|
162
184
|
|
163
185
|
def directory_preparer
|
164
|
-
Commands::
|
186
|
+
Commands::Components::Bind::DirectoryPreparer.new(local_filesystem_accessor)
|
165
187
|
end
|
166
188
|
|
167
189
|
def output_locations
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'layout_preparer'
|
2
|
+
|
3
|
+
module Bookbinder
|
4
|
+
module Commands
|
5
|
+
module Components
|
6
|
+
module Bind
|
7
|
+
class DirectoryPreparer
|
8
|
+
def initialize(fs)
|
9
|
+
@fs = fs
|
10
|
+
end
|
11
|
+
|
12
|
+
def prepare_directories(config, gem_root, output_locations, cloner, ref_override: nil)
|
13
|
+
fs.remove_directory(output_locations.output_dir)
|
14
|
+
fs.empty_directory(output_locations.final_app_dir)
|
15
|
+
|
16
|
+
copy_directory_from_gem(gem_root, 'template_app', output_locations.final_app_dir)
|
17
|
+
copy_directory_from_gem(gem_root, 'master_middleman', output_locations.site_generator_home)
|
18
|
+
|
19
|
+
LayoutPreparer.new(fs).prepare(output_locations, cloner, ref_override, config)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
attr_reader :fs
|
25
|
+
|
26
|
+
def copy_directory_from_gem(gem_root, dir, output_dir)
|
27
|
+
fs.copy_contents(File.join(gem_root, dir), output_dir)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Bookbinder
|
2
|
+
module Commands
|
3
|
+
module Components
|
4
|
+
module Bind
|
5
|
+
class LayoutPreparer
|
6
|
+
def initialize(fs)
|
7
|
+
@fs = fs
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :fs
|
11
|
+
|
12
|
+
def prepare(output_locations, cloner, ref_override, config)
|
13
|
+
if config.has_option?('layout_repo')
|
14
|
+
|
15
|
+
cloned_repo = cloner.call(source_repo_name: config.layout_repo,
|
16
|
+
source_ref: ref_override || config.layout_repo_ref,
|
17
|
+
destination_parent_dir: Dir.mktmpdir)
|
18
|
+
|
19
|
+
fs.copy_contents(cloned_repo.path, output_locations.site_generator_home)
|
20
|
+
end
|
21
|
+
fs.copy_contents(File.absolute_path('master_middleman'), output_locations.site_generator_home)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Bookbinder
|
2
|
+
module Commands
|
3
|
+
module Components
|
4
|
+
module Imprint
|
5
|
+
class DirectoryPreparer
|
6
|
+
def initialize(fs)
|
7
|
+
@fs = fs
|
8
|
+
end
|
9
|
+
|
10
|
+
def prepare_directories(output_locations)
|
11
|
+
fs.empty_directory(output_locations.output_dir)
|
12
|
+
fs.make_directory(output_locations.pdf_from_preprocessing_dir)
|
13
|
+
|
14
|
+
fs.empty_directory(output_locations.pdf_artifact_dir)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :fs
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require_relative 'components/command_options'
|
2
|
+
require_relative 'naming'
|
3
|
+
|
4
|
+
module Bookbinder
|
5
|
+
module Commands
|
6
|
+
class Imprint
|
7
|
+
include Commands::Naming
|
8
|
+
|
9
|
+
def initialize(base_streams,
|
10
|
+
output_locations: nil,
|
11
|
+
config_fetcher: nil,
|
12
|
+
preprocessor: nil,
|
13
|
+
cloner_factory: nil,
|
14
|
+
section_repository: nil,
|
15
|
+
directory_preparer: nil)
|
16
|
+
|
17
|
+
@base_streams = base_streams
|
18
|
+
@output_locations = output_locations
|
19
|
+
@config_fetcher = config_fetcher
|
20
|
+
@preprocessor = preprocessor
|
21
|
+
@cloner_factory = cloner_factory
|
22
|
+
@section_repository = section_repository
|
23
|
+
@directory_preparer = directory_preparer
|
24
|
+
end
|
25
|
+
|
26
|
+
def usage
|
27
|
+
["imprint <local|remote> [--verbose] [--dita-flags=\\\"<dita-option>=<value>\\\"]", "Generate a PDF for a given book"]
|
28
|
+
end
|
29
|
+
|
30
|
+
def run(cli_arguments)
|
31
|
+
options = Components::CommandOptions.new(cli_arguments, base_streams).tap(&:validate!)
|
32
|
+
config = config_fetcher.fetch_config
|
33
|
+
cloner = cloner_factory.produce(options.local_repo_dir)
|
34
|
+
|
35
|
+
directory_preparer.prepare_directories(output_locations)
|
36
|
+
|
37
|
+
sections = section_repository.fetch(
|
38
|
+
configured_sections: config.sections,
|
39
|
+
destination_dir: output_locations.cloned_preprocessing_dir,
|
40
|
+
ref_override: options.ref_override,
|
41
|
+
cloner: cloner,
|
42
|
+
streams: base_streams
|
43
|
+
)
|
44
|
+
|
45
|
+
preprocessor.preprocess(
|
46
|
+
sections,
|
47
|
+
output_locations,
|
48
|
+
options: options.options,
|
49
|
+
output_streams: options.streams,
|
50
|
+
config: config
|
51
|
+
)
|
52
|
+
|
53
|
+
options.streams[:success].puts "Bookbinder printed your pdf(s) into #{output_locations.pdf_artifact_dir}"
|
54
|
+
0
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
attr_reader :preprocessor, :output_locations, :section_repository, :base_streams, :config_fetcher, :directory_preparer, :cloner_factory
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Bookbinder
|
2
|
+
module Config
|
3
|
+
module Checkers
|
4
|
+
class DitamapPresenceChecker
|
5
|
+
DitamapLocationError = Class.new(RuntimeError)
|
6
|
+
|
7
|
+
def check(config)
|
8
|
+
if any_sections_missing_ditamaps?(config.sections)
|
9
|
+
DitamapLocationError.new(
|
10
|
+
"You must have a 'ditamap_location' for each key in dita_sections."
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def any_sections_missing_ditamaps?(sections)
|
18
|
+
sections.any? do |s|
|
19
|
+
if s.preprocessor_config.has_key?('ditamap_location')
|
20
|
+
s.preprocessor_config['ditamap_location'].nil? || s.preprocessor_config['ditamap_location'].empty?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|