Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- # vim: set fileencoding=utf-8 :
- #
- # Script para generar clases de C++ agilmente
- # Requerido: Python 3.0
- #
- # 1ª vez de uso se creará un script que debe de configurarse según las necesidades
- # Esta configuración es global: directorio de salida, autor y formato fecha
- # En siguientes ejecuciones solo preguntará interacticamente y en bucle:
- # - Nombre de clase
- # - Proposito
- #
- # Para dejar de crear clases poner un nombre de clase en blanco
- #
- # Las plantillas deben modificarse y adaptarse a las necesidades de cada uno.
- # Queda pendiente sacar las plantillas a fichero
- #
- import os, sys
- import ConfigParser
- from datetime import date
- d = date.today()
- # global
- TODIR = "..\src"
- NAMESPACE = "Dune"
- AUTOR = "Ricardo Marmolejo García"
- FORMAT_FECHA = "%d/%m/%y"
- config_file = "create_class.cfg"
- if(not os.path.exists(config_file)):
- # escribir una config por defecto
- config = ConfigParser.ConfigParser()
- config.add_section('create_class')
- config.set('create_class', 'TODIR', "%s" % TODIR)
- config.set('create_class', 'NAMESPACE', "%s" % NAMESPACE)
- config.set('create_class', 'AUTOR', "%s" % AUTOR)
- config.set('create_class', 'FORMAT_FECHA', "%s" % FORMAT_FECHA)
- f = open(config_file, 'w')
- config.write(f)
- f.close()
- print("Se ha creado una configuración por defecto en %s." % config_file)
- print("Condigurelo, y vuelva a ejecutar el script.")
- sys.exit(1)
- else:
- config = ConfigParser.ConfigParser()
- config.read(config_file)
- TODIR = config.get('create_class', 'TODIR')
- NAMESPACE = config.get('create_class', 'NAMESPACE')
- AUTOR = config.get('create_class', 'AUTOR')
- FORMAT_FECHA = config.get('create_class', 'FORMAT_FECHA')
- # obtener fecha, en el formato especificado
- FECHA = d.strftime(FORMAT_FECHA)
- PROJECT = raw_input("Escribe el nombre del proyecto: \n")
- TODIR = os.path.join(TODIR, PROJECT)
- salir = False
- while not salir:
- NAME = raw_input("Escribe el nombre de la clase (dejelo en blanco si quiere terminar): \n")
- if NAME == "":
- salir = True
- break
- PROPOSITO = raw_input("Escriba el propósito de esta clase: \n")
- print("\n")
- '''
- Plantillas:
- - template_name_class: Plantilla para el nombre de la clase
- Campos disponibles:
- __NAME__ = Nombre original introducido por el usuario
- '''
- template_name_class = "__NAME__"
- '''
- Plantillas:
- - template_cpp_namefile: Plantilla que genera el nombre del archivo cpp
- - template_h_namefile: Plantilla que genera el nombre del archivo .h
- Campos disponibles:
- __NAME__ = Nombre original introducido por el usuario
- __NAMESPACE__ = Nombre del namespace original
- __NAMESPACE_UPPER__ = Nombre del namespace en mayusculas (puntos pasan a ser guiones bajos)
- __NAMESPACE_LOWER__ = Nombre del namespace en minusculas (puntos pasan a ser guiones bajos)
- __CLASSNAME__ = Nombre de Clase original
- __CLASSNAME_UPPER__ = Nombre de Clase en mayusculas (puntos pasan a ser guiones bajos)
- __CLASSNAME_LOWER__ = Nombre de Clase en minusculas (puntos pasan a ser guiones bajos)
- '''
- template_cpp_namefile = "__NAME__.cpp"
- template_h_namefile = "__NAME__.h"
- '''
- Plantillas:
- - template_cpp: Plantilla que genera el contenido del cpp
- - template_h: Plantilla que genera el contenido del h
- Campos disponibles:
- __NAMESPACE__ = Nombre del namespace original
- __NAMESPACE_UPPER__ = Nombre del namespace en mayusculas (puntos pasan a ser guiones bajos)
- __NAMESPACE_LOWER__ = Nombre del namespace en minusculas (puntos pasan a ser guiones bajos)
- __CLASSNAME__ = Nombre de Clase original
- __CLASSNAME_UPPER__ = Nombre de Clase en mayusculas (puntos pasan a ser guiones bajos)
- __CLASSNAME_LOWER__ = Nombre de Clase en minusculas (puntos pasan a ser guiones bajos)
- __FILE__ = Nombre del archivo original
- __FILE_UPPER__ = Nombre del archivo en mayusculas (puntos pasan a ser guiones bajos)
- __FILE_LOWER__ = Nombre del archivo en minusculas (puntos pasan a ser guiones bajos)
- __PROPOSITO__ = Proposito de la clase
- __AUTOR__ = Autor de la clase
- __FECHA__ = Dia, Mes y año del momento de la creación
- __PROJECT__ = Nombre del proyecto
- __PROJECT_UPPER__ = Nombre del proyecto en mayusculas
- __PROJECT_LOWER__ = Nombre del proyecto en minisculas
- '''
- template_h = """/**
- @file __FILE__
- __PROPOSITO__
- @author __AUTOR__
- @date __FECHA__
- */
- #ifndef __FILE_UPPER__
- #define __FILE_UPPER__
- namespace __NAMESPACE__ {
- class __PROJECT_UPPER___API __CLASSNAME__
- {
- public:
- explicit __CLASSNAME__();
- virtual ~__CLASSNAME__();
- __CLASSNAME__(const __CLASSNAME__&) = delete;
- __CLASSNAME__& operator=(const __CLASSNAME__&) = delete;
- protected:
- };
- } // end namespace __NAMESPACE__
- #endif // __FILE_UPPER__
- """
- template_cpp = """/**
- @file __FILE__
- __PROPOSITO__
- @author __AUTOR__
- @date __FECHA__
- */
- #include "__PROJECT__.h"
- //
- #include "%s"
- namespace __NAMESPACE__ {
- __CLASSNAME__::__CLASSNAME__()
- {
- }
- __CLASSNAME__::~__CLASSNAME__()
- {
- }
- } // end namespace __NAMESPACE__
- """ % (template_h_namefile)
- CLASSNAME = template_name_class.replace("__NAME__", NAME)
- # init vars
- NAMESPACE_UPPER = NAMESPACE.upper()
- NAMESPACE_LOWER = NAMESPACE.lower()
- CLASSNAME_UPPER = CLASSNAME.upper()
- CLASSNAME_LOWER = CLASSNAME.lower()
- NAMESPACE_UPPER = NAMESPACE_UPPER.replace(".", "_")
- NAMESPACE_LOWER = NAMESPACE_LOWER.replace(".", "_")
- CLASSNAME_UPPER = CLASSNAME_UPPER.replace(".", "_")
- CLASSNAME_LOWER = CLASSNAME_LOWER.replace(".", "_")
- for newfile in [ [template_cpp_namefile, template_cpp, 'c'],
- [template_h_namefile, template_h, 'h'] ]:
- FILE = newfile[0]
- FILE = FILE.replace("__NAME__", NAME)
- FILE = FILE.replace("__NAMESPACE__", NAMESPACE)
- FILE = FILE.replace("__NAMESPACE_UPPER__", NAMESPACE_UPPER)
- FILE = FILE.replace("__NAMESPACE_LOWER__", NAMESPACE_LOWER)
- FILE = FILE.replace("__CLASSNAME__", CLASSNAME)
- FILE = FILE.replace("__CLASSNAME_UPPER__", CLASSNAME_UPPER)
- FILE = FILE.replace("__CLASSNAME_LOWER__", CLASSNAME_LOWER)
- FILE = FILE.replace("__PROJECT__", PROJECT)
- FILE = FILE.replace("__PROJECT_UPPER__", PROJECT.upper())
- FILE = FILE.replace("__PROJECT_LOWER__", PROJECT.lower())
- FILE_UPPER = FILE.upper()
- FILE_LOWER = FILE.lower()
- FILE_UPPER = FILE_UPPER.replace(".", "_")
- FILE_LOWER = FILE_LOWER.replace(".", "_")
- generated_file = os.path.join(TODIR, os.path.join(newfile[2], FILE))
- if not os.path.exists(generated_file):
- VALUE = newfile[1]
- VALUE = VALUE.replace("__NAME__", NAME)
- VALUE = VALUE.replace("__NAMESPACE__", NAMESPACE)
- VALUE = VALUE.replace("__NAMESPACE_UPPER__", NAMESPACE_UPPER)
- VALUE = VALUE.replace("__NAMESPACE_LOWER__", NAMESPACE_LOWER)
- VALUE = VALUE.replace("__CLASSNAME__", CLASSNAME)
- VALUE = VALUE.replace("__CLASSNAME_UPPER__", CLASSNAME_UPPER)
- VALUE = VALUE.replace("__CLASSNAME_LOWER__", CLASSNAME_LOWER)
- VALUE = VALUE.replace("__FILE__", FILE)
- VALUE = VALUE.replace("__FILE_UPPER__", FILE_UPPER)
- VALUE = VALUE.replace("__FILE_LOWER__", FILE_LOWER)
- VALUE = VALUE.replace("__PROPOSITO__", PROPOSITO)
- VALUE = VALUE.replace("__AUTOR__", AUTOR)
- VALUE = VALUE.replace("__FECHA__", FECHA)
- VALUE = VALUE.replace("__PROJECT__", PROJECT)
- VALUE = VALUE.replace("__PROJECT_UPPER__", PROJECT.upper())
- VALUE = VALUE.replace("__PROJECT_LOWER__", PROJECT.lower())
- file_cpp = open(generated_file, "w")
- file_cpp.write(VALUE)
- file_cpp.close()
- # add to git
- os.system('git add %s' % generated_file)
- print("%s se ha creado correctamente" % FILE)
- else:
- print("%s ya existe!, no se ha creado." % FILE)
- print("\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement