TemplateStream.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * TemplateStream.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "DataSourceStream.h"
14 #include "WHashMap.h"
15 #include "WString.h"
16 
17 #ifndef TEMPLATE_MAX_VAR_NAME_LEN
18 
22 #define TEMPLATE_MAX_VAR_NAME_LEN 32
23 #endif
24 
33 {
34 public:
37 
42  TemplateStream(IDataSourceStream* stream, bool owned = true)
43  : stream(stream), streamOwned(owned), doubleBraces(false)
44 
45  {
46  reset();
47  }
48 
50  {
51  if(streamOwned) {
52  delete stream;
53  }
54  }
55 
56  StreamType getStreamType() const override
57  {
58  return stream ? eSST_Template : eSST_Invalid;
59  }
60 
61  uint16_t readMemoryBlock(char* data, int bufSize) override;
62 
63  int seekFrom(int offset, SeekOrigin origin) override;
64 
65  bool isFinished() override
66  {
67  return stream ? stream->isFinished() : true;
68  }
69 
75  void setVar(const String& name, const String& value)
76  {
77  templateData[name] = value;
78  }
79 
83  void setVars(const Variables& vars)
84  {
85  templateData.setMultiple(vars);
86  }
87 
92  {
93  return templateData;
94  }
95 
96  String getName() const override
97  {
98  return stream ? stream->getName() : nullptr;
99  }
100 
106  {
107  getValueCallback = callback;
108  }
109 
114  void enableOutput(bool enable)
115  {
116  enableNextState = enable;
117  }
118 
119  bool isOutputEnabled() const
120  {
121  return outputEnabled;
122  }
123 
128  void setDoubleBraces(bool enable)
129  {
130  doubleBraces = enable;
131  }
132 
133  virtual String evaluate(char*& expr);
134 
140  virtual String getValue(const char* name);
141 
142 private:
143  void reset()
144  {
145  value = nullptr;
146  streamPos = 0;
147  valuePos = 0;
148  valueWaitSize = 0;
149  tagLength = 0;
150  sendingValue = false;
151  outputEnabled = true;
152  enableNextState = true;
153  }
154 
155  IDataSourceStream* stream;
156  Variables templateData;
157  GetValueDelegate getValueCallback;
158  String value;
159  uint32_t streamPos;
160  uint16_t valuePos;
161  uint16_t valueWaitSize;
162  uint8_t tagLength;
163  bool streamOwned : 1;
164  bool sendingValue : 1;
165  bool outputEnabled : 1;
166  bool enableNextState : 1;
167  bool doubleBraces : 1;
168 };
169 
void setDoubleBraces(bool enable)
Use two braces {{X}} to mark tags.
Definition: TemplateStream.h:128
void onGetValue(GetValueDelegate callback)
Set a callback to obtain variable values.
Definition: TemplateStream.h:105
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
StreamType getStreamType() const override
Get the stream type.
Definition: TemplateStream.h:56
Base class for read-only stream.
Definition: DataSourceStream.h:40
~TemplateStream()
Definition: TemplateStream.h:49
String getName() const override
Returns name of the resource.
Definition: TemplateStream.h:96
virtual String evaluate(char *&expr)
virtual bool isFinished()=0
Check if all data has been read.
void setVars(const Variables &vars)
Set multiple variables in the template file.
Definition: TemplateStream.h:83
bool isFinished() override
Check if all data has been read.
Definition: TemplateStream.h:65
The String class.
Definition: WString.h:136
virtual String getValue(const char *name)
Fetch a templated value.
void enableOutput(bool enable)
During processing applications may suppress output of certain sections by calling this method from wi...
Definition: TemplateStream.h:114
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
Stream which performs variable-value substitution on-the-fly.
Definition: TemplateStream.h:32
bool isOutputEnabled() const
Definition: TemplateStream.h:119
StreamType
Data stream type.
Definition: DataSourceStream.h:26
virtual String getName() const
Returns name of the resource.
Definition: DataSourceStream.h:160
int seekFrom(int offset, SeekOrigin origin) override
Change position in stream.
Template data stream.
Definition: DataSourceStream.h:30
Stream content not valid.
Definition: DataSourceStream.h:27
TemplateStream::Variables TemplateVariables
Definition: TemplateStream.h:173
Variables & variables()
Get the template variables.
Definition: TemplateStream.h:91
void setMultiple(const HashMap< K, V > &map)
Definition: WHashMap.h:441
TemplateStream(IDataSourceStream *stream, bool owned=true)
Create a template stream.
Definition: TemplateStream.h:42
void setVar(const String &name, const String &value)
Set value of a variable in the template file.
Definition: TemplateStream.h:75