Bool Tree::cmpQNamesForeign(const QName &q, const HashTable& dictForeign, const QName &qForeign) { /* printf("comparing names (%s,%s,%s) and (%s,%s,%s)\n", (char*)(((Tree*)this)->expand(q.getPrefix())), (char*)(((Tree*)this)->expand(q.getUri())), (char*)(((Tree*)this)->expand(q.getLocal())), (char*)(dictForeign.getKey(qForeign.getPrefix())), (char*)(dictForeign.getKey(qForeign.getUri())), (char*)(dictForeign.getKey(qForeign.getLocal())) ); */ if (q.getLocal() == stdPhrase(PHRASE_STAR)) { return (Bool)(q.getPrefix() == UNDEF_PHRASE || (dict().getKey(q.getUri()) == dictForeign.getKey(qForeign.getUri()))); } else { return (Bool) (dict().getKey(q.getUri()) == dictForeign.getKey(qForeign.getUri()) && dict().getKey(q.getLocal()) == dictForeign.getKey(qForeign.getLocal())); } }
Bool Tree::cmpQNameStrings(const QName &q, const Str& uri, const Str& local) { if (q.getLocal() == stdPhrase(PHRASE_STAR)) return (Bool)( q.getUri() == UNDEF_PHRASE || dict().getKey(q.getUri()) == uri); else { return (Bool) (dict().getKey(q.getUri()) == uri && dict().getKey(q.getLocal()) == local); } }
eFlag Tree::insertRule(Sit S, XSLElement *tmpl) { double prio; Attribute *a = tmpl -> atts.find(XSLA_PRIORITY); if (!a) prio = defaultPriority(tmpl); else { if (a -> cont.toDouble(prio)) Err(S, ET_BAD_NUMBER); }; QName q; GP( QName ) mode = NULL; if (!!(a = tmpl -> atts.find(XSLA_NAME))) E( tmpl -> setLogical(S, q, a -> cont, FALSE) ); if (q.getLocal() != UNDEF_PHRASE && subtrees.getCurrent() -> getStructure() -> rules().findByName(*this, q)) { Str fullName; expandQStr(q, fullName); Err1(S, ET_DUPLICATE_RULE_NAME, fullName); }; if (!!(a = tmpl -> atts.find(XSLA_MODE))) E( tmpl -> setLogical(S, *(mode = new QName), a -> cont, FALSE) ); subtrees.getCurrent() -> getStructure() -> rules().insert(new RuleItem(tmpl,prio,q,mode.keep())); return OK; }
Bool Tree::cmpQNames(const QName &first, const QName &second) const { /* printf("comparing names (%s,%s,%s) and (%s,%s,%s)\n", (char*)(((Tree*)this)->expand(first.getPrefix())), (char*)(((Tree*)this)->expand(first.getUri())), (char*)(((Tree*)this)->expand(first.getLocal())), (char*)(((Tree*)this)->expand(second.getPrefix())), (char*)(((Tree*)this)->expand(second.getUri())), (char*)(((Tree*)this)->expand(second.getLocal())) ); */ if (first.getLocal() == stdPhrase(PHRASE_STAR)) return (Bool)(first.getPrefix() == UNDEF_PHRASE || first.getUri() == second.getUri()); else return (Bool) (first.getUri() == second.getUri() && first.getLocal() == second.getLocal()); }
eFlag Tree::insertAttSet(Sit S, XSLElement *tmpl) { QName q; Attribute *a; GP( QName ) sets = NULL; if (!!(a = tmpl -> atts.find(XSLA_NAME))) E( tmpl -> setLogical(S, q, a -> cont, FALSE) ); if (q.getLocal() != UNDEF_PHRASE && attSets().findByName(q)) { Str fullName; expandQStr(q, fullName); Err1(S, ET_DUPLICATE_ASET_NAME, fullName); }; attSets().append(new AttSet(q)); return OK; }
void EQName::set(const QName& q, const HashTable& dict) { prefix = dict.getKey(q.getPrefix()); uri = dict.getKey(q.getUri()); local = dict.getKey(q.getLocal()); }
void Tree::expandQ(const QName& q, EQName& expanded) { expanded.setLocal(expand(q.getLocal())); expanded.setUri(expand(q.getUri())); expanded.setPrefix(expand(q.getPrefix())); }