#include #include /** @author Ivan Cukic */ #define LETTER_COUNT 'z' - 'a' + 1 #define SPC_COUNT 16 int intag = 0; int inspc = 0; int uses_char_table = 0; // if -t is turned on char ss_large[LETTER_COUNT][10]; char ss_small[LETTER_COUNT][10]; /*       Š - ? - Sv - &Sx;       š - ? - sv - &sx;       Ć - ? - C' - &Cx;       ć - ? - c' - &cx;       Č - ? - Cv - &Cy;       č - ? - cv - &cy;       Đ - ? - D- - &Dy;       đ - ? - d- - &dy;       Ž - ? - Zv - &Zx;       ž - ? - zv - &zx; */ char ss_other[SPC_COUNT][10]={"Š", "š", "Ć", "ć", "Č", "č", "Đ", "đ", "Ž", "ž", "Lj", "lj", "Nj", "nj", "Dž", "dž"}; char cs_other[SPC_COUNT][10]={"&Sx;", "&sx;", "&Cy;", "&cy;", "&Cx;", "&cx;", "&Dx;", "&dx;", "&Zx;", "&zx;", "&Lx;", "&lx;", "&Nx;", "&nx;", "&Dz;", "&dz;"}; char spc[10] = "&"; int ispc = 1; int tspc = 0; int isletter(char c) { return (((c <= 'Z') && (c >= 'A')) || ((c <= 'z') && (c >= 'a'))); } void setargs(int argc, char *argv[]){ int i = 0; for (; i < argc; i++) { if (argv[i][0] == '-') { if (argv[i][1] == 't') uses_char_table = 1; } } } void translate_spchar(void) { tspc = 0; for (int i = 0; i < SPC_COUNT; i++) { if (strcmp(spc, cs_other[i]) == 0) tspc = i; } } void load_chars() { FILE *fr = fopen("znaci.dat", "r"); if (!fr) { printf("ERROR!"); return; } //int ii = 0; for (int i = 0; i < LETTER_COUNT; i++) fscanf(fr, "%s", &(ss_large[i])); for (int i = 0; i < LETTER_COUNT; i++) fscanf(fr, "%s", &(ss_small[i])); for (int i = 0; i < SPC_COUNT; i++) fscanf(fr, "%s", &(ss_other[i])); } main(int argc, char *argv[]) { setargs(argc, argv); if (uses_char_table) load_chars(); char c = getchar(); char rec[30]; int i = 0, llen = 0; while (c != EOF) { if ((inspc) && (!intag)) { spc[ispc++] = c; spc[ispc] = '\0'; if (c == ';') { translate_spchar(); inspc = 0; ispc = 1; //printf("%s - �%d; - %d\n", spc, tspc, inspc); if (tspc) printf("%s", ss_other[tspc]); else printf("%s", spc); } spc[ispc] = '\0'; } else { if (c == '<') intag = 1; else if (c == '>') intag = 0; if (c == '&') inspc = 1; else if (intag || !uses_char_table || !(isletter(c))) putchar(c); else { if ((c <= 'Z') && (c >= 'A')) printf("%s", ss_large[c - 'A']); else if ((c <= 'z') && (c >= 'a')) printf("%s", ss_small[c - 'a']); else putchar(c); } } c = getchar(); } }