Advertisement
makiolo

Create C++ class massive

Jul 8th, 2012
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.39 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # vim: set fileencoding=utf-8 :
  4. #
  5. # Script para generar clases de C++ agilmente
  6. # Requerido: Python 3.0
  7. #
  8. # 1ª vez de uso se creará un script que debe de configurarse según las necesidades
  9. # Esta configuración es global: directorio de salida, autor y formato fecha
  10. # En siguientes ejecuciones solo preguntará interacticamente y en bucle:
  11. # - Nombre de clase
  12. # - Proposito
  13. #
  14. # Para dejar de crear clases poner un nombre de clase en blanco
  15. #
  16. # Las plantillas deben modificarse y adaptarse a las necesidades de cada uno.
  17. # Queda pendiente sacar las plantillas a fichero
  18. #
  19.  
  20. import os, sys
  21. import ConfigParser
  22. from datetime import date
  23. d = date.today()
  24.  
  25. # global
  26. TODIR = "..\src"
  27. NAMESPACE = "Dune"
  28. AUTOR = "Ricardo Marmolejo García"
  29. FORMAT_FECHA = "%d/%m/%y"
  30. config_file = "create_class.cfg"
  31.  
  32. if(not os.path.exists(config_file)):
  33.     # escribir una config por defecto
  34.     config = ConfigParser.ConfigParser()
  35.     config.add_section('create_class')
  36.     config.set('create_class', 'TODIR', "%s" % TODIR)
  37.     config.set('create_class', 'NAMESPACE', "%s" % NAMESPACE)
  38.     config.set('create_class', 'AUTOR', "%s" % AUTOR)
  39.     config.set('create_class', 'FORMAT_FECHA', "%s" % FORMAT_FECHA)
  40.    
  41.     f = open(config_file, 'w')
  42.     config.write(f)
  43.     f.close()
  44.    
  45.     print("Se ha creado una configuración por defecto en %s." % config_file)
  46.     print("Condigurelo, y vuelva a ejecutar el script.")
  47.     sys.exit(1)
  48.    
  49. else:
  50.    
  51.     config = ConfigParser.ConfigParser()
  52.     config.read(config_file)
  53.    
  54.     TODIR = config.get('create_class', 'TODIR')
  55.     NAMESPACE = config.get('create_class', 'NAMESPACE')
  56.     AUTOR = config.get('create_class', 'AUTOR')
  57.     FORMAT_FECHA = config.get('create_class', 'FORMAT_FECHA')
  58.    
  59. # obtener fecha, en el formato especificado
  60. FECHA = d.strftime(FORMAT_FECHA)
  61.  
  62. PROJECT = raw_input("Escribe el nombre del proyecto: \n")
  63. TODIR = os.path.join(TODIR, PROJECT)
  64.  
  65. salir = False
  66. while not salir:
  67.    
  68.     NAME = raw_input("Escribe el nombre de la clase (dejelo en blanco si quiere terminar): \n")
  69.    
  70.     if NAME == "":
  71.         salir = True
  72.         break
  73.    
  74.     PROPOSITO = raw_input("Escriba el propósito de esta clase: \n")
  75.     print("\n")
  76.    
  77.     '''
  78.    Plantillas:
  79.    
  80.        - template_name_class: Plantilla para el nombre de la clase
  81.    
  82.    Campos disponibles:
  83.    
  84.    __NAME__ = Nombre original introducido por el usuario
  85.    '''
  86.     template_name_class = "__NAME__"
  87.    
  88.     '''
  89.    Plantillas:
  90.    
  91.        - template_cpp_namefile: Plantilla que genera el nombre del archivo cpp
  92.        - template_h_namefile: Plantilla que genera el nombre del archivo .h
  93.    
  94.    Campos disponibles:
  95.    
  96.    __NAME__ = Nombre original introducido por el usuario
  97.    __NAMESPACE__ = Nombre del namespace original
  98.    __NAMESPACE_UPPER__ = Nombre del namespace en mayusculas (puntos pasan a ser guiones bajos)
  99.    __NAMESPACE_LOWER__ = Nombre del namespace en minusculas (puntos pasan a ser guiones bajos)
  100.    __CLASSNAME__ = Nombre de Clase original
  101.    __CLASSNAME_UPPER__ = Nombre de Clase en mayusculas (puntos pasan a ser guiones bajos)
  102.    __CLASSNAME_LOWER__ = Nombre de Clase en minusculas (puntos pasan a ser guiones bajos)
  103.    '''
  104.     template_cpp_namefile = "__NAME__.cpp"
  105.     template_h_namefile = "__NAME__.h"
  106.    
  107.     '''
  108.    
  109.    Plantillas:
  110.    
  111.        - template_cpp: Plantilla que genera el contenido del cpp
  112.        - template_h: Plantilla que genera el contenido del h
  113.    
  114.    Campos disponibles:
  115.    
  116.    __NAMESPACE__ = Nombre del namespace original
  117.    __NAMESPACE_UPPER__ = Nombre del namespace en mayusculas (puntos pasan a ser guiones bajos)
  118.    __NAMESPACE_LOWER__ = Nombre del namespace en minusculas (puntos pasan a ser guiones bajos)
  119.    __CLASSNAME__ = Nombre de Clase original
  120.    __CLASSNAME_UPPER__ = Nombre de Clase en mayusculas (puntos pasan a ser guiones bajos)
  121.    __CLASSNAME_LOWER__ = Nombre de Clase en minusculas (puntos pasan a ser guiones bajos)
  122.    __FILE__ = Nombre del archivo original
  123.    __FILE_UPPER__ = Nombre del archivo en mayusculas (puntos pasan a ser guiones bajos)
  124.    __FILE_LOWER__ = Nombre del archivo en minusculas (puntos pasan a ser guiones bajos)
  125.    __PROPOSITO__ = Proposito de la clase
  126.    __AUTOR__ = Autor de la clase
  127.    __FECHA__ = Dia, Mes y año del momento de la creación
  128.    __PROJECT__ = Nombre del proyecto
  129.    __PROJECT_UPPER__ = Nombre del proyecto en mayusculas
  130.    __PROJECT_LOWER__ = Nombre del proyecto en minisculas
  131.    '''
  132.  
  133.     template_h = """/**
  134. @file __FILE__
  135.  
  136. __PROPOSITO__
  137.  
  138. @author __AUTOR__
  139. @date __FECHA__
  140. */
  141.  
  142. #ifndef __FILE_UPPER__
  143. #define __FILE_UPPER__
  144.  
  145. namespace __NAMESPACE__ {
  146.  
  147. class __PROJECT_UPPER___API __CLASSNAME__
  148. {
  149. public:
  150.    explicit __CLASSNAME__();
  151.    virtual ~__CLASSNAME__();
  152.    __CLASSNAME__(const __CLASSNAME__&) = delete;
  153.    __CLASSNAME__& operator=(const __CLASSNAME__&) = delete;
  154. protected:
  155. };
  156.  
  157. } // end namespace __NAMESPACE__
  158.  
  159. #endif // __FILE_UPPER__
  160.  
  161. """
  162.  
  163.     template_cpp = """/**
  164. @file __FILE__
  165.  
  166. __PROPOSITO__
  167.  
  168. @author __AUTOR__
  169. @date __FECHA__
  170. */
  171.  
  172. #include "__PROJECT__.h"
  173. //
  174. #include "%s"
  175.  
  176. namespace __NAMESPACE__ {
  177.  
  178. __CLASSNAME__::__CLASSNAME__()
  179. {
  180.    
  181. }
  182.  
  183. __CLASSNAME__::~__CLASSNAME__()
  184. {
  185.    
  186. }
  187.  
  188. } // end namespace __NAMESPACE__
  189.  
  190. """ % (template_h_namefile)
  191.  
  192.     CLASSNAME = template_name_class.replace("__NAME__", NAME)
  193.  
  194.     # init vars
  195.     NAMESPACE_UPPER = NAMESPACE.upper()
  196.     NAMESPACE_LOWER = NAMESPACE.lower()
  197.     CLASSNAME_UPPER = CLASSNAME.upper()
  198.     CLASSNAME_LOWER = CLASSNAME.lower()
  199.     NAMESPACE_UPPER = NAMESPACE_UPPER.replace(".", "_")
  200.     NAMESPACE_LOWER = NAMESPACE_LOWER.replace(".", "_")
  201.     CLASSNAME_UPPER = CLASSNAME_UPPER.replace(".", "_")
  202.     CLASSNAME_LOWER = CLASSNAME_LOWER.replace(".", "_")
  203.  
  204.     for newfile in [    [template_cpp_namefile, template_cpp, 'c'],
  205.                         [template_h_namefile, template_h, 'h']       ]:
  206.        
  207.         FILE = newfile[0]
  208.         FILE = FILE.replace("__NAME__", NAME)
  209.         FILE = FILE.replace("__NAMESPACE__", NAMESPACE)
  210.         FILE = FILE.replace("__NAMESPACE_UPPER__", NAMESPACE_UPPER)
  211.         FILE = FILE.replace("__NAMESPACE_LOWER__", NAMESPACE_LOWER)
  212.         FILE = FILE.replace("__CLASSNAME__", CLASSNAME)
  213.         FILE = FILE.replace("__CLASSNAME_UPPER__", CLASSNAME_UPPER)
  214.         FILE = FILE.replace("__CLASSNAME_LOWER__", CLASSNAME_LOWER)
  215.         FILE = FILE.replace("__PROJECT__", PROJECT)
  216.         FILE = FILE.replace("__PROJECT_UPPER__", PROJECT.upper())
  217.         FILE = FILE.replace("__PROJECT_LOWER__", PROJECT.lower())
  218.         FILE_UPPER = FILE.upper()
  219.         FILE_LOWER = FILE.lower()
  220.         FILE_UPPER = FILE_UPPER.replace(".", "_")
  221.         FILE_LOWER = FILE_LOWER.replace(".", "_")        
  222.        
  223.         generated_file = os.path.join(TODIR, os.path.join(newfile[2], FILE))
  224.        
  225.         if not os.path.exists(generated_file):
  226.            
  227.             VALUE = newfile[1]
  228.             VALUE = VALUE.replace("__NAME__", NAME)
  229.             VALUE = VALUE.replace("__NAMESPACE__", NAMESPACE)
  230.             VALUE = VALUE.replace("__NAMESPACE_UPPER__", NAMESPACE_UPPER)
  231.             VALUE = VALUE.replace("__NAMESPACE_LOWER__", NAMESPACE_LOWER)
  232.             VALUE = VALUE.replace("__CLASSNAME__", CLASSNAME)
  233.             VALUE = VALUE.replace("__CLASSNAME_UPPER__", CLASSNAME_UPPER)
  234.             VALUE = VALUE.replace("__CLASSNAME_LOWER__", CLASSNAME_LOWER)
  235.             VALUE = VALUE.replace("__FILE__", FILE)
  236.             VALUE = VALUE.replace("__FILE_UPPER__", FILE_UPPER)
  237.             VALUE = VALUE.replace("__FILE_LOWER__", FILE_LOWER)
  238.             VALUE = VALUE.replace("__PROPOSITO__", PROPOSITO)
  239.             VALUE = VALUE.replace("__AUTOR__", AUTOR)
  240.             VALUE = VALUE.replace("__FECHA__", FECHA)
  241.             VALUE = VALUE.replace("__PROJECT__", PROJECT)
  242.             VALUE = VALUE.replace("__PROJECT_UPPER__", PROJECT.upper())
  243.             VALUE = VALUE.replace("__PROJECT_LOWER__", PROJECT.lower())
  244.            
  245.             file_cpp = open(generated_file, "w")
  246.             file_cpp.write(VALUE)
  247.             file_cpp.close()
  248.            
  249.             # add to git
  250.             os.system('git add %s' % generated_file)
  251.            
  252.             print("%s se ha creado correctamente" % FILE)
  253.            
  254.         else:
  255.            
  256.             print("%s ya existe!, no se ha creado." % FILE)
  257.            
  258.     print("\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement