LineStartState.cs 603 B

123456789101112131415161718192021222324252627282930313233
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Text.RegularExpressions;
  5. namespace Larkdown.Parser.Lexer
  6. {
  7. class LineStartState : State
  8. {
  9. public override State Next(Lexer lexer)
  10. {
  11. var indent = lexer.Read(new Regex("^[\t ]*"));
  12. lexer.Emit(new Token(TokenType.Indentation, indent));
  13. if (lexer.IsEof())
  14. {
  15. lexer.Emit(new Token(TokenType.Eof));
  16. return null;
  17. }
  18. switch (lexer.Peek())
  19. {
  20. case '\n':
  21. lexer.Emit(new Token(TokenType.Empty));
  22. lexer.Read();
  23. return this;
  24. default:
  25. return new TextState();
  26. }
  27. }
  28. }
  29. }