--- a/xmlreaderimpl/trunk/Make.proto Mon Oct 27 07:54:02 2008 +0000
+++ b/xmlreaderimpl/trunk/Make.proto Mon Oct 27 20:33:16 2008 +0000
@@ -58,14 +58,15 @@
# ********** OPTIONAL: MODIFY the next line ***
# additional C-libraries that should be pre-linked with the class-objects
-LD_OBJ_LIBS=-lexpat
-OTHERLIBS=-lexpat
-LOCAL_SHARED_LIBS=-lexpat
+LD_OBJ_LIBS=
# ********** OPTIONAL: MODIFY the next line ***
# additional C targets or libraries should be added below
LOCAL_EXTRA_TARGETS=
+LOCAL_SHARED_LIBS=-lexpat
+LDFLAGS+=-static
+
all:: preMake classLibRule postMake
@@ -94,7 +95,8 @@
XMLv2__ExpatXMLReader.$(SO): XMLv2__ExpatXMLReader.$(O)
- $(MAKE) $(SHAREDLIBRULE) LIB=XMLv2__ExpatXMLReader.$(SO) OBJS="XMLv2__ExpatXMLReader.$(O)" LOCAL_SHARED_LIBS="-lexpat"
+ ld -nostdlib -shared -static -L/usr/lib -Llib -L/usr/local/lib -L/usr/X11/lib -R.,-Rlib,-R/opt/stx/`cat ../../../RELEASE`/lib/lib,-R/usr/local/lib/stx`cat ../../../RELEASE` -o XMLv2__ExpatXMLReader.so XMLv2__ExpatXMLReader.o -lexpat
+
--- a/xmlreaderimpl/trunk/Make.spec Mon Oct 27 07:54:02 2008 +0000
+++ b/xmlreaderimpl/trunk/Make.spec Mon Oct 27 20:33:16 2008 +0000
@@ -58,7 +58,6 @@
STCWARNINGS=
OBJS= \
- extensions.$(O) \
stx_goodies_xmlsuite_xmlreaderimpl.$(O) \
XMLv2__ExpatXMLReader.$(O) \
XMLv2__VWSAXBuilder.$(O) \
Binary file xmlreaderimpl/trunk/XMLv2__ExpatXMLReader.so has changed
--- a/xmlreaderimpl/trunk/XMLv2__ExpatXMLReader.st Mon Oct 27 07:54:02 2008 +0000
+++ b/xmlreaderimpl/trunk/XMLv2__ExpatXMLReader.st Mon Oct 27 20:33:16 2008 +0000
@@ -22,11 +22,10 @@
#define CHUNK_SIZE 8192
-#ifdef DEBUG
# define EXPAT_DEBUG(args) printf("ExpatXMLReader [debug]") ; printf args
-#else
+/*
# define EXPAT_DEBUG(args)
-#endif
+*/
#define EXPAT_DEBUG_ENTER EXPAT_DEBUG((" Entering %s\n",__PRETTY_FUNCTION__))
#define EXPAT_DEBUG_LEAVE EXPAT_DEBUG((" Leaving %s\n",__PRETTY_FUNCTION__))
@@ -206,6 +205,44 @@
EXPAT_DEBUG_LEAVE;
}
+static int XMLCALL
+unknownEncodingHandler(void *readerPointer,
+ const XML_Char *name,
+ XML_Encoding *info)
+{
+ OBJ reader;
+ OBJ mapArray;
+ int i;
+ int size;
+ EXPAT_DEBUG_ENTER;
+ reader = **(OBJ**)readerPointer;
+ EXPAT_DEBUG((" Unknown encoding %s encountered\n"));
+ mapArray = __SSEND1(reader, @symbol(expatUnknownEncoding:), 0, __MKSTRING(name));
+ if (! __isArray(mapArray)) goto error;
+ EXPAT_DEBUG((" Got map!\n"));
+ size = (256 < __arraySize(mapArray) ? 256 : __arraySize(mapArray));
+ for (i = 0; i < size; i++) {
+ if (__isInteger(__ArrayInstPtr(mapArray)->a_element[i])) {
+ info->map[i] = __intVal(__ArrayInstPtr(mapArray)->a_element[i]);
+ EXPAT_DEBUG((" map[%d] = %d;\n", i, info->map[i]));
+ } else {
+ EXPAT_DEBUG((" Non-integer value in the map array!"));
+ goto error;
+ }
+ }
+ info->convert = NULL;
+ info->release = NULL;
+ EXPAT_DEBUG((" OK, return 1\n"));
+ EXPAT_DEBUG_LEAVE;
+ return 1;
+ error:
+ EXPAT_DEBUG((" FAIL, return 0\n"));
+ EXPAT_DEBUG_LEAVE;
+ return 0;
+
+}
+
+
%}
! !
@@ -267,6 +304,19 @@
!ExpatXMLReader methodsFor:'expat events'!
+expatUnknownEncoding: aString
+
+ | encoder |
+ encoder := CharacterEncoder encoderFor: aString.
+ (encoder isKindOf: CharacterEncoderImplementations::SingleByteEncoder)
+ ifFalse:[^nil "multibyte encoders not supported"].
+ ^( ( 0 to: 255 ) collect: [:c|encoder decode:c] ) asArray
+
+ "Modified: / 27-10-2008 / 19:09:57 / Jan Vrany <vranyj1@fel.cvut.cz>"
+
+!
+
+
expatCharacters:aString
| handler |
@@ -450,6 +500,7 @@
XML_SetStartCdataSectionHandler(p, startCDataSection);
XML_SetEndCdataSectionHandler(p, endCDataSection);
XML_SetXmlDeclHandler(p, xmlProlog);
+ XML_SetUnknownEncodingHandler(p, unknownEncodingHandler, data);
XML_SetReturnNSTriplet(p,1);
/* Store parser into instance variable */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xmlreaderimpl/trunk/bc.def Mon Oct 27 20:33:16 2008 +0000
@@ -0,0 +1,6 @@
+LIBRARY xmlreaderimpl
+CODE PRELOAD MOVEABLE DISCARDABLE
+SEGMENTS
+ INITCODE PRELOAD DISCARDABLE
+EXPORTS
+ _xmlreaderimpl_Init @1
--- a/xmlreaderimpl/trunk/stx_goodies_xmlsuite_xmlreaderimpl.st Mon Oct 27 07:54:02 2008 +0000
+++ b/xmlreaderimpl/trunk/stx_goodies_xmlsuite_xmlreaderimpl.st Mon Oct 27 20:33:16 2008 +0000
@@ -18,16 +18,15 @@
!
postLoadAction
- | expatLibraryName |
- OperatingSystem isUNIXlike ifTrue:
- [expatLibraryName := 'XMLv2__ExpatXMLReader.so'].
- OperatingSystem isMSWINDOWSlike ifTrue:
- [expatLibraryName := 'XMLv2__ExpatXMLReader.dll'].
+ | expatXMLReaderLibName expatXMLReaderLib |
+ expatXMLReaderLibName := 'XMLv2__ExpatXMLReader' ,
+ ObjectFileLoader sharedLibraryExtension.
+ expatXMLReaderLib :=
+ (Smalltalk getPackageDirectoryForPackage: self package)
+ construct: expatXMLReaderLibName.
+ expatXMLReaderLib exists
+ ifTrue:[ObjectFileLoader loadObjectFile: expatXMLReaderLib nameString].
- ((Smalltalk getPackageDirectoryForPackage:'stx:goodies/xmlsuite/xmlreaderimpl')
- construct: expatLibraryName) exists ifTrue:
- [expatLibraryName := ((Smalltalk getPackageDirectoryForPackage:'stx:goodies/xmlsuite/xmlreaderimpl')
- construct: expatLibraryName)].
!
preRequisites