Beispiel #1
0
        private string m_literalValue; // the attribute value

        /// <summary>
        /// Attribute objects are reused during parsing to reduce memory allocations, 
        /// hence the Reset method.
        /// </summary>
        public void Reset(string name, string value, char quote)
        {
            this.Name = name;
            this.m_literalValue = value;
            this.QuoteChar = quote;
            this.DtdType = null;
        }
Beispiel #2
0
    void ParseAttType(char ch, AttDef attdef)
    {
      if (ch == '%')
      {
        Entity e = ParseParameterEntity(SgmlDtd.WhiteSpace);
        PushEntity(this.m_current.ResolvedUri, e);
        ParseAttType(this.m_current.Lastchar, attdef);
        PopEntity(); // bugbug - are we at the end of the entity?
        ch = this.m_current.Lastchar;
        return;
      }

      if (ch == '(')
      {
        //attdef.EnumValues = ParseNameGroup(ch, false);  
        //attdef.Type = AttributeType.ENUMERATION;
        attdef.SetEnumeratedType(ParseNameGroup(ch, false), AttributeType.ENUMERATION);
      }
      else
      {
        string token = ScanName(SgmlDtd.WhiteSpace);
        if (string.Equals(token, "NOTATION", StringComparison.OrdinalIgnoreCase))
        {
          ch = this.m_current.SkipWhitespace();
          if (ch != '(')
          {
            this.m_current.Error("Expecting name group '(', but found '{0}'", ch);
          }
          //attdef.Type = AttributeType.NOTATION;
          //attdef.EnumValues = ParseNameGroup(ch, true);
          attdef.SetEnumeratedType(ParseNameGroup(ch, true), AttributeType.NOTATION);
        }
        else
        {
          attdef.SetType(token);
        }
      }
    }
Beispiel #3
0
    void ParseAttDefault(char ch, AttDef attdef)
    {
      if (ch == '%')
      {
        Entity e = ParseParameterEntity(SgmlDtd.WhiteSpace);
        PushEntity(this.m_current.ResolvedUri, e);
        ParseAttDefault(this.m_current.Lastchar, attdef);
        PopEntity(); // bugbug - are we at the end of the entity?
        ch = this.m_current.Lastchar;
        return;
      }

      bool hasdef = true;
      if (ch == '#')
      {
        this.m_current.ReadChar();
        string token = this.m_current.ScanToken(this.m_sb, SgmlDtd.WhiteSpace, true);
        hasdef = attdef.SetPresence(token);
        ch = this.m_current.SkipWhitespace();
      }
      if (hasdef)
      {
        if (ch == '\'' || ch == '"')
        {
          string lit = this.m_current.ScanLiteral(this.m_sb, ch);
          attdef.Default = lit;
          ch = this.m_current.SkipWhitespace();
        }
        else
        {
          string name = this.m_current.ScanToken(this.m_sb, SgmlDtd.WhiteSpace, false);
          name = name.ToUpperInvariant();
          attdef.Default = name; // bugbug - must be one of the enumerated names.
          ch = this.m_current.SkipWhitespace();
        }
      }
    }
Beispiel #4
0
    AttDef ParseAttDef(char ch)
    {
      ch = this.m_current.SkipWhitespace();
      string name = ScanName(SgmlDtd.WhiteSpace);
      name = name.ToUpperInvariant();
      AttDef attdef = new AttDef(name);

      ch = this.m_current.SkipWhitespace();
      if (ch == '-')
        ch = ParseDeclComments();

      ParseAttType(ch, attdef);

      ch = this.m_current.SkipWhitespace();
      if (ch == '-')
        ch = ParseDeclComments();

      ParseAttDefault(ch, attdef);

      ch = this.m_current.SkipWhitespace();
      if (ch == '-')
        ch = ParseDeclComments();

      return attdef;

    }