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;

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

     


 

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

32894. Материализм и идеализм. Агностицизм. Материя и движение. Изменение и покой. Определения. Формальная логика. Диалектика и метафизика 46.51 KB
  Материя и движение. Движение Любое изменение вообще начиная с пространственного перемещения предметов и заканчивая человеческим мышлением. Движение есть атрибут материи неотъемлемое свойство любого материального объекта. Движение в чистом виде существует только в мышлении в реальности же существует только движущиеся материальные объекты.
32895. Проблема познания. Ступени познания: чувственное и рациональное, эмпирическое и теоретическое. Сенсуализм и рационализм. Проблема истины. Агностицизм 44.86 KB
  Проблема познания. Ступени познания: чувственное и рациональное эмпирическое и теоретическое. Субъект познания тот кто познает; Объект познания то что познается. Чувственное познание Самая простая и исходная форма познания.
32896. Сознание и человек. Гилозоизм, панпсихизм. Редукционизм, физикализм, механицизм 35.52 KB
  Гилозоизм учение о всеобщей одушевленности материи. Отрицает границу между живым и неживым и считает жизнь неотъемлемым свойством материи. Редукционизм высшие формы материи могут быть полностью объяснены на основе закономерностей свойственных низшим формам т. Механицизм теория в соответствии с которой все явления полностью объяснимы на основе механических принципов; идея что каждое явление представляет собой результат существования материи находящейся в движении и может быть объяснено на основе законов...
32897. Декарт (1596-1650) 11.6 KB
  Первое правило метода гласит что истинным является все то что воспринимается в ясном и отчетливом виде и не дает повода к сомнениям то есть самоочевидно. Второе правило метода предлагает делить каждую сложную вещь ради успеха ее изучения на более простые составляющие. Третье правило метода утверждает: в познании мыслью следует идти от простейших то есть элементарных и наиболее доступных для нас вещей к вещам более сложным. Четвертое правило декартовского метода ориентирует на достижение полноты знания.
32899. Иммануил Кант(1724 – 1804) 12.28 KB
  Иммануил Кант1724 – 1804. В философском развитии Канта различают 2 периода:1. Разработка космогонической картины мира происхождение солнечной системы из первоначальной туманности – теория КантаЛапласа. Всеобщая естественная история и теория неба 1755 в нем Кант практически исключает идею сотворения.
32900. НЕОКАНТИАНСТВО 11.82 KB
  В неокантианстве различают Марбургскую школу занимавшуюся преимущественно логикометодологической проблематикой естественных наук и Фрейбургскую Баденскую школу сосредоточившуюся на проблематике ценностей и методологии наук гуманитарного цикла. Разрабатывала в основном вопросы связанные с методологией гуманитарных наук. Различие между естествознанием и науками гуманитарного цикла представители этой школы видели не в разнице предмета исследования а в специфическом методе присущем историческому познанию.
32901. Философская система 11.94 KB
  Субъективный дух человеческое сознание постигая вещи обнаруживает в них проявление абсолютного духа божественного мышления. Порожденная духом природа не имеет независимого от него существования. Дух выходит из природы прерывая внешнюю кору материальности как чего то низшего.3 Философия духа делится на три части на учения о субъективном объективном и абсолютном духе.
32902. Становление марксистской философии 11.5 KB
  Во второй половине 50х и особенно в 60е годы происходит антропологический поворот : советская философия обращается к человеку человеческой проблематике. В современном буржуазном обществе она предстала по Марксу как проблема отчуждения : устройство общества разделение труда частная собственность таково что результаты человеческой деятельности продукты труда отчуждаются от человека и превращаются в господствующую над ним силу что ведет и к отчуждению людей друг от друга.