# encoding: utf-8 # Convert help for ginsh operators from man page to C source import sys, re, optparse rxStart = re.compile('^.*GINSH_OP_HELP_START$') rxEnd = re.compile('^.*GINSH_OP_HELP_END$') fcnRx = re.compile('^[.]B\s+') minusRx = re.compile('\\\\[-]') codeFmt = 'insert_help("operators", "%s\\t" "%s");\n' def extractHelp(inp, out): sym, synopsis = None, None seenStart = False for l in inp: l = l.strip() if not seenStart: if rxStart.match(l): seenStart = True continue if rxEnd.match(l): if sym is not None: out.write(codeFmt % ( sym, synopsis )) break if fcnRx.match(l): l = fcnRx.sub('', l) sym = minusRx.sub('-', l) elif l.lower() == '.tp': out.write(codeFmt % ( sym, synopsis )) sym, synopsis = None, None else: synopsis = l def main(): op = optparse.OptionParser() op.add_option('-o', dest = 'outfile') options, args = op.parse_args() outfile = sys.stdout infile = sys.stdin if not options.outfile is None: outfile = open(options.outfile, 'wt') if len(args) >= 1: infile = open(args[0]) extractHelp(infile, outfile) if infile != sys.stdin: infile.close() outfile.flush() if outfile != sys.stdout: outfile.close() if __name__ == "__main__": main() sys.exit(0)