mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 17:49:43 +01:00
Remove TinyXML-1
This removes the TinyXML source files, removes it from CMakeLists.txt, removes all the includes, and removes the functions FILESYSTEM_saveTiXmlDocument() and FILESYSTEM_loadTiXmlDocument() (use FILESYSTEM_saveTiXml2Document() and FILESYSTEM_loadTiXml2Document() instead). Additionally I've cleaned up the tinyxml2.h include in FileSystemUtils.h so that it doesn't actually include tinyxml2.h unnecessarily, meaning a change to TinyXML2 shouldn't rebuild all files that include FileSystemUtils.h.
This commit is contained in:
parent
c397c898fc
commit
3f4df82583
13 changed files with 4 additions and 6373 deletions
|
@ -68,7 +68,6 @@ ENDIF()
|
||||||
# Include Directories
|
# Include Directories
|
||||||
INCLUDE_DIRECTORIES(
|
INCLUDE_DIRECTORIES(
|
||||||
src
|
src
|
||||||
../third_party/tinyxml
|
|
||||||
../third_party/tinyxml2
|
../third_party/tinyxml2
|
||||||
../third_party/physfs
|
../third_party/physfs
|
||||||
../third_party/lodepng
|
../third_party/lodepng
|
||||||
|
@ -121,12 +120,6 @@ IF(GOG)
|
||||||
ADD_DEFINITIONS(-DGOG_NETWORK)
|
ADD_DEFINITIONS(-DGOG_NETWORK)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(XML_SRC
|
|
||||||
../third_party/tinyxml/tinystr.cpp
|
|
||||||
../third_party/tinyxml/tinyxml.cpp
|
|
||||||
../third_party/tinyxml/tinyxmlerror.cpp
|
|
||||||
../third_party/tinyxml/tinyxmlparser.cpp
|
|
||||||
)
|
|
||||||
SET(XML2_SRC
|
SET(XML2_SRC
|
||||||
../third_party/tinyxml2/tinyxml2.cpp
|
../third_party/tinyxml2/tinyxml2.cpp
|
||||||
)
|
)
|
||||||
|
@ -193,13 +186,12 @@ SET_PROPERTY(TARGET VVVVVV PROPERTY CXX_STANDARD 98)
|
||||||
SET_PROPERTY(TARGET VVVVVV PROPERTY CXX_EXTENSIONS FALSE)
|
SET_PROPERTY(TARGET VVVVVV PROPERTY CXX_EXTENSIONS FALSE)
|
||||||
|
|
||||||
# Library information
|
# Library information
|
||||||
ADD_LIBRARY(tinyxml-static STATIC ${XML_SRC})
|
|
||||||
ADD_LIBRARY(tinyxml2-static STATIC ${XML2_SRC})
|
ADD_LIBRARY(tinyxml2-static STATIC ${XML2_SRC})
|
||||||
ADD_LIBRARY(physfs-static STATIC ${PFS_SRC} ${PFSP_SRC})
|
ADD_LIBRARY(physfs-static STATIC ${PFS_SRC} ${PFSP_SRC})
|
||||||
ADD_LIBRARY(lodepng-static STATIC ${PNG_SRC})
|
ADD_LIBRARY(lodepng-static STATIC ${PNG_SRC})
|
||||||
|
|
||||||
# Static Dependencies
|
# Static Dependencies
|
||||||
TARGET_LINK_LIBRARIES(VVVVVV physfs-static tinyxml-static tinyxml2-static lodepng-static)
|
TARGET_LINK_LIBRARIES(VVVVVV physfs-static tinyxml2-static lodepng-static)
|
||||||
|
|
||||||
# SDL2 Dependency (Detection pulled from FAudio)
|
# SDL2 Dependency (Detection pulled from FAudio)
|
||||||
if (DEFINED SDL2_INCLUDE_DIRS AND DEFINED SDL2_LIBRARIES)
|
if (DEFINED SDL2_INCLUDE_DIRS AND DEFINED SDL2_LIBRARIES)
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include <physfs.h>
|
#include <physfs.h>
|
||||||
|
|
||||||
#include "tinyxml.h"
|
#include "tinyxml2.h"
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
@ -253,35 +253,6 @@ void FILESYSTEM_freeMemory(unsigned char **mem)
|
||||||
*mem = NULL;
|
*mem = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FILESYSTEM_saveTiXmlDocument(const char *name, TiXmlDocument *doc)
|
|
||||||
{
|
|
||||||
/* TiXmlDocument.SaveFile doesn't account for Unicode paths, PHYSFS does */
|
|
||||||
TiXmlPrinter printer;
|
|
||||||
doc->Accept(&printer);
|
|
||||||
PHYSFS_File* handle = PHYSFS_openWrite(name);
|
|
||||||
if (handle == NULL)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
PHYSFS_writeBytes(handle, printer.CStr(), printer.Size());
|
|
||||||
PHYSFS_close(handle);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FILESYSTEM_loadTiXmlDocument(const char *name, TiXmlDocument *doc)
|
|
||||||
{
|
|
||||||
/* TiXmlDocument.SaveFile doesn't account for Unicode paths, PHYSFS does */
|
|
||||||
unsigned char *mem = NULL;
|
|
||||||
FILESYSTEM_loadFileToMemory(name, &mem, NULL, true);
|
|
||||||
if (mem == NULL)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
doc->Parse((const char*)mem, NULL, TIXML_ENCODING_UTF8);
|
|
||||||
FILESYSTEM_freeMemory(&mem);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FILESYSTEM_saveTiXml2Document(const char *name, tinyxml2::XMLDocument& doc)
|
bool FILESYSTEM_saveTiXml2Document(const char *name, tinyxml2::XMLDocument& doc)
|
||||||
{
|
{
|
||||||
/* XMLDocument.SaveFile doesn't account for Unicode paths, PHYSFS does */
|
/* XMLDocument.SaveFile doesn't account for Unicode paths, PHYSFS does */
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "tinyxml.h"
|
// Forward declaration, including the entirety of tinyxml2.h across all files this file is included in is unnecessary
|
||||||
#include "tinyxml2.h"
|
namespace tinyxml2 { class XMLDocument; }
|
||||||
|
|
||||||
int FILESYSTEM_init(char *argvZero, char* baseDir, char* assetsPath);
|
int FILESYSTEM_init(char *argvZero, char* baseDir, char* assetsPath);
|
||||||
void FILESYSTEM_deinit();
|
void FILESYSTEM_deinit();
|
||||||
|
@ -20,8 +20,6 @@ void FILESYSTEM_unmountassets();
|
||||||
void FILESYSTEM_loadFileToMemory(const char *name, unsigned char **mem,
|
void FILESYSTEM_loadFileToMemory(const char *name, unsigned char **mem,
|
||||||
size_t *len, bool addnull = false);
|
size_t *len, bool addnull = false);
|
||||||
void FILESYSTEM_freeMemory(unsigned char **mem);
|
void FILESYSTEM_freeMemory(unsigned char **mem);
|
||||||
bool FILESYSTEM_saveTiXmlDocument(const char *name, TiXmlDocument *doc);
|
|
||||||
bool FILESYSTEM_loadTiXmlDocument(const char *name, TiXmlDocument *doc);
|
|
||||||
bool FILESYSTEM_saveTiXml2Document(const char *name, tinyxml2::XMLDocument& doc);
|
bool FILESYSTEM_saveTiXml2Document(const char *name, tinyxml2::XMLDocument& doc);
|
||||||
bool FILESYSTEM_loadTiXml2Document(const char *name, tinyxml2::XMLDocument& doc);
|
bool FILESYSTEM_loadTiXml2Document(const char *name, tinyxml2::XMLDocument& doc);
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
|
|
||||||
#include "FileSystemUtils.h"
|
#include "FileSystemUtils.h"
|
||||||
|
|
||||||
#include "tinyxml.h"
|
|
||||||
#include "tinyxml2.h"
|
#include "tinyxml2.h"
|
||||||
|
|
||||||
#include "Network.h"
|
#include "Network.h"
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
#include "MakeAndPlay.h"
|
#include "MakeAndPlay.h"
|
||||||
|
|
||||||
#include "tinyxml.h"
|
|
||||||
#include "tinyxml2.h"
|
#include "tinyxml2.h"
|
||||||
|
|
||||||
#include "FileSystemUtils.h"
|
#include "FileSystemUtils.h"
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include "Script.h"
|
#include "Script.h"
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
|
|
||||||
#include "tinyxml.h"
|
|
||||||
#include "tinyxml2.h"
|
#include "tinyxml2.h"
|
||||||
|
|
||||||
#include "Enums.h"
|
#include "Enums.h"
|
||||||
|
|
530
third_party/tinyxml/readme.txt
vendored
530
third_party/tinyxml/readme.txt
vendored
|
@ -1,530 +0,0 @@
|
||||||
/** @mainpage
|
|
||||||
|
|
||||||
<h1> TinyXML </h1>
|
|
||||||
|
|
||||||
TinyXML is a simple, small, C++ XML parser that can be easily
|
|
||||||
integrated into other programs.
|
|
||||||
|
|
||||||
<h2> What it does. </h2>
|
|
||||||
|
|
||||||
In brief, TinyXML parses an XML document, and builds from that a
|
|
||||||
Document Object Model (DOM) that can be read, modified, and saved.
|
|
||||||
|
|
||||||
XML stands for "eXtensible Markup Language." It allows you to create
|
|
||||||
your own document markups. Where HTML does a very good job of marking
|
|
||||||
documents for browsers, XML allows you to define any kind of document
|
|
||||||
markup, for example a document that describes a "to do" list for an
|
|
||||||
organizer application. XML is a very structured and convenient format.
|
|
||||||
All those random file formats created to store application data can
|
|
||||||
all be replaced with XML. One parser for everything.
|
|
||||||
|
|
||||||
The best place for the complete, correct, and quite frankly hard to
|
|
||||||
read spec is at <a href="http://www.w3.org/TR/2004/REC-xml-20040204/">
|
|
||||||
http://www.w3.org/TR/2004/REC-xml-20040204/</a>. An intro to XML
|
|
||||||
(that I really like) can be found at
|
|
||||||
<a href="http://skew.org/xml/tutorial/">http://skew.org/xml/tutorial</a>.
|
|
||||||
|
|
||||||
There are different ways to access and interact with XML data.
|
|
||||||
TinyXML uses a Document Object Model (DOM), meaning the XML data is parsed
|
|
||||||
into a C++ objects that can be browsed and manipulated, and then
|
|
||||||
written to disk or another output stream. You can also construct an XML document
|
|
||||||
from scratch with C++ objects and write this to disk or another output
|
|
||||||
stream.
|
|
||||||
|
|
||||||
TinyXML is designed to be easy and fast to learn. It is two headers
|
|
||||||
and four cpp files. Simply add these to your project and off you go.
|
|
||||||
There is an example file - xmltest.cpp - to get you started.
|
|
||||||
|
|
||||||
TinyXML is released under the ZLib license,
|
|
||||||
so you can use it in open source or commercial code. The details
|
|
||||||
of the license are at the top of every source file.
|
|
||||||
|
|
||||||
TinyXML attempts to be a flexible parser, but with truly correct and
|
|
||||||
compliant XML output. TinyXML should compile on any reasonably C++
|
|
||||||
compliant system. It does not rely on exceptions or RTTI. It can be
|
|
||||||
compiled with or without STL support. TinyXML fully supports
|
|
||||||
the UTF-8 encoding, and the first 64k character entities.
|
|
||||||
|
|
||||||
|
|
||||||
<h2> What it doesn't do. </h2>
|
|
||||||
|
|
||||||
TinyXML doesn't parse or use DTDs (Document Type Definitions) or XSLs
|
|
||||||
(eXtensible Stylesheet Language.) There are other parsers out there
|
|
||||||
(check out www.sourceforge.org, search for XML) that are much more fully
|
|
||||||
featured. But they are also much bigger, take longer to set up in
|
|
||||||
your project, have a higher learning curve, and often have a more
|
|
||||||
restrictive license. If you are working with browsers or have more
|
|
||||||
complete XML needs, TinyXML is not the parser for you.
|
|
||||||
|
|
||||||
The following DTD syntax will not parse at this time in TinyXML:
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
<!DOCTYPE Archiv [
|
|
||||||
<!ELEMENT Comment (#PCDATA)>
|
|
||||||
]>
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
because TinyXML sees this as a !DOCTYPE node with an illegally
|
|
||||||
embedded !ELEMENT node. This may be addressed in the future.
|
|
||||||
|
|
||||||
<h2> Tutorials. </h2>
|
|
||||||
|
|
||||||
For the impatient, here is a tutorial to get you going. A great way to get started,
|
|
||||||
but it is worth your time to read this (very short) manual completely.
|
|
||||||
|
|
||||||
- @subpage tutorial0
|
|
||||||
|
|
||||||
<h2> Code Status. </h2>
|
|
||||||
|
|
||||||
TinyXML is mature, tested code. It is very stable. If you find
|
|
||||||
bugs, please file a bug report on the sourceforge web site
|
|
||||||
(www.sourceforge.net/projects/tinyxml). We'll get them straightened
|
|
||||||
out as soon as possible.
|
|
||||||
|
|
||||||
There are some areas of improvement; please check sourceforge if you are
|
|
||||||
interested in working on TinyXML.
|
|
||||||
|
|
||||||
<h2> Related Projects </h2>
|
|
||||||
|
|
||||||
TinyXML projects you may find useful! (Descriptions provided by the projects.)
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li> <b>TinyXPath</b> (http://tinyxpath.sourceforge.net). TinyXPath is a small footprint
|
|
||||||
XPath syntax decoder, written in C++.</li>
|
|
||||||
<li> <b>TinyXML++</b> (http://code.google.com/p/ticpp/). TinyXML++ is a completely new
|
|
||||||
interface to TinyXML that uses MANY of the C++ strengths. Templates,
|
|
||||||
exceptions, and much better error handling.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2> Features </h2>
|
|
||||||
|
|
||||||
<h3> Using STL </h3>
|
|
||||||
|
|
||||||
TinyXML can be compiled to use or not use STL. When using STL, TinyXML
|
|
||||||
uses the std::string class, and fully supports std::istream, std::ostream,
|
|
||||||
operator<<, and operator>>. Many API methods have both 'const char*' and
|
|
||||||
'const std::string&' forms.
|
|
||||||
|
|
||||||
When STL support is compiled out, no STL files are included whatsoever. All
|
|
||||||
the string classes are implemented by TinyXML itself. API methods
|
|
||||||
all use the 'const char*' form for input.
|
|
||||||
|
|
||||||
Use the compile time #define:
|
|
||||||
|
|
||||||
TIXML_USE_STL
|
|
||||||
|
|
||||||
to compile one version or the other. This can be passed by the compiler,
|
|
||||||
or set as the first line of "tinyxml.h".
|
|
||||||
|
|
||||||
Note: If compiling the test code in Linux, setting the environment
|
|
||||||
variable TINYXML_USE_STL=YES/NO will control STL compilation. In the
|
|
||||||
Windows project file, STL and non STL targets are provided. In your project,
|
|
||||||
It's probably easiest to add the line "#define TIXML_USE_STL" as the first
|
|
||||||
line of tinyxml.h.
|
|
||||||
|
|
||||||
<h3> UTF-8 </h3>
|
|
||||||
|
|
||||||
TinyXML supports UTF-8 allowing to manipulate XML files in any language. TinyXML
|
|
||||||
also supports "legacy mode" - the encoding used before UTF-8 support and
|
|
||||||
probably best described as "extended ascii".
|
|
||||||
|
|
||||||
Normally, TinyXML will try to detect the correct encoding and use it. However,
|
|
||||||
by setting the value of TIXML_DEFAULT_ENCODING in the header file, TinyXML
|
|
||||||
can be forced to always use one encoding.
|
|
||||||
|
|
||||||
TinyXML will assume Legacy Mode until one of the following occurs:
|
|
||||||
<ol>
|
|
||||||
<li> If the non-standard but common "UTF-8 lead bytes" (0xef 0xbb 0xbf)
|
|
||||||
begin the file or data stream, TinyXML will read it as UTF-8. </li>
|
|
||||||
<li> If the declaration tag is read, and it has an encoding="UTF-8", then
|
|
||||||
TinyXML will read it as UTF-8. </li>
|
|
||||||
<li> If the declaration tag is read, and it has no encoding specified, then TinyXML will
|
|
||||||
read it as UTF-8. </li>
|
|
||||||
<li> If the declaration tag is read, and it has an encoding="something else", then TinyXML
|
|
||||||
will read it as Legacy Mode. In legacy mode, TinyXML will work as it did before. It's
|
|
||||||
not clear what that mode does exactly, but old content should keep working.</li>
|
|
||||||
<li> Until one of the above criteria is met, TinyXML runs in Legacy Mode.</li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
What happens if the encoding is incorrectly set or detected? TinyXML will try
|
|
||||||
to read and pass through text seen as improperly encoded. You may get some strange results or
|
|
||||||
mangled characters. You may want to force TinyXML to the correct mode.
|
|
||||||
|
|
||||||
You may force TinyXML to Legacy Mode by using LoadFile( TIXML_ENCODING_LEGACY ) or
|
|
||||||
LoadFile( filename, TIXML_ENCODING_LEGACY ). You may force it to use legacy mode all
|
|
||||||
the time by setting TIXML_DEFAULT_ENCODING = TIXML_ENCODING_LEGACY. Likewise, you may
|
|
||||||
force it to TIXML_ENCODING_UTF8 with the same technique.
|
|
||||||
|
|
||||||
For English users, using English XML, UTF-8 is the same as low-ASCII. You
|
|
||||||
don't need to be aware of UTF-8 or change your code in any way. You can think
|
|
||||||
of UTF-8 as a "superset" of ASCII.
|
|
||||||
|
|
||||||
UTF-8 is not a double byte format - but it is a standard encoding of Unicode!
|
|
||||||
TinyXML does not use or directly support wchar, TCHAR, or Microsoft's _UNICODE at this time.
|
|
||||||
It is common to see the term "Unicode" improperly refer to UTF-16, a wide byte encoding
|
|
||||||
of unicode. This is a source of confusion.
|
|
||||||
|
|
||||||
For "high-ascii" languages - everything not English, pretty much - TinyXML can
|
|
||||||
handle all languages, at the same time, as long as the XML is encoded
|
|
||||||
in UTF-8. That can be a little tricky, older programs and operating systems
|
|
||||||
tend to use the "default" or "traditional" code page. Many apps (and almost all
|
|
||||||
modern ones) can output UTF-8, but older or stubborn (or just broken) ones
|
|
||||||
still output text in the default code page.
|
|
||||||
|
|
||||||
For example, Japanese systems traditionally use SHIFT-JIS encoding.
|
|
||||||
Text encoded as SHIFT-JIS can not be read by TinyXML.
|
|
||||||
A good text editor can import SHIFT-JIS and then save as UTF-8.
|
|
||||||
|
|
||||||
The <a href="http://skew.org/xml/tutorial/">Skew.org link</a> does a great
|
|
||||||
job covering the encoding issue.
|
|
||||||
|
|
||||||
The test file "utf8test.xml" is an XML containing English, Spanish, Russian,
|
|
||||||
and Simplified Chinese. (Hopefully they are translated correctly). The file
|
|
||||||
"utf8test.gif" is a screen capture of the XML file, rendered in IE. Note that
|
|
||||||
if you don't have the correct fonts (Simplified Chinese or Russian) on your
|
|
||||||
system, you won't see output that matches the GIF file even if you can parse
|
|
||||||
it correctly. Also note that (at least on my Windows machine) console output
|
|
||||||
is in a Western code page, so that Print() or printf() cannot correctly display
|
|
||||||
the file. This is not a bug in TinyXML - just an OS issue. No data is lost or
|
|
||||||
destroyed by TinyXML. The console just doesn't render UTF-8.
|
|
||||||
|
|
||||||
|
|
||||||
<h3> Entities </h3>
|
|
||||||
TinyXML recognizes the pre-defined "character entities", meaning special
|
|
||||||
characters. Namely:
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
& &
|
|
||||||
< <
|
|
||||||
> >
|
|
||||||
" "
|
|
||||||
' '
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
These are recognized when the XML document is read, and translated to there
|
|
||||||
UTF-8 equivalents. For instance, text with the XML of:
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
Far & Away
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
will have the Value() of "Far & Away" when queried from the TiXmlText object,
|
|
||||||
and will be written back to the XML stream/file as an ampersand. Older versions
|
|
||||||
of TinyXML "preserved" character entities, but the newer versions will translate
|
|
||||||
them into characters.
|
|
||||||
|
|
||||||
Additionally, any character can be specified by its Unicode code point:
|
|
||||||
The syntax " " or " " are both to the non-breaking space characher.
|
|
||||||
|
|
||||||
<h3> Printing </h3>
|
|
||||||
TinyXML can print output in several different ways that all have strengths and limitations.
|
|
||||||
|
|
||||||
- Print( FILE* ). Output to a std-C stream, which includes all C files as well as stdout.
|
|
||||||
- "Pretty prints", but you don't have control over printing options.
|
|
||||||
- The output is streamed directly to the FILE object, so there is no memory overhead
|
|
||||||
in the TinyXML code.
|
|
||||||
- used by Print() and SaveFile()
|
|
||||||
|
|
||||||
- operator<<. Output to a c++ stream.
|
|
||||||
- Integrates with standart C++ iostreams.
|
|
||||||
- Outputs in "network printing" mode without line breaks. Good for network transmission
|
|
||||||
and moving XML between C++ objects, but hard for a human to read.
|
|
||||||
|
|
||||||
- TiXmlPrinter. Output to a std::string or memory buffer.
|
|
||||||
- API is less concise
|
|
||||||
- Future printing options will be put here.
|
|
||||||
- Printing may change slightly in future versions as it is refined and expanded.
|
|
||||||
|
|
||||||
<h3> Streams </h3>
|
|
||||||
With TIXML_USE_STL on TinyXML supports C++ streams (operator <<,>>) streams as well
|
|
||||||
as C (FILE*) streams. There are some differences that you may need to be aware of.
|
|
||||||
|
|
||||||
C style output:
|
|
||||||
- based on FILE*
|
|
||||||
- the Print() and SaveFile() methods
|
|
||||||
|
|
||||||
Generates formatted output, with plenty of white space, intended to be as
|
|
||||||
human-readable as possible. They are very fast, and tolerant of ill formed
|
|
||||||
XML documents. For example, an XML document that contains 2 root elements
|
|
||||||
and 2 declarations, will still print.
|
|
||||||
|
|
||||||
C style input:
|
|
||||||
- based on FILE*
|
|
||||||
- the Parse() and LoadFile() methods
|
|
||||||
|
|
||||||
A fast, tolerant read. Use whenever you don't need the C++ streams.
|
|
||||||
|
|
||||||
C++ style output:
|
|
||||||
- based on std::ostream
|
|
||||||
- operator<<
|
|
||||||
|
|
||||||
Generates condensed output, intended for network transmission rather than
|
|
||||||
readability. Depending on your system's implementation of the ostream class,
|
|
||||||
these may be somewhat slower. (Or may not.) Not tolerant of ill formed XML:
|
|
||||||
a document should contain the correct one root element. Additional root level
|
|
||||||
elements will not be streamed out.
|
|
||||||
|
|
||||||
C++ style input:
|
|
||||||
- based on std::istream
|
|
||||||
- operator>>
|
|
||||||
|
|
||||||
Reads XML from a stream, making it useful for network transmission. The tricky
|
|
||||||
part is knowing when the XML document is complete, since there will almost
|
|
||||||
certainly be other data in the stream. TinyXML will assume the XML data is
|
|
||||||
complete after it reads the root element. Put another way, documents that
|
|
||||||
are ill-constructed with more than one root element will not read correctly.
|
|
||||||
Also note that operator>> is somewhat slower than Parse, due to both
|
|
||||||
implementation of the STL and limitations of TinyXML.
|
|
||||||
|
|
||||||
<h3> White space </h3>
|
|
||||||
The world simply does not agree on whether white space should be kept, or condensed.
|
|
||||||
For example, pretend the '_' is a space, and look at "Hello____world". HTML, and
|
|
||||||
at least some XML parsers, will interpret this as "Hello_world". They condense white
|
|
||||||
space. Some XML parsers do not, and will leave it as "Hello____world". (Remember
|
|
||||||
to keep pretending the _ is a space.) Others suggest that __Hello___world__ should become
|
|
||||||
Hello___world.
|
|
||||||
|
|
||||||
It's an issue that hasn't been resolved to my satisfaction. TinyXML supports the
|
|
||||||
first 2 approaches. Call TiXmlBase::SetCondenseWhiteSpace( bool ) to set the desired behavior.
|
|
||||||
The default is to condense white space.
|
|
||||||
|
|
||||||
If you change the default, you should call TiXmlBase::SetCondenseWhiteSpace( bool )
|
|
||||||
before making any calls to Parse XML data, and I don't recommend changing it after
|
|
||||||
it has been set.
|
|
||||||
|
|
||||||
|
|
||||||
<h3> Handles </h3>
|
|
||||||
|
|
||||||
Where browsing an XML document in a robust way, it is important to check
|
|
||||||
for null returns from method calls. An error safe implementation can
|
|
||||||
generate a lot of code like:
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
TiXmlElement* root = document.FirstChildElement( "Document" );
|
|
||||||
if ( root )
|
|
||||||
{
|
|
||||||
TiXmlElement* element = root->FirstChildElement( "Element" );
|
|
||||||
if ( element )
|
|
||||||
{
|
|
||||||
TiXmlElement* child = element->FirstChildElement( "Child" );
|
|
||||||
if ( child )
|
|
||||||
{
|
|
||||||
TiXmlElement* child2 = child->NextSiblingElement( "Child" );
|
|
||||||
if ( child2 )
|
|
||||||
{
|
|
||||||
// Finally do something useful.
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
Handles have been introduced to clean this up. Using the TiXmlHandle class,
|
|
||||||
the previous code reduces to:
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
TiXmlHandle docHandle( &document );
|
|
||||||
TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement();
|
|
||||||
if ( child2 )
|
|
||||||
{
|
|
||||||
// do something useful
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
Which is much easier to deal with. See TiXmlHandle for more information.
|
|
||||||
|
|
||||||
|
|
||||||
<h3> Row and Column tracking </h3>
|
|
||||||
Being able to track nodes and attributes back to their origin location
|
|
||||||
in source files can be very important for some applications. Additionally,
|
|
||||||
knowing where parsing errors occured in the original source can be very
|
|
||||||
time saving.
|
|
||||||
|
|
||||||
TinyXML can tracks the row and column origin of all nodes and attributes
|
|
||||||
in a text file. The TiXmlBase::Row() and TiXmlBase::Column() methods return
|
|
||||||
the origin of the node in the source text. The correct tabs can be
|
|
||||||
configured in TiXmlDocument::SetTabSize().
|
|
||||||
|
|
||||||
|
|
||||||
<h2> Using and Installing </h2>
|
|
||||||
|
|
||||||
To Compile and Run xmltest:
|
|
||||||
|
|
||||||
A Linux Makefile and a Windows Visual C++ .dsw file is provided.
|
|
||||||
Simply compile and run. It will write the file demotest.xml to your
|
|
||||||
disk and generate output on the screen. It also tests walking the
|
|
||||||
DOM by printing out the number of nodes found using different
|
|
||||||
techniques.
|
|
||||||
|
|
||||||
The Linux makefile is very generic and runs on many systems - it
|
|
||||||
is currently tested on mingw and
|
|
||||||
MacOSX. You do not need to run 'make depend'. The dependecies have been
|
|
||||||
hard coded.
|
|
||||||
|
|
||||||
<h3>Windows project file for VC6</h3>
|
|
||||||
<ul>
|
|
||||||
<li>tinyxml: tinyxml library, non-STL </li>
|
|
||||||
<li>tinyxmlSTL: tinyxml library, STL </li>
|
|
||||||
<li>tinyXmlTest: test app, non-STL </li>
|
|
||||||
<li>tinyXmlTestSTL: test app, STL </li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>Makefile</h3>
|
|
||||||
At the top of the makefile you can set:
|
|
||||||
|
|
||||||
PROFILE, DEBUG, and TINYXML_USE_STL. Details (such that they are) are in
|
|
||||||
the makefile.
|
|
||||||
|
|
||||||
In the tinyxml directory, type "make clean" then "make". The executable
|
|
||||||
file 'xmltest' will be created.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>To Use in an Application:</h3>
|
|
||||||
|
|
||||||
Add tinyxml.cpp, tinyxml.h, tinyxmlerror.cpp, tinyxmlparser.cpp, tinystr.cpp, and tinystr.h to your
|
|
||||||
project or make file. That's it! It should compile on any reasonably
|
|
||||||
compliant C++ system. You do not need to enable exceptions or
|
|
||||||
RTTI for TinyXML.
|
|
||||||
|
|
||||||
|
|
||||||
<h2> How TinyXML works. </h2>
|
|
||||||
|
|
||||||
An example is probably the best way to go. Take:
|
|
||||||
@verbatim
|
|
||||||
<?xml version="1.0" standalone=no>
|
|
||||||
<!-- Our to do list data -->
|
|
||||||
<ToDo>
|
|
||||||
<Item priority="1"> Go to the <bold>Toy store!</bold></Item>
|
|
||||||
<Item priority="2"> Do bills</Item>
|
|
||||||
</ToDo>
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
Its not much of a To Do list, but it will do. To read this file
|
|
||||||
(say "demo.xml") you would create a document, and parse it in:
|
|
||||||
@verbatim
|
|
||||||
TiXmlDocument doc( "demo.xml" );
|
|
||||||
doc.LoadFile();
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
And its ready to go. Now lets look at some lines and how they
|
|
||||||
relate to the DOM.
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
<?xml version="1.0" standalone=no>
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
The first line is a declaration, and gets turned into the
|
|
||||||
TiXmlDeclaration class. It will be the first child of the
|
|
||||||
document node.
|
|
||||||
|
|
||||||
This is the only directive/special tag parsed by TinyXML.
|
|
||||||
Generally directive tags are stored in TiXmlUnknown so the
|
|
||||||
commands wont be lost when it is saved back to disk.
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
<!-- Our to do list data -->
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
A comment. Will become a TiXmlComment object.
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
<ToDo>
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
The "ToDo" tag defines a TiXmlElement object. This one does not have
|
|
||||||
any attributes, but does contain 2 other elements.
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
<Item priority="1">
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
Creates another TiXmlElement which is a child of the "ToDo" element.
|
|
||||||
This element has 1 attribute, with the name "priority" and the value
|
|
||||||
"1".
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
Go to the
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
A TiXmlText. This is a leaf node and cannot contain other nodes.
|
|
||||||
It is a child of the "Item" TiXmlElement.
|
|
||||||
|
|
||||||
@verbatim
|
|
||||||
<bold>
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
|
|
||||||
Another TiXmlElement, this one a child of the "Item" element.
|
|
||||||
|
|
||||||
Etc.
|
|
||||||
|
|
||||||
Looking at the entire object tree, you end up with:
|
|
||||||
@verbatim
|
|
||||||
TiXmlDocument "demo.xml"
|
|
||||||
TiXmlDeclaration "version='1.0'" "standalone=no"
|
|
||||||
TiXmlComment " Our to do list data"
|
|
||||||
TiXmlElement "ToDo"
|
|
||||||
TiXmlElement "Item" Attribtutes: priority = 1
|
|
||||||
TiXmlText "Go to the "
|
|
||||||
TiXmlElement "bold"
|
|
||||||
TiXmlText "Toy store!"
|
|
||||||
TiXmlElement "Item" Attributes: priority=2
|
|
||||||
TiXmlText "Do bills"
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
<h2> Documentation </h2>
|
|
||||||
|
|
||||||
The documentation is build with Doxygen, using the 'dox'
|
|
||||||
configuration file.
|
|
||||||
|
|
||||||
<h2> License </h2>
|
|
||||||
|
|
||||||
TinyXML is released under the zlib license:
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any
|
|
||||||
damages arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any
|
|
||||||
purpose, including commercial applications, and to alter it and
|
|
||||||
redistribute it freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must
|
|
||||||
not claim that you wrote the original software. If you use this
|
|
||||||
software in a product, an acknowledgment in the product documentation
|
|
||||||
would be appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and
|
|
||||||
must not be misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
|
|
||||||
<h2> References </h2>
|
|
||||||
|
|
||||||
The World Wide Web Consortium is the definitive standard body for
|
|
||||||
XML, and their web pages contain huge amounts of information.
|
|
||||||
|
|
||||||
The definitive spec: <a href="http://www.w3.org/TR/2004/REC-xml-20040204/">
|
|
||||||
http://www.w3.org/TR/2004/REC-xml-20040204/</a>
|
|
||||||
|
|
||||||
I also recommend "XML Pocket Reference" by Robert Eckstein and published by
|
|
||||||
OReilly...the book that got the whole thing started.
|
|
||||||
|
|
||||||
<h2> Contributors, Contacts, and a Brief History </h2>
|
|
||||||
|
|
||||||
Thanks very much to everyone who sends suggestions, bugs, ideas, and
|
|
||||||
encouragement. It all helps, and makes this project fun. A special thanks
|
|
||||||
to the contributors on the web pages that keep it lively.
|
|
||||||
|
|
||||||
So many people have sent in bugs and ideas, that rather than list here
|
|
||||||
we try to give credit due in the "changes.txt" file.
|
|
||||||
|
|
||||||
TinyXML was originally written by Lee Thomason. (Often the "I" still
|
|
||||||
in the documentation.) Lee reviews changes and releases new versions,
|
|
||||||
with the help of Yves Berquin, Andrew Ellerton, and the tinyXml community.
|
|
||||||
|
|
||||||
We appreciate your suggestions, and would love to know if you
|
|
||||||
use TinyXML. Hopefully you will enjoy it and find it useful.
|
|
||||||
Please post questions, comments, file bugs, or contact us at:
|
|
||||||
|
|
||||||
www.sourceforge.net/projects/tinyxml
|
|
||||||
|
|
||||||
Lee Thomason, Yves Berquin, Andrew Ellerton
|
|
||||||
*/
|
|
111
third_party/tinyxml/tinystr.cpp
vendored
111
third_party/tinyxml/tinystr.cpp
vendored
|
@ -1,111 +0,0 @@
|
||||||
/*
|
|
||||||
www.sourceforge.net/projects/tinyxml
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any
|
|
||||||
damages arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any
|
|
||||||
purpose, including commercial applications, and to alter it and
|
|
||||||
redistribute it freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must
|
|
||||||
not claim that you wrote the original software. If you use this
|
|
||||||
software in a product, an acknowledgment in the product documentation
|
|
||||||
would be appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and
|
|
||||||
must not be misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef TIXML_USE_STL
|
|
||||||
|
|
||||||
#include "tinystr.h"
|
|
||||||
|
|
||||||
// Error value for find primitive
|
|
||||||
const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1);
|
|
||||||
|
|
||||||
|
|
||||||
// Null rep.
|
|
||||||
TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } };
|
|
||||||
|
|
||||||
|
|
||||||
void TiXmlString::reserve (size_type cap)
|
|
||||||
{
|
|
||||||
if (cap > capacity())
|
|
||||||
{
|
|
||||||
TiXmlString tmp;
|
|
||||||
tmp.init(length(), cap);
|
|
||||||
memcpy(tmp.start(), data(), length());
|
|
||||||
swap(tmp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TiXmlString& TiXmlString::assign(const char* str, size_type len)
|
|
||||||
{
|
|
||||||
size_type cap = capacity();
|
|
||||||
if (len > cap || cap > 3*(len + 8))
|
|
||||||
{
|
|
||||||
TiXmlString tmp;
|
|
||||||
tmp.init(len);
|
|
||||||
memcpy(tmp.start(), str, len);
|
|
||||||
swap(tmp);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memmove(start(), str, len);
|
|
||||||
set_size(len);
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TiXmlString& TiXmlString::append(const char* str, size_type len)
|
|
||||||
{
|
|
||||||
size_type newsize = length() + len;
|
|
||||||
if (newsize > capacity())
|
|
||||||
{
|
|
||||||
reserve (newsize + capacity());
|
|
||||||
}
|
|
||||||
memmove(finish(), str, len);
|
|
||||||
set_size(newsize);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TiXmlString operator + (const TiXmlString & a, const TiXmlString & b)
|
|
||||||
{
|
|
||||||
TiXmlString tmp;
|
|
||||||
tmp.reserve(a.length() + b.length());
|
|
||||||
tmp += a;
|
|
||||||
tmp += b;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
TiXmlString operator + (const TiXmlString & a, const char* b)
|
|
||||||
{
|
|
||||||
TiXmlString tmp;
|
|
||||||
TiXmlString::size_type b_len = static_cast<TiXmlString::size_type>( strlen(b) );
|
|
||||||
tmp.reserve(a.length() + b_len);
|
|
||||||
tmp += a;
|
|
||||||
tmp.append(b, b_len);
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
TiXmlString operator + (const char* a, const TiXmlString & b)
|
|
||||||
{
|
|
||||||
TiXmlString tmp;
|
|
||||||
TiXmlString::size_type a_len = static_cast<TiXmlString::size_type>( strlen(a) );
|
|
||||||
tmp.reserve(a_len + b.length());
|
|
||||||
tmp.append(a, a_len);
|
|
||||||
tmp += b;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // TIXML_USE_STL
|
|
305
third_party/tinyxml/tinystr.h
vendored
305
third_party/tinyxml/tinystr.h
vendored
|
@ -1,305 +0,0 @@
|
||||||
/*
|
|
||||||
www.sourceforge.net/projects/tinyxml
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any
|
|
||||||
damages arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any
|
|
||||||
purpose, including commercial applications, and to alter it and
|
|
||||||
redistribute it freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must
|
|
||||||
not claim that you wrote the original software. If you use this
|
|
||||||
software in a product, an acknowledgment in the product documentation
|
|
||||||
would be appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and
|
|
||||||
must not be misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef TIXML_USE_STL
|
|
||||||
|
|
||||||
#ifndef TIXML_STRING_INCLUDED
|
|
||||||
#define TIXML_STRING_INCLUDED
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
/* The support for explicit isn't that universal, and it isn't really
|
|
||||||
required - it is used to check that the TiXmlString class isn't incorrectly
|
|
||||||
used. Be nice to old compilers and macro it here:
|
|
||||||
*/
|
|
||||||
#if defined(_MSC_VER) && (_MSC_VER >= 1200 )
|
|
||||||
// Microsoft visual studio, version 6 and higher.
|
|
||||||
#define TIXML_EXPLICIT explicit
|
|
||||||
#elif defined(__GNUC__) && (__GNUC__ >= 3 )
|
|
||||||
// GCC version 3 and higher.s
|
|
||||||
#define TIXML_EXPLICIT explicit
|
|
||||||
#else
|
|
||||||
#define TIXML_EXPLICIT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
TiXmlString is an emulation of a subset of the std::string template.
|
|
||||||
Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.
|
|
||||||
Only the member functions relevant to the TinyXML project have been implemented.
|
|
||||||
The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase
|
|
||||||
a string and there's no more room, we allocate a buffer twice as big as we need.
|
|
||||||
*/
|
|
||||||
class TiXmlString
|
|
||||||
{
|
|
||||||
public :
|
|
||||||
// The size type used
|
|
||||||
typedef size_t size_type;
|
|
||||||
|
|
||||||
// Error value for find primitive
|
|
||||||
static const size_type npos; // = -1;
|
|
||||||
|
|
||||||
|
|
||||||
// TiXmlString empty constructor
|
|
||||||
TiXmlString () : rep_(&nullrep_)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// TiXmlString copy constructor
|
|
||||||
TiXmlString ( const TiXmlString & copy) : rep_(0)
|
|
||||||
{
|
|
||||||
init(copy.length());
|
|
||||||
memcpy(start(), copy.data(), length());
|
|
||||||
}
|
|
||||||
|
|
||||||
// TiXmlString constructor, based on a string
|
|
||||||
TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0)
|
|
||||||
{
|
|
||||||
init( static_cast<size_type>( strlen(copy) ));
|
|
||||||
memcpy(start(), copy, length());
|
|
||||||
}
|
|
||||||
|
|
||||||
// TiXmlString constructor, based on a string
|
|
||||||
TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0)
|
|
||||||
{
|
|
||||||
init(len);
|
|
||||||
memcpy(start(), str, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TiXmlString destructor
|
|
||||||
~TiXmlString ()
|
|
||||||
{
|
|
||||||
quit();
|
|
||||||
}
|
|
||||||
|
|
||||||
TiXmlString& operator = (const char * copy)
|
|
||||||
{
|
|
||||||
return assign( copy, (size_type)strlen(copy));
|
|
||||||
}
|
|
||||||
|
|
||||||
TiXmlString& operator = (const TiXmlString & copy)
|
|
||||||
{
|
|
||||||
return assign(copy.start(), copy.length());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// += operator. Maps to append
|
|
||||||
TiXmlString& operator += (const char * suffix)
|
|
||||||
{
|
|
||||||
return append(suffix, static_cast<size_type>( strlen(suffix) ));
|
|
||||||
}
|
|
||||||
|
|
||||||
// += operator. Maps to append
|
|
||||||
TiXmlString& operator += (char single)
|
|
||||||
{
|
|
||||||
return append(&single, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// += operator. Maps to append
|
|
||||||
TiXmlString& operator += (const TiXmlString & suffix)
|
|
||||||
{
|
|
||||||
return append(suffix.data(), suffix.length());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Convert a TiXmlString into a null-terminated char *
|
|
||||||
const char * c_str () const { return rep_->str; }
|
|
||||||
|
|
||||||
// Convert a TiXmlString into a char * (need not be null terminated).
|
|
||||||
const char * data () const { return rep_->str; }
|
|
||||||
|
|
||||||
// Return the length of a TiXmlString
|
|
||||||
size_type length () const { return rep_->size; }
|
|
||||||
|
|
||||||
// Alias for length()
|
|
||||||
size_type size () const { return rep_->size; }
|
|
||||||
|
|
||||||
// Checks if a TiXmlString is empty
|
|
||||||
bool empty () const { return rep_->size == 0; }
|
|
||||||
|
|
||||||
// Return capacity of string
|
|
||||||
size_type capacity () const { return rep_->capacity; }
|
|
||||||
|
|
||||||
|
|
||||||
// single char extraction
|
|
||||||
const char& at (size_type index) const
|
|
||||||
{
|
|
||||||
assert( index < length() );
|
|
||||||
return rep_->str[ index ];
|
|
||||||
}
|
|
||||||
|
|
||||||
// [] operator
|
|
||||||
char& operator [] (size_type index) const
|
|
||||||
{
|
|
||||||
assert( index < length() );
|
|
||||||
return rep_->str[ index ];
|
|
||||||
}
|
|
||||||
|
|
||||||
// find a char in a string. Return TiXmlString::npos if not found
|
|
||||||
size_type find (char lookup) const
|
|
||||||
{
|
|
||||||
return find(lookup, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// find a char in a string from an offset. Return TiXmlString::npos if not found
|
|
||||||
size_type find (char tofind, size_type offset) const
|
|
||||||
{
|
|
||||||
if (offset >= length()) return npos;
|
|
||||||
|
|
||||||
for (const char* p = c_str() + offset; *p != '\0'; ++p)
|
|
||||||
{
|
|
||||||
if (*p == tofind) return static_cast< size_type >( p - c_str() );
|
|
||||||
}
|
|
||||||
return npos;
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear ()
|
|
||||||
{
|
|
||||||
//Lee:
|
|
||||||
//The original was just too strange, though correct:
|
|
||||||
// TiXmlString().swap(*this);
|
|
||||||
//Instead use the quit & re-init:
|
|
||||||
quit();
|
|
||||||
init(0,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Function to reserve a big amount of data when we know we'll need it. Be aware that this
|
|
||||||
function DOES NOT clear the content of the TiXmlString if any exists.
|
|
||||||
*/
|
|
||||||
void reserve (size_type cap);
|
|
||||||
|
|
||||||
TiXmlString& assign (const char* str, size_type len);
|
|
||||||
|
|
||||||
TiXmlString& append (const char* str, size_type len);
|
|
||||||
|
|
||||||
void swap (TiXmlString& other)
|
|
||||||
{
|
|
||||||
Rep* r = rep_;
|
|
||||||
rep_ = other.rep_;
|
|
||||||
other.rep_ = r;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
void init(size_type sz) { init(sz, sz); }
|
|
||||||
void set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\0'; }
|
|
||||||
char* start() const { return rep_->str; }
|
|
||||||
char* finish() const { return rep_->str + rep_->size; }
|
|
||||||
|
|
||||||
struct Rep
|
|
||||||
{
|
|
||||||
size_type size, capacity;
|
|
||||||
char str[1];
|
|
||||||
};
|
|
||||||
|
|
||||||
void init(size_type sz, size_type cap)
|
|
||||||
{
|
|
||||||
if (cap)
|
|
||||||
{
|
|
||||||
// Lee: the original form:
|
|
||||||
// rep_ = static_cast<Rep*>(operator new(sizeof(Rep) + cap));
|
|
||||||
// doesn't work in some cases of new being overloaded. Switching
|
|
||||||
// to the normal allocation, although use an 'int' for systems
|
|
||||||
// that are overly picky about structure alignment.
|
|
||||||
const size_type bytesNeeded = sizeof(Rep) + cap;
|
|
||||||
const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int );
|
|
||||||
rep_ = reinterpret_cast<Rep*>( new int[ intsNeeded ] );
|
|
||||||
|
|
||||||
rep_->str[ rep_->size = sz ] = '\0';
|
|
||||||
rep_->capacity = cap;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rep_ = &nullrep_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void quit()
|
|
||||||
{
|
|
||||||
if (rep_ != &nullrep_)
|
|
||||||
{
|
|
||||||
// The rep_ is really an array of ints. (see the allocator, above).
|
|
||||||
// Cast it back before delete, so the compiler won't incorrectly call destructors.
|
|
||||||
delete [] ( reinterpret_cast<int*>( rep_ ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rep * rep_;
|
|
||||||
static Rep nullrep_;
|
|
||||||
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
inline bool operator == (const TiXmlString & a, const TiXmlString & b)
|
|
||||||
{
|
|
||||||
return ( a.length() == b.length() ) // optimization on some platforms
|
|
||||||
&& ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare
|
|
||||||
}
|
|
||||||
inline bool operator < (const TiXmlString & a, const TiXmlString & b)
|
|
||||||
{
|
|
||||||
return strcmp(a.c_str(), b.c_str()) < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); }
|
|
||||||
inline bool operator > (const TiXmlString & a, const TiXmlString & b) { return b < a; }
|
|
||||||
inline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); }
|
|
||||||
inline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); }
|
|
||||||
|
|
||||||
inline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; }
|
|
||||||
inline bool operator == (const char* a, const TiXmlString & b) { return b == a; }
|
|
||||||
inline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); }
|
|
||||||
inline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); }
|
|
||||||
|
|
||||||
TiXmlString operator + (const TiXmlString & a, const TiXmlString & b);
|
|
||||||
TiXmlString operator + (const TiXmlString & a, const char* b);
|
|
||||||
TiXmlString operator + (const char* a, const TiXmlString & b);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.
|
|
||||||
Only the operators that we need for TinyXML have been developped.
|
|
||||||
*/
|
|
||||||
class TiXmlOutStream : public TiXmlString
|
|
||||||
{
|
|
||||||
public :
|
|
||||||
|
|
||||||
// TiXmlOutStream << operator.
|
|
||||||
TiXmlOutStream & operator << (const TiXmlString & in)
|
|
||||||
{
|
|
||||||
*this += in;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TiXmlOutStream << operator.
|
|
||||||
TiXmlOutStream & operator << (const char * in)
|
|
||||||
{
|
|
||||||
*this += in;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
} ;
|
|
||||||
|
|
||||||
#endif // TIXML_STRING_INCLUDED
|
|
||||||
#endif // TIXML_USE_STL
|
|
1886
third_party/tinyxml/tinyxml.cpp
vendored
1886
third_party/tinyxml/tinyxml.cpp
vendored
File diff suppressed because it is too large
Load diff
1805
third_party/tinyxml/tinyxml.h
vendored
1805
third_party/tinyxml/tinyxml.h
vendored
File diff suppressed because it is too large
Load diff
52
third_party/tinyxml/tinyxmlerror.cpp
vendored
52
third_party/tinyxml/tinyxmlerror.cpp
vendored
|
@ -1,52 +0,0 @@
|
||||||
/*
|
|
||||||
www.sourceforge.net/projects/tinyxml
|
|
||||||
Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com)
|
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
|
||||||
warranty. In no event will the authors be held liable for any
|
|
||||||
damages arising from the use of this software.
|
|
||||||
|
|
||||||
Permission is granted to anyone to use this software for any
|
|
||||||
purpose, including commercial applications, and to alter it and
|
|
||||||
redistribute it freely, subject to the following restrictions:
|
|
||||||
|
|
||||||
1. The origin of this software must not be misrepresented; you must
|
|
||||||
not claim that you wrote the original software. If you use this
|
|
||||||
software in a product, an acknowledgment in the product documentation
|
|
||||||
would be appreciated but is not required.
|
|
||||||
|
|
||||||
2. Altered source versions must be plainly marked as such, and
|
|
||||||
must not be misrepresented as being the original software.
|
|
||||||
|
|
||||||
3. This notice may not be removed or altered from any source
|
|
||||||
distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "tinyxml.h"
|
|
||||||
|
|
||||||
// The goal of the seperate error file is to make the first
|
|
||||||
// step towards localization. tinyxml (currently) only supports
|
|
||||||
// english error messages, but the could now be translated.
|
|
||||||
//
|
|
||||||
// It also cleans up the code a bit.
|
|
||||||
//
|
|
||||||
|
|
||||||
const char* TiXmlBase::errorString[ TiXmlBase::TIXML_ERROR_STRING_COUNT ] =
|
|
||||||
{
|
|
||||||
"No error",
|
|
||||||
"Error",
|
|
||||||
"Failed to open file",
|
|
||||||
"Error parsing Element.",
|
|
||||||
"Failed to read Element name",
|
|
||||||
"Error reading Element value.",
|
|
||||||
"Error reading Attributes.",
|
|
||||||
"Error: empty tag.",
|
|
||||||
"Error reading end tag.",
|
|
||||||
"Error parsing Unknown.",
|
|
||||||
"Error parsing Comment.",
|
|
||||||
"Error parsing Declaration.",
|
|
||||||
"Error document empty.",
|
|
||||||
"Error null (0) or unexpected EOF found in input stream.",
|
|
||||||
"Error parsing CDATA.",
|
|
||||||
"Error when TiXmlDocument added to document, because TiXmlDocument can only be at the root.",
|
|
||||||
};
|
|
1638
third_party/tinyxml/tinyxmlparser.cpp
vendored
1638
third_party/tinyxml/tinyxmlparser.cpp
vendored
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue