]> www.ginac.de Git - ginac.git/blobdiff - ginsh/ginsh_op_help.py
[build] Rewrite ginsh related sed scripts in python.
[ginac.git] / ginsh / ginsh_op_help.py
diff --git a/ginsh/ginsh_op_help.py b/ginsh/ginsh_op_help.py
new file mode 100755 (executable)
index 0000000..cdf63b0
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+# 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)
+