summaryrefslogtreecommitdiff
path: root/docutils/tools/buildhtml.py
diff options
context:
space:
mode:
authorgoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2003-09-01 15:02:40 +0000
committergoodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2003-09-01 15:02:40 +0000
commitc28887747b5edde84313ce610ef2dde15b3f2f2f (patch)
tree7b8666de295b141d0d35f76d0f0a2c67287ecd7d /docutils/tools/buildhtml.py
parentd35436594cd414f0ecbd157f811f9ac82d826df1 (diff)
downloaddocutils-c28887747b5edde84313ce610ef2dde15b3f2f2f.tar.gz
Completed support for the "--prune" option.
git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@1659 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils/tools/buildhtml.py')
-rwxr-xr-xdocutils/tools/buildhtml.py50
1 files changed, 34 insertions, 16 deletions
diff --git a/docutils/tools/buildhtml.py b/docutils/tools/buildhtml.py
index c3bd7bd39..62e3ba9f7 100755
--- a/docutils/tools/buildhtml.py
+++ b/docutils/tools/buildhtml.py
@@ -54,15 +54,21 @@ class SettingsSpec(docutils.SettingsSpec):
None,
(('Recursively scan subdirectories for files to process. This is '
'the default.',
- ['--recurse'], {'action': 'store_true', 'default': 1}),
+ ['--recurse'],
+ {'action': 'store_true', 'default': 1,
+ 'validator': frontend.validate_boolean}),
('Do not scan subdirectories for files to process.',
['--local'], {'dest': 'recurse', 'action': 'store_false'}),
('Do not process files in <directory>. This option may be used '
'more than once to specify multiple directories.',
- ['--prune'], {'metavar': '<directory>', 'action': 'append'}),
+ ['--prune'],
+ {'metavar': '<directory>', 'action': 'append',
+ 'validator': frontend.validate_colon_separated_string_list}),
('Work silently (no progress messages). Independent of "--quiet".',
- ['--silent'], {'action': 'store_true'}),))
+ ['--silent'],
+ {'action': 'store_true', 'validator': frontend.validate_boolean}),))
+ relative_path_settings = ('prune',)
config_section = 'buildhtml application'
config_section_dependencies = ('applications',)
@@ -102,9 +108,9 @@ class Builder:
'': Struct(components=(pep.Reader, rst.Parser, pep_html.Writer,
SettingsSpec)),
'.txt': Struct(components=(rst.Parser, standalone.Reader,
- html4css1.Writer)),
+ html4css1.Writer, SettingsSpec)),
'PEPs': Struct(components=(rst.Parser, pep.Reader,
- pep_html.Writer))}
+ pep_html.Writer, SettingsSpec))}
"""Publisher-specific settings. Key '' is for the front-end script
itself. ``self.publishers[''].components`` must contain a superset of
all components used by individual publishers."""
@@ -143,19 +149,18 @@ class Builder:
Assumes the current directory has been set.
"""
publisher = self.publishers[publisher_name]
- settings = copy.deepcopy(publisher.setting_defaults)
- settings.__dict__.update(self.config_settings)
+ settings = frontend.DictUpdater(publisher.option_parser,
+ publisher.setting_defaults.__dict__)
+ settings.update(self.config_settings)
if directory:
- config_parser = frontend.ConfigParser()
- config_parser.read(os.path.join(directory, 'docutils.conf'),
- publisher.option_parser)
- local_config = config_parser.get_section('options')
+ local_config = publisher.option_parser.get_config_file_settings(
+ os.path.join(directory, 'docutils.conf'))
frontend.make_paths_absolute(
local_config, publisher.option_parser.relative_path_settings,
directory)
- settings.__dict__.update(local_config)
- settings.__dict__.update(self.settings_spec.__dict__)
- return settings
+ settings.update(local_config)
+ settings.update(self.settings_spec.__dict__)
+ return frontend.Values(settings.data)
def run(self, directory=None, recurse=1):
recurse = recurse and self.initial_settings.recurse
@@ -169,23 +174,34 @@ class Builder:
os.path.walk(directory, self.visit, recurse)
def visit(self, recurse, directory, names):
+ settings = self.get_settings('', directory)
+ if settings.prune and (os.path.abspath(directory) in settings.prune):
+ print >>sys.stderr, '/// ...Skipping directory (pruned):', directory
+ sys.stderr.flush()
+ names[:] = []
+ return
if not self.initial_settings.silent:
print >>sys.stderr, '/// Processing directory:', directory
sys.stderr.flush()
peps_found = 0
+ prune = 0
for name in names:
if name.endswith('.txt'):
if name.startswith('pep-'):
peps_found = 1
else:
- self.process_txt(directory, name)
- if peps_found:
+ prune = self.process_txt(directory, name)
+ if prune:
+ break
+ if peps_found and not prune:
self.process_peps(directory)
if not recurse:
del names[:]
def process_txt(self, directory, name):
settings = self.get_settings('.txt', directory)
+ if settings.prune and (directory in settings.prune):
+ return 1
settings._source = os.path.normpath(os.path.join(directory, name))
settings._destination = settings._source[:-4]+'.html'
if not self.initial_settings.silent:
@@ -207,6 +223,8 @@ class Builder:
import pep2html
settings = self.get_settings('PEPs', directory)
+ if settings.prune and (directory in settings.prune):
+ return 1
old_directory = os.getcwd()
os.chdir(directory)
if self.initial_settings.silent: