extendions and corrections
This commit is contained in:
@@ -1,19 +1,19 @@
|
||||
./bootstrap.sh && \
|
||||
LDFLAGS="-L/usr/lib32 -m32" CXXFLAGS="-m32" ./configure \
|
||||
LDFLAGS="-L/usr/lib32 -m32" CXXFLAGS="-m32 $DBG" ./configure \
|
||||
--libdir=/usr/local/lib32 \
|
||||
--build=x86_64 \
|
||||
--host=i386 && \
|
||||
make && \
|
||||
sudo make install && \
|
||||
make clean && \
|
||||
./configure \
|
||||
CXXFLAGS="$DBG" ./configure \
|
||||
--prefix=/opt/local/i586-mingw32msvc \
|
||||
--build=x86_64 \
|
||||
--host=i586-mingw32msvc && \
|
||||
make && \
|
||||
sudo make install && \
|
||||
make clean && \
|
||||
./configure && \
|
||||
CXXFLAGS="$DBG" ./configure && \
|
||||
make check && \
|
||||
sudo make install
|
||||
|
||||
|
@@ -163,6 +163,13 @@ namespace xml {
|
||||
Node* _child;
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
class attribute_not_available: public exception {
|
||||
public:
|
||||
attribute_not_available(const Node& t, const std::string& attr) throw():
|
||||
exception("attribute \""+attr+"\" not set", t) {
|
||||
}
|
||||
};
|
||||
//----------------------------------------------------------------------------
|
||||
class stream_error: public exception {
|
||||
public:
|
||||
stream_error(const std::string& reason, const Node& t,
|
||||
@@ -248,7 +255,7 @@ namespace xml {
|
||||
once. This is corect: <code><node
|
||||
attribute="value"></code>, this is not allowed:
|
||||
<code><node attribute="value" attribute="value"></code> */
|
||||
class Attributes: public std::map<std::string, std::string> {
|
||||
class Attributes: public std::map<std::string, std::string> {
|
||||
public:
|
||||
//! Attributes may contain a list of space separated values.
|
||||
typedef std::vector<std::string> List;
|
||||
@@ -324,6 +331,8 @@ namespace xml {
|
||||
Node& attr(const std::string& name, bool mandatory) throw();
|
||||
std::string attr(const std::string& name) const throw();
|
||||
std::string& attr(const std::string& name) throw();
|
||||
const Attributes::Value attribute(const std::string& name)
|
||||
const throw(attribute_not_available);
|
||||
List list(const std::string& name) const throw();
|
||||
bool operator()(const std::string& child) const throw();
|
||||
Node& operator<<(const Node& o) throw(cannot_have_children);
|
||||
|
14
src/xml.cxx
14
src/xml.cxx
@@ -184,9 +184,13 @@ namespace xml {
|
||||
const throw() {
|
||||
List l;
|
||||
for (std::string::size_type it(0), pos(0);
|
||||
(pos=second.find_first_of(separators, it)), it!=std::string::npos;
|
||||
it!=std::string::npos &&
|
||||
((pos=second.find_first_of(separators, it)), true);
|
||||
it=pos!=std::string::npos?++pos:std::string::npos)
|
||||
l.push_back(std::string(second.begin()+it, second.begin()+pos));
|
||||
if (pos==std::string::npos)
|
||||
l.push_back(second.substr(it));
|
||||
else
|
||||
l.push_back(second.substr(it, pos-it));
|
||||
return l;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -312,6 +316,12 @@ namespace xml {
|
||||
std::string& Node::attr(const std::string& name) throw() {
|
||||
return _attributes[name];
|
||||
}
|
||||
const Attributes::Value Node::attribute(const std::string& name)
|
||||
const throw(attribute_not_available) {
|
||||
Attributes::const_iterator it(_attributes.find(name));
|
||||
if (it!=_attributes.end()) return *it;
|
||||
throw attribute_not_available(*this, name);
|
||||
}
|
||||
Node::List Node::list(const std::string& name) const throw() {
|
||||
List res;
|
||||
for (Contents::const_iterator it(_contents.begin());
|
||||
|
Reference in New Issue
Block a user