summaryrefslogtreecommitdiff
path: root/ext/librethinkdbxx/reql/add_docs.py
blob: 67f08df8daba93d2983e3c46f176394d9932c09d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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)