Каков наилучший способ создания вывода HTML на С++?

Возможный дубликат:
C++ Структура шаблонов HTML, библиотека шаблонов, библиотека генератора HTML

У меня есть программа, которая содержит много таблиц, поэтому я хочу отслеживать их в файлах журнала при отладке программы. Мне нужен цветной форматированный вывод, поэтому я подумал, что написал его в формате HTML. Итак, как лучше всего создавать HTML-файлы на C++?

Тривиальный способ настолько отвратительный и подвержен ошибкам:

std::stringstream ret;
ret << "<TABLE BORDER=\"1\" CELLBORDER=\"0\">\n";
ret << "    <TR>\n";
...

Поэтому я подумал, что написал оболочку HTML, но я думаю, что по этой причине их так много.

Мне нужна статически типизированная HTML-оболочка на C++ с таким или подобным синтаксисом:

CHtmlHtml Html;
Html <<
    Body() % Id("1")
        << H1("My First Heading") <<
        << P("My first paragraph.");

или в этом случае

CHtmlTable table;
table % Border(1) % CellBorder(0) <<
    Tr() <<
        Td("Text") % Colspan(4);

Есть ли подобный проект?


person Industrial-antidepressant    schedule 02.01.2012    source источник
comment
@tzaman: я хочу оболочку HTML со статическим типом, а не на основе шаблона   -  person Industrial-antidepressant    schedule 02.01.2012
comment
Мне неясны ваши требования, которые исключают шаблоны, но ответ tzaman дал список целой кучи полезных решений для C++, некоторые из которых вообще не являются шаблонами.   -  person casualcoder    schedule 02.01.2012
comment
Я проверил предложенную ссылку и не увидел ничего даже близкого к тому, о чем говорит Индустриал-антидепрессант. Практически все они взяты из шаблонов HTML/XML.   -  person Alexis Wilke    schedule 02.01.2012
comment
@AlexisWilke Мои извинения - я думал, что он имел в виду шаблоны C ++. Упс.   -  person casualcoder    schedule 02.01.2012
comment
Пожалуйста, снова откройте, мне не нужна структура HTML, библиотека шаблонов или библиотека генератора HTML. Я хочу доменный язык для HTML. Поэтому я хочу компилировать ошибки времени, когда что-то не так.   -  person Industrial-antidepressant    schedule 03.01.2012
comment
Кто закрыл этот вопрос, используя мое имя как одного из тех, кто сказал, что его нужно закрыть?! Я сказал ПРОТИВОПОЛОЖНОЕ. Это НЕ то же самое, и другой ответ НЕ ПРИМЕНЯЕТСЯ.   -  person Alexis Wilke    schedule 03.01.2012


Ответы (1)


HTML и XML используют один и тот же синтаксис, поэтому вы можете просто использовать XML-библиотеку C++ (например, TinyXML) для динамического создания всех необходимых вам узлов.

На этой странице показано, как использовать TinyXML для создания документов XML (или, в вашем случае, HTML).

Возможно, вам придется немного повозиться (например, удалить объявление XML в верхней части сгенерированного файла), но я думаю, вы могли бы легко создать для него оболочку.

person berserkguard    schedule 02.01.2012
comment
да, я могу использовать XML в качестве базы для своей обертки, но я вообще не хотел писать обертку. :) Но похоже этой библиотеки-обертки не существует, так что напишу... - person Industrial-antidepressant; 03.01.2012
comment
github.com/leethomason/tinyxml2 - person Andrew; 01.10.2020