/*
c2html v3.c FINAL 01.03.2018.
Primer poziva programa:
c2html program.c
Pre poziva ovog programa c2html v3.c ,
potrebno je tekst fajl program.c ocistiti od tabulatora pozivom programa
detab program.c 4
Kade zelite programski kod da prikazete na html web stranici postoji
problem sa karakterima < i > jer su oni specijalni karakteri u html kodu
i zato se web stranica ne prikazuje dobro.
Program c2html.exe tekst programskog koda priprema za upis u html dokument tako sto:
karaktere < zamenjuje sa < (low then)
karaktere > zamenjuje sa > (greater then)
Rezultat je fajl program.c.html koji otvorimo u tekst editoru
i metodom copy-paste prebacimo u html kod (code view) web stranice
izmedju <body> code here </body> tagova.
*/
#include <stdio.h>
#include <stdlib.h> // zbog exit()
#include <string.h> // strcpy()
#define MAX_STRING_LENGTH 256
int main(int argc, char *argv[]) {
FILE* pointer_na_ulazni_fajl;
FILE* pointer_na_izlazni_fajl;
char ime_ulaznog_fajla[MAX_STRING_LENGTH];
char ime_izlaznog_fajla[MAX_STRING_LENGTH];
int ch; // Asscii kod jednog karaktera
int br_karaktera = 0; // Ukupan broj karaktera
int br_karaktera_manje_od = 0; // Ukupan broj karaktera <
int br_karaktera_vece_od = 0; // Ukupan broj karaktera >
int br_redova = 0; // Ukupan broj redova
int br_tabulatora = 0; // Ukupan broj tabulatora
int n = 0; // broj blanko znakova kojima menjamo tabulatore
int i; // brojac for petlje
// printf("\n argc = %d \n ", argc);
if( argc < 2 ) { // ako programu nisu navedeni argumenti
// prikazujemo opis programa
printf("\n c2html program.c"
"\n"
"\n Pre poziva ovog programa c2html v3.c , "
"\n potrebno je tekst fajl program.c ocistiti od tabulatora pozivom programa "
"\n detab program.c 4 "
"\n"
"\n Kade zelite programski kod da prikazete na html web stranici postoji "
"\n problem sa karakterima < i > jer su oni specijalni karakteri u html kodu "
"\n i zato se web stranica ne prikazuje dobro. "
"\n"
"\n c2html.exe tekst programskog koda priprema za upis u html dokument tako sto:"
"\n karaktere < zamenjuje sa < (low then)"
"\n karaktere > zamenjuje sa > (greater then)"
"\n"
"\n Rezultat je fajl program.c.html koji zatim otvorimo u tekst editoru "
"\n i metodom copy-paste prebacimo u html kod (code view) web stranice "
"\n izmedju <body> code here </body> tagova. \n\n"
);
system("PAUSE"); // pauziramo zatvaranje ekrana
exit(EXIT_FAILURE); // izlazimo iz programa
}
strcpy(ime_ulaznog_fajla,argv[1]); // od argv[1] pravimo ime ulaznog fajla
strcpy(ime_izlaznog_fajla,ime_ulaznog_fajla); // ime izlaznog fajla je kao ime ulaznog
strcat(ime_izlaznog_fajla,".html"); // sa dodatkom .html
// Otvaramo ulazni tekst fajl za citanje
if( (pointer_na_ulazni_fajl = fopen(ime_ulaznog_fajla, "r")) == NULL ) {
fprintf(stderr, "\n\n Greska pri otvaranju ulaznog fajla %s ! \n\n", ime_ulaznog_fajla );
exit(EXIT_FAILURE);
}
// Otvaramo izlazni tekst fajl za pisanje
if( (pointer_na_izlazni_fajl = fopen(ime_izlaznog_fajla, "w")) == NULL ) {
fprintf(stderr, "\n\n Greska pri otvaranju izlaznog fajla %s ! \n\n", ime_izlaznog_fajla );
exit(EXIT_FAILURE);
}
// U izlazni fajl upisujemo pocetni kod za Google code prettify
fprintf(pointer_na_izlazni_fajl,
"\n\n<script src=\"https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js\"></script>");
fprintf(pointer_na_izlazni_fajl, "<pre class=\"prettyprint\"><code>\n\n");
// Obrada ulaznog fajla u while petlji,
// ucitavanje jednog po jednog karaktera ch iz ulaznog fajla do kraja ulaznog fajla (EOF)
while( (ch = fgetc(pointer_na_ulazni_fajl)) != EOF ) {
br_karaktera++; // ucitali smo 1 karakter i povecavamo ukupan broj karaktera
switch(ch){ // Analiza i obrada ucitanog karaktera ch
case '<' : // ako je ch < zamenjujemo ga znacima <
br_karaktera_manje_od++; // brojimo karaktere <
fputc('&', pointer_na_izlazni_fajl); // stavljamo znak &
fputc('l', pointer_na_izlazni_fajl); // stavljamo znak l
fputc('t', pointer_na_izlazni_fajl); // stavljamo znak t
break;
case '>' : // ako je ch > zamenjujemo ga znacima >
br_karaktera_vece_od++; // brojimo karaktere >
fputc('&', pointer_na_izlazni_fajl); // stavljamo znak &
fputc('g', pointer_na_izlazni_fajl); // stavljamo znak g
fputc('t', pointer_na_izlazni_fajl); // stavljamo znak t
break;
case '\t' : // ako je ch tabulator
br_tabulatora++; // brojimo tabulatore
fputc(ch, pointer_na_izlazni_fajl); // ne menjamo tabulator
break;
case '\n' : // ako je ch znak za novi red
br_redova++; // brojimo redove
fputc(ch, pointer_na_izlazni_fajl); // ne menjamo ch
break;
default : // sve ostale karaktere ch nepromenjene stavljamo u izlazni fajl
fputc(ch, pointer_na_izlazni_fajl);
}
} // while( (ch = fgetc(pointer_na_ulazni_fajl)) != EOF )
// U izlazni fajl upisujemo zavrsni kod za Google code prettify
fprintf(pointer_na_izlazni_fajl,"\n\n</code></pre>\n\n");
// Prikaz rezultata obrade:
printf("\n\n U ulaznom fajlu \"%s\" ima: \n\n", ime_ulaznog_fajla );
printf("%8d karaktera \n\n", br_karaktera); // Ukupan broj karaktera u fajlu
printf("%8d redova \n\n", br_redova); // Ukupan broj redova u fajlu
printf("%8d tabulatora \n\n", br_tabulatora); // Ukupan broj tabulatora u fajlu
printf("%8d znakova < koji su zamenjeni sa < (low then) \n\n", br_karaktera_manje_od);// Ukupan broj karaktera <
printf("%8d znakova > koji su zamenjeni sa > (greater then) \n\n", br_karaktera_vece_od); // Ukupan broj karaktera >
// Zatvaranje ulaznog fajla
if( ( fclose(pointer_na_ulazni_fajl) ) == EOF ) { // Zatvaramo ulazni fajl
fprintf(stderr, "\n\n Greska pri zatvaranju ulaznog fajla %s ! \n\n", ime_ulaznog_fajla );
exit(EXIT_FAILURE);
}
// else
// printf("\n\n Fajl %s uspesno je zatvoren. \n\n", ime_ulaznog_fajla );
// Zatvaranje izlaznog fajla
if( ( fclose(pointer_na_izlazni_fajl) ) == EOF ) { // Zatvaramo izlazni fajl
fprintf(stderr, "\n\n Greska pri zatvaranju izlaznog fajla %s ! \n\n", ime_izlaznog_fajla );
exit(EXIT_FAILURE);
}
// else
// printf("\n\n Fajl %s uspesno je zatvoren. \n\n", ime_izlaznog_fajla );
printf(" Izlazni fajl je: \"%s\" \n\n",ime_izlaznog_fajla);
system("PAUSE");
return 0;
}