51202

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

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

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

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

Русский

2014-02-07

148.66 KB

9 чел.

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

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

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

     


 

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

25518. Понятие, особенности молодой семьи 15.71 KB
  Понятие Молодая семья давно используется в демографической социологической педагогической литературе. Использовалось в постановлении ЦК КПСС и совета министров СССР от 22 января 1981 г О мерах по усилению государственной помощи семьям имеющим детей. Затем стало выделяться понятие студенческая семьясм. Молодая семья возраст каждого из супругов которой не превышает 30 лет либо не полная семья состоящая из 1 молодого родителя возраст которого не превышает 30 и одного и более детей.
25519. Семья 13.04 KB
  Существует ряд подходов определения семья: Ожегов: СЕМЬЯ это группа живущих вместе близких родственников. Традиционное определение: СЕМЬЯ это важнейшая форма организации личной жизни вид социальной общности малая группа основанная на супружеском союзе родственных связей или усыновлении т.: СЕМЬЯ это историческиконкретная система взаимоотношений между супругами между родителями и детьми малая социальная группа члены которой связаны брачными и родительскими отношениями общностью бытом и взаимной моральной ответственностью...
25520. Государственная поддержка семей с детьми 12.08 KB
  Виды пособий: По беременности и родам; Ежемесячные пособие на период отпуска по уходу за ребенком до достижения возраста 15 года; Единовременное пособие женщинам ставшим на учет в медицинское учреждение в ранние сроки беременности до 12 недель; Единовременное пособие при рождении ребенка; Ежемесячные пособия на ребенка до достижения 16 лет на учащегося в общеобразовательном учреждении до окончания им обучения но не более чем до 18 лет; Единовременное пособие беременным женам военнослужащих проходящих военную службу по призыву;...
25522. Принятая генеральной ассамблеей ООН 13.86 KB
  1994 год был объявлен ООН Международным годом семьи. Идеология и стратегия семейной политики разработанные ООН и закрепленные в ее резолюциях посвященным году семьи и других материалов заключается в следующем: 1 семья как важнейшая ячейка общества заслуживает внимания защиты и поддержки со стороны государства независимо от типов семей многообразия индивидуальных предпочтений и социальных условии. На основе анализа руководящих принципов по вопросам семьи разработанных комитетом по вопросам семьи ООН можно выделить наиболее важно...
25523. Проблемная семья: сущность, типы 17.45 KB
  Сущность психологического содержания понятия проблемная семья традиционно имеет как широкое так и узкое толкование в специальной литературе. Например к проблемным семьям в этом случае можно отнести молодую семью не решившую задачу дифференциации от родительской семьи не разрешившую конфликты между личными и кооперативными потребностями. Дисфункциональная семья семья плохо или вовсе не выполняющая основные семейные функции.
25524. Конструкционные сплавы черных металлов. Стали и чугуны 136 KB
  Легированная сталь — сталь, которая кроме обычных примесей содержит элементы, специально вводимые в определённых количествах для обеспечения требуемых физических или механических свойств. Эти элементы называются легирующими.
25526. Возможности устранения супружеских конфликтов 15.44 KB
  Как уже указывалось чтобы научиться управлять ссорой нужно научиться управлять собственным эмоциональным состоянием. Тогда получается что для того чтобы эффективно управлять ситуацией возникновения ссоры и попытаться предотвратить ее человек должен научиться управлять собственным раздражением недовольством уметь сводить их на нет. И для того чтобы эффективно управлять ситуацией возникновения ссоры и попытаться предотвратить ее человек должен научиться управлять собственным раздражением недовольством уметь сводить их на нет.