sublime.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env python
  2. import sys
  3. if sys.version_info < (2, 7):
  4. print("This script requires at least Python 2.7.")
  5. print("Please, update to a newer version: http://www.python.org/download/releases/")
  6. exit()
  7. import argparse
  8. import json
  9. import os
  10. import re
  11. import shutil
  12. import tempfile
  13. def main(argv=None):
  14. parser = argparse.ArgumentParser()
  15. parser.add_argument('--include', action='append', required=True)
  16. parser.add_argument('--output', default='editors/sublimetext2/threejs.sublime-completions')
  17. args = parser.parse_args()
  18. output = args.output
  19. # parsing
  20. print(' * Generating ' + output)
  21. fd, path = tempfile.mkstemp()
  22. tmp = open(path, 'w')
  23. tmp.write('{\n\t"scope": "source.js,source.js.embedded.html,source.coffee",\n\t"version": "r55",\n\t"completions":\n\t[\n')
  24. for include in args.include:
  25. with open('includes/' + include + '.json','r') as f: files = json.load(f)
  26. for filename in files:
  27. with open(filename, 'r') as f:
  28. string = f.read()
  29. match = re.search('THREE.(\w+)[\ ]+?=[\ ]+?function[\ ]+\(([\w\,\ ]+)?\)', string)
  30. if match:
  31. name = match.group(1)
  32. parameters = match.group(2)
  33. if parameters is None:
  34. parameters = ''
  35. else:
  36. array = parameters.split( ',' )
  37. for i in range(len(array)):
  38. array[i] = '${'+str(i+1)+':'+array[i].strip()+'}' # ${1:param}
  39. parameters = ' '+', '.join(array)+' '
  40. tmp.write('\t\t{ "trigger": "THREE.'+name+'", "contents": "THREE.'+name+'('+parameters+')$0" },\n' )
  41. tmp.write("\t\t\"THREE\"\n\t]\n}")
  42. tmp.close()
  43. # save
  44. shutil.copy(path, output)
  45. os.chmod(output, 0o664); # temp files would usually get 0600
  46. if __name__ == "__main__":
  47. main()