/*
	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;
}