summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdocutils/tools/docutils-cli.py111
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: