Es el programa constructor del sitio web OmrForms.es, que es un
sitio dedicado a la comercialización de servicios y formularios en papel
para la lectura óptica de datos.
Los contenidos para este sitio web se estructuran en base a posts con 3
niveles de importancia (status) y que se guardan en un único fichero de
texto denominado agenda de posts que es un banco de contenidos.
Los 3 niveles de los posts son:
a) A de Anulado, significa que está en el banco de contenidos pero que
no se puplica,
b) B de Bajo, se publica, pero no sale en el menú principal en la parte
superior izquierda de todas las páginas web del sitio y
c) C de Común, se publica y aparece enlazado desde el menú principal de
todas las páginas.
Omr.Forms es un programa que puede considerarse básico en relación a otros
constructores de sitios web desarrollados en lenguaje Tol y que se
caracteriza por:
a) Emplear una única agenda de posts que se alberga en el fichero de
ruta agenda/agendadb.age.
b) Los posts no tienen clases para su categorización, a diferencia de
otros programas constructores de sitios webs.
c) Se basa en un macro-expansor simple de Tol embebido en Html.
d) Combina los títulos y los subtítulos,
alternativos y disponibles para cada post,
de forma que los contenido publicados no son siempre idénticos
a los publicados anteriormente.
e) La decoración lateral izquierda con ejemplos de formularios para
lectoras ópticas de marcas es tambien aleatoria,
por lo que es diferente en cada publicación.
f) Las páginas las crea de una forma circular,
siguiendo la misma secuencia de definición y las enlaza de tal manera,
que empezando por cualquier página, leyendo hasta el final y pidiendo
leer más, se pueden recorrer todas las páginas.
El programa OmrForms.es está basado en un macro-expansor simple de Tol en
Html que permite embeber código Tol dentro de una página semilla Html,
que opera a modo de template, y que hace que,
al ejecutarse dicho código Tol, se generen con este template todas las
páginas del sitio web con todos los diferentes contenidos de los posts de
la agenda.
El funcionamiento de este programa ha sido comprobado para las versiones de
Tol 1.1.5, 1.1.6 y 2.0.1 y no funciona con la versión 1.1.1.
Una de las causas de este no funcionamiento con la versión Tol 1.1.1 es la
falta de visibilidad desde una macros de las variables definidas dentro de
otras macros, esto es, que por ejemplo que la variable global CNT.ALL,
que se define dentro de una macro, para la siguiente macro no existe,
no la ve, eso si funciona en las versiones del lenguaje Tol más modernas.
Este programa OmrForms.es realiza automáticamente, entre otras funciones:
a) la creación de índices de artículos,
b) la extracción de las descripciones de las páginas, utilizando para ello
los textos resaltados en dichos contenidos y
c) la generación, para cada página, de la lista de palabras clave,
keywords, extrayendo del contenido las de mayor frecuencia de aparición.
De esta forma las descripciones y palabras clave, que declara en sus
campos Html meta correspondientes, son los más adecuados y particulares
para cada página, sin necesidad de que un humano realice esta tarea.
Otras de las funciones principales de este programa OmrForms.es son:
a) crear las páginas de control de errores,
b) el mapa del sitio web en lenguaje Xml y
c) comprobar qué páginas, documentos, imágenes, etc. han sido actualizadas
con posterioridad al último envío por ftp y poner dichos nuevos
contenidos online o actualizar los existentes.
Las opciones principales de Omr.Forms son:
a) la generación de páginas mediante la opción denominada web,
b) la creación del índice principal, homepage, y de las páginas absolutas,
que valen para protección de directorios y control de errores,
con la opción rot,
c) la elaboración del mapa del sitio en Xml con la opción xsm,
siglas de Xml site map,
d) con las opciones ftp, fup y snd la actualización por Ftp del sitio,
bien de todo el contenido (opciones ftp + snd, de send) o
bien de las últimas páginas, imágenes y documentos actualizados
(opciones fup + snd, de ftp update) y
e) mediante la opción tst se realizan unos tests de la funcionalidad
interna que comprueban ciertos funcionamientos del programa.
Omr.Forms construye las páginas web Html del sitio web omrforms.es
Inclusiones
Set allIncConstantes
Text makSepText agePthSet frmTabProceso
Text ctrExeReal makHlpReal makArtReal makRotReal makXsmReal makFtpReal makSndPruebas
Real makTst//////////////////////////////////////////////////////////////////////////////
Set allInc = Include("tol/inc.tol");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Inclusion de las funciones comunes y de aplicacion.", allInc);
//////////////////////////////////////////////////////////////////////////////
Struct PdbSt // Estructura para cada uno de los post que contiene la agenda
{
Text pstSta, // Status A(nulado), B(ajo, sin menu), C(comun, al menu)
Text filNam, // Fichero para el post
Text titLar, // Titulo largo del post
Text titSor, // Titulo corto del post
Text titSub, // Subtitulo del post
Text pstHtm, // Texto del post es html
Text pstDes // Descripcion del post
};
//////////////////////////////////////////////////////////////////////////////
Text makSep = "\n"+Repeat("_", 72)+"\n";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Linea horizontal para separar fases de operacion.",makSep);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text agePth = "agenda/agendadb.age";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Ruta a la agenda con el conjunto de post del web.",agePth);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set frmTab =
{
Text ageTxt = ReadFile(agePth);
Text ageImg = TxtBetween2Tag(ageTxt, // Text
"<!-- FRM -->", // Initial tag
"<!-- END -->", // End tag
TRUE);
Set ageSet = Tokenizer(ageImg,">");
Set ageCic = EvalSet(ageSet, Set(Text imgTxt)
{
Text iniTag = "<img class="+Q("FrmCnt")+" src="+Char(34);
Text endTag = Char(34);
Text altTag = "alt="+Char(34);
Text titTag = "title="+Char(34);
Text imgPth = TxtBetween2Tag(imgTxt, iniTag, endTag, TRUE);
Text imgAlt = TxtBetween2Tag(imgTxt, altTag, endTag, TRUE);
Text imgTit = TxtBetween2Tag(imgTxt, titTag, endTag, TRUE);
If(Or(imgPth=="", imgAlt=="", imgTit==""), Empty,
SetOfText(imgPth, imgAlt, imgTit))
});
Select(ageCic, Real(Set imgSet) { EQ(Card(imgSet), 3) })
};
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conjunto de las imagenes de los formularios OMR.",frmTab);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text ctrExe = If(Not(ObjectExist("Text","ctrBat")), "hlp",
If(ctrBat=="", "hlp",
ToLower(ctrBat)));
//////////////////////////////////////////////////////////////////////////////
PutDescription("Argumento validado para la ejecucion del make.",ctrExe);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makHlp = If(ctrExe!="hlp", FALSE,
{
Text WriteLn(
makSep+"help:
Usage: make [OPTION]
Builds omrforms.es site
OPTION
art: build all articles pages
rot: build root absolute page
xsm: build Xml site map
ftp: build ftp files (go to ftp dir and run manually or use make snd)
fup: build a file update protocol (newer than ftp.log file)
snd: send file via ftp/ftu
___
web: build local web: art, rot, xms
all: do all works: art, rot, xms, fup y snd.
hlp: show this help
tst: test some functions");
TRUE
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Es cierto si se ha visualizado la ayuda.",makHlp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makArt = If(!(ctrExe <: [["all", "web", "art"]]), FALSE,
{
Text WriteLn(makSep+"building all web pages...");
Real CtrMax = 5; // Numero de posts por pagina
Real CtrCxD = 360; // Caracteres por descripcion, LinkedIn 250, Facebook 300
Real CtrKxP = 36; // Palabras clave por pagina
Set CtrPdb = PdbRead(agePth); // Leer todos los posts
Set CtrBas = Select(CtrPdb, Real(Set pstObj) { pstObj->pstSta == "B" });
Set CtrCmn = Select(CtrPdb, Real(Set pstObj) { pstObj->pstSta == "C" });
Text WriteLn("Status __C "+F(Card(CtrCmn))+" registers");
Text CtrInC = PdbIndex(CtrCmn); // Articulos comunes para indices lateral
Text CtrInB = PdbIndex(CtrBas); // Articulos basicos
Text CtrInd = PdbIndex(CtrPdb); // Todos los articulos
Text inpPth = "web/seed.htm";
Text inpHtm = ReadFile(inpPth);
Set wriCic = For(1, Card(CtrPdb), Real(Real pdbPos)
{
Set CtrPst = CtrPdb[pdbPos];
Text CtrPth = "web/"+CtrPst->filNam+".html";
Text WriteLn("-> "+CtrPth);
Set CtrCic = SetSubCicle(CtrPdb, pdbPos, CtrMax+1); // +1 link siguiente
Set CtrFrm = PdbFrm(pdbPos, CtrMax, frmTab, TRUE); // Aleatorio
Text CtrKey = PdbTxtKeyword(CtrCic, CtrKxP); // Aleatorio nº+-6
TmeFile(inpPth, CtrPth)
});
Real wriAll = // Una pagina con todos los articulos para revisiones
{
Set CtrPst = CtrPdb[1]; // El primero
Text CtrPth = "web/completo.html";
Text WriteLn("-> "+CtrPth);
Set CtrCic = SetSubCicle(CtrPdb, 1, Card(CtrPdb)+1); // +1 link al 1º
Set CtrFrm = PdbFrm(1, CtrMax, frmTab, FALSE); // Secuencial
Text CtrKey = PdbTxtKeyword(CtrCic, 40);
TmeFile(inpPth, CtrPth)
};
Card(wriCic)+wriAll
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crear todas las paginas de todos los articulos del web, retorna el numero de
paginas creadas.",
makArt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makRot = If(!(ctrExe <: [["all", "web", "rot"]]), FALSE,
{
Text WriteLn(makSep+"building root pages...");
Text WriteLn("-> main index");
Text inxHtm = ReadFile("web/desarrolloimpresionformulariosomr.html");
Text WriteFile("web/index.html", inxHtm);
Text WriteLn("-> absolute page and 404 page");
Text extRef = " href="+Char(34)+"http";
Text savRef = " _XX_="+Char(34)+"_XX_";
Text absSav = Replace(inxHtm, extRef, savRef); // Salvar enlaces externos
Text absRep = TxtReplaceSecuence(absSav,
[[
[[ " src=\"", " src=\"http://www.omrforms.es/"]],
[[" href=\"", " href=\"http://www.omrforms.es/"]]
]]);
Text absRec = Replace(absRep, savRef, extRef); // Restaurarlos
Text WriteFile("web/absoluto.html", absRec);
Text WriteFile("web/error404.html", absRec);
Text WriteLn("-> common directory page, utf-8");
FilCopy("../common/dir.html", "web/comxidir.html", TRUE)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crea la pagina raiz index, la de enlaces absolutos, la de errores y
copia la comun de todos los web sites para enlaces cruzados.",
makRot);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makXsm = If(!(ctrExe <: [["all", "web", "xsm"]]), FALSE,
{
Text WriteLn(makSep+"building Xml site map...");
XsmDir("web/sitemap.xml", "web", "http://www.omrforms.es/")
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crear el mapa del sitio, sitemap, en formato XML.",
makXsm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makFtp = If(!(ctrExe <: [["all", "ftp", "fup"]]), FALSE,
{
Text msgTxt = If(ctrExe=="ftp", "ftp (all files)", "fup (update)");
Text absPth = Replace(GetSourcePath(ctrExe),"/make.tol",""); // Absoluto
Text locPth = absPth+"/web"; // Ha de ser una ruta absoluta
Text webNam = GetFileName(absPth); // Nombre del directorio actual
Text dtePth = If(ctrExe=="ftp", "", "ftp/"+webNam+".log"); // Relativo
Text WriteLn(makSep+webNam+": building "+msgTxt+" from "+locPth+"...");
FtpAll(
webNam, // Web name
"www.omrforms.es", // Host remoto
locPth, // Directorio local
dtePth, // Fichero señal de fecha de actualizacion
[[//dir extension type binary or ascii
[["", "html", "html", FALSE]], // ASCII
[["", "ico", "ico", TRUE]], // Binary favicon.ico
[["", "xml", "xml", FALSE]], // ASCII site map
[["css", "css", "css", FALSE]], // ASCII
[["src", "js", "js", FALSE]], // ASCII javascript
[["img", "gif", "gif", TRUE]], // Binary
[["tecnica", "png", "tec", TRUE]], // Binary
[["camposomr", "png", "cam", TRUE]], // Binary
[["documentos", "png", "docpng", TRUE]], // Binary
[["documentos", "pdf", "docpdf", TRUE]], // Binary
[["formularios","gif", "frm", TRUE]] // Binary
]])
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crear los ficheros de mandatos completos ftp o de actualizacion fup.",
makFtp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makSnd = If(!(ctrExe <: [["all", "snd"]]), FALSE,
{
Text WriteLn(makSep+"sending files using ftp/ftu...");
System(W("ftp/Omr.Forms.bat"))
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Enviado ficheros utilizando los mandatos creados con ftp o fup (update).",
makSnd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makTst = If(ctrExe != "tst", FALSE,
{
Text WriteLn(makSep+"test function Txt2Set()");
Text tstT2S = " b b :: aa :: b b :: cc:: ::::d::cc::";
Text WriteLn(F(Txt2Set(tstT2S, "::", "")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "C")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "U")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "CU")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "CUN")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "CNU")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "CNUS")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "S")));
Text WriteLn(makSep+"test function TxtOutside2Tag()");
Text WriteLn(TxtOutside2Tag("
a <i>b</i> c
<img src='...' alt='alternativo uno' title='titulo uno'> d
<img src='...' title="+Q("titulo dos")+" alt="+Q("alternativo dos")+"> e
<script...>var x=33;</script> f
", "<", ">"));
Text WriteLn(makSep+"test function TxtOutHtmTag()");
Text WriteLn(TxtOutHtmTag("
a <i>b</i> c
<img src='...' alt='alternativo uno' title='titulo uno'> d
<img src='...' title="+Q("titulo dos")+" alt="+Q("alternativo dos")+"> e
<script...>var x=33;</script> f
"));
TRUE
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Realizar el test de algunas funcionalidades necesarias para el proceso.",
makTst);
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nOmr.Forms make: end");
//////////////////////////////////////////////////////////////////////////////
// FILE : make.tol
// AUTHOR : http://www.asolver.com
// CLASS : Metaprogramación; Hipertexto; Omr; Aleatorio
// VERSION : Tol 1.1.5; Tol 1.1.6; Tol 2.0.1
// PURPOSE : Es el programa constructor del sitio web OmrForms.es, que es un
// sitio dedicado a la comercialización de servicios y formularios en papel
// para la lectura óptica de datos.
//
// Los contenidos para este sitio web se estructuran en base a posts con 3
// niveles de importancia (status) y que se guardan en un único fichero de
// texto denominado agenda de posts que es un banco de contenidos.
// Los 3 niveles de los posts son:
// a) A de Anulado, significa que está en el banco de contenidos pero que
// no se puplica,
// b) B de Bajo, se publica, pero no sale en el menú principal en la parte
// superior izquierda de todas las páginas web del sitio y
// c) C de Común, se publica y aparece enlazado desde el menú principal de
// todas las páginas.
// _
// Omr.Forms es un programa que puede considerarse básico en relación a otros
// constructores de sitios web desarrollados en lenguaje Tol y que se
// caracteriza por:
// a) Emplear una única agenda de posts que se alberga en el fichero de
// ruta agenda/agendadb.age.
// b) Los posts no tienen clases para su categorización, a diferencia de
// otros programas constructores de sitios webs.
// c) Se basa en un macro-expansor simple de Tol embebido en Html.
// d) Combina los títulos y los subtítulos,
// alternativos y disponibles para cada post,
// de forma que los contenido publicados no son siempre idénticos
// a los publicados anteriormente.
// e) La decoración lateral izquierda con ejemplos de formularios para
// lectoras ópticas de marcas es tambien aleatoria,
// por lo que es diferente en cada publicación.
// f) Las páginas las crea de una forma circular,
// siguiendo la misma secuencia de definición y las enlaza de tal manera,
// que empezando por cualquier página, leyendo hasta el final y pidiendo
// leer más, se pueden recorrer todas las páginas.
// _
// El programa OmrForms.es está basado en un macro-expansor simple de Tol en
// Html que permite embeber código Tol dentro de una página semilla Html,
// que opera a modo de template, y que hace que,
// al ejecutarse dicho código Tol, se generen con este template todas las
// páginas del sitio web con todos los diferentes contenidos de los posts de
// la agenda.
//
// El funcionamiento de este programa ha sido comprobado para las versiones de
// Tol 1.1.5, 1.1.6 y 2.0.1 y no funciona con la versión 1.1.1.
// Una de las causas de este no funcionamiento con la versión Tol 1.1.1 es la
// falta de visibilidad desde una macros de las variables definidas dentro de
// otras macros, esto es, que por ejemplo que la variable global CNT.ALL,
// que se define dentro de una macro, para la siguiente macro no existe,
// no la ve, eso si funciona en las versiones del lenguaje Tol más modernas.
// _
// Este programa OmrForms.es realiza automáticamente, entre otras funciones:
// a) la creación de índices de artículos,
// b) la extracción de las descripciones de las páginas, utilizando para ello
// los textos resaltados en dichos contenidos y
// c) la generación, para cada página, de la lista de palabras clave,
// keywords, extrayendo del contenido las de mayor frecuencia de aparición.
// De esta forma las descripciones y palabras clave, que declara en sus
// campos Html meta correspondientes, son los más adecuados y particulares
// para cada página, sin necesidad de que un humano realice esta tarea.
//
// Otras de las funciones principales de este programa OmrForms.es son:
// a) crear las páginas de control de errores,
// b) el mapa del sitio web en lenguaje Xml y
// c) comprobar qué páginas, documentos, imágenes, etc. han sido actualizadas
// con posterioridad al último envío por ftp y poner dichos nuevos
// contenidos online o actualizar los existentes.
// _
// Las opciones principales de Omr.Forms son:
// a) la generación de páginas mediante la opción denominada web,
// b) la creación del índice principal, homepage, y de las páginas absolutas,
// que valen para protección de directorios y control de errores,
// con la opción rot,
// c) la elaboración del mapa del sitio en Xml con la opción xsm,
// siglas de Xml site map,
// d) con las opciones ftp, fup y snd la actualización por Ftp del sitio,
// bien de todo el contenido (opciones ftp + snd, de send) o
// bien de las últimas páginas, imágenes y documentos actualizados
// (opciones fup + snd, de ftp update) y
// e) mediante la opción tst se realizan unos tests de la funcionalidad
// interna que comprueban ciertos funcionamientos del programa.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// INCLUDE
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nOmr.Forms make: begin");
//////////////////////////////////////////////////////////////////////////////
Set allInc = Include("tol/inc.tol");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Inclusion de las funciones comunes y de aplicacion.", allInc);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// STRUCTS
//////////////////////////////////////////////////////////////////////////////
Struct PdbSt // Estructura para cada uno de los post que contiene la agenda
{
Text pstSta, // Status A(nulado), B(ajo, sin menu), C(comun, al menu)
Text filNam, // Fichero para el post
Text titLar, // Titulo largo del post
Text titSor, // Titulo corto del post
Text titSub, // Subtitulo del post
Text pstHtm, // Texto del post es html
Text pstDes // Descripcion del post
};
//////////////////////////////////////////////////////////////////////////////
// CONSTANTS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text makSep = "\n"+Repeat("_", 72)+"\n";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Linea horizontal para separar fases de operacion.",makSep);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text agePth = "agenda/agendadb.age";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Ruta a la agenda con el conjunto de post del web.",agePth);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set frmTab =
{
Text ageTxt = ReadFile(agePth);
Text ageImg = TxtBetween2Tag(ageTxt, // Text
"<!-- FRM -->", // Initial tag
"<!-- END -->", // End tag
TRUE);
Set ageSet = Tokenizer(ageImg,">");
Set ageCic = EvalSet(ageSet, Set(Text imgTxt)
{
Text iniTag = "<img class="+Q("FrmCnt")+" src="+Char(34);
Text endTag = Char(34);
Text altTag = "alt="+Char(34);
Text titTag = "title="+Char(34);
Text imgPth = TxtBetween2Tag(imgTxt, iniTag, endTag, TRUE);
Text imgAlt = TxtBetween2Tag(imgTxt, altTag, endTag, TRUE);
Text imgTit = TxtBetween2Tag(imgTxt, titTag, endTag, TRUE);
If(Or(imgPth=="", imgAlt=="", imgTit==""), Empty,
SetOfText(imgPth, imgAlt, imgTit))
});
Select(ageCic, Real(Set imgSet) { EQ(Card(imgSet), 3) })
};
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conjunto de las imagenes de los formularios OMR.",frmTab);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// MAKE
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nOmr.Forms make: process");
//////////////////////////////////////////////////////////////////////////////
Text ctrExe = If(Not(ObjectExist("Text","ctrBat")), "hlp",
If(ctrBat=="", "hlp",
ToLower(ctrBat)));
//////////////////////////////////////////////////////////////////////////////
PutDescription("Argumento validado para la ejecucion del make.",ctrExe);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makHlp = If(ctrExe!="hlp", FALSE,
{
Text WriteLn(
makSep+"help:
Usage: make [OPTION]
Builds omrforms.es site
OPTION
art: build all articles pages
rot: build root absolute page
xsm: build Xml site map
ftp: build ftp files (go to ftp dir and run manually or use make snd)
fup: build a file update protocol (newer than ftp.log file)
snd: send file via ftp/ftu
___
web: build local web: art, rot, xms
all: do all works: art, rot, xms, fup y snd.
hlp: show this help
tst: test some functions");
TRUE
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Es cierto si se ha visualizado la ayuda.",makHlp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makArt = If(!(ctrExe <: [["all", "web", "art"]]), FALSE,
{
Text WriteLn(makSep+"building all web pages...");
Real CtrMax = 5; // Numero de posts por pagina
Real CtrCxD = 360; // Caracteres por descripcion, LinkedIn 250, Facebook 300
Real CtrKxP = 36; // Palabras clave por pagina
Set CtrPdb = PdbRead(agePth); // Leer todos los posts
Set CtrBas = Select(CtrPdb, Real(Set pstObj) { pstObj->pstSta == "B" });
Set CtrCmn = Select(CtrPdb, Real(Set pstObj) { pstObj->pstSta == "C" });
Text WriteLn("Status __C "+F(Card(CtrCmn))+" registers");
Text CtrInC = PdbIndex(CtrCmn); // Articulos comunes para indices lateral
Text CtrInB = PdbIndex(CtrBas); // Articulos basicos
Text CtrInd = PdbIndex(CtrPdb); // Todos los articulos
Text inpPth = "web/seed.htm";
Text inpHtm = ReadFile(inpPth);
Set wriCic = For(1, Card(CtrPdb), Real(Real pdbPos)
{
Set CtrPst = CtrPdb[pdbPos];
Text CtrPth = "web/"+CtrPst->filNam+".html";
Text WriteLn("-> "+CtrPth);
Set CtrCic = SetSubCicle(CtrPdb, pdbPos, CtrMax+1); // +1 link siguiente
Set CtrFrm = PdbFrm(pdbPos, CtrMax, frmTab, TRUE); // Aleatorio
Text CtrKey = PdbTxtKeyword(CtrCic, CtrKxP); // Aleatorio nº+-6
TmeFile(inpPth, CtrPth)
});
Real wriAll = // Una pagina con todos los articulos para revisiones
{
Set CtrPst = CtrPdb[1]; // El primero
Text CtrPth = "web/completo.html";
Text WriteLn("-> "+CtrPth);
Set CtrCic = SetSubCicle(CtrPdb, 1, Card(CtrPdb)+1); // +1 link al 1º
Set CtrFrm = PdbFrm(1, CtrMax, frmTab, FALSE); // Secuencial
Text CtrKey = PdbTxtKeyword(CtrCic, 40);
TmeFile(inpPth, CtrPth)
};
Card(wriCic)+wriAll
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crear todas las paginas de todos los articulos del web, retorna el numero de
paginas creadas.",
makArt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makRot = If(!(ctrExe <: [["all", "web", "rot"]]), FALSE,
{
Text WriteLn(makSep+"building root pages...");
Text WriteLn("-> main index");
Text inxHtm = ReadFile("web/desarrolloimpresionformulariosomr.html");
Text WriteFile("web/index.html", inxHtm);
Text WriteLn("-> absolute page and 404 page");
Text extRef = " href="+Char(34)+"http";
Text savRef = " _XX_="+Char(34)+"_XX_";
Text absSav = Replace(inxHtm, extRef, savRef); // Salvar enlaces externos
Text absRep = TxtReplaceSecuence(absSav,
[[
[[ " src=\"", " src=\"http://www.omrforms.es/"]],
[[" href=\"", " href=\"http://www.omrforms.es/"]]
]]);
Text absRec = Replace(absRep, savRef, extRef); // Restaurarlos
Text WriteFile("web/absoluto.html", absRec);
Text WriteFile("web/error404.html", absRec);
Text WriteLn("-> common directory page, utf-8");
FilCopy("../common/dir.html", "web/comxidir.html", TRUE)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crea la pagina raiz index, la de enlaces absolutos, la de errores y
copia la comun de todos los web sites para enlaces cruzados.",
makRot);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makXsm = If(!(ctrExe <: [["all", "web", "xsm"]]), FALSE,
{
Text WriteLn(makSep+"building Xml site map...");
XsmDir("web/sitemap.xml", "web", "http://www.omrforms.es/")
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crear el mapa del sitio, sitemap, en formato XML.",
makXsm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makFtp = If(!(ctrExe <: [["all", "ftp", "fup"]]), FALSE,
{
Text msgTxt = If(ctrExe=="ftp", "ftp (all files)", "fup (update)");
Text absPth = Replace(GetSourcePath(ctrExe),"/make.tol",""); // Absoluto
Text locPth = absPth+"/web"; // Ha de ser una ruta absoluta
Text webNam = GetFileName(absPth); // Nombre del directorio actual
Text dtePth = If(ctrExe=="ftp", "", "ftp/"+webNam+".log"); // Relativo
Text WriteLn(makSep+webNam+": building "+msgTxt+" from "+locPth+"...");
FtpAll(
webNam, // Web name
"www.omrforms.es", // Host remoto
locPth, // Directorio local
dtePth, // Fichero señal de fecha de actualizacion
[[//dir extension type binary or ascii
[["", "html", "html", FALSE]], // ASCII
[["", "ico", "ico", TRUE]], // Binary favicon.ico
[["", "xml", "xml", FALSE]], // ASCII site map
[["css", "css", "css", FALSE]], // ASCII
[["src", "js", "js", FALSE]], // ASCII javascript
[["img", "gif", "gif", TRUE]], // Binary
[["tecnica", "png", "tec", TRUE]], // Binary
[["camposomr", "png", "cam", TRUE]], // Binary
[["documentos", "png", "docpng", TRUE]], // Binary
[["documentos", "pdf", "docpdf", TRUE]], // Binary
[["formularios","gif", "frm", TRUE]] // Binary
]])
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crear los ficheros de mandatos completos ftp o de actualizacion fup.",
makFtp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makSnd = If(!(ctrExe <: [["all", "snd"]]), FALSE,
{
Text WriteLn(makSep+"sending files using ftp/ftu...");
System(W("ftp/Omr.Forms.bat"))
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Enviado ficheros utilizando los mandatos creados con ftp o fup (update).",
makSnd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// TEST
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makTst = If(ctrExe != "tst", FALSE,
{
Text WriteLn(makSep+"test function Txt2Set()");
Text tstT2S = " b b :: aa :: b b :: cc:: ::::d::cc::";
Text WriteLn(F(Txt2Set(tstT2S, "::", "")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "C")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "U")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "CU")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "CUN")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "CNU")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "CNUS")));
Text WriteLn(F(Txt2Set(tstT2S, "::", "S")));
Text WriteLn(makSep+"test function TxtOutside2Tag()");
Text WriteLn(TxtOutside2Tag("
a <i>b</i> c
<img src='...' alt='alternativo uno' title='titulo uno'> d
<img src='...' title="+Q("titulo dos")+" alt="+Q("alternativo dos")+"> e
<script...>var x=33;</script> f
", "<", ">"));
Text WriteLn(makSep+"test function TxtOutHtmTag()");
Text WriteLn(TxtOutHtmTag("
a <i>b</i> c
<img src='...' alt='alternativo uno' title='titulo uno'> d
<img src='...' title="+Q("titulo dos")+" alt="+Q("alternativo dos")+"> e
<script...>var x=33;</script> f
"));
TRUE
});
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Realizar el test de algunas funcionalidades necesarias para el proceso.",
makTst);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// END
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nOmr.Forms make: end");
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio