Compare commits

...

17 Commits

Author SHA1 Message Date
Laurence Withers 0a86b2d57f Release 1.2.8 (split out libCStreamedXML) 2006-11-23 00:17:46 +00:00
Laurence Withers f7fe4bb787 Another bugfix for entity lookups 2006-10-26 11:45:11 +01:00
Laurence Withers 2f2e07b2e2 Bump version 2006-10-26 11:32:34 +01:00
Laurence Withers 593bb8d80c Fix error where first character of entity name in entity reference was
sent to the wrong buffer, and ended up in content rather than entity
name.
2006-10-26 11:32:08 +01:00
Laurence Withers bf2ca8d925 Bump version 2006-10-04 10:48:15 +01:00
Laurence Withers d46aaf2b2e Doc fix. 2006-10-04 10:47:52 +01:00
Laurence Withers 9a33766c62 Further to the previous fix, don't clear the content buffer afetr an open/close tag
callback -- clear it before. This stops included content from being lost.
2006-10-04 10:47:19 +01:00
Laurence Withers a24d2caad2 Bump version. 2006-09-29 10:56:50 +01:00
Laurence Withers 25af0958a6 Merge branch 'master' of tourmaline:git/libStreamedXML 2006-09-29 10:51:41 +01:00
Laurence Withers 71fda14981 Update internal state before callback; that way, if during the callback we inject some more data
into the parser (e.g. it's an <include> tag or something), the parser is in the correct state.
2006-09-29 10:51:10 +01:00
Laurence Withers f1fa8b5625 Fix a bug where two separate '-' characters in a comment were interpreted as a single '--' sequence. 2006-09-29 10:41:01 +01:00
Laurence Withers 8e3798dbbc Add cast for printf() 2006-09-08 14:04:46 +01:00
Laurence Withers c2d02165d7 Edit pkgconf file, bump version. 2006-08-25 10:43:56 +01:00
Laurence Withers 0cc4d09d65 Upgrade to new build system. 2006-08-25 10:42:32 +01:00
Laurence Withers a2ca4f8122 Add user pointer, bump version. 2006-08-08 14:51:50 +01:00
Laurence Withers 4533df2947 Add in libCStreamedXML and a test program for it. 2006-08-08 12:19:08 +01:00
Laurence Withers dc6a4cf430 Fix bug: in a PI such as <?test ?pi?>, we got into an incorrect state
on the second ?. This is now properly handled.
2006-08-07 12:51:11 +01:00
8 changed files with 41 additions and 28 deletions

8
README
View File

@ -1,4 +1,4 @@
libStreamedXML libStreamedXML http://www.lwithers.me.uk/projects/libStreamedXML/
======================================================================== ========================================================================
(c)2006, Laurence Withers, <l@lwithers.me.uk>. (c)2006, Laurence Withers, <l@lwithers.me.uk>.
Released under the GNU GPLv2. See file COPYING or Released under the GNU GPLv2. See file COPYING or
@ -11,4 +11,8 @@ To build: ./make.sh
To install: ./make.sh install To install: ./make.sh install
(you might want to set PREFIX, by default it's /usr/local) (you might want to set PREFIX, by default it's /usr/local)
@TODO@ Dependencies
------------
libutf8++
http://www.lwithers.me.uk/projects/libutf8++/

View File

@ -64,6 +64,7 @@ OUTPUT_DIRS="obj html"
# none no special processing happens before each file # none no special processing happens before each file
# C #line directives are inserted before each file # C #line directives are inserted before each file
# and VERSION, VERMAJOR etc. are #defined # and VERSION, VERMAJOR etc. are #defined
# Ch Like C, but for header files (no VERSION #defines)
# #
make_monolithic() { make_monolithic() {
if [ $# -ne 2 ] if [ $# -ne 2 ]
@ -82,6 +83,9 @@ make_monolithic() {
then then
HASHLINE=1 HASHLINE=1
VERDEFINE=1 VERDEFINE=1
elif [ "$2" == "Ch" ]
then
HASHLINE=1
elif [ "$2" == "none" ] elif [ "$2" == "none" ]
then then
HASHLINE=0 # dummy command HASHLINE=0 # dummy command
@ -261,7 +265,7 @@ else
targets="$@" targets="$@"
fi fi
for func in "${targets}" for func in ${targets}
do do
case ${func} in case ${func} in
clean) clean)

1
scripts/.gitignore vendored
View File

@ -1,5 +1,6 @@
build.c++.app build.c++.app
build.c++.lib build.c++.lib
build.c++.qtapp
build.c++.tests build.c++.tests
build.c.app build.c.app
build.c.lib build.c.lib

View File

@ -163,26 +163,26 @@ doBuffer:
break; break;
case ClassOpenTag: case ClassOpenTag:
if(!buffer.empty()) callback->whiteSpace(buffer);
state = StateOpen; state = StateOpen;
if(!buffer.empty()) callback->whiteSpace(buffer);
buffer.clear(); buffer.clear();
break; break;
case ClassEntity: case ClassEntity:
if(expandEntities) { if(expandEntities) {
if(!elementDepth) ERROR(L"Entities cannot appear at stream level."); if(!elementDepth) ERROR(L"Entities cannot appear at stream level.");
state = StateEntity;
if(!buffer.empty()) callback->whiteSpace(buffer); if(!buffer.empty()) callback->whiteSpace(buffer);
buffer.clear(); buffer.clear();
parsingAttr = false; parsingAttr = false;
state = StateEntity;
break; break;
} }
// fall through // fall through
default: default:
if(!elementDepth) ERROR(L"Content cannot appear at stream level."); if(!elementDepth) ERROR(L"Content cannot appear at stream level.");
if(!buffer.empty()) callback->whiteSpace(buffer);
state = StateData; state = StateData;
if(!buffer.empty()) callback->whiteSpace(buffer);
buffer = ch; buffer = ch;
break; break;
} }
@ -191,16 +191,16 @@ doBuffer:
case StateData: case StateData:
switch(c) { switch(c) {
case ClassOpenTag: case ClassOpenTag:
state = StateOpen;
callback->content(buffer); callback->content(buffer);
buffer.clear(); buffer.clear();
state = StateOpen;
break; break;
case ClassEntity: case ClassEntity:
state = StateEntity;
callback->content(buffer); callback->content(buffer);
buffer.clear(); buffer.clear();
parsingAttr = false; parsingAttr = false;
state = StateEntity;
break; break;
default: default:
@ -225,9 +225,9 @@ doBuffer:
case StateCDATA2: case StateCDATA2:
if(ch == L'>') { if(ch == L'>') {
state = StateNone;
callback->cdata(buffer); callback->cdata(buffer);
buffer.clear(); buffer.clear();
state = StateNone;
} else if(ch == L']') { } else if(ch == L']') {
buffer += ch; buffer += ch;
} else { } else {
@ -298,9 +298,9 @@ doBuffer:
case StatePI2: case StatePI2:
if(ch != L'>') ERROR(L"Invalid target for PI"); if(ch != L'>') ERROR(L"Invalid target for PI");
else { else {
state = StateNone;
callback->PI(buffer2, L""); callback->PI(buffer2, L"");
buffer.clear(); buffer.clear();
state = StateNone;
} }
break; break;
@ -311,12 +311,15 @@ doBuffer:
case StatePI3: case StatePI3:
if(ch == L'>') { if(ch == L'>') {
state = StateNone;
callback->PI(buffer2, buffer); callback->PI(buffer2, buffer);
buffer.clear(); buffer.clear();
state = StateNone; } else if(ch == '?') {
buffer += L'?';
} else { } else {
buffer += L'?'; buffer += L'?';
buffer += ch; buffer += ch;
state = StatePIData;
} }
break; break;
@ -351,14 +354,15 @@ doBuffer:
else { else {
buffer += L'-'; buffer += L'-';
buffer += ch; buffer += ch;
state = StateComment;
} }
break; break;
case StateComment3: case StateComment3:
if(ch != L'>') ERROR(L"`--' not valid in comments"); if(ch != L'>') ERROR(L"`--' not valid in comments");
state = StateNone;
callback->comment(buffer); callback->comment(buffer);
buffer.clear(); buffer.clear();
state = StateNone;
break; break;
case StateElemName: case StateElemName:
@ -378,10 +382,10 @@ doBuffer:
switch(ch) { switch(ch) {
case L'>': case L'>':
elemStack.push_back(buffer); elemStack.push_back(buffer);
callback->element(buffer, elemAttrs);
state = StateNone; state = StateNone;
++elementDepth;
buffer.clear(); buffer.clear();
callback->element(buffer, elemAttrs);
++elementDepth;
break; break;
case L'/': case L'/':
@ -408,9 +412,9 @@ doBuffer:
switch(ch) { switch(ch) {
case L'>': case L'>':
elemStack.push_back(elemName); elemStack.push_back(elemName);
callback->element(elemName, elemAttrs);
buffer.clear();
state = StateNone; state = StateNone;
buffer.clear();
callback->element(elemName, elemAttrs);
++elementDepth; ++elementDepth;
break; break;
@ -470,10 +474,10 @@ doBuffer:
if(ch == L'/') { if(ch == L'/') {
state = StateNeedClose; state = StateNeedClose;
} else if(ch == L'>') { } else if(ch == L'>') {
state = StateNone;
buffer.clear();
callback->element(elemName, elemAttrs); callback->element(elemName, elemAttrs);
elemStack.push_back(elemName); elemStack.push_back(elemName);
buffer.clear();
state = StateNone;
++elementDepth; ++elementDepth;
} else ERROR(L"Invalid character after attribute."); } else ERROR(L"Invalid character after attribute.");
break; break;
@ -482,10 +486,10 @@ doBuffer:
case StateNeedClose: case StateNeedClose:
if(ch != L'>') ERROR(L"Stray `/' in open tag."); if(ch != L'>') ERROR(L"Stray `/' in open tag.");
state = StateNone;
buffer.clear();
callback->element(elemName, elemAttrs); callback->element(elemName, elemAttrs);
callback->closeTag(elemName); callback->closeTag(elemName);
buffer.clear();
state = StateNone;
break; break;
case StateClose: case StateClose:
@ -509,9 +513,9 @@ doBuffer:
if(ch != L'>') ERROR(L"Invalid character in close tag name."); if(ch != L'>') ERROR(L"Invalid character in close tag name.");
if(elemStack.back() != buffer) ERROR(L"Mismatched close tag."); if(elemStack.back() != buffer) ERROR(L"Mismatched close tag.");
elemStack.pop_back(); elemStack.pop_back();
callback->closeTag(buffer);
buffer.clear();
state = StateNone; state = StateNone;
buffer.clear();
callback->closeTag(buffer);
--elementDepth; --elementDepth;
} }
break; break;
@ -521,9 +525,9 @@ doBuffer:
if(ch != L'>') ERROR(L"Invalid data in close tag."); if(ch != L'>') ERROR(L"Invalid data in close tag.");
if(elemStack.back() != elemName) ERROR(L"Mismatched close tag."); if(elemStack.back() != elemName) ERROR(L"Mismatched close tag.");
elemStack.pop_back(); elemStack.pop_back();
callback->closeTag(elemName);
buffer.clear();
state = StateNone; state = StateNone;
buffer.clear();
callback->closeTag(elemName);
--elementDepth; --elementDepth;
break; break;

View File

@ -31,7 +31,7 @@ then
echo " Compiling" echo " Compiling"
SONAME="${libStreamedXML_BASE}.so.${SOMAJOR}.${SOMINOR}" SONAME="${libStreamedXML_BASE}.so.${SOMAJOR}.${SOMINOR}"
do_cmd ${CXX} ${CFLAGS} -shared -fpic -o "${libStreamedXML}" \ do_cmd ${CXX} ${CFLAGS} -Iobj -shared -fpic -o "${libStreamedXML}" \
-Wl,-soname,${SONAME} \ -Wl,-soname,${SONAME} \
${SRC} ${SO_EXTRA} || return 1 ${SRC} ${SO_EXTRA} || return 1

View File

@ -9,7 +9,7 @@ MONOLITHIC_TESTS="src/libStreamedXML/build.lib src/libStreamedXML/build.monolith
if [ -z "${libStreamedXML_MONOLITHIC}" ] if [ -z "${libStreamedXML_MONOLITHIC}" ]
then then
MONOLITHIC_SOURCE="$(echo src/libStreamedXML/{TopHeader,ForwardDeclare,Exceptions,Callback,Parser,Decoder,BottomHeader}.h)" MONOLITHIC_SOURCE="$(echo src/libStreamedXML/{TopHeader,ForwardDeclare,Exceptions,Callback,Parser,Decoder,BottomHeader}.h)"
make_monolithic ${HDR} C || return 1 make_monolithic ${HDR} Ch || return 1
MONOLITHIC_SOURCE="$(echo src/libStreamedXML/{TopSource,Exceptions,Parser,Decoder}.cpp)" MONOLITHIC_SOURCE="$(echo src/libStreamedXML/{TopSource,Exceptions,Parser,Decoder}.cpp)"
make_monolithic ${SRC} C || return 1 make_monolithic ${SRC} C || return 1

View File

@ -14,4 +14,4 @@ SOMAJOR=0
SOMINOR=1 SOMINOR=1
# SOMICRO is bumped every time there is a binary-compatible release. # SOMICRO is bumped every time there is a binary-compatible release.
SOMICRO=0 SOMICRO=3

View File

@ -12,7 +12,7 @@
# suffixed with a string. # suffixed with a string.
VERMAJOR=1 VERMAJOR=1
VERMINOR=2 VERMINOR=2
VERMICRO=0 VERMICRO=8
VEREXTRA="" VEREXTRA=""
# kate: replace-trailing-space-save true; space-indent true; tab-width 4; # kate: replace-trailing-space-save true; space-indent true; tab-width 4;