public WordToken([NotNull] string text, WordTokenKind kind) { Guard.NotNull(text, nameof(text)); Text = text; Kind = kind; }
private static bool IsTokenKind([CanBeNull] char?ch, WordTokenKind kind) { switch (kind) { case WordTokenKind.CamelCaseWord: case WordTokenKind.PascalCaseWord: { return(IsLowerCaseLetter(ch)); } case WordTokenKind.UpperCaseWord: { return(IsUpperCaseLetter(ch)); } case WordTokenKind.Separators: { return(IsSeparator(ch)); } default: { throw new NotSupportedException($"Unexpected token kind {kind}."); } } }
private void ConsumeWhile(WordTokenKind kind) { while (IsTokenKind(PeekChar(), kind)) { position++; } position++; }
private WordToken CreateTokenFromScan(int startIndex, WordTokenKind kind) { ConsumeWhile(kind); if (kind == WordTokenKind.UpperCaseWord && IsLowerCaseLetter(PeekChar())) { PutBackLastUpperCaseLetterThatBelongsToNextWord(); } return(CreateTokenFrom(startIndex, kind)); }
private WordToken CreateTokenFromScan(int startIndex, WordTokenKind kind) { ConsumeWhile(kind); if (kind == WordTokenKind.UpperCaseWord) { bool nextCharIsLowerCaseLetter = position < text.Length && IsLowerCaseLetter(text[position]); if (nextCharIsLowerCaseLetter) { PutBackLastUpperCaseLetterThatBelongsToNextWord(); } } return(CreateTokenFrom(startIndex, kind)); }
private WordToken CreateTokenFrom(int startIndex, WordTokenKind kind) { string value = ExtractText(startIndex); return(new WordToken(value, kind)); }