System.Security.Util.TokenizerStream.TagLastToken C# (CSharp) Method

TagLastToken() private method

private TagLastToken ( short tag ) : void
tag short
return void
        internal void TagLastToken( short tag )
        {
            if (m_indexTokens == 0)
                m_lastTokens.m_block[m_lastTokens.m_block.Length-1] = (short)((ushort)m_lastTokens.m_block[m_lastTokens.m_block.Length-1] | (ushort)tag);
            else
                m_currentTokens.m_block[m_indexTokens-1] = (short)((ushort)m_currentTokens.m_block[m_indexTokens-1] | (ushort)tag);
        }

Usage Example

コード例 #1
0
ファイル: Parser.cs プロジェクト: sjyanxin/WPFSource
        private void GetRequiredSizes( TokenizerStream stream, ref int index ) 
        {
            //
            // Iteratively collect stuff up until the next end-tag.
            // We've already seen the open-tag. 
            //
 
            bool needToBreak = false; 
            bool needToPop = false;
            bool createdNode = false; 
            bool intag = false;
            int stackDepth = 1;
            SecurityElementType type = SecurityElementType.Regular;
            String strValue = null; 
            bool sawEquals = false;
            bool sawText = false; 
            int status = 0; 

            short i; 

            do
            {
                for (i = stream.GetNextToken() ; i != -1 ; i = stream.GetNextToken()) 
                {
                    switch (i & 0x00FF) 
                    { 
                    case Tokenizer.cstr:
                        { 
                            if (intag)
                            {
                                if (type == SecurityElementType.Comment)
                                { 
                                    // Ignore data in comments but still get the data
                                    // to keep the stream in the right place. 
                                    stream.ThrowAwayNextString(); 
                                    stream.TagLastToken( c_wastedstringtag );
                                } 
                                else
                                {
                                    // We're in a regular tag, so we've found an attribute/value pair.
 
                                    if (strValue == null)
                                    { 
                                        // Found attribute name, save it for later. 

                                        strValue = stream.GetNextString(); 
                                    }
                                    else
                                    {
                                        // Found attribute text, add the pair to the current element. 

                                        if (!sawEquals) 
                                            throw new XmlSyntaxException( _t.LineNo ); 

                                        stream.TagLastToken( c_attributetag ); 
                                        index += SecurityDocument.EncodedStringSize( strValue ) +
                                                 SecurityDocument.EncodedStringSize( stream.GetNextString() ) +
                                                 1;
                                        strValue = null; 
                                        sawEquals = false;
                                    } 
                                } 
                            }
                            else 
                            {
                                // We're not in a tag, so we've found text between tags.

                                if (sawText) 
                                {
                                    stream.TagLastToken( c_additionaltexttag ); 
                                    index += SecurityDocument.EncodedStringSize( stream.GetNextString() ) + 
                                             SecurityDocument.EncodedStringSize( " " );
                                } 
                                else
                                {
                                    stream.TagLastToken( c_texttag );
                                    index += SecurityDocument.EncodedStringSize( stream.GetNextString() ) + 
                                             1;
                                    sawText = true; 
                                } 
                            }
                        } 
                        break;

                    case Tokenizer.bra:
                        intag = true; 
                        sawText = false;
                        i = stream.GetNextToken(); 
 
                        if (i == Tokenizer.slash)
                        { 
                            stream.TagLastToken( c_childrentag );
                            while (true)
                            {
                                // spin; don't care what's in here 
                                i = stream.GetNextToken();
                                if (i == Tokenizer.cstr) 
                                { 
                                    stream.ThrowAwayNextString();
                                    stream.TagLastToken( c_wastedstringtag ); 
                                }
                                else if (i == -1)
                                    throw new XmlSyntaxException (_t.LineNo, Environment.GetResourceString( "XMLSyntax_UnexpectedEndOfFile" ));
                                else 
                                    break;
                            } 
 
                            if (i != Tokenizer.ket)
                            { 
                                throw new XmlSyntaxException (_t.LineNo, Environment.GetResourceString( "XMLSyntax_ExpectedCloseBracket" ));
                            }

                            intag = false; 

                            // Found the end of this element 
                            index++; 

                            sawText = false; 
                            stackDepth--;

                            needToBreak = true;
                        } 
                        else if (i == Tokenizer.cstr)
                        { 
                            // Found a child 

                            createdNode = true; 

                            stream.TagLastToken( c_elementtag );
                            index += SecurityDocument.EncodedStringSize( stream.GetNextString() ) +
                                     1; 

                            if (type != SecurityElementType.Regular) 
                                throw new XmlSyntaxException( _t.LineNo ); 

                            needToBreak = true; 
                            stackDepth++;
                        }
                        else if (i == Tokenizer.bang)
                        { 
                            // Found a child that is a comment node.  Next up better be a cstr.
 
                            status = 1; 

                            do 
                            {
                                i = stream.GetNextToken();

                                switch (i) 
                                {
                                case Tokenizer.bra: 
                                    status++; 
                                    break;
 
                                case Tokenizer.ket:
                                    status--;
                                    break;
 
                                case Tokenizer.cstr:
                                    stream.ThrowAwayNextString(); 
                                    stream.TagLastToken( c_wastedstringtag ); 
                                    break;
 
                                default:
                                    break;
                                }
                            } while (status > 0); 

                            intag = false; 
                            sawText = false; 
                            needToBreak = true;
                        } 
                        else if (i == Tokenizer.quest)
                        {
                            // Found a child that is a format node.  Next up better be a cstr.
 
                            i = stream.GetNextToken();
 
                            if (i != Tokenizer.cstr) 
                                throw new XmlSyntaxException( _t.LineNo );
 
                            createdNode = true;

                            type = SecurityElementType.Format;
 
                            stream.TagLastToken( c_elementtag );
                            index += SecurityDocument.EncodedStringSize( stream.GetNextString() ) + 
                                     1; 

                            status = 1; 
                            stackDepth++;

                            needToBreak = true;
                        } 
                        else
                        { 
                            throw new XmlSyntaxException (_t.LineNo, Environment.GetResourceString( "XMLSyntax_ExpectedSlashOrString" )); 
                        }
                        break ; 

                    case Tokenizer.equals:
                        sawEquals = true;
                        break; 

                    case Tokenizer.ket: 
                        if (intag) 
                        {
                            intag = false; 
                            continue;
                        }
                        else
                        { 
                            throw new XmlSyntaxException (_t.LineNo, Environment.GetResourceString( "XMLSyntax_UnexpectedCloseBracket" ));
                        } 
                        // not reachable 

                    case Tokenizer.slash: 
                        i = stream.GetNextToken();

                        if (i == Tokenizer.ket)
                        { 
                            // Found the end of this element
                            stream.TagLastToken( c_childrentag ); 
                            index++; 
                            stackDepth--;
                            sawText = false; 

                            needToBreak = true;
                        }
                        else 
                        {
                            throw new XmlSyntaxException (_t.LineNo, Environment.GetResourceString( "XMLSyntax_ExpectedCloseBracket" )); 
                        } 
                        break;
 
                    case Tokenizer.quest:
                        if (intag && type == SecurityElementType.Format && status == 1)
                        {
                            i = stream.GetNextToken(); 

                            if (i == Tokenizer.ket) 
                            { 
                                stream.TagLastToken( c_childrentag );
                                index++; 
                                stackDepth--;
                                sawText = false;

                                needToBreak = true; 
                            }
                            else 
                            { 
                                throw new XmlSyntaxException (_t.LineNo, Environment.GetResourceString( "XMLSyntax_ExpectedCloseBracket" ));
                            } 
                        }
                        else
                        {
                            throw new XmlSyntaxException (_t.LineNo); 
                        }
                        break; 
 
                    case Tokenizer.dash:
                    default: 
                        throw new XmlSyntaxException (_t.LineNo) ;
                    }

                    if (needToBreak) 
                    {
                        needToBreak = false; 
                        needToPop = false; 
                        break;
                    } 
                    else
                    {
                        needToPop = true;
                    } 
                }
 
                if (needToPop) 
                {
                    index++; 
                    stackDepth--;
                    sawText = false;
                }
                else if (i == -1 && (stackDepth != 1 || !createdNode)) 
                {
                    // This means that we still have items on the stack, but the end of our 
                    // stream has been reached. 

                    throw new XmlSyntaxException( _t.LineNo, Environment.GetResourceString( "XMLSyntax_UnexpectedEndOfFile" )); 
                }
            }
            while (stackDepth > 1);
        } 
All Usage Examples Of System.Security.Util.TokenizerStream::TagLastToken