XML на С++
От: stace  
Дата: 01.06.05 10:32
Оценка:
Привет всем, я очень извиняюсь, с программированием знаком на уровне новичка, но все же. В институте задали ужас какой то. К сожалению текст на английском.

2. Task definition
The task involves writing the converter code that will take the input file and produce the output file. Both files describe the textual document that can contain various text style modifiers affecting the presentation (Bold, Italic, text color, etc…). The set of style modifiers supported by both input and output file formats is same; however, the structure is completely different.

2.1. Input file format definition
The input file is a sequential stream of text that may contain style modifiers which define the change of style for the text following the modifier.

Example:

The\B quick\I brown\B fox \COLOR=RGB(255,0,0)jumps\COLOR=RGB(0,255,0) over\COLOR the\COLOR lazy dog.

2.2. Output file format definition
The output file is an XML document. The output document must be well formed [XML].

Since there is certain freedom of valid output file variations, the following two examples illustrate what will be considered as better (more efficient) and worse (less efficient) result files.


вот такое надо получить
2.2.1. Efficient result file

<?xml version="1.0" encoding="utf-8"?>
<document>
The
<b>
<space/>quick
<i>
<space/>brown
</i>
</b>
<i>
<space/>fox<space/>
<colour rgb="255,0,0">
jumps
<colour rgb="0,255,0">
<space/>over
</colour>
<space/>the
</colour>
<space/>lazy
<space/>dog.
</i>
</document>
Re: XML на С++
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 01.06.05 10:53
Оценка: +3
Здравствуйте, stace, Вы писали:

S>Привет всем, я очень извиняюсь, с программированием знаком на уровне новичка, но все же. В институте задали ужас какой то.


См. так же: НУЖНО СРОЧНО
Автор: Sebastian20052005
Дата: 01.06.05
(оно же ПРОСТЕНЬКАЯ ПРОГА) и Помогите плиз разобраться с заданием.
Автор: vim
Дата: 31.05.05
(особенно ответ: Re: Помогите плиз разобраться с заданием.
Автор:
Дата: 31.05.05
).

Или проблема была в том, чтобы задание на русский перевести?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: XML на С++
От: stace  
Дата: 01.06.05 11:13
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, stace, Вы писали:


S>>Привет всем, я очень извиняюсь, с программированием знаком на уровне новичка, но все же. В институте задали ужас какой то.


E>См. так же: НУЖНО СРОЧНО
Автор: Sebastian20052005
Дата: 01.06.05
(оно же ПРОСТЕНЬКАЯ ПРОГА) и Помогите плиз разобраться с заданием.
Автор: vim
Дата: 31.05.05
(особенно ответ: Re: Помогите плиз разобраться с заданием.
Автор:
Дата: 31.05.05
).


Или проблема была в том, чтобы задание на русский перевести?



проблема в том что не знаю как реализовать считывания из простого файла и реализация в xml
Re[3]: XML на С++
От: Aviator  
Дата: 01.06.05 11:40
Оценка:
Здравствуйте, stace, Вы писали:

S>проблема в том что не знаю как реализовать считывания из простого файла и реализация в xml


вот неплохой класс для работы с XML
здесь

а вот ещё один — правда им не пользовался
здесь
Re[3]: XML на С++
От: sch  
Дата: 01.06.05 11:43
Оценка:
On Wed, 01 Jun 2005 15:13:05 +0400, stace <42354@users.rsdn.ru> wrote:

> Здравствуйте, eao197, Вы писали:

>
> E>Здравствуйте, stace, Вы писали:
>
> S>>Привет всем, я очень извиняюсь, с программированием знаком на уровне
> новичка, но все же. В институте задали ужас какой то.
>
> E>См. так же: НУЖНО <br />
<span class='lineQuote level1'>&gt; СРОЧНО</span>
Автор: Sebastian20052005
Дата: 01.06.05
(оно же

> ПРОСТЕНЬКАЯ <br />
<span class='lineQuote level1'>&gt; ПРОГА</span>
) и

> Помогите плиз <br />
<span class='lineQuote level1'>&gt; разобраться с заданием.</span>
Автор: vim
Дата: 31.05.05
(особенно ответ:

> Re: Помогите <br />
<span class='lineQuote level1'>&gt; плиз разобраться с заданием.</span>
Автор:
Дата: 31.05.05
).

>
> Или проблема была в том, чтобы задание на русский перевести?
>
>
>
> проблема в том что не знаю как реализовать считывания из простого файла
> и реализация в xml


чтение простого файла -- см std::fstream и fopen(), fread() и прочее.
загрузка\чтение xml: http://sourceforge.net/projects/tinyxml/
Posted via RSDN NNTP Server 1.9
Re: XML на С++
От: Кодт Россия  
Дата: 01.06.05 11:54
Оценка: 21 (2) +1
Здравствуйте, stace, Вы писали:

S>Привет всем, я очень извиняюсь, с программированием знаком на уровне новичка, но все же. В институте задали ужас какой то. К сожалению текст на английском.


Если внимательно прочтёшь текст задания — то обнаружишь там ключ к ответу
Последовательно читая текст, ты можешь сказать: вот здесь такое форматирование, а вот здесь — этакое... И порождать соответствующий html.
Так что, есть 3 подзадачи:
— парсер (читающий входной текст, и выделяющий в нём тэги \b, \i, \color)
— интерпретатор (реагирующий на тэги и выдающий команды наружу)
— генератор (пишущий правильный html).

Спроектируем каждую из них.

Парсер
— читает файл посимвольно,
— когда встречает '\', то считает, что дальше идёт тэг (одно слово т.е. последовательность букв)
— в случае тэга \color проверяет, нет ли далее '=', и если есть — считывает "rgb(N,N,N)"
— извещает интерпретатора о встреченных тэгах.
Для простоты, предположим, что интерпретатор имеет интерфейс к парсеру
struct ParserEvents
{
  virtual void on_begin() = 0;
  virtual void on_text(string text) = 0;
  virtual void on_bold() = 0;
  virtual void on_italic() = 0;
  virtual void on_color(int r, int g, int b) = 0;
  virtual void on_color_off() = 0;
  virtual void on_end() = 0;
};


Интерпретатор
Состояние интерпретатора — это флаги bold, italic и стек цветов (поскольку могут встретиться "\color=rgb1 \color=rgb2 \color \color").
Поскольку допускается, что области действия тэгов могут пересекаться — то можно
— или придумать навороты с отслеживанием стека html-тэгов (ввести стек тэгов, разматывать-наматывать его...)
— или жёстко постулировать, что всего есть 3 уровня форматирования: жирность, курсив, цвет. И на выходе не будет никакой вложенности сверх этого.

Как бы, у нас есть только три вида скобок (жирные, курсивные, цветные), и можно вкладывать курсив в цвет, но не цвет в курсив...
Но воспользуемся тем, что одно и то же форматирование можно записывать разными html-последовательностями.

То есть, "aaa \i bbb \color=111 ccc"
мы заменим на "aaa <i> bbb </i><font color=#111><i> ccc".

А если идут подряд "aaa \color=111 bbb \color=222 ccc \color ddd \color eee",
то напишем "aaa <font color=#111> bbb </font><font color=#222> ccc </font><font color=#111> ddd </font> eee"
(при этом обрати внимание: внутри интерпретатора мы завели стек цветов, но html получилися одноуровневым).

Ну и в начале файла нужно записать шапку "<html><body>", а по окончании файла нужно закрыть все тэги и записать концовку "</body></html>".

В общем-то, механика несложная. Попробуй смоделировать на бумажке.

Генератор
На генератора можно возложить примитивные операции, чтобы не тащить все строковые литералы и форматирование в интерпретатор:
struct Generator
{
  void header();
  void footer();
  void text();
  void bold_on();
  void bold_off();
  void italic_on();
  void italic_off();
  void color_on(int r, int g, int b);
  void color_off();
};

Генератор, помимо прочего, может изящно оформить html, сделав табуляцию и т.д. А может и не брать на себя такую инициативу.
Перекуём баги на фичи!
Re[2]: XML на С++
От: stace  
Дата: 01.06.05 13:41
Оценка: :))
Здравствуйте, Кодт


НУ спасибо ты просто мозг

слушай я конечно оффтоплю, но можно с тобой как нибудь связаться?
вот моя аська 168211979

хотелось бы побеседовать с тобой.
Буду очень признателен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.