mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-09-19 16:46:11 -04:00
+ version 0.1.03
+ refactored for smaller footprint + added support for more datatypes + extended example eketch
This commit is contained in:
parent
093fbf040e
commit
35b6713f81
@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// FILE: XMLWriter.cpp
|
// FILE: XMLWriter.cpp
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 0.1.02
|
// VERSION: 0.1.03
|
||||||
// DATE: 2013-11-06
|
// DATE: 2013-11-06
|
||||||
// PURPOSE: Simple XML library
|
// PURPOSE: Simple XML library
|
||||||
//
|
//
|
||||||
@ -9,6 +9,7 @@
|
|||||||
// 0.1.00 - 2013-11-06 initial version
|
// 0.1.00 - 2013-11-06 initial version
|
||||||
// 0.1.01 - 2013-11-07 rework interfaces
|
// 0.1.01 - 2013-11-07 rework interfaces
|
||||||
// 0.1.02 - 2013-11-07 +setIndentSize(), corrected history, +escape support
|
// 0.1.02 - 2013-11-07 +setIndentSize(), corrected history, +escape support
|
||||||
|
// 0.1.03 - 2015-03-07 refactored - footprint + interface
|
||||||
//
|
//
|
||||||
// Released to the public domain
|
// Released to the public domain
|
||||||
//
|
//
|
||||||
@ -36,19 +37,12 @@ void XMLWriter::header()
|
|||||||
void XMLWriter::comment(char* text, bool multiLine)
|
void XMLWriter::comment(char* text, bool multiLine)
|
||||||
{
|
{
|
||||||
_stream->println();
|
_stream->println();
|
||||||
if (multiLine)
|
if (!multiLine) spaces();
|
||||||
{
|
_stream->print("<!-- ");
|
||||||
_stream->println("<!-- ");
|
if (multiLine) _stream->println();
|
||||||
_stream->println(text);
|
_stream->print(text);
|
||||||
_stream->println(" -->");
|
if (multiLine) _stream->println();
|
||||||
}
|
_stream->println(" -->");
|
||||||
else
|
|
||||||
{
|
|
||||||
spaces();
|
|
||||||
_stream->print("<!-- ");
|
|
||||||
_stream->print(text);
|
|
||||||
_stream->println(" -->");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::tagOpen(char* tag, bool newline)
|
void XMLWriter::tagOpen(char* tag, bool newline)
|
||||||
@ -58,7 +52,7 @@ void XMLWriter::tagOpen(char* tag, bool newline)
|
|||||||
|
|
||||||
void XMLWriter::tagOpen(char* tag, char* name, bool newline)
|
void XMLWriter::tagOpen(char* tag, char* name, bool newline)
|
||||||
{
|
{
|
||||||
strncpy(tagNames[_idx++], tag, 10);
|
strncpy(tagStack[_idx++], tag, 10);
|
||||||
tagStart(tag);
|
tagStart(tag);
|
||||||
if (name[0] != 0) tagField("name", name);
|
if (name[0] != 0) tagField("name", name);
|
||||||
tagEnd(newline, NOSLASH);
|
tagEnd(newline, NOSLASH);
|
||||||
@ -70,44 +64,44 @@ void XMLWriter::tagClose(bool indent)
|
|||||||
_indent -= _indentStep;
|
_indent -= _indentStep;
|
||||||
if (indent) spaces();
|
if (indent) spaces();
|
||||||
_stream->print("</");
|
_stream->print("</");
|
||||||
_stream->print(tagNames[--_idx]);
|
_stream->print(tagStack[--_idx]);
|
||||||
_stream->println(">");
|
_stream->println(">");
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::tagStart(char *tag)
|
void XMLWriter::tagStart(char *tag)
|
||||||
{
|
{
|
||||||
spaces();
|
spaces();
|
||||||
_stream->write('<');
|
_stream->write("<");
|
||||||
_stream->print(tag);
|
_stream->print(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::tagField(char *field, char* value)
|
void XMLWriter::tagField(char *field, char* str)
|
||||||
{
|
{
|
||||||
_stream->write(' ');
|
_stream->write(" ");
|
||||||
_stream->print(field);
|
_stream->print(field);
|
||||||
_stream->print("=\"");
|
_stream->print("=\"");
|
||||||
#ifdef XMLWRITER_ESCAPE_SUPPORT
|
#ifdef XMLWRITER_ESCAPE_SUPPORT
|
||||||
escape(value);
|
escape(str);
|
||||||
#else
|
#else
|
||||||
_stream->print(value);
|
_stream->print(str);
|
||||||
#endif
|
#endif
|
||||||
_stream->print("\"");
|
_stream->print("\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::tagEnd(bool newline, bool addSlash)
|
void XMLWriter::tagEnd(bool newline, bool addSlash)
|
||||||
{
|
{
|
||||||
if (addSlash) _stream->write('/');
|
if (addSlash) _stream->write("/");
|
||||||
_stream->print('>');
|
_stream->print(">");
|
||||||
if (newline) _stream->println();
|
if (newline) _stream->println();
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::writeNode(char* tag, char* value)
|
void XMLWriter::writeNode(char* tag, char* str)
|
||||||
{
|
{
|
||||||
tagOpen(tag, "", NONEWLINE);
|
tagOpen(tag, "", NONEWLINE);
|
||||||
#ifdef XMLWRITER_ESCAPE_SUPPORT
|
#ifdef XMLWRITER_ESCAPE_SUPPORT
|
||||||
escape(value);
|
escape(str);
|
||||||
#else
|
#else
|
||||||
_stream->print(value);
|
_stream->print(str);
|
||||||
#endif
|
#endif
|
||||||
tagClose(NOINDENT);
|
tagClose(NOINDENT);
|
||||||
}
|
}
|
||||||
@ -118,44 +112,101 @@ void XMLWriter::setIndentSize(uint8_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XMLWRITER_EXTENDED
|
#ifdef XMLWRITER_EXTENDED
|
||||||
void XMLWriter::tagField(char *field, int value)
|
// void XMLWriter::tagField(char *field, uint8_t value, uint8_t base)
|
||||||
|
// {
|
||||||
|
// tagField(field, (uint32_t) value, base);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void XMLWriter::tagField(char *field, uint16_t value, uint8_t base)
|
||||||
|
// {
|
||||||
|
// tagField(field, (uint32_t) value, base);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void XMLWriter::tagField(char *field, uint32_t value, uint8_t base)
|
||||||
|
// {
|
||||||
|
// _stream->write(" ");
|
||||||
|
// _stream->print(field);
|
||||||
|
// _stream->print("=\"");
|
||||||
|
// _stream->print(value, base);
|
||||||
|
// _stream->print("\"");
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void XMLWriter::tagField(char *field, int8_t value, uint8_t base)
|
||||||
|
// {
|
||||||
|
// tagField(field, (long) value, base);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void XMLWriter::tagField(char *field, int16_t value, uint8_t base)
|
||||||
|
// {
|
||||||
|
// tagField(field, (long) value, base);
|
||||||
|
// }
|
||||||
|
|
||||||
|
void XMLWriter::tagField(char *field, int32_t value, uint8_t base)
|
||||||
{
|
{
|
||||||
_stream->write(' ');
|
_stream->write(" ");
|
||||||
_stream->print(field);
|
_stream->print(field);
|
||||||
_stream->print("=\"");
|
_stream->print("=\"");
|
||||||
_stream->print(value);
|
_stream->print(value, base);
|
||||||
_stream->print("\"");
|
_stream->print("\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::tagField(char *field, long value)
|
|
||||||
|
void XMLWriter::tagField(char *field, bool value)
|
||||||
{
|
{
|
||||||
_stream->write(' ');
|
_stream->write(" ");
|
||||||
_stream->print(field);
|
_stream->print(field);
|
||||||
_stream->print("=\"");
|
_stream->print("=\"");
|
||||||
_stream->print(value);
|
_stream->print(value?"true":"false");
|
||||||
_stream->print("\"");
|
_stream->print("\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::tagField(char *field, double value, uint8_t decimals)
|
void XMLWriter::tagField(char *field, double value, uint8_t decimals)
|
||||||
{
|
{
|
||||||
_stream->write(' ');
|
_stream->write(" ");
|
||||||
_stream->print(field);
|
_stream->print(field);
|
||||||
_stream->print("=\"");
|
_stream->print("=\"");
|
||||||
_stream->print(value);
|
_stream->print(value, decimals);
|
||||||
_stream->print("\"");
|
_stream->print("\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::writeNode(char* tag, int value)
|
void XMLWriter::writeNode(char* tag, uint8_t value, uint8_t base)
|
||||||
{
|
{
|
||||||
tagOpen(tag, "", NONEWLINE); // one line
|
writeNode(tag, (uint32_t) value, base);
|
||||||
_stream->print(value);
|
}
|
||||||
|
|
||||||
|
void XMLWriter::writeNode(char* tag, uint16_t value, uint8_t base)
|
||||||
|
{
|
||||||
|
writeNode(tag, (uint32_t) value, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XMLWriter::writeNode(char* tag, uint32_t value, uint8_t base)
|
||||||
|
{
|
||||||
|
tagOpen(tag, "", NONEWLINE);
|
||||||
|
_stream->print(value, base);
|
||||||
tagClose(NOINDENT);
|
tagClose(NOINDENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XMLWriter::writeNode(char* tag, long value)
|
void XMLWriter::writeNode(char* tag, int8_t value, uint8_t base)
|
||||||
|
{
|
||||||
|
writeNode(tag, (int32_t) value, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XMLWriter::writeNode(char* tag, int16_t value, uint8_t base)
|
||||||
|
{
|
||||||
|
writeNode(tag, (int32_t) value, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XMLWriter::writeNode(char* tag, int32_t value, uint8_t base)
|
||||||
{
|
{
|
||||||
tagOpen(tag, "", NONEWLINE);
|
tagOpen(tag, "", NONEWLINE);
|
||||||
_stream->print(value);
|
_stream->print(value, base);
|
||||||
|
tagClose(NOINDENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void XMLWriter::writeNode(char* tag, bool value)
|
||||||
|
{
|
||||||
|
tagOpen(tag, "", NONEWLINE);
|
||||||
|
_stream->print(value?"true":"false");
|
||||||
tagClose(NOINDENT);
|
tagClose(NOINDENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +222,7 @@ void XMLWriter::writeNode(char* tag, double value, uint8_t decimals)
|
|||||||
|
|
||||||
void XMLWriter::spaces()
|
void XMLWriter::spaces()
|
||||||
{
|
{
|
||||||
for (uint8_t i=_indent; i>0; i--) _stream->write(' ');
|
for (uint8_t i=_indent; i>0; i--) _stream->write(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XMLWRITER_ESCAPE_SUPPORT
|
#ifdef XMLWRITER_ESCAPE_SUPPORT
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
//
|
//
|
||||||
// FILE: XMLWriter.h
|
// FILE: XMLWriter.h
|
||||||
// AUTHOR: Rob Tillaart
|
// AUTHOR: Rob Tillaart
|
||||||
// VERSION: 0.1.02
|
// VERSION: 0.1.03
|
||||||
// DATE: 2013-11-06
|
// DATE: 2013-11-06
|
||||||
// PURPOSE: Simple XML writer library
|
// PURPOSE: Simple XML writer library
|
||||||
//
|
//
|
||||||
@ -11,24 +11,24 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
// TODO pre 1.0 support ?
|
// no pre 1.0 support!
|
||||||
|
|
||||||
#define XMLWRITER_VERSION "0.1.01"
|
#define XMLWRITER_VERSION "0.1.03"
|
||||||
|
|
||||||
// for comment()
|
// for comment()
|
||||||
#define MULTILINE true
|
#define MULTILINE true
|
||||||
|
|
||||||
// for tagOpen(), tagEnd()
|
// for tagOpen(), tagEnd()
|
||||||
#define NEWLINE true
|
#define NEWLINE true
|
||||||
#define NONEWLINE false
|
#define NONEWLINE false
|
||||||
#define NOINDENT false // for tagClose()
|
#define NOINDENT false // for tagClose()
|
||||||
|
|
||||||
// for tagEnd()
|
// for tagEnd()
|
||||||
#define SLASH true
|
#define SLASH true
|
||||||
#define NOSLASH false
|
#define NOSLASH false
|
||||||
|
|
||||||
// deepness of XML tree 5..10
|
// deepness of XML tree 5..10
|
||||||
// needed for stack of tagnames
|
// needed for stack of tagStack
|
||||||
#define XMLWRITER_MAXLEVEL 5
|
#define XMLWRITER_MAXLEVEL 5
|
||||||
|
|
||||||
// reduce footprint by not using all
|
// reduce footprint by not using all
|
||||||
@ -71,12 +71,22 @@ public:
|
|||||||
void setIndentSize(uint8_t size);
|
void setIndentSize(uint8_t size);
|
||||||
|
|
||||||
#ifdef XMLWRITER_EXTENDED
|
#ifdef XMLWRITER_EXTENDED
|
||||||
void tagField(char* field, int value);
|
void tagField(char* field, uint8_t value, uint8_t base=DEC);
|
||||||
void tagField(char* field, long value);
|
void tagField(char* field, uint16_t value, uint8_t base=DEC);
|
||||||
void tagField(char* field, double value, uint8_t decimals=2);
|
void tagField(char* field, uint32_t value, uint8_t base=DEC);
|
||||||
|
void tagField(char* field, int8_t value, uint8_t base=DEC);
|
||||||
|
void tagField(char* field, int16_t value, uint8_t base=DEC);
|
||||||
|
void tagField(char* field, int32_t value, uint8_t base=DEC);
|
||||||
|
void tagField(char *field, bool value);
|
||||||
|
void tagField(char* field, double value, uint8_t decimals=2);
|
||||||
|
|
||||||
void writeNode(char* tag, int value);
|
void writeNode(char* tag, uint8_t value, uint8_t base=DEC);
|
||||||
void writeNode(char* tag, long value);
|
void writeNode(char* tag, uint16_t value, uint8_t base=DEC);
|
||||||
|
void writeNode(char* tag, uint32_t value, uint8_t base=DEC);
|
||||||
|
void writeNode(char* tag, int8_t value, uint8_t base=DEC);
|
||||||
|
void writeNode(char* tag, int16_t value, uint8_t base=DEC);
|
||||||
|
void writeNode(char* tag, int32_t value, uint8_t base=DEC);
|
||||||
|
void writeNode(char* tag, bool value);
|
||||||
void writeNode(char* tag, double value, uint8_t decimals=2);
|
void writeNode(char* tag, double value, uint8_t decimals=2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -98,7 +108,7 @@ private:
|
|||||||
// stack - used to remember the current tagname to create
|
// stack - used to remember the current tagname to create
|
||||||
// automatic the right close tag.
|
// automatic the right close tag.
|
||||||
uint8_t _idx;
|
uint8_t _idx;
|
||||||
char tagNames[XMLWRITER_MAXLEVEL][11];
|
char tagStack[XMLWRITER_MAXLEVEL][11];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,7 +20,7 @@ void setup()
|
|||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
|
||||||
XML.header();
|
XML.header();
|
||||||
XML.comment("XMLWriterTest.ino\nThis is a demo of a simple XML lib for Arduino", MULTILINE); // MULTILINE == true.
|
XML.comment("XMLWriterTest.ino\nThis is a demo of a simple XML lib for Arduino", true);
|
||||||
|
|
||||||
XML.tagOpen("Arduino", "42");
|
XML.tagOpen("Arduino", "42");
|
||||||
|
|
||||||
@ -32,6 +32,7 @@ void setup()
|
|||||||
|
|
||||||
Weather();
|
Weather();
|
||||||
Weather2();
|
Weather2();
|
||||||
|
DataTypes();
|
||||||
|
|
||||||
XML.tagClose();
|
XML.tagClose();
|
||||||
}
|
}
|
||||||
@ -85,8 +86,33 @@ void DigitalPorts()
|
|||||||
XML.tagClose();
|
XML.tagClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DataTypes()
|
||||||
|
{
|
||||||
|
XML.comment("Testing dataTypes I");
|
||||||
|
XML.tagOpen("Datatypes");
|
||||||
|
XML.writeNode("Bool", 1 == 1);
|
||||||
|
XML.writeNode("Bool", 1 == 0);
|
||||||
|
XML.writeNode("BIN", 42, BIN);
|
||||||
|
XML.writeNode("DEC", 42, DEC);
|
||||||
|
XML.writeNode("HEX", 42, HEX);
|
||||||
|
XML.writeNode("OCT", 42, OCT);
|
||||||
|
XML.tagClose();
|
||||||
|
|
||||||
|
XML.comment("Testing dataTypes II");
|
||||||
|
for (int i=0; i<3; i++)
|
||||||
|
{
|
||||||
|
XML.tagStart("dataTypes");
|
||||||
|
XML.tagField("Bool", 1 == 1);
|
||||||
|
XML.tagField("Bool", 1 == 0);
|
||||||
|
int x = analogRead(A0);
|
||||||
|
XML.tagField("BIN", x, BIN);
|
||||||
|
XML.tagField("DEC", x, DEC);
|
||||||
|
XML.tagField("HEX", x, HEX);
|
||||||
|
XML.tagField("OCT", x, OCT);
|
||||||
|
XML.tagEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user