Secciones de la página

txt. tol


Declaraciones


Funciones de nombre corto


Funciones


Time oriented language


Árbol de ficheros

Funciones

Text W()

Real TxtCountLeftChars()

Set TxtLineWrap()

Set TxtParagraphWrap()

Text TxtParagraphsWrap()

Set TxtTokenizer()

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









txt.tol de Sfk.Wrap

Funciones de texto.

Declaraciones

Funciones de nombre corto

  • Text W(Text txtVal)
    Retorna un camino en formato Unix convertido a formato Windows/DOS.

Funciones

  • Real TxtCountLeftChars(Text txtInp, Text oneChr)
    Retorna el numero de caracteres iniciales de txtInp que son iguales al caracter de entrada oneChr.
  • Set TxtLineWrap(Text txtInp, Real linMax, Real cmpCtr)
    Retorna un conjunto de 2 texto el primero con un máximo de linMax caracteres y el segundo con el resto. Es el resultado de cortar txtInp por el primer blanco que permita que el corte cumpla la condición inicial. Si el texto de entrada es mas corte que linMax retorna un conjunto formado por el texto inicial y la tira vacia. Si el corte es imposible busca el mejor corte posible y si no lo encuentra retorna un conjunto formado por el texto inicial y la tira vacia. Si cmpCtr es true los resultados son compactados. Tambien existe en Tol la funcion Wrap() con ciertas semejanzas, aunque mas a TxtParagraphWrap().
  • Set TxtParagraphWrap(Text txtInp, Real linMax, Real cmpCtr)
    Retorna un conjunto de textos resultado de aplicar recursivamente la funcion TxtLineWrap(), lo que permite recortar párrafos. Tambien existe en Tol la funcion Wrap() con ciertas semejanzas.
  • Text TxtParagraphsWrap(Text txtInp, Real linMax)
    Retorna un textos resultado de aplicar la funcion TxtParagraphWrap() a todos sus parrafos. Entiende que cada parrafo termina en un punto y salto de linea.
  • Set TxtTokenizer(Text txtInp, Text tagBrk)
    Retorna un conjunto de textos resultado de cortar el texto de entrada por un unico tag tagBrk no incluyendo el tag tagBrk dentro de los textos. Se soporta en la funcion Tol Tokenizer() que rompe por un unico caracter. Usa como caracter interno de corte el 7 (bell), esperando que no aparezca.

Funciones de nombre corto

Text W()

//////////////////////////////////////////////////////////////////////////////
Text W(Text txtVal) // Text
//////////////////////////////////////////////////////////////////////////////
{ Replace(txtVal, "/", "\\") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un camino en formato Unix convertido a formato Windows/DOS.",
W);
//////////////////////////////////////////////////////////////////////////////

Funciones

Real TxtCountLeftChars()

//////////////////////////////////////////////////////////////////////////////
Real TxtCountLeftChars(Text txtInp, // Texto de entrada
                       Text oneChr) // Caracteres iniciales a contar
//////////////////////////////////////////////////////////////////////////////
{
  Real numChr = 1;                  // Contador de elementos
  Real txtLen = TextLength(txtInp); // Numero de caracteres
  
  Real While(And(LE(numChr, txtLen), Sub(txtInp, numChr, numChr) == oneChr),
  {
    Real (numChr:= Copy(numChr) + 1);

    TRUE
  });
  If(Sub(txtInp, numChr, numChr) != oneChr, numChr-1, numChr)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el numero de caracteres iniciales de txtInp que son iguales al
caracter de entrada oneChr.",
TxtCountLeftChars);
//////////////////////////////////////////////////////////////////////////////

Set TxtLineWrap()

//////////////////////////////////////////////////////////////////////////////
Set  TxtLineWrap(Text txtInp, // Texto de entrada
                 Real linMax, // Maximo numero de caracteres por linea
                 Real cmpCtr) // Si true entonces compacta
//////////////////////////////////////////////////////////////////////////////
{
  Text txtCmp = If(cmpCtr, Compact(txtInp), txtInp);
  Text txtRev = Reverse(txtCmp);
  Real txtLen = TextLength(txtCmp);
  Set  cutSet = If(LE(txtLen, linMax), [[txtCmp, ""]], // Ya esta hecho
  {
    Real blkPos = TextFind(txtRev, " ", txtLen-linMax); // Busca para atras

    If(GE(blkPos, 1),
    {
      SetOfText(Sub(txtCmp, 0,               txtLen-blkPos),
                Sub(txtCmp, txtLen-blkPos+1, txtLen))
    },
    {
      // No se puede cortar
      Real blkBad = TextFind(txtCmp, " ", linMax+1); // Busca hacia adelante

      If(LT(blkBad, 0), [[txtCmp, ""]], // No hay corte posible
      {
        SetOfText(Sub(txtCmp, 0,        blkBad-1), // Hay un mal corte
                  Sub(txtCmp, blkBad+1, txtLen))
      })
    })
  });
  If(cmpCtr, SetOfText(Compact(cutSet[1]),Compact(cutSet[2])), cutSet)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto de 2 texto el primero con un máximo de linMax caracteres
y el segundo con el resto.
Es el resultado de cortar txtInp por el primer blanco que permita que el corte
cumpla la condición inicial.
Si el texto de entrada es mas corte que linMax retorna un conjunto formado
por el texto inicial y la tira vacia.
Si el corte es imposible busca el mejor corte posible y si no lo encuentra
retorna un conjunto formado por el texto inicial y la tira vacia.
Si cmpCtr es true los resultados son compactados.
Tambien existe en Tol la funcion Wrap() con ciertas semejanzas,
aunque mas a TxtParagraphWrap().",
TxtLineWrap);
//////////////////////////////////////////////////////////////////////////////

Set TxtParagraphWrap()

//////////////////////////////////////////////////////////////////////////////
Set  TxtParagraphWrap(Text txtInp, // Texto de entrada
                      Real linMax, // Maximo numero de caracteres por linea
                      Real cmpCtr) // Si true entonces compacta
//////////////////////////////////////////////////////////////////////////////
{
  Set  setTxt = TxtLineWrap(txtInp, linMax, cmpCtr);
  Set  setIni = SetOfText(setTxt[1]);

  If(setTxt[2]=="", setIni,
                    setIni << TxtParagraphWrap(setTxt[2], linMax, cmpCtr))
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto de textos resultado de aplicar recursivamente la funcion
TxtLineWrap(), lo que permite recortar párrafos.
Tambien existe en Tol la funcion Wrap() con ciertas semejanzas.",
TxtParagraphWrap);
//////////////////////////////////////////////////////////////////////////////

Text TxtParagraphsWrap()

//////////////////////////////////////////////////////////////////////////////
Text TxtParagraphsWrap(Text txtInp, // Texto de entrada
                       Real linMax) // Maximo numero de caracteres por linea
//////////////////////////////////////////////////////////////////////////////
{
  Text txtCls = ReplaceTable(txtInp,
  [[
    [[" \n","\n"]] // Limpiar blancos finales
  ]]); 

  Set  parSet = TxtTokenizer(txtCls, ".\n"); // Respetar los parrafos puros
  Set  parCic = EvalSet(parSet, Text(Text inpPar)
  {
    If(inpPar=="", "",
    {
      Real iniWhi = TxtCountLeftChars(inpPar, " "); // Indentacion del parrafo
      Set  linSet = TxtParagraphWrap(inpPar+".", linMax - iniWhi, TRUE);
      Text indent = Repeat(" ", iniWhi);
      Set  linCic = EvalSet(linSet, Text(Text linInp) { indent+linInp+"\n" });
      SetSum(linCic)
    })
  });
  SetSum(parCic)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un textos resultado de aplicar la funcion TxtParagraphWrap() a todos
sus parrafos.
Entiende que cada parrafo termina en un punto y salto de linea.",
TxtParagraphsWrap);
//////////////////////////////////////////////////////////////////////////////

Set TxtTokenizer()

//////////////////////////////////////////////////////////////////////////////
Set TxtTokenizer(Text txtInp, // Texto de entrada
                 Text tagBrk) // Tag por el que se corta
//////////////////////////////////////////////////////////////////////////////
{ Tokenizer(Replace(txtInp, tagBrk, Char(7)), Char(7)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto de textos resultado de cortar el texto de entrada por un
unico tag tagBrk no incluyendo el tag tagBrk dentro de los textos.
Se soporta en la funcion Tol Tokenizer() que rompe por un unico caracter.
Usa como caracter interno de corte el 7 (bell), esperando que no aparezca.",
TxtTokenizer);
//////////////////////////////////////////////////////////////////////////////

Time oriented language

//////////////////////////////////////////////////////////////////////////////
// FILE    : txt.tol
// AUTHOR  : http://www.asolver.com
// PURPOSE : Funciones de texto.
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
// SHORTNAMES
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
Text W(Text txtVal) // Text
//////////////////////////////////////////////////////////////////////////////
{ Replace(txtVal, "/", "\\") };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un camino en formato Unix convertido a formato Windows/DOS.",
W);
//////////////////////////////////////////////////////////////////////////////


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

//////////////////////////////////////////////////////////////////////////////
Real TxtCountLeftChars(Text txtInp, // Texto de entrada
                       Text oneChr) // Caracteres iniciales a contar
//////////////////////////////////////////////////////////////////////////////
{
  Real numChr = 1;                  // Contador de elementos
  Real txtLen = TextLength(txtInp); // Numero de caracteres
  
  Real While(And(LE(numChr, txtLen), Sub(txtInp, numChr, numChr) == oneChr),
  {
    Real (numChr:= Copy(numChr) + 1);

    TRUE
  });
  If(Sub(txtInp, numChr, numChr) != oneChr, numChr-1, numChr)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna el numero de caracteres iniciales de txtInp que son iguales al
caracter de entrada oneChr.",
TxtCountLeftChars);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Set  TxtLineWrap(Text txtInp, // Texto de entrada
                 Real linMax, // Maximo numero de caracteres por linea
                 Real cmpCtr) // Si true entonces compacta
//////////////////////////////////////////////////////////////////////////////
{
  Text txtCmp = If(cmpCtr, Compact(txtInp), txtInp);
  Text txtRev = Reverse(txtCmp);
  Real txtLen = TextLength(txtCmp);
  Set  cutSet = If(LE(txtLen, linMax), [[txtCmp, ""]], // Ya esta hecho
  {
    Real blkPos = TextFind(txtRev, " ", txtLen-linMax); // Busca para atras

    If(GE(blkPos, 1),
    {
      SetOfText(Sub(txtCmp, 0,               txtLen-blkPos),
                Sub(txtCmp, txtLen-blkPos+1, txtLen))
    },
    {
      // No se puede cortar
      Real blkBad = TextFind(txtCmp, " ", linMax+1); // Busca hacia adelante

      If(LT(blkBad, 0), [[txtCmp, ""]], // No hay corte posible
      {
        SetOfText(Sub(txtCmp, 0,        blkBad-1), // Hay un mal corte
                  Sub(txtCmp, blkBad+1, txtLen))
      })
    })
  });
  If(cmpCtr, SetOfText(Compact(cutSet[1]),Compact(cutSet[2])), cutSet)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto de 2 texto el primero con un máximo de linMax caracteres
y el segundo con el resto.
Es el resultado de cortar txtInp por el primer blanco que permita que el corte
cumpla la condición inicial.
Si el texto de entrada es mas corte que linMax retorna un conjunto formado
por el texto inicial y la tira vacia.
Si el corte es imposible busca el mejor corte posible y si no lo encuentra
retorna un conjunto formado por el texto inicial y la tira vacia.
Si cmpCtr es true los resultados son compactados.
Tambien existe en Tol la funcion Wrap() con ciertas semejanzas,
aunque mas a TxtParagraphWrap().",
TxtLineWrap);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Set  TxtParagraphWrap(Text txtInp, // Texto de entrada
                      Real linMax, // Maximo numero de caracteres por linea
                      Real cmpCtr) // Si true entonces compacta
//////////////////////////////////////////////////////////////////////////////
{
  Set  setTxt = TxtLineWrap(txtInp, linMax, cmpCtr);
  Set  setIni = SetOfText(setTxt[1]);

  If(setTxt[2]=="", setIni,
                    setIni << TxtParagraphWrap(setTxt[2], linMax, cmpCtr))
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto de textos resultado de aplicar recursivamente la funcion
TxtLineWrap(), lo que permite recortar párrafos.
Tambien existe en Tol la funcion Wrap() con ciertas semejanzas.",
TxtParagraphWrap);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Text TxtParagraphsWrap(Text txtInp, // Texto de entrada
                       Real linMax) // Maximo numero de caracteres por linea
//////////////////////////////////////////////////////////////////////////////
{
  Text txtCls = ReplaceTable(txtInp,
  [[
    [[" \n","\n"]] // Limpiar blancos finales
  ]]); 

  Set  parSet = TxtTokenizer(txtCls, ".\n"); // Respetar los parrafos puros
  Set  parCic = EvalSet(parSet, Text(Text inpPar)
  {
    If(inpPar=="", "",
    {
      Real iniWhi = TxtCountLeftChars(inpPar, " "); // Indentacion del parrafo
      Set  linSet = TxtParagraphWrap(inpPar+".", linMax - iniWhi, TRUE);
      Text indent = Repeat(" ", iniWhi);
      Set  linCic = EvalSet(linSet, Text(Text linInp) { indent+linInp+"\n" });
      SetSum(linCic)
    })
  });
  SetSum(parCic)
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un textos resultado de aplicar la funcion TxtParagraphWrap() a todos
sus parrafos.
Entiende que cada parrafo termina en un punto y salto de linea.",
TxtParagraphsWrap);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Set TxtTokenizer(Text txtInp, // Texto de entrada
                 Text tagBrk) // Tag por el que se corta
//////////////////////////////////////////////////////////////////////////////
{ Tokenizer(Replace(txtInp, tagBrk, Char(7)), Char(7)) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna un conjunto de textos resultado de cortar el texto de entrada por un
unico tag tagBrk no incluyendo el tag tagBrk dentro de los textos.
Se soporta en la funcion Tol Tokenizer() que rompe por un unico caracter.
Usa como caracter interno de corte el 7 (bell), esperando que no aparezca.",
TxtTokenizer);
//////////////////////////////////////////////////////////////////////////////

Árbol de ficheros

Sfk.Wrap formateador a lineas de 78 caracteres de textos en Ascii

  • make.tol formatea textos a lineas de 78 caracteres a traves del clipboard
  • wrap.bat mandato de ejecucion del programa de formateo tipo wrap
  • tol directorios de codigo fuente en el lenguaje de programacion Tol
    • cmm funciones comunes de textos y de gestion del clipboard
      • txt.tol funciones de textos, por ejemplo, para realizar wrap
      • sfk.tol funciones para manejar sfk169.exe de Swiss File Knife
    • inc.tol para la inclusion de ficheros en lenguaje Tol
  • ../../Bin/sfk directorio para mandatos y ejecutables de Swiss File Knife
  • sfk_wrap.pdf documento resumen de funciones del programa de formateo

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

Tol