Agregué lo que creí necesario en el código pero no hubo cambios en la salida parece. ¿Qué falla?
// Para códigos de 2 cosas:
CodesLV2 = 0;
CodeBase = 0;
// Repetir mientras haya alguna base sin usar:
// Se van a generar códigos con 2 cosas:
while (CodeBase < CodesLV1) {
CodeBase++;
TextoLineaPorLinea = eval("LV1Code"+CodeBase).join("\n");
trace ("CodeBase: \n"+TextoLineaPorLinea+"\n");
LineaDondeAgregar = -1;
// Repetir mientras haya alguna línea posterior en Codebase:
// Se cambiará la línea donde se agrega código en Codebase:
while (LineaDondeAgregar < eval("LV1Code"+CodeBase).length) {
LineaDondeAgregar++;
trace("LineaDondeAgregar: "+LineaDondeAgregar+"\n");
// Para averiguar espacios iniciales requeridos:
// Si hay alguna línea anterior entonces puede...
// que se requieran espacios, sino esto no...
// funcionaría bien y no tiene sentido porque...
// el resultado siempre debería ser 0:
EspaciosRequeridos = "";
if (LineaDondeAgregar > 0) {
// 1ero se averigua la cantidad de espacios...
// iniciales de la línea anterior:
// AÚN NO PUEDE SABERSE SI ESTO FUNCIONA
LineaAnterior = eval("LV1Code"+CodeBase)[LineaDondeAgregar-1];
CaracterEvaluandose = 0;
do {
if (LineaAnterior.charAt(CaracterEvaluandose) == " ") {
EspaciosRequeridos = EspaciosRequeridos+" ";
} else {
break;
}
CaracterEvaluandose++;
} while (CaracterEvaluandose < eval("LV1Code"+CodeBase)[LineaDondeAgregar].length);
// Luego se averigua si la línea es un if o...
// algo así que requiera espacios,
// en cuyo caso se le agregan:
// Extrae el texto desde la posición...
// EspaciosRequeridos hasta el final:
LineaSinEspacios = LineaAnterior.substr(EspaciosRequeridos);
// trace("LineaSinEspacios: "+LineaSinEspacios);
if (LineaSinEspacios == "if {" or LineaSinEspacios == "do {" or LineaSinEspacios == "while {") {
EspaciosRequeridos = EspaciosRequeridos+" ";
}
}
Action = 0;
// Repetir mientras haya alguna acción agregable
// (se refiere a 1, 2, etc, no ifs, etc):
// Se cambiará la acción que se agrega:
while (Action <= eval("LV1Code"+CodeBase+"MaxAction")) {
Action++;
CodesLV2++;
NombredeNewCode = "LV2Code"+CodesLV2;
// Para agregar código 1ero se copia el base:
set (NombredeNewCode, eval("LV1Code"+CodeBase).slice());
// Insertar en la posición LineaDondeAgregar:
// Parámetros: (índice, elementos_a_eliminar, nuevo_elemento)
eval(NombredeNewCode).splice(LineaDondeAgregar, 0, EspaciosRequeridos+Action);
trace (NombredeNewCode+":");
TextoLineaPorLinea = eval(NombredeNewCode).join("\n");
trace (TextoLineaPorLinea+"\n");
}
// Para agregar if, do, while...
AgregablesLinea1 = ["if {", "do {", "while {"];
AgregablesLinea2 = ["}", "} while", "}"];
NroDeCosaaAgregar = 0;
// Repetir mientras no se haya agregado algo de eso:
// Se cambiará qué se agrega:
while (NroDeCosaaAgregar < 3) {
CodesLV2++;
NombredeNewCode = "LV2Code"+CodesLV2;
// Se copia la base:
set (NombredeNewCode, eval("LV1Code"+CodeBase).slice());
// Insertar en la posición LineaDondeAgregar
// Parámetros: (índice, elementos_a_eliminar, nuevo_elemento)
eval(NombredeNewCode).splice(LineaDondeAgregar, 0, EspaciosRequeridos+AgregablesLinea1[NroDeCosaaAgregar]);
eval(NombredeNewCode).splice(LineaDondeAgregar+1, 0, EspaciosRequeridos+AgregablesLinea2[NroDeCosaaAgregar]);
trace (NombredeNewCode+":");
TextoLineaPorLinea = eval(NombredeNewCode).join("\n");
trace (TextoLineaPorLinea+"\n");
NroDeCosaaAgregar++;
}
// Para agregar else sólo cuando hay if no terminado,
// y la posición del else no sea entre otros bloques:
// Desde la línea actual ir mirando hacia arriba:
NroDeLineaMirandose = LineaDondeAgregar;
LineaMirandose = eval("LV1Code"+CodeBase)[NroDeLineaMirandose];
PuedeHaberElse = undefined;
while (NroDeLineaMirandose > 0) {
NroDeLineaMirandose--;
// Para averiguar espacios iniciales que...
// deben borrarse para saber qué tiene...
// la línea sin ellos:
EspaciosaQuitar = "";
CaracterEvaluandose = 0;
do {
if (LineaMirandose.charAt(CaracterEvaluandose) == " ") {
EspaciosaQuitar = EspaciosaQuitar+" ";
} else {
break;
}
CaracterEvaluandose++;
} while (CaracterEvaluandose < eval("LV1Code"+CodeBase)[LineaMirandose].length);
LineaSinEspacios = LineaMirandose.substr(EspaciosaQuitar);
DosAbiertos = 0;
OtrosAbiertos = 0;
if (LineaSinEspacios == "} while") {
DosAbiertos++;
} else if (LineaSinEspacios == "}") {
OtrosAbiertos++;
} else if (LineaSinEspacios == "do {") {
DosAbiertos--;
if (DosAbiertos == -1) {
PuedeHaberElse = false;
break;
}
} else if (LineaSinEspacios == "while {") {
OtrosAbiertos--;
if (OtrosAbiertos == -1) {
PuedeHaberElse = false;
break;
}
} else if (LineaSinEspacios == "if {") {
OtrosAbiertos--;
if (OtrosAbiertos == -1) {
PuedeHaberElse = true;
break;
}
} else if (LineaSinEspacios == "} else if {") {
PuedeHaberElse = true;
break;
}
}
if (PuedeHaberElse == true) {
CodesLV2++;
NombredeNewCode = "LV2Code"+CodesLV2;
// Se copia la base:
set (NombredeNewCode, eval("LV1Code"+CodeBase).slice());
// Insertar en la posición LineaDondeAgregar
// Parámetros: (índice, elementos_a_eliminar, nuevo_elemento)
eval(NombredeNewCode).splice(LineaDondeAgregar, 0, EspaciosRequeridos+"} else if {");
trace (NombredeNewCode+":");
TextoLineaPorLinea = eval(NombredeNewCode).join("\n");
trace (TextoLineaPorLinea+"\n");
}
}
}
stop ();