void tb_MouseMove(object sender, MouseEventArgs e) { var tb = sender as FastColoredTextBox; var place = tb.PointToPlace(e.Location); var r = new FastColoredTextBoxNS.Range(tb, place, place); string text = r.GetFragment("[a-zA-Z]").Text; lbWordUnderMouse.Text = text; }
//函数悬停提示 protected override void OnToolTip() { if (this.ToolTip == null) { return; } if (ToolTipNeeded == null) { return; } //get place under mouse Place place = this.PointToPlace(this.lastMouseCoord); //check distance Point p = this.PlaceToPoint(place); if (Math.Abs(p.X - this.lastMouseCoord.X) > this.CharWidth * 2 || Math.Abs(p.Y - this.lastMouseCoord.Y) > this.CharHeight * 2) { return; } //get word under mouse var r = new Range(this, place, place); string hoveredWord = r.GetFragment("[a-zA-Z0-9_]").Text; //event handler var ea = new ToolTipNeededEventArgs(place, hoveredWord); ToolTipNeeded(this, ea); if (ea.ToolTipText != null) { lbTooltip.Visible = true; lbTooltip.Text = $"{ea.ToolTipTitle}\r\n\r\n{ea.ToolTipText}"; lbTooltip.Location = new Point(this.Size.Width - 500, this.lastMouseCoord.Y + this.CharHeight); //this.ToolTip.ToolTipTitle = ea.ToolTipTitle; //this.ToolTip.ToolTipIcon = ea.ToolTipIcon; //ToolTip.SetToolTip(this, ea.ToolTipText); //this.ToolTip.Show(ea.ToolTipText, this, new Point(this.lastMouseCoord.X, this.lastMouseCoord.Y + this.CharHeight)); } }
//函数悬停提示 protected override void OnToolTip() { if (ToolTip == null) { return; } if (ToolTipNeeded == null) { return; } //get place under mouse Place place = PointToPlace(lastMouseCoord); //check distance Point p = PlaceToPoint(place); if (Math.Abs(p.X - lastMouseCoord.X) > CharWidth * 2 || Math.Abs(p.Y - lastMouseCoord.Y) > CharHeight * 2) { return; } //get word under mouse var r = new Range(this, place, place); string hoveredWord = r.GetFragment("[a-zA-Z0-9_]").Text; //event handler var ea = new ToolTipNeededEventArgs(place, hoveredWord); ToolTipNeeded(this, ea); if (ea.ToolTipText != null) { //show tooltip ToolTip.ToolTipTitle = ea.ToolTipTitle; ToolTip.ToolTipIcon = ea.ToolTipIcon; //ToolTip.SetToolTip(this, ea.ToolTipText); ToolTip.Show(ea.ToolTipText, this, new Point(lastMouseCoord.X, lastMouseCoord.Y + CharHeight)); } }
private void ToolTipIsNeeded(object sender, ToolTipNeededEventArgs e) { if (String.IsNullOrEmpty(e.HoveredWord)) { return; } var library = LibraryLookup.GetLibrary(game); var range = new FastColoredTextBoxNS.Range(sender as FastColoredTextBox, e.Place, e.Place); string hoveredWord = range.GetFragment("[^ ( \n \r ]").Text; e.ToolTipTitle = hoveredWord; for (int i = 0; i < library.FlowScriptModules.Count; i++) { for (int j = 0; j < library.FlowScriptModules[i].Functions.Count; j++) { e.ToolTipText = ToolTip(hoveredWord, library) + "'"; } } }
//函数悬停提示 protected override void OnToolTip() { if (this.ToolTip == null) { return; } if (ToolTipNeeded == null) { return; } //get place under mouse Place place = this.PointToPlace(this.lastMouseCoord); //check distance Point p = this.PlaceToPoint(place); if (Math.Abs(p.X - this.lastMouseCoord.X) > this.CharWidth * 2 || Math.Abs(p.Y - this.lastMouseCoord.Y) > this.CharHeight * 2) { return; } //get word under mouse var r = new Range(this, place, place); string hoveredWord = r.GetFragment("[a-zA-Z0-9_]").Text; //event handler var ea = new ToolTipNeededEventArgs(place, hoveredWord); ToolTipNeeded(this, ea); if (ea.ToolTipText != null) { this.ShowTooltipWithLabel(ea.ToolTipTitle, ea.ToolTipText); } }
protected virtual void DoHighlighting() { if (parser == null) { return; } //parse text ParseTree tree; try { tree = parser.Parse(Text); } catch (Exception ex) { Debug.WriteLine(ex.Message); //oops... return; } //highlight errors if (tree.Status == ParseTreeStatus.Error) { ClearStyle(GetStyleIndexMask(new Style[] { WavyStyle })); foreach (var msg in tree.ParserMessages) { var loc = msg.Location; var place = new Place(loc.Column, loc.Line); var r = new Range(this, place, place); var f = r.GetFragment(@"[\S]"); f.SetStyle(WavyStyle); } return; } SolidBrush brush1 = new SolidBrush(VariablesColor); SyntaxHighlighter.VariableStyle = new TextStyle(brush1, null, FontStyle.Regular); //highlight syntax ClearStyle(StyleIndex.All); foreach (var t in tree.Tokens) { var arg = new StyleNeededEventArgs(t); OnStyleNeeded(arg); if (arg.Cancel) { continue; } if (arg.Style != null) { GetTokenRange(t).SetStyle(arg.Style); continue; } switch (t.Terminal.Name) { case "INTERVAL": GetTokenRange(t).SetStyle(SyntaxHighlighter.FunctionsStyle); break; case "Identifier": GetTokenRange(t).SetStyle(SyntaxHighlighter.VariableStyle); break; } switch (t.Terminal.GetType().Name) { case "KeyTerm": if ((t.Terminal.Flags & TermFlags.IsKeyword) != 0) //keywords are highlighted only { GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); } break; case "FreeTextLiteral": GetTokenRange(t).SetStyle(SyntaxHighlighter.CommentStyle); break; case "Identifier": GetTokenRange(t).SetStyle(SyntaxHighlighter.VariableStyle); break; case "NumberLiteral": GetTokenRange(t).SetStyle(SyntaxHighlighter.NumberStyle); break; case "StringLiteral": GetTokenRange(t).SetStyle(SyntaxHighlighter.StringStyle); break; case "CommentTerminal": GetTokenRange(t).SetStyle(SyntaxHighlighter.CommentStyle); break; } } }
protected virtual void DoHighlighting() { if (parser == null) { return; } //parse text ParseTree tree; try { tree = parser.Parse(Text); } catch (Exception ex) { Console.WriteLine(ex.Message); //oops... return; } //highlight errors if (tree.Status == ParseTreeStatus.Error) { ClearStyle(GetStyleIndexMask(new Style[] { WavyStyle })); foreach (var msg in tree.ParserMessages) { var loc = msg.Location; var place = new Place(loc.Column, loc.Line); var r = new Range(this, place, place); var f = r.GetFragment(@"[\S]"); f.SetStyle(WavyStyle); } return; } //highlight syntax ClearStyle(StyleIndex.All); foreach (var t in tree.Tokens) { var arg = new StyleNeededEventArgs(t); OnStyleNeeded(arg); if (arg.Cancel) { continue; } if (arg.Style != null) { GetTokenRange(t).SetStyle(arg.Style); continue; } switch (t.Terminal.GetType().Name) { case "KeyTerm": if ((t.Terminal.Flags & TermFlags.IsKeyword) != 0) //keywords are highlighted only { GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); } break; case "NumberLiteral": GetTokenRange(t).SetStyle(purpleStyle); break; case "StringLiteral": GetTokenRange(t).SetStyle(orangeStyle); break; case "CommentTerminal": GetTokenRange(t).SetStyle(SyntaxHighlighter.GrayStyle); break; //estes default no viene por defecto se puede utilizar para pintar id, u otros terminales default: if (t.Terminal.Name.Equals(Constante.Etiqueta)) { GetTokenRange(t).SetStyle(SyntaxHighlighter.GreenStyle); } break; } } }
private void tmrCommandTooltip_Tick(object sender, EventArgs e) { tmrCommandTooltip.Stop(); Place place = txtCodeEditor.PointToPlace(lastMouseCoordinate); Point distance = txtCodeEditor.PlaceToPoint(place); if (Math.Abs(distance.X - lastMouseCoordinate.X) > txtCodeEditor.CharWidth * 2 | Math.Abs(distance.Y - lastMouseCoordinate.Y) > txtCodeEditor.CharHeight * 2) return; FastColoredTextBoxNS.Range range = new FastColoredTextBoxNS.Range(txtCodeEditor, place, place); string hoverWord = range.GetFragment(@"[a-zA-Z]").Text; if (hoverWord == "") { return; } RpgCodeExpress.RpgCode.Command foundCommand = rpgCodeReference.FindCommand(hoverWord); if (foundCommand != null) { Tooltip.ToolTipTitle = foundCommand.Tooltip; Tooltip.SetToolTip(txtCodeEditor, foundCommand.Description); Tooltip.Show(foundCommand.Description, txtCodeEditor, new Point(lastMouseCoordinate.X, lastMouseCoordinate.Y + txtCodeEditor.CharHeight)); } }
protected virtual void DoHighlighting() { //if (parser == null) // return; //parse text ParseTree tree; try { tree = parser.Parse(Text); } catch (Exception ex) { Debug.WriteLine(ex.Message); //oops... return; } //highlight errors if (tree.Status == ParseTreeStatus.Error) { ClearStyle(GetStyleIndexMask(new Style[] { WavyStyle })); foreach (var msg in tree.ParserMessages) { var loc = msg.Location; var place = new Place(loc.Column, loc.Line); var r = new Range(this, place, place); var f = r.GetFragment(@"[\S]"); f.SetStyle(WavyStyle); } return; } //highlight syntax ClearStyle(StyleIndex.All); foreach (var t in tree.Tokens) { var arg = new StyleNeededEventArgs(t); OnStyleNeeded(arg); if (arg.Cancel) { continue; } if (arg.Style != null) { GetTokenRange(t).SetStyle(arg.Style); continue; } switch (t.Terminal.Name) { case "INTERVAL": //Sample of how to color a single TOKEN, not working yet GetTokenRange(t).SetStyle(SyntaxHighlighter.FunctionsStyle); break; case "Identifier": //GetTokenRange(t).SetStyle(SyntaxHighlighter.VariableStyle); //Identifier: Discover the correct type for identifier and hihglight. int CPIndex = 0; var IdentType = CoderHelper.GetTypeIdentifier(Identifiers, t.Text, out CPIndex); switch (IdentType) { case PCODE_CONST.OUTPOINTTYPE: GetTokenRange(t).SetStyle(SyntaxHighlighter.OutputStyle); break; case PCODE_CONST.INPOINTTYPE: GetTokenRange(t).SetStyle(SyntaxHighlighter.InputStyle); break; case PCODE_CONST.VARPOINTTYPE: GetTokenRange(t).SetStyle(SyntaxHighlighter.VariableStyle); break; case PCODE_CONST.PIDPOINTTYPE: GetTokenRange(t).SetStyle(SyntaxHighlighter.PidStyle); break; default: GetTokenRange(t).SetStyle(SyntaxHighlighter.VariableStyle); break; } break; case "INS": GetTokenRange(t).SetStyle(SyntaxHighlighter.InputStyle); break; case "OUTS": GetTokenRange(t).SetStyle(SyntaxHighlighter.OutputStyle); break; case "VARS": GetTokenRange(t).SetStyle(SyntaxHighlighter.VariableStyle); break; case "PIDS": GetTokenRange(t).SetStyle(SyntaxHighlighter.PidStyle); break; case "LineNumber": GetTokenRange(t).SetStyle(SyntaxHighlighter.InnerLinesNumberStyle); break; default: //parse by type: General highlighting switch (t.Terminal.GetType().Name) { case "KeyTerm": if ((t.Terminal.Flags & TermFlags.IsKeyword) != 0) //keywords are highlighted only { GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); } break; case "FreeTextLiteral": GetTokenRange(t).SetStyle(SyntaxHighlighter.CommentStyle); break; case "NumberLiteral": GetTokenRange(t).SetStyle(SyntaxHighlighter.NumberStyle); break; case "StringLiteral": GetTokenRange(t).SetStyle(SyntaxHighlighter.StringStyle); break; case "CommentTerminal": GetTokenRange(t).SetStyle(SyntaxHighlighter.CommentStyle); break; } break; } } }
protected virtual void DoHighlighting() { if (parser == null) { return; } //parse text ParseTree tree; try { tree = parser.Parse(Text); } catch (Exception ex) { Console.WriteLine(ex.Message); //oops... return; } //highlight errors if (tree.Status == ParseTreeStatus.Error) { ClearStyle(GetStyleIndexMask(new Style[] { WavyStyle })); foreach (var msg in tree.ParserMessages) { var loc = msg.Location; var place = new Place(loc.Column, loc.Line); var r = new Range(this, place, place); var f = r.GetFragment(@"[\S]"); f.SetStyle(WavyStyle); } return; } //highlight syntax ClearStyle(StyleIndex.All); foreach (var t in tree.Tokens) { var arg = new StyleNeededEventArgs(t); OnStyleNeeded(arg); if (arg.Cancel) { continue; } if (arg.Style != null) { GetTokenRange(t).SetStyle(arg.Style); continue; } switch (t.Terminal.GetType().Name) { case "KeyTerm": if ((t.Terminal.Flags & TermFlags.IsKeyword) != 0) //keywords are highlighted only { GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); } break; case "CommentTerminal": GetTokenRange(t).SetStyle(grayStyle); break; default: switch (t.Terminal.Name) { case "er_cadena": GetTokenRange(t).SetStyle(orangeStyle); break; case "er_caracter": GetTokenRange(t).SetStyle(orangeStyle); break; case "er_entero": GetTokenRange(t).SetStyle(purpleStyle); break; case "er_decimal": GetTokenRange(t).SetStyle(purpleStyle); break; case "er_visibilidad": GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); break; case "er_tipo": GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); break; case "er_etiq": GetTokenRange(t).SetStyle(redStyle); break; case "er_importar": GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); break; case "er_booleano": GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); break; case "numero": GetTokenRange(t).SetStyle(purpleStyle); break; case "er_casteo": GetTokenRange(t).SetStyle(SyntaxHighlighter.KeywordStyle); break; } break; } } }