Secciones de la página

tme. tol


Declaraciones


Constantes


Funciones


Time oriented language


Árbol de ficheros

Funciones

Set TmeGetMacros()

Text TmeFormat()

Set TmeEvalMacros()

Set TmeShareMacros()

Text TmeSubMacros()

Text TmeExpandFile()

Real TmeFile()

Tol

Artículos del sitio

Presentación de Tol

Todos los programas

Simuladores visuales

Sitios que me gustan

Por categorías

Algoritmia

Búsqueda y ordenación

Computación fisiológica

Editorial y edición

Gráficos de datos

Herramientas y utilidades

Hipertexto

Informática forense

Lectura óptica de datos

Metaprogramación

No determinista

Ofimática

Recursión e iteración

Reglas y restricciones

Series y estadística









tme.tol de Omr.Forms

Macro-expansor basico de Tol para ser inyectado en Html o en otros lenguajes de programacion. Por defecto utiliza tags que combinan < y { el inicial y el final } y > como Php utiliza <? y ?> y Asp <% y %>. Esta es la version basica que permite inyectar Tol dentro de semillas Html del tipo seed.htm pero no dentro del Html de las agendas de post, esto es, que al expandir Tol dentro del Html aparezca no solo codigo Html sino, de nuevo, codigo Tol, existe una version que si lo admite.

Declaraciones

Constantes

  • Text TmeIni
    Tag inicial por defecto, puede usarse otro.
  • Text TmeEnd
    Tag final por defecto, puede usarse otro.
  • Text TmeSep
    Caracter de uso interno que usa Tokenizer().
  • Text TmeEmpty
    Todo el codigo inyectado ha de retornar algun texto. Si el codigo solo tiene definiciones, sin retornar nada util, siempre se puede retornar TmeEmpty.

Funciones

  • Set TmeGetMacros(Text tagIni, Text tagEnd, Text codTxt)
    Retorna un conjunto con todo el codigo entre los tags inicial y final.
  • Text TmeFormat(Anything retVal)
    Intenta retornar un texto a partir de otros tipo, es una funcion equivalente a la funcion de nombre corto de textos F().
  • Set TmeEvalMacros(Set codSet)
    Returns a set with the text results of all macros. This secuential evaluation does not let to share functions and variables between macros.
  • Set TmeShareMacros(Set codSet, Real codPos)
    Returns a set with the text results of all macros. This recursive evaluation lets to share definitions, functions and variables between macros.
  • Text TmeSubMacros(Text tagIni, Text tagEnd, Text codTxt, Real share)
    Returns the result of full macro expansion. The original remmark with the old code ReplaceTable(codTxt, repTab, 1) was: Be aware if you uses duplicated macros and assumes something about your order definitions. Now the function TxtReplaceSecuence(codTxt, repTab) make the replacements in a strick order. Inside this code always is called with share=TRUE.
  • Text TmeExpandFile(Text tagIni, Text tagEnd, Text inpFil, Text outFil)
    Returns the result of full macro expansion in inpFil. Update the file remmark from classic seed.htm to the output file name outFil. If outFil is not empty then writes the result in outFil This version does not use FilWriteIfDiff(), it always update all web site.
  • Real TmeFile(Text inpFil, Text outFil)
    Easy way to call TmeExpandFile() with the default values and behaviour. Returns true if some text was generated.

Constantes

Text TmeIni

//////////////////////////////////////////////////////////////////////////////
Text TmeIni = "<"+"{";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Tag inicial por defecto, puede usarse otro.", TmeIni);
//////////////////////////////////////////////////////////////////////////////

Text TmeEnd

//////////////////////////////////////////////////////////////////////////////
Text TmeEnd = "}"+">";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Tag final por defecto, puede usarse otro.", TmeIni);
//////////////////////////////////////////////////////////////////////////////

Text TmeSep

//////////////////////////////////////////////////////////////////////////////
Text TmeSep = Char(7);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Caracter de uso interno que usa Tokenizer().", TmeSep);
//////////////////////////////////////////////////////////////////////////////

Text TmeEmpty

//////////////////////////////////////////////////////////////////////////////
Text TmeEmpty = "";
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Todo el codigo inyectado ha de retornar algun texto. Si el codigo solo tiene
definiciones, sin retornar nada util, siempre se puede retornar TmeEmpty.",
TmeEmpty);
//////////////////////////////////////////////////////////////////////////////

Funciones

Set TmeGetMacros()

//////////////////////////////////////////////////////////////////////////////
Set TmeGetMacros(Text tagIni, // Initial tag
                 Text tagEnd, // Ending tag
                 Text codTxt) // Other programing language code
//////////////////////////////////////////////////////////////////////////////
{
  Text repTxt = Replace(codTxt, tagIni, TmeSep);
  Set  linSet = Tokenizer(repTxt, TmeSep);
  Real lenSet = Card(linSet);
  If(lenSet <= 1, Empty, // There aren't macros
  {
    Set For(2, lenSet, Text(Real posLin)
    {
      Text linTxt = linSet[posLin];
      Real posEnd = TextFind(linTxt, tagEnd, 1);
      If(posEnd <= 1, "", // Without ending (0) or not code inside (1)
                      Sub(linTxt, 1,posEnd-1))
    })
  })
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto con todo el codigo entre los tags inicial y final.",
TmeGetMacros);
//////////////////////////////////////////////////////////////////////////////

Text TmeFormat()

//////////////////////////////////////////////////////////////////////////////
Text TmeFormat(Anything retVal)
//////////////////////////////////////////////////////////////////////////////
{ F(retVal) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Intenta retornar un texto a partir de otros tipo, es una funcion equivalente
a la funcion de nombre corto de textos F().",
TmeFormat);
//////////////////////////////////////////////////////////////////////////////

Set TmeEvalMacros()

//////////////////////////////////////////////////////////////////////////////
Set TmeEvalMacros(Set codSet) // A set with Tol code that returs text
//////////////////////////////////////////////////////////////////////////////
{
  EvalSet(codSet, Text(Text codEle)
  {                                 // All the evaluations at the same level,
    Anything retVal = Eval(codEle); // can't share the definitions
    TmeFormat(retVal)               // Try to convert to text
  })
};  
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Returns a set with the text results of all macros. This secuential evaluation
does not let to share functions and variables between macros.",
TmeEvalMacros);
//////////////////////////////////////////////////////////////////////////////

Set TmeShareMacros()

//////////////////////////////////////////////////////////////////////////////
Set TmeShareMacros(Set  codSet, // Set of tol codes
                   Real codPos) // Position inside codSet (recursion counter)
//////////////////////////////////////////////////////////////////////////////
{
  Real lstPos = Card(codSet);
  If(codPos > lstPos, Empty, // Nothing to do
  {                                  // Evaluations at different stack levels,
    Anything retVal = Eval(codSet[codPos]); // can inherit definitions
    Text txtFmt = TmeFormat(retVal);        // Try to convert to text
    [[ txtFmt ]] << TmeShareMacros(codSet, codPos+1) // Recursion
  })
};  
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Returns a set with the text results of all macros. This recursive evaluation
lets to share definitions, functions and variables between macros.",
TmeShareMacros);
//////////////////////////////////////////////////////////////////////////////

Text TmeSubMacros()

//////////////////////////////////////////////////////////////////////////////
Text TmeSubMacros(Text tagIni, // Initial tag
                  Text tagEnd, // Ending tag
                  Text codTxt, // Other programing language code
                  Real share)  // If true share definitions between macros
//////////////////////////////////////////////////////////////////////////////
{
  Set macSet = TmeGetMacros(tagIni, tagEnd, codTxt);
  Set txtSet = If(share, TmeShareMacros(macSet, 1), TmeEvalMacros(macSet));

  Set repTab = For(1, Card(macSet), Set(Real macPos)
               { [[ Text(tagIni+macSet[macPos]+tagEnd), txtSet[macPos] ]] });
  TxtReplaceSecuence(codTxt, repTab) // ReplaceTable(codTxt, repTab, 1)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Returns the result of full macro expansion.
The original remmark with the old code ReplaceTable(codTxt, repTab, 1) was:
Be aware if you uses duplicated macros and assumes something about your order
definitions. Now the function TxtReplaceSecuence(codTxt, repTab) make the
replacements in a strick order.
Inside this code always is called with share=TRUE.",
TmeSubMacros);
//////////////////////////////////////////////////////////////////////////////

Text TmeExpandFile()

//////////////////////////////////////////////////////////////////////////////
Text TmeExpandFile(Text tagIni, // Initial tag
                   Text tagEnd, // Ending tag
                   Text inpFil, // Input file
                   Text outFil) // Output file
//////////////////////////////////////////////////////////////////////////////
{
  Text codTxt = ReadFile(inpFil);
  Text outTxt = TmeSubMacros(tagIni, tagEnd, codTxt, TRUE); // Sharing

  Text outRep = Replace(outTxt, "// FILE    : seed.htm",
                                "// FILE    : "+GetFileName(outFil));

  Text wriFil = If(outFil != "", WriteFile(outFil, outRep), "");
  outTxt
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Returns the result of full macro expansion in inpFil.
Update the file remmark from classic seed.htm to the output file name outFil.
If outFil is not empty then writes the result in outFil
This version does not use FilWriteIfDiff(), it always update all web site.",
TmeExpandFile);
//////////////////////////////////////////////////////////////////////////////

Real TmeFile()

//////////////////////////////////////////////////////////////////////////////
Real TmeFile(Text inpFil, // Input file
             Text outFil) // Output file
//////////////////////////////////////////////////////////////////////////////
{ If(TmeExpandFile(TmeIni, TmeEnd, inpFil, outFil) != "", TRUE, FALSE) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Easy way to call TmeExpandFile() with the default values and behaviour.
Returns true if some text was generated.",
TmeFile);
//////////////////////////////////////////////////////////////////////////////

Time oriented language

//////////////////////////////////////////////////////////////////////////////
// FILE    : tme.tol
// AUTHOR  : http://www.asolver.com
// PURPOSE : Macro-expansor basico de Tol para ser inyectado en Html o en
// otros lenguajes de programacion.
// Por defecto utiliza tags que combinan < y { el inicial y el final } y >
// como Php utiliza <? y ?> y Asp <% y %>.
// Esta es la version basica que permite inyectar Tol dentro de semillas Html
// del tipo seed.htm pero no dentro del Html de las agendas de post, esto es,
// que al expandir Tol dentro del Html aparezca no solo codigo Html sino,
// de nuevo, codigo Tol, existe una version que si lo admite.
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
// CONSTANTS
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
Text TmeIni = "<"+"{";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Tag inicial por defecto, puede usarse otro.", TmeIni);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Text TmeEnd = "}"+">";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Tag final por defecto, puede usarse otro.", TmeIni);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Text TmeSep = Char(7);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Caracter de uso interno que usa Tokenizer().", TmeSep);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Text TmeEmpty = "";
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Todo el codigo inyectado ha de retornar algun texto. Si el codigo solo tiene
definiciones, sin retornar nada util, siempre se puede retornar TmeEmpty.",
TmeEmpty);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
Set TmeGetMacros(Text tagIni, // Initial tag
                 Text tagEnd, // Ending tag
                 Text codTxt) // Other programing language code
//////////////////////////////////////////////////////////////////////////////
{
  Text repTxt = Replace(codTxt, tagIni, TmeSep);
  Set  linSet = Tokenizer(repTxt, TmeSep);
  Real lenSet = Card(linSet);
  If(lenSet <= 1, Empty, // There aren't macros
  {
    Set For(2, lenSet, Text(Real posLin)
    {
      Text linTxt = linSet[posLin];
      Real posEnd = TextFind(linTxt, tagEnd, 1);
      If(posEnd <= 1, "", // Without ending (0) or not code inside (1)
                      Sub(linTxt, 1,posEnd-1))
    })
  })
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto con todo el codigo entre los tags inicial y final.",
TmeGetMacros);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Text TmeFormat(Anything retVal)
//////////////////////////////////////////////////////////////////////////////
{ F(retVal) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Intenta retornar un texto a partir de otros tipo, es una funcion equivalente
a la funcion de nombre corto de textos F().",
TmeFormat);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Set TmeEvalMacros(Set codSet) // A set with Tol code that returs text
//////////////////////////////////////////////////////////////////////////////
{
  EvalSet(codSet, Text(Text codEle)
  {                                 // All the evaluations at the same level,
    Anything retVal = Eval(codEle); // can't share the definitions
    TmeFormat(retVal)               // Try to convert to text
  })
};  
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Returns a set with the text results of all macros. This secuential evaluation
does not let to share functions and variables between macros.",
TmeEvalMacros);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Set TmeShareMacros(Set  codSet, // Set of tol codes
                   Real codPos) // Position inside codSet (recursion counter)
//////////////////////////////////////////////////////////////////////////////
{
  Real lstPos = Card(codSet);
  If(codPos > lstPos, Empty, // Nothing to do
  {                                  // Evaluations at different stack levels,
    Anything retVal = Eval(codSet[codPos]); // can inherit definitions
    Text txtFmt = TmeFormat(retVal);        // Try to convert to text
    [[ txtFmt ]] << TmeShareMacros(codSet, codPos+1) // Recursion
  })
};  
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Returns a set with the text results of all macros. This recursive evaluation
lets to share definitions, functions and variables between macros.",
TmeShareMacros);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Text TmeSubMacros(Text tagIni, // Initial tag
                  Text tagEnd, // Ending tag
                  Text codTxt, // Other programing language code
                  Real share)  // If true share definitions between macros
//////////////////////////////////////////////////////////////////////////////
{
  Set macSet = TmeGetMacros(tagIni, tagEnd, codTxt);
  Set txtSet = If(share, TmeShareMacros(macSet, 1), TmeEvalMacros(macSet));

  Set repTab = For(1, Card(macSet), Set(Real macPos)
               { [[ Text(tagIni+macSet[macPos]+tagEnd), txtSet[macPos] ]] });
  TxtReplaceSecuence(codTxt, repTab) // ReplaceTable(codTxt, repTab, 1)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Returns the result of full macro expansion.
The original remmark with the old code ReplaceTable(codTxt, repTab, 1) was:
Be aware if you uses duplicated macros and assumes something about your order
definitions. Now the function TxtReplaceSecuence(codTxt, repTab) make the
replacements in a strick order.
Inside this code always is called with share=TRUE.",
TmeSubMacros);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Text TmeExpandFile(Text tagIni, // Initial tag
                   Text tagEnd, // Ending tag
                   Text inpFil, // Input file
                   Text outFil) // Output file
//////////////////////////////////////////////////////////////////////////////
{
  Text codTxt = ReadFile(inpFil);
  Text outTxt = TmeSubMacros(tagIni, tagEnd, codTxt, TRUE); // Sharing

  Text outRep = Replace(outTxt, "// FILE    : seed.htm",
                                "// FILE    : "+GetFileName(outFil));

  Text wriFil = If(outFil != "", WriteFile(outFil, outRep), "");
  outTxt
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Returns the result of full macro expansion in inpFil.
Update the file remmark from classic seed.htm to the output file name outFil.
If outFil is not empty then writes the result in outFil
This version does not use FilWriteIfDiff(), it always update all web site.",
TmeExpandFile);
//////////////////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////////////////
Real TmeFile(Text inpFil, // Input file
             Text outFil) // Output file
//////////////////////////////////////////////////////////////////////////////
{ If(TmeExpandFile(TmeIni, TmeEnd, inpFil, outFil) != "", TRUE, FALSE) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Easy way to call TmeExpandFile() with the default values and behaviour.
Returns true if some text was generated.",
TmeFile);
//////////////////////////////////////////////////////////////////////////////

Árbol de ficheros

Omr.Forms construye las páginas web Html del sitio web omrforms.es

  • make.tol proceso principal de generación del sitio web omrforms.es
  • tol directorios de código Tol
    • cmm funciones comunes
    • app funciones específicas de la aplicación
      • pdb.tol de manejo de los posts de una agenda
      • key.tol generación de palabras clave para páginas
    • inc.tol para la inclusión de ficheros Tol
  • agenda directorio destinado a la única agenda de post
    • agendadb.age ejemplo de un conjunto de posts de contenido para publicar
  • web directorio destinado a las páginas web generadas
    • css directorio para ficheros de estilo Cascade Style Sheet
      • common.css fichero de estilo para las páginas Html
    • seed.htm semilla de página Html con Tol embebido para generar otras
    • sitemap.xml mapa del sitio web generado automáticamente en Xml
    • preciospresupuestoslecturaoptica.html ejemplo del código Html de una de las páginas web generadas
  • ejemplos.html ejemplos visuales de 3 páginas Html generadas automáticamente
  • omr_forms.pdf documento resumen de funciones del programa constructor de web

2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio

Tol