📄 attribute.cxx
字号:
valid = 0; } } if (valid) return new EntityAttributeSemantics(entities); else return 0;}DeclaredValue *EntityDeclaredValue::copy() const{ return new EntityDeclaredValue(*this);}IdDeclaredValue::IdDeclaredValue(): TokenizedDeclaredValue(name, 0){}Boolean IdDeclaredValue::isId() const{ return 1;}AttributeSemantics *IdDeclaredValue::makeSemantics(const TokenizedAttributeValue &value, AttributeContext &context, const StringC &, unsigned &, unsigned &) const{ Location prevLoc; if (!context.defineId(value.string(), value.tokenLocation(0), prevLoc)) { context.setNextLocation(value.tokenLocation(0)); context.message(ParserMessages::duplicateId, StringMessageArg(value.string()), prevLoc); } return 0;}void IdDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const{ desc.declaredValue = AttributeDefinitionDesc::id;}DeclaredValue *IdDeclaredValue::copy() const{ return new IdDeclaredValue(*this);}IdrefDeclaredValue::IdrefDeclaredValue(Boolean isList): TokenizedDeclaredValue(name, isList){}AttributeSemantics *IdrefDeclaredValue::makeSemantics(const TokenizedAttributeValue &value, AttributeContext &context, const StringC &, unsigned &nIdrefs, unsigned &) const{ size_t nTokens = value.nTokens(); nIdrefs += nTokens; for (size_t i = 0; i < nTokens; i++) context.noteIdref(value.token(i), value.tokenLocation(i)); return 0;}Boolean IdrefDeclaredValue::isIdref() const{ return 1;}void IdrefDeclaredValue::buildDesc(AttributeDefinitionDesc &desc) const{ TokenizedDeclaredValue::buildDesc(desc); if (desc.declaredValue == AttributeDefinitionDesc::name) desc.declaredValue = AttributeDefinitionDesc::idref; else desc.declaredValue = AttributeDefinitionDesc::idrefs;}DeclaredValue *IdrefDeclaredValue::copy() const{ return new IdrefDeclaredValue(*this);}AttributeDefinition::AttributeDefinition(const StringC &name, DeclaredValue *value): name_(name), declaredValue_(value){}AttributeDefinition::~AttributeDefinition(){}AttributeValue *AttributeDefinition::checkValue(AttributeValue *p, AttributeContext &) const{ return p;}Boolean AttributeDefinition::missingValueWouldMatch(const Text &, const AttributeContext &) const{ return 0;}const AttributeValue *AttributeDefinition::defaultValue(const AttributeValue *) const{ return 0;}void AttributeDefinition::getDesc(AttributeDefinitionDesc &desc) const{ desc.allowedValues.clear(); desc.defaultValue.clear(); desc.currentIndex = 0; buildDesc(desc); declaredValue_->buildDesc(desc);}Boolean AttributeDefinition::isConref() const{ return 0;}Boolean AttributeDefinition::isCurrent() const{ return 0;}Boolean AttributeDefinition::isFixed() const{ return 0;}RequiredAttributeDefinition::RequiredAttributeDefinition(const StringC &name, DeclaredValue *value): AttributeDefinition(name, value){}ConstPtr<AttributeValue>RequiredAttributeDefinition::makeMissingValue(AttributeContext &context) const{ if (context.validate()) context.message(ParserMessages::requiredAttributeMissing, StringMessageArg(name())); return 0;}void RequiredAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const{ desc.defaultValueType = AttributeDefinitionDesc::required;}AttributeDefinition *RequiredAttributeDefinition::copy() const{ return new RequiredAttributeDefinition(*this);}CurrentAttributeDefinition::CurrentAttributeDefinition(const StringC &name, DeclaredValue *value, size_t index): AttributeDefinition(name, value), currentIndex_(index){}ConstPtr<AttributeValue>CurrentAttributeDefinition::makeMissingValue(AttributeContext &context) const{ if (context.mayDefaultAttribute()) { ConstPtr<AttributeValue> currentValue = context.getCurrentAttribute(currentIndex_); if (currentValue.isNull() && context.validate()) context.message(ParserMessages::currentAttributeMissing, StringMessageArg(name())); return currentValue; } if (context.validate()) context.message(ParserMessages::attributeMissing, StringMessageArg(name())); return 0;}Boolean CurrentAttributeDefinition::missingValueWouldMatch(const Text &text, const AttributeContext &context) const{ if (!context.mayDefaultAttribute()) return 0; ConstPtr<AttributeValue> currentValue = context.getCurrentAttribute(currentIndex_); if (currentValue.isNull()) return 0; return text.fixedEqual(*currentValue->text());}AttributeValue *CurrentAttributeDefinition::checkValue(AttributeValue *value, AttributeContext &context) const{ context.noteCurrentAttribute(currentIndex_, value); return value;}void CurrentAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const{ desc.defaultValueType = AttributeDefinitionDesc::current; desc.currentIndex = currentIndex_;}AttributeDefinition *CurrentAttributeDefinition::copy() const{ return new CurrentAttributeDefinition(*this);}Boolean CurrentAttributeDefinition::isCurrent() const{ return 1;}ImpliedAttributeDefinition::ImpliedAttributeDefinition(const StringC &name, DeclaredValue *value): AttributeDefinition(name, value){}ConstPtr<AttributeValue>ImpliedAttributeDefinition::makeMissingValue(AttributeContext &context) const{ return context.makeImpliedAttributeValue();}void ImpliedAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const{ desc.defaultValueType = AttributeDefinitionDesc::implied;}AttributeDefinition *ImpliedAttributeDefinition::copy() const{ return new ImpliedAttributeDefinition(*this);}const AttributeValue *ImpliedAttributeDefinition::defaultValue(const AttributeValue *impliedValue) const{ return impliedValue;}ConrefAttributeDefinition::ConrefAttributeDefinition(const StringC &name, DeclaredValue *value): ImpliedAttributeDefinition(name, value){}Boolean ConrefAttributeDefinition::isConref() const{ return 1;}void ConrefAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const{ desc.defaultValueType = AttributeDefinitionDesc::conref;}AttributeDefinition *ConrefAttributeDefinition::copy() const{ return new ConrefAttributeDefinition(*this);}DefaultAttributeDefinition::DefaultAttributeDefinition(const StringC &name, DeclaredValue *declaredValue, AttributeValue *defaultValue): AttributeDefinition(name, declaredValue), value_(defaultValue){}ConstPtr<AttributeValue>DefaultAttributeDefinition::makeMissingValue(AttributeContext &context) const{ if (context.mayDefaultAttribute()) return value_; if (context.validate()) context.message(ParserMessages::attributeMissing, StringMessageArg(name())); return 0;}Boolean DefaultAttributeDefinition::missingValueWouldMatch(const Text &text, const AttributeContext &context) const{ return context.mayDefaultAttribute() && text.fixedEqual(*value_->text());}void DefaultAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const{ desc.defaultValueType = AttributeDefinitionDesc::defaulted; desc.defaultValue = value_;}AttributeDefinition *DefaultAttributeDefinition::copy() const{ return new DefaultAttributeDefinition(*this);}FixedAttributeDefinition:: FixedAttributeDefinition(const StringC &name, DeclaredValue *declaredValue, AttributeValue *defaultValue): DefaultAttributeDefinition(name, declaredValue, defaultValue){}Boolean FixedAttributeDefinition::isFixed() const{ return 1;}AttributeValue *FixedAttributeDefinition::checkValue(AttributeValue *value, AttributeContext &context) const{ const AttributeValue *fixedValue = DefaultAttributeDefinition::defaultValue(0); if (value && fixedValue && context.validate()) { const Text *text; const StringC *str; const Text *fixedText; const StringC *fixedStr; switch (value->info(text, str)) { case AttributeValue::implied: CANNOT_HAPPEN(); case AttributeValue::cdata: if (fixedValue->info(fixedText, fixedStr) == AttributeValue::cdata) { if (!text->fixedEqual(*fixedText)) context.message(ParserMessages::notFixedValue, StringMessageArg(name())); } break; case AttributeValue::tokenized: if (fixedValue->info(fixedText, fixedStr) == AttributeValue::tokenized) { if (*str != *fixedStr) context.message(ParserMessages::notFixedValue, StringMessageArg(name())); } break; } } return value;}void FixedAttributeDefinition::buildDesc(AttributeDefinitionDesc &desc) const{ // get the fixed value DefaultAttributeDefinition::buildDesc(desc); desc.defaultValueType = AttributeDefinitionDesc::fixed;}AttributeDefinition *FixedAttributeDefinition::copy() const{ return new FixedAttributeDefinition(*this);}AttributeDefinitionList::AttributeDefinitionList(Vector<CopyOwner<AttributeDefinition> > &vec, size_t index, Boolean anyCurrent, size_t idIndex, size_t notationIndex): index_(index), anyCurrent_(anyCurrent), idIndex_(idIndex), notationIndex_(notationIndex){ defs_.swap(vec);}AttributeDefinitionList:: AttributeDefinitionList(const ConstPtr<AttributeDefinitionList> &def): prev_(def), index_(size_t(-1)){ if (def.isNull()) { anyCurrent_ = 0; notationIndex_ = size_t(-1); idIndex_ = size_t(-1); } else { anyCurrent_ = def->anyCurrent_; notationIndex_ = def->notationIndex_; idIndex_ = def->idIndex_; defs_ = def->defs_; }}Boolean AttributeDefinitionList::tokenIndex(const StringC &token, unsigned &index) const{ for (size_t i = 0; i < defs_.size(); i++) if (defs_[i]->containsToken(token)) { index = i; return 1; } return 0;}Boolean AttributeDefinitionList::tokenIndexUnique(const StringC &token, unsigned i) const{ for (++i; i < defs_.size(); i++) if (defs_[i]->containsToken(token)) return 0; return 1;}Boolean AttributeDefinitionList::attributeIndex(const StringC &name, unsigned &index) const{ for (size_t i = 0; i < defs_.size(); i++) if (defs_[i]->name() == name) { index = i; return 1; } return 0;}void AttributeDefinitionList::append(AttributeDefinition *def){ if (def->isId() && idIndex_ == size_t(-1)) idIndex_ = defs_.size(); if (def->isNotation() && notationIndex_ == size_t(-1)) notationIndex_ = defs_.size(); if (def->isCurrent()) anyCurrent_ = 1; defs_.resize(defs_.size() + 1); defs_.back() = def;}AttributeSemantics::AttributeSemantics(){}AttributeSemantics::~AttributeSemantics(){}size_t AttributeSemantics::nEntities() const{ return 0;}ConstPtr<Entity> AttributeSemantics::entity(size_t) const{ return 0;}ConstPtr<Notation> AttributeSemantics::notation() const{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -