/uClinux-dist/user/python/Tools/idle/eventparse.py

https://github.com/labx-technologies-llc/mb-linux-labx
Python | 93 lines | 86 code | 5 blank | 2 comment | 24 complexity | 75e05a05741621527617b60a9baa27a6 MD5 | raw file
  1. #! /usr/bin/env python
  2. """Parse event definitions out of comments in source files."""
  3. import re
  4. import sys
  5. import os
  6. import string
  7. import getopt
  8. import glob
  9. import fileinput
  10. import pprint
  11. def main():
  12. hits = []
  13. sublist = []
  14. args = sys.argv[1:]
  15. if not args:
  16. args = filter(lambda s: 'A' <= s[0] <= 'Z', glob.glob("*.py"))
  17. if not args:
  18. print "No arguments, no [A-Z]*.py files."
  19. return 1
  20. for line in fileinput.input(args):
  21. if line[:2] == '#$':
  22. if not sublist:
  23. sublist.append('file %s' % fileinput.filename())
  24. sublist.append('line %d' % fileinput.lineno())
  25. sublist.append(string.strip(line[2:-1]))
  26. else:
  27. if sublist:
  28. hits.append(sublist)
  29. sublist = []
  30. if sublist:
  31. hits.append(sublist)
  32. sublist = []
  33. dd = {}
  34. for sublist in hits:
  35. d = {}
  36. for line in sublist:
  37. words = string.split(line, None, 1)
  38. if len(words) != 2:
  39. continue
  40. tag = words[0]
  41. l = d.get(tag, [])
  42. l.append(words[1])
  43. d[tag] = l
  44. if d.has_key('event'):
  45. keys = d['event']
  46. if len(keys) != 1:
  47. print "Multiple event keys in", d
  48. print 'File "%s", line %d' % (d['file'], d['line'])
  49. key = keys[0]
  50. if dd.has_key(key):
  51. print "Duplicate event in", d
  52. print 'File "%s", line %d' % (d['file'], d['line'])
  53. return
  54. dd[key] = d
  55. else:
  56. print "No event key in", d
  57. print 'File "%s", line %d' % (d['file'], d['line'])
  58. winevents = getevents(dd, "win")
  59. unixevents = getevents(dd, "unix")
  60. save = sys.stdout
  61. f = open("keydefs.py", "w")
  62. try:
  63. sys.stdout = f
  64. print "windows_keydefs = \\"
  65. pprint.pprint(winevents)
  66. print
  67. print "unix_keydefs = \\"
  68. pprint.pprint(unixevents)
  69. finally:
  70. sys.stdout = save
  71. f.close()
  72. def getevents(dd, key):
  73. res = {}
  74. events = dd.keys()
  75. events.sort()
  76. for e in events:
  77. d = dd[e]
  78. if d.has_key(key) or d.has_key("all"):
  79. list = []
  80. for x in d.get(key, []) + d.get("all", []):
  81. list.append(x)
  82. if key == "unix" and x[:5] == "<Alt-":
  83. x = "<Meta-" + x[5:]
  84. list.append(x)
  85. res[e] = list
  86. return res
  87. if __name__ == '__main__':
  88. sys.exit(main())