private static bool ShallEscape(IDocCommentNode node, int offset) { IDocCommentBlockNode docBlock = node.GetContainingNode <IDocCommentBlockNode>(true); if (docBlock == null) { return(false); } XmlDocLexer lexer = new XmlDocLexer(docBlock); lexer.Start(); bool inCData = false; bool insideTag = false; while (lexer.TokenType != null) { if (lexer.TokenType == lexer.XmlTokenType.TAG_START) { insideTag = true; } else if (lexer.TokenType == lexer.XmlTokenType.TAG_END) { insideTag = false; } else if (lexer.TokenType == lexer.XmlTokenType.TAG_START1) { insideTag = true; } else if (lexer.TokenType == lexer.XmlTokenType.TAG_END1) { insideTag = false; } else if (lexer.TokenType == lexer.XmlTokenType.CDATA_START) { inCData = true; } else if (lexer.TokenType == lexer.XmlTokenType.CDATA_END) { inCData = false; } else if (offset >= lexer.TokenLocalRange.StartOffset && offset <= lexer.TokenLocalRange.EndOffset) { return(!inCData && !insideTag); } else if (offset < lexer.TokenLocalRange.StartOffset) { return(false); } lexer.Advance(); } return(false); }
public IEnumerator <string> GetEnumerator() { _docLexer.Start(); int inCode = 0; bool currentTagIsCode = false; StringBuilder blockBuilder = new StringBuilder(); while (_docLexer.TokenType != null) { if (_docLexer.TokenType == _docLexer.XmlTokenType.TAG_START) { if (blockBuilder.Length > 0 && inCode == 0) { yield return(blockBuilder.ToString()); blockBuilder.Remove(0, blockBuilder.Length); } blockBuilder.Append(_docLexer.TokenText); _docLexer.Advance(); currentTagIsCode = false; if (_docLexer.TokenType == _docLexer.XmlTokenType.IDENTIFIER && (_docLexer.TokenText == "code" || _docLexer.TokenText == "c" || _docLexer.TokenText == "see" || _docLexer.TokenText == "typeparamref" || _docLexer.TokenText == "paramref")) { inCode++; currentTagIsCode = true; } blockBuilder.Append(_docLexer.TokenText); _docLexer.Advance(); } else if (_docLexer.TokenType == _docLexer.XmlTokenType.TAG_START1) { if (blockBuilder.Length > 0 && inCode == 0) { yield return(blockBuilder.ToString()); blockBuilder.Remove(0, blockBuilder.Length); } blockBuilder.Append(_docLexer.TokenText); _docLexer.Advance(); if (_docLexer.TokenType == _docLexer.XmlTokenType.IDENTIFIER && (_docLexer.TokenText == "code" || _docLexer.TokenText == "c" || _docLexer.TokenText == "see" || _docLexer.TokenText == "typeparamref" || _docLexer.TokenText == "paramref")) { inCode--; } } else if (_docLexer.TokenType == _docLexer.XmlTokenType.TAG_END || _docLexer.TokenType == _docLexer.XmlTokenType.TAG_END1) { if (_docLexer.TokenType == _docLexer.XmlTokenType.TAG_END1 && currentTagIsCode) { inCode--; } blockBuilder.Append(_docLexer.TokenText); if (inCode == 0) { yield return(blockBuilder.ToString()); blockBuilder.Remove(0, blockBuilder.Length); } _docLexer.Advance(); } else { blockBuilder.Append(_docLexer.TokenText); _docLexer.Advance(); } } yield return(blockBuilder.ToString()); }
public XmlCommentReflowableBlockLexer(IDocCommentBlock docCommentBlock) { _docLexer = new XmlDocLexer(docCommentBlock); _docLexer.Start(); }