Provides enhanced template tag processing for use with a SectionStream. More...

#include <SectionTemplate.h>

Inheritance diagram for SectionTemplate:
Collaboration diagram for SectionTemplate:

Public Types

enum class  Command { Qunknown = 0 , XX }
 
enum class  Field { unknown = 0 , XX }
 
using GetValue = Delegate< String(const char *name)>
 Application callback to process additional fields. More...
 
using NextRecord = SectionStream::NextRecord
 
- Public Types inherited from TemplateStream
using Variables = HashMap< String, String >
 Maps variable names to values. More...
 
using GetValueDelegate = Delegate< String(const char *name)>
 Callback type to return calculated or externally stored values. More...
 

Public Member Functions

 SectionTemplate (IDataSourceStream *source, uint8_t maxSections=5)
 
void onGetValue (GetValue callback)
 Set a callback to be invoked. More...
 
void setFormatter (Formatter &formatter)
 Associate a text format with this template stream. More...
 
Formatterformatter () const
 Get the stream format. More...
 
MimeType getMimeType () const override
 Get the MIME type associated with this template stream. More...
 
const SectionStreamstream () const
 Access the underlying section stream. More...
 
int sectionIndex () const
 Get the index for the current section. More...
 
uint8_t sectionCount () const
 Get number of sections in source stream. More...
 
int recordIndex () const
 Get current record index. More...
 
bool gotoSection (uint8_t index)
 Discard current output and change current section. More...
 
void onNextRecord (NextRecord callback)
 Set a callback to be invoked when a new record is required. More...
 
String evaluate (char *&expr) override
 Evaluate a template expression. More...
 
String getValue (const char *name) override
 Fetch a templated value. More...
 
- Public Member Functions inherited from TemplateStream
 TemplateStream (IDataSourceStream *stream, bool owned=true)
 Create a template stream. More...
 
 ~TemplateStream ()
 
StreamType getStreamType () const override
 Get the stream type. More...
 
uint16_t readMemoryBlock (char *data, int bufSize) override
 Read a block of memory. More...
 
int seekFrom (int offset, SeekOrigin origin) override
 Change position in stream. More...
 
bool isFinished () override
 Check if all data has been read. More...
 
void setVar (const String &name, const String &value)
 Set value of a variable in the template file. More...
 
void setVars (const Variables &vars)
 Set multiple variables in the template file. More...
 
Variablesvariables ()
 Get the template variables. More...
 
String getName () const override
 Returns name of the resource. More...
 
void onGetValue (GetValueDelegate callback)
 Set a callback to obtain variable values. More...
 
void enableOutput (bool enable)
 During processing applications may suppress output of certain sections by calling this method from within the getValue callback. More...
 
bool isOutputEnabled () const
 Determine if stream output is active. More...
 
void setDoubleBraces (bool enable)
 Use two braces {{X}} to mark tags. More...
 
String eval (String expr)
 Evaluate an expression in-situ. More...
 
- Public Member Functions inherited from IDataSourceStream
virtual bool isValid () const
 Determine if the stream object contains valid data. More...
 
size_t readBytes (char *buffer, size_t length) override
 Read chars from stream into buffer. More...
 
int read () override
 Read one character and moves the stream pointer. More...
 
int peek () override
 Read a character without advancing the stream pointer. More...
 
virtual bool seek (int len)
 Move read cursor. More...
 
virtual int available ()
 Return the total length of the stream. More...
 
size_t write (uint8_t charToWrite) override
 From Stream class: We don't write using this stream. More...
 
void flush () override
 
virtual String id () const
 Returns unique id of the resource. More...
 
String readString (size_t maxLen) override
 Overrides Stream method for more efficient reading. More...
 
virtual bool moveString (String &s)
 Memory-based streams may be able to move content into a String. More...
 
virtual size_t readBytes (char *buffer, size_t length)
 Read chars from stream into buffer. More...
 
size_t readBytes (uint8_t *buffer, size_t length)
 
- Public Member Functions inherited from Stream
 Stream ()
 
void setTimeout (unsigned long timeout)
 Set maximum milliseconds to wait for stream data, default is 1 second. More...
 
bool find (const char *target)
 Read data from the stream until the target string is found. More...
 
bool find (const char *target, size_t length)
 Read data from the stream until the target string of given length is found. More...
 
bool findUntil (const char *target, const char *terminator)
 As find() but search ends if the terminator string is found. More...
 
bool findUntil (const char *target, size_t targetLen, const char *terminate, size_t termLen)
 As findUntil(const char*, const char*) but search ends if the terminate string is found. More...
 
long parseInt ()
 Returns the first valid (long) integer value from the current position. More...
 
float parseFloat ()
 float version of parseInt More...
 
size_t readBytes (uint8_t *buffer, size_t length)
 
size_t readBytesUntil (char terminator, char *buffer, size_t length)
 As readBytes() with terminator character. More...
 
String readStringUntil (char terminator)
 
virtual int indexOf (char c)
 
- Public Member Functions inherited from Print
virtual ~Print ()
 
int getWriteError ()
 Gets last error. More...
 
void clearWriteError ()
 Clears the last write error. More...
 
size_t write (const char *str)
 Writes a c-string to output stream. More...
 
virtual size_t write (const uint8_t *buffer, size_t size)
 Writes characters from a buffer to output stream. More...
 
size_t write (const char *buffer, size_t size)
 Writes characters from a buffer to output stream. More...
 
size_t print (char c)
 Prints a single character to output stream. More...
 
size_t print (const char str[])
 Prints a c-string to output stream. More...
 
size_t print (double num, int digits=2)
 Print a floating-point number to output stream. More...
 
template<typename T >
std::enable_if< has_printTo< T >::value, size_t >::type print (const T &obj)
 Prints a Printable object to output stream. More...
 
size_t print (const String &s)
 Prints a String to output stream. More...
 
template<typename E >
std::enable_if< std::is_enum< E >::value &&!std::is_convertible< E, int >::value, size_t >::type print (E value)
 enums can be printed as strings provided they have a toString(E) implementation. More...
 
size_t println ()
 Prints a newline to output stream. More...
 
template<typename... Args>
size_t println (const Args &... args)
 Print value plus newline to output stream. More...
 
size_t printf (const char *fmt,...)
 Prints a formatted c-string to output stream. More...
 
size_t print (unsigned long num, uint8_t base=DEC)
 
template<typename... Args>
size_t print (unsigned long num, Args... args)
 
template<typename... Args>
size_t print (const unsigned long long &num, Args... args)
 
size_t print (long num, uint8_t base=DEC)
 
template<typename... Args>
size_t print (long num, Args... args)
 
template<typename... Args>
size_t print (const long long &num, Args... args)
 
template<typename... Args>
size_t print (unsigned int num, Args... args)
 
template<typename... Args>
size_t print (unsigned char num, Args... args)
 
template<typename... Args>
size_t print (int num, Args... args)
 

Protected Member Functions

virtual bool nextRecord ()
 Move to next record. More...
 
- Protected Member Functions inherited from Stream
int timedRead ()
 
int timedPeek ()
 
int peekNextDigit ()
 returns the next numeric digit in the stream or -1 if timeout More...
 
long parseInt (char skipChar)
 Like regular parseInt() but the given skipChar is ignored. More...
 
float parseFloat (char skipChar)
 Like parseInt(skipChar) for float. More...
 
- Protected Member Functions inherited from Print
void setWriteError (int err=1)
 

Additional Inherited Members

- Protected Attributes inherited from Stream
uint16_t receiveTimeout = 1000
 number of milliseconds to wait for the next char before aborting timed read More...
 

Detailed Description

Provides enhanced template tag processing for use with a SectionStream.

Member Typedef Documentation

◆ GetValue

using SectionTemplate::GetValue = Delegate<String(const char* name)>

Application callback to process additional fields.

Parameters
templateStream
nameField name, never null
Return values
StringThe field value
Note
Applications should call escape() if required before returning content.

◆ NextRecord

Member Enumeration Documentation

◆ Command

Enumerator
Qunknown 
XX 

◆ Field

Enumerator
unknown 
XX 

Constructor & Destructor Documentation

◆ SectionTemplate()

SectionTemplate::SectionTemplate ( IDataSourceStream source,
uint8_t  maxSections = 5 
)

Member Function Documentation

◆ evaluate()

String SectionTemplate::evaluate ( char *&  expr)
overridevirtual

Evaluate a template expression.

Parameters
exprIN: First character after the opening brace(s) OUT: First character after the closing brace(s)
Return values
StringCalled internally and an opening brace ("{" or "{{") has been found. Default behaviour is to locate the closing brace(s) and interpret the bounded text as a variable name, which is passed to getValue.

This method is overridden by SectionTemplate to support more complex expressions.

Reimplemented from TemplateStream.

◆ formatter()

Formatter& SectionTemplate::formatter ( ) const
inline

Get the stream format.

Return values
Formatter&The formatter in effect. Default is :cpp:class:Format::Standard.

◆ getMimeType()

MimeType SectionTemplate::getMimeType ( ) const
inlineoverridevirtual

Get the MIME type associated with this template stream.

Return values
MimeTypeAs defined by the formatter. Default is MIME_TEXT.

Reimplemented from IDataSourceStream.

◆ getValue()

String SectionTemplate::getValue ( const char *  name)
overridevirtual

Fetch a templated value.

Parameters
nameThe variable name
Return values
Stringvalue, invalid to emit tag unprocessed

Reimplemented from TemplateStream.

◆ gotoSection()

bool SectionTemplate::gotoSection ( uint8_t  index)

Discard current output and change current section.

Parameters
uint8_tIndex of section to move to
Return values
booltrue on success, false if section index invalid

◆ nextRecord()

virtual bool SectionTemplate::nextRecord ( )
inlineprotectedvirtual

Move to next record.

Return values
booltrue to emit section, false to skip

Reimplemented in IFS::DirectoryTemplate.

◆ onGetValue()

void SectionTemplate::onGetValue ( GetValue  callback)
inline

Set a callback to be invoked.

Alternative to subclassing.

◆ onNextRecord()

void SectionTemplate::onNextRecord ( NextRecord  callback)
inline

Set a callback to be invoked when a new record is required.

Can be used as alternative to subclassing.

◆ recordIndex()

int SectionTemplate::recordIndex ( ) const
inline

Get current record index.

Return values
intIndices are 0-based, returns -1 if 'Before Start'

◆ sectionCount()

uint8_t SectionTemplate::sectionCount ( ) const
inline

Get number of sections in source stream.

Return values
uint8_tSource is scanned in constructor so this is always valid

◆ sectionIndex()

int SectionTemplate::sectionIndex ( ) const
inline

Get the index for the current section.

Return values
intIndices are 0-based, returns -1 if 'Before Start'

◆ setFormatter()

void SectionTemplate::setFormatter ( Formatter formatter)
inline

Associate a text format with this template stream.

Parameters
formatterProvide formatter so we can call escape(), etc. as required

◆ stream()

const SectionStream& SectionTemplate::stream ( ) const
inline

Access the underlying section stream.

Return values
SectionStream&Wraps source stream provided in constructor

Provided for debugging and other purposes. Applications should not use this method.


The documentation for this class was generated from the following file: