コード例 #1
0
 public LiteralElement(LiteralElementType type, IDictionary attributes)
 {
     Type       = type;
     Attributes = attributes;
     Text       = String.Empty;
 }
コード例 #2
0
 public LiteralElement(String text)
 {
     Type       = LiteralElementType.Text;
     Attributes = null;
     Text       = text;
 }
コード例 #3
0
 public LiteralElement(LiteralElementType type, IDictionary attributes)
 {
     Type = type;
     Attributes = attributes;
     Text = String.Empty;
 }
コード例 #4
0
        // Parse a single tag.

        private void ParseTag(String literalText, int tagStart, int tagFinish)
        {
            bool isClosingTag;

            if ((isClosingTag = (literalText[tagStart] == '/')) == true)
            {
                tagStart++;
            }

            // Empty tag?

            if (tagStart == tagFinish)
            {
                return;
            }

            // Look for end of tag name.

            int tagNameFinish = tagStart;

            while (tagNameFinish < tagFinish &&
                   !Char.IsWhiteSpace(literalText[tagNameFinish]) && literalText[tagNameFinish] != '/')
            {
                tagNameFinish++;
            }

            // Extract tag name, and compare to recognized tags.

            String             tagName = literalText.Substring(tagStart, tagNameFinish - tagStart);
            LiteralElementType tagType = TagNameToType(tagName);

            if (tagType == LiteralElementType.Unrecognized)
            {
                return;
            }

            // Are we already in a complex tag?

            if (_currentTag != null)
            {
                // Ignore any inner tags, except the closing tag.

                if (_currentTag.Type == tagType && isClosingTag)
                {
                    ProcessElementInternal(_currentTag);
                    _currentTag = null;
                }
                else
                {
                    // TODO: Error?
                }
                return;
            }

            switch (tagType)
            {
            case LiteralElementType.Paragraph:

                // Do not create two breaks for </p><p> pairs.

                if (!_isBreakingReset)
                {
                    _isBreakingReset = true;
                    goto case LiteralElementType.Break;
                }

                break;

            case LiteralElementType.Break:

                // If a break is already pending, insert an empty one.

                if (_beginNewParagraph)
                {
                    ParseText("");
                }
                if (_lastQueuedElement != null &&
                    _lastQueuedElement.Text.Length == 0)
                {
                    _lastQueuedElement.ForceBreakTag = true;
                }
                _beginNewParagraph = true;
                break;

            case LiteralElementType.Bold:

                if (isClosingTag)
                {
                    _formatStack.Pop(FormatStack.Bold);
                }
                else
                {
                    _formatStack.Push(FormatStack.Bold);
                }
                break;

            case LiteralElementType.Italic:

                if (isClosingTag)
                {
                    _formatStack.Pop(FormatStack.Italic);
                }
                else
                {
                    _formatStack.Push(FormatStack.Italic);
                }
                break;

            default:
            {
                if (!isClosingTag)
                {
                    IDictionary attribs = ParseTagAttributes(literalText, tagNameFinish, tagFinish, tagName);
                    _currentTag = new LiteralElement(tagType, attribs);
                }
                break;
            }
            }

            if (_isBreakingReset && tagType != LiteralElementType.Paragraph)
            {
                _isBreakingReset = false;
            }
        }
コード例 #5
0
 public LiteralElement(String text)
 {
     Type = LiteralElementType.Text;
     Attributes = null;
     Text = text;
 }