2 * Copyright 2001-2007 Internet2
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @file xmltooling/util/TemplateEngine.h
20 * Simple template replacement engine.
23 #ifndef __xmltooling_template_h__
24 #define __xmltooling_template_h__
26 #include <xmltooling/io/GenericRequest.h>
32 #if defined (_MSC_VER)
33 #pragma warning( push )
34 #pragma warning( disable : 4251 )
37 namespace xmltooling {
40 * Simple template replacement engine. Supports the following:
42 * <li> <mlp key/> </li>
43 * <li> <mlpif key> stuff </mlpif></li>
44 * <li> <mlpifnot key> stuff </mlpifnot></li>
47 * The default tag prefix is "mlp". This can be overridden for
50 class XMLTOOL_API TemplateEngine
52 MAKE_NONCOPYABLE(TemplateEngine);
59 virtual ~TemplateEngine() {}
62 * Sets the tag name to use when locating template replacement tags.
64 * @param tagPrefix base prefix for tags
66 void setTagPrefix(const char* tagPrefix);
69 * Interface to parameters to plug into templates.
70 * Allows callers to supply a more dynamic lookup mechanism to supplement a basic map.
72 class XMLTOOL_API TemplateParameters {
73 MAKE_NONCOPYABLE(TemplateParameters);
75 TemplateParameters() : m_request(NULL) {}
76 virtual ~TemplateParameters() {}
78 /** Map of known parameters to supply to template. */
79 std::map<std::string,std::string> m_map;
81 /** Request from client that resulted in template being processed. */
82 const GenericRequest* m_request;
85 * Returns the value of a parameter to plug into the template.
87 * @param name name of parameter
88 * @return value of parameter, or NULL
90 virtual const char* getParameter(const char* name) const {
91 std::map<std::string,std::string>::const_iterator i=m_map.find(name);
92 return (i!=m_map.end() ? i->second.c_str() : (m_request ? m_request->getParameter(name) : NULL));
97 * Processes template from an input stream and executes replacements and
98 * conditional logic based on parameters.
100 * @param is input stream providing template
101 * @param os output stream to send results of executing template
102 * @param parameters parameters to plug into template
103 * @param e optional exception to extract parameters from
108 const TemplateParameters& parameters,
109 const XMLToolingException* e=NULL
113 void trimspace(std::string& s) const;
114 void html_encode(std::ostream& os, const char* start) const;
117 const std::string& buf,
118 const char*& lastpos,
120 const TemplateParameters& parameters,
121 const XMLToolingException* e
124 std::string keytag,iftag,ifendtag,ifnottag,ifnotendtag;
128 #if defined (_MSC_VER)
129 #pragma warning( pop )
132 #endif /* __xmltooling_template_h__ */