Exemple #1
0
        private static void ParseSuperscript(SimpleTextLexer lexer, SimpleTextContext context)
        {
            double shift = context.RelativeFontWeight * 0.375;

            context.BaselineY          -= shift;
            context.RelativeFontWeight *= 0.75;
            if (lexer.Branch(TokenType.OpenBracket))
            {
                // Parse until a closing bracket
                while (lexer.Check(~TokenType.Newline & ~TokenType.CloseBracket & ~TokenType.Superscript & ~TokenType.Subscript))
                {
                    ParseToken(lexer, context);
                }
                lexer.Branch(TokenType.CloseBracket);
            }
            else
            {
                // Parse until a whitespace
                while (lexer.Check(~TokenType.Newline & ~TokenType.CloseBracket & ~TokenType.Subscript & ~TokenType.Superscript) && lexer.Content.Span[0] != ' ')
                {
                    ParseToken(lexer, context);
                }
            }
            context.BaselineY          += shift;
            context.RelativeFontWeight /= 0.75;
        }
Exemple #2
0
 public static void Parse(SimpleTextLexer lexer, SimpleTextContext context)
 {
     while (lexer.Type != TokenType.EndOfContent)
     {
         ParseToken(lexer, context);
     }
 }
Exemple #3
0
        private static void ParseToken(SimpleTextLexer lexer, SimpleTextContext context)
        {
            switch (lexer.Type)
            {
            case TokenType.Subscript:
                lexer.Next();
                ParseSubscript(lexer, context);
                break;

            case TokenType.Superscript:
                lexer.Next();
                ParseSuperscript(lexer, context);
                break;

            case TokenType.Escaped:
                context.Append(lexer.Content.Span[1]);
                lexer.Next();
                break;

            case TokenType.Newline:
                context.Newline();
                lexer.Next();
                break;

            default:
                context.Append(lexer.Content.ToString());
                lexer.Next();
                break;
            }
        }