ascii
From twext
|
ascii is dead so dodo xcroll in unicode needs update to code below this is old ascii twext formatter written in c (i think) by urivan saaib note: script below does more complex "text format" with line breaks #include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Extension asignada por default al archivo de salida */
#define EXT ".txt"
/* Directorio donde se encuentran los archivos de traduccion */
#define PATH "/usr/home/www/cgi-bin/twext/TWEXT"
int MAXLENGTH=55;
int main(int, char *[]);
int OutFile (FILE *, FILE *);
/*
*
* main (void) Inicia y verifica la existencia de los archivos de
* lectura en el programa
*/
main(int argv, char *argvc[]) {
char File_Src[256], File_Trg[256];
FILE *TwSrc, *FTarget, *FTwEXT;
if (argv!=4) {
printf("Content-type: text/html\n\n");
printf ("Argv=%d<br>Argvc[1]=%s<BR>Argvc[2]=%s<br>",argv,argvc[1],argvc[2]);
printf ("<HTML><HEAD><TITLE>ERROR</TITLE></HEAD><BoDy BGCoLoR=#ffffff \
TeXT=#0d0274>\n<Center>\n<a HReF=/cgi-bin/twext/twexter.pl><IMG \
SRC=/pix/twexti.gif WiDTH=40 HeIGHt=66 aLiGN=MiDDLe NaTuRaLSiZeFLaG=3 \
BoRDeR=1></a>\n<BR><BR>\nTwEXT OutPut Error.</BODY></hTML>");
exit(1);
}
sprintf(File_Src,"%s%s",PATH,argvc[1]);
sprintf(File_Trg,"%s%s",PATH,argvc[2]);
TwSrc=fopen(File_Src,"r");
if (TwSrc==NULL) {
printf ("1");
exit(1);
}
if ( (FTarget=fopen(File_Trg,"r")) == NULL ) {
printf ("2");
exit(1);
}
MAXLENGTH = 0;
MAXLENGTH = atoi(argvc[3]);
if (MAXLENGTH<1)
{
printf ("1");
exit(1);
}
/*printf ("MAXLENGTH= %d",MAXLENGTH);*/
OutFile(TwSrc,FTarget);
fclose(TwSrc);
fclose(FTarget);
return 1;
}
/*
* OutFile (); Hace el procedimiento de crear el archivo texto con
* el contenido necesario mezclado de los dos archivos
* el archivo MOTHER y el STUDY.
*
*/
OutFile (FILE *TwSrc, FILE *TwTrg) {
/* lineOfFile almacenar los caracteres leidos hasta el m ximo
limite por linea (MAXLENGTH). Solo con el archivo TwSrc
pasado : Obtendra el valor de la posicion del ultimo enter
*/
char lineOfSrc[256],
lineOfTrg[256],
a[4],
Source[256], Target[256];
int finDeLinea=0,tresEnters=0,
data_Src=0,
data_Trg=0, chSrc,chTrg,
ultimo_Char_Src=0,
Rompe_Silaba=0,
longitud_De_Linea_Src=0,
longitud_De_Linea_Trg=0,
actual_Linea_Src=0,
actual_Linea_Trg=0,
i,ii,index_Src,index_Trg,espacios,
middleSrc,middleTrg,link=0,link1=0;
float porcentaje;
/* Inicializamos los arreglos */
lineOfSrc[0]='\0'; lineOfTrg[0]='\0';
printf ("<TR><TD><PRE>\n");
/* Mientras no se termine la informacion en los archivos se ejecuta el ciclo*/
sprintf(Source,""); sprintf(Target,"");
sprintf(lineOfTrg," ");
sprintf(lineOfSrc," ");
while (!finDeLinea && !tresEnters && data_Src!=-1 && data_Trg!=-1 ) {
data_Src=fgetc(TwSrc); espacios=0;
if (data_Src == '<') { link = 1; link1 = 1;}
else if (data_Src == '>') { link = 0; }
while ( (data_Src!='\n' || link) && data_Src!=-1)
{
if (!link) { /* This makes us sure that the link ha'nt just changed*/
if (!link1) { /*Verificamos si acaba e cambiar la bandera */
lineOfSrc[actual_Linea_Src++]=toupper(data_Src); /*Sino, ntonces agregar*/
if (data_Src!=' ')
longitud_De_Linea_Src+=2;
else {
longitud_De_Linea_Src+=4;
espacios++;
}
} else {link1 = 0; }
}
data_Src=fgetc(TwSrc);
if (data_Src == '<') { link = 1; link1 = 1; }
else if (data_Src == '>') { link = 0; }
}
link1 = 0; /* Aseguramos el cambio constante de la variable a 0 */
ultimo_Char_Src=lineOfSrc[actual_Linea_Src-1];
/* Checamos el siguiente caracter despues del \n */
data_Src = fgetc(TwSrc);
if (data_Src == '<') { link = 1; link1 = 1; }
else if (data_Src == '>') { link = 0; }
if ( data_Src =='\n') {
/* si se leyo un \n se comparan el ultimo caracter leido */
if (ultimo_Char_Src!='.' && ultimo_Char_Src!=';' && ultimo_Char_Src!=':' && ultimo_Char_Src!='?' && ultimo_Char_Src!='!' ) {
lineOfSrc[actual_Linea_Src++]='.';
}
data_Src=fgetc(TwSrc);
if (data_Src == '<') { link = 1; link1 = 1;}
else if (data_Src == '>') { link = 0; }
if ( data_Src =='\n' && !link) {
tresEnters=1; /* 2 = Se imprime el texto antes de cerrar la tabla */
/*tabEspace=1;*/
}
}
data_Trg=fgetc(TwTrg);
/* Ahora leemos la parte Target */
while ( data_Trg!='\n' && data_Trg!=-1)
{
lineOfTrg[actual_Linea_Trg++]=data_Trg; longitud_De_Linea_Trg++;
/*putc(data_Trg,stdout);*/
data_Trg=fgetc(TwTrg);
}
if ( (data_Trg=fgetc(TwTrg)) =='\n')
{
if ( (data_Trg=fgetc(TwTrg)) =='\n')
{
tresEnters=1;
}
} /* Fin de "if (data_Trg!='\n')" */
if(longitud_De_Linea_Src>MAXLENGTH || longitud_De_Linea_Trg>MAXLENGTH)
{
finDeLinea=1;
}
/*
Realizamos operaciones para determinar el tipo de acomodo que se tiene
que hacer a cada una de las cadenas para que se formateen en modo texto
ASCII.
*/
if (!finDeLinea) {
/*
Verificar cual de las dos cadenas es mayor y cuantos caracteres para
poder formatear correctamente los textos.
*/
if ( (actual_Linea_Src*2)+(espacios*2)>actual_Linea_Trg) {
/*
Obtenemos los caracteres de diferencia para agregar la mitad de
los que restan a la izquierda y derecha de la cadena menor.
*/
i = ( ( (actual_Linea_Src*2)+espacios*2) - actual_Linea_Trg) / 2;
/*
Agregamos a la izquierda de la cadena
*/
for (ii=0; ii<i; ii++)
strcat(Target," ");
for (ii=0; ii<actual_Linea_Trg; ii++) {
sprintf(a,"%c",lineOfTrg[ii]);
strcat(Target,a);
}
/*
Agregamos a la derecha de la cadena
*/
for (ii=0; ii<i; ii++)
strcat(Target," ");
strcpy(a,"");
for (ii=0; ii<actual_Linea_Src; ii++) {
if (lineOfSrc[ii] != ' ') {
sprintf(a,"%c ",lineOfSrc[ii]);
} else {
sprintf(a," ");
}
strcat(Source,a);
}
longitud_De_Linea_Trg = longitud_De_Linea_Src;
} else {
/*
Obtenemos los caracteres de diferencia para agregar la mitad de
los que restan a la izquierda y derecha de la cadena menor.
*/
i = (actual_Linea_Trg - actual_Linea_Src) / 2;
/*
Agregamos a la izquierda de la cadena
*/
for (ii=0; ii<i; ii++)
strcat(Source," ");
for (ii=0; ii<actual_Linea_Src; ii++) {
if (lineOfSrc[ii] != ' ') {
sprintf(a,"%c ",lineOfSrc[ii]);
} else {
sprintf(a," ");
}
strcat(Source,a);
}
/*
Agregamos a la derecha de la cadena
*/
for (ii=0; ii<i; ii++)
strcat(Source," ");
for (ii=0; ii<actual_Linea_Trg; ii++) {
if (lineOfTrg[ii] != ' ') {
sprintf(a,"%c ",lineOfTrg[ii]);
} else {
sprintf(a," ");
}
strcat(Target,a);
}
} /* else (Src>Trg) */
strcat(Source," "); longitud_De_Linea_Src+=4;
strcat(Target," "); longitud_De_Linea_Trg+=4;
} else {
/*
Si se alcanzo la longitud maxima en caracteres MAXLENGTH
entonces se obtiene los caracteres que completan la longitud
maxima y se hace un corte en dos, la parte izquierda se linea
todo a la derecha y se escribe en el archivo la linea completa
(Source y Target) y la parte derecha se almacena en una nueva
linea alineado a la izquierda.
*/
index_Src = (actual_Linea_Src*2+espacios*2) - (longitud_De_Linea_Src - MAXLENGTH);
/*
Localizamos el punto exacto en caracteres y longitud simulada
donde se encuentra el punto de "quiebre".
*/
i = 0; middleSrc = 0;
while (middleSrc<index_Src) {
if (lineOfSrc[i++] != ' ')
middleSrc+=2;
else
middleSrc+=4;
}
/*
index_Src ahora contiene el numero de caracteres reales donde se
localiza el punto de "qiebre".
*/
index_Src = i;
/*
Localizamos ahora el inicio de palabra mas proximo(hacia la izq.)
*/
while (index_Src>0 && lineOfSrc[index_Src]!=' ')
index_Src--;
/*
Ahora contamos cuantos caracteres simulados existen a desplegar
dentro de los caracteres entre 0<index_Src.
*/
i=0; middleSrc=0;
while (i<index_Src) {
if (lineOfSrc[i++] != ' ')
middleSrc+=2;
else
middleSrc+=4;
}
/*
Obtenemos el porcentaje a partir en el Study Languaje.
*/
porcentaje = index_Src / (float)actual_Linea_Src;
/*
Localizamos el lugar donde se hara el corte.
*/
index_Trg = porcentaje * actual_Linea_Trg;
if (middleSrc > index_Trg) {
/*
Agregamos a la izquierda de la cadena de lineOfTrg
*/
i = (middleSrc - index_Trg);
for (ii=0; ii<i; ii++)
strcat(Target," ");
for (ii=0; ii<index_Trg; ii++) {
sprintf(a,"%c",lineOfTrg[ii]);
strcat(Target,a);
}
for (ii=0; ii<index_Src; ii++) {
if (lineOfSrc[ii] != ' ') {
sprintf(a,"%c ",lineOfSrc[ii]);
} else {
sprintf(a," ");
}
strcat(Source,a);
}
} else {
/*
Agregamos a la izquierda de la cadena de lineOfSrc
*/
i = (index_Trg - middleSrc);
for (ii=0; ii<i; ii++)
strcat(Source," ");
for (ii=0; ii<index_Src; ii++) {
if (lineOfSrc[ii]!= ' ')
sprintf(a,"%c ",lineOfSrc[ii]);
else
sprintf(a," ");
strcat(Source,a);
}
for (ii=0; ii<index_Trg; ii++) {
sprintf(a,"%c",lineOfTrg[ii]);
strcat(Target,a);
} /*for*/
} /*else*/
if (index_Src==0) {
ii = (actual_Linea_Src*2+espacios*2) - (longitud_De_Linea_Src - MAXLENGTH);
for (i=0; i<ii;i++) {
strcat(Source," ");
strcat(Target," ");
}
}
if (ii>1) strcat(Target,"-");
} /*if (!Fin de linea) */
if (finDeLinea || tresEnters || data_Src==-1 || data_Trg==-1) {
/*
Escribimos en el archivo el contenido de las variables
lo cual es el texto formateado
*/
printf("%s\n",Source);
printf("%s\n",Target);
printf("\n");
strcpy(Source,"");
strcpy(Target,"");
/*
Verificamos si los consecutivos no son \n's.
*/
if (tresEnters) {
printf ("\n");
data_Src=fgetc(TwSrc);
if (data_Src =='<') { link=1; link1 = 1; }
else if (data_Src == '>') { link=0; }
data_Trg=fgetc(TwTrg);
while( data_Src !=-1 && data_Src == '\n' &&
data_Trg !=-1 && data_Trg == '\n')
{
printf ("\n");
data_Src=fgetc(TwSrc);
if (data_Src =='<') { link=1; link1 = 1; }
else if (data_Src == '>') { link=0; }
data_Trg=fgetc(TwTrg);
}
longitud_De_Linea_Src = 0;
longitud_De_Linea_Trg = 0;
}
/*
Verificamos si se alcanzo la maxima longitud de linea.
*/
if (finDeLinea) {
finDeLinea=0;
if ((actual_Linea_Src*2+espacios*2) > actual_Linea_Trg) {
/*
Agregamos a la derecha de la cadena de lineOfTrg
*/
while (index_Trg>0 && lineOfTrg[index_Trg]==' ')
index_Trg ++;
for (ii=index_Trg; ii<actual_Linea_Trg; ii++) {
sprintf(a,"%c",lineOfTrg[ii]);
strcat(Target,a);
}
/*
Avanzamos los espacios en blanco.
*/
while (index_Src>0 && lineOfSrc[index_Src]==' ') {
middleSrc += 4; index_Src++;
}
if (index_Src==0)
middleSrc=0;
i = ( (actual_Linea_Src*2+espacios*2) - middleSrc) - (actual_Linea_Trg - index_Trg) ;
/*
Insertamos tantos espacios en blanco como falten para
completar la longitud de actual_Linea_Src.
*/
for (ii=0; ii<i; ii++)
strcat(Target," ");
for (ii=index_Src; ii<actual_Linea_Src; ii++) {
if (lineOfSrc[ii] != ' ') {
sprintf(a,"%c ",lineOfSrc[ii]);
} else {
sprintf(a," ");
}
strcat(Source,a);
}
longitud_De_Linea_Src = ( (actual_Linea_Src*2+espacios*2) - middleSrc);
longitud_De_Linea_Trg = longitud_De_Linea_Src;
} else {
/*
Agregamos a la derecha de la cadena de lineOfSrc
*/
for (ii=index_Src; ii<actual_Linea_Src; ii++) {
sprintf(a,"%c",lineOfSrc[ii]);
strcat(Source,a);
}
/*
Insertamos tantos espacios en blanco como falten para
completar la longitud de actual_Linea_Trg.
*/
if (index_Src==0)
middleSrc=0;
i = (actual_Linea_Trg - index_Trg) - (actual_Linea_Src*2+espacios*2) - middleSrc;
for (ii=0; ii<i; ii++)
strcat(Source," ");
for (ii=index_Trg; ii<actual_Linea_Trg; ii++) {
sprintf(a,"%c",lineOfTrg[ii]);
strcat(Target,a);
} /*for*/
longitud_De_Linea_Src = actual_Linea_Trg - index_Trg;
longitud_De_Linea_Trg = actual_Linea_Trg - index_Trg;
} /* Src>Trg*/
strcat(Source," "); longitud_De_Linea_Src+=4;
strcat(Target," "); longitud_De_Linea_Trg+=4;
} /* if (!findelinea) */
if (data_Src==-1 || data_Trg==-1) {
if (!tresEnters) {
printf("%s\n",Source);
printf("%s\n",Target);
printf("\n");
}
}
if (tresEnters) tresEnters=0;
} /* (findelinea || tresEnters) */
actual_Linea_Src = 0;
actual_Linea_Trg = 0;
sprintf(lineOfSrc," ");
sprintf(lineOfTrg," ");
if (data_Src!=' ' && data_Src!=-1)
if (!link) {
if (!link1) {lineOfSrc[actual_Linea_Src++] = toupper(data_Src); longitud_De_Linea_Src+=2; }
else { link1 = 0; }
}
if (data_Trg!=' ' && data_Trg!=-1)
lineOfTrg[actual_Linea_Trg++] = data_Trg; longitud_De_Linea_Trg++;
} /* while (!findelinea && !tresEnters) */
printf ("</PR x E></TD>"); <!-- remove " x " -->
return 1;
}
this old ascii twexter probably centered twxt chunks under TEXT chunks.. dodo xcroll shows ascii preview, probably useful.. W E A R E F A M I L Y nosotros somos familia M O T H E R , B R O T H E R , S I S T E R A N D M E madre hermano hermana y yo
|


