Шаблоны текста с простейшим языком сценариев

Суть:
Есть шаблоны - которые нужно обработать и показать.
Также есть некие данные, которые нужно вставить в шаблон, подстановка в шаблоне $DATA$, означает что нужно вставить данные из ключа "DATA".

В шаблоне можно вставлять загрузку из другого шаблона, например $#next$ - будет сделана вставка текста из обработанного шаблона next.

И самое главное - есть сценарий загрузок.
Пример:
#uri_data uri E template check1
#uri_data uri N template check2

Первая строка - при загрузки шаблона uri_data, если в данные под ключом uri строково равны (E) значаению "template" то выполнить загрузку из шаблона check1
Вторая строка - если значение под ключом uri сроково не равно (N) - то загрузка будет из шаблона check2

Данные с ключами - это что-то типа того typedef map<string,string> map_as_hash; (хеш)

Допустим мы выполняем такой код:

map_as_hash h;

h["uri"] = "template";
h["NAME"] = "mainboss";

string str=preLoadTemplate("main",&h);

printf("%s\n",str.c_str());

main.pat
Hello world.
I'am $NAME$, hello!
$#data$

data.pat
This data, very main data

Condition, check $uri$

$#uri_data$

check1.pat
Check one, test passed

check2.pat
Check two, test passed

На выходе получим:
Hello world.
I'am mainboss, hello!

This data, very main data

Condition, check template

Check one, test passed

Исходный код тут.