/* * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Copyright 2007 mibo@student.math.hr */ #include #include #include /* * opis: LaHRTeX je program za zamjenu "hrvatskih" slova s (la)tex ekvivalentima. * verzija: 1.06.10.2007. * autor: mibo@student.math.hr * licenca: GNU GPL * compile: gcc -o lahrtex lahrtex.c * bugovi: bugove saljite na mibo@student.math.hr; popraviti cu cim uhvatim vremena */ /* #define NDEBUG ovo je i dalje BETA verzija!*/ #define MAXS 10 int T[MAXS]; int uporaba(); int inicijaliziraj(); long int velicina(FILE *datoteka); int promjena(int znak, int tablica[MAXS]); char* niz(int indeks); int uporaba() { printf("lahrtex ulaz.tex izlaz.tex"); exit(90); } int inicijaliziraj() { int i; for(i = 0; i < MAXS; i += 1) T[i] = 0; /* * slijedi hardkodirano :-( * -- tko ima vremena neka unaprijedi: * 1. ucitavanje tablice (iz datoteke oblika: znak|niz znakova;) gdje je znak znak koji u izvornoj datoteci treba * supstituirati s niz znakova * -- to bi bilo dobro jer su nasa slova razlicito definirana na razlicitim platformama. * 2. bio bih zahvalan kolegi(ci) da mi posalje update-ani source s izmjenama na mail (mibo@student.math.hr) * -- castim kavom/pivom ;-) */ T[0] = 232; /* cH */ T[1] = 200; /* CH */ T[2] = 230; /* ch */ T[3] = 198; /* Ch */ T[4] = 154; /* sH */ T[5] = 138; /* SH */ T[6] = 240; /* dj */ T[7] = 208; /* Dj */ T[8] = 158; /* zH */ T[9] = 142; /* ZH */ return 0; } char* niz(int indeks) { /* * nastavak hardkodiranog */ char* r; if((indeks == 6) || (indeks == 7)) r = malloc(sizeof(char) * 5); if(!((indeks == 6) || (indeks == 7))) r = malloc(sizeof(char) * 6); if(indeks == 0){ r[0]='\\'; r[1]='v'; r[2]='{'; r[3]='c'; r[4]='}'; r[5]='\0'; } if(indeks == 1){ r[0]='\\'; r[1]='v'; r[2]='{'; r[3]='C'; r[4]='}'; r[5]='\0'; } if(indeks == 2){ r[0]='\\'; r[1]='\''; r[2]='{'; r[3]='c'; r[4]='}'; r[5]='\0'; } if(indeks == 3){ r[0]='\\'; r[1]='\''; r[2]='{'; r[3]='C'; r[4]='}'; r[5]='\0'; } if(indeks == 4){ r[0]='\\'; r[1]='v'; r[2]='{'; r[3]='s'; r[4]='}'; r[5]='\0'; } if(indeks == 5){ r[0]='\\'; r[1]='v'; r[2]='{'; r[3]='S'; r[4]='}'; r[5]='\0'; } if(indeks == 6){ r[0]='\\'; r[1]='d'; r[2]='j'; r[3]=' '; r[4]='\0'; } if(indeks == 7){ r[0]='\\'; r[1]='D'; r[2]='J'; r[3]=' '; r[4]='\0'; } if(indeks == 8){ r[0]='\\'; r[1]='v'; r[2]='{'; r[3]='z'; r[4]='}'; r[5]='\0'; } if(indeks == 9){ r[0]='\\'; r[1]='v'; r[2]='{'; r[3]='Z'; r[4]='}'; r[5]='\0'; } return r; } long int velicina(FILE *datoteka) { fseek(datoteka, 0, SEEK_END); long int r = ftell(datoteka); fseek(datoteka, 0, SEEK_SET); return r; } int promjena(int znak, int tablica[MAXS]) { int i; for(i = 0; i < MAXS; i += 1) { if(znak == tablica[i]) return i; } return -1; } int main(int argc, char* argv[]) { FILE *ul, *iz; long int i, d; int c, s, j, z, p; char *n, *tn; inicijaliziraj(); if(argc != 3) uporaba(); printf("lahrtex 1.06.10.2007.\n"); if((ul = fopen(argv[1], "rb")) == NULL) exit(91); if((iz = fopen(argv[2], "wb")) == NULL) exit(92); d = velicina(ul); for(i = 0; i < d; i += 1) { c = fgetc(ul); if((p = promjena(c, T)) != -1) { assert(!((p < 0) || (p > MAXS))); if((p == 6) || (p == 7)) z = 5; if((p != 6) && (p != 7)) z = 6; /* jos malo hardkodiranog */ tn = niz(p); n = malloc(sizeof(char) * z); for(j = 0; j < z; j += 1) { n[j] = tn[j]; } s = fputs(n , iz); } if(promjena(c, T) == -1) { s = fputc(c, iz); } assert(s != EOF); } fclose(ul); fclose(iz); printf("Pretvorba gotova."); return 0; }