private IEnumerable <ColoredText> HighlightCore(string text) { if (string.IsNullOrEmpty(text)) { return(Array.Empty <ColoredText>()); } var allTokens = AphidLexer.GetAllTokens(text); var tokens = AphidLexer.GetTokens(text); if (tokens.Count == 0) { return(allTokens.Select(x => _theme.GetColoredText(x))); } var peekTable = Enumerable .Range(0, tokens.Count - 1) .ToDictionary(x => tokens[x].Index, x => tokens[x + 1].TokenType); void addNone(in AphidToken t) => peekTable.Add(t.Index, None); addNone(tokens[tokens.Count - 1]); allTokens.Except(tokens).For(x => addNone(in x)); return(allTokens.Select(x => _theme.GetColoredText(x, peekTable[x.Index]))); }
public static void TokenizeAll( [PexAssumeUnderTest] AphidLexer lexer, [PexAssumeUnderTest] string code ) { lexer.Text = code; lexer.GetAllTokens(); // TODO: add assertions to method AphidInterpreterTest.Interpret(AphidInterpreter, String, Boolean) }
public void SetSource(string source, int offset) { _index = 0; try { var lexer = new AphidLexer(source); if (_lexerMode != 0) { lexer.SetMode(_lexerMode); } _tokens = lexer .GetAllTokens() .Where(x => x.TokenType != WhiteSpace) .ToArray(); _lexerMode = lexer.GetMode(); } catch { _tokens = new AphidToken[0]; } }
protected override void OnRender(DrawingContext drawingContext) { DebugHelper.Trace(); if (glyphFace == null) { return; } else if (string.IsNullOrEmpty(_text)) { _currentColumn = 0; _currentRow = 0; MoveCaretToCurrentCell(); SetDefaultSize(); CreateDocument(new List <AphidToken>()); return; } var lexer = new AphidLexer(_text); CreateDocument(lexer.GetAllTokens()); double greatestX = 0, greatestY = 0; for (int y = 0; y < _document.Count; y++) { for (int x = 0; x < _document[y].Count; x++) { var cell = _document[y][x]; if (cell.Char == '\n') { continue; } var glyph = BuildGlyphRun(x, y, cell.Char); drawingContext.DrawGlyphRun( new SolidColorBrush(GetColor(cell.Type)), glyph); var x2 = glyph.BaselineOrigin.X + _cellWidth; if (x2 > greatestX) { greatestX = x2; } if (glyph.BaselineOrigin.Y > greatestY) { //greatestY = glyph.BaselineOrigin.Y + 20; greatestY = glyph.BaselineOrigin.Y; } } } var caretY = Canvas.GetTop(_caret) + _caret.Height; if (caretY > greatestY) { greatestY = caretY; } Width = greatestX; Height = greatestY; }