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;

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

     


 

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

30888. Сосудистый тонус 47 KB
  Сосудорасширяющие: а неспецифические метаболиты непрерывно образуются в тканях и в месте образования они всегда препятствуют сужению сосудов а также вызывают их расширение метаболическая регуляция. Сосудосуживающие БАВ при действии в месте выделения образуются специализированными клетками которые входят в состав сосудистого окружения катехоламины серотонин некоторые простагландины эндотелии 1пептид 21на аминокислота продукт инкреции эндотелия сосудов а также тромбоксан А2 выделяемый тромбоцитами при...
30889. Системная гемодинамика 54.5 KB
  Венозный возврат крови к сердцу. Объем циркулирующей крови. Согласно законам гемодинамики количество жидкости Q протекающее через трубку прямо пропорционально разности давлений в начале P1 и в конце Р2 трубы и обратно пропорционально сопротивлению R току жидкости: Если учесть что давление в конце системы Р2 в устьях полых вен в правом предсердии центральное венозное давление близко к нулю то можно записать: где Q количество крови изгнанное сердцем за 1 мин; Ρ величина среднего давления в аорте; R величина общего...
30890. Методы оценки основных показателей гемодинамики 24 KB
  Методы оценки основных показателей гемодинамики Артериальное давление. Боковое измеряется некровавым косвенным методом: а пальпаторный метод РиваРоччи; б аускультативный метод Короткова; в осциллографический метод определяется количественно среднее давление а также систолическое и диастолическое давление. Метод позволяет оценить риск развития гипертонии ее тяжесть дать более точный прогноз развития болезни. Метод разведения красителя.
30891. Регуляция системной гемодинамики 51 KB
  Регуляция системной гемодинамики Система мониторинга АД и ОЦК В организме существует система слежения мониторинга артериального давления и объема циркулирующей крови. Мониторинг осуществляется афферентными системами нервные окончания которых способны воспринимать изменение давления а некоторые из них изменение объема циркулирующей крови. Они информируют об изменениях объема крови. Третья группа вибрационные рецепторы воспринимают изменения давления связанные с вихревым движение крови турбулентностью потока.
30892. Микроциркуляция 49.5 KB
  В зависимости от ультраструктуры стенки выделяют три типа капилляров: соматический висцеральный и синусоидный. Стенка капилляров соматического типа образована сплошным слоем эндотелиальных клеток в мембране которых имеется огромное количество мельчайших пор диаметром 45 нм этот тип капилляров характерен для кожи скелетных и гладких мышц миокарда легких. Стенки таких капилляров хорошо пропускают воду растворенные в ней кристаллоиды малопроницаема для белков. Такой тип капилляров в почках кишечнике эндокринных железах т.
30893. Особенности гемодинамики в различных сосудистых регионах. Легочное кровообращение 39.5 KB
  Очень низкий тонус легочных сосудов т. Мускулатура сосудов легких при снижении pO2 и повышении pCO2 в альвеолярном воздухе сокращается. В ответ на действие гистамина брадикинина дистантное влияние гладкая мускулатура легочных сосудов также сокращается вазоконстриктор ное действие т. пункт 2 Высокая растяжимость кровеносного русла Высокий базальный тонус коронарных сосудов.
30894. Особенности гемодинамики в различных сосудистых регионах. Почечный кровоток 42.5 KB
  Регуляция Миогенная регуляция ауторегуляция Даже небольшое увеличение объемной скорости портального кровотока приводит к повышению тонуса воротной вены и сопряженно констрикцию печеночной артерии. Оба этих механизма направлены на обеспечение постоянства кровотока и давления в синусоидах Гуморальная регуляция Дистантная регуляция Адреналин вызывают сокращение воротной вены в ней альфаадрено рецепторы и дилятации печеночной артерии в ней бетаадренорецепторы и усиливает печеночный кровоток. Норадреналин вызывает констрикцию воротной вены и...
30895. Лимфатическая система 42 KB
  В отличие от кровеносных сосудов по которым происходит как приток крови к тканям тела так и ее отток от них лимфатические сосуды служат лишь для оттока лимфы т. Состав и свойства лимфы Лимфа собираемая из лимфатических протоков во время голодания или после приема нежирной пищи представляет собой бесцветную почти прозрачную жидкость отличающуюся от плазмы крови в 3 4 раза меньшим содержанием белков. Вследствие малого содержания белков вязкость лимфы меньше а относительная плотность ниже чем плазмы крови. Реакция лимфы щелочная.
30896. Регуляция работы сердца 46 KB
  Регуляция работы сердца Регуляция деятельности сердца Механизм регуляции деятельности сердца: Саморегуляция. Законы саморегуляции деятельности сердца: Закон ФранкаСтарлинга сила сердечных сокращений пропорциональна степени растяжения миокарда в диастолу. Нервная регуляция деятельности сердца. Симпатическая нервная система: а перерезка волокон СНС нет изменений в деятельности сердца симпатические центры иннервирующие сердце исходно не обладают спонтанной активностью; б активация СНС хроно ино батмо и дромотропный...