[DEV] basic exml parser (not work at all)
This commit is contained in:
commit
7f2ddd4d56
0
exml/EXmlAttribute.cpp
Normal file
0
exml/EXmlAttribute.cpp
Normal file
28
exml/EXmlAttribute.h
Normal file
28
exml/EXmlAttribute.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ETK_XML_ATTRIBUTE_H__
|
||||||
|
#define __ETK_XML_ATTRIBUTE_H__
|
||||||
|
|
||||||
|
#include <exml/EXmlNode.h>
|
||||||
|
#include <etk/Vector.h>
|
||||||
|
|
||||||
|
namespace exml
|
||||||
|
{
|
||||||
|
class EXmlElement : public EXmlNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EXmlElement(void) { };
|
||||||
|
virtual ~EXmlElement(void) { };
|
||||||
|
virtual nodeType_te GetType(void) { return typeAttribute; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
0
exml/EXmlComment.cpp
Normal file
0
exml/EXmlComment.cpp
Normal file
28
exml/EXmlComment.h
Normal file
28
exml/EXmlComment.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ETK_XML_COMMENT_H__
|
||||||
|
#define __ETK_XML_COMMENT_H__
|
||||||
|
|
||||||
|
#include <exml/EXmlNode.h>
|
||||||
|
#include <etk/Vector.h>
|
||||||
|
|
||||||
|
namespace exml
|
||||||
|
{
|
||||||
|
class EXmlElement : public EXmlNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EXmlElement(void) { };
|
||||||
|
virtual ~EXmlElement(void) { };
|
||||||
|
virtual nodeType_te GetType(void) { return typeAttribute; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
0
exml/EXmlDeclaration.cpp
Normal file
0
exml/EXmlDeclaration.cpp
Normal file
28
exml/EXmlDeclaration.h
Normal file
28
exml/EXmlDeclaration.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ETK_XML_DECLARATION_H__
|
||||||
|
#define __ETK_XML_DECLARATION_H__
|
||||||
|
|
||||||
|
#include <exml/EXmlNode.h>
|
||||||
|
#include <etk/Vector.h>
|
||||||
|
|
||||||
|
namespace exml
|
||||||
|
{
|
||||||
|
class EXmlDeclaration : public EXmlNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EXmlDeclaration(void) { };
|
||||||
|
virtual ~EXmlDeclaration(void) { };
|
||||||
|
virtual nodeType_te GetType(void) { return typeAttribute; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
43
exml/EXmlDocument.cpp
Normal file
43
exml/EXmlDocument.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <exml/EXmlDocument.h>
|
||||||
|
|
||||||
|
|
||||||
|
exml::EXmlDocument::EXmlDocument(void) :
|
||||||
|
m_charset(unicode::EDN_CHARSET_UNKNOW),
|
||||||
|
m_caseSensitive(false)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Parse(const etk::UString& _data)
|
||||||
|
{
|
||||||
|
// came from char ==> force in utf8 ...
|
||||||
|
m_charset = unicode::EDN_CHARSET_UTF8;
|
||||||
|
ivec2 filePos(1,1);
|
||||||
|
int32_t ret = Parse(_data, 0, m_caseSensitive, filePos);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Generate(etk::UString& _data)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Load(const etk::UString& _file)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Store(const etk::UString& _file)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
70
exml/EXmlDocument.h
Normal file
70
exml/EXmlDocument.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ETK_XML_DOCUMENT_H__
|
||||||
|
#define __ETK_XML_DOCUMENT_H__
|
||||||
|
|
||||||
|
#include <exml/EXmlElement.h>
|
||||||
|
#include <etk/unicode.h>
|
||||||
|
#include <etk/Vector.h>
|
||||||
|
|
||||||
|
namespace exml
|
||||||
|
{
|
||||||
|
class EXmlDocument : exml::EXmlElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EXmlDocument(void);
|
||||||
|
virtual ~EXmlDocument(void) { };
|
||||||
|
virtual nodeType_te GetType(void) { return typeDocument; };
|
||||||
|
private:
|
||||||
|
unicode::charset_te m_charset;
|
||||||
|
public:
|
||||||
|
virtual void SetCharset(unicode::charset_te _charset) { m_charset = _charset; };
|
||||||
|
virtual unicode::charset_te GetCharset(void) { return m_charset; };
|
||||||
|
private:
|
||||||
|
bool m_caseSensitive;
|
||||||
|
public:
|
||||||
|
virtual void SetCaseSensitive(bool _val) { m_caseSensitive = _val; };
|
||||||
|
virtual bool GetCaseSensitive(void) { return m_caseSensitive; };
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Parse a string that contain an XML
|
||||||
|
* @param[in] _data Data to parse
|
||||||
|
* @return false : An error occured
|
||||||
|
* @return true : Parsing is OK
|
||||||
|
*/
|
||||||
|
bool Parse(const etk::UString& _data);
|
||||||
|
/**
|
||||||
|
* @brief Generate a string that contain the created XML
|
||||||
|
* @param[out] _data Data where the xml is stored
|
||||||
|
* @return false : An error occured
|
||||||
|
* @return true : Parsing is OK
|
||||||
|
*/
|
||||||
|
bool Generate(etk::UString& _data);
|
||||||
|
/**
|
||||||
|
* @brief Load the file that might contain the xml
|
||||||
|
* @param[in] _file Filename of the xml (compatible with etk FSNode naming)
|
||||||
|
* @return false : An error occured
|
||||||
|
* @return true : Parsing is OK
|
||||||
|
*/
|
||||||
|
bool Load(const etk::UString& _file);
|
||||||
|
/**
|
||||||
|
* @brief Store the Xml in the file
|
||||||
|
* @param[in] _file Filename of the xml (compatible with etk FSNode naming)
|
||||||
|
* @return false : An error occured
|
||||||
|
* @return true : Parsing is OK
|
||||||
|
*/
|
||||||
|
bool Store(const etk::UString& _file);
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
96
exml/EXmlElement.cpp
Normal file
96
exml/EXmlElement.cpp
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <exml/EXmlElement.h>
|
||||||
|
|
||||||
|
|
||||||
|
EXmlNode* exml::EXmlElement::GetSub(int32_t _id)
|
||||||
|
{
|
||||||
|
if (_id <0 || _id>m_listSub.Size()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return m_listSub[_id];
|
||||||
|
}
|
||||||
|
|
||||||
|
void exml::EXmlElement::AppendSub(EXmlNode* _node)
|
||||||
|
{
|
||||||
|
if (_node == NULL) {
|
||||||
|
EXML_ERROR("Try to set an empty node");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int32_t iii=0; iii<m_listSub.Size(); iii++) {
|
||||||
|
if (m_listSub[iii] == _node) {
|
||||||
|
EXML_ERROR("Try to add a node that is already added befor !!!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_listSub.PushBack(_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXmlAttribute* exml::EXmlElement::GetAttribute(int32_t _id)
|
||||||
|
{
|
||||||
|
if (_id <0 || _id>m_listAttribute.Size()) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return m_listAttribute[_id];
|
||||||
|
}
|
||||||
|
void exml::EXmlElement::AppendAttribute(EXmlAttribute* _node)
|
||||||
|
{
|
||||||
|
if (_node == NULL) {
|
||||||
|
EXML_ERROR("Try to set an empty node");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int32_t iii=0; iii<m_listAttribute.Size(); iii++) {
|
||||||
|
if (m_listAttribute[iii] == _node) {
|
||||||
|
EXML_ERROR("Try to add a node that is already added befor !!!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_listAttribute.PushBack(_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t exml::EXmlElement::Parse(const etk::UString& _data, int32_t _pos, bool _caseSensitive, ivec2& _filePos)
|
||||||
|
{
|
||||||
|
for (int32_t iii=_pos; iii<_data.Size(); iii++) {
|
||||||
|
if (_data[iii] == "<") {
|
||||||
|
if (iii+1>=_data.Size()) {
|
||||||
|
// TODO : an error occured ...
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (_data[iii+1] == '?') {
|
||||||
|
// find declaration
|
||||||
|
|
||||||
|
// TODO : search end of declaration ...
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(_data[iii+1] == '!') {
|
||||||
|
if( iii+3>=_data.Size()
|
||||||
|
|| _data[iii+2] != '-'
|
||||||
|
|| _data[iii+3] != '-') {
|
||||||
|
|
||||||
|
// TODO : an error occured ...
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// find comment
|
||||||
|
|
||||||
|
// TODO : search end of comment ...
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// find a normal node ...
|
||||||
|
} else {
|
||||||
|
// might to be data text ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
42
exml/EXmlElement.h
Normal file
42
exml/EXmlElement.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ETK_XML_ELEMENT_H__
|
||||||
|
#define __ETK_XML_ELEMENT_H__
|
||||||
|
|
||||||
|
#include <exml/EXmlNode.h>
|
||||||
|
#include <etk/Vector.h>
|
||||||
|
|
||||||
|
namespace exml
|
||||||
|
{
|
||||||
|
class EXmlElement : public EXmlNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EXmlElement(void) { };
|
||||||
|
virtual ~EXmlElement(void) { };
|
||||||
|
virtual nodeType_te GetType(void) { return typeElement; };
|
||||||
|
private:
|
||||||
|
etk::Vector<EXmlNode*> m_listSub;
|
||||||
|
public:
|
||||||
|
int32_t SizeSub(void) const { return m_listSub.Size(); };
|
||||||
|
EXmlNode* GetSub(int32_t _id);
|
||||||
|
void AppendSub(EXmlNode* _node);
|
||||||
|
private:
|
||||||
|
etk::Vector<EXmlAttribute*> m_listAttribute;
|
||||||
|
public:
|
||||||
|
int32_t SizeAttribute(void) const { return m_listSub.Size(); };
|
||||||
|
EXmlAttribute* GetAttribute(int32_t _id);
|
||||||
|
void AppendAttribute(EXmlAttribute* _node);
|
||||||
|
protected:
|
||||||
|
virtual int32_t Parse(const etk::UString& _data, int32_t _pos, bool _caseSensitive, ivec2& _filePos);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
0
exml/EXmlNode.cpp
Normal file
0
exml/EXmlNode.cpp
Normal file
51
exml/EXmlNode.h
Normal file
51
exml/EXmlNode.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ETK_XML_NODE_H__
|
||||||
|
#define __ETK_XML_NODE_H__
|
||||||
|
|
||||||
|
#include <etk/types.h>
|
||||||
|
#include <etk/UString.h>
|
||||||
|
|
||||||
|
namespace exml
|
||||||
|
{
|
||||||
|
typedef enum {
|
||||||
|
typeNode, //!< might be an error ...
|
||||||
|
typeDocument, //!< all the file main access
|
||||||
|
typeDeclaration, //!< <?xml ... ?>
|
||||||
|
typeAttibute, //!< the <Element ATTRIBUTE="ATTRIBUTE_VALUE" />
|
||||||
|
typeElement, //!< the <XXX> ... </XXX>
|
||||||
|
typeComment, //!< comment node : <!-- -->
|
||||||
|
typeText, //!< <XXX> InsideText </XXX>
|
||||||
|
} nodeType_te;
|
||||||
|
|
||||||
|
class EXmlNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EXmlNode(void) { };
|
||||||
|
virtual ~EXmlNode(void) { };
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* Parse the sub nodes and current nodes ...
|
||||||
|
*/
|
||||||
|
virtual int32_t Parse(const etk::UString& _data, int32_t _pos, bool _caseSensitive, ivec2& _filePos) = 0;
|
||||||
|
protected:
|
||||||
|
etk::UString m_name;
|
||||||
|
public:
|
||||||
|
virtual void SetName(etk::UString _name) { m_name = _name; };
|
||||||
|
virtual const etk::UString& GetName(void) { return m_name; };
|
||||||
|
protected:
|
||||||
|
etk::UString m_value;
|
||||||
|
public:
|
||||||
|
virtual void SetValue(etk::UString _value) { m_value = _value; };
|
||||||
|
virtual const etk::UString& GetValue(void) { return m_value; };
|
||||||
|
public:
|
||||||
|
virtual nodeType_te GetType(void) { return typeNode; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
0
exml/EXmlText.cpp
Normal file
0
exml/EXmlText.cpp
Normal file
28
exml/EXmlText.h
Normal file
28
exml/EXmlText.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ETK_XML_TEXT_H__
|
||||||
|
#define __ETK_XML_TEXT_H__
|
||||||
|
|
||||||
|
#include <exml/EXmlNode.h>
|
||||||
|
#include <etk/Vector.h>
|
||||||
|
|
||||||
|
namespace exml
|
||||||
|
{
|
||||||
|
class EXmlText : public EXmlNode
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EXmlText(void) { };
|
||||||
|
virtual ~EXmlText(void) { };
|
||||||
|
virtual nodeType_te GetType(void) { return typeText; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
11
exml/debug.cpp
Normal file
11
exml/debug.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <exml/debug.h>
|
||||||
|
|
||||||
|
const char * g_exmlLibName = "exml ";
|
28
exml/debug.h
Normal file
28
exml/debug.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
*
|
||||||
|
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* @license BSD v3 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __EXML_DEBUG_H__
|
||||||
|
#define __EXML_DEBUG_H__
|
||||||
|
|
||||||
|
#include <etk/types.h>
|
||||||
|
#include <etk/Debug.h>
|
||||||
|
|
||||||
|
extern const char * g_exmlLibName;
|
||||||
|
|
||||||
|
#define EXML_CRITICAL(data) ETK_CRITICAL(g_exmlLibName, data)
|
||||||
|
#define EXML_WARNING(data) ETK_WARNING(g_exmlLibName, data)
|
||||||
|
#define EXML_ERROR(data) ETK_ERROR(g_exmlLibName, data)
|
||||||
|
#define EXML_INFO(data) ETK_INFO(g_exmlLibName, data)
|
||||||
|
#define EXML_DEBUG(data) ETK_DEBUG(g_exmlLibName, data)
|
||||||
|
#define EXML_VERBOSE(data) ETK_VERBOSE(g_exmlLibName, data)
|
||||||
|
#define EXML_ASSERT(cond, data) ETK_ASSERT(g_exmlLibName, cond, data)
|
||||||
|
#define EXML_CHECK_INOUT(cond) ETK_CHECK_INOUT(g_exmlLibName, cond)
|
||||||
|
#define EXML_TODO(cond) ETK_TODO(g_exmlLibName, cond)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
25
lutin_exml.py
Normal file
25
lutin_exml.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import lutinModule
|
||||||
|
import lutinTools
|
||||||
|
|
||||||
|
def Create(target):
|
||||||
|
myModule = lutinModule.module(__file__, 'exml', 'LIBRARY')
|
||||||
|
|
||||||
|
myModule.AddModuleDepend(['etk'])
|
||||||
|
|
||||||
|
myModule.AddSrcFile([
|
||||||
|
'exml/debug.cpp',
|
||||||
|
'exml/EXmlAttribute.cpp',
|
||||||
|
'exml/EXmlComment.cpp',
|
||||||
|
'exml/EXmlDeclaration.cpp',
|
||||||
|
'exml/EXmlDocument.cpp',
|
||||||
|
'exml/EXmlElement.cpp',
|
||||||
|
'exml/EXmlNode.cpp',
|
||||||
|
'exml/EXmlText.cpp'])
|
||||||
|
|
||||||
|
myModule.AddExportPath(lutinTools.GetCurrentPath(__file__))
|
||||||
|
|
||||||
|
# add the currrent module at the
|
||||||
|
return myModule
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user