Пример кода


Здесь мы рассмотрим наиболее сложный пример из поставляемых вместе с библиотекой шаблонизатора. Имя файла примера: test_3_1.cpp.
Все остальные примеры находятся в каталоге tests.

Исходный текст программы:

// C++ Includes
#include <iostream>
// Local Includes
#include <ctpp/ctpp.hpp>

int main(void)
{
    using namespace template_parser_ns;
    using namespace std;

    // Создаем структуру данных
    param_data * pData = new param_data(param_data::HASH);
    // Вставляем глобальный параметр
    pData -> hash_insert_new_var("global_param", "Global Parameter");

    // Вставляем цикл
    param_data * pArray = pData -> hash_insert_new_array("EMPLOYEE_INFO");

    // Внутри цикла - хеш с параметрами
    param_data * pHash = pArray -> array_insert_new_hash();
    // Параметр "NAME"
    pHash -> hash_insert_new_var("NAME", "Иванов Иван");
    // Параметр "JOB"
    pHash -> hash_insert_new_var("JOB", "Архитектор");

    pHash = pArray -> array_insert_new_hash();
    pHash -> hash_insert_new_var("NAME", "Петров Петр");
    pHash -> hash_insert_new_var("JOB", "Строитель");
    // Подменяем глобальный параметр
    pHash -> hash_insert_new_var("global_param", "Replaced Parameter");

    try
    {
        // Шаблонизатор
        template_text oTemplate;

        // Загрузчик вложений
        loader_base * pLoaderBase = new loader_base();

        // Каталог для вложений
        v_include_dir vIncludeDir;
        vIncludeDir.push_back("./tmpl");
        oTemplate.set_include_dir(vIncludeDir);
        // Текст шаблона
        pLoaderBase -> load_file("./tmpl/3_1.tmpl");
        // Парзим шаблон
        oTemplate.parse(pLoaderBase -> get_data());
        // Накладываем параметры на шаблон
        oTemplate.param(pData);
        string sOutput;
        // Получаем результат
        sOutput.assign(oTemplate.output());
        cout << sOutput << endl;
    }
    catch(exception &e) { cout << e.what() << endl; exit(1); }
return 0;
}



Шаблон:

<TMPL_include header.tmpl>
<TMPL_var global_param>
<TMPL_loop __CONTEXT_VARS__ __GLOBAL_VARS__ EMPLOYEE_INFO>
    <TMPL_var NAME> - <TMPL_var JOB>
    <TMPL_var global_param>
    <TMPL_unless IN_SET(NAME, "Иванов Иван")>
        TEST_ANY_PARAM
    </TMPL_unless>
</TMPL_loop>
<TMPL_include footer.tmpl>


Параметры:

global_param => "Global Parameter"
EMPLOYEE_INFO
[
    { NAME => "Иванов Иван", JOB => "Архитектор" },
    {
NAME => "Петров Петр", JOB => "Строитель", global_param => "Replaced Parameter" }
]

Вывод:
<!-- Copyright (c) 2004 Andrei V. Shetuhin -->
<html>
<head>
    <title>Sample</title>
</head>
<body>
Global Parameter

    Иванов Иван - Архитектор
    Global Parameter


    Петров Петр - Строитель
    Replaced Parameter

        TEST_ANY_PARAM


</body>
</html>
<!-- Footer End -->

Сборка:


gcc -c test_3_1.cpp -I /usr/local/include/ctpp

Для динамической линковки:
gcc test_3_1.o -L /usr/local/lib -o test_3_1 -lctpp

Для статической сборки:
gcc -static test_3_1.o -L /usr/local/lib -o test_3_1 -lctpp -lstdc++


Copyright © 2003 - 2005 CTPP Dev. Team | http://reki.ru/products/ctpp