]> git.llucax.com Git - software/bife/bife++.git/blob - libbife/hit.cpp
- Normalized Fallback constructor to be the same of Widget (or Container).
[software/bife/bife++.git] / libbife / hit.cpp
1 // vim: set expandtab tabstop=4 shiftwidth=4:
2
3 #include "hit.h"
4 #include <fstream>
5 #include <sstream>
6
7 using std::ifstream;
8 using std::stringbuf;
9 using namespace bife;
10
11 #ifdef DEBUG
12 #include <iostream>
13 using std::cerr;
14 using std::endl;
15 #endif
16
17 HIT::HIT(const string& root, const string& postfix): root(root), postfix(postfix) {
18 #ifdef DEBUG
19     cerr << "In HIT::HIT(root = '" << root << "', postfix = '" << postfix << "')" << endl;
20 #endif
21 }
22
23 HIT::~HIT(void) {
24 #ifdef DEBUG
25     cerr << "In HIT destructor." << endl;
26 #endif
27 }
28
29 string HIT::getFileName(const string& blockname) {
30     return string(root + '/' + blockname + postfix);
31 }
32
33 string HIT::getFileContent(const string& filename) {
34     stringbuf buff;
35     ifstream in(filename.c_str());
36     // FIXME - Verificar apertura.
37     if (!in) {
38 #ifdef DEBUG
39         cerr << "Can't read template file '" << filename << "'." << endl;
40 #endif
41         return buff.str();
42     }
43     while (in.get(buff)) {
44         buff.sputc(in.get());
45     }
46     in.close();
47     return buff.str();
48 }
49
50 string HIT::parse(const string& blockname, Hash& vars) {
51     int pos;
52     string key;
53     string content = getFileContent(getFileName(blockname));
54     for (Hash::iterator i = vars.begin(); i != vars.end(); i++) {
55         key = "{" + i->first +  "}";
56         while ((pos = content.find(key)) != -1) {
57 #ifdef DEBUG2
58             cerr << "Founded at pos " << pos << ", key '" << key << "' (len: "
59                 << key.length() << "). Will be replaced with '" << i->second
60                 << "'" << endl;
61 #endif
62             content.replace(pos, key.length(), i->second);
63 #ifdef DEBUG2
64             cerr << "New content: " << content << endl << endl << endl;
65 #endif
66         }
67     }
68     return content;
69 }
70