diff options
| author | milde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2022-01-25 16:39:07 +0000 |
|---|---|---|
| committer | milde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2022-01-25 16:39:07 +0000 |
| commit | 57b588c6997f30ab233e25b153360c6ce966636a (patch) | |
| tree | 54d04629f52056fc9108c3812d845b494795dcff /docutils/tools | |
| parent | 0c131231eba714d87c6305de1d7e383f1e355e5c (diff) | |
| download | docutils-57b588c6997f30ab233e25b153360c6ce966636a.tar.gz | |
docutils-cli: Use "SettingsSpec" interface for config file parsing.
Use the high-level interface provided by docutils.core
instead of the low-level classes/functions in docutils.frontend
to get reader/parser/writer names from standard configuration files.
git-svn-id: https://svn.code.sf.net/p/docutils/code/trunk@8965 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils/tools')
| -rwxr-xr-x | docutils/tools/docutils-cli.py | 111 |
1 files changed, 53 insertions, 58 deletions
diff --git a/docutils/tools/docutils-cli.py b/docutils/tools/docutils-cli.py index f79a5c060..dac39caab 100755 --- a/docutils/tools/docutils-cli.py +++ b/docutils/tools/docutils-cli.py @@ -25,71 +25,66 @@ except: import argparse import sys -from docutils.core import publish_cmdline, default_description -from docutils.frontend import ConfigParser, OptionParser - -config_section = 'docutils-cli application' - -def config_settings_from_files(): - """Return dict with default settings for the docutils-cli front end. - - Read default values for the three docutils-cli options from the - [docutils-cli application] section in standard configuration files. - - Command-line options are defined separately, using the "argparse" module - to allow two-stage parsing of the command line. - """ - settings = {'reader': 'standalone', - 'parser': 'rst', - 'writer': 'html5' - } - option_parser = OptionParser() - config_parser = ConfigParser() - config_files = option_parser.get_standard_config_files() - config_parser.read(config_files, option_parser) - settings.update(config_parser.get_section(config_section)) - return settings - -default_settings = config_settings_from_files() - -description = u'Generate documents from reStructuredText or Markdown sources.' - -epilog = (u'Further optional arguments are added by the selected ' - u'components, the list below adapts to your selection.' - ) - -parser = argparse.ArgumentParser(add_help=False, - description=description, epilog=epilog, - formatter_class=argparse.ArgumentDefaultsHelpFormatter) - -parser.add_argument('source', nargs='?') -parser.add_argument('destination', nargs='?') -parser.add_argument('--reader', help=u'reader name', - default=default_settings['reader']) -parser.add_argument('--parser', help=u'parser name', - default=default_settings['parser']) -parser.add_argument('--writer', help=u'writer name', - default=default_settings['writer']) - -(args, remainder) = parser.parse_known_args() - -# push back positional arguments -if args.destination: - remainder.insert(0, args.destination) -if args.source: - remainder.insert(0, args.source) +import docutils +from docutils.core import Publisher, publish_cmdline + +usage = '%(prog)s [options] [<source> [<destination>]]' + +description = ('Convert plaintext documentation into useful formats.\n' + 'Reads from <source> (default is stdin) ' + 'and writes to <destination> (default is stdout).') + +epilog = ('Further optional arguments depend on the selected components. ' + 'See <https://docutils.sourceforge.io/docs/user/config.html> ' + 'for the full reference. The list below adapts to your selection.') + + +class CliSettingsSpec(docutils.SettingsSpec): + """Additional runtime settings & command-line options for the CLI.""" + + settings_spec = ( + 'Docutils CLI Options', + None, + (# 'help text', [<option strings>], {<keyword arguments>} + ('', ['--reader'], {'default': 'standalone'}), + ('', ['--parser'], {'default': 'restructuredtext'}), + ('', ['--writer'], {'default': 'html'}), + ) + ) + config_section = 'docutils-cli application' + config_section_dependencies = ('applications',) + +# Get default components from configuration files +# default to "html5" writer for backwards compatibility +default_settings = Publisher().get_settings(settings_spec=CliSettingsSpec, + writer='html5') + + +argparser = argparse.ArgumentParser( + usage=usage, description=description, epilog=epilog, + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + add_help=False,) + +argparser.add_argument('--reader', help='reader name', + default=default_settings.reader) +argparser.add_argument('--parser', help='parser name', + default=default_settings.parser) +argparser.add_argument('--writer', help='writer name', + default=default_settings.writer) + +(args, remainder) = argparser.parse_known_args() if '-h' in sys.argv or '--help' in sys.argv: - print(parser.format_help()) - print('') + print(argparser.format_help()) try: publish_cmdline(reader_name=args.reader, parser_name=args.parser, writer_name=args.writer, - config_section=config_section, - description=default_description, - argv=remainder) + config_section=CliSettingsSpec.config_section, + argv=remainder, + usage='', + description='') except ImportError as error: print('%s.' % error) if '--traceback' in remainder: |
