]> git.lyx.org Git - lyx.git/blob - src/Variables.C
split LyXText::rowlist_ into individual Paragraph::rows_ chunks
[lyx.git] / src / Variables.C
1 /* This file is part of
2 * ======================================================
3 *
4 *           LyX, The Document Processor
5 *
6 *           Copyright 1995 Matthias Ettrich
7 *           Copyright 1995-2001 the LyX Team.
8 *
9 * ====================================================== */
10
11 #include <config.h>
12
13 #include "Variables.h"
14 #include "support/LRegex.h"
15
16
17 void Variables::set(string const & var, string const & val)
18 {
19         // We want to use const_iterator (Lgb)
20         Vars::iterator cit = vars_.find(var);
21         if (cit != vars_.end())
22                 vars_.erase(var);
23         vars_[var] = val;;
24 }
25
26
27 string const Variables::get(string const & var) const
28 {
29         Vars::const_iterator cit = vars_.find(var);
30         if (cit != vars_.end())
31                 return cit->second;
32         else
33                 return string();
34 }
35
36
37 bool Variables::isSet(string const & var) const
38 {
39         Vars::const_iterator cit = vars_.find(var);
40         return (cit != vars_.end());
41 }
42
43
44 string const Variables::expand(string const & s) const
45 {
46         string str(s);
47         LRegex reg("\\$\\{\\(.*\\)\\}");
48
49         if (!reg.exact_match(str))
50                 return str;
51
52         LRegex::MatchPair match;
53         string var;
54
55         do {
56                 match = reg.first_match(str);
57                 var = str.substr(match.first,match.second);
58                 // we correct the match to take ${} in account.
59                 str.replace(match.first - 2, match.second + 3, get(var));
60         } while (reg.exact_match(str));
61
62         return str;
63 }
64
65 #ifdef TEST
66
67 #include <iostream>
68 using std::endl;
69 using std::cout;
70
71 int main() {
72         Variables vars;
73         vars.set("x", "hello");
74         vars.set("y", "world");
75         cout << vars.expand("${x}") << endl;
76 }
77
78 #endif