sublime.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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='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('../build/includes/' + include + '.json','r') as f: files = json.load(f)
  26. for filename in files:
  27. filename = '../../' + filename;
  28. with open(filename, 'r') as f:
  29. string = f.read()
  30. match = re.search('THREE.(\w+)[\ ]+?=[\ ]+?function[\ ]+\(([\w\,\ ]+)?\)', string)
  31. if match:
  32. name = match.group(1)
  33. parameters = match.group(2)
  34. if parameters is None:
  35. parameters = ''
  36. else:
  37. array = parameters.split( ',' )
  38. for i in range(len(array)):
  39. array[i] = '${'+str(i+1)+':'+array[i].strip()+'}' # ${1:param}
  40. parameters = ' '+', '.join(array)+' '
  41. tmp.write('\t\t{ "trigger": "THREE.'+name+'", "contents": "THREE.'+name+'('+parameters+')$0" },\n' )
  42. tmp.write("\t\t\"THREE\"\n\t]\n}")
  43. tmp.close()
  44. # save
  45. shutil.copy(path, output)
  46. os.chmod(output, 0o664); # temp files would usually get 0600
  47. if __name__ == "__main__":
  48. main()