Este programa se denomina Ediciones.aContracorriente porque es el
constructor del sitio web edicionesacontracorriente.com.
//
Tanto Ediciones aContracorriente como su sitio web están dedicados a la
edición, promoción y venta de libros en formato digital y en formato
físico.
La construcción del sitio web se realiza a partir de contenidos en formato
de posts albergados en unos ficheros que se denominan agendas.
Cada agenda contiene un conjunto de post, agrupados generalmente por temas,
por ejemplo, catalogo, tienda, los autores y sus libros, trámites, etc.
Estos ficheros de agendas se almacenan en un directorio que puede
considerarse un banco de contenidos.
Los post pueden pertenecer a múltiples clases y este programa crea páginas
Html de posts y de conjuntos de post por cada clase, a estas clases también
se las denomina categorías.
El programa esta basado en un macro-expansor a doble nivel de Tol en Html,
donde las semillas de Html contienen Tol embebido y los post para publicar
también pueden contener Tol embebido, por lo que:
a) dentro de la primera expansion, la de las semillas,
b) se pueden realizar otras expansiones, que son las del lenguaje Tol
contenido en los post.
Ediciones.aContracorriente genera todas las páginas a partir de una misma
semilla.
Este programa emplea un directorio de agenda de posts, dentro de este
directorio los posts se estructuran en varios ficheros que permiten
organizarlos por su tipo de contenido y dentro de cada fichero por su fecha
de publicación, los más recientes al principio.
En el sitio web los post pueden tener 4 niveles de importancia diferentes
que son:
a) A de Anulado,
b) B de Bajo,
c) C de Común, que es el valor que se asume por defecto para los post que
no tienen su nivel definido y
c) D de Destacado.
Con este programa:
a) las páginas de artículos se generan con la opción art,
b) las páginas con los artículos agrupados por categorías con la opción
cat,
c) las páginas Html por defecto del sitio (index.html) y de cada
directorio, la página absoluta y la de control de errores con la
opción rot,
d) el mapa del sitio web en Xml con la opción xsm, que son las siglas de
Xml site map y
e) las opciones ftp, fup y snd permiten poner el contenido en online.
Los comentarios del código de este programa están realizados utilizando
unas veces el español, sin acentos, y otras veces el inglés.
Este programa sólo escribe los ficheros de páginas Html que son diferentes
a los ya creados en ejecuciones anteriores de forma que no haya que enviar
todo el conjunto de páginas sino las de modificadas de fecha más reciente
que el último log de envío. Este control lo realiza la opcion fup, de
ftp update, frente a la opción ftp que generar ficheros de mandatos de
envío con todo el contenido del web. Nótese que las opciones fup y ftp solo
generan ficheros de mandatos ftp de envío y luego se pueden ejecutar con
la opcion snd.
Ediciones.aContracorriente construye las páginas del sitio web edicionesacontracorriente.com
Inclusiones
Set allIncConstantes
Text makSepText CtrAgeText CtrFilReal CtrRecReal CtrTitReal CtrDesSet CatMnuSet CatColSet CatTitSet CatAutSet CatResSet CatSndSet CatGraSet CatNotSet CatBuySet CatInxSet CatAllProceso
Text ctrExeReal makHlpLee la agenda
Set CtrPdbSet CtrCmnSet CtrDstSet CtrNVeSet CtrMGrGenera el contenido
//////////////////////////////////////////////////////////////////////////////
Set allInc = Include("tol/inc.tol");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Inclusion de las funciones comunes y de aplicacion.", allInc);
//////////////////////////////////////////////////////////////////////////////
Struct PdbSt // Posts database
{
Set pstCla, // Conjunto de tipos de post
Text pstSta, // Status A(nulado), B(ajo), C(comun, por defecto), D(estacado)
Text pstCod, // Identificador del post
Text pstRed, // Titulo del post en Html con 2ª letra roja
Text pstTit, // Titulo del post en Ascii puro
Date pstDte, // Fecha de ocurrencia
Text pstTyp, // Tipo de post
Text pstAut, // Autor
Text pstHtm, // Texto del post en Html
Text pstTxt, // Texto del post en Ascii puro
Text pstLnk, // Enlaces del post es html
Text pstPay, // Enlaces para el pago
Text pstRem // Comentarios
};
//////////////////////////////////////////////////////////////////////////////
Text makSep = "\n"+Repeat("_", 72)+"\n";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Linea horizontal para separar fases de operacion.",makSep);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text CtrAge = "agenda";
//////////////////////////////////////////////////////////////////////////////
PutDescription("All text files inside this directory.",CtrAge);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text CtrFil = "poststat.csv";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Estadísticas de posts por clases.",CtrFil);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real CtrRec = 8;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Number of posts per page.",CtrRec);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real CtrTit = 4;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Number of posts per title.",CtrTit);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real CtrDes = 8;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Number of posts per description.",CtrDes);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatMnu =
[[
"Editorial",
"Autor",
"Tienda",
//"Blog", el blog de blogspot fue dado de baja
"Publicar"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Menu superior, categorias principales.",CatMnu);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatCol =
[[
"aQuemarropa",
"aMedialuz",
"aMedianoche",
"aTodaplana",
"aFondo"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Colecciones.",CatCol);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatTit =
[[
"Azafata Aventuras", // So Blonde
"El Collar Maya", // Teo Palacios
"Gente Muerta", // J. G. Mesa
"Leyendas", // G. A. Bécquer
"Tibios y Muertos" // Manuel Arduino
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Titulos publicados o pendientes de publicar.",CatTit);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatAut =
[[
"AnsoteguiL",
"ArduinoM",
"CalaveraDiabloCG",
"BecquerGA",
"BlondeS",
"MesaJG",
"PalaciosT"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Autores de los titulos publicados y portadas.",CatAut);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatRes =
[[
"Fnac",
"Amazon",
"Google Play"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Resellers, distribuidores, tiendas online.",CatRes);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatSnd =
[[
"Hojear",
"Opiniones y reseñas",
"Sinopsis",
"Índice de contenidos",
"Para leer",
"Contenido extra",
"Vídeo",
"Música aconsejada",
"Catálogo"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Categorias secuntarias, pero que dan mucho juego.",CatSnd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatGra =
[[
"Edición no venal",
"Material gratuito"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Descargas gratis.",CatGra);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatNot =
[[
//"Buscar", se hacía con Google que deposita cookies
//"Puntos de venta", eran quioscos y librerías y ya no tenemos
"Completo",
"Mapa del web"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Categorias no indexables en mapas del web.",CatNot);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatBuy =
[[
"Cancelar",
"Descargar",
"Agotado",
"Finalizado",
"Postal"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Categorias de venta que son movidas a la libreria.",CatBuy);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatInx = CatMnu <<
CatCol <<
CatTit <<
CatAut <<
CatRes <<
CatSnd <<
CatGra;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Categorias indexables.",CatInx);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatAll = CatInx <<
CatNot <<
CatBuy;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Todas las categorias.",CatAll);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
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 edicionesacontracorriente.com site
OPTION
cat: build all category pages
art: build all articles pages
rot: build root absolute page
xsm: build xml site maps
ftp: build ftp files (go to ftp dir and run manually)
fup: build a file update protocol (newer than ftp.log file)
snd: send file via ftp
web: build local web: cat, art, rot, xms
all: do all works: cat, art, rot, xms, fup y snd
hlp: show this help");
TRUE
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Es cierto si se ha visualizado la ayuda.", makHlp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CtrPdb = If(! (ctrExe <: [["all", "web", "cat", "art"]]), Empty,
PdbRead(CtrAge)); // Read all posts
//////////////////////////////////////////////////////////////////////////////
PutDescription("Read all posts.",CtrPdb);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CtrCmn = Select(CtrPdb, Real(Set a) { Or(a->pstSta == "C",
a->pstSta == "D") });
//////////////////////////////////////////////////////////////////////////////
PutDescription("Comun y destacados.",CtrCmn);
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("Status __CD "+FormatReal(Card(CtrCmn),"%3.0lf")+" registers");
//////////////////////////////////////////////////////////////////////////////
Set CtrDst = Select(CtrPdb, Real(Set a) { a->pstSta == "D" });
//////////////////////////////////////////////////////////////////////////////
PutDescription("Destacados.",CtrDst);
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("Status ___D "+FormatReal(Card(CtrDst),"%3.0lf")+" registers");
//////////////////////////////////////////////////////////////////////////////
Set CtrNVe = Select(CtrPdb, Real(Set p) { CatGra[1] <: p->pstCla }); // Gratis
//////////////////////////////////////////////////////////////////////////////
PutDescription("Ediciones no venales.",CtrNVe);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CtrMGr = Select(CtrPdb, Real(Set p) { CatGra[2] <: p->pstCla }); // Gratis
//////////////////////////////////////////////////////////////////////////////
PutDescription("Matarial gratuito.",CtrMGr);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makCat = If(Or(ctrExe=="all", ctrExe=="web", ctrExe=="cat"),
{
Text WriteLn(makSep+"building all category pages...");
Text WriteFile(CtrFil, "Posts; Class\n");
Real CtrArt = FALSE; // Categories, not articles
// Make category pages
Set cicCat = EvalSet(CatAll, Real(Text CtrPag)
{
Text filNam = PhtFileName(CtrPag); // Output file
Text WriteLn("["+CtrPag+"|"+filNam+"]");
Set SelPdb = // Selected post from database for this page
{
Set selSet = Select(CtrPdb, Real(Set pdbObj)
{ CtrPag <: pdbObj->pstCla });
Real selCrd = Card(selSet);
Text txtCrd = FormatReal(selCrd,"%.0lf");
Text WriteLn(" "+txtCrd+" posts selected");
Text AppendFile(CtrFil, txtCrd+"; "+CtrPag+"\n");
// If none then the most recent
If(selCrd, selSet, PdbFirstN(CtrPdb, CtrRec, Real(Set pdbObj) { TRUE }))
};
TmeFile("web/seed/seed.htm", "web/"+filNam)
});
Text WriteLn("renaming https file...");
Set secCic = EvalSet(CatBuy, Real(Text catNam)
{
Text filNam = ToLower(catNam);
FilRename("web/categorias/"+filNam+".html",
"web/libreria/" +filNam+".htm", TRUE)
});
Card(cicCat)+Card(secCic)
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("build all category pages.",makCat);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makArt = If(Or(ctrExe=="all", ctrExe=="web", ctrExe=="art"),
{
Text WriteLn(makSep+"building all article pages...");
Real CtrArt = TRUE; // Articles
// Make article pages
Set cicArt = For(1, Card(CtrCmn), Real(Real pstNum)
{
Set SelPdb = SetSubCicle(CtrCmn, pstNum, CtrRec);
Text CtrPag = TxtOutside2Tag(CtrCmn[pstNum]->pstTit,"<",">");
Text filNam = PhtFileName(CtrPag); // Output file
Text WriteLn("["+CtrPag+"|"+filNam+"]");
TmeFile("web/seed/seed.htm", "web/"+filNam)
});
Card(cicArt)
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build all articles pages.", makArt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makRot = If(Or(ctrExe=="all", ctrExe=="web", ctrExe=="rot"),
{
Text WriteLn(makSep+"building root absolute page...");
Text WriteLn("-> homepage index.html");
Text inxHtm = ReadFile("web/categorias/editorial.html");
Text inxRot = Replace(inxHtm,"\"../", "\"");
Text WriteFile("web/index.html", inxRot);
Text WriteLn("-> absolut index page");
Text absSav = Replace(inxHtm, " href=\"http",
" _XX_=\"_XX_"); // Save external references
Text absRep = ReplaceTable(absSav,
[[
[[ " src=\"../", " src=\"http://www.edicionesacontracorriente.com/"]],
[[" href=\"../", " href=\"http://www.edicionesacontracorriente.com/"]]
]],1);
Text absRec = Replace(absRep, " _XX_=\"_XX_",
" href=\"http"); // Recall external references
Text WriteFile("web/absoluto.html", absRec);
Text WriteLn("-> 404 page");
Text errRec = Replace(absRec,
"<span class='ediciones'>ediciones</span>",
"<span class='ediciones'>página no encontrada</span>");
Text WriteFile("web/error404.html", errRec);
Text WriteLn("-> common directory page, utf-8");
FilCopy("../common/dir.html", "web/categorias/comxidir.html", TRUE)
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build root absolute page.", makRot);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makXsm = If(Or(ctrExe=="all", ctrExe=="web", ctrExe=="xsm"),
{
Text WriteLn(makSep+"building xml site map...");
XsmDir("web/sitemap.xml","web","http://www.edicionesacontracorriente.com/")
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build Xml site map.", makXsm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makFtp = If(ctrExe <: [["ftp","fup","all"]],
{
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.edicionesacontracorriente.com", // 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, rss
[["", "css", "css", FALSE]], // ASCII styles
[["", "js", "js", FALSE]], // ASCII javascript
[["", "png", "png", TRUE]], // Binary
[["", "swf", "swf", TRUE]], // Binary flash
[["", "pdf", "pdf", TRUE]] // Binary
]] << FtpLibTab)
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crear los ficheros de mandatos completos ftp o de actualizacion fup.",
makFtp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makSnd = If(Or(ctrExe=="all", ctrExe=="snd"),
{
Text WriteLn(makSep+"sending files using ftp...");
System(W("ftp/Ediciones.aContracorriente.bat"))
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Send files via ftp.",makSnd);
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nEdiciones.aContracorriente make: end");
//////////////////////////////////////////////////////////////////////////////
// FILE : make.tol
// AUTHOR : http://www.asolver.com
// CLASS : Metaprogramación; Hipertexto; Editorial
// VERSION : Tol 1.1.5; Tol 1.1.6; Tol 2.0.1
// PURPOSE : Este programa se denomina Ediciones.aContracorriente porque es el
// constructor del sitio web edicionesacontracorriente.com.
//
// Tanto Ediciones aContracorriente como su sitio web están dedicados a la
// edición, promoción y venta de libros en formato digital y en formato
// físico.
//
// La construcción del sitio web se realiza a partir de contenidos en formato
// de posts albergados en unos ficheros que se denominan agendas.
// Cada agenda contiene un conjunto de post, agrupados generalmente por temas,
// por ejemplo, catalogo, tienda, los autores y sus libros, trámites, etc.
// Estos ficheros de agendas se almacenan en un directorio que puede
// considerarse un banco de contenidos.
// _
// Los post pueden pertenecer a múltiples clases y este programa crea páginas
// Html de posts y de conjuntos de post por cada clase, a estas clases también
// se las denomina categorías.
//
// El programa esta basado en un macro-expansor a doble nivel de Tol en Html,
// donde las semillas de Html contienen Tol embebido y los post para publicar
// también pueden contener Tol embebido, por lo que:
// a) dentro de la primera expansion, la de las semillas,
// b) se pueden realizar otras expansiones, que son las del lenguaje Tol
// contenido en los post.
//
// Ediciones.aContracorriente genera todas las páginas a partir de una misma
// semilla.
// _
// Este programa emplea un directorio de agenda de posts, dentro de este
// directorio los posts se estructuran en varios ficheros que permiten
// organizarlos por su tipo de contenido y dentro de cada fichero por su fecha
// de publicación, los más recientes al principio.
//
// En el sitio web los post pueden tener 4 niveles de importancia diferentes
// que son:
// a) A de Anulado,
// b) B de Bajo,
// c) C de Común, que es el valor que se asume por defecto para los post que
// no tienen su nivel definido y
// c) D de Destacado.
// _
// Con este programa:
// a) las páginas de artículos se generan con la opción art,
// b) las páginas con los artículos agrupados por categorías con la opción
// cat,
// c) las páginas Html por defecto del sitio (index.html) y de cada
// directorio, la página absoluta y la de control de errores con la
// opción rot,
// d) el mapa del sitio web en Xml con la opción xsm, que son las siglas de
// Xml site map y
// e) las opciones ftp, fup y snd permiten poner el contenido en online.
//
// Los comentarios del código de este programa están realizados utilizando
// unas veces el español, sin acentos, y otras veces el inglés.
// _
// Este programa sólo escribe los ficheros de páginas Html que son diferentes
// a los ya creados en ejecuciones anteriores de forma que no haya que enviar
// todo el conjunto de páginas sino las de modificadas de fecha más reciente
// que el último log de envío. Este control lo realiza la opcion fup, de
// ftp update, frente a la opción ftp que generar ficheros de mandatos de
// envío con todo el contenido del web. Nótese que las opciones fup y ftp solo
// generan ficheros de mandatos ftp de envío y luego se pueden ejecutar con
// la opcion snd.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// INCLUDE
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nEdiciones.aContracorriente make: begin");
//////////////////////////////////////////////////////////////////////////////
Set allInc = Include("tol/inc.tol");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Inclusion de las funciones comunes y de aplicacion.", allInc);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// STRUCTS
//////////////////////////////////////////////////////////////////////////////
Struct PdbSt // Posts database
{
Set pstCla, // Conjunto de tipos de post
Text pstSta, // Status A(nulado), B(ajo), C(comun, por defecto), D(estacado)
Text pstCod, // Identificador del post
Text pstRed, // Titulo del post en Html con 2ª letra roja
Text pstTit, // Titulo del post en Ascii puro
Date pstDte, // Fecha de ocurrencia
Text pstTyp, // Tipo de post
Text pstAut, // Autor
Text pstHtm, // Texto del post en Html
Text pstTxt, // Texto del post en Ascii puro
Text pstLnk, // Enlaces del post es html
Text pstPay, // Enlaces para el pago
Text pstRem // Comentarios
};
//////////////////////////////////////////////////////////////////////////////
// CONSTANTS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text makSep = "\n"+Repeat("_", 72)+"\n";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Linea horizontal para separar fases de operacion.",makSep);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text CtrAge = "agenda";
//////////////////////////////////////////////////////////////////////////////
PutDescription("All text files inside this directory.",CtrAge);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text CtrFil = "poststat.csv";
//////////////////////////////////////////////////////////////////////////////
PutDescription("Estadísticas de posts por clases.",CtrFil);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real CtrRec = 8;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Number of posts per page.",CtrRec);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real CtrTit = 4;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Number of posts per title.",CtrTit);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real CtrDes = 8;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Number of posts per description.",CtrDes);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatMnu =
[[
"Editorial",
"Autor",
"Tienda",
//"Blog", el blog de blogspot fue dado de baja
"Publicar"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Menu superior, categorias principales.",CatMnu);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatCol =
[[
"aQuemarropa",
"aMedialuz",
"aMedianoche",
"aTodaplana",
"aFondo"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Colecciones.",CatCol);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatTit =
[[
"Azafata Aventuras", // So Blonde
"El Collar Maya", // Teo Palacios
"Gente Muerta", // J. G. Mesa
"Leyendas", // G. A. Bécquer
"Tibios y Muertos" // Manuel Arduino
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Titulos publicados o pendientes de publicar.",CatTit);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatAut =
[[
"AnsoteguiL",
"ArduinoM",
"CalaveraDiabloCG",
"BecquerGA",
"BlondeS",
"MesaJG",
"PalaciosT"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Autores de los titulos publicados y portadas.",CatAut);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatRes =
[[
"Fnac",
"Amazon",
"Google Play"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Resellers, distribuidores, tiendas online.",CatRes);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatSnd =
[[
"Hojear",
"Opiniones y reseñas",
"Sinopsis",
"Índice de contenidos",
"Para leer",
"Contenido extra",
"Vídeo",
"Música aconsejada",
"Catálogo"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Categorias secuntarias, pero que dan mucho juego.",CatSnd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatGra =
[[
"Edición no venal",
"Material gratuito"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Descargas gratis.",CatGra);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatNot =
[[
//"Buscar", se hacía con Google que deposita cookies
//"Puntos de venta", eran quioscos y librerías y ya no tenemos
"Completo",
"Mapa del web"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Categorias no indexables en mapas del web.",CatNot);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatBuy =
[[
"Cancelar",
"Descargar",
"Agotado",
"Finalizado",
"Postal"
]];
//////////////////////////////////////////////////////////////////////////////
PutDescription("Categorias de venta que son movidas a la libreria.",CatBuy);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatInx = CatMnu <<
CatCol <<
CatTit <<
CatAut <<
CatRes <<
CatSnd <<
CatGra;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Categorias indexables.",CatInx);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CatAll = CatInx <<
CatNot <<
CatBuy;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Todas las categorias.",CatAll);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// MAKE
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nEdiciones.aContracorriente 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 edicionesacontracorriente.com site
OPTION
cat: build all category pages
art: build all articles pages
rot: build root absolute page
xsm: build xml site maps
ftp: build ftp files (go to ftp dir and run manually)
fup: build a file update protocol (newer than ftp.log file)
snd: send file via ftp
web: build local web: cat, art, rot, xms
all: do all works: cat, art, rot, xms, fup y snd
hlp: show this help");
TRUE
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Es cierto si se ha visualizado la ayuda.", makHlp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Lee la agenda
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CtrPdb = If(! (ctrExe <: [["all", "web", "cat", "art"]]), Empty,
PdbRead(CtrAge)); // Read all posts
//////////////////////////////////////////////////////////////////////////////
PutDescription("Read all posts.",CtrPdb);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CtrCmn = Select(CtrPdb, Real(Set a) { Or(a->pstSta == "C",
a->pstSta == "D") });
//////////////////////////////////////////////////////////////////////////////
PutDescription("Comun y destacados.",CtrCmn);
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("Status __CD "+FormatReal(Card(CtrCmn),"%3.0lf")+" registers");
//////////////////////////////////////////////////////////////////////////////
Set CtrDst = Select(CtrPdb, Real(Set a) { a->pstSta == "D" });
//////////////////////////////////////////////////////////////////////////////
PutDescription("Destacados.",CtrDst);
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("Status ___D "+FormatReal(Card(CtrDst),"%3.0lf")+" registers");
//////////////////////////////////////////////////////////////////////////////
Set CtrNVe = Select(CtrPdb, Real(Set p) { CatGra[1] <: p->pstCla }); // Gratis
//////////////////////////////////////////////////////////////////////////////
PutDescription("Ediciones no venales.",CtrNVe);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Set CtrMGr = Select(CtrPdb, Real(Set p) { CatGra[2] <: p->pstCla }); // Gratis
//////////////////////////////////////////////////////////////////////////////
PutDescription("Matarial gratuito.",CtrMGr);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Genera el contenido
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makCat = If(Or(ctrExe=="all", ctrExe=="web", ctrExe=="cat"),
{
Text WriteLn(makSep+"building all category pages...");
Text WriteFile(CtrFil, "Posts; Class\n");
Real CtrArt = FALSE; // Categories, not articles
// Make category pages
Set cicCat = EvalSet(CatAll, Real(Text CtrPag)
{
Text filNam = PhtFileName(CtrPag); // Output file
Text WriteLn("["+CtrPag+"|"+filNam+"]");
Set SelPdb = // Selected post from database for this page
{
Set selSet = Select(CtrPdb, Real(Set pdbObj)
{ CtrPag <: pdbObj->pstCla });
Real selCrd = Card(selSet);
Text txtCrd = FormatReal(selCrd,"%.0lf");
Text WriteLn(" "+txtCrd+" posts selected");
Text AppendFile(CtrFil, txtCrd+"; "+CtrPag+"\n");
// If none then the most recent
If(selCrd, selSet, PdbFirstN(CtrPdb, CtrRec, Real(Set pdbObj) { TRUE }))
};
TmeFile("web/seed/seed.htm", "web/"+filNam)
});
Text WriteLn("renaming https file...");
Set secCic = EvalSet(CatBuy, Real(Text catNam)
{
Text filNam = ToLower(catNam);
FilRename("web/categorias/"+filNam+".html",
"web/libreria/" +filNam+".htm", TRUE)
});
Card(cicCat)+Card(secCic)
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("build all category pages.",makCat);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makArt = If(Or(ctrExe=="all", ctrExe=="web", ctrExe=="art"),
{
Text WriteLn(makSep+"building all article pages...");
Real CtrArt = TRUE; // Articles
// Make article pages
Set cicArt = For(1, Card(CtrCmn), Real(Real pstNum)
{
Set SelPdb = SetSubCicle(CtrCmn, pstNum, CtrRec);
Text CtrPag = TxtOutside2Tag(CtrCmn[pstNum]->pstTit,"<",">");
Text filNam = PhtFileName(CtrPag); // Output file
Text WriteLn("["+CtrPag+"|"+filNam+"]");
TmeFile("web/seed/seed.htm", "web/"+filNam)
});
Card(cicArt)
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build all articles pages.", makArt);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makRot = If(Or(ctrExe=="all", ctrExe=="web", ctrExe=="rot"),
{
Text WriteLn(makSep+"building root absolute page...");
Text WriteLn("-> homepage index.html");
Text inxHtm = ReadFile("web/categorias/editorial.html");
Text inxRot = Replace(inxHtm,"\"../", "\"");
Text WriteFile("web/index.html", inxRot);
Text WriteLn("-> absolut index page");
Text absSav = Replace(inxHtm, " href=\"http",
" _XX_=\"_XX_"); // Save external references
Text absRep = ReplaceTable(absSav,
[[
[[ " src=\"../", " src=\"http://www.edicionesacontracorriente.com/"]],
[[" href=\"../", " href=\"http://www.edicionesacontracorriente.com/"]]
]],1);
Text absRec = Replace(absRep, " _XX_=\"_XX_",
" href=\"http"); // Recall external references
Text WriteFile("web/absoluto.html", absRec);
Text WriteLn("-> 404 page");
Text errRec = Replace(absRec,
"<span class='ediciones'>ediciones</span>",
"<span class='ediciones'>página no encontrada</span>");
Text WriteFile("web/error404.html", errRec);
Text WriteLn("-> common directory page, utf-8");
FilCopy("../common/dir.html", "web/categorias/comxidir.html", TRUE)
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build root absolute page.", makRot);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makXsm = If(Or(ctrExe=="all", ctrExe=="web", ctrExe=="xsm"),
{
Text WriteLn(makSep+"building xml site map...");
XsmDir("web/sitemap.xml","web","http://www.edicionesacontracorriente.com/")
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build Xml site map.", makXsm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makFtp = If(ctrExe <: [["ftp","fup","all"]],
{
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.edicionesacontracorriente.com", // 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, rss
[["", "css", "css", FALSE]], // ASCII styles
[["", "js", "js", FALSE]], // ASCII javascript
[["", "png", "png", TRUE]], // Binary
[["", "swf", "swf", TRUE]], // Binary flash
[["", "pdf", "pdf", TRUE]] // Binary
]] << FtpLibTab)
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Crear los ficheros de mandatos completos ftp o de actualizacion fup.",
makFtp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makSnd = If(Or(ctrExe=="all", ctrExe=="snd"),
{
Text WriteLn(makSep+"sending files using ftp...");
System(W("ftp/Ediciones.aContracorriente.bat"))
},FALSE);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Send files via ftp.",makSnd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// END
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nEdiciones.aContracorriente make: end");
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio