root/tlate/var.cc

Revision 28939ac15506b95f59142a06b7d6794a801f8198, 1.7 KB (checked in by Antti-Juhani Kaijanaho <antti-juhani@…>, 21 months ago)

Allow templates access to literal special characters

The variable "_" refers by default now to a structured value having
the following members:

  • hash containing "#"
  • dollar containing "$"
  • obrace containing "{"
  • cbrace containing "}"

So, for example, $_.dollar$ in a template will, in general, expand to
the dollar sign.

Closes #75.

Signed-off-by: Antti-Juhani Kaijanaho <antti-juhani@…>

  • Property mode set to 100644
Line 
1/*  This file is part of Alue, the multiprotocol Internet discussion daemon
2
3    Copyright © 2009, 2010 Antti-Juhani Kaijanaho
4
5    Alue is free software: you can redistribute it and/or modify it
6    under the terms of the GNU General Public License as published by
7    the Free Software Foundation, either version 3 of the License, or
8    (at your option) any later version.
9
10    Alue is distributed in the hope that it will be useful, but
11    WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with Alue.  If not, see <http://www.gnu.org/licenses/>.
17
18 */
19
20#include "std_value.hh"
21#include "var.hh"
22
23#include "../logger/logline.hh"
24
25namespace tlate
26{
27        bool var::is_value_missing(overriding_structured_value::ptr env) {
28                value::const_ptr rv = env->get(name);
29                return !rv || rv->is_missing();
30        }
31        value::const_ptr var::eval_(overriding_structured_value::ptr env) {
32                value::const_ptr rv = env->get(name);
33                if (!rv || rv->is_missing())
34                {
35                        if (name == "_")
36                                rv = std_value::singleton;
37                        else
38                        {
39                                logger::logline ll;
40                                ll << pos()
41                                   << ": access of a missing variable '"
42                                   << name << "'";
43                        }
44                }
45                return rv;
46        }
47
48}
Note: See TracBrowser for help on using the browser.