Example #1
0
        // ---------------------------------------------------------------------
        //
        // internal Properties
        //
        // ---------------------------------------------------------------------

        #region internal Properties

        #endregion internal Properties

        // ---------------------------------------------------------------------
        //
        // Private Methods
        //
        // ---------------------------------------------------------------------

        #region Private Methods

        // Helper for Parse method.
        private XamlToRtfError ParseXTokStartElement(XamlToken xamlToken, ref string name)
        {
            XamlToRtfError xamlToRtfError = _xamlAttributes.Init(xamlToken.Text);

            if (xamlToRtfError == XamlToRtfError.None)
            {
                xamlToRtfError = _xamlAttributes.GetTag(ref name);

                if (xamlToRtfError == XamlToRtfError.None)
                {
                    xamlToRtfError = _xamlContent.StartElement(string.Empty, name, name, _xamlAttributes);

                    if (xamlToRtfError == XamlToRtfError.None)
                    {
                        if (_xamlAttributes.IsEmpty)
                        {
                            xamlToRtfError = _xamlContent.EndElement(string.Empty, name, name);
                        }
                        else
                        {
                            xamlToRtfError = (XamlToRtfError)_xamlTagStack.Push(name);
                        }
                    }
                }
            }

            return(xamlToRtfError);
        }
            // Token: 0x0600862F RID: 34351 RVA: 0x0024C1FC File Offset: 0x0024A3FC
            XamlToRtfError IXamlAttributes.GetLength(ref int length)
            {
                XamlToRtfError result = XamlToRtfError.None;

                if (this._xamlParsePoints.IsValid)
                {
                    length = (this._xamlParsePoints.Count - 1) / 2;
                    return(result);
                }
                return(XamlToRtfError.Unknown);
            }
            // Token: 0x0600862E RID: 34350 RVA: 0x0024C1C8 File Offset: 0x0024A3C8
            internal XamlToRtfError GetTag(ref string xamlTag)
            {
                XamlToRtfError result = XamlToRtfError.None;

                if (!this._xamlParsePoints.IsValid)
                {
                    return(XamlToRtfError.Unknown);
                }
                xamlTag = (string)this._xamlParsePoints[0];
                return(result);
            }
            // Token: 0x06008638 RID: 34360 RVA: 0x0024C2F8 File Offset: 0x0024A4F8
            XamlToRtfError IXamlAttributes.GetValue(int index, ref string valueName)
            {
                XamlToRtfError result = XamlToRtfError.None;
                int            num    = (this._xamlParsePoints.Count - 1) / 2;

                if (index < 0 || index > num - 1)
                {
                    return(XamlToRtfError.OutOfRange);
                }
                valueName = (string)this._xamlParsePoints[index * 2 + 2];
                return(result);
            }
Example #5
0
            internal XamlToRtfError GetTag(ref string xamlTag)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                if (!_xamlParsePoints.IsValid)
                {
                    return(XamlToRtfError.Unknown);
                }

                xamlTag = (string)_xamlParsePoints[0];

                return(rtfToXamlError);
            }
            // Token: 0x06008633 RID: 34355 RVA: 0x0024C25C File Offset: 0x0024A45C
            XamlToRtfError IXamlAttributes.GetName(int index, ref string uri, ref string localName, ref string qName)
            {
                XamlToRtfError result = XamlToRtfError.None;
                int            num    = (this._xamlParsePoints.Count - 1) / 2;

                if (index < 0 || index > num - 1)
                {
                    return(XamlToRtfError.Unknown);
                }
                localName = (string)this._xamlParsePoints[index * 2 + 1];
                qName     = (string)this._xamlParsePoints[index * 2 + 2];
                return(result);
            }
Example #7
0
            XamlToRtfError IXamlAttributes.GetLength(ref int length)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                if (_xamlParsePoints.IsValid)
                {
                    length = (_xamlParsePoints.Count - 1) / 2;

                    return(rtfToXamlError);
                }
                else
                {
                    return(XamlToRtfError.Unknown);
                }
            }
        // Token: 0x06003F40 RID: 16192 RVA: 0x001212F8 File Offset: 0x0011F4F8
        private XamlToRtfError ParseXTokEndElement(XamlToRtfParser.XamlToken xamlToken, ref string name)
        {
            XamlToRtfError xamlToRtfError = this._xamlAttributes.Init(xamlToken.Text);

            if (xamlToRtfError == XamlToRtfError.None)
            {
                xamlToRtfError = this._xamlAttributes.GetTag(ref name);
                if (xamlToRtfError == XamlToRtfError.None && this._xamlTagStack.IsMatchTop(name))
                {
                    this._xamlTagStack.Pop();
                    xamlToRtfError = this._xamlContent.EndElement(string.Empty, name, name);
                }
            }
            return(xamlToRtfError);
        }
Example #9
0
            XamlToRtfError IXamlAttributes.GetValue(int index, ref string valueName)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                int nLength = (_xamlParsePoints.Count - 1) / 2;

                if (index < 0 || index > nLength - 1)
                {
                    return(XamlToRtfError.OutOfRange);
                }

                valueName = (string)_xamlParsePoints[index * 2 + 2];

                return(rtfToXamlError);
            }
Example #10
0
            XamlToRtfError IXamlAttributes.GetName(int index, ref string uri, ref string localName, ref string qName)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                int nLength = (_xamlParsePoints.Count - 1) / 2;

                if (index < 0 || index > nLength - 1)
                {
                    return(XamlToRtfError.Unknown);
                }

                localName = (string)_xamlParsePoints[index * 2 + 1];
                qName     = (string)_xamlParsePoints[index * 2 + 2];

                return(rtfToXamlError);
            }
Example #11
0
 void IXamlErrorHandler.IgnorableWarning(string message, XamlToRtfError xamlToRtfError) 
 {
 }
Example #12
0
 void IXamlErrorHandler.FatalError(string message, XamlToRtfError xamlToRtfError)
 { 
 } 
Example #13
0
            // ---------------------------------------------------------------------
            //
            // internal Methods
            //
            // ---------------------------------------------------------------------

            #region internal Methods

            internal XamlToRtfError Init(string xaml)
            {
                XamlToRtfError xamlToRtfError = XamlToRtfError.None;

                // Initialize
                _empty = false;
                _valid = false;

                Clear();

                char quoteChar;
                int  xamlIndex = 0;

                // Need to have at least "<...>".  Note that verification at this point that the string ends with angle
                // bracket allows me below to safely loop looking for specific character sets that don't match angle bracket
                // without also explicitly having to test for looping past the end of the string.
                if (xaml.Length < 2 || xaml[0] != '<' || xaml[xaml.Length - 1] != '>')
                {
                    return(XamlToRtfError.Unknown);
                }

                xamlIndex++;

                if (IsSpace(xaml[xamlIndex]))
                {
                    return(XamlToRtfError.Unknown);
                }

                // An end tag?
                if (xaml[xamlIndex] == '/')
                {
                    return(HandleEndTag(xaml, xamlIndex));
                }

                // Add the start and end of the tag pointers
                //AddParseData(xaml.Substring(xamlIndex));
                int startIndex = xamlIndex;

                // Note that check above that the string ends in angle simplifies loop check
                for (xamlIndex++; IsNameChar(xaml[xamlIndex]); xamlIndex++)
                {
                    continue;
                }

                AddParseData(xaml.Substring(startIndex, xamlIndex - startIndex));

                // Start parsing name/value pairs
                while (xamlIndex < xaml.Length)
                {
                    // Move past spaces
                    for (; IsSpace(xaml[xamlIndex]); xamlIndex++)
                    {
                        continue;
                    }

                    // Done?
                    if (xamlIndex == xaml.Length - 1)
                    {
                        break;
                    }

                    // Empty tag?
                    if (xaml[xamlIndex] == '/')
                    {
                        if (xamlIndex == xaml.Length - 2)
                        {
                            _empty = true;
                            break;
                        }
                        else
                        {
                            return(XamlToRtfError.Unknown);
                        }
                    }

                    // OK, have another attribute
                    //AddParseData(xaml.Substring(xamlIndex));
                    startIndex = xamlIndex;

                    for (xamlIndex++; IsNameChar(xaml[xamlIndex]); xamlIndex++)
                    {
                        continue;
                    }

                    AddParseData(xaml.Substring(startIndex, xamlIndex - startIndex));

                    // Move past optional trailing spaces
                    if (xamlIndex < xaml.Length)
                    {
                        for (; IsSpace(xaml[xamlIndex]); xamlIndex++)
                        {
                            continue;
                        }
                    }

                    // Attribute with no '='?
                    if (xamlIndex == xaml.Length || xaml[xamlIndex] != '=')
                    {
                        return(XamlToRtfError.Unknown);
                    }

                    // Move past '=' and optional trailing spaces
                    xamlIndex++;

                    for (; IsSpace(xaml[xamlIndex]); xamlIndex++)
                    {
                        continue;
                    }

                    // Value needs to be quoted
                    if (xaml[xamlIndex] != '\'' && xaml[xamlIndex] != '"')
                    {
                        return(XamlToRtfError.Unknown);
                    }

                    quoteChar = xaml[xamlIndex++];

                    //AddParseData(xaml.Substring(xamlIndex));
                    startIndex = xamlIndex;

                    for (; xamlIndex < xaml.Length && xaml[xamlIndex] != quoteChar; xamlIndex++)
                    {
                        continue;
                    }

                    if (xamlIndex == xaml.Length)
                    {
                        return(XamlToRtfError.Unknown);
                    }

                    AddParseData(xaml.Substring(startIndex, xamlIndex - startIndex));

                    xamlIndex++;
                }

                _valid = true;

                return(xamlToRtfError);
            }
Example #14
0
            XamlToRtfError IXamlAttributes.GetTypeFromQName(string qName, ref string typeName)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                return(rtfToXamlError);
            }
Example #15
0
            XamlToRtfError IXamlAttributes.GetValueFromName(string uri, string localName, ref string valueName)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                return(rtfToXamlError);
            }
Example #16
0
            XamlToRtfError IXamlAttributes.GetType(int index, ref string typeName)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                return(rtfToXamlError);
            }
Example #17
0
            XamlToRtfError IXamlAttributes.GetIndexFromQName(string qName, ref int index)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                return(rtfToXamlError);
            }
Example #18
0
            XamlToRtfError IXamlAttributes.GetLocalName(int index, ref string localName)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                return(rtfToXamlError);
            }
Example #19
0
            XamlToRtfError IXamlAttributes.GetUri(int index, ref string uri)
            {
                XamlToRtfError rtfToXamlError = XamlToRtfError.None;

                return(rtfToXamlError);
            }
            // Token: 0x06008624 RID: 34340 RVA: 0x0024BCCC File Offset: 0x00249ECC
            internal XamlToRtfError Next(XamlToRtfParser.XamlToken token)
            {
                XamlToRtfError result    = XamlToRtfError.None;
                int            xamlIndex = this._xamlIndex;

                if (this._xamlIndex < this._xaml.Length)
                {
                    char c = this._xaml[this._xamlIndex];
                    if (c <= ' ')
                    {
                        switch (c)
                        {
                        case '\t':
                        case '\n':
                        case '\r':
                            break;

                        case '\v':
                        case '\f':
                            goto IL_124;

                        default:
                            if (c != ' ')
                            {
                                goto IL_124;
                            }
                            break;
                        }
                        token.TokenType = XamlTokenType.XTokWS;
                        this._xamlIndex++;
                        while (this.IsCharsAvailable(1))
                        {
                            if (!this.IsSpace(this._xaml[this._xamlIndex]))
                            {
                                break;
                            }
                            this._xamlIndex++;
                        }
                        goto IL_17C;
                    }
                    if (c == '&')
                    {
                        token.TokenType = XamlTokenType.XTokInvalid;
                        this._xamlIndex++;
                        while (this.IsCharsAvailable(1))
                        {
                            if (this._xaml[this._xamlIndex] == ';')
                            {
                                this._xamlIndex++;
                                token.TokenType = XamlTokenType.XTokEntity;
                                break;
                            }
                            this._xamlIndex++;
                        }
                        goto IL_17C;
                    }
                    if (c == '<')
                    {
                        this.NextLessThanToken(token);
                        goto IL_17C;
                    }
IL_124:
                    token.TokenType = XamlTokenType.XTokCharacters;
                    this._xamlIndex++;
                    while (this.IsCharsAvailable(1) && this._xaml[this._xamlIndex] != '&' && this._xaml[this._xamlIndex] != '<')
                    {
                        this._xamlIndex++;
                    }
                }
IL_17C:
                token.Text = this._xaml.Substring(xamlIndex, this._xamlIndex - xamlIndex);
                if (token.Text.Length == 0)
                {
                    token.TokenType = XamlTokenType.XTokEOF;
                }
                return(result);
            }
            // Token: 0x0600863E RID: 34366 RVA: 0x0024C37C File Offset: 0x0024A57C
            internal XamlToRtfError Init(string xaml)
            {
                XamlToRtfError result = XamlToRtfError.None;

                this._empty = false;
                this._valid = false;
                this.Clear();
                int i = 0;

                if (xaml.Length < 2 || xaml[0] != '<' || xaml[xaml.Length - 1] != '>')
                {
                    return(XamlToRtfError.Unknown);
                }
                i++;
                if (this.IsSpace(xaml[i]))
                {
                    return(XamlToRtfError.Unknown);
                }
                if (xaml[i] == '/')
                {
                    return(this.HandleEndTag(xaml, i));
                }
                int num = i;

                i++;
                while (this.IsNameChar(xaml[i]))
                {
                    i++;
                }
                this.AddParseData(xaml.Substring(num, i - num));
                while (i < xaml.Length)
                {
                    while (this.IsSpace(xaml[i]))
                    {
                        i++;
                    }
                    if (i == xaml.Length - 1)
                    {
                        break;
                    }
                    if (xaml[i] == '/')
                    {
                        if (i == xaml.Length - 2)
                        {
                            this._empty = true;
                            break;
                        }
                        return(XamlToRtfError.Unknown);
                    }
                    else
                    {
                        num = i;
                        i++;
                        while (this.IsNameChar(xaml[i]))
                        {
                            i++;
                        }
                        this.AddParseData(xaml.Substring(num, i - num));
                        if (i < xaml.Length)
                        {
                            while (this.IsSpace(xaml[i]))
                            {
                                i++;
                            }
                        }
                        if (i == xaml.Length || xaml[i] != '=')
                        {
                            return(XamlToRtfError.Unknown);
                        }
                        i++;
                        while (this.IsSpace(xaml[i]))
                        {
                            i++;
                        }
                        if (xaml[i] != '\'' && xaml[i] != '"')
                        {
                            return(XamlToRtfError.Unknown);
                        }
                        char c = xaml[i++];
                        num = i;
                        while (i < xaml.Length && xaml[i] != c)
                        {
                            i++;
                        }
                        if (i == xaml.Length)
                        {
                            return(XamlToRtfError.Unknown);
                        }
                        this.AddParseData(xaml.Substring(num, i - num));
                        i++;
                    }
                }
                this._valid = true;
                return(result);
            }
Example #22
0
        // ---------------------------------------------------------------------
        //
        // internal Methods
        //
        // ---------------------------------------------------------------------

        #region internal Methods

        internal XamlToRtfError Parse()
        {
            // Need callbacks
            if (_xamlContent == null || _xamlError == null)
            {
                return(XamlToRtfError.Unknown);
            }

            // We are simply looking for well-formedness: that is, that the XML is lexically valid and tags are balanced.
            XamlToRtfError xamlToRtfError = XamlToRtfError.None;

            XamlToken xamlToken = new XamlToken();
            string    name      = string.Empty;

            // Fire things off
            xamlToRtfError = _xamlContent.StartDocument();

            while (xamlToRtfError == XamlToRtfError.None)
            {
                xamlToRtfError = _xamlLexer.Next(xamlToken);

                if (xamlToRtfError != XamlToRtfError.None || xamlToken.TokenType == XamlTokenType.XTokEOF)
                {
                    break;
                }

                switch (xamlToken.TokenType)
                {
                case XamlTokenType.XTokInvalid:
                    xamlToRtfError = XamlToRtfError.Unknown;
                    break;

                case XamlTokenType.XTokCharacters:
                    xamlToRtfError = _xamlContent.Characters(xamlToken.Text);
                    break;

                case XamlTokenType.XTokEntity:
                    xamlToRtfError = _xamlContent.SkippedEntity(xamlToken.Text);
                    break;

                case XamlTokenType.XTokStartElement:
                    xamlToRtfError = ParseXTokStartElement(xamlToken, ref name);
                    break;

                case XamlTokenType.XTokEndElement:
                    xamlToRtfError = ParseXTokEndElement(xamlToken, ref name);
                    break;

                case XamlTokenType.XTokCData:
                    // Ignore
                    break;

                case XamlTokenType.XTokPI:
                    // Ignore
                    break;

                case XamlTokenType.XTokComment:
                    // Ignore
                    break;

                case XamlTokenType.XTokWS:
                    xamlToRtfError = _xamlContent.IgnorableWhitespace(xamlToken.Text);
                    break;

                default:
                    xamlToRtfError = XamlToRtfError.Unknown;
                    break;
                }
            }

            // All tags need to have been popped.
            if (xamlToRtfError == XamlToRtfError.None && _xamlTagStack.Count != 0)
            {
                xamlToRtfError = XamlToRtfError.Unknown;
            }

            // Wrap things up
            if (xamlToRtfError == XamlToRtfError.None)
            {
                xamlToRtfError = _xamlContent.EndDocument();
            }

            return(xamlToRtfError);
        }
Example #23
0
            // ---------------------------------------------------------------------
            //
            // internal Methods
            //
            // ---------------------------------------------------------------------

            #region internal Methods

            internal XamlToRtfError Next(XamlToken token)
            {
                XamlToRtfError xamlToRtfError = XamlToRtfError.None;

                int startIndex = _xamlIndex;

                if (_xamlIndex < _xaml.Length)
                {
                    char tokenChar = _xaml[_xamlIndex];

                    switch (tokenChar)
                    {
                    case ' ':
                    case '\t':
                    case '\r':
                    case '\n':
                        token.TokenType = XamlTokenType.XTokWS;

                        for (_xamlIndex++; IsCharsAvailable(1) && IsSpace(_xaml[_xamlIndex]); _xamlIndex++)
                        {
                            continue;
                        }
                        break;

                    case '<':
                        NextLessThanToken(token);
                        break;

                    case '&':
                        // Entity
                        token.TokenType = XamlTokenType.XTokInvalid;

                        for (_xamlIndex++; IsCharsAvailable(1); _xamlIndex++)
                        {
                            if (_xaml[_xamlIndex] == ';')
                            {
                                _xamlIndex++;
                                token.TokenType = XamlTokenType.XTokEntity;
                                break;
                            }
                        }
                        break;

                    default:
                        // Plain text
                        token.TokenType = XamlTokenType.XTokCharacters;

                        for (_xamlIndex++; IsCharsAvailable(1); _xamlIndex++)
                        {
                            if (_xaml[_xamlIndex] == '&' || _xaml[_xamlIndex] == '<')
                            {
                                break;
                            }
                        }
                        break;
                    }
                }

                token.Text = _xaml.Substring(startIndex, _xamlIndex - startIndex);

                if (token.Text.Length == 0)
                {
                    token.TokenType = XamlTokenType.XTokEOF;
                }

                return(xamlToRtfError);
            }