cb2t.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import sys
  5. import argparse
  6. parser = argparse.ArgumentParser(description="Conversor de llaves a tabulaciones")
  7. requiredNamed = parser.add_argument_group('required arguments')
  8. requiredNamed.add_argument("-i", "--input", help="Nombre de archivo a procesar. Si contiene espacios, encerrar entre comillas dobles", required=True)
  9. parser.add_argument("-o", "--output", help="Nombre de archivo destino. Si contiene espacios, encerrar entre comillas dobles. Default: \"output.py\"", default="output.py")
  10. parser.add_argument("-t", "--tab", help="Caracter de tabulación. Valores aceptados: \"tabs\" para \\t, o \"spaces\" para cuatro espacios. Default: \"tabs\"", choices=["tabs","spaces"], default="tabs")
  11. parser.add_argument("-x", "--execute", help="Ejecutar el script al terminar. Default: false", choices=["true","false"], default="false")
  12. args = parser.parse_args()
  13. numTabs=0
  14. nextTabs=0
  15. tabSimbol="\t" if(args.tab=="tabs") else " "
  16. returnSimbol="\n"
  17. blockSimbol=""
  18. f = open(args.input)
  19. g = open(args.output,"w")
  20. for linea in f:
  21. if len(linea)>2 and linea[-2:]=="\r\n":
  22. returnSimbol="\r\n"
  23. elif linea[-1]=="\r":
  24. returnSimbol="\r"
  25. else:
  26. returnSimbol="\n"
  27. while len(linea)>=len(returnSimbol) and linea[-len(returnSimbol)]==returnSimbol:
  28. linea=linea[:-len(returnSimbol)]
  29. linea=linea.strip()
  30. if len(linea)>0:
  31. inicio=linea[0]
  32. else:
  33. g.write(returnSimbol)
  34. inicio=""
  35. if inicio=="{" or inicio=="}":
  36. while inicio=="{" or inicio=="}":
  37. if inicio == "{":
  38. numTabs=numTabs+1
  39. linea=linea[1:].strip()
  40. elif inicio=="}":
  41. numTabs=numTabs-1
  42. linea=linea[1:].strip()
  43. if len(linea)>0:
  44. inicio=linea[0]
  45. else:
  46. inicio=""
  47. if len(linea)>0:
  48. fin=linea[-1]
  49. else:
  50. fin=""
  51. if fin=="{" or fin=="}":
  52. while fin=="{" or fin=="}":
  53. if fin=="{":
  54. linea=linea[:-1].strip()
  55. nextTabs=nextTabs+1
  56. blockSimbol=":"
  57. elif fin=="}":
  58. linea=linea[:-1].strip()
  59. nextTab=nextTab-1
  60. if len(linea)>0:
  61. fin=linea[-1]
  62. else:
  63. fin=""
  64. if len(linea)>0:
  65. linea=linea.replace("\{", "{")
  66. linea=linea.replace("}\\", "}")
  67. g.write(tabSimbol*numTabs+linea+blockSimbol+returnSimbol)
  68. numTabs=numTabs+nextTabs
  69. nextTabs=0
  70. blockSimbol=""
  71. g.close()
  72. f.close()
  73. if args.execute=="true":
  74. os.system (args.output)