Глава 15 (продолжение 1)
Эта программа ставит тег пробела <P> на месте пробелов.
Ставит тег переноса строки <br> в конце строк.
Кроме того программа правильно оформляет отступы во вложенных блоках, оформленных
фигурными скобками {}. Для этого после открывающейся скобки ставится тег
<DIV CLASS="block_2">, после закрывающей скобки - тег </DIV CLASS="block_2">
Естественно, чтобы теги правильно работали нужен файл style.css и ссылка на него на html-странице.
Файл находится здесь:
style.css.
Программа 01_02
// Example_01_02 Транслятор html-кода
#include <fstream.h>
#include <iostream.h>
#include <string.h>
//using namespace std;
Определим глобальную переменную и функцию, которая будет ее обслуживать.
bool flag1 = true;
void fun1(bool &fl)
{
flag1 = fl;
}
int main( int argc,char* argv[])
{
ifstream from1("text1");//открываем файл для считывания
if(!from1)
{
cout<<"Vhodnoi fail ne naiden:" ;
return (1);
}
ofstream to1("text2" ); // open for writing
if(!to1)
{
cout<<"Vyhodnoi fail ne naiden:" ;
to1.close(); // always pays to be tidy
return (1);
}
//--------------------------------------------------
//
Определим локальные переменные и массивы:
int m = 0;
char buf[1024];
char buf1[2048];
char buf1a[2048] = "";
char buf1b[2048] = "";
char bufClear[] ="";
char* buf10;
buf10 = new char[];
buf10 = "<br>";
char* buf11;
buf11 = new char[];
buf11 = "<DIV CLASS=\"block_2\">";
char* buf12;
buf12 = new char[];
buf12 = "</DIV CLASS=\"block_2\">" ;
char* buf15;
buf15 = new char[];
buf15 = "<P>";
//--------------------------------------------------
//
Теперь считываем из файла построчно:
while (!from1.eof())
{
from1.getline(buf,sizeof(buf));
m = 0;
int i = 0;
//--------------------------------------------------
//--------------------------------------------------
//вставим тег <P> если пустая строка
if(strlen(buf)==0)
{
m = 1;
for(int r =0;r<4;r++) // вставим тег пробела
{
buf1[m] = buf15[r];
m++;
}
buf1[m] = '\r';
m++;
for(r =1;r<4;r++) // вставим тег пробела
{
to1 << buf1[r];
}
to1 << '\r';
fun1(flag1=false);//тег <p> вставлен!
continue;
}
//
Строка не пустая, в цикле for анализируем посимвольно считанную строку,
// ищем в ней символы '{' и '}'.
// Если не находим, то просто копируем символ в buf1 и инкременируем индекс массива.
// Если находим, то выполняем один из блоков if.
for( i = 0;i<=1024;i++)
{
if(buf[i] =='{')
{
//копируем найденный символ '{' в массив buf1
buf1[m] = buf[i];
m++;
//делаем вставку лексемы из массива buf11 в массив buf1
for(int k =0;k<21;k++)
{
buf1[m] = buf11[k];
m++;
}
continue;
}//end if
//--------------------------------------------------
//--------------------------------------------------
if(buf[i] =='}')
{
//делаем вставку лексемы из массива buf12 в массив buf1
for(int l =0;l<22 ;l++)
{
buf1[m] = buf12[l];
m++;
}
//копируем найденный символ '}' в массив buf1
buf1[m] = buf[i];
m++;
continue;
} // end if
//--------------------------------------------------
//--------------------------------------------------
buf1[m] = buf[i];
m++;
} // end for
//--------------------------------------------------
// Во временном массиве buf1 содержится модифицированная строка buf
// Таким образом программа проанализировала строку на предмет присутствия в ней
// символов '{' и '}', где необходимо были вставлены соответствующие лексемы.
// И результат (модифицированная строка) помещен в массив buf1.
//если в предыдущей строке была лексема <DIV CLASS="block_2">
if(strstr(buf1b, buf11))
{
to1 << buf1 << "\n"; // копируем модифицированную строку в файл
strcpy(buf1b, bufClear); // очистим buf1b
continue;
}
if(flag1 == true )//если пробела в предыдущей строке нет
strcat(buf1a,buf10); // поместим тег <br> в buf1a
strcat(buf1a,buf1); // дополним buf1a строкой buf1
to1 << buf1a << "\n"; // запишем buf1a в файл
strcpy(buf1b, buf1a); // сохраним buf1a в buf1b
strcpy(buf1a,bufClear); //очистим buf1a
fun1(flag1=true); //восстановим флаг
} //end while
//--------------------------------------------------
from1.close();
to1.close();
return 0;
}