Skip to content

Commit 7ae775d

Browse files
JSON built-in highlighter added.
1 parent 912ba78 commit 7ae775d

9 files changed

+155
-75
lines changed

Diff for: Binary/FastColoredTextBox.dll

1 KB
Binary file not shown.

Diff for: Binary/FastColoredTextBox.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Binary/Tester.exe

0 Bytes
Binary file not shown.

Diff for: FastColoredTextBox/SyntaxHighlighter.cs

+56-1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ public class SyntaxHighlighter : IDisposable
7575
protected Regex JScriptNumberRegex;
7676
protected Regex JScriptStringRegex;
7777

78+
protected Regex JSONKeywordRegex;
79+
protected Regex JSONNumberRegex;
80+
protected Regex JSONStringRegex;
81+
7882
protected Regex LuaCommentRegex1,
7983
LuaCommentRegex2,
8084
LuaCommentRegex3;
@@ -172,6 +176,9 @@ public virtual void HighlightSyntax(Language language, Range range)
172176
case Language.Lua:
173177
LuaSyntaxHighlight(range);
174178
break;
179+
case Language.JSON:
180+
JSONSyntaxHighlight(range);
181+
break;
175182
default:
176183
break;
177184
}
@@ -681,6 +688,11 @@ public void InitStyleSchema(Language lang)
681688
VariableStyle = MaroonStyle;
682689
TypesStyle = BrownStyle;
683690
break;
691+
case Language.JSON:
692+
StringStyle = BrownStyle;
693+
NumberStyle = MagentaStyle;
694+
KeywordStyle = BlueStyle;
695+
break;
684696
}
685697
}
686698

@@ -1289,6 +1301,48 @@ protected void LuaAutoIndentNeeded(object sender, AutoIndentEventArgs args)
12891301
}
12901302
}
12911303

1304+
protected void InitJSONRegex()
1305+
{
1306+
JSONStringRegex = new Regex(@"""([^\\""]|\\"")*""", RegexCompiledOption);
1307+
JSONNumberRegex = new Regex(@"\b(\d+[\.]?\d*|true|false|null)\b", RegexCompiledOption);
1308+
JSONKeywordRegex = new Regex(@"(?<range>""([^\\""]|\\"")*"")\s*:", RegexCompiledOption);
1309+
}
1310+
1311+
/// <summary>
1312+
/// Highlights JSON code
1313+
/// </summary>
1314+
/// <param name="range"></param>
1315+
public virtual void JSONSyntaxHighlight(Range range)
1316+
{
1317+
range.tb.LeftBracket = '[';
1318+
range.tb.RightBracket = ']';
1319+
range.tb.LeftBracket2 = '{';
1320+
range.tb.RightBracket2 = '}';
1321+
range.tb.BracketsHighlightStrategy = BracketsHighlightStrategy.Strategy2;
1322+
1323+
range.tb.AutoIndentCharsPatterns
1324+
= @"
1325+
^\s*[\w\.]+(\s\w+)?\s*(?<range>=)\s*(?<range>[^;]+);
1326+
";
1327+
1328+
//clear style of changed range
1329+
range.ClearStyle(StringStyle, NumberStyle, KeywordStyle);
1330+
//
1331+
if (JSONStringRegex == null)
1332+
InitJSONRegex();
1333+
//keyword highlighting
1334+
range.SetStyle(KeywordStyle, JSONKeywordRegex);
1335+
//string highlighting
1336+
range.SetStyle(StringStyle, JSONStringRegex);
1337+
//number highlighting
1338+
range.SetStyle(NumberStyle, JSONNumberRegex);
1339+
//clear folding markers
1340+
range.ClearFoldingMarkers();
1341+
//set folding markers
1342+
range.SetFoldingMarkers("{", "}"); //allow to collapse brackets block
1343+
range.SetFoldingMarkers(@"\[", @"\]"); //allow to collapse comment block
1344+
}
1345+
12921346
#region Styles
12931347

12941348
/// <summary>
@@ -1422,6 +1476,7 @@ public enum Language
14221476
SQL,
14231477
PHP,
14241478
JS,
1425-
Lua
1479+
Lua,
1480+
JSON
14261481
}
14271482
}

Diff for: Tester/PowerfulSample.Designer.cs

+63-52
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Tester/PowerfulSample.cs

+1
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ private void miCSharp_Click(object sender, EventArgs e)
140140
case "PHP": fctb.Language = Language.PHP; break;
141141
case "JS": fctb.Language = Language.JS; break;
142142
case "Lua": fctb.Language = Language.Lua; break;
143+
case "JSON": fctb.Language = Language.JSON; break;
143144
}
144145
fctb.OnSyntaxHighlight(new TextChangedEventArgs(fctb.Range));
145146
miChangeColors.Enabled = lang != "CSharp (custom highlighter)";

Diff for: Tester/Sandbox.Designer.cs

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Tester/Sandbox.cs

+25-21
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,32 @@ public Sandbox()
1818

1919
private void button1_Click(object sender, EventArgs e)
2020
{
21-
var ranges = fctb.Range.GetRanges(@"(?<=\[).*?(?=\])");
21+
var r = new Range(fctb, 2);
22+
fctb.SelectedText = "new line value";
23+
}
24+
25+
private ColorStyle colorStyle = new ColorStyle(Brushes.Black, Brushes.White, FontStyle.Regular);
26+
27+
private void fctb_TextChanged(object sender, TextChangedEventArgs e)
28+
{
29+
e.ChangedRange.SetStyle(colorStyle, @"Color\.\w+");
30+
}
31+
}
2232

23-
foreach (var range in ranges)
24-
{
25-
if(fctb.Selection.Length > 0)
26-
{
27-
//heck diapason
28-
if(range.GetIntersectionWith(fctb.Selection).Length > 0)
29-
{
30-
fctb.Selection = range;
31-
//...
32-
break;
33-
}
34-
}else
35-
//check caret
36-
if (range.Contains(fctb.Selection.Start))
37-
{
38-
fctb.Selection = range;
39-
//....
40-
break;
41-
}
42-
}
33+
class ColorStyle : TextStyle
34+
{
35+
public ColorStyle(Brush foreBrush, Brush backgroundBrush, FontStyle fontStyle) : base(foreBrush, backgroundBrush, fontStyle)
36+
{
37+
}
38+
39+
public override void Draw(Graphics gr, Point position, Range range)
40+
{
41+
//get color name
42+
var parts = range.Text.Split('.');
43+
var colorName = parts[parts.Length - 1];
44+
var color = Color.FromName(colorName);
45+
(BackgroundBrush as SolidBrush).Color = color;
46+
base.Draw(gr, position, range);
4347
}
4448
}
4549

Diff for: Tester/Sandbox.resx

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
</resheader>
120120
<data name="fctb.ServiceColors" mimetype="application/x-microsoft.net.object.binary.base64">
121121
<value>
122-
AAEAAAD/////AQAAAAAAAAAMAgAAAFdGYXN0Q29sb3JlZFRleHRCb3gsIFZlcnNpb249Mi4xNi4yNC4w
122+
AAEAAAD/////AQAAAAAAAAAMAgAAAFdGYXN0Q29sb3JlZFRleHRCb3gsIFZlcnNpb249Mi4xNi4yNi4w
123123
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWZiOGFhMTJiOTk0ZWY2MWIMAwAAAFFTeXN0
124124
ZW0uRHJhd2luZywgVmVyc2lvbj0yLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu
125125
PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACJGYXN0Q29sb3JlZFRleHRCb3hOUy5TZXJ2aWNlQ29sb3JzBgAA

0 commit comments

Comments
 (0)