/*********************************/ /* Copyright Vafa Khalighi 2016 */ /* Copyright Khaled Hosny 2015 */ /* Copyright Artyom Tonkikh 2007 */ /* License GPL */ /*********************************/ #include #include #include #include #include "fribidixetex-defines.h" #include "fribidixetex-io.h" #include "fribidixetex-bidi.h" void help(void) { fprintf(stderr, "usage: fribidixetex [ parameters ] [ inputfilename ]\n" " -o file_name.tex - output file name\n" " -e utf8 | iso8859-8 | cp1255 - encoding\n" " -t utf8 | iso8859-8 | cp1255 - output encoding\n" " -d transalte only - not apply bidi\n" " this is usefull for latex2html that has native\n" " bidirectional support\n" " -m replace '--' & '---'\n" " by '\\fribidixetexLRE{--} & \\fribidixetexLRE{'---'}\n" " -n no mirroring - do not mirror parethesis\n" " for engines that do that natively (like XeTeX)\n" ); exit(1); } /* Read cmd line parameters */ void read_parameters(int argc,char **argv, char **fname_in,char **fname_out, int *encoding,int *out_encoding, int *replace_minus,int *transalte_only, int *no_mirroring) { int i; int cnt1=0,cnt2=0,cnt3=0,cnt4=0; int *ptr; for(i=1;i=argc){ help(); } *fname_out = argv[i]; cnt1++; } else if(strcmp(argv[i],"-e")==0 || strcmp(argv[i],"-t")==0) { if(i+1>=argc){ help(); } if(argv[i][1]=='e'){ ptr=encoding; cnt2++; } else{ ptr=out_encoding; cnt4++; } i++; if(strcmp(argv[i],"utf8")==0) { *ptr=ENC_UTF_8; } else if(strcmp(argv[i],"cp1255")==0) { *ptr=ENC_CP1255; } else if(strcmp(argv[i],"iso8859-8")==0) { *ptr=ENC_ISO_8859_8; } else { help(); } } else { *fname_in=argv[i]; cnt3++; } } if(cnt1>1 || cnt2>1 || cnt3>1 || cnt4>1){ help(); } } /* Global buffers */ static FriBidiChar text_line_in[MAX_LINE_SIZE]; static FriBidiChar text_line_out[MAX_LINE_SIZE]; /**************************** ******** M A I N *********** ****************************/ int main(int argc,char **argv) { char *fname_in=NULL,*fname_out=NULL; int encoding=ENC_DEFAULT,out_encoding = -1; int replace_minus = 0; int transalte_only = 0; int no_mirroring = 0; FILE *f_in,*f_out; /****************** * Inicialization * ******************/ read_parameters(argc,argv,&fname_in,&fname_out, &encoding,&out_encoding, &replace_minus,&transalte_only, &no_mirroring); if(out_encoding == -1) { out_encoding = encoding; } if(!fname_in) { f_in = stdin; } else { if(!(f_in=fopen(fname_in,"r"))) { fprintf(stderr,"Failed to open %s for reading\n",fname_in); exit(1); } } if(!fname_out) { f_out = stdout; } else { if(!(f_out=fopen(fname_out,"w"))) { fprintf(stderr,"Failed to open %s for writing\n",fname_out); exit(1); } } /************* * Main loop * *************/ io_init(); bidi_init(f_out); while(io_read_line(text_line_in,encoding,f_in)) { if(bidi_process(text_line_in,text_line_out, replace_minus,transalte_only,no_mirroring)) { /*If there is something to print */ io_write_line(text_line_out,out_encoding,f_out); } } /********** * Finish * **********/ if(f_out!=stdout) fclose(f_out); if(f_in!=stdin) fclose(f_in); bidi_finish(); return 0; }