diff options
Diffstat (limited to 'ext/librethinkdbxx/reql/add_docs.py')
-rw-r--r-- | ext/librethinkdbxx/reql/add_docs.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/reql/add_docs.py b/ext/librethinkdbxx/reql/add_docs.py new file mode 100644 index 00000000..67f08df8 --- /dev/null +++ b/ext/librethinkdbxx/reql/add_docs.py @@ -0,0 +1,80 @@ +from sys import stdin, stderr, stdout, argv +from re import match, sub + +docs = {} + +for line in open(argv[1]): + res = match('^\t\(([^,]*), (.*)\),$', line) + if res: + fullname = res.group(1) + docs[fullname.split('.')[-1]] = eval(res.group(2)).decode('utf-8') + +translate_name = { + 'name': None, + 'delete_': 'delete', + 'union_': 'union', + 'operator[]': '__getitem__', + 'operator+': '__add__', + 'operator-': '__sub__', + 'operator*': '__mul__', + 'operator/': '__div__', + 'operator%': '__mod__', + 'operator&&': 'and_', + 'operator||': 'or_', + 'operator==': '__eq__', + 'operator!=': '__ne__', + 'operator>': '__gt__', + 'operator>=': '__ge__', + 'operator<': '__lt__', + 'operator<=': '__le__', + 'operator!': 'not_', + 'default_': 'default', + 'array': None, + 'desc': None, + 'asc': None, + 'maxval': None, + 'minval': None, + 'january': None, + 'february': None, + 'march': None, + 'april': None, + 'may': None, + 'june': None, + 'july': None, + 'august': None, + 'september': None, + 'october': None, + 'november': None, + 'december': None, + 'monday': None, + 'tuesday': None, + 'wednesday': None, + 'thursday': None, + 'friday': None, + 'saturday': None, + 'sunday': None, +} + +def print_docs(name, line): + py_name = translate_name.get(name, name) + if py_name in docs: + indent = match("^( *)", line).group(1) + stdout.write('\n') + # TODO: convert the examples to C++ + for line in docs[py_name].split('\n'): + stdout.write(indent + "// " + line + '\n') + elif py_name: + stderr.write('Warning: no docs for ' + py_name + ': ' + line) + +stdout.write('// Contains documentation copied as-is from the Python driver') + +for line in stdin: + res = match("^ *CO?[0-9_]+\(([^,)]+)|extern Query (\w+)|^ *// *(\$)doc\((\w+)\) *$", line) + if res: + name = res.group(1) or res.group(2) or res.group(4) + print_docs(name, line) + if not res.group(3): + stdout.write(line) + else: + stdout.write(line) + |