3 * metatemplate Vers. vERSIOn
4 * Copyright (C) cOPYDATe cOPYRIGHt
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 * verificare se e' corretto pensare che il nome del file da includere
28 * e' tirato dentro in una botta sola
39 #define OUTPHP "./Pho"
40 #define OUTTEM "./Template"
41 #define OUTPRE "./Preview"
42 #define OUTOBJ "./Obj"
56 <!--MIOBJ:nomeoggetto-->
57 <!--MI:nomeelemento--> elemento <!--/MI-->
58 <!--MI:nomeelemento2--> elemento2 <!--/MI-->
59 <!--MO:nomeelemento2-->Oggetto senza riferimento nel template<!--/MO-->
60 <!--MI:#--> parte solamente per preview <!--/MI-->
61 <!--MI:nomeelemento2--> elemento2 <!--/MI-->
63 <!--MI:nomeelementoN--> elementoN <!--/MI-->
69 <!--MINCL:nomeinclude-->
75 <!--MIGTO:nomeoggetto-->
80 /* -- primo passaggio per estrarre le include definite nel sorgente -- */
83 char *keyprest[] = { "\n<!--MINCL:", "<!--/MINCL-->\n", NULL };
86 char *keyprecl[] = { "-->", NULL };
88 /* -- secondo passaggio per il resto -- */
96 char *keyout[] = { "\n<!--MIGTO:", "\n<!--MINCL:", "<!--/MINCL-->\n", "\n<!--MIOBJ:", NULL };
99 char *keyclose[] = { "-->", NULL };
101 #define W_CLOSMIOBJ 5
102 char *keyele[] = { "\n<!--MIGTO:", "\n<!--MINCL:", "<!--/MINCL-->\n",
103 "\n<!--MI:", "\n<!--MO:",
104 "<!--/MIOBJ-->\n", NULL };
108 char *keyclele[] = { "\n<!--MIGTO:", "\n<!--MINCL:", "<!--/MINCL-->\n",
109 "\n<!--MI:", "\n<!--MO:",
110 "<!--/MI-->\n", "<!--/MO-->\n", NULL };
113 FILE *fobji[NMAXFINC];
114 FILE *fobjp[NMAXFINC];
115 FILE *fobjt[NMAXFINC];
119 #define LENMXELE (10240 * 50)
120 char elem[NMAXELE][LENMXELE];
122 int elempref[NMAXELE],dummy[NMAXELE],nelem = 0;
125 void appendfile(FILE *fap,FILE *fin)
129 while ((c = fgetc(fin)) != EOF)
133 char *addslash(char *s)
135 static char bf[2048];
139 if (*s == '\'' || *s == '\\')
144 // fprintf(stderr,"ADDSLA[%s]\n", bf);
148 char *tomaiu(char *s)
150 static char bf[2048];
160 void outspace(FILE *fp,int nele)
164 for (i = 0 ; i < (nele*3) ; i++)
168 void outtag(FILE *fp,char *s,int nele)
170 static int st = 0, c = 0;
174 for (i = 0 ; s[i] != '\0' ; i++) {
184 if (isalnum(s[i]) || s[i] == '_')
186 else if (s[i] == '#') {
192 fprintf(fp,"%s\n",tomaiu(bf));
202 int main(int argc, char **argv)
205 FILE *fpho,*ftemp,*fprev;
208 char nome[256],bf[256],srcfile[512],nomefile[512],nomeobj[256],maiuobj[256];
209 int i,n,k,st = ST_FUORI,inobj = 0;
219 strcpy(nome,argv[1]);
220 for (n = 0 ; nome[n] != '.' && nome[n] != '\0' ; n++);
222 sprintf(srcfile,"%s.html",nome);
224 strcpy(srcfile,nome);
228 fprintf(fpinfo,"-------- includes creation --------\n");
229 /* -- PRIMO PASSAGGIO PER ESTRARRE LE INCLUDE DEFINITE NEL SORGENTE -- */
230 /* sprintf(nomefile,"%s.html",nome); */
231 if ((ff = ffopen(srcfile,keyprest)) == NULL)
233 while ((n = ffgetbin(bf,255,ff)) > -1) {
237 for (i = 0 ; i < nfinc ; i++)
238 fprintf(fobji[i],"%s",bf);
239 if (k == W_PREOPINCL) {
241 ffchankeys(ff,keyprecl);
243 else if (k == W_PRECLINCL) {
247 fclose(fobji[nfinc]);
251 if (nfinc == NMAXFINC || k != W_PRECLOSEI) {
254 sprintf(nomefile,"%s/%s.inc",OUTOBJ,bf);
255 if ((fobji[nfinc] = fopen(nomefile,"w")) == NULL)
257 fprintf(fpinfo,"created [%s]\n",nomefile);
260 ffchankeys(ff,keyprest);
268 /* -- SECONDO PASSAGGIO PER IL RESTO -- */
269 fprintf(fpinfo,"-------- objects creation --------\n");
270 /* sprintf(nomefile,"%s.html",nome); */
271 if ((ff = ffopen(srcfile,keyout)) == NULL)
273 sprintf(nomefile,"%s/%s.tmpl",OUTTEM,nome);
274 if ((ftemp = fopen(nomefile,"w")) == NULL)
276 sprintf(nomefile,"%s/%s.php",OUTPRE,nome);
277 if ((fprev = fopen(nomefile,"w")) == NULL)
280 while ((n = ffgetbin(bf,255,ff)) > -1) {
281 // fprintf(stderr,"BIN [%s]\n",bf);
283 // fprintf(stderr,"BF: [%s] K: %d\n",bf,k);
287 outtag(fpinfo,bf,nelem + inobj);
288 fprintf(ftemp,"%s",bf);
289 fprintf(fprev,"%s",bf);
290 if (k == W_OPENMIOBJ) {
292 ffchankeys(ff,keyclose);
294 else if (k == W_OPENMIGTO || k == W_OPENMINCL) {
296 nextkeys = ffgetkeys(ff);
297 ffchankeys(ff,keyclose);
298 if (k == W_OPENMIGTO)
305 sprintf(nomefile,"%s/%s.inc",OUTOBJ,bf);
306 if (!ffinclude(ff,nomefile)) {
307 fprintf(stderr,"Non trovato il file da includere %s\n",nomefile);
311 if (k == W_CLOSETAG) {
313 ffchankeys(ff,nextkeys);
319 if (k == W_CLOSETAG) {
321 ffchankeys(ff,nextkeys);
328 strcpy(maiuobj,tomaiu(nomeobj));
329 sprintf(nomefile,"%s/%s.pho",OUTPHP,bf);
330 if ((fpho = fopen(nomefile,"w")) == NULL)
332 fprintf(fpho,"<?php /* generated from file \"%s.html\" */\n",nome);
333 fprintf(fpho," $%s = array();\n",nomeobj);
334 fprintf(fpinfo,"obj: %s\n",bf);
337 if (k == W_CLOSETAG) {
339 ffchankeys(ff,keyele);
343 outtag(fpinfo,bf,nelem + inobj);
344 fprintf(ftemp,"%s",bf);
345 fprintf(fprev,"%s",bf);
348 ffchankeys(ff,keyclose);
350 else if (k == W_OPENMO) {
352 ffchankeys(ff,keyclose);
354 else if (k == W_CLOSMIOBJ) {
359 ffchankeys(ff,keyout);
361 fprintf(fpinfo,"obj close\n");
363 else if (k == W_OPENMIGTO || k == W_OPENMINCL) {
365 nextkeys = ffgetkeys(ff);
366 ffchankeys(ff,keyclose);
367 if (k == W_OPENMIGTO)
375 if (!strcmp(bf,"#")) {
377 outspace(fpinfo,nelem + inobj);
378 fprintf(fpinfo,"ele dummy:[%s]\n",bf);
382 elempref[nelem] = strlen(eprefix);
384 /* strcpy(eprefix,nomeobj);
385 strcat(eprefix,"_"); */
387 if (st == ST_HDELE) {
388 fprintf(ftemp,"#%s_%s#",maiuobj,tomaiu(eprefix));
390 outspace(fpinfo,nelem + inobj);
392 printf("#%s_%s# ele:[%s]\n",
393 maiuobj,tomaiu(eprefix),eprefix);
395 printf("ele:[%s] virtual\n",eprefix);
400 outspace(fpinfo,nelem + inobj);
402 printf("#%s# ele:[%s]\n",
403 tomaiu(eprefix),eprefix);
405 printf("ele:[%s] virtual\n",eprefix);
410 if (st == ST_HDELE) {
411 sprintf(bf,"#%s#",tomaiu(eprefix));
412 strcat(elem[nelem-1],bf);
415 sprintf(elem[nelem]," $%s['%s'] = '",nomeobj,eprefix);
419 /* magari lo mettiamo nella chiusura
420 if (st == ST_HDELE) {
421 fprintf(ftemp,"#%s_%s#",maiuobj,tomaiu(bf));
425 if (k == W_CLOSETAG) {
427 ffchankeys(ff,keyclele);
431 outtag(fpinfo,bf,nelem + inobj);
432 fprintf(fprev,"%s",bf);
434 strcat(elem[nelem-1],addslash(bf));
438 ffchankeys(ff,keyclose);
440 else if (k == W_OPENMO) {
442 ffchankeys(ff,keyclose);
444 else if (k == W_CLOSMI || k == W_CLOSMO) {
446 outspace(fpinfo,nelem + inobj);
447 fprintf(fpinfo,"ele close\n");
449 strcat(elem[nelem],"';\n");
450 fputs(elem[nelem],fpho);
451 eprefix[elempref[nelem]] = '\0';
455 ffchankeys(ff,keyele);
458 else if (k == W_OPENMIGTO || k == W_OPENMINCL) {
460 nextkeys = ffgetkeys(ff);
461 ffchankeys(ff,keyclose);
462 if (k == W_OPENMIGTO)