makiolo

Create C++ class massive

Jul 8th, 2012
159
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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")
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×