improved validation on template priority value

This commit is contained in:
jez 2009-01-03 21:41:26 +00:00
parent bd49423c2d
commit c7a3f9be3f
2 changed files with 8 additions and 4 deletions

View file

@ -60,6 +60,10 @@ protected:
throw SAX::SAXException("xsl:template may not have a mode without a match");
} // ...
const std::string& priority = attributes["priority"];
if((atts.getIndex("priority") != -1) && (priority == ""))
throw SAX::SAXException("xsl:template priority cannot be empty");
std::pair<std::string, std::string> name;
if(attributes["name"] != "")
name = context().processInternalQName(attributes["name"]);
@ -71,13 +75,13 @@ protected:
if(match == "")
return new Template(name,
mode,
attributes["priority"],
priority,
context().precedence());
return new Template(context().xpath_match(match),
name,
mode,
atts.getValue("priority"),
priority,
context().precedence());
} // createContainer

View file

@ -15,7 +15,7 @@ public:
Template(const std::pair<std::string, std::string>& name,
const std::pair<std::string, std::string>& mode,
const std::string& priority,
const Precedence& precedence) :
const Precedence& precedence) :
matches_(),
name_(name),
mode_(mode),
@ -35,7 +35,7 @@ public:
{
if(!priority.empty())
{
float p = boost::lexical_cast<float>(priority);
double p = boost::lexical_cast<double>(Arabica::text::normalize_whitespace<std::string, Arabica::default_string_adaptor<std::string> >(priority));
for(std::vector<Arabica::XPath::MatchExpr<std::string> >::iterator m = matches_.begin(), me = matches_.end(); m != me; ++m)
m->override_priority(p);
} // if ...