add_docs.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from sys import stdin, stderr, stdout, argv
  2. from re import match, sub
  3. docs = {}
  4. for line in open(argv[1]):
  5. res = match('^\t\(([^,]*), (.*)\),$', line)
  6. if res:
  7. fullname = res.group(1)
  8. docs[fullname.split('.')[-1]] = eval(res.group(2)).decode('utf-8')
  9. translate_name = {
  10. 'name': None,
  11. 'delete_': 'delete',
  12. 'union_': 'union',
  13. 'operator[]': '__getitem__',
  14. 'operator+': '__add__',
  15. 'operator-': '__sub__',
  16. 'operator*': '__mul__',
  17. 'operator/': '__div__',
  18. 'operator%': '__mod__',
  19. 'operator&&': 'and_',
  20. 'operator||': 'or_',
  21. 'operator==': '__eq__',
  22. 'operator!=': '__ne__',
  23. 'operator>': '__gt__',
  24. 'operator>=': '__ge__',
  25. 'operator<': '__lt__',
  26. 'operator<=': '__le__',
  27. 'operator!': 'not_',
  28. 'default_': 'default',
  29. 'array': None,
  30. 'desc': None,
  31. 'asc': None,
  32. 'maxval': None,
  33. 'minval': None,
  34. 'january': None,
  35. 'february': None,
  36. 'march': None,
  37. 'april': None,
  38. 'may': None,
  39. 'june': None,
  40. 'july': None,
  41. 'august': None,
  42. 'september': None,
  43. 'october': None,
  44. 'november': None,
  45. 'december': None,
  46. 'monday': None,
  47. 'tuesday': None,
  48. 'wednesday': None,
  49. 'thursday': None,
  50. 'friday': None,
  51. 'saturday': None,
  52. 'sunday': None,
  53. }
  54. def print_docs(name, line):
  55. py_name = translate_name.get(name, name)
  56. if py_name in docs:
  57. indent = match("^( *)", line).group(1)
  58. stdout.write('\n')
  59. # TODO: convert the examples to C++
  60. for line in docs[py_name].split('\n'):
  61. stdout.write(indent + "// " + line + '\n')
  62. elif py_name:
  63. stderr.write('Warning: no docs for ' + py_name + ': ' + line)
  64. stdout.write('// Contains documentation copied as-is from the Python driver')
  65. for line in stdin:
  66. res = match("^ *CO?[0-9_]+\(([^,)]+)|extern Query (\w+)|^ *// *(\$)doc\((\w+)\) *$", line)
  67. if res:
  68. name = res.group(1) or res.group(2) or res.group(4)
  69. print_docs(name, line)
  70. if not res.group(3):
  71. stdout.write(line)
  72. else:
  73. stdout.write(line)