Exemple #1
0
        private void ParseAttType(char ch, AttDef attdef)
        {
            if(ch == '%') {
                var 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 {
                var 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);
                }
            }
        }
Exemple #2
0
        private AttDef ParseAttDef(char ch)
        {
            ch = this.m_current.SkipWhitespace();
            var name = ScanName(SgmlDtd.WhiteSpace);
            name = name.ToUpperInvariant();
            var 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;
        }
Exemple #3
0
        private void ParseAttDefault(char ch, AttDef attdef)
        {
            if(ch == '%') {
                var 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;
            }

            var hasdef = true;
            if(ch == '#') {
                this.m_current.ReadChar();
                var 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 == '"') {
                    var lit = this.m_current.ScanLiteral(this.m_sb, ch);
                    attdef.Default = lit;
                    ch = this.m_current.SkipWhitespace();
                }
                else {
                    var 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();
                }
            }
        }
Exemple #4
0
 /// <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;
 }