diff options
Diffstat (limited to 'support/konwerter/konwerter.cc')
-rw-r--r-- | support/konwerter/konwerter.cc | 796 |
1 files changed, 796 insertions, 0 deletions
diff --git a/support/konwerter/konwerter.cc b/support/konwerter/konwerter.cc new file mode 100644 index 0000000000..bad948b136 --- /dev/null +++ b/support/konwerter/konwerter.cc @@ -0,0 +1,796 @@ + + /*************************************************************************** + * * + * Copyright (C) 2005 Piotr Wawrzyniak (piti@piti.vsv.pl) * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +/* + Tutaj tylko analizuję linie poleceń i sprawdzam co należy zrobić ponumerować czy + wrócić do etykiet. + + Here I analyze only commandline and check what is to do. +*/ + +#include<string.h> +#include"operacje.h" +#include"dl_wiersza.h" +#include<stdlib.h> +#include"operacje_na_tex.h" +#include"system_zapisu.h" +#define Def_version "0.2.4 (04.01.2008)" +#define Def_email "wopozka@gmail.com" + +kol_etykiet*wierzcholek; + +r_numerow klasa_obslugi_etykiet(1,1,1,1,1); + +char numer_czy_etykieta='n'; +int zacznij_numery_od=1; +char polecenie[DL_WIERSZA]; //what latex command will be use for label inserting +int language=1; //language 0 - polish; 1 - english + +int srf=1; +int sRf=1; +int saf=1; +int slf=1; +int sLf=1; +int dns=2; +int test=0; +int debug_level=0; +int ignore_set_counter_to=0; +int ignore_formating=0; +int help=0; +int version=0; + +void pomoc(); //help function declaration + +int main(int argc,char *argv[]) +{ + char **env=environ; + + while(*env) + { + if(!strncmp(*env,"LANG=pl_PL",10)) + { + language=0; + break; + } + env++; + } + + + if(argc<2) + { + pomoc(); + return 1; + } + strcpy(polecenie,"\\nrzw{");//Initialization command default is \nrzw + if(!strcmp(argv[0],"konwerter"))numer_czy_etykieta='n'; + if(!strcmp(argv[0],"etykietuj"))numer_czy_etykieta='e'; + int i; + + //============================================================================ + //Command line analyzing + for (i=1;i<argc&&argv[i][0]=='-';i++) + { + if(argv[i][0]=='-') + { + //Paremeters without argument + + int czy_znalazlem=0; + + if(!strcmp(argv[i],"-ltn")){numer_czy_etykieta='n';czy_znalazlem=1;} + + if(!strcmp(argv[i],"-ntl")){numer_czy_etykieta='e';czy_znalazlem=1;} + + if(!strcmp(argv[i],"--labels-to-numbers")){numer_czy_etykieta='n';czy_znalazlem=1;} + + if(!strcmp(argv[i],"--numbers-to-labels")){numer_czy_etykieta='e';czy_znalazlem=1;} + + if(!strcmp(argv[i],"-v")){debug_level=1;czy_znalazlem=1;} + + if(!strcmp(argv[i],"--verbose")){debug_level=1;czy_znalazlem=1;} + + if(!strcmp(argv[i],"-is")){ignore_set_counter_to=1;czy_znalazlem=1;} + + if(!strcmp(argv[i],"--ignore-switches")){ignore_set_counter_to=1;czy_znalazlem=1;} + + if(!strcmp(argv[i],"-if")){ignore_formating=1;czy_znalazlem=1;} + + if(!strcmp(argv[i],"--ignore-formating")){ignore_formating=1;czy_znalazlem=1;} + + if(!strcmp(argv[i],"-h")||!strcmp(argv[i],"--help")){help=1;czy_znalazlem=1;} + + if(!strcmp(argv[i],"-t")||!strcmp(argv[i],"--test")){test=1;czy_znalazlem=1;} + + if(!strcmp(argv[i],"--version")){version=1;czy_znalazlem=1;} + + + //**************************************************************; + //Parameters with argument; + //Start roman from analyzis; + if(!strcmp(argv[i],"-srf")) + { + i++;czy_znalazlem=1; + if(i<argc)srf=atoi(argv[i]); + else + { + if(language==0) + { + cout<<"Zły argument."<<endl; + } + else + { + cout<<"Wrong parameter."<<endl; + } + return 1; + } + if(srf==0) + { + if(language==0) + { + cout<<"Zły argument opcji -srf."<<endl; + } + else + { + cout<<"Wrong -srf option argument."<<endl; + } + return 1; + } + } + + if(!strcmp(argv[i],"--start-roman-from")) + { + i++;czy_znalazlem=1; + if(i<argc)srf=atoi(argv[i]); + else + { + if(language==0) + { + cout<<"Zły argument."<<endl; + } + else + { + cout<<"Wrong parameter."<<endl; + } + return 1; + } + if(srf==0) + { + if(language==0) + { + cout<<"Zły argument opcji --start-roman-from."<<endl; + } + else + { + cout<<"Wrong --start-roman-from option argument."<<endl; + } + return 1; + } + + } + + //************************************************************************; + //Start Roman from analyzis; + + if(!strcmp(argv[i],"-sRf")) + { + i++;czy_znalazlem=1; + if(i<argc)sRf=atoi(argv[i]); + else + { + if(language==0) + { + cout<<"Błąd opcji."<<endl; + } + else + { + cout<<"Wrong parameter of option."<<endl; + } + return 1; + } + if(srf==0) + { + if(language==0) + { + cout<<"Zły argument opcji -sRf."<<endl; + } + else + { + cout<<"Wrong -sRf option argument."<<endl; + } + return 1; + } + } + + if(!strcmp(argv[i],"--start-Roman-from")) + { + i++;czy_znalazlem=1; + if(i<argc)sRf=atoi(argv[i]); + else + { + if(language==0) + { + cout<<"Błąd opcji."<<endl; + } + else + { + cout<<"Wrong parameter."<<endl; + } + return 1; + } + if(srf==0) + { + if(language==0) + { + cout<<"Zły argument opcji --start-Roman-from."<<endl; + } + else + { + cout<<"Wrong --start-Roman-from option argument."<<endl; + } + return 1; + } + + } + + //*****************************************; + //Start arabic from analyzis; + + if(!strcmp(argv[i],"-saf")) + { + i++;czy_znalazlem=1; + if(i<argc)saf=atoi(argv[i]); + else + { + if(language==0) + { + cout<<"Błąd opcji."<<endl; + } + else + { + cout<<"Wrong parameter of option."<<endl; + } + return 1; + } + if(saf==0) + { + if(language==0) + { + cout<<"Zły argument opcji -saf."<<endl; + } + else + { + cout<<"Wrong -srf option argument."<<endl; + } + return 1; + } + } + + if(!strcmp(argv[i],"--start-arabic-from")) + { + i++;czy_znalazlem=1; + if(i<argc)saf=atoi(argv[i]); + else + { + if(language==0) + { + cout<<"Błąd opcji."<<endl; + } + else + { + cout<<"Wrong parameter."<<endl; + } + return 1; + } + if(srf==0) + { + if(language==0) + { + cout<<"Zły argument opcji --start-arabic-from."<<endl; + } + else + { + cout<<"Wrong --start-arabic-from option argument."<<endl; + } + return 1; + } + + } + + + //*****************************************; + //Start letter from + + if(!strcmp(argv[i],"-slf")) + { + i++;czy_znalazlem=1; + if(i<argc)slf=atoi(argv[i]); + else + { + if(language==0) + { + cout<<"Błąd opcji."<<endl; + } + else + cout<<"Wrong parameter of option."<<endl; + return 1; + } + if(slf==0) + { + if(language==0) + cout<<"Zły argument opcji -slf."<<endl; + else + cout<<"Wrong -slf option argument."<<endl; + return 1; + } + } + + if(!strcmp(argv[i],"--start-letter-from")) + { + i++;czy_znalazlem=1; + if(i<argc)slf=atoi(argv[i]); + else + { + if(language==0) + cout<<"Błąd opcji."<<endl; + else + cout<<"Wrong parameter."<<endl; + return 1; + } + if(slf==0) + { + if(language==0) + cout<<"Zły argument opcji --start-letter-from."<<endl; + else + cout<<"Wrong --start-letter-from option argument."<<endl; + return 1; + } + + } + + //*****************************************; + //Start Letters from; + + if(!strcmp(argv[i],"-sLf")) + { + i++;czy_znalazlem=1; + if(i<argc)sLf=atoi(argv[i]); + else + { + if(language==0) + cout<<"Błąd opcji."<<endl; + else + cout<<"Wrong parameter of option."<<endl; + return 1; + } + if(sLf==0) + { + if(language==0) + cout<<"Zły argument opcji -sLf."<<endl; + else + cout<<"Wrong -sLf option argument."<<endl; + return 1; + } + } + + if(!strcmp(argv[i],"--start-Letter-from")) + { + i++;czy_znalazlem=1; + if(i<argc)sLf=atoi(argv[i]); + else + { + if(language==0) + cout<<"Błąd opcji."<<endl; + else + cout<<"Wrong parameter."<<endl; + return 1; + } + if(sLf==0) + { + if(language==0) + cout<<"Zły argument opcji --start-Letter-from."<<endl; + else + cout<<"Wrong --start-Letter-from option argument."<<endl; + return 1; + } + + } + + //************************************************************; + //Default numbering style - dns + + if(!strcmp(argv[i],"-dns")||!strcmp(argv[i],"--default-numbering-style")) + { + i++;czy_znalazlem=1; + if(i<argc&&strlen(argv[i])==1) + { + switch(argv[i][0]) + { + case 'r': + dns=0; + break; + case 'R': + dns=1; + break; + case 'a': + dns=2; + break; + case 'l': + dns=3; + break; + case 'L': + dns=4; + break; + default: + dns=-1; + break; + } + } + else + { + if(language==0) + cout<<"Błąd opcji -dns/--default-numbering-style."<<endl; + else + cout<<"Wrong parameter of -dns/--default-numbering-style option."<<endl; + return 1; + } + } + + + + //*************************************************************; + // -ln, --label-name analyzis + if(!strcmp(argv[i],"-ln")) + { + i++;czy_znalazlem=1; + if(argv[i][0]=='\\') + { + if(strlen(argv[i])>DL_WIERSZA-2) + { + if(language==0) + { + cout<<"Ha. Nie uda ci się przepełnić tutaj bufora hakerze!" + <<endl + <<"Polecenie za długie."<<endl; + } + else + cout<<"To long -ln option parameter"<<endl; + return 1; + } + else + {strcpy(polecenie,argv[i]);strcat(polecenie,"{");} + } + else + { + if(language==0) + { + cout<<"Jeśli w pliku LaTeX polecenie wygląda \\nrzw"<<endl + <<"to opcja -ln musi wyglądać \\\\nrzw"<<endl; + } + else + { + cout<<"If in LaTeX file command is \\nrzw"<<endl + <<"then option -ln must be \\\\nrzw"<<endl; + } + return 1; + } + } + + if(!strcmp(argv[i],"--label-name")) + { + i++;czy_znalazlem=1; + if(argv[i][0]=='\\') + { + if(strlen(argv[i])>DL_WIERSZA-2) + { + if(language==0) + { + cout<<"Ha. Nie uda ci się przepełnić tutaj bufora hakerze!" + <<endl + <<"Polecenie za długie."<<endl; + } + else + cout<<"argv[i] command to long"<<endl; + return 1; + } + else + {strcpy(polecenie,argv[i]);strcat(polecenie,"{");} + } + else + { + if(language==0) + { + cout<<"Jeśli w pliku LaTeX polecenie wygląda \\nrzw"<<endl + <<"to opcja --label-name musi wyglądać \\\\nrzw"<<endl; + } + else + { + cout<<"If in LaTeX file command is \\nrzw"<<endl + <<"then option -ln must be \\\\nrzw"<<endl; + } + return 1; + } + } + + //**********************************************************; + //language analyzis; + if(!strcmp(argv[i],"-l")||!strcmp(argv[i],"--language")) + { + i++;czy_znalazlem=1; + + if (!strcmp(argv[i],"en")) language=1; + if (!strcmp(argv[i],"pl")) language=0; + + } + + if(!czy_znalazlem) + { + if(language==0) + cout<<"Nieznana opcja "<<argv[i]<<endl; + else + cout<<"Unknown option "<<argv[i]<<endl; + return 1; + + } + } + } + + //*****************************************************; + + if(i<argc) + + if(argv[i][0]=='-') + { + if(language==0) + cout<<"Brakuje argumentu opcji: "<<argv[i]<<endl; + else + cout<<"Missing option argument: "<<argv[i]<<endl; + return 1; + } + + if(i>=argc&&!help&&!version) + { + if(language==0) + cout<<"Brak nazwy pliku"<<endl; + else + cout<<"Missing filename"<<endl; + return 1; + } + + + if(srf<=0) + { + if(language==0) + cout<<"Błędna opcja -srf albo --start-roman-from. Numer musi być większy od zera."<<endl; + else + cout<<"Wrong option -srf or --start-roman-from parametr. Number must be greater than 0."<<endl; + return 1; + } + + if(sRf<=0) + { + if(language==0) + cout<<"Błędna opcja -sRf albo --start-Roman-from. Numer musi być większy od zera."<<endl; + else + cout<<"Wrong option -sRf or --start-Roman-from parametr. Number must be greater than 0."<<endl; + return 1; + } + + if(saf<=0) + { + if(language==0) + cout<<"Błędna opcja -saf albo --start-arabic-from. Numer musi być większy od zera."<<endl; + else + cout<<"Wrong option -saf or --start-arabic-from parametr. Number must be greater than 0."<<endl; + return 1; + } + + if(slf<=0) + { + if(language==0) + cout<<"Błędna opcja -slf albo --start-letter-from. Numer musi być większy od zera."<<endl; + else + cout<<"Wrong option -slf or --start-letter-from parametr. Number must be greater than 0."<<endl; + return 1; + } + + if(sLf<=0) + { + if(language==0) + cout<<"Błędna opcja -sLf albo --start-Letter-from. Numer musi być większy od zera."<<endl; + else + cout<<"Wrong option -sLf or --start-Letter-from parametr. Number must be greater than 0."<<endl; + return 1; + } + + if(dns<=0) + { + if(language==0) + { + cout<<"Błędna opcja -dns albo --default-numbering-style "<<endl + <<"Dozwolone wartości: r, R, a, l, L"<<endl; + } + else + { + cout<<"Wrong option -dns or --default-numbering-style parameter "<<endl + <<"Allowed values are: r, R, a, l, L"<<endl; + } + return 1; + } + + //Maybe you would like to see version? + if(version) + { + cout<<"konwerter "<<Def_version<<endl; + return 0; + } + + //Maybe you nead help if so, give it. + if(help) + { + pomoc(); + return 0; + } + + if(numer_czy_etykieta=='e'&&test) + { + if(language==0) + { + cout<<"Opcja -t (--test) nie jest kompatybilna z opcją -ntl (--numbers-to-labels)"<<endl; + } + else + { + cout<<"Option -t (--test) is not compatible with -ntl (--number-to-latex) option"<<endl; + } + return 1; + + } + + klasa_obslugi_etykiet.set_up_all(srf,sRf,saf,slf,sLf,dns); + + //end of the command line analyzis + //======================================================================================== + + //Funkcja z operacje.cc. Zajmuje się przetwarzaniem pliku texowego tzn szuka etykiet + //sprawdza czy ma być zamiana etykiet na numery czy odwrotnie. Jeśli znajdzie etykiety + //w plikach eps wtedy zamienia je na numery. + if(przetwarzaj_plik(argv[i],/*argv[2],*/&wierzcholek))return 1;//zwrócenie 1 oznacza błąd + + if(numer_czy_etykieta=='n')//czy mamy zamieniać etykiety na numery + { + if(!wierzcholek) + { + if(language==0) + { + cout<<"Nie znaleziono żadnej etykiety w plikach eps."<<endl; + } + else + { + cout<<"No label was found"<<endl; + } + return 1; + } + //zmieniamy etykiety na numery w plikach tex + //we change labels to numbers in tex files + operacje_na_tex(argv[i],wierzcholek); + } + + //memory cleaning + kol_etykiet*usuwany=wierzcholek; + while(usuwany) + { + usuwany=wierzcholek->nast; + delete wierzcholek; + wierzcholek=usuwany; + + } + //end of memory cleaning + + if(language==0) + { + cout<<endl<<"Program zakończył się pomyślnie."<<endl; + } + else + { + cout<<"Program finished successfully"<<endl; + } + return 0; +} + +void pomoc() +{ + if(language==0) + { + cout<<endl; + cout<<"Automatyczna zmiana etykiet w pliku LaTeX-owym na numery."<<endl; + cout<<"Wersja "<<Def_version<<". Napisany i rozpowszechniany przez Piotra Wawrzyniaka."<<endl<<endl; + cout<<"Jeśli podoba ci się ten program albo masz inne uwagi napisz:"<<endl; + cout<<Def_email<<endl<<endl; + cout<<"Program rozpowszechniany na licencji GPL (patrz www.gnu.org)."<<endl<<endl; + cout<<"PROGRAM NIE POSIADA żADNEJ GWARACJI. UżYWASZ NA WłASNE RYZYKO."<<endl<<endl; + cout<<"POLECAM ZROBIENIE KOPII ZAPASOWEJ PLIKU(ÓW) PRZED UżYCIEM PROGRAMU."<<endl<<endl; + + cout<<"Użycie: konwerter/etykietuj [opcje] nazwa_pliku_latexowego"<<endl; + cout<<"Wspierane opcje [domyślne w nawiasach]"<<endl; + cout<<"-ltn, --labels-to-numbers zamiana etykiet na liczby [-ltn]"<<endl; + cout<<"-ntl, --numbers-to-labels zamiana liczb na etykiety"<<endl + <<" (tylko w plikach *.eps)"<<endl; + cout<<"-srf n, --start-roman-from n rozpocznij numerowanie małymi cyframi"<<endl + <<" rzymskimi od n [-srf 1]"<<endl; + cout<<"-sRf n, --start-Roman-from n rozpocznij numerowanie wielkimi cyframi"<<endl + <<" rzymskimi od n [-sRf 1]"<<endl; + cout<<"-saf n, --start-arabic-from n rozpocznij numerowanie cyframi arabskimi"<<endl + <<" od n [-saf 1]"<<endl; + cout<<"-slf n, --start-letter-from n rozpocznij numerowanie małymi literami"<<endl + <<" od n [-rlf 1]"<<endl; + cout<<"-sLf n, --start-Letter-from n rozpocznij numerowanie wielkimi literami"<<endl + <<" od n [-rLf 1]"<<endl; + cout<<"-dns n, --default-numbering-style n ustaw domyślny styl numeracji. Możliwe"<<endl + <<" wartości to :r, R, a, l, L [-dns a]"<<endl; + cout<<"-ln, --label-name nazwa polecenia LaTeXowego wstawiającego"<<endl + <<" numer [-ln \\nrzw] przy tej opcji zawsze "<<endl + <<" należy podawać -ln \\\\xyz"<<endl; + cout<<"-l, --language język komunikatów. Dostępne parametry"<<endl + <<" [pl] i en. Nieznany parametr traktowany"<<endl + <<" jako pl"<<endl; + cout<<"-t, --test sprawdź czy nie ma nieznanych etykiet"<<endl + <<" nie zmieniaj plików"<<endl; + cout<<"-is, --ignore-switches zignoruj przełączniki %--set-X-to"<<endl; + cout<<"-if, --ignore-formating użyj dla wszystkich etykiet domyślnego"<<endl + <<" typu formatowania"<<endl; + cout<<"-v, --verbose wyświetlaj dużo brzydkich komunikatów"<<endl; + cout<<"--version wyświetl wersję i zakończ"<<endl; + cout<<"-h, --help to co teraz czytasz"<<endl; + cout<<"Type \"konwerter -l en -h\" for help in English."<<endl; + } + else + { + cout<<endl; + cout<<"Automatic conversion labels in LaTeX and EPS files to numbers."<<endl; + cout<<"Version "<<Def_version<<". Written by Piotr Wawrzyniak."<<endl<<endl; + cout<<"If you like this program, or have any suggestions please sent me an e-mail to:"<<endl; + cout<<Def_email<<endl<<endl; + cout<<"Program spreads under conditions of GPL (see www.gnu.org)."<<endl<<endl; + cout<<"THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!"<<endl<<endl; + cout<<"IT IS GOOD IDEA TO DO COPY OF ALL FILES BEFORE USE."<<endl<<endl; + cout<<"Usage: konwerter/etykietuj [options] LaTeX_filename"<<endl; + cout<<"Supported options [default in brackets]:"<<endl; + cout<<"-ltn, --labels-to-numbers change labels to numbers [-n]"<<endl; + cout<<"-ntl, --numbers-to-labels change numbers to labels"<<endl + <<" (only in eps files)"<<endl; + cout<<"-srf n, --start-roman-from n start number with small Roman"<<endl + <<" numbers from n [-srf 1]"<<endl; + cout<<"-sRf n, --start-Roman-from n start number with capital Roman"<<endl + <<" numbers from n [-sRf 1]"<<endl; + cout<<"-saf n, --start-arabic-from n start number with arabic numbers"<<endl + <<" from n [-saf 1]"<<endl; + cout<<"-slf n, --start-letter-from n start number with small letters"<<endl + <<" from n [-rlf 1]"<<endl; + cout<<"-sLf n, --start-Letter-from n start number with capital letters"<<endl + <<" from n [-rLf 1]"<<endl; + cout<<"-dns n, --default-numbering-style n set default number style. Possible"<<endl + <<" values: r, R, a, l, L [-dns a]"<<endl; + cout<<"-ln, --label-name LaTeX command for numbers inserting"<<endl + <<" [\\nrzw]. There must be always 2"<<endl + <<" backslashes ie. -ln \\\\xyz"<<endl; + cout<<"-l, --language set language. There are 2 possible"<<endl + <<" parameters: [pl] and en. Unknown"<<endl + <<" parameter is handle as pl"<<endl; + cout<<"-t, --test test if there are unknown labels"<<endl + <<" and do not change files"<<endl; + cout<<"-is, --ignore-switches ignore switches %--set-X-to"<<endl; + cout<<"-if, --ignore-formating use for all labels default number"<<endl + <<" style"<<endl; + cout<<"-v, --verbose be verbose"<<endl; + cout<<"--version print version and exit"<<endl; + cout<<"-h, --help short help"<<endl; + cout<<"Wpisz \"konwerter -l pl -h\" po pomoc po polsku."<<endl; + } +} + |