Базовый класс форматирования вывода секций и параметров. Определяет несколько абстрактных методов, используемых для вывода конфигураций: open_section(), close_section(), put_element(). Определяя эти методы можно реализовать свой стиль форматирования.
Для сохранения секции в поток вывода используется метод print().
typedef Str String [protected] |
typedef String::traits_type Traits [protected] |
typedef Traits::char_type Char [protected] |
WriterT | ( | ) | [inline] |
Параметры по умолчанию.
Устанавливает параметры по умолчанию: 2 пробела на отступ. Двойные кавычки. Значения всегда в кавычках.
Вывести конфигурацию в поток вывода.
Метод выполняет перечисление дочерних секций и параметров и вызывает для них методы open_section(), close_section() и put_element() соответственно. Порядок секций и параметров соответствует прочитанному из файла при разборе или задаваемому при создании секции. Т.е. в общем случае дочерние секции могут чередоваться с дочерними параметрами.
Для дочерних секций метод вызывается рекурсивно.
Может генерировать исключение, например, если, параметр не имеет имени.
[in,out] | os | Поток вывода |
[in] | section | Секция конфигурации |
omni::config::WritingFailureT | если какие-либо секция или параметр не соответствуют требованиям форматирования |
virtual void open_section | ( | OStream & | os, | |
const Section & | section | |||
) | const [inline, protected, virtual] |
Начало секции.
Метод выводит префиксный комментарий (если не пустой), имя секции и её значение (если не пустое).
# prefix comment # prefix comment continue <section_name = section_value>
Если секция является главной и флаг rootName не установлен, то имя секции не будет выводиться, как и комментарий.
Также, если установлено выравнивание дочерних элементов, то определяется максимальная ширина поля.
[in,out] | os | Поток вывода |
[in] | section | Секция конфигурации |
omni::config::WritingFailureT | Если нет имени секции |
virtual void close_section | ( | OStream & | os, | |
const Section & | section | |||
) | const [inline, protected, virtual] |
Окончание секции.
Метод выводит завершение секции и постфиксный комментарий (если не пустой).
</section_name> # suffix comment
# suffix comment continue
[in,out] | os | Поток вывода |
[in] | section | Секция конфигурации |
omni::config::WritingFailureT | Если нет имени секции |
virtual void put_element | ( | OStream & | os, | |
const Element & | element | |||
) | const [inline, protected, virtual] |
Параметр.
Метод выводит параметр element в поток вывода os. Выводится префиксный комментарий (если не пустой), имя параметра, знак равно и значение параметра (если не пустое), постфиксный комментарий (если не пустой).
# prefix comment # prefix comment continue element_name = element_value # suffix comment # suffix comment continue
[in,out] | os | Поток вывода |
[in] | element | Параметр конфигурации |
omni::config::WritingFailureT | Если нет имени параметра |
static void put_comment_block | ( | OStream & | os, | |
const String & | comment, | |||
const String & | indent, | |||
bool | skip_first_indent | |||
) | [inline, static, protected] |
Вывести блок комментариев.
Метод перед каждой строкой добавляет отступ и символ '#'. Если установлен флаг skip_first_indent, то отступ перед первой строкой не добавляется. Это позволяет выводить суффиксные комментарии.
....# prefix first line ....# prefix second line ....< XXX > ....</ XXX > # suffix first line .............# suffix second line
Блок комментариев comment может содержать несколько строк, разделённых символом перевода строки.
[in,out] | os | Поток вывода |
[in] | comment | Блок комментариев |
[in] | indent | Текущий отступ |
[in] | skip_first_indent | Не выводит отступ для первой строки |
static bool need_quote | ( | const String & | text | ) | [inline, static, protected] |
Получить строку в кавычках.
Метод позволяет преобразовать строку text в строку в кавычках. Если флаг alwaysQuoted не установлен, и исходная строка не содержит служебных символов, то кавычки не добавляются.
[in] | text | Исходная строка |
static void put_qstring | ( | OStream & | os, | |
const String & | str, | |||
Char | quote | |||
) | [inline, static, protected] |
Записать строку в кавычках в поток вывода.
Метод пишет строку str в кавычках в поток вывода os. Если внутри строки встречаются кавычки, то они дублируются.
[in,out] | os | Поток вывода |
[in] | str | Строка для записи |
[in] | quote | Символ кавычки ('\"' или '\'') |
static bool is_root | ( | const Section & | section | ) | [inline, static, protected] |
Главная секция?
Метод проверяет является ли секция section главной, т.е. у неё нет родительской секции.
[in] | section | Секция конфигурации |
static bool is_front | ( | const Section & | section | ) | [inline, static, protected] |
Первая секция?
Метод проверяет является ли секция section первой в списке её родительской секции.
[in] | section | Секция конфигурации |
static bool is_back | ( | const Section & | section | ) | [inline, static, protected] |
Последняя секция?
Метод проверяет является ли секция section последней в списке её родительской секции.
[in] | section | Секция конфигурации |
size_t indent [mutable] |
Текущий размер отступа.
size_t tabSize |
Количество пробелов в одном отступе.
bool rootName |
bool newLine |
bool doubleQuote |