changeset 1391:ff977838d8b5

new package: tinyxml
author Alexandre Bacquart <tek512@gmail.com>
date Wed, 17 Nov 2010 14:32:50 +0100
parents 7fae546007a1
children d9e9cd58ca3a
files src/tinyxml-test.cpp src/tinyxml.mk
diffstat 2 files changed, 167 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tinyxml-test.cpp	Wed Nov 17 14:32:50 2010 +0100
@@ -0,0 +1,128 @@
+/* This file is part of mingw-cross-env.       */
+/* See doc/index.html for further information. */
+
+#include <iostream>
+#include <tinyxml.h>
+
+using namespace std;
+
+// ----------------------------------------------------------------------
+// STDOUT dump and indenting utility functions
+// ----------------------------------------------------------------------
+const unsigned int NUM_INDENTS_PER_SPACE=2;
+
+const char * getIndent( unsigned int numIndents )
+{
+	static const char * pINDENT="                                      + ";
+	static const unsigned int LENGTH=strlen( pINDENT );
+	unsigned int n=numIndents*NUM_INDENTS_PER_SPACE;
+	if ( n > LENGTH ) n = LENGTH;
+
+	return &pINDENT[ LENGTH-n ];
+}
+
+// same as getIndent but no "+" at the end
+const char * getIndentAlt( unsigned int numIndents )
+{
+	static const char * pINDENT="                                        ";
+	static const unsigned int LENGTH=strlen( pINDENT );
+	unsigned int n=numIndents*NUM_INDENTS_PER_SPACE;
+	if ( n > LENGTH ) n = LENGTH;
+
+	return &pINDENT[ LENGTH-n ];
+}
+
+int dump_attribs_to_stdout(TiXmlElement* pElement, unsigned int indent)
+{
+	if ( !pElement ) return 0;
+
+	TiXmlAttribute* pAttrib=pElement->FirstAttribute();
+	int i=0;
+	int ival;
+	double dval;
+	const char* pIndent=getIndent(indent);
+	printf("\n");
+	while (pAttrib)
+	{
+		printf( "%s%s: value=[%s]", pIndent, pAttrib->Name(), pAttrib->Value());
+
+		if (pAttrib->QueryIntValue(&ival)==TIXML_SUCCESS)    printf( " int=%d", ival);
+		if (pAttrib->QueryDoubleValue(&dval)==TIXML_SUCCESS) printf( " d=%1.1f", dval);
+		printf( "\n" );
+		i++;
+		pAttrib=pAttrib->Next();
+	}
+	return i;	
+}
+
+void dump_to_stdout(TiXmlNode* pParent, unsigned int indent = 0)
+{
+	if (!pParent)
+		return;
+
+	TiXmlNode* pChild;
+	TiXmlText* pText;
+	int t = pParent->Type();
+	printf("%s", getIndent(indent));
+	int num;
+
+	switch (t) {
+	case TiXmlNode::TINYXML_DOCUMENT:
+		printf("Document");
+		break;
+
+	case TiXmlNode::TINYXML_ELEMENT:
+		printf("Element [%s]", pParent->Value());
+		num=dump_attribs_to_stdout(pParent->ToElement(), indent+1);
+		switch(num) {
+			case 0:  printf(" (No attributes)"); break;
+			case 1:  printf("%s1 attribute", getIndentAlt(indent)); break;
+			default: printf("%s%d attributes", getIndentAlt(indent), num); break;
+		}
+		break;
+
+	case TiXmlNode::TINYXML_COMMENT:
+		printf("Comment: [%s]", pParent->Value());
+		break;
+
+	case TiXmlNode::TINYXML_UNKNOWN:
+		printf("Unknown" );
+		break;
+
+	case TiXmlNode::TINYXML_TEXT:
+		pText = pParent->ToText();
+		printf("Text: [%s]", pText->Value() );
+		break;
+
+	case TiXmlNode::TINYXML_DECLARATION:
+		printf("Declaration" );
+		break;
+	default:
+		break;
+	}
+	printf("\n");
+	for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling()) 
+	{
+		dump_to_stdout( pChild, indent+1 );
+	}
+}
+//=============================================================================
+int main(int argc, char *argv[])
+{
+	if (argc <= 1) {
+		cout << "Usage: tinyxml-test <xml-file>" << endl;
+		exit(1);
+	}
+
+	string fpn(argv[1]);
+	TiXmlDocument doc(fpn);
+	if (!doc.LoadFile()) {
+		cerr << "failed to load " << fpn << endl;
+		exit(1);
+	}
+
+	dump_to_stdout(&doc);
+
+    return 0;
+}
+//=============================================================================
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tinyxml.mk	Wed Nov 17 14:32:50 2010 +0100
@@ -0,0 +1,39 @@
+# This file is part of mingw-cross-env.
+# See doc/index.html for further information.
+
+# tinyxml
+PKG             := tinyxml
+$(PKG)_IGNORE   :=
+$(PKG)_VERSION  := 2_6_1
+$(PKG)_CHECKSUM := 2ff9c177a6c0bef10cbd27700b71826801c12987
+$(PKG)_SUBDIR   := tinyxml
+$(PKG)_FILE     := tinyxml_$($(PKG)_VERSION).tar.gz
+$(PKG)_WEBSITE  := http://sourceforge.net/projects/tinyxml/
+$(PKG)_URL      := http://$(SOURCEFORGE_MIRROR)/project/tinyxml/tinyxml/$(subst _,.,$($(PKG)_VERSION))/$($(PKG)_FILE)
+$(PKG)_DEPS     := gcc
+
+define $(PKG)_UPDATE
+    $(call SOURCEFORGE_FILES,http://sourceforge.net/projects/tinyxml/files/tinyxml/) | \
+    $(SED) -n 's,.*tinyxml_\([0-9][^>]*\)\.tar.*,\1,p' | \
+    tail -1
+endef
+
+define $(PKG)_BUILD
+    cd '$(1)' && \
+    $(TARGET)-g++ -c -O3 -Wall -Wno-unknown-pragmas -Wno-format -D TIXML_USE_STL -o tinyxml.o tinyxml.cpp && \
+    $(TARGET)-g++ -c -O3 -Wall -Wno-unknown-pragmas -Wno-format -D TIXML_USE_STL -o tinyxmlparser.o tinyxmlparser.cpp && \
+    $(TARGET)-g++ -c -O3 -Wall -Wno-unknown-pragmas -Wno-format -D TIXML_USE_STL -o tinyxmlerror.o tinyxmlerror.cpp && \
+    $(TARGET)-g++ -c -O3 -Wall -Wno-unknown-pragmas -Wno-format -D TIXML_USE_STL -o tinystr.o tinystr.cpp && \
+    $(TARGET)-g++ -c -O3 -Wall -Wno-unknown-pragmas -Wno-format -D TIXML_USE_STL -o tinyxmlerror.o tinyxmlerror.cpp && \
+    $(TARGET)-ar cr libtinyxml.a tinystr.o tinyxmlerror.o tinyxml.o tinyxmlparser.o
+    $(TARGET)-ranlib '$(1)/libtinyxml.a'
+    $(INSTALL) -d '$(PREFIX)/$(TARGET)/lib'
+    $(INSTALL) -m644 '$(1)/libtinyxml.a' '$(PREFIX)/$(TARGET)/lib/libtinyxml.a'
+    $(INSTALL) -d '$(PREFIX)/$(TARGET)/include'
+    $(INSTALL) -m644 '$(1)/tinyxml.h' '$(1)/tinystr.h' '$(PREFIX)/$(TARGET)/include/'
+
+    '$(TARGET)-g++' \
+        -W -Wall -D TIXML_USE_STL -Werror -ansi -pedantic \
+        '$(2).cpp' -o '$(PREFIX)/$(TARGET)/bin/test-tinyxml.exe' \
+        -I'$(PREFIX)/$(TARGET)/include/' -ltinyxml
+endef