MarkdownDeep.SpanFormatter.CreateEmphasisMark C# (CSharp) Метод

CreateEmphasisMark() публичный Метод

public CreateEmphasisMark ( ) : Token
Результат Token
        public Token CreateEmphasisMark()
        {
            // Capture current state
            char ch = Current;
            char altch = ch == '*' ? '_' : '*';
            int savepos = Position;

            // Check for a consecutive sequence of just '_' and '*'
            if (Bof || char.IsWhiteSpace(CharAtOffset(-1)))
            {
                while (IsEmphasisChar(Current))
                    SkipForward(1);

                if (Eof || char.IsWhiteSpace(Current))
                {
                    return new Token(TokenType.Html, savepos, Position - savepos);
                }

                // Rewind
                Position = savepos;
            }

            // Scan backwards and see if we have space before
            while (IsEmphasisChar(CharAtOffset(-1)))
                SkipForward(-1);
            bool bSpaceBefore = Bof || char.IsWhiteSpace(CharAtOffset(-1));
            Position = savepos;

            // Count how many matching emphasis characters
            while (Current == ch)
            {
                SkipForward(1);
            }
            int count=Position-savepos;

            // Scan forwards and see if we have space after
            while (IsEmphasisChar(CharAtOffset(1)))
                SkipForward(1);
            bool bSpaceAfter = Eof || char.IsWhiteSpace(Current);
            Position = savepos + count;

            // This should have been stopped by check above
            System.Diagnostics.Debug.Assert(!bSpaceBefore || !bSpaceAfter);

            if (bSpaceBefore)
            {
                return CreateToken(TokenType.opening_mark, savepos, Position - savepos);
            }

            if (bSpaceAfter)
            {
                return CreateToken(TokenType.closing_mark, savepos, Position - savepos);
            }

            if (m_Markdown.ExtraMode && ch == '_' && (Char.IsLetterOrDigit(Current)))
                return null;

            return CreateToken(TokenType.internal_mark, savepos, Position - savepos);
        }