forked from sejo/compudanzas
gmi generation
This commit is contained in:
parent
1b095f2c94
commit
f2e801eee2
91
generador.c
91
generador.c
|
@ -17,10 +17,10 @@ typedef struct{
|
|||
|
||||
int main(int argc, char * argv[]){
|
||||
DIR * d;
|
||||
FILE * f;
|
||||
FILE * f, *fgem, *fweb;
|
||||
struct dirent * entry;
|
||||
Pages p;
|
||||
int i,j;
|
||||
int i,j,k;
|
||||
for(i=0; i<NPAGES; i++){
|
||||
p.nilinks[i] = 0;
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ int main(int argc, char * argv[]){
|
|||
return 1;
|
||||
}
|
||||
|
||||
int fileindex=0;
|
||||
int index=0;
|
||||
char * ret;
|
||||
/* for each file */
|
||||
while( (entry = readdir(d)) ){
|
||||
|
@ -42,33 +42,32 @@ int main(int argc, char * argv[]){
|
|||
/* find gmo files */
|
||||
if( (ret = strstr( entry->d_name, ".gmo") ) ){
|
||||
/* add to index */
|
||||
strcpy( p.filenames[fileindex], "src/");
|
||||
strcat( p.filenames[fileindex], entry->d_name );
|
||||
/* strcpy ( p.filenames[fileindex], entry->d_name ); */
|
||||
strcpy( p.filenames[index], "src/");
|
||||
strcat( p.filenames[index], entry->d_name );
|
||||
|
||||
/* add gmi name */
|
||||
strcpy ( p.gminames[fileindex], entry->d_name );
|
||||
ret = strstr( p.gminames[fileindex], ".gmo");
|
||||
strcpy( p.gminames[index], entry->d_name );
|
||||
ret = strstr( p.gminames[index], ".gmo");
|
||||
strcpy( ret, ".gmi");
|
||||
|
||||
/* add html name */
|
||||
strcpy( p.htmlnames[fileindex], entry->d_name );
|
||||
ret = strstr( p.htmlnames[fileindex], ".gmo");
|
||||
strcpy( p.htmlnames[index], entry->d_name );
|
||||
ret = strstr( p.htmlnames[index], ".gmo");
|
||||
strcpy( ret, ".html");
|
||||
|
||||
/* add wikiname */
|
||||
strcpy( p.wikinames[fileindex], entry->d_name );
|
||||
ret = strstr(p.wikinames[fileindex], ".gmo");
|
||||
strcpy( p.wikinames[index], entry->d_name );
|
||||
ret = strstr(p.wikinames[index], ".gmo");
|
||||
*ret = '\0'; /* remove suffix */
|
||||
/* convert _ to spaces: */
|
||||
for(i=0; p.wikinames[fileindex][i]; i++){
|
||||
if(p.wikinames[fileindex][i]=='_')
|
||||
p.wikinames[fileindex][i] = ' ';
|
||||
for(i=0; p.wikinames[index][i]; i++){
|
||||
if(p.wikinames[index][i]=='_')
|
||||
p.wikinames[index][i] = ' ';
|
||||
}
|
||||
fileindex++;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
p.count = fileindex;
|
||||
p.count = index;
|
||||
printf("%d gmo files\n",p.count);
|
||||
closedir(d); /* close directory */
|
||||
|
||||
|
@ -82,8 +81,9 @@ int main(int argc, char * argv[]){
|
|||
|
||||
/* search for incoming links */
|
||||
int premode = 0;
|
||||
char line[1024];
|
||||
char line[1024],newline[1024];
|
||||
char link[1024];
|
||||
int found = 0;
|
||||
for(i=0; i<p.count; i++){
|
||||
premode = 0;
|
||||
printf("scanning %s for outgoing links...\n",p.filenames[i]);
|
||||
|
@ -98,11 +98,20 @@ int main(int argc, char * argv[]){
|
|||
for(j=1; ret[j]!='}';j++){
|
||||
link[j-1]=ret[j];
|
||||
}
|
||||
link[j-1] = '\0'; /* link has wikilink name */
|
||||
link[j-1] = '\0'; /* link has wikilink name now */
|
||||
/* search for wikiname to assign incoming link: */
|
||||
for(j=0; j<p.count; j++){
|
||||
if(strcmp(p.wikinames[j],link)==0){
|
||||
p.incominglinks[j][ p.nilinks[j]++ ] = i;
|
||||
/* j is wikiname index */
|
||||
found = 0;
|
||||
for(k=0;k<p.nilinks[j] && found<1;k++){
|
||||
if(p.incominglinks[j][k]==i)
|
||||
found = 1;
|
||||
}
|
||||
if(!found){
|
||||
p.incominglinks[j][ p.nilinks[j] ] = i;
|
||||
p.nilinks[j]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("%s\n",link);
|
||||
|
@ -112,8 +121,50 @@ int main(int argc, char * argv[]){
|
|||
fclose(f);
|
||||
}
|
||||
|
||||
printf("starting conversion...\n");
|
||||
|
||||
/* start conversion */
|
||||
char gemfilename[1024], webfilename[1024];
|
||||
for(i=0; i<p.count; i++){
|
||||
printf("%s has %d incoming links\n",p.wikinames[i],p.nilinks[i]);
|
||||
f = fopen(p.filenames[i],"r");
|
||||
strcpy(gemfilename,"gemtest/");
|
||||
strcat(gemfilename,p.gminames[i]);
|
||||
fgem = fopen(gemfilename,"w");
|
||||
premode = 0;
|
||||
while( fgets(line, 1024, f) ){
|
||||
if( strncmp( line, "```", 3) == 0){
|
||||
premode = !premode;
|
||||
}
|
||||
/* for gemini */
|
||||
if(strncmp( line, "+", 1) != 0 ){ /* skip '+' lines */
|
||||
if(strncmp(line,"& ",2) == 0){ /* remove & prefix */
|
||||
fputs(&line[2], fgem);
|
||||
}
|
||||
else if( !premode && strncmp(line,"=>",2)!=0 && (ret=strchr(line,'{')) ){
|
||||
for(j=1; ret[j]!='}'; j++){
|
||||
link[j-1] = ret[j];
|
||||
}
|
||||
link[j-1] = '\0';
|
||||
index = -1;
|
||||
for(j=0; j<p.count && index<0; j++){
|
||||
if(strcmp(p.wikinames[j],link)==0)
|
||||
index = j;
|
||||
}
|
||||
fputs(line,fgem);
|
||||
fprintf(fgem,"=> ./%s %s\n",p.gminames[index],p.wikinames[index]);
|
||||
}
|
||||
else{
|
||||
fputs(line, fgem);
|
||||
}
|
||||
}
|
||||
}
|
||||
fprintf(fgem, "\n# incoming links\n");
|
||||
for(j=0; j<p.nilinks[i]; j++){
|
||||
fprintf(fgem,"=> ./%s %s\n",p.gminames[j],p.wikinames[j]);
|
||||
}
|
||||
fclose(fgem);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue