51202

Разработка интерпретатора текстовой (теговой) разметки документа

Лабораторная работа

Информатика, кибернетика и программирование

Идея языков разметки состоит в том, что визуальное отображение документа должно автоматически получаться из логической разметки и не зависеть от его непосредственного содержания. Это упрощает автоматическую обработку документа и его отображение в различных условиях (например, один и тот же файл может по-разному отображаться на экране компьютера, мобильного телефона и на печати...

Русский

2014-02-07

148.66 KB

7 чел.

Анализ требований к ПО

ПЗАС-08-2

Швец Дмитрий

Лабораторная работа № 3

Тема:  Разработка интерпретатора текстовой (теговой) разметки документа

Задание:

  1.  Ознакомиться с общими принципами языков текстовой разметки документов
  2.  Разработать тэг разметки типа шрифта  !!!!
  3.  Разработать тэг разметки цвета текста   !!!!
  4.  Разработать тэг разметки размера шрифта !!!!
  5.  Разработать тэг разметки рисунка
  6.  Разработать тэг разметки координат элементов на форме
  7.  Разработать тег фона документа  !!!!
  8.  Разработать тег заголовка документа  !!!!
  9.  Разработать тег новой строки  !!!!
  10.  Сформировать текстовый документ на основе разработанной системы разметки, содержащий фрагменты текста и рисунок
  11.  Разработать приложение со следующими функциями:
  12.  Доступ и открытие документа теговой разметки
  13.  Отображение пути доступа к открытому документу
  14.  Интерпретация документа теговой разметки и формирование на его основе образов текста и рисунка на форме в указанных форматах и координатах

Отчет должен содержать:

  1.  Краткие теоретические сведения о языках теговой разметки
  2.  Содержимое текстового файла с теговой разметкой
  3.  Исходный текст программы
  4.  Снимок интерфейса программы
  5.  Краткие выводы

Краткие теоретические сведения

       Язык разметки (текста) в компьютерной терминологии — набор символов или последовательностей, вставляемых в текст для передачи информации о его выводе или строении. Принадлежит классу компьютерных языков. Текстовый документ, написанный с использованием языка разметки, содержит не только сам текст (как последовательность слов и знаков препинания), но и дополнительную информацию о различных его участках — например, указание на заголовки, выделения, списки и т. д. В более сложных случаях язык разметки позволяет вставлять в документ интерактивные элементы и содержание других документов.

       Различают логическую и визуальную разметки. В первом случае речь идет только о том, какую роль играет данный участок документа в его общей структуре (например, «данная строка является заголовком»). Во втором определяется, как именно будет отображаться этот элемент (например, «данную строку следует отображать жирным шрифтом»). Идея языков разметки состоит в том, что визуальное отображение документа должно автоматически получаться из логической разметки и не зависеть от его непосредственного содержания. Это упрощает автоматическую обработку документа и его отображение в различных условиях (например, один и тот же файл может по-разному отображаться на экране компьютера, мобильного телефона и на печати, поскольку свойства этих устройств вывода существенно различаются). Однако это правило часто нарушается: например, создавая документ в редакторе наподобие MS Word, пользователь может выделять заголовки жирным шрифтом, но нигде не указывать, что эта строка является заголовком.

Содержимое текстового файла с теговой разметкой

Начало

@b@

@tittle@ Задаем заголовок документа @/tittle@

@background=yellow@

Текст

еще немного текста

@img src='bmp.bmp'@

@coordinate:image[05,04]@

@font size=24@ Большой шрифт @/size@

@textcolor=blue@ Цветной шрифт @/textcolor@

@font type=times new roman@ Изменение шрифта @/type@

Исходный текст программы

procedure TForm1.Button2Click(Sender: TObject);

label label1;

var i,j,p,k,q,bla:integer;

   st,s:string;

   flag,proverka,proverka2:boolean;

   g1,g2,z:byte;

begin

j:=0;

q:=0;

flag:=false;

proverka:=false;

proverka2:=false;

form3.richedit1.Clear;

form3.RichEdit1.SelAttributes.Color:=clWindowText;

form3.RichEdit1.SelAttributes.Size:=8;

form3.RichEdit1.SelAttributes.Name:='MS Sans Serif';

for i:=0 to form2.memo1.Lines.Count-1 do

 begin

   flag:=false;

   st:=form2.memo1.Lines[i];

   label1:

   if pos('@b@',st)<>0 then

      begin

        form3.RichEdit1.SelAttributes.Color:=clWindowText;

       form3.RichEdit1.SelAttributes.Size:=8;

        delete(st,pos('@b@',st),4);

        form3.richedit1.Lines.Add(st);

        form3.richedit1.Lines.Insert(i,' ');

        j:=j+length(st);

        flag:=true;

        goto label1;

      end;

   if pos('@tittle@',st)<>0 then

     begin

     form3.RichEdit1.SelAttributes.Color:=clWindowText;

       form3.RichEdit1.SelAttributes.Size:=8;

     delete(st,pos('@tittle@',st),8);

     delete(st,pos('@/tittle@',st),9);

     form3.Caption:=st;

     j:=j+length(st);

     flag:=true;

     goto label1;

     end;

   if pos('@background=red@',st)<>0 then

     begin

       form3.RichEdit1.SelAttributes.Size:=8;

     form3.richedit1.Color:=clred;

     delete(st,pos('@background=red@',st),16);

     if st<>'' then

     form3.richedit1.Lines.Add(st);

     j:=j+length(st);

     flag:=true;

     goto label1;

     end;

   if pos('@background=aqua@',st)<>0 then

     begin

       form3.RichEdit1.SelAttributes.Size:=8;

     form3.richedit1.Color:=claqua;

     delete(st,pos('@background=aqua@',st),17);

     if st<>'' then

     form3.richedit1.Lines.Add(st);

     j:=j+length(st);

     flag:=true;

     goto label1;

     end;

   if pos('@background=yellow@',st)<>0 then

     begin

           form3.RichEdit1.SelAttributes.Size:=8;

     form3.richedit1.Color:=clyellow;

     delete(st,pos('@background=yellow@',st),19);

     if st<>'' then

     form3.richedit1.Lines.Add(st);

     j:=j+length(st);

     flag:=true;

     goto label1;

     end;

   if pos('@background=green@',st)<>0 then

     begin

          form3.RichEdit1.SelAttributes.Size:=8;

     form3.richedit1.Color:=clgreen;

     delete(st,pos('@background=green@',st),18);

     if st<>'' then

     form3.richedit1.Lines.Add(st);

     j:=j+length(st);

     flag:=true;

     goto label1;

     end;

   if pos('@background=blue@',st)<>0 then

     begin

     form3.RichEdit1.SelAttributes.Size:=8;

     form3.richedit1.Color:=clblue;

     delete(st,pos('@background=blue@',st),17);

     if st<>'' then

     form3.richedit1.Lines.Add(st);

     j:=j+length(st);

     flag:=true;

     goto label1;

     end;

   if pos('@background=darkblue@',st)<>0 then

     begin

       form3.RichEdit1.SelAttributes.Size:=8;

     form3.richedit1.Color:=clhotlight;

     delete(st,pos('@background=darkblue@',st),21);

     if st<>'' then

     form3.richedit1.Lines.Add(st);

     j:=j+length(st);

     flag:=true;

     goto label1;

     end;

   if pos('@background=purple@',st)<>0 then

     begin

     //form3.RichEdit1.SelAttributes.Color:=clWindowText;

       form3.RichEdit1.SelAttributes.Size:=8;

     form3.richedit1.Color:=clpurple;

     delete(st,pos('@background=purple@',st),19);

     if st<>'' then

     form3.richedit1.Lines.Add(st);

     j:=j+length(st);

     flag:=true;

     goto label1;

     end;

   if pos('@font size=',st)<>0 then

     begin

       form3.RichEdit1.SelAttributes.Size:=8;

       p:=strtoint(st[pos('@font size=',st)+11]+st[pos('@font size=',st)+12]);

       j:=j+pos(copy(st,pos(inttostr(p),st)+3,pos('@/size@',st)- pos(inttostr(p),st)+3),st);

       form3.richedit1.SelStart:=j+2*i-1;

       form3.richedit1.SelLength:=length(copy(st,pos(inttostr(p),st)+3,pos('@/size@',st)- pos(inttostr(p),st)+3));

       form3.richedit1.SelAttributes.Size:=p;

       form3.RichEdit1.SelAttributes.Color:=clBlack;//form3.RichEdit1.Color;

       delete(st,pos('@font size=',st),14);             

       delete(st,pos('@/size@',st),7);

       form3.RichEdit1.Lines.Add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@textcolor=red@',st)<>0 then

     begin

       form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@textcolor=red@',st)+15,pos('@/textcolor@',st)-(pos('@textcolor=red@',st)+15)  ));

       form3.RichEdit1.SelAttributes.Color:=clRed;

       delete(st,pos('@textcolor=red@',st),15);

       delete(st,pos('@/textcolor@',st),12);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.richedit1.Lines.add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@textcolor=aqua@',st)<>0 then

     begin

       form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@textcolor=aqua@',st)+16,pos('@/textcolor@',st)-(pos('@textcolor=aqua@',st)+16)  ));

       form3.RichEdit1.SelAttributes.Color:=clAqua;

       delete(st,pos('@textcolor=aqua@',st),16);

       delete(st,pos('@/textcolor@',st),12);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.richedit1.Lines.add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@textcolor=yellow@',st)<>0 then

     begin

       form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@textcolor=yellow@',st)+18,pos('@/textcolor@',st)-(pos('@textcolor=yellow@',st)+18)  ));

       form3.RichEdit1.SelAttributes.Color:=clYellow;

       delete(st,pos('@textcolor=yellow@',st),18);

       delete(st,pos('@/textcolor@',st),12);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.richedit1.Lines.add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@textcolor=green@',st)<>0 then

     begin

        form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@textcolor=green@',st)+17,pos('@/textcolor@',st)-(pos('@textcolor=green@',st)+17)  ));

       form3.RichEdit1.SelAttributes.Color:=clGreen;

       delete(st,pos('@textcolor=green@',st),17);

       delete(st,pos('@/textcolor@',st),12);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.richedit1.Lines.add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@textcolor=blue@',st)<>0 then

     begin

          form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@textcolor=blue@',st)+16,pos('@/textcolor@',st)-(pos('@textcolor=blue@',st)+16)  ));

       form3.RichEdit1.SelAttributes.Color:=clBlue;

       delete(st,pos('@textcolor=blue@',st),16);

       delete(st,pos('@/textcolor@',st),12);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.richedit1.Lines.add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@textcolor=darkblue@',st)<>0 then

     begin

       form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@textcolor=darkblue@',st)+20,pos('@/textcolor@',st)-(pos('@textcolor=darkblue@',st)+20)  ));

       form3.RichEdit1.SelAttributes.Color:=clHotLight;

       delete(st,pos('@textcolor=darkblue@',st),20);

       delete(st,pos('@/textcolor@',st),12);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.richedit1.Lines.add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@textcolor=purple@',st)<>0 then

     begin

       form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@textcolor=purple@',st)+18,pos('@/textcolor@',st)-(pos('@textcolor=purple@',st)+18)  ));

       form3.RichEdit1.SelAttributes.Color:=clPurple;

       delete(st,pos('@textcolor=purple@',st),18);

       delete(st,pos('@/textcolor@',st),12);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.richedit1.Lines.add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@font type=ms sans serif@',st)<>0 then

     begin

       form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@font type=ms sans serif@',st)+25,pos('@/type@',st)-(pos('@font type=ms sans serif@',st)+25)));

       delete(st,pos('@font type=ms sans serif@',st),25);

       delete(st,pos('@/type@',st),7);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.RichEdit1.SelAttributes.Color:=clWindowText;

       form3.RichEdit1.SelAttributes.Name:='MS Sans Serif';

       form3.RichEdit1.Lines.Add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@font type=times new roman@',st)<>0 then

     begin

       form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@font type=times new roman@',st)+27,pos('@/type@',st)-(pos('@font type=times new roman@',st)+27)));

       delete(st,pos('@font type=times new roman@',st),27);

       delete(st,pos('@/type@',st),7);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.RichEdit1.SelAttributes.Color:=clWindowText;

       form3.RichEdit1.SelAttributes.Name:='Times New Roman';

       form3.RichEdit1.Lines.Add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@font type=calibri@',st)<>0 then

     begin

       form3.RichEdit1.SelStart:=j+2*i-1;

       form3.RichEdit1.SelLength:=length(copy(st,pos('@font type=calibri@',st)+19,pos('@/type@',st)-(pos('@font type=calibri@',st)+19)));

       delete(st,pos('@font type=calibri@',st),19);

       delete(st,pos('@/type@',st),7);

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.RichEdit1.SelAttributes.Color:=clWindowText;

       form3.RichEdit1.SelAttributes.Name:='Calibri';

       form3.RichEdit1.Lines.Add(st);

       j:=j+length(st);

       flag:=true;

       goto label1;

     end;

   if pos('@img src=''',st)<>0  then

     begin

       for k:=1 to length(st) do

         begin

           if st[k]='@' then inc(q);

           if q=2 then q:=k;

         end;

       s:=copy(st,pos('@img src=''',st)+10,q-1-(pos('@img src=''',st)+10));

       form3.Image1.Picture.LoadFromFile(s);

       proverka2:=true;

       bla:=j-15;

       continue;

     end;

   if pos('@coordinate:image[',st)<>0 then

     begin

       proverka:=true;

       g1:=strtoint(copy(st,pos('@coordinate:image[',st)+18,2));

       g2:=strtoint(copy(st,pos('@coordinate:image[',st)+21,2));

       delete(st,pos('@coordinate:image[',st),25);

       if st<>'' then

       form3.richedit1.Lines.Add(st);

       j:=j+length(st);

       {form3.RichEdit1.SelStart:=10;

       InsertBitmapToRE(form3.RichEdit1.Handle, form3.Image1.Picture.Bitmap.Handle);}

       //form3.RichEdit1.CaretPos.X:=0;

       continue;

     end;

     if flag=false then begin

     form3.RichEdit1.SelAttributes.Color:=clWindowText;

       form3.RichEdit1.SelAttributes.Size:=8;

       form3.RichEdit1.SelAttributes.Name:='MS Sans Serif';

   form3.richedit1.Lines.Add(form2.Memo1.Lines[i]);

   j:=j+length(st);          end;

 end;

if proverka then

 begin

   //form3.RichEdit1.SelStart:=0;

   z:=0;

   for i:=0 to g1-2 do

     z:=z+length(form3.RichEdit1.Lines[i]);

     form3.RichEdit1.SelStart:=z+g2;

     InsertBitmapToRE(form3.RichEdit1.Handle, form3.Image1.Picture.Bitmap.Handle);

 end

 else

 begin

   form3.RichEdit1.SelStart:=bla;

   InsertBitmapToRE(form3.RichEdit1.Handle, form3.Image1.Picture.Bitmap.Handle);

 end;

form3.show;

end;

Снимок интерфейса программы

     


 

А также другие работы, которые могут Вас заинтересовать

14373. Определение удельной теплоты плавления льда и изменения энтропии в процессе плавления 86.5 KB
  Лабораторная работа №15 по дисциплине Физика на тему: Определение удельной теплоты плавления льда и изменения энтропии в процессе плавления. 1. Цели и задачи: определение калориметрическим методом удельной теплоты фазового перехода λ и расчет изменения эн
14374. Градуировка дифференциальной термопары медь-константан по термометру и определение коэффициента термоэдс для спаев двух данных металлов 115.5 KB
  Лабораторная работа №15 по дисциплине Физика на тему: Градуировка дифференциальной термопары медьконстантан по термометру и определение коэффициента термоэдс для спаев двух данных металлов 1. Цели и задачи: дифференциальную термопару необходимо проградуи
14375. Определение ЭДС и напряжений методом компенсации 232 KB
  Лабораторная работа № 32 по дисциплине Физика на тему: Определение ЭДС и напряжений методом компенсации. Цели и задачи: Определение ЭДС элемента при комнатной температуре методом компенсации. Определение внутреннего сопротивления элемента.
14376. Дифракция света на бегущих ультразвуковых волнах 199 KB
  Лабораторная работа по дисциплине Физика на тему: Дифракция света на бегущих ультразвуковых волнах.. Цели и задачи: определить скорость ультразвука в воде по дифракции света на бегущих волнах и рассчитать для воды. Приборы и...
14377. Определение ускорения свободного падения при помощи физического оборотного маятника и нахождения его момента инерции 96 KB
  Определение ускорения свободного падения при помощи физического оборотного маятника и нахождения его момента инерции Лабораторная работа №4 1. Цели и задачи: определить ускорение свободного падения при помощи физического оборотного маятника и найти его момент и
14378. Определение модуля сдвига круглого стержня методом крутильных колебаний 116.5 KB
  Определение модуля сдвига круглого стержня методом крутильных колебаний Лабораторная работа №7 1. Цели и задачи: определить модуль сдвига круглого стержня методом крутильных колебаний. 2. Приборы и материалы: закрепленный вверху круглый металлический сте
14379. Градуировка термопары медь-константан по реперным точкам и определение коэффициента термоЭДС для данного спая двух металлов 104.5 KB
  Градуировка термопары медьконстантан по реперным точкам и определение коэффициента термоЭДС для данного спая двух металлов Лабораторная работа №14 1. Цели и задачи: В данной работе необходимо проградуировать термопару медьконстантан по реперным точкам опреде
14380. Определение емкостей конденсаторов и ЭДС гальванических элементов при помощи гальванометра 228.5 KB
  Определение емкостей конденсаторов и ЭДС гальванических элементов при помощи гальванометра Лабораторная работа №33 1. Цели и задачи: необходимо проградуировать баллистический гальванометр и определить емкости конденсаторов а также ёмкостей конденсаторов ...
14381. ИЗУЧЕНИЕ ЗАКОНОМЕРНОСТЕЙ ПРОХОЖДЕНИЯ ЭЛЕКТРОНОВ В ВАКУУМЕ. ЗАКОН СТЕПЕНИ ТРЕХ ВТОРЫХ. ОПРЕДЕЛЕНИЕ УДЕЛЬНОГО ЗАРЯДА ЭЛЕКТРОНА 612.5 KB
  Лабораторная работа 34 ИЗУЧЕНИЕ ЗАКОНОМЕРНОСТЕЙ ПРОХОЖДЕНИЯ ЭЛЕКТРОНОВ В ВАКУУМЕ. ЗАКОН СТЕПЕНИ ТРЕХ ВТОРЫХ. ОПРЕДЕЛЕНИЕ УДЕЛЬНОГО ЗАРЯДА ЭЛЕКТРОНА Физическое обоснование эксперимента Ток в проводниках во многих случаях подчиняется закону Ома...