Opts.py: support multiline usage text
This commit is contained in:
parent
e10f5d19ac
commit
0d31bf84af
2 changed files with 27 additions and 9 deletions
|
|
@ -35,7 +35,8 @@ opt = UserOpts()
|
|||
from .util import *
|
||||
|
||||
def usage():
|
||||
Die(1,f'USAGE: {g.prog_name} {usage_txt}')
|
||||
from mmgen.share import Opts
|
||||
Die(1,Opts.make_usage_str(g.prog_name,'user',usage_data))
|
||||
|
||||
def version():
|
||||
Die(0,fmt("""
|
||||
|
|
@ -268,8 +269,8 @@ def init(opts_data=None,add_opts=None,init_opts=None,opt_filter=None,parse_only=
|
|||
setattr(opt,o,po.user_opts[o] if o in po.user_opts else None)
|
||||
|
||||
# Make this available to usage()
|
||||
global usage_txt
|
||||
usage_txt = opts_data['text']['usage']
|
||||
global usage_data
|
||||
usage_data = opts_data['text'].get('usage2') or opts_data['text']['usage']
|
||||
|
||||
if opt.version:
|
||||
version() # exits
|
||||
|
|
|
|||
|
|
@ -25,9 +25,25 @@ from collections import namedtuple
|
|||
|
||||
pat = re.compile(r'^-([a-zA-Z0-9-]), --([a-zA-Z0-9-]{2,64})(=| )(.+)')
|
||||
|
||||
def make_usage_str(prog_name,caller,data):
|
||||
lines = [data.strip()] if type(data) == str else data
|
||||
indent,col1_w = {
|
||||
'help': (2,len(prog_name)+1),
|
||||
'user': (0,len('USAGE:')),
|
||||
}[caller]
|
||||
def gen():
|
||||
ulbl = 'USAGE:'
|
||||
for line in lines:
|
||||
yield '{:{w}} {} {}'.format(ulbl,prog_name,line,w=col1_w)
|
||||
ulbl = ''
|
||||
return ('\n'+(' '*indent)).join(gen())
|
||||
|
||||
def usage(opts_data):
|
||||
print('USAGE: {} {}'.format(opts_data['prog_name'], opts_data['usage']))
|
||||
sys.exit(2)
|
||||
print(make_usage_str(
|
||||
prog_name = opts_data['prog_name'],
|
||||
caller = 'user',
|
||||
data = opts_data['text'].get('usage2') or opts_data['text']['usage'] ))
|
||||
sys.exit(1)
|
||||
|
||||
def print_help(proto,po,opts_data,opt_filter):
|
||||
|
||||
|
|
@ -59,8 +75,8 @@ def print_help(proto,po,opts_data,opt_filter):
|
|||
yield d[arg] if arg in d else text
|
||||
|
||||
def gen_text():
|
||||
yield ' {:<{p}} {}'.format(pn.upper()+':',t['desc'].strip(),p=len(pn)+1)
|
||||
yield '{:<{p}} {} {}'.format('USAGE:',pn,t['usage'].strip(),p=len(pn)+1)
|
||||
yield ' {} {}'.format(pn.upper()+':',t['desc'].strip())
|
||||
yield make_usage_str(pn,'help',t.get('usage2') or t['usage'])
|
||||
yield opts_type.upper().replace('_',' ') + ':'
|
||||
|
||||
# process code for options
|
||||
|
|
@ -141,8 +157,9 @@ def parse_opts(opts_data,opt_filter=None,parse_only=False):
|
|||
short_opts.append(m[1] + ('',':')[m[3] == '='])
|
||||
long_opts.append(m[2] + ('','=')[m[3] == '='])
|
||||
|
||||
for opts_type in ('options','long_options'):
|
||||
parse_lines(opts_type)
|
||||
parse_lines('options')
|
||||
if 'long_options' in opts_data['text']:
|
||||
parse_lines('long_options')
|
||||
|
||||
uopts,uargs = process_uopts(opts_data,short_opts,long_opts)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue