Compare commits
No commits in common. "master" and "1.2.0" have entirely different histories.
8
README
8
README
|
@ -1,4 +1,4 @@
|
||||||
libStreamedXML http://www.lwithers.me.uk/projects/libStreamedXML/
|
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,8 +11,4 @@ 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)
|
||||||
|
|
||||||
Dependencies
|
@TODO@
|
||||||
------------
|
|
||||||
|
|
||||||
libutf8++
|
|
||||||
http://www.lwithers.me.uk/projects/libutf8++/
|
|
||||||
|
|
6
make.sh
6
make.sh
|
@ -64,7 +64,6 @@ 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 ]
|
||||||
|
@ -83,9 +82,6 @@ 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
|
||||||
|
@ -265,7 +261,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,6 +1,5 @@
|
||||||
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
|
||||||
|
|
|
@ -163,26 +163,26 @@ doBuffer:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ClassOpenTag:
|
case ClassOpenTag:
|
||||||
state = StateOpen;
|
|
||||||
if(!buffer.empty()) callback->whiteSpace(buffer);
|
if(!buffer.empty()) callback->whiteSpace(buffer);
|
||||||
|
state = StateOpen;
|
||||||
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.");
|
||||||
state = StateData;
|
|
||||||
if(!buffer.empty()) callback->whiteSpace(buffer);
|
if(!buffer.empty()) callback->whiteSpace(buffer);
|
||||||
|
state = StateData;
|
||||||
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,15 +311,12 @@ 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();
|
||||||
} else if(ch == '?') {
|
state = StateNone;
|
||||||
buffer += L'?';
|
|
||||||
} else {
|
} else {
|
||||||
buffer += L'?';
|
buffer += L'?';
|
||||||
buffer += ch;
|
buffer += ch;
|
||||||
state = StatePIData;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -354,15 +351,14 @@ 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:
|
||||||
|
@ -382,10 +378,10 @@ doBuffer:
|
||||||
switch(ch) {
|
switch(ch) {
|
||||||
case L'>':
|
case L'>':
|
||||||
elemStack.push_back(buffer);
|
elemStack.push_back(buffer);
|
||||||
state = StateNone;
|
|
||||||
buffer.clear();
|
|
||||||
callback->element(buffer, elemAttrs);
|
callback->element(buffer, elemAttrs);
|
||||||
|
state = StateNone;
|
||||||
++elementDepth;
|
++elementDepth;
|
||||||
|
buffer.clear();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case L'/':
|
case L'/':
|
||||||
|
@ -412,9 +408,9 @@ doBuffer:
|
||||||
switch(ch) {
|
switch(ch) {
|
||||||
case L'>':
|
case L'>':
|
||||||
elemStack.push_back(elemName);
|
elemStack.push_back(elemName);
|
||||||
state = StateNone;
|
|
||||||
buffer.clear();
|
|
||||||
callback->element(elemName, elemAttrs);
|
callback->element(elemName, elemAttrs);
|
||||||
|
buffer.clear();
|
||||||
|
state = StateNone;
|
||||||
++elementDepth;
|
++elementDepth;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -474,10 +470,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;
|
||||||
|
@ -486,10 +482,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:
|
||||||
|
@ -513,9 +509,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();
|
||||||
state = StateNone;
|
|
||||||
buffer.clear();
|
|
||||||
callback->closeTag(buffer);
|
callback->closeTag(buffer);
|
||||||
|
buffer.clear();
|
||||||
|
state = StateNone;
|
||||||
--elementDepth;
|
--elementDepth;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -525,9 +521,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();
|
||||||
state = StateNone;
|
|
||||||
buffer.clear();
|
|
||||||
callback->closeTag(elemName);
|
callback->closeTag(elemName);
|
||||||
|
buffer.clear();
|
||||||
|
state = StateNone;
|
||||||
--elementDepth;
|
--elementDepth;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -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} -Iobj -shared -fpic -o "${libStreamedXML}" \
|
do_cmd ${CXX} ${CFLAGS} -shared -fpic -o "${libStreamedXML}" \
|
||||||
-Wl,-soname,${SONAME} \
|
-Wl,-soname,${SONAME} \
|
||||||
${SRC} ${SO_EXTRA} || return 1
|
${SRC} ${SO_EXTRA} || return 1
|
||||||
|
|
||||||
|
|
|
@ -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} Ch || return 1
|
make_monolithic ${HDR} C || 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
|
||||||
|
|
|
@ -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=3
|
SOMICRO=0
|
||||||
|
|
2
version
2
version
|
@ -12,7 +12,7 @@
|
||||||
# suffixed with a string.
|
# suffixed with a string.
|
||||||
VERMAJOR=1
|
VERMAJOR=1
|
||||||
VERMINOR=2
|
VERMINOR=2
|
||||||
VERMICRO=8
|
VERMICRO=0
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue