castelog
Version:
Programación JavaScript en castellano.
271 lines (254 loc) • 13.6 kB
JavaScript
Castelog.metodos.termino_el_programa = function(...args) {
debugar_sintaxis_de_diagramas(...args);
process.exit(0);
};
Castelog.variables.DiagramaConceptualPorDefecto = function () {
debugar_sintaxis_de_diagramas("Entro en: Castelog.variables.DiagramaConceptualPorDefecto");
this.codigo = {
cabeceras: "",
pieceras: "",
nodos: "",
relaciones: ""
};
this.sentencias = [];
this.toMermaidCode = () => {
return this.codigo.cabeceras + "\n" + this.codigo.nodos + "\n" + this.codigo.relaciones + "\n" + this.codigo.pieceras;
};
return this;
};
Castelog.variables.ContextoDeDiagramaConceptual = function (id_original, extra) {
debugar_sintaxis_de_diagramas("Entro en: Castelog.variables.ContextoDeDiagramaConceptual");
let id = id_original;
if(id_original instanceof Castelog.variables.ContextoDeDiagramaConceptual) {
id = id_original.id;
}
if(!Array.isArray(id)) {
throw new Error("Required argument «id» to be an array in order to «Castelog.variables.ContextoDeDiagramaConceptual»");
}
this.id = id;
if(typeof extra === "string") {
this.id = this.id.concat(extra);
} else if(typeof extra === "undefined") {
// @OK"
} else {
throw new Error("Required argument «extra» to be a string or undefined in order to «Castelog.variables.ContextoDeDiagramaConceptual»");
}
return this;
};
Castelog.variables.ContextoDeDiagramaConceptual.prototype = {};
Castelog.variables.ContextoDeDiagramaConceptual.prototype.tabulacion = function() {
let tab = "";
for(let index = 0; index < this.id.length; index++) {
const id_item = this.id[index];
tab += " ";
}
return tab;
};
Castelog.variables.DiagramaConceptualSeleccionado = Castelog.variables.DiagramaConceptualPorDefecto;
Castelog.variables.configuraciones_de_constructor_de_diagramas = { debug: false };
const debugar_sintaxis_de_diagramas = function(...args) {
if(Castelog.variables.configuraciones_de_constructor_de_diagramas.debug) {
console.log(...args);
}
};
const comprobar_objeto_de_diagrama = function(method, diagrama) {
debugar_sintaxis_de_diagramas("Entro en: comprobar_objeto_de_diagrama");
debugar_sintaxis_de_diagramas("OK en:" + method);
if(!(diagrama instanceof Castelog.variables.DiagramaConceptualSeleccionado)) {
throw new Error("Required argument «diagrama» to be an instance of «Castelog.variables.DiagramaConceptualSeleccionado» in order to «" + method + "»");
}
};
const comprobar_contexto_de_diagrama = function (method, contexto) {
debugar_sintaxis_de_diagramas("Entro en: comprobar_contexto_de_diagrama");
debugar_sintaxis_de_diagramas("OK en:" + method);
if(!(contexto instanceof Castelog.variables.ContextoDeDiagramaConceptual)) {
throw new Error("Required argument «contexto» to be an instance of «Castelog.variables.ContextoDeDiagramaConceptual» in order to «" + method + "»");
}
};
const comprobar_valor_de_diagrama = function (method, valor) {
debugar_sintaxis_de_diagramas("Entro en: comprobar_valor_de_diagrama");
debugar_sintaxis_de_diagramas("OK en:" + method);
if (typeof valor !== "object") {
throw new Error("Required argument «valor» to be an object in order to «" + method + "»");
}
};
Castelog.metodos.un_diagrama_conceptual = async function(datos_de_diagrama, en_errores) {
try {
debugar_sintaxis_de_diagramas("Entro en: Castelog.metodos.un_diagrama_conceptual");
if (typeof datos_de_diagrama !== "function") {
throw new Error("Required argument «datos_de_diagrama» to be a function in order to «Castelog.metodos.un_diagrama_conceptual»");
}
const diagrama_objeto = new Castelog.variables.DiagramaConceptualSeleccionado();
const contexto_de_diagrama = new Castelog.variables.ContextoDeDiagramaConceptual([]);
await datos_de_diagrama(diagrama_objeto, contexto_de_diagrama);
return diagrama_objeto;
} catch(error) {
if(typeof en_errores === "function") {
return en_errores(error);
}
throw error;
}
};
Castelog.metodos.defino_direccion_de_diagrama = async function(diagrama, valor) {
try {
debugar_sintaxis_de_diagramas("Entro en: Castelog.metodos.defino_direccion_de_diagrama");
comprobar_objeto_de_diagrama("Castelog.metodos.defino_direccion_de_diagrama", diagrama);
diagrama.codigo.cabeceras += "graph ";
switch (valor) {
case "izquierda a derecha":
diagrama.codigo.cabeceras += "LR;\n";
break;
case "derecha a izquierda":
diagrama.codigo.cabeceras += "RL;\n";
break;
case "arriba a abajo":
diagrama.codigo.cabeceras += "TB;\n";
break;
case "abajo a arriba":
diagrama.codigo.cabeceras += "BT;\n";
break;
default:
throw new Error("Required argument «valor» to be recognized on «Castelog.metodos.defino_direccion_de_diagrama»");
}
diagrama.sentencias.push({ tipo: "dirección de diagrama", valor });
} catch(error) {
debugar_sintaxis_de_diagramas("Error on «Castelog.metodos.defino_direccion_de_diagrama»:", error);
throw error;
}
};
Castelog.metodos.defino_nodo_de_diagrama = async function(diagrama, valor, contexto) {
try {
debugar_sintaxis_de_diagramas("Entro en: Castelog.metodos.defino_nodo_de_diagrama");
debugar_sintaxis_de_diagramas("defino_nodo_de_diagrama", diagrama, valor, contexto);
comprobar_objeto_de_diagrama("Castelog.metodos.defino_nodo_de_diagrama", diagrama);
comprobar_contexto_de_diagrama("Castelog.metodos.defino_nodo_de_diagrama", contexto);
comprobar_valor_de_diagrama("Castelog.metodos.defino_nodo_de_diagrama", valor);
const { nombre } = valor;
let { texto } = valor;
if (typeof nombre !== "string") {
throw new Error("Required argument «nombre» to be a string in order to «Castelog.metodos.defino_nodo_de_diagrama»");
}
if(!("texto" in valor)) {
texto = nombre;
}
if (typeof texto !== "string") {
throw new Error("Required argument «texto» to be a string in order to «Castelog.metodos.defino_nodo_de_diagrama»");
}
const abre_grupo = "[";
const cierra_grupo = "]";
diagrama.codigo.nodos += `${contexto.tabulacion()}${nombre}${abre_grupo}${JSON.stringify(texto)}${cierra_grupo};\n`;
diagrama.sentencias.push({ tipo: "nodo de diagrama", valor, contexto });
} catch(error) {
debugar_sintaxis_de_diagramas("Error on «Castelog.metodos.defino_nodo_de_diagrama»:", error);
throw error;
}
};
Castelog.metodos.defino_relacion_de_diagrama = async function(diagrama, valor) {
try {
debugar_sintaxis_de_diagramas("Entro en: Castelog.metodos.defino_relacion_de_diagrama");
debugar_sintaxis_de_diagramas("defino_relacion_de_diagrama", diagrama, valor);
comprobar_objeto_de_diagrama("Castelog.metodos.defino_relacion_de_diagrama", diagrama);
comprobar_valor_de_diagrama("Castelog.metodos.defino_relacion_de_diagrama", valor);
const { origen, texto, destino } = valor;
if (typeof origen !== "string") {
throw new Error("Required argument «origen» to be a string in order to «Castelog.metodos.defino_relacion_de_diagrama»");
}
if (typeof texto !== "string") {
throw new Error("Required argument «texto» to be a string in order to «Castelog.metodos.defino_relacion_de_diagrama»");
}
if (typeof destino !== "string") {
throw new Error("Required argument «destino» to be a string in order to «Castelog.metodos.defino_relacion_de_diagrama»");
}
const abre_relacion = "-- ";
const cierra_relacion = " -->";
diagrama.codigo.relaciones += `${origen} ${abre_relacion}${texto}${cierra_relacion} ${destino}\n`;
diagrama.sentencias.push({ tipo: "relación de diagrama", valor });
} catch(error) {
debugar_sintaxis_de_diagramas("Error on «Castelog.metodos.defino_relacion_de_diagrama»:", error);
throw error;
}
};
Castelog.metodos.defino_conjunto_de_diagrama = async function(diagrama, valor, contexto) {
try {
debugar_sintaxis_de_diagramas("Entro en: Castelog.metodos.defino_conjunto_de_diagrama");
debugar_sintaxis_de_diagramas("defino_conjunto_de_diagrama", diagrama, valor, contexto);
comprobar_objeto_de_diagrama("Castelog.metodos.defino_conjunto_de_diagrama", diagrama);
comprobar_contexto_de_diagrama("Castelog.metodos.defino_conjunto_de_diagrama", contexto);
comprobar_valor_de_diagrama("Castelog.metodos.defino_conjunto_de_diagrama", valor);
const { nombre, callback } = valor;
if (typeof nombre !== "string") {
throw new Error("Required argument «nombre» to be a string in order to «Castelog.metodos.defino_conjunto_de_diagrama»");
}
if(typeof callback !== "function") {
throw new Error("Required argument «callback» to be a function in order to «Castelog.metodos.defino_conjunto_de_diagrama»");
}
const nuevo_contexto = new Castelog.variables.ContextoDeDiagramaConceptual(contexto, nombre);
diagrama.sentencias.push({ tipo: "conjunto de diagrama", valor, contexto });
diagrama.codigo.nodos += `${contexto.tabulacion()}subgraph ${nombre}:\n`;
await callback(diagrama, nuevo_contexto);
diagrama.codigo.nodos += `${contexto.tabulacion()}end\n`;
} catch(error) {
debugar_sintaxis_de_diagramas("Error on «Castelog.metodos.defino_conjunto_de_diagrama»:", error);
throw error;
}
};
Castelog.metodos.defino_clase_de_diagrama = async function(diagrama, valor) {
try {
debugar_sintaxis_de_diagramas("Entro en: Castelog.metodos.defino_clase_de_diagrama");
debugar_sintaxis_de_diagramas("defino_clase_de_diagrama", diagrama, valor);
comprobar_objeto_de_diagrama("Castelog.metodos.defino_clase_de_diagrama", diagrama);
comprobar_valor_de_diagrama("Castelog.metodos.defino_clase_de_diagrama", valor);
const { nombre, relleno = "#FFF", grosor = "1px", borde = "#333" } = valor;
if(typeof nombre !== "string") {
throw new Error("Required argument «nombre» to be a string in order to «Castelog.metodos.defino_clase_de_diagrama»");
}
if (typeof relleno !== "string") {
throw new Error("Required argument «relleno» to be a string in order to «Castelog.metodos.defino_clase_de_diagrama»");
}
if (typeof grosor !== "string") {
throw new Error("Required argument «grosor» to be a string in order to «Castelog.metodos.defino_clase_de_diagrama»");
}
if (typeof borde !== "string") {
throw new Error("Required argument «borde» to be a string in order to «Castelog.metodos.defino_clase_de_diagrama»");
}
diagrama.sentencias.push({ tipo: "clase de diagrama", valor });
diagrama.codigo.pieceras += `classDef ${nombre} fill:${relleno},stroke:${borde},stroke-width:${grosor}\n`;
} catch(error) {
debugar_sintaxis_de_diagramas("Error on «Castelog.metodos.defino_clase_de_diagrama»:", error);
throw error;
}
};
Castelog.metodos.defino_clasificacion_de_diagrama = async function(diagrama, valor) {
try {
debugar_sintaxis_de_diagramas("Entro en: Castelog.metodos.defino_clasificacion_de_diagrama");
debugar_sintaxis_de_diagramas("defino_clasificacion_de_diagrama", diagrama, valor);
comprobar_objeto_de_diagrama("Castelog.metodos.defino_clasificacion_de_diagrama", diagrama);
comprobar_valor_de_diagrama("Castelog.metodos.defino_clasificacion_de_diagrama", valor);
const { nombre, nodos } = valor;
if (typeof nombre !== "string") {
throw new Error("Required argument «nombre» to be a string in order to «Castelog.metodos.defino_clasificacion_de_diagrama");
}
if (!Array.isArray(nodos)) {
throw new Error("Required argument «nodos» to be an array in order to «Castelog.metodos.defino_clasificacion_de_diagrama");
}
for(let index = 0; index < nodos.length; index++) {
const nodo = nodos[index];
diagrama.codigo.pieceras += `class ${nombre} ${nodo}\n`;
diagrama.sentencias.push({ tipo: "clasificación de diagrama", valor });
}
} catch(error) {
debugar_sintaxis_de_diagramas("Error on «Castelog.metodos.defino_clasificacion_de_diagrama»:", error);
throw error;
}
};
Castelog.metodos.defino_estrategias_de_diagrama = async function(diagrama, valor) {
try {
debugar_sintaxis_de_diagramas("Entro en: Castelog.metodos.defino_estrategias_de_diagrama");
debugar_sintaxis_de_diagramas("defino_estrategias_de_diagrama", diagrama, valor);
comprobar_objeto_de_diagrama("Castelog.metodos.defino_estrategias_de_diagrama", diagrama);
comprobar_valor_de_diagrama("Castelog.metodos.defino_estrategias_de_diagrama", valor);
} catch (error) {
debugar_sintaxis_de_diagramas("Error on «Castelog.metodos.defino_estrategias_de_diagrama»:", error);
throw error;
}
};