⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 attribute.cxx

📁 SP是一个基于GNU C++编译器
💻 CXX
📖 第 1 页 / 共 3 页
字号:
      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 + -