Support absolute paths for XML includes.
Use standard path resolver when searching for includes. Includes like <foo include="/Aircraft/Instruments/myfile.xml"> are now also supported - no need for <foo include="../../../Aircraft/Instruments/myfile.xml">.
This commit is contained in:
parent
c7152af191
commit
36a8243f73
@ -21,6 +21,7 @@
|
|||||||
#include <simgear/math/SGMath.hxx>
|
#include <simgear/math/SGMath.hxx>
|
||||||
#include <simgear/misc/sg_path.hxx>
|
#include <simgear/misc/sg_path.hxx>
|
||||||
#include <simgear/xml/easyxml.hxx>
|
#include <simgear/xml/easyxml.hxx>
|
||||||
|
#include <simgear/misc/ResourceManager.hxx>
|
||||||
|
|
||||||
#include "props.hxx"
|
#include "props.hxx"
|
||||||
#include "props_io.hxx"
|
#include "props_io.hxx"
|
||||||
@ -170,12 +171,15 @@ PropsVisitor::startElement (const char * name, const XMLAttributes &atts)
|
|||||||
// Check for an include.
|
// Check for an include.
|
||||||
attval = atts.getValue("include");
|
attval = atts.getValue("include");
|
||||||
if (attval != 0) {
|
if (attval != 0) {
|
||||||
SGPath path(SGPath(_base).dir());
|
|
||||||
path.append(attval);
|
|
||||||
try {
|
try {
|
||||||
readProperties(path.str(), _root, 0, _extended);
|
SGPath path = simgear::ResourceManager::instance()->findPath(attval, SGPath(_base).dir());
|
||||||
|
if (path.isNull())
|
||||||
|
{
|
||||||
|
throw sg_io_exception("Cannot open file", sg_location(attval));
|
||||||
|
}
|
||||||
|
readProperties(path.str(), _root, 0, _extended);
|
||||||
} catch (sg_io_exception &e) {
|
} catch (sg_io_exception &e) {
|
||||||
setException(e);
|
setException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,12 +246,15 @@ PropsVisitor::startElement (const char * name, const XMLAttributes &atts)
|
|||||||
bool omit = false;
|
bool omit = false;
|
||||||
attval = atts.getValue("include");
|
attval = atts.getValue("include");
|
||||||
if (attval != 0) {
|
if (attval != 0) {
|
||||||
SGPath path(SGPath(_base).dir());
|
|
||||||
path.append(attval);
|
|
||||||
try {
|
try {
|
||||||
readProperties(path.str(), node, 0, _extended);
|
SGPath path = simgear::ResourceManager::instance()->findPath(attval, SGPath(_base).dir());
|
||||||
|
if (path.isNull())
|
||||||
|
{
|
||||||
|
throw sg_io_exception("Cannot open file", sg_location(attval));
|
||||||
|
}
|
||||||
|
readProperties(path.str(), node, 0, _extended);
|
||||||
} catch (sg_io_exception &e) {
|
} catch (sg_io_exception &e) {
|
||||||
setException(e);
|
setException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
attval = atts.getValue("omit-node");
|
attval = atts.getValue("omit-node");
|
||||||
|
Loading…
Reference in New Issue
Block a user