51202

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

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

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

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

Русский

2014-02-07

148.66 KB

10 чел.

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

ПЗАС-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;

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

     


 

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

16794. Математический способ повышения представительности геофизического опробования золотосодержащих руд 63.5 KB
  УДК 622 Математический способ повышения представительности геофизического опробования золотосодержащих рудФедянин С.Н. зам. главного геофизика НГМК канд. техн. наук; Нерущенко Е.В. главный геофизик Северного рудоуправления НГМК; Коробов В.А. геолог ОМГТП НГМК В НГМК
16795. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ по применению Классификации запасов месторождений и прогнозных ресурсов твердых полезных ископаемых 620 KB
  МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ по применению Классификации запасов месторождений и прогнозных ресурсов твердых полезных ископаемых Золото рудное Москва 2007 Разработаны Федеральным государственным учреждением Государственная
16796. Минералогические предпосылки и предварительные результаты гравитационного обогащения забалансовых руд месторождения Мурунтау 56 KB
  Минералогические предпосылки и предварительные результаты гравитационного обогащения забалансовых руд месторождения МурунтауКустова Л.А. начальник ЦЗЛ ГМЗ2 Центрального рудоуправления НГМК Черкасов В.Ю. главный инженер ГМЗ2 Центрального рудоуправления НГМК К нас
16797. Теория экономического анализа 499.58 KB
  В процессе изучения дисциплины «Теория экономического анализа» студент получает основные представления о методах и способах анализа хозяйственной деятельности предприятий и организаций, познает и оценивает сущность и тенденции развития системы экономических знаний
16798. Минералого-геохимические особенности поведения благородных металлов в условиях разнообразных природных систем 72 KB
  Минералого-геохимические особенности поведения благородных металлов в условиях разнообразных природных систем. К благородным металлам относятся золото и серебро, а также 6 элементов платиновой группы: рутений, родий, палладий, осмий, иридий и платина...
16799. Организация дежурной службы в частях пожарной охраны 53.05 KB
  Цель изучения темы – формирование у обучаемых соответствующей современным требованиям и нормам степени подготовленности, необходимых знаний, умений и навыков в области организации и несения службы в частях пожарной охраны и обеспечения пожарной безопасности.
16800. Минерально-сырьевой потенциал платиновых металлов России на пороге XXI века 316 KB
  Минеральносырьевой потенциал платиновых металлов России на пороге XXI века Н.М.Чернышов Д.А.Додин Воронежский государственный университет г.Воронеж ВНИИ Океангеология г.СанктПетербург Аннотация Предложена оригинальная классификация платиноидных ме
16801. Намывные россыпи как новый источник получения золота и платины 80 KB
  Намывные россыпи как новый источник получения золота и платины От редакции бюлл. Золотодобыча. Новое как известно часто является хорошо забытым старым. Нижеприведенная статья по мелкому золоту написана в 1932 году но мы уверены что она с интересом будет прочитана и сег...
16802. НОВЫЕ ТЕХНИКА И ТЕХНОЛОГИИ ОБОГАЩЕНИЯ ПЕСКОВ 225 KB
  НОВЫЕ ТЕХНИКА И ТЕХНОЛОГИИ ОБОГАЩЕНИЯ ПЕСКОВ Несмотря на снижение объема добычи золота из россыпей они продолжают оставаться наиболее выгодным объектом для промышленного освоения как в современных условиях так и в среднесрочной перспективе поскольку их минераль