]> git.llucax.com Git - software/bife/bife++.git/blob - hit.cpp
Added an initial experimental implementation of BIFE in C++.
[software/bife/bife++.git] / hit.cpp
1 // vim: set expandtab tabstop=4 shiftwidth=4:
2
3 #include "hit.h"
4
5 #ifdef DEBUG
6 #include <iostream>
7 #endif
8
9 string HIT::getFileName(string blockname) {
10     return string(root + '/' + blockname + postfix);
11 }
12
13 string HIT::getFileContent(string filename) {
14     stringbuf buff;
15     ifstream in(filename.c_str());
16     // FIXME - Verificar apertura.
17     if (!in) {
18 #ifdef DEBUG
19         cerr << "Can't read template file '" << filename << "'." << endl;
20 #endif
21         return buff.str();
22     }
23     while (in.get(buff)) {
24         in.ignore();
25     }
26     in.close();
27     return buff.str();
28 }
29
30 HIT::HIT(string root, string postfix): root(root), postfix(postfix) {}
31
32 string HIT::parse(string blockname, Hash& vars) {
33     string content = getFileContent(getFileName(blockname));
34     for (Hash::iterator i = vars.begin(); i != vars.end(); i++) {
35         string key = "{" + i->first +  "}";
36         int pos = -1;
37         while ((pos = content.find(key)) != -1) {
38 #ifdef DEBUG
39             cout << "Founded at pos " << pos << ", key '" << key << "' (len: "
40                 << key.length() << "). Will be replaced with '" << i->second
41                 << "'" << endl;
42 #endif
43             content.replace(pos, key.length(), i->second);
44 #ifdef DEBUG
45             cout << "New content: " << content << endl << endl << endl;
46 #endif
47         }
48     }
49     return content;
50 }
51