Funciones de sintaxis realzada (syntax highlight).
Constantes
Text SHiRemOpnText SHiRemClsText SHiQuoText SHiRemHtmText SHiQu1HtmText SHiQu2HtmText SHiTagHtmText SHiCodEmbText SHiEndHtmFunciones
Set SHiRemStrCodSet(Text txtInp, Text remOpn, Text remCls, Text remLin, Text strQu1, Text strQu2)Text SHiRemStrCodHtm(Text txtInp, Text remOpn, Text remCls, Text remLin, Text strQu1, Text strQu2)Text SHiPre(Text txtInp)Text SHiRemStrCodPre(Text txtInp, Text remOpn, Text remCls, Text remLin, Text strQu1, Text strQu2)Text SHiTolHtm(Text codInp)Text SHiTolPre(Text codInp)Text SHiJscHtm(Text codInp)Text SHiJscPre(Text codInp)Text SHiSqlPre(Text codInp)Text SHiGplPre(Text codInp)Text SHiCmdPre(Text codInp)Text SHiCssPre(Text codInp)Text SHiXmlHtm(Text codInp)Text SHiXmlPre(Text codInp)Text SHiEmbHtm(Text codInp)Text SHiEmbPre(Text codInp)Text SHiAscPre(Text codInp)Text SHiImgSrc(Text filPth)Text SHiCompact(Text codHtm)Text SHiPreCode(Text filPth, Text filTxt)Text SHiPreFile(Text filPth)//////////////////////////////////////////////////////////////////////////////
Text SHiRemOpn = "/"+"*";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Inicio tipico de un comentario de bloque.", SHiRemOpn);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemCls = "*"+"/";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Cierre tipico de un comentario de bloque.", SHiRemCls);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiQuo = Char(34);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Comillas dobles.", SHiQuo);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemHtm = "<span class='CodRem'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para un comentario.", SHiRemHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiQu1Htm = "<span class='CodTxt'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para un texto de primer nivel.", SHiQu1Htm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiQu2Htm = "<span class='CodSub'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para un subtexto de segundo nivel.", SHiQu2Htm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiTagHtm = "<span class='CodTag'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para el inicio de una etiqueta.", SHiTagHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiCodEmb = "<span class='CodEmb'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para el codigo embebido.", SHiCodEmb);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiEndHtm = "</span>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Cierre de un span.", SHiEndHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set SHiRemStrCodSet(Text txtInp, // Texto de entrada
Text remOpn, // Apertura de los comentarios de bloque
Text remCls, // Cierre de los comentarios de bloque
Text remLin, // Apertura de los comentarios de linea
Text strQu1, // Delimitador de textos alto nivel (ie "")
Text strQu2) // Delimitacor de textos bajo nivel (ie '')
//////////////////////////////////////////////////////////////////////////////
{
Set setBlk = If(remOpn == "", [[txtInp]], // No hay comentarios de bloque
TxtSplitBy2Tag(txtInp, remOpn, remCls)); // Comenta bloque
Set setQu1 = BinGroup("<<", EvalSet(setBlk, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, remOpn), [[txtCod]], // Era comentario de bloque
TxtSplitBy1Tag(txtCod, strQu1)) // Romper por textos entrecomillados
})); // De conjunto de conjuntos a conjunto lineal
Set setQu2 = If(strQu2 == "", setQu1, // Si no se emplea
{
BinGroup("<<", EvalSet(setQu1, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, remOpn), [[txtCod]], // Era comentario bloque
If(TxtBeginStrict(txtCod, strQu1), [[txtCod]], // Quote alto nivel
TxtSplitBy1Tag(txtCod, strQu2))) // Romper textos y entrecomillados
})) // De conjunto de conjuntos a conjunto lineal
});
Set setLin = If(remLin == "", setQu2, // Si no se emplea
{
BinGroup("<<", EvalSet(setQu2, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, remOpn), [[txtCod]], // Era comentario bloque
If(TxtBeginStrict(txtCod, strQu1), [[txtCod]], // Quote alto nivel
If(TxtBeginStrict(txtCod, strQu2), [[txtCod]], // Quote bajo nivel
TxtSplitBy2Tag(txtCod, remLin, "\n")))) // Romper comentarios linea
})) // De conjunto de conjuntos a conjunto lineal
});
setLin
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto de textos resultado de separar los comentarios de bloque,
los comentarios de linea, los textos entrecomillados y el codigo.",
SHiRemStrCodSet);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemStrCodHtm(Text txtInp, // Texto de entrada
Text remOpn, // Apertura de los comentarios de bloque
Text remCls, // Cierre de los comentarios de bloque
Text remLin, // Apertura de los comentarios de linea
Text strQu1, // Delimitador de textos alto nivel (ie "")
Text strQu2) // Delimitacor de textos bajo nivel (ie '')
//////////////////////////////////////////////////////////////////////////////
{
Set setBlk = SHiRemStrCodSet(txtInp,remOpn,remCls,remLin,strQu1,strQu2);
Set setHtm = EvalSet(setBlk, Text(Text txtCod)
{
Case(
TxtBeginStrict(txtCod, remOpn),
SHiRemHtm + HtmAsc2Xml(txtCod) + SHiEndHtm,
TxtBeginStrict(txtCod, strQu1),
SHiQu1Htm + HtmAsc2Xml(txtCod) + SHiEndHtm,
TxtBeginStrict(txtCod, strQu2),
SHiQu2Htm + HtmAsc2Xml(txtCod) + SHiEndHtm,
TxtBeginStrict(txtCod, remLin),
SHiRemHtm + Replace(HtmAsc2Xml(txtCod), "\n", SHiEndHtm+"\n"),
TRUE,
HtmAsc2Xml(txtCod))
});
SetSum(setHtm)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo de
entrada txtImp.
El ReplaceTable() para transformar < y > no se puede aplicar desde el
principio porque a la hora de realzar codigo Html son los tags delimitadores
mas importantes, por eso hay que hacerlo trozo a trozo de codigo.",
SHiRemStrCodHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiPre(Text txtInp) // Texto de entrada
//////////////////////////////////////////////////////////////////////////////
{ "\n<pre><code>" + txtInp + "</code></pre>\n" };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de enmarcar txtImp entre las etiquetas
<pre><code> y </code></pre>.",
SHiPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemStrCodPre(Text txtInp, // Texto de entrada
Text remOpn, // Apertura de los comentarios de bloque
Text remCls, // Cierre de los comentarios de bloque
Text remLin, // Apertura de los comentarios de linea
Text strQu1, // Delimitador de textos alto nivel (ie "")
Text strQu2) // Delimitacor de textos bajo nivel (ie '')
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiRemStrCodHtm(txtInp,remOpn,remCls,remLin,strQu1,strQu2)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo de
txtImp enmarcado todo el resultado entre las etiquetas <pre><code> y
</code></pre>.",
SHiRemStrCodPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiTolHtm(Text codInp) // Codigo de entrada Tol
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodHtm(codInp, SHiRemOpn, SHiRemCls, "//", SHiQuo, "") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Tol de entrada que recibe como parametro pero sin enmarcar entre las
etiquetas <pre><code> y </code></pre>.",
SHiTolHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiTolPre(Text codInp) // Codigo de entrada Tol
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiTolHtm(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Tol de entrada que recibe como parametro.",
SHiTolPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiJscHtm(Text codInp) // Codigo de entrada Javascript
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodHtm(codInp, SHiRemOpn, SHiRemCls, "//", SHiQuo, "'") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Javascript de entrada que recibe como parametro pero sin enmarcar entre las
etiquetas <pre><code> y </code></pre>.",
SHiJscHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiJscPre(Text codInp) // Codigo de entrada Javascript
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiJscHtm(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Javascript de entrada que recibe como parametro.",
SHiJscPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiSqlPre(Text codInp) // Codigo de entrada Sql
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodPre(codInp, "", "", "--", "'", "") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Sql de entrada que recibe como parametro.",
SHiSqlPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiGplPre(Text codInp) // Codigo de entrada Gnuplot
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodPre(codInp, "", "", "#", "'", "") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Gnuplot de entrada que recibe como parametro.",
SHiGplPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiCmdPre(Text codInp) // Codigo de entrada de mandatos Dos
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodPre(codInp, "", "", "::", SHiQuo, "") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
de mandatos para el Cmd de Dos que recibe como parametro.",
SHiCmdPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiCssPre(Text codInp) // Codigo de entrada Cascade style sheet
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodPre(codInp, SHiRemOpn, SHiRemCls, "", SHiQuo, "'") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Cascade style sheet que recibe como parametro.",
SHiCssPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiXmlHtm(Text codInp) // Codigo Xml
//////////////////////////////////////////////////////////////////////////////
{
Set setBlk = TxtSplitBy2Tag(codInp, "<!--", "-->"); // Romper x comments
Set setTag = BinGroup("<<", EvalSet(setBlk, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, "<!--"), [[txtCod]], // Era comentario
TxtSplitBy2Fast(txtCod, "<", ">")) // Romper x etiquetas, no recursivo
})); // De conjunto de conjuntos a conjunto lineal
Set setHtm = EvalSet(setTag, Text(Text txtCod)
{
Case(
TxtBeginStrict(txtCod, "<!--"), // Comentario
SHiRemHtm + HtmAsc2Xml(txtCod) + SHiEndHtm,
Or(TxtBeginStrict(txtCod, "<"), TxtEndStrict(Compact(txtCod), ">")),
SHiTagHtm + SHiJscHtm(txtCod) + SHiEndHtm, // Etiqueta
TRUE,
HtmAsc2Xml(txtCod))
});
SetSum(setHtm)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Xml que recibe como parametro pero sin enmarcar en las etiquetas
<pre><code> y </code></pre>
Emplea la version no recursiva TxtSplitBy2Fast(), aunque menos robusta que
TxtSplitBy2Tag(), para evitar caidas en fichero Xml de cierta longitud.",
SHiXmlHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiXmlPre(Text codInp) // Codigo Xml
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiXmlHtm(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Xml que recibe como parametro.",
SHiXmlPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiEmbHtm(Text codInp) // Codigo Html con Javscript y Tol embebido
//////////////////////////////////////////////////////////////////////////////
{
Set setTol = TxtSplitBy2Tag(codInp, "<"+"{", "}"+">"); // Tol embebido
Set setJsc = BinGroup("<<", EvalSet(setTol, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, "<"+"{"), [[txtCod]], // Es Tol embebido
TxtSplitBy2Tag(txtCod, "<script", "</script>")) // Javascript
})); // De conjunto de conjuntos a conjunto lineal
Set setHtm = EvalSet(setJsc, Text(Text txtCod)
{
Case(
TxtBeginStrict(txtCod, "<"+"{"), // Tol embebido
SHiCodEmb + SHiTolHtm(txtCod) + SHiEndHtm,
TxtBeginStrict(txtCod, "<script"), // Javascript embebido
SHiCodEmb + SHiJscHtm(txtCod) + SHiEndHtm,
TRUE, // Resto de codigo con tags Xml / Html
SHiXmlHtm(txtCod))
});
SetSum(setHtm)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Html basico que recibe como parametro pero sin enmarcar en las etiquetas
<pre><code> y </code></pre>.",
SHiEmbHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiEmbPre(Text codInp) // // Codigo Html con Javscript y Tol embebido
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiEmbHtm(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Xml que recibe como parametro.",
SHiEmbPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiAscPre(Text codInp) // // Fichero Ascii
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(HtmAsc2Xml(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html del contenido Ascii que recibe como parametro.
Unicamente cambia los caracteres especiales con HtmAsc2Xml() y pone las
etiquetas <pre><code> y </code></pre>",
SHiAscPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiImgSrc(Text filPth) // Ruta al fichero grafico
//////////////////////////////////////////////////////////////////////////////
{ "\n<img src='"+filPth+"' class='Mid'>\n" };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html para visualizar el fichero grafico, cuya ruta recibe
como parametro, de una forma simple.",
SHiImgSrc);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiCompact(Text codHtm) // // Codigo Html ya autogenerado
//////////////////////////////////////////////////////////////////////////////
{
ReplaceTable(codHtm, [[ [["<pre><code> ", "<pre><code>"]],
[["<pre><code>\n", "<pre><code>"]],
[[" </code></pre>", "</code></pre>"]],
[["\n</code></pre>", "</code></pre>"]] ]])
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de eliminar las lineas en blanco antes y
despues del <pre><code> y </code></pre>.",
SHiCompact);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiPreCode(Text filPth, // Nombre o ruta del fichero para la extension
Text filTxt) // Codigo ya leido del fichero, todo o parte
//////////////////////////////////////////////////////////////////////////////
{
Text filExt = ToLower(GetFileExtension(filPth));
Text shiCod = Case(
filExt == "tol", SHiTolPre(filTxt), // Time Oriented Language
filExt == "bst", SHiTolPre(filTxt), // Fichero Bst de Tol
// Bdt como Ascii por velocidad
filExt == "bat", SHiCmdPre(filTxt), // Command bat
filExt == "css", SHiCssPre(filTxt), // Cascade style sheet
filExt == "gpl", SHiGplPre(filTxt), // Gnuplot
filExt == "js", SHiJscPre(filTxt), // Javascript
filExt == "sql", SHiSqlPre(filTxt), // Sql
filExt == "xml", SHiXmlPre(filTxt), // Xml
filExt == "htm", SHiEmbPre(filTxt), // Htm
filExt == "html", SHiEmbPre(filTxt), // Html
filExt == "age", SHiEmbPre(filTxt), // Html
filExt == "gif", SHiImgSrc(filPth), // Grafico Gif, img src path
filExt == "jpg", SHiImgSrc(filPth), // Grafico Jpeg, img src path
filExt == "png", SHiImgSrc(filPth), // Grafico Png, img src path
TRUE, SHiAscPre(filTxt) // Ascii, limpiar y con pre y code
);
SHiCompact(shiCod)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
filTxt que se la leido, total o parcialmente, de fichero filPth.
Recibe el nombre o ruta del fichero para saber su extension y de ahi el
lenguaje de programacion.",
SHiPreCode);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiPreFile(Text filPth) // Ruta del fichero de entrada
//////////////////////////////////////////////////////////////////////////////
{ SHiPreCode(filPth, ReadFile(filPth)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada a todo el
codigo del fichero que recibe como parametro.",
SHiPreFile);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// FILE : shi.tol
// AUTHOR : http://www.asolver.com
// PURPOSE : Funciones de sintaxis realzada (syntax highlight).
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// CONSTANTS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemOpn = "/"+"*";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Inicio tipico de un comentario de bloque.", SHiRemOpn);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemCls = "*"+"/";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Cierre tipico de un comentario de bloque.", SHiRemCls);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiQuo = Char(34);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Comillas dobles.", SHiQuo);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemHtm = "<span class='CodRem'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para un comentario.", SHiRemHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiQu1Htm = "<span class='CodTxt'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para un texto de primer nivel.", SHiQu1Htm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiQu2Htm = "<span class='CodSub'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para un subtexto de segundo nivel.", SHiQu2Htm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiTagHtm = "<span class='CodTag'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para el inicio de una etiqueta.", SHiTagHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiCodEmb = "<span class='CodEmb'>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Span para el codigo embebido.", SHiCodEmb);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiEndHtm = "</span>";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Cierre de un span.", SHiEndHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set SHiRemStrCodSet(Text txtInp, // Texto de entrada
Text remOpn, // Apertura de los comentarios de bloque
Text remCls, // Cierre de los comentarios de bloque
Text remLin, // Apertura de los comentarios de linea
Text strQu1, // Delimitador de textos alto nivel (ie "")
Text strQu2) // Delimitacor de textos bajo nivel (ie '')
//////////////////////////////////////////////////////////////////////////////
{
Set setBlk = If(remOpn == "", [[txtInp]], // No hay comentarios de bloque
TxtSplitBy2Tag(txtInp, remOpn, remCls)); // Comenta bloque
Set setQu1 = BinGroup("<<", EvalSet(setBlk, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, remOpn), [[txtCod]], // Era comentario de bloque
TxtSplitBy1Tag(txtCod, strQu1)) // Romper por textos entrecomillados
})); // De conjunto de conjuntos a conjunto lineal
Set setQu2 = If(strQu2 == "", setQu1, // Si no se emplea
{
BinGroup("<<", EvalSet(setQu1, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, remOpn), [[txtCod]], // Era comentario bloque
If(TxtBeginStrict(txtCod, strQu1), [[txtCod]], // Quote alto nivel
TxtSplitBy1Tag(txtCod, strQu2))) // Romper textos y entrecomillados
})) // De conjunto de conjuntos a conjunto lineal
});
Set setLin = If(remLin == "", setQu2, // Si no se emplea
{
BinGroup("<<", EvalSet(setQu2, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, remOpn), [[txtCod]], // Era comentario bloque
If(TxtBeginStrict(txtCod, strQu1), [[txtCod]], // Quote alto nivel
If(TxtBeginStrict(txtCod, strQu2), [[txtCod]], // Quote bajo nivel
TxtSplitBy2Tag(txtCod, remLin, "\n")))) // Romper comentarios linea
})) // De conjunto de conjuntos a conjunto lineal
});
setLin
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto de textos resultado de separar los comentarios de bloque,
los comentarios de linea, los textos entrecomillados y el codigo.",
SHiRemStrCodSet);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemStrCodHtm(Text txtInp, // Texto de entrada
Text remOpn, // Apertura de los comentarios de bloque
Text remCls, // Cierre de los comentarios de bloque
Text remLin, // Apertura de los comentarios de linea
Text strQu1, // Delimitador de textos alto nivel (ie "")
Text strQu2) // Delimitacor de textos bajo nivel (ie '')
//////////////////////////////////////////////////////////////////////////////
{
Set setBlk = SHiRemStrCodSet(txtInp,remOpn,remCls,remLin,strQu1,strQu2);
Set setHtm = EvalSet(setBlk, Text(Text txtCod)
{
Case(
TxtBeginStrict(txtCod, remOpn),
SHiRemHtm + HtmAsc2Xml(txtCod) + SHiEndHtm,
TxtBeginStrict(txtCod, strQu1),
SHiQu1Htm + HtmAsc2Xml(txtCod) + SHiEndHtm,
TxtBeginStrict(txtCod, strQu2),
SHiQu2Htm + HtmAsc2Xml(txtCod) + SHiEndHtm,
TxtBeginStrict(txtCod, remLin),
SHiRemHtm + Replace(HtmAsc2Xml(txtCod), "\n", SHiEndHtm+"\n"),
TRUE,
HtmAsc2Xml(txtCod))
});
SetSum(setHtm)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo de
entrada txtImp.
El ReplaceTable() para transformar < y > no se puede aplicar desde el
principio porque a la hora de realzar codigo Html son los tags delimitadores
mas importantes, por eso hay que hacerlo trozo a trozo de codigo.",
SHiRemStrCodHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiPre(Text txtInp) // Texto de entrada
//////////////////////////////////////////////////////////////////////////////
{ "\n<pre><code>" + txtInp + "</code></pre>\n" };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de enmarcar txtImp entre las etiquetas
<pre><code> y </code></pre>.",
SHiPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiRemStrCodPre(Text txtInp, // Texto de entrada
Text remOpn, // Apertura de los comentarios de bloque
Text remCls, // Cierre de los comentarios de bloque
Text remLin, // Apertura de los comentarios de linea
Text strQu1, // Delimitador de textos alto nivel (ie "")
Text strQu2) // Delimitacor de textos bajo nivel (ie '')
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiRemStrCodHtm(txtInp,remOpn,remCls,remLin,strQu1,strQu2)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo de
txtImp enmarcado todo el resultado entre las etiquetas <pre><code> y
</code></pre>.",
SHiRemStrCodPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiTolHtm(Text codInp) // Codigo de entrada Tol
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodHtm(codInp, SHiRemOpn, SHiRemCls, "//", SHiQuo, "") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Tol de entrada que recibe como parametro pero sin enmarcar entre las
etiquetas <pre><code> y </code></pre>.",
SHiTolHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiTolPre(Text codInp) // Codigo de entrada Tol
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiTolHtm(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Tol de entrada que recibe como parametro.",
SHiTolPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiJscHtm(Text codInp) // Codigo de entrada Javascript
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodHtm(codInp, SHiRemOpn, SHiRemCls, "//", SHiQuo, "'") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Javascript de entrada que recibe como parametro pero sin enmarcar entre las
etiquetas <pre><code> y </code></pre>.",
SHiJscHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiJscPre(Text codInp) // Codigo de entrada Javascript
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiJscHtm(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Javascript de entrada que recibe como parametro.",
SHiJscPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiSqlPre(Text codInp) // Codigo de entrada Sql
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodPre(codInp, "", "", "--", "'", "") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Sql de entrada que recibe como parametro.",
SHiSqlPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiGplPre(Text codInp) // Codigo de entrada Gnuplot
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodPre(codInp, "", "", "#", "'", "") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Gnuplot de entrada que recibe como parametro.",
SHiGplPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiCmdPre(Text codInp) // Codigo de entrada de mandatos Dos
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodPre(codInp, "", "", "::", SHiQuo, "") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
de mandatos para el Cmd de Dos que recibe como parametro.",
SHiCmdPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiCssPre(Text codInp) // Codigo de entrada Cascade style sheet
//////////////////////////////////////////////////////////////////////////////
{ SHiRemStrCodPre(codInp, SHiRemOpn, SHiRemCls, "", SHiQuo, "'") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Cascade style sheet que recibe como parametro.",
SHiCssPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiXmlHtm(Text codInp) // Codigo Xml
//////////////////////////////////////////////////////////////////////////////
{
Set setBlk = TxtSplitBy2Tag(codInp, "<!--", "-->"); // Romper x comments
Set setTag = BinGroup("<<", EvalSet(setBlk, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, "<!--"), [[txtCod]], // Era comentario
TxtSplitBy2Fast(txtCod, "<", ">")) // Romper x etiquetas, no recursivo
})); // De conjunto de conjuntos a conjunto lineal
Set setHtm = EvalSet(setTag, Text(Text txtCod)
{
Case(
TxtBeginStrict(txtCod, "<!--"), // Comentario
SHiRemHtm + HtmAsc2Xml(txtCod) + SHiEndHtm,
Or(TxtBeginStrict(txtCod, "<"), TxtEndStrict(Compact(txtCod), ">")),
SHiTagHtm + SHiJscHtm(txtCod) + SHiEndHtm, // Etiqueta
TRUE,
HtmAsc2Xml(txtCod))
});
SetSum(setHtm)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Xml que recibe como parametro pero sin enmarcar en las etiquetas
<pre><code> y </code></pre>
Emplea la version no recursiva TxtSplitBy2Fast(), aunque menos robusta que
TxtSplitBy2Tag(), para evitar caidas en fichero Xml de cierta longitud.",
SHiXmlHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiXmlPre(Text codInp) // Codigo Xml
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiXmlHtm(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Xml que recibe como parametro.",
SHiXmlPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiEmbHtm(Text codInp) // Codigo Html con Javscript y Tol embebido
//////////////////////////////////////////////////////////////////////////////
{
Set setTol = TxtSplitBy2Tag(codInp, "<"+"{", "}"+">"); // Tol embebido
Set setJsc = BinGroup("<<", EvalSet(setTol, Set(Text txtCod)
{
If(TxtBeginStrict(txtCod, "<"+"{"), [[txtCod]], // Es Tol embebido
TxtSplitBy2Tag(txtCod, "<script", "</script>")) // Javascript
})); // De conjunto de conjuntos a conjunto lineal
Set setHtm = EvalSet(setJsc, Text(Text txtCod)
{
Case(
TxtBeginStrict(txtCod, "<"+"{"), // Tol embebido
SHiCodEmb + SHiTolHtm(txtCod) + SHiEndHtm,
TxtBeginStrict(txtCod, "<script"), // Javascript embebido
SHiCodEmb + SHiJscHtm(txtCod) + SHiEndHtm,
TRUE, // Resto de codigo con tags Xml / Html
SHiXmlHtm(txtCod))
});
SetSum(setHtm)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Html basico que recibe como parametro pero sin enmarcar en las etiquetas
<pre><code> y </code></pre>.",
SHiEmbHtm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiEmbPre(Text codInp) // // Codigo Html con Javscript y Tol embebido
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(SHiEmbHtm(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
Xml que recibe como parametro.",
SHiEmbPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiAscPre(Text codInp) // // Fichero Ascii
//////////////////////////////////////////////////////////////////////////////
{ SHiPre(HtmAsc2Xml(codInp)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html del contenido Ascii que recibe como parametro.
Unicamente cambia los caracteres especiales con HtmAsc2Xml() y pone las
etiquetas <pre><code> y </code></pre>",
SHiAscPre);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiImgSrc(Text filPth) // Ruta al fichero grafico
//////////////////////////////////////////////////////////////////////////////
{ "\n<img src='"+filPth+"' class='Mid'>\n" };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html para visualizar el fichero grafico, cuya ruta recibe
como parametro, de una forma simple.",
SHiImgSrc);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiCompact(Text codHtm) // // Codigo Html ya autogenerado
//////////////////////////////////////////////////////////////////////////////
{
ReplaceTable(codHtm, [[ [["<pre><code> ", "<pre><code>"]],
[["<pre><code>\n", "<pre><code>"]],
[[" </code></pre>", "</code></pre>"]],
[["\n</code></pre>", "</code></pre>"]] ]])
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de eliminar las lineas en blanco antes y
despues del <pre><code> y </code></pre>.",
SHiCompact);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiPreCode(Text filPth, // Nombre o ruta del fichero para la extension
Text filTxt) // Codigo ya leido del fichero, todo o parte
//////////////////////////////////////////////////////////////////////////////
{
Text filExt = ToLower(GetFileExtension(filPth));
Text shiCod = Case(
filExt == "tol", SHiTolPre(filTxt), // Time Oriented Language
filExt == "bst", SHiTolPre(filTxt), // Fichero Bst de Tol
// Bdt como Ascii por velocidad
filExt == "bat", SHiCmdPre(filTxt), // Command bat
filExt == "css", SHiCssPre(filTxt), // Cascade style sheet
filExt == "gpl", SHiGplPre(filTxt), // Gnuplot
filExt == "js", SHiJscPre(filTxt), // Javascript
filExt == "sql", SHiSqlPre(filTxt), // Sql
filExt == "xml", SHiXmlPre(filTxt), // Xml
filExt == "htm", SHiEmbPre(filTxt), // Htm
filExt == "html", SHiEmbPre(filTxt), // Html
filExt == "age", SHiEmbPre(filTxt), // Html
filExt == "gif", SHiImgSrc(filPth), // Grafico Gif, img src path
filExt == "jpg", SHiImgSrc(filPth), // Grafico Jpeg, img src path
filExt == "png", SHiImgSrc(filPth), // Grafico Png, img src path
TRUE, SHiAscPre(filTxt) // Ascii, limpiar y con pre y code
);
SHiCompact(shiCod)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada al codigo
filTxt que se la leido, total o parcialmente, de fichero filPth.
Recibe el nombre o ruta del fichero para saber su extension y de ahi el
lenguaje de programacion.",
SHiPreCode);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text SHiPreFile(Text filPth) // Ruta del fichero de entrada
//////////////////////////////////////////////////////////////////////////////
{ SHiPreCode(filPth, ReadFile(filPth)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el codigo Html resultado de aplicar sintaxis realzada a todo el
codigo del fichero que recibe como parametro.",
SHiPreFile);
//////////////////////////////////////////////////////////////////////////////
Dct.Writer documenta programas Tol generado agendas para Html
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio