Programa constructor del sitio web del dominio inkwatercolor.com
dedicado a contenidos de arte creados con tintas y acuarelas y con otras
diferentes técnicas.
Los contenidos que emplea para crearlo son:
a) registros de obras de arte, en 2 idiomas, castellano e inglés,
que se organizan en en un directorio, que se denomina agenda y
b) ficheros en formato JPG con imágenes de las obras de arte en
diversos tanaños (pequeños, más grandes, DIN A4 y DIN A3).
//
El directorio de agenda puede contener varios ficheros, en especial,
contiene un fichero por cada galería de arte,
de esta forma, hay un fichero para:
a) la galería llamada chppho, que es la principal, y que está dedicada a
obras de pintura automática realizadas en tintas y acuarelas,
b) la galería llamada fleurs, que está dedicada a las Flores del Mal de
Charles Baudelaire, hay una pintura para cada uno de sus poemas y
c) la galería llamada inarmy, que está dedicada a esquemas y apuntes
rápidos de la vida castrense.
Este programa para Ink Watercolor:
a) Se clasifica de metaprogramación porque
se ha escrito código en lenguaje de programación TOL que escribe,
a su vez,
código en lenguaje de Html para las páginas del sitio web,
código TOL que representa los resultados de los análisis estadísticos y
código en lenguaje Javascript para la gestión de contenidos artísticos.
b) Se clasifica de Hipertexto porque el resultado final más importante es
la generación de más de un millar de páginas de hipertexto.
c) Se clasifica de arte porque el objetivo es la difusión de contenidos
artísticos por internet.
La información sobre las 3 galerías de arte de este sitio web
inkwatercolor.com se organiza en un fichero para cada galería,
cada fichero contiene de decenas a centenas de registros,
tantos registros como obras de arte tiene la galería.
//
Cada registro de estos ficheros tiene atributos para describir el título,
el autor, las técnicas, materiales empleados, los colores, la fecha de
realización, la calidad de la obra, etc.
//
Ha de notarse que este esquema de agenda es el precursos de las estructuras
de agendas de posts que se emplean que otros sitios web generados con TOL.
Este programa para la creación del sitio web inkwatercolor.com es de los
primeros desarrollados en TOL para la creación de páginas web y
conserva mucha de su programación original que tiene las caracteríscas
siguientes:
a) La creación de las páginas Html se realiza en fases,
primero construyendo semillas de páginas web (templeates) a partir de
semillas de trozos comunes de páginas web.
Por ejemplo, con semillas de títulos, de menús, de estructuras para
cuadros, etc. se crean semillas (templates) para páginas que han de
albergar cuadros, unas para inglés otras para castellano,
unas para 1 cuadro, para 4 cuadros, para listados de cuadros, etc.
b) Tiene funcionalidad para crea de forma automática:
índices, como listados de enlaces, de ilustraciones,
pero los índices principales del sitio web se tienen que crear de
forma manual.
c) Tiene funcionalidad para rellenar automáticamente la descripción y
la lista de palabras clave de cada página web y las crea de una forma
personalizada para cada página dependiendo del cuadro o de los cuadros
que alberga (campos meta), de forma que la descripción de una página
es un resumen da la descripción de sus cuadros,
pero las descripciones y las listas de palabras clave que genera
no son especialmente largas.
d) Delega en Javascript todas aquellas funcionalidades para las que,
en el momento de su desarrollo, Javascript parecía más adecuado.
Las funciones principales de este programa para la creación de
inkwatercolor.com y que son accesibles a través de sus diferentes opciones,
son:
a) Crear las páginas de las obras de arte de todas las galerías,
el contenido fundamental de estas páginas es un cuadro y su descripción,
utiliza unas imágenes que se llaman zoom.
b) Crear páginas con las obras de arte de cada galería agrupadas de 4 en 4,
estas páginas contienen unas imágenes menores que se llaman tiny,
obsérvese que este uso de imágenes de menor tamaño era frecuente
cuando el ancho de banda disponible en internet era mucho más limitado.
c) Crear listados de índice a obras agrupados de 16 en 16 con enlace a
cada una de las obras.
d) Secuenciar los enlaces entre todas las obras, por ejemplo,
entre las páginas en inglés y castellano de una misma obra,
entre cada obra y algunas de las que le siguen o le anteceden, etc.
Para la creación de estos enlaces se emplean los números únicos que
identifica a haca cuadro en cada garería.
e) Crear la homepage del sitio web inkwatercolor.com.
f) Crear las páginas por defecto (los index.html) para cada uno de sus
directorios y subdirectorios y ha de tenerse en cuenta que en el
contenido de estos index.html se da prioridad a la última galería
que se haya ejecutado.
g) Crear una estructura de pinturas e información sobre ella para ser
utilizadas desde Javascript.
h) Crear el mapa del sitio web sitemap.xml y
ficheros de mandatos para la transmision por FTP,
la programación de estas 2 funcionalidades es, en este caso,
dependiente de este sitio web y es por lo que sus ficheros TOL están
en el directorio de funciones de aplicación (app) y
no en el directorio de funciones comunes (cmm).
El sitio web inkwatercolor.com se organiza en una estructura de directorios
algo más compleja que otros sitios web desarrollados con TOL.
//
Este sitio web tiene un directorio para cada una de sus galerías de arte,
que a su vez tiene subdirectorios para:
a) sus páginas en inglés (page),
b) sus páginas en castellano (pags),
c) las semillas de páginas, templates, en inglés (sede),
d) las semillas de páginas castellano (seds),
e) un subdirectorio para imágenes (image) que, a su vez,
tiene subdirectorios, por ejemplo, para
imágenes pequeñas (tiny),
imágenes más grandes (zoom),
imágenes limpias y procesadas (clean),
escaneados originales de las obras (scan)
imágenes den formatos DIN A3 y DIN A4 (da3 y da4).
//
Además de un directorio para contenidos comunes a todas las galerías con
subdirectorios para:
a) estilo de páginas web (css),
b) imágenes comunes en formato GIF (gif),
c) partes de templates para componer semillas para páginas webs (seed) y
d) código en lenguaje Javascript (src).
Los comentarios del código de este programa están realizados utilizando
unas veces el español no acentuado dentro del código y otras veces el
inglés.
Se ha comprobado el funcionamiento de este programa para las versiones de
Tol 1.1.5, 1.1.6 y 2.0.1.
Con la version 1.1.1 da problemas, por ejemplo,
por el uso que se hace del tercer parámetro de la función de texto
TextReplace(texto, tabla, numero de ciclos),
ya que la versión de Tol 1.1.1 no se contemplaba el número de ciclos.
Ink.Watercolor construye las páginas del sitio web inkwatercolor.com
Inclusiones
Set allIncConstantes
TimeSet TmsMthTimeSet TmsWeeTimeSet TmsDayProceso
Text ctrExeText PagGalReal makHlpReal makSedReal makJpgReal makSt_Real makWebReal makUpdReal makXsmReal makFtpReal makJbd//////////////////////////////////////////////////////////////////////////////
Set allInc = Include("tol/inc.tol");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Inclusion de las funciones comunes y de aplicacion.", allInc);
//////////////////////////////////////////////////////////////////////////////
Struct PdbSt
{
Text picCla,
Text picSer,
Real picWid,
Real picHei,
Date endDte,
Date updDte,
Real picNum,
Text picTit,
Real wrkTim,
Real wrkQly,
Set papTec,
Set papCol,
Set bckTec,
Set bckCol,
Set forTec,
Set forCol,
Text picAut,
Text picOwn,
Text jpgFil,
Real picPrn,
Text picRem
};
Struct CtrSt
{
Text picNum,
Real picPrn
};
//////////////////////////////////////////////////////////////////////////////
TimeSet TmsMth = D(1);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conjunto temporal de los meses, llamado mensual.", TmsMth);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
TimeSet TmsWee = WD(1);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conjunto temporal de las semanas, llamado semanal.", TmsWee);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
TimeSet TmsDay = C;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conjunto temporal de los meses, llamado mensual.", TmsDay);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text ctrExe = If(Not(ObjectExist("Text","ctrBat")), "web",
If(ctrBat=="", "hlp",
ToLower(ctrBat)));
//////////////////////////////////////////////////////////////////////////////
PutDescription("Funcion que hay que realizarn en el make.", ctrExe);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text PagGal = If(Not(ObjectExist("Text","ctrGal")), "chppho",
If(ctrGal=="", "chppho",
If(!(ToLower(ctrGal) <: [["chppho";
"fleurs";
"inarmy"]]), "chppho",
ToLower(ctrGal))));
//////////////////////////////////////////////////////////////////////////////
PutDescription("Galeria para la que se ha de realizar la funcion.", PagGal);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makHlp = If(ctrExe!="hlp", FALSE,
{
Text WriteLn(PdbSep+"\nhelp:"+
"\nUsage: make [OPTION] [GALLERY]"+
"\nBuilds inkwatercolor.com site"+
"\nOPTION"+
"\n sed: build seeds files"+
"\n jpg: build jpegs and zip files"+
"\n st0: build fast stats"+
"\n st1: build stat plus painting counts (slow)"+
"\n web: build html pages"+
"\n upd: build updated html pages"+
"\n xsm: build sitemap.xml"+
"\n ftp: build ftp files (go to ftp dir and run manually chppho.bat)"+
"\n jdb: build javascript pictures database for forms and budgets"+
"\n hlp: view this help"+
"\n all: do all usual works (sed+web+upd+xsm)"+
"\nGALLERY"+
"\n chppho: ink & watercolor"+
"\n fleurs: flowers of evil"+
"\n inarmy: ink in the army");
TRUE
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Es cierto si se ha visualizado la ayuda.", makHlp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makSed = If(And(ctrExe!="all",ctrExe!="sed"), FALSE,
{
SedMake(TRUE) +
SedMake(FALSE)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build seeds files.", makSed);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makJpg = If(ctrExe!="jpg", FALSE,
{
//Text extImg = If(PagGal=="chppho", "*.tif", "*.jpg"); Old
Text extImg = "*.jpg";
Text WriteLn(PdbSep+"\nbuilding jpgs...");
Set chpSet = DirFiles("web/"+PagGal+"/image/clean", extImg, TRUE, TRUE);
Set chpCic = EvalSet(chpSet, Real(Text clsTif)
{
Text WriteLn(clsTif+":");
Text clsJpg = Replace(clsTif, ".tif", ".jpg");
Text tinJpg = Replace(clsJpg, "/clean/", "/tiny/");
Text zooJpg = Replace(clsJpg, "/clean/", "/zoom/");
Text da5Jpg = Replace(clsJpg, "/clean/", "/da5/");
Text da4Jpg = Replace(clsJpg, "/clean/", "/da4/");
Text da4Zip = Replace(da4Jpg, ".jpg", ".zip");
Text da3Jpg = Replace(clsJpg, "/clean/", "/da3/");
Text da3Zip = Replace(da3Jpg, ".jpg", ".zip");
Real tinDon = FilMake(clsTif, tinJpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 400, 600, 0) });
Real zooDon = FilMake(clsTif, zooJpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 800, 1200, 0) });
// Real zipDon = FilMakeUpdate(da4Jpg, da4Zip, ZipAdd);
Real da5Don = If(! DirExist("web/"+PagGal+"/image/da5"), FALSE,
FilMake(clsTif, da5Jpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 519, 719, 72) }));
// { AlcImg2JpgDpi(inp, out, 1539, 2244, 300) }));
Real da4Don = If(! DirExist("web/"+PagGal+"/image/da4"), FALSE,
FilMake(clsTif, da4Jpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 2244, 3272, 300) }));
Real da3Don = If(! DirExist("web/"+PagGal+"/image/da3"), FALSE,
FilMake(clsTif, da3Jpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 3272, 4724, 300) }));
tinDon+zooDon+da4Don+da3Don //+zipDon
});
SetSum(chpCic)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build jpgs files.", makJpg);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makSt_ = If(Sub(ctrExe,1,2)!="st", FALSE,
{
Text WriteLn(PdbSep+"\nOnly Apache logs statistics...");
InkLogsStats(20)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build statistics and control information.", makSt_);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makWeb = If(And(ctrExe!="all",ctrExe!="web"), FALSE,
{
Real eng = TRUE;
Text WriteLn(PdbSep+"\nbuilding web...");
// index.html
Text WriteLn(PdbSep+"\nbuilding index.html from index.htm...");
Text inxHtm = ReadFile(PagSee(eng)+"/index.htm");
Text inxHt0 = Replace(inxHtm,"../../","");
Text inxHt1 = Replace(inxHtm,"../../","../");
Text inxHt2 = inxHtm;
Text inxHt3 = Replace(inxHtm,"../../","../../../");
Text d00 = "web";
Text WriteFile(d00+"/index.html",inxHt0); // Nivel 0
Set dir001 = GetDir(d00)[2];
Set cic001 = EvalSet(dir001, Real(Text nam)
{
Text d01 = d00+"/"+nam;
Text WriteFile(d01+"/index.html",inxHt1);
Set dir002 = GetDir(d01)[2];
Set cic002 = EvalSet(dir002, Real(Text nam)
{
Text d02 = d01+"/"+nam;
Text WriteFile(d02+"/index.html",inxHt2);
Set dir003 = GetDir(d02)[2];
Set cic003 = EvalSet(dir003, Real(Text nam)
{
Text d03 = d02+"/"+nam;
Text WriteFile(d03+"/index.html",inxHt3);
TRUE
});
TRUE
});
TRUE
});
// indice.html
Text WriteLn(PdbSep+"\nbuilding indice.html from spanish index.htm...");
Text indHtm = ReadFile(PagSee(!eng)+"/index.htm"); // !eng -> spanish
Text indHt0 = Replace(indHtm,"../../","");
Text WriteFile(d00+"/indice.html",indHt0); // Nivel 0
// inf*.htm
Text WriteLn(PdbSep+"\nbuilding inf*.htm...");
Set ctrInc = Include("ctr/ctr.tol");
Text inpFil = "agenda/"+PagGal+"db01.txt";
Set inpBst = IncludeBST("ctr/img."+PagGal+".bst");
Set inpPdb = PdbRead(inpFil, inpBst);
// Gallery
Set selSad =
{
Select(inpPdb, Real(Set picReg)
{ FileExist("web/"+PagGal+"/image/zoom/"+picReg->jpgFil) })
};
Text keySad = "sad"; // set all drawings
Set yeaEng = PagYearTab( eng, selSad, keySad);
Set yeaSpa = PagYearTab(!eng, selSad, keySad);
Set infEng = DirFiles("web/chppho/sede", "inf*", TRUE, TRUE);
Set cicEng = EvalSet(infEng, Real(Text infPth)
{ InkPageInfo( eng, infPth, yeaEng) });
Set infSpa = DirFiles("web/chppho/seds", "inf*", TRUE, TRUE);
Set cicSpa = EvalSet(infSpa, Real(Text infPth)
{ InkPageInfo(!eng, infPth, yeaSpa) });
Text WriteLn(PdbSep+"\nabsolute pages...");
Text thkFilEng = "web/chppho/page/inffeethk.htm";
Text thkHtmEng = ReadFile(thkFilEng);
Text WriteFile(thkFilEng, Replace(thkHtmEng, "../../",
"http://www.inkwatercolor.com/"));
Text thkFilSpa = "web/chppho/pags/inffeethk.htm";
Text thkHtmSpa = ReadFile(thkFilSpa);
Text WriteFile(thkFilSpa, Replace(thkHtmSpa, "../../",
"http://www.inkwatercolor.com/"));
Text WriteLn(PdbSep+"\nbuilding sad*.htm...");
Real sadEng = PagSel( eng, selSad, keySad, yeaEng, PagSee( eng));
Real sadSpa = PagSel(!eng, selSad, keySad, yeaSpa, PagSee(!eng));
Real comXid = FilCopy("../common/dir.html", "web/comxidir.html", TRUE);
sadEng+sadSpa+comXid
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build web pages.", makWeb);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makUpd = If(And(ctrExe!="all",ctrExe!="upd"), FALSE,
{
Real eng = TRUE;
Text WriteLn(PdbSep+"\nbuilding last updated...");
Text inpFil = "agenda/"+PagGal+"db01.txt";
Set inpBst = IncludeBST("ctr/img."+PagGal+".bst");
Set inpPdb = PdbRead(inpFil, inpBst);
Set selUpd = PdbLastUpdates(inpPdb, 32);
Text keyUpd = "upd"; // set last updates
Set yeaEng = PagYearTab( eng, selUpd, keyUpd);
Set yeaSpa = PagYearTab(!eng, selUpd, keyUpd);
Real updEng = PagSel( eng, selUpd, keyUpd, yeaEng, PagSee( eng));
Real updSpa = PagSel(!eng, selUpd, keyUpd, yeaSpa, PagSee(!eng));
updEng+updSpa
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Pages with last updates.", makUpd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makXsm = If(And(ctrExe!="all",ctrExe!="xsm"), FALSE,
{
Text WriteLn(PdbSep+"\nbuilding xml site map...");
XsmDir("web/sitemap.xml","web")
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build XML sitemap.", makXsm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makFtp = If(ctrExe!="ftp", FALSE,
{
Text absPth = Replace(GetSourcePath(ctrExe),"/make.tol",""); // Absoluto
Text locPth = absPth+"/web"; // Ha de ser una ruta absoluta
Text WriteLn(PdbSep+"\nbuilding "+locPth+" ftp...");
// Real FtpRecovery("ftp", "recover.log", "recover");
FtpAll(locPth)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build FTP command files.", makFtp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makJbd = If(ctrExe!="jdb", FALSE,
{
Real eng = TRUE;
Text WriteLn(PdbSep+"\nbuilding javascript picture database...");
Text inpFil = "agenda/"+PagGal+"db01.txt";
Set inpBst = IncludeBST("ctr/img."+PagGal+".bst");
Set inpPdb = PdbRead(inpFil, inpBst);
Text outDir = "web/common/src"; // Output directory
Text pthSee = "web/common/seed/jdbitem.js"; // Seed file
Real jdbEng = PagJavascriptDB( eng, inpPdb, outDir, pthSee);
Real jdbSpa = PagJavascriptDB(!eng, inpPdb, outDir, pthSee);
jdbEng+jdbSpa
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Building javascript picture database.", makJbd);
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nInkWatercolor.com make: end");
//////////////////////////////////////////////////////////////////////////////
// FILE : make.tol
// AUTHOR : http://www.asolver.com
// CLASS : Metaprogramación; Hipertexto; Arte
// VERSION : Tol 1.1.5; Tol 1.1.6; Tol 2.0.1
// PURPOSE : Programa constructor del sitio web del dominio inkwatercolor.com
// dedicado a contenidos de arte creados con tintas y acuarelas y con otras
// diferentes técnicas.
//
// Los contenidos que emplea para crearlo son:
// a) registros de obras de arte, en 2 idiomas, castellano e inglés,
// que se organizan en en un directorio, que se denomina agenda y
// b) ficheros en formato JPG con imágenes de las obras de arte en
// diversos tanaños (pequeños, más grandes, DIN A4 y DIN A3).
//
// El directorio de agenda puede contener varios ficheros, en especial,
// contiene un fichero por cada galería de arte,
// de esta forma, hay un fichero para:
// a) la galería llamada chppho, que es la principal, y que está dedicada a
// obras de pintura automática realizadas en tintas y acuarelas,
// b) la galería llamada fleurs, que está dedicada a las Flores del Mal de
// Charles Baudelaire, hay una pintura para cada uno de sus poemas y
// c) la galería llamada inarmy, que está dedicada a esquemas y apuntes
// rápidos de la vida castrense.
// _
// Este programa para Ink Watercolor:
// a) Se clasifica de metaprogramación porque
// se ha escrito código en lenguaje de programación TOL que escribe,
// a su vez,
// código en lenguaje de Html para las páginas del sitio web,
// código TOL que representa los resultados de los análisis estadísticos y
// código en lenguaje Javascript para la gestión de contenidos artísticos.
// b) Se clasifica de Hipertexto porque el resultado final más importante es
// la generación de más de un millar de páginas de hipertexto.
// c) Se clasifica de arte porque el objetivo es la difusión de contenidos
// artísticos por internet.
// _
// La información sobre las 3 galerías de arte de este sitio web
// inkwatercolor.com se organiza en un fichero para cada galería,
// cada fichero contiene de decenas a centenas de registros,
// tantos registros como obras de arte tiene la galería.
//
// Cada registro de estos ficheros tiene atributos para describir el título,
// el autor, las técnicas, materiales empleados, los colores, la fecha de
// realización, la calidad de la obra, etc.
//
// Ha de notarse que este esquema de agenda es el precursos de las estructuras
// de agendas de posts que se emplean que otros sitios web generados con TOL.
// _
// Este programa para la creación del sitio web inkwatercolor.com es de los
// primeros desarrollados en TOL para la creación de páginas web y
// conserva mucha de su programación original que tiene las caracteríscas
// siguientes:
// a) La creación de las páginas Html se realiza en fases,
// primero construyendo semillas de páginas web (templeates) a partir de
// semillas de trozos comunes de páginas web.
// Por ejemplo, con semillas de títulos, de menús, de estructuras para
// cuadros, etc. se crean semillas (templates) para páginas que han de
// albergar cuadros, unas para inglés otras para castellano,
// unas para 1 cuadro, para 4 cuadros, para listados de cuadros, etc.
// b) Tiene funcionalidad para crea de forma automática:
// índices, como listados de enlaces, de ilustraciones,
// pero los índices principales del sitio web se tienen que crear de
// forma manual.
// c) Tiene funcionalidad para rellenar automáticamente la descripción y
// la lista de palabras clave de cada página web y las crea de una forma
// personalizada para cada página dependiendo del cuadro o de los cuadros
// que alberga (campos meta), de forma que la descripción de una página
// es un resumen da la descripción de sus cuadros,
// pero las descripciones y las listas de palabras clave que genera
// no son especialmente largas.
// d) Delega en Javascript todas aquellas funcionalidades para las que,
// en el momento de su desarrollo, Javascript parecía más adecuado.
// _
// Las funciones principales de este programa para la creación de
// inkwatercolor.com y que son accesibles a través de sus diferentes opciones,
// son:
// a) Crear las páginas de las obras de arte de todas las galerías,
// el contenido fundamental de estas páginas es un cuadro y su descripción,
// utiliza unas imágenes que se llaman zoom.
// b) Crear páginas con las obras de arte de cada galería agrupadas de 4 en 4,
// estas páginas contienen unas imágenes menores que se llaman tiny,
// obsérvese que este uso de imágenes de menor tamaño era frecuente
// cuando el ancho de banda disponible en internet era mucho más limitado.
// c) Crear listados de índice a obras agrupados de 16 en 16 con enlace a
// cada una de las obras.
// d) Secuenciar los enlaces entre todas las obras, por ejemplo,
// entre las páginas en inglés y castellano de una misma obra,
// entre cada obra y algunas de las que le siguen o le anteceden, etc.
// Para la creación de estos enlaces se emplean los números únicos que
// identifica a haca cuadro en cada garería.
// e) Crear la homepage del sitio web inkwatercolor.com.
// f) Crear las páginas por defecto (los index.html) para cada uno de sus
// directorios y subdirectorios y ha de tenerse en cuenta que en el
// contenido de estos index.html se da prioridad a la última galería
// que se haya ejecutado.
// g) Crear una estructura de pinturas e información sobre ella para ser
// utilizadas desde Javascript.
// h) Crear el mapa del sitio web sitemap.xml y
// ficheros de mandatos para la transmision por FTP,
// la programación de estas 2 funcionalidades es, en este caso,
// dependiente de este sitio web y es por lo que sus ficheros TOL están
// en el directorio de funciones de aplicación (app) y
// no en el directorio de funciones comunes (cmm).
// _
// El sitio web inkwatercolor.com se organiza en una estructura de directorios
// algo más compleja que otros sitios web desarrollados con TOL.
//
// Este sitio web tiene un directorio para cada una de sus galerías de arte,
// que a su vez tiene subdirectorios para:
// a) sus páginas en inglés (page),
// b) sus páginas en castellano (pags),
// c) las semillas de páginas, templates, en inglés (sede),
// d) las semillas de páginas castellano (seds),
// e) un subdirectorio para imágenes (image) que, a su vez,
// tiene subdirectorios, por ejemplo, para
// imágenes pequeñas (tiny),
// imágenes más grandes (zoom),
// imágenes limpias y procesadas (clean),
// escaneados originales de las obras (scan)
// imágenes den formatos DIN A3 y DIN A4 (da3 y da4).
//
// Además de un directorio para contenidos comunes a todas las galerías con
// subdirectorios para:
// a) estilo de páginas web (css),
// b) imágenes comunes en formato GIF (gif),
// c) partes de templates para componer semillas para páginas webs (seed) y
// d) código en lenguaje Javascript (src).
// _
// Los comentarios del código de este programa están realizados utilizando
// unas veces el español no acentuado dentro del código y otras veces el
// inglés.
//
// Se ha comprobado el funcionamiento de este programa para las versiones de
// Tol 1.1.5, 1.1.6 y 2.0.1.
// Con la version 1.1.1 da problemas, por ejemplo,
// por el uso que se hace del tercer parámetro de la función de texto
// TextReplace(texto, tabla, numero de ciclos),
// ya que la versión de Tol 1.1.1 no se contemplaba el número de ciclos.
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// INCLUDE
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nInkWatercolo.com make: begin");
//////////////////////////////////////////////////////////////////////////////
Set allInc = Include("tol/inc.tol");
//////////////////////////////////////////////////////////////////////////////
PutDescription("Inclusion de las funciones comunes y de aplicacion.", allInc);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// STRUCTS
//////////////////////////////////////////////////////////////////////////////
Struct PdbSt
{
Text picCla,
Text picSer,
Real picWid,
Real picHei,
Date endDte,
Date updDte,
Real picNum,
Text picTit,
Real wrkTim,
Real wrkQly,
Set papTec,
Set papCol,
Set bckTec,
Set bckCol,
Set forTec,
Set forCol,
Text picAut,
Text picOwn,
Text jpgFil,
Real picPrn,
Text picRem
};
Struct CtrSt
{
Text picNum,
Real picPrn
};
//////////////////////////////////////////////////////////////////////////////
// CONSTANTS
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
TimeSet TmsMth = D(1);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conjunto temporal de los meses, llamado mensual.", TmsMth);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
TimeSet TmsWee = WD(1);
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conjunto temporal de las semanas, llamado semanal.", TmsWee);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
TimeSet TmsDay = C;
//////////////////////////////////////////////////////////////////////////////
PutDescription("Conjunto temporal de los meses, llamado mensual.", TmsDay);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// MAKE
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nInkWatercolor.com: process");
//////////////////////////////////////////////////////////////////////////////
Text ctrExe = If(Not(ObjectExist("Text","ctrBat")), "web",
If(ctrBat=="", "hlp",
ToLower(ctrBat)));
//////////////////////////////////////////////////////////////////////////////
PutDescription("Funcion que hay que realizarn en el make.", ctrExe);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Text PagGal = If(Not(ObjectExist("Text","ctrGal")), "chppho",
If(ctrGal=="", "chppho",
If(!(ToLower(ctrGal) <: [["chppho";
"fleurs";
"inarmy"]]), "chppho",
ToLower(ctrGal))));
//////////////////////////////////////////////////////////////////////////////
PutDescription("Galeria para la que se ha de realizar la funcion.", PagGal);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makHlp = If(ctrExe!="hlp", FALSE,
{
Text WriteLn(PdbSep+"\nhelp:"+
"\nUsage: make [OPTION] [GALLERY]"+
"\nBuilds inkwatercolor.com site"+
"\nOPTION"+
"\n sed: build seeds files"+
"\n jpg: build jpegs and zip files"+
"\n st0: build fast stats"+
"\n st1: build stat plus painting counts (slow)"+
"\n web: build html pages"+
"\n upd: build updated html pages"+
"\n xsm: build sitemap.xml"+
"\n ftp: build ftp files (go to ftp dir and run manually chppho.bat)"+
"\n jdb: build javascript pictures database for forms and budgets"+
"\n hlp: view this help"+
"\n all: do all usual works (sed+web+upd+xsm)"+
"\nGALLERY"+
"\n chppho: ink & watercolor"+
"\n fleurs: flowers of evil"+
"\n inarmy: ink in the army");
TRUE
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Es cierto si se ha visualizado la ayuda.", makHlp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makSed = If(And(ctrExe!="all",ctrExe!="sed"), FALSE,
{
SedMake(TRUE) +
SedMake(FALSE)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build seeds files.", makSed);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makJpg = If(ctrExe!="jpg", FALSE,
{
//Text extImg = If(PagGal=="chppho", "*.tif", "*.jpg"); Old
Text extImg = "*.jpg";
Text WriteLn(PdbSep+"\nbuilding jpgs...");
Set chpSet = DirFiles("web/"+PagGal+"/image/clean", extImg, TRUE, TRUE);
Set chpCic = EvalSet(chpSet, Real(Text clsTif)
{
Text WriteLn(clsTif+":");
Text clsJpg = Replace(clsTif, ".tif", ".jpg");
Text tinJpg = Replace(clsJpg, "/clean/", "/tiny/");
Text zooJpg = Replace(clsJpg, "/clean/", "/zoom/");
Text da5Jpg = Replace(clsJpg, "/clean/", "/da5/");
Text da4Jpg = Replace(clsJpg, "/clean/", "/da4/");
Text da4Zip = Replace(da4Jpg, ".jpg", ".zip");
Text da3Jpg = Replace(clsJpg, "/clean/", "/da3/");
Text da3Zip = Replace(da3Jpg, ".jpg", ".zip");
Real tinDon = FilMake(clsTif, tinJpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 400, 600, 0) });
Real zooDon = FilMake(clsTif, zooJpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 800, 1200, 0) });
// Real zipDon = FilMakeUpdate(da4Jpg, da4Zip, ZipAdd);
Real da5Don = If(! DirExist("web/"+PagGal+"/image/da5"), FALSE,
FilMake(clsTif, da5Jpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 519, 719, 72) }));
// { AlcImg2JpgDpi(inp, out, 1539, 2244, 300) }));
Real da4Don = If(! DirExist("web/"+PagGal+"/image/da4"), FALSE,
FilMake(clsTif, da4Jpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 2244, 3272, 300) }));
Real da3Don = If(! DirExist("web/"+PagGal+"/image/da3"), FALSE,
FilMake(clsTif, da3Jpg, Real(Text inp, Text out)
{ AlcImg2JpgDpi(inp, out, 3272, 4724, 300) }));
tinDon+zooDon+da4Don+da3Don //+zipDon
});
SetSum(chpCic)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build jpgs files.", makJpg);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makSt_ = If(Sub(ctrExe,1,2)!="st", FALSE,
{
Text WriteLn(PdbSep+"\nOnly Apache logs statistics...");
InkLogsStats(20)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build statistics and control information.", makSt_);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makWeb = If(And(ctrExe!="all",ctrExe!="web"), FALSE,
{
Real eng = TRUE;
Text WriteLn(PdbSep+"\nbuilding web...");
// index.html
Text WriteLn(PdbSep+"\nbuilding index.html from index.htm...");
Text inxHtm = ReadFile(PagSee(eng)+"/index.htm");
Text inxHt0 = Replace(inxHtm,"../../","");
Text inxHt1 = Replace(inxHtm,"../../","../");
Text inxHt2 = inxHtm;
Text inxHt3 = Replace(inxHtm,"../../","../../../");
Text d00 = "web";
Text WriteFile(d00+"/index.html",inxHt0); // Nivel 0
Set dir001 = GetDir(d00)[2];
Set cic001 = EvalSet(dir001, Real(Text nam)
{
Text d01 = d00+"/"+nam;
Text WriteFile(d01+"/index.html",inxHt1);
Set dir002 = GetDir(d01)[2];
Set cic002 = EvalSet(dir002, Real(Text nam)
{
Text d02 = d01+"/"+nam;
Text WriteFile(d02+"/index.html",inxHt2);
Set dir003 = GetDir(d02)[2];
Set cic003 = EvalSet(dir003, Real(Text nam)
{
Text d03 = d02+"/"+nam;
Text WriteFile(d03+"/index.html",inxHt3);
TRUE
});
TRUE
});
TRUE
});
// indice.html
Text WriteLn(PdbSep+"\nbuilding indice.html from spanish index.htm...");
Text indHtm = ReadFile(PagSee(!eng)+"/index.htm"); // !eng -> spanish
Text indHt0 = Replace(indHtm,"../../","");
Text WriteFile(d00+"/indice.html",indHt0); // Nivel 0
// inf*.htm
Text WriteLn(PdbSep+"\nbuilding inf*.htm...");
Set ctrInc = Include("ctr/ctr.tol");
Text inpFil = "agenda/"+PagGal+"db01.txt";
Set inpBst = IncludeBST("ctr/img."+PagGal+".bst");
Set inpPdb = PdbRead(inpFil, inpBst);
// Gallery
Set selSad =
{
Select(inpPdb, Real(Set picReg)
{ FileExist("web/"+PagGal+"/image/zoom/"+picReg->jpgFil) })
};
Text keySad = "sad"; // set all drawings
Set yeaEng = PagYearTab( eng, selSad, keySad);
Set yeaSpa = PagYearTab(!eng, selSad, keySad);
Set infEng = DirFiles("web/chppho/sede", "inf*", TRUE, TRUE);
Set cicEng = EvalSet(infEng, Real(Text infPth)
{ InkPageInfo( eng, infPth, yeaEng) });
Set infSpa = DirFiles("web/chppho/seds", "inf*", TRUE, TRUE);
Set cicSpa = EvalSet(infSpa, Real(Text infPth)
{ InkPageInfo(!eng, infPth, yeaSpa) });
Text WriteLn(PdbSep+"\nabsolute pages...");
Text thkFilEng = "web/chppho/page/inffeethk.htm";
Text thkHtmEng = ReadFile(thkFilEng);
Text WriteFile(thkFilEng, Replace(thkHtmEng, "../../",
"http://www.inkwatercolor.com/"));
Text thkFilSpa = "web/chppho/pags/inffeethk.htm";
Text thkHtmSpa = ReadFile(thkFilSpa);
Text WriteFile(thkFilSpa, Replace(thkHtmSpa, "../../",
"http://www.inkwatercolor.com/"));
Text WriteLn(PdbSep+"\nbuilding sad*.htm...");
Real sadEng = PagSel( eng, selSad, keySad, yeaEng, PagSee( eng));
Real sadSpa = PagSel(!eng, selSad, keySad, yeaSpa, PagSee(!eng));
Real comXid = FilCopy("../common/dir.html", "web/comxidir.html", TRUE);
sadEng+sadSpa+comXid
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build web pages.", makWeb);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makUpd = If(And(ctrExe!="all",ctrExe!="upd"), FALSE,
{
Real eng = TRUE;
Text WriteLn(PdbSep+"\nbuilding last updated...");
Text inpFil = "agenda/"+PagGal+"db01.txt";
Set inpBst = IncludeBST("ctr/img."+PagGal+".bst");
Set inpPdb = PdbRead(inpFil, inpBst);
Set selUpd = PdbLastUpdates(inpPdb, 32);
Text keyUpd = "upd"; // set last updates
Set yeaEng = PagYearTab( eng, selUpd, keyUpd);
Set yeaSpa = PagYearTab(!eng, selUpd, keyUpd);
Real updEng = PagSel( eng, selUpd, keyUpd, yeaEng, PagSee( eng));
Real updSpa = PagSel(!eng, selUpd, keyUpd, yeaSpa, PagSee(!eng));
updEng+updSpa
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Pages with last updates.", makUpd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makXsm = If(And(ctrExe!="all",ctrExe!="xsm"), FALSE,
{
Text WriteLn(PdbSep+"\nbuilding xml site map...");
XsmDir("web/sitemap.xml","web")
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build XML sitemap.", makXsm);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makFtp = If(ctrExe!="ftp", FALSE,
{
Text absPth = Replace(GetSourcePath(ctrExe),"/make.tol",""); // Absoluto
Text locPth = absPth+"/web"; // Ha de ser una ruta absoluta
Text WriteLn(PdbSep+"\nbuilding "+locPth+" ftp...");
// Real FtpRecovery("ftp", "recover.log", "recover");
FtpAll(locPth)
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Build FTP command files.", makFtp);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
Real makJbd = If(ctrExe!="jdb", FALSE,
{
Real eng = TRUE;
Text WriteLn(PdbSep+"\nbuilding javascript picture database...");
Text inpFil = "agenda/"+PagGal+"db01.txt";
Set inpBst = IncludeBST("ctr/img."+PagGal+".bst");
Set inpPdb = PdbRead(inpFil, inpBst);
Text outDir = "web/common/src"; // Output directory
Text pthSee = "web/common/seed/jdbitem.js"; // Seed file
Real jdbEng = PagJavascriptDB( eng, inpPdb, outDir, pthSee);
Real jdbSpa = PagJavascriptDB(!eng, inpPdb, outDir, pthSee);
jdbEng+jdbSpa
});
//////////////////////////////////////////////////////////////////////////////
PutDescription("Building javascript picture database.", makJbd);
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// END
//////////////////////////////////////////////////////////////////////////////
Text WriteLn("\nInkWatercolor.com make: end");
2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio