1
2 #include <iostream>
3 #include <sstream>
4
5 #include "data.hpp"
6
7 #include "lambdas.hpp"
8
add_lambda(mustache::Lambda * lambda,mustache::Data * data)9 static void add_lambda(mustache::Lambda * lambda, mustache::Data * data)
10 {
11 mustache::Data * child = new mustache::Data();
12 child->type = mustache::Data::TypeLambda;
13 child->lambda = lambda;
14 if( data->type == mustache::Data::TypeMap ) {
15 data->data.erase("lambda");
16 data->data.insert(std::pair<std::string,mustache::Data *>("lambda", child));
17 } else {
18 std::cerr << "Root data was not a map!" << std::endl;
19 delete child;
20 }
21 }
22
load_lambdas_into_test_data(mustache::Data * data,std::string name)23 void load_lambdas_into_test_data(mustache::Data * data, std::string name)
24 {
25 if( name.compare("Interpolation") == 0 ) {
26 add_lambda(new StaticLambda("world"), data);
27 } else if( name.compare("Interpolation - Expansion") == 0 ) {
28 add_lambda(new StaticLambda("{{planet}}"), data);
29 } else if( name.compare("Interpolation - Alternate Delimiters") == 0 ) {
30 add_lambda(new StaticLambda("|planet| => {{planet}}"), data);
31 } else if( name.compare("Interpolation - Multiple Calls") == 0 ) {
32 add_lambda(new MultipleCallsLambda(), data);
33 } else if( name.compare("Escaping") == 0 ) {
34 add_lambda(new StaticLambda(">"), data);
35 } else if( name.compare("Section") == 0 ) {
36 add_lambda(new SectionLambda(), data);
37 } else if( name.compare("Section - Expansion") == 0 ) {
38 add_lambda(new SectionExpansionLambda(), data);
39 } else if( name.compare("Section - Alternate Delimiters") == 0 ) {
40 add_lambda(new SectionAlternateDelimitersLambda(), data);
41 } else if( name.compare("Section - Multiple Calls") == 0 ) {
42 add_lambda(new SectionMultipleCallsLambda(), data);
43 } else if( name.compare("Inverted Section") == 0 ) {
44 add_lambda(new StaticLambda(""), data);
45 }
46 }
47
48
49
invoke()50 std::string MultipleCallsLambda::invoke() {
51 std::ostringstream st;
52 st << std::dec << ++this->counter;
53 return st.str();
54 }
55
invoke(std::string * text,mustache::Renderer * renderer)56 std::string MultipleCallsLambda::invoke(std::string * text, mustache::Renderer * renderer) {
57 return invoke();
58 }
59
60
61
invoke()62 std::string SectionLambda::invoke() {
63 throw new mustache::Exception("This is a section lambda");
64 }
65
invoke(std::string * text,mustache::Renderer * renderer)66 std::string SectionLambda::invoke(std::string * text, mustache::Renderer * renderer) {
67 if( text->compare("{{x}}") == 0 ) {
68 return "yes";
69 } else {
70 return "no";
71 }
72 }
73
74
75
76
invoke()77 std::string SectionExpansionLambda::invoke() {
78 throw new mustache::Exception("This is a section lambda");
79 }
80
invoke(std::string * text,mustache::Renderer * renderer)81 std::string SectionExpansionLambda::invoke(std::string * text, mustache::Renderer * renderer) {
82 std::ostringstream st;
83 st << *text << "{{planet}}" << *text;
84 return st.str();
85 }
86
87
88
89
invoke()90 std::string SectionAlternateDelimitersLambda::invoke() {
91 throw new mustache::Exception("This is a section lambda");
92 }
93
invoke(std::string * text,mustache::Renderer * renderer)94 std::string SectionAlternateDelimitersLambda::invoke(std::string * text, mustache::Renderer * renderer) {
95 std::ostringstream st;
96 st << *text << "{{planet}} => |planet|" << *text;
97 return st.str();
98 }
99
100
101
102
invoke()103 std::string SectionMultipleCallsLambda::invoke() {
104 throw new mustache::Exception("This is a section lambda");
105 }
106
invoke(std::string * text,mustache::Renderer * renderer)107 std::string SectionMultipleCallsLambda::invoke(std::string * text, mustache::Renderer * renderer) {
108 std::ostringstream st;
109 st << "__";
110 st << *text;
111 st << "__";
112 return st.str();
113 }
114
115