diff --git a/.gitignore b/.gitignore
index bdc3535f..c00ccc58 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+pre_commit.ps1
+pre_commit.log
# Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
[Bb]in/
[Oo]bj/
diff --git a/.vs/FastColoredTextBox/CopilotIndices/17.14.827.52834/CodeChunks.db b/.vs/FastColoredTextBox/CopilotIndices/17.14.827.52834/CodeChunks.db
new file mode 100644
index 00000000..1def9ae2
Binary files /dev/null and b/.vs/FastColoredTextBox/CopilotIndices/17.14.827.52834/CodeChunks.db differ
diff --git a/.vs/FastColoredTextBox/CopilotIndices/17.14.827.52834/SemanticSymbols.db b/.vs/FastColoredTextBox/CopilotIndices/17.14.827.52834/SemanticSymbols.db
new file mode 100644
index 00000000..2105b648
Binary files /dev/null and b/.vs/FastColoredTextBox/CopilotIndices/17.14.827.52834/SemanticSymbols.db differ
diff --git a/.vs/FastColoredTextBox/DesignTimeBuild/.dtbcache.v2 b/.vs/FastColoredTextBox/DesignTimeBuild/.dtbcache.v2
new file mode 100644
index 00000000..84fe264c
Binary files /dev/null and b/.vs/FastColoredTextBox/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/.vs/FastColoredTextBox/FileContentIndex/5c30ad92-117a-40f8-a765-a319ae534ee4.vsidx b/.vs/FastColoredTextBox/FileContentIndex/5c30ad92-117a-40f8-a765-a319ae534ee4.vsidx
new file mode 100644
index 00000000..da083982
Binary files /dev/null and b/.vs/FastColoredTextBox/FileContentIndex/5c30ad92-117a-40f8-a765-a319ae534ee4.vsidx differ
diff --git a/.vs/FastColoredTextBox/FileContentIndex/5ea6c772-3d29-49fb-ba24-7021b115d99f.vsidx b/.vs/FastColoredTextBox/FileContentIndex/5ea6c772-3d29-49fb-ba24-7021b115d99f.vsidx
new file mode 100644
index 00000000..f348e5be
Binary files /dev/null and b/.vs/FastColoredTextBox/FileContentIndex/5ea6c772-3d29-49fb-ba24-7021b115d99f.vsidx differ
diff --git a/.vs/FastColoredTextBox/FileContentIndex/dc139cab-f7e3-4ba7-b035-aa32e1479e27.vsidx b/.vs/FastColoredTextBox/FileContentIndex/dc139cab-f7e3-4ba7-b035-aa32e1479e27.vsidx
new file mode 100644
index 00000000..9e49b985
Binary files /dev/null and b/.vs/FastColoredTextBox/FileContentIndex/dc139cab-f7e3-4ba7-b035-aa32e1479e27.vsidx differ
diff --git a/.vs/FastColoredTextBox/v17/.futdcache.v2 b/.vs/FastColoredTextBox/v17/.futdcache.v2
new file mode 100644
index 00000000..6c0c8dae
Binary files /dev/null and b/.vs/FastColoredTextBox/v17/.futdcache.v2 differ
diff --git a/.vs/FastColoredTextBox/v17/DocumentLayout.backup.json b/.vs/FastColoredTextBox/v17/DocumentLayout.backup.json
new file mode 100644
index 00000000..01250096
--- /dev/null
+++ b/.vs/FastColoredTextBox/v17/DocumentLayout.backup.json
@@ -0,0 +1,887 @@
+{
+ "Version": 1,
+ "WorkspaceRootPath": "F:\\REPOSITORIES\\GITHUB\\_REPO\\FastColoredTextBox\\",
+ "Documents": [
+ {
+ "AbsoluteMoniker": "D:0:0:{754FC069-D67B-A9D7-50A1-8D1CA196D8F1}|\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0440\u0435\u0448\u0435\u043D\u0438\u044F{754FC069-D67B-A9D7-50A1-8D1CA196D8F1}|F:\\REPOSITORIES\\GITHUB\\_REPO\\FastColoredTextBox\\README.md||{24510B54-A648-4D69-A6C5-F68CBDF07546}",
+ "RelativeMoniker": "D:0:0:{754FC069-D67B-A9D7-50A1-8D1CA196D8F1}|\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0440\u0435\u0448\u0435\u043D\u0438\u044F{754FC069-D67B-A9D7-50A1-8D1CA196D8F1}|solutionrelative:README.md||{24510B54-A648-4D69-A6C5-F68CBDF07546}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\autocompletesample3.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\autocompletesample2.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\autocompletesample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{A191EE00-9979-8237-69E2-64B474D1CD69}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\FastColoredTextBoxNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\fastcoloredtextboxnet8\\gotoform.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\autocompletesample.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\visiblerangechangeddelayedsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\visiblerangechangeddelayedsample.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\tooltipsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\syntaxhighlightingbyxmldescription.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\splitsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\simplestsyntaxhighlightingsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\simplestcodefoldingsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\mainform.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\sandbox.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\rulersample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\readonlyblockssample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\predefinedstylessample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\powerfulsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\powerfulcsharpeditor.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\opentypefontsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\markertoolsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\macrossample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\loggersample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\lazyloadingsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\jokesample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\imesample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\hyperlinksample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\hintsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\gifimagedrawingsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\gifimagedrawingsample.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\dynamicsyntaxhighlighting.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\dynamicsyntaxhighlighting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\documentmapsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\diffmergesample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\customwordwrapsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\customtextsourcesample2.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\customtextsourcesample2.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\customtextsourcesample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\customstylesample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\customscrollbarssample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\customfoldingsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\consolesample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\bookmarkssample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\bilingualhighlightersample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\autoindentsample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\autoindentcharssample.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TesterNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\testernet8\\autocompletesample4.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{A191EE00-9979-8237-69E2-64B474D1CD69}|..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\FastColoredTextBoxNet8.csproj|f:\\other_my_projects\\nuget\\fastcoloredtextbox-master\\fastcoloredtextbox-master\\fastcoloredtextboxnet8\\fastcoloredtextboxnet8.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|FastColoredTextBox||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{6DD14A85-CCFC-4774-BD26-0F5772512319}|FastColoredTextBox\\FastColoredTextBox.csproj|f:\\repositories\\github\\_repo\\fastcoloredtextbox\\fastcoloredtextbox\\||{B270807C-D8C6-49EB-8EBE-8E8D566637A1}|a54ad834-9219-4aa6-b589-607af21c3e26"
+ }
+ ],
+ "DocumentGroupContainers": [
+ {
+ "Orientation": 0,
+ "VerticalTabListWidth": 256,
+ "DocumentGroups": [
+ {
+ "DockedWidth": 2665,
+ "SelectedChildIndex": 13,
+ "Children": [
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{c9c0ae26-aa77-11d2-b3f0-0000f87570ee}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:1:0:{dcc4ea97-1c0c-482b-b205-e541c0df9728}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{dcc4ea97-1c0c-482b-b205-e541c0df9728}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:1:0:{e8b06f52-6d01-11d2-aa7d-00c04f990343}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{004be353-6879-467c-9d1e-9ac23cdf6d49}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{3822e751-eb69-4b0e-b301-595a9e4c74d5}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{5a4e9529-b6a0-46b5-be4f-0f0b239bc0eb}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{a80febb4-e7e0-4147-b476-21aaf2453969}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 0,
+ "Title": "README.md",
+ "DocumentMoniker": "F:\\REPOSITORIES\\GITHUB\\_REPO\\FastColoredTextBox\\README.md",
+ "RelativeDocumentMoniker": "README.md",
+ "ToolTip": "F:\\REPOSITORIES\\GITHUB\\_REPO\\FastColoredTextBox\\README.md",
+ "RelativeToolTip": "README.md",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAbAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|",
+ "WhenOpened": "2025-07-11T15:43:28.562Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{6324226f-61b6-4f28-92ee-18d4b5fe1e48}"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 4,
+ "Title": "GoToForm.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\GoToForm.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\GoToForm.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\GoToForm.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\GoToForm.Designer.cs",
+ "ViewState": "AgIAAE8AAAAAAAAAAAAjwF4AAABUAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:41:53.794Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 6,
+ "Title": "VisibleRangeChangedDelayedSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\VisibleRangeChangedDelayedSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\VisibleRangeChangedDelayedSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\VisibleRangeChangedDelayedSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\VisibleRangeChangedDelayedSample.Designer.cs",
+ "ViewState": "AgIAADwAAAAAAAAAAAAAAEIAAAAPAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:40:46.027Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 7,
+ "Title": "VisibleRangeChangedDelayedSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\VisibleRangeChangedDelayedSample.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\VisibleRangeChangedDelayedSample.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\VisibleRangeChangedDelayedSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\VisibleRangeChangedDelayedSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:40:45.025Z",
+ "EditorCaption": " [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 8,
+ "Title": "TooltipSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TooltipSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TooltipSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TooltipSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\TooltipSample.Designer.cs",
+ "ViewState": "AgIAAEIAAAAAAAAAAAAAAE0AAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:40:38.369Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 9,
+ "Title": "SyntaxHighlightingByXmlDescription.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SyntaxHighlightingByXmlDescription.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SyntaxHighlightingByXmlDescription.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SyntaxHighlightingByXmlDescription.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SyntaxHighlightingByXmlDescription.Designer.cs",
+ "ViewState": "AgIAAEEAAAAAAAAAAAAAAE8AAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:40:30.498Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 10,
+ "Title": "SplitSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SplitSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SplitSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SplitSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SplitSample.Designer.cs",
+ "ViewState": "AgIAAKEAAAAAAAAAAAAAALAAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:40:22.61Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 11,
+ "Title": "SimplestSyntaxHighlightingSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SimplestSyntaxHighlightingSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SimplestSyntaxHighlightingSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SimplestSyntaxHighlightingSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SimplestSyntaxHighlightingSample.Designer.cs",
+ "ViewState": "AgIAAFcAAAAAAAAAAAAAAGAAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:40:14.8Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 12,
+ "Title": "SimplestCodeFoldingSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SimplestCodeFoldingSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SimplestCodeFoldingSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SimplestCodeFoldingSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\SimplestCodeFoldingSample.Designer.cs",
+ "ViewState": "AgIAAEMAAAAAAAAAAAAAAE4AAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:40:06.55Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 14,
+ "Title": "Sandbox.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\Sandbox.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\Sandbox.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\Sandbox.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\Sandbox.Designer.cs",
+ "ViewState": "AgIAAEsAAAAAAAAAAAAAAF4AAAAZAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:39:43.06Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 15,
+ "Title": "RulerSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\RulerSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\RulerSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\RulerSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\RulerSample.Designer.cs",
+ "ViewState": "AgIAAEkAAAAAAAAAAAAAAFEAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:39:36.217Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 16,
+ "Title": "ReadOnlyBlocksSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\ReadOnlyBlocksSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\ReadOnlyBlocksSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\ReadOnlyBlocksSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\ReadOnlyBlocksSample.Designer.cs",
+ "ViewState": "AgIAAEUAAAAAAAAAAAAAAFAAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:39:29.017Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 17,
+ "Title": "PredefinedStylesSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PredefinedStylesSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PredefinedStylesSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PredefinedStylesSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PredefinedStylesSample.Designer.cs",
+ "ViewState": "AgIAAD8AAAAAAAAAAAAAAEgAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:39:22.03Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 18,
+ "Title": "PowerfulSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PowerfulSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PowerfulSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PowerfulSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PowerfulSample.Designer.cs",
+ "ViewState": "AgIAAMoBAAAAAAAAAAAAANsBAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:39:12.311Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 19,
+ "Title": "PowerfulCSharpEditor.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PowerfulCSharpEditor.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PowerfulCSharpEditor.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PowerfulCSharpEditor.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\PowerfulCSharpEditor.Designer.cs",
+ "ViewState": "AgIAAN4CAAAAAAAAAAAAAO4CAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:39:03.463Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 20,
+ "Title": "OpenTypeFontSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\OpenTypeFontSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\OpenTypeFontSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\OpenTypeFontSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\OpenTypeFontSample.Designer.cs",
+ "ViewState": "AgIAAJsAAAAAAAAAAAAAAKEAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:38:56.449Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 21,
+ "Title": "MarkerToolSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MarkerToolSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MarkerToolSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MarkerToolSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MarkerToolSample.Designer.cs",
+ "ViewState": "AgIAAJEAAAAAAAAAAAAAAJwAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:38:48.298Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 13,
+ "Title": "MainForm.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MainForm.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MainForm.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MainForm.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MainForm.Designer.cs",
+ "ViewState": "AgIAAPkDAAAAAAAAAAAAAAEEAAAZAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:38:33.41Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 22,
+ "Title": "MacrosSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MacrosSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MacrosSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MacrosSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\MacrosSample.Designer.cs",
+ "ViewState": "AgIAAEUAAAAAAAAAAAAAAFAAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:38:26.422Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 23,
+ "Title": "LoggerSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\LoggerSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\LoggerSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\LoggerSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\LoggerSample.Designer.cs",
+ "ViewState": "AgIAAF4AAAAAAAAAAAAAAGkAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:38:18.749Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 24,
+ "Title": "LazyLoadingSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\LazyLoadingSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\LazyLoadingSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\LazyLoadingSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\LazyLoadingSample.Designer.cs",
+ "ViewState": "AgIAALQAAAAAAAAAAAAAAMMAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:38:10.115Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 25,
+ "Title": "JokeSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\JokeSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\JokeSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\JokeSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\JokeSample.Designer.cs",
+ "ViewState": "AgIAADYAAAAAAAAAAAAAAEcAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:38:03.549Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 26,
+ "Title": "IMEsample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\IMEsample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\IMEsample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\IMEsample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\IMEsample.Designer.cs",
+ "ViewState": "AgIAAD4AAAAAAAAAAAAAAFEAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:54.498Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 27,
+ "Title": "HyperlinkSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\HyperlinkSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\HyperlinkSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\HyperlinkSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\HyperlinkSample.Designer.cs",
+ "ViewState": "AgIAADMAAAAAAAAAAAAAAD4AAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:48.457Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 28,
+ "Title": "HintSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\HintSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\HintSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\HintSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\HintSample.Designer.cs",
+ "ViewState": "AgIAAKoAAAAAAAAAAAAAALsAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:39.335Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 29,
+ "Title": "GifImageDrawingSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\GifImageDrawingSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\GifImageDrawingSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\GifImageDrawingSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\GifImageDrawingSample.Designer.cs",
+ "ViewState": "AgIAAD4AAAAAAAAAAAAAAE4AAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:32.452Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 30,
+ "Title": "GifImageDrawingSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\GifImageDrawingSample.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\GifImageDrawingSample.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\GifImageDrawingSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\GifImageDrawingSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:30.48Z",
+ "EditorCaption": " [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 31,
+ "Title": "DynamicSyntaxHighlighting.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DynamicSyntaxHighlighting.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DynamicSyntaxHighlighting.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DynamicSyntaxHighlighting.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DynamicSyntaxHighlighting.Designer.cs",
+ "ViewState": "AgIAAD4AAAAAAAAAAAAAAE0AAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:24.128Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 32,
+ "Title": "DynamicSyntaxHighlighting.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DynamicSyntaxHighlighting.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DynamicSyntaxHighlighting.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DynamicSyntaxHighlighting.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DynamicSyntaxHighlighting.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:22.411Z",
+ "EditorCaption": " [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 33,
+ "Title": "DocumentMapSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DocumentMapSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DocumentMapSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DocumentMapSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DocumentMapSample.Designer.cs",
+ "ViewState": "AgIAAFEAAAAAAAAAAAAAAFkAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:16.513Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 34,
+ "Title": "DiffMergeSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DiffMergeSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DiffMergeSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DiffMergeSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\DiffMergeSample.Designer.cs",
+ "ViewState": "AgIAAAwBAAAAAAAAAAAAACQBAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:08.829Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 35,
+ "Title": "CustomWordWrapSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomWordWrapSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomWordWrapSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomWordWrapSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomWordWrapSample.Designer.cs",
+ "ViewState": "AgIAAEQAAAAAAAAAAAAAAFcAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:37:02.152Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 36,
+ "Title": "CustomTextSourceSample2.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample2.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample2.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample2.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample2.Designer.cs",
+ "ViewState": "AgIAAGcAAAAAAAAAAAAAAHYAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:36:52.294Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 37,
+ "Title": "CustomTextSourceSample2.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample2.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample2.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample2.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample2.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:36:51.315Z",
+ "EditorCaption": " [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 38,
+ "Title": "CustomTextSourceSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomTextSourceSample.Designer.cs",
+ "ViewState": "AgIAAEAAAAAAAAAAAAAAAFAAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:36:43.693Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 39,
+ "Title": "CustomStyleSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomStyleSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomStyleSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomStyleSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomStyleSample.Designer.cs",
+ "ViewState": "AgIAAFAAAAAAAAAAAAAAAGoAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:36:32.756Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 40,
+ "Title": "CustomScrollBarsSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomScrollBarsSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomScrollBarsSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomScrollBarsSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomScrollBarsSample.Designer.cs",
+ "ViewState": "AgIAAI4AAAAAAAAAAAAAAKkAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:36:19.625Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 41,
+ "Title": "CustomFoldingSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomFoldingSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomFoldingSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomFoldingSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\CustomFoldingSample.Designer.cs",
+ "ViewState": "AgIAAEkAAAAAAAAAAADwv1IAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:36:09.95Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 42,
+ "Title": "ConsoleSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\ConsoleSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\ConsoleSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\ConsoleSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\ConsoleSample.Designer.cs",
+ "ViewState": "AgIAAFsAAAAAAAAAAAAkwGkAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:36:01.122Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 43,
+ "Title": "BookmarksSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\BookmarksSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\BookmarksSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\BookmarksSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\BookmarksSample.Designer.cs",
+ "ViewState": "AgIAAH4AAAAAAAAAAAAUwIQAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:35:48.499Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 44,
+ "Title": "BilingualHighlighterSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\BilingualHighlighterSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\BilingualHighlighterSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\BilingualHighlighterSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\BilingualHighlighterSample.Designer.cs",
+ "ViewState": "AgIAACIAAAAAAAAAAAAmwD0AAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:35:37.842Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 45,
+ "Title": "AutoIndentSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutoIndentSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutoIndentSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutoIndentSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutoIndentSample.Designer.cs",
+ "ViewState": "AgIAAGUAAAAAAAAAAAAAAHsAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:35:30.899Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 46,
+ "Title": "AutoIndentCharsSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutoIndentCharsSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutoIndentCharsSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutoIndentCharsSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutoIndentCharsSample.Designer.cs",
+ "ViewState": "AgIAAE8AAAAAAAAAAAAAAGAAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:35:21.755Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 47,
+ "Title": "AutocompleteSample4.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample4.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample4.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample4.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample4.Designer.cs",
+ "ViewState": "AgIAAE4AAAAAAAAAAAAAAGUAAAA7AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:35:14.353Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 1,
+ "Title": "AutocompleteSample3.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample3.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample3.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample3.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample3.Designer.cs",
+ "ViewState": "AgIAAFYAAAAAAAAAAAAjwGYAAAApAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:35:03.427Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 2,
+ "Title": "AutocompleteSample2.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample2.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample2.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample2.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample2.Designer.cs",
+ "ViewState": "AgIAAGMAAAAAAAAAAAAjwHIAAAA6AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:34:39.538Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 3,
+ "Title": "AutocompleteSample.Designer.cs",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample.Designer.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample.Designer.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample.Designer.cs",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample.Designer.cs",
+ "ViewState": "AgIAAFgAAAAAAAAAAAAjwGcAAAA6AAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:34:23.653Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 5,
+ "Title": "AutocompleteSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample.cs",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample.cs",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\TesterNet8\\AutocompleteSample.cs [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-11T15:33:55.83Z",
+ "EditorCaption": " [\u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440]"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 48,
+ "Title": "FastColoredTextBoxNet8",
+ "DocumentMoniker": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\FastColoredTextBoxNet8.csproj",
+ "RelativeDocumentMoniker": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\FastColoredTextBoxNet8.csproj",
+ "ToolTip": "F:\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\FastColoredTextBoxNet8.csproj",
+ "RelativeToolTip": "..\\..\\..\\..\\OTHER_MY_PROJECTS\\NUGET\\FastColoredTextBox-master\\FastColoredTextBox-master\\FastColoredTextBoxNet8\\FastColoredTextBoxNet8.csproj",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
+ "WhenOpened": "2025-07-11T15:31:02.57Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 49,
+ "Title": "FastColoredTextBox",
+ "DocumentMoniker": "F:\\REPOSITORIES\\GITHUB\\_REPO\\FastColoredTextBox\\FastColoredTextBox\\FastColoredTextBox.csproj",
+ "RelativeDocumentMoniker": "FastColoredTextBox\\FastColoredTextBox.csproj",
+ "ToolTip": "F:\\REPOSITORIES\\GITHUB\\_REPO\\FastColoredTextBox\\FastColoredTextBox\\FastColoredTextBox.csproj",
+ "RelativeToolTip": "FastColoredTextBox\\FastColoredTextBox.csproj",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
+ "WhenOpened": "2025-07-11T15:30:45.275Z",
+ "EditorCaption": ""
+ }
+ ]
+ },
+ {
+ "DockedWidth": 1265,
+ "SelectedChildIndex": -1,
+ "Children": [
+ {
+ "$type": "Bookmark",
+ "Name": "ST:129:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vs/FastColoredTextBox/v17/DocumentLayout.json b/.vs/FastColoredTextBox/v17/DocumentLayout.json
new file mode 100644
index 00000000..51a30f55
--- /dev/null
+++ b/.vs/FastColoredTextBox/v17/DocumentLayout.json
@@ -0,0 +1,85 @@
+{
+ "Version": 1,
+ "WorkspaceRootPath": "F:\\REPOSITORIES\\GITHUB\\_REPO\\FastColoredTextBox\\",
+ "Documents": [],
+ "DocumentGroupContainers": [
+ {
+ "Orientation": 0,
+ "VerticalTabListWidth": 256,
+ "DocumentGroups": [
+ {
+ "DockedWidth": 2665,
+ "SelectedChildIndex": -1,
+ "Children": [
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{c9c0ae26-aa77-11d2-b3f0-0000f87570ee}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{d78612c7-9962-4b83-95d9-268046dad23a}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:1:0:{dcc4ea97-1c0c-482b-b205-e541c0df9728}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{dcc4ea97-1c0c-482b-b205-e541c0df9728}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:1:0:{e8b06f52-6d01-11d2-aa7d-00c04f990343}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{004be353-6879-467c-9d1e-9ac23cdf6d49}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{3822e751-eb69-4b0e-b301-595a9e4c74d5}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{5a4e9529-b6a0-46b5-be4f-0f0b239bc0eb}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{a80febb4-e7e0-4147-b476-21aaf2453969}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
+ }
+ ]
+ },
+ {
+ "DockedWidth": 1265,
+ "SelectedChildIndex": -1,
+ "Children": [
+ {
+ "$type": "Bookmark",
+ "Name": "ST:129:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+ },
+ {
+ "$type": "Bookmark",
+ "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vs/FastColoredTextBox/v17/TestStore/0/000.testlog b/.vs/FastColoredTextBox/v17/TestStore/0/000.testlog
new file mode 100644
index 00000000..deebd0e6
Binary files /dev/null and b/.vs/FastColoredTextBox/v17/TestStore/0/000.testlog differ
diff --git a/.vs/FastColoredTextBox/v17/TestStore/0/testlog.manifest b/.vs/FastColoredTextBox/v17/TestStore/0/testlog.manifest
new file mode 100644
index 00000000..e92ede29
Binary files /dev/null and b/.vs/FastColoredTextBox/v17/TestStore/0/testlog.manifest differ
diff --git a/.vs/ProjectEvaluation/fastcoloredtextbox.metadata.v9.bin b/.vs/ProjectEvaluation/fastcoloredtextbox.metadata.v9.bin
new file mode 100644
index 00000000..7ba6ccbc
Binary files /dev/null and b/.vs/ProjectEvaluation/fastcoloredtextbox.metadata.v9.bin differ
diff --git a/.vs/ProjectEvaluation/fastcoloredtextbox.projects.v9.bin b/.vs/ProjectEvaluation/fastcoloredtextbox.projects.v9.bin
new file mode 100644
index 00000000..270531af
Binary files /dev/null and b/.vs/ProjectEvaluation/fastcoloredtextbox.projects.v9.bin differ
diff --git a/.vs/ProjectEvaluation/fastcoloredtextbox.strings.v9.bin b/.vs/ProjectEvaluation/fastcoloredtextbox.strings.v9.bin
new file mode 100644
index 00000000..59571584
Binary files /dev/null and b/.vs/ProjectEvaluation/fastcoloredtextbox.strings.v9.bin differ
diff --git a/Binary/FastColoredTextBoxNet8.dll b/Binary/FastColoredTextBoxNet8.dll
new file mode 100644
index 00000000..e59a1a12
Binary files /dev/null and b/Binary/FastColoredTextBoxNet8.dll differ
diff --git a/FastColoredTextBox.sln b/FastColoredTextBox.sln
index 17b7d834..f87b303f 100644
--- a/FastColoredTextBox.sln
+++ b/FastColoredTextBox.sln
@@ -1,12 +1,23 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36301.6 d17.14
+MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tester", "Tester\Tester.csproj", "{EBE443EE-F4C7-49E6-AC22-959CA62FAA05}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastColoredTextBox", "FastColoredTextBox\FastColoredTextBox.csproj", "{6DD14A85-CCFC-4774-BD26-0F5772512319}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TesterVB", "TesterVB\TesterVB.vbproj", "{3EF3A5A0-2365-41FD-97A0-254A2CFC6577}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastColoredTextBoxNet8", "..\..\..\..\OTHER_MY_PROJECTS\NUGET\FastColoredTextBox-master\FastColoredTextBox-master\FastColoredTextBoxNet8\FastColoredTextBoxNet8.csproj", "{A191EE00-9979-8237-69E2-64B474D1CD69}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TesterNet8", "..\..\..\..\OTHER_MY_PROJECTS\NUGET\FastColoredTextBox-master\FastColoredTextBox-master\TesterNet8\TesterNet8.csproj", "{8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Элементы решения", "Элементы решения", "{754FC069-D67B-A9D7-50A1-8D1CA196D8F1}"
+ ProjectSection(SolutionItems) = preProject
+ README.md = README.md
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -47,8 +58,35 @@ Global
{3EF3A5A0-2365-41FD-97A0-254A2CFC6577}.Release|Mixed Platforms.Build.0 = Release|x86
{3EF3A5A0-2365-41FD-97A0-254A2CFC6577}.Release|x86.ActiveCfg = Release|x86
{3EF3A5A0-2365-41FD-97A0-254A2CFC6577}.Release|x86.Build.0 = Release|x86
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Debug|x86.Build.0 = Debug|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Release|x86.ActiveCfg = Release|Any CPU
+ {A191EE00-9979-8237-69E2-64B474D1CD69}.Release|x86.Build.0 = Release|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Debug|x86.Build.0 = Debug|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Release|x86.ActiveCfg = Release|Any CPU
+ {8A4B138A-FDDC-2680-8BC3-C0BCB7297FCA}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {95E9EE79-D741-4628-B78D-A9115FCC56A3}
+ EndGlobalSection
EndGlobal
diff --git a/FastColoredTextBox/AutocompleteItem.cs b/FastColoredTextBox/AutocompleteItem.cs
index 59feec4d..a363dfa6 100644
--- a/FastColoredTextBox/AutocompleteItem.cs
+++ b/FastColoredTextBox/AutocompleteItem.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Drawing;
using System.Drawing.Printing;
diff --git a/FastColoredTextBox/AutocompleteMenu.cs b/FastColoredTextBox/AutocompleteMenu.cs
index 829783ac..0773ec9e 100644
--- a/FastColoredTextBox/AutocompleteMenu.cs
+++ b/FastColoredTextBox/AutocompleteMenu.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
diff --git a/FastColoredTextBox/Bookmarks.cs b/FastColoredTextBox/Bookmarks.cs
index ad220d98..d9c9ccea 100644
--- a/FastColoredTextBox/Bookmarks.cs
+++ b/FastColoredTextBox/Bookmarks.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
diff --git a/FastColoredTextBox/Char.cs b/FastColoredTextBox/Char.cs
index 9f848c97..d654f094 100644
--- a/FastColoredTextBox/Char.cs
+++ b/FastColoredTextBox/Char.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
namespace FastColoredTextBoxNS
{
diff --git a/FastColoredTextBox/CommandManager.cs b/FastColoredTextBox/CommandManager.cs
index ce1e1bf5..56e5159d 100644
--- a/FastColoredTextBox/CommandManager.cs
+++ b/FastColoredTextBox/CommandManager.cs
@@ -1,4 +1,12 @@
-using System.Collections.Generic;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Collections.Generic;
using System;
namespace FastColoredTextBoxNS
diff --git a/FastColoredTextBox/Commands.cs b/FastColoredTextBox/Commands.cs
index c83ac962..a2fd4504 100644
--- a/FastColoredTextBox/Commands.cs
+++ b/FastColoredTextBox/Commands.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
namespace FastColoredTextBoxNS
diff --git a/FastColoredTextBox/DocumentMap.cs b/FastColoredTextBox/DocumentMap.cs
index f3eb38a7..1e4e2516 100644
--- a/FastColoredTextBox/DocumentMap.cs
+++ b/FastColoredTextBox/DocumentMap.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
diff --git a/FastColoredTextBox/EncodingDetector.cs b/FastColoredTextBox/EncodingDetector.cs
index 2dc202d0..e0d95b32 100644
--- a/FastColoredTextBox/EncodingDetector.cs
+++ b/FastColoredTextBox/EncodingDetector.cs
@@ -1,4 +1,12 @@
-// Copyright Tao Klerks, 2010-2012, tao@klerks.biz
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+// Copyright Tao Klerks, 2010-2012, tao@klerks.biz
// Licensed under the modified BSD license.
diff --git a/FastColoredTextBox/ExportToHTML.cs b/FastColoredTextBox/ExportToHTML.cs
index c2e07b9b..1ad2dfb3 100644
--- a/FastColoredTextBox/ExportToHTML.cs
+++ b/FastColoredTextBox/ExportToHTML.cs
@@ -1,4 +1,12 @@
-using System.Text;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Text;
using System.Drawing;
using System.Collections.Generic;
diff --git a/FastColoredTextBox/ExportToRTF.cs b/FastColoredTextBox/ExportToRTF.cs
index bc35276f..25874093 100644
--- a/FastColoredTextBox/ExportToRTF.cs
+++ b/FastColoredTextBox/ExportToRTF.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
diff --git a/FastColoredTextBox/FastColoredTextBox.cs b/FastColoredTextBox/FastColoredTextBox.cs
index 9af2ff3c..95289ac1 100644
--- a/FastColoredTextBox/FastColoredTextBox.cs
+++ b/FastColoredTextBox/FastColoredTextBox.cs
@@ -1,4 +1,12 @@
-//
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
diff --git a/FastColoredTextBox/FileTextSource.cs b/FastColoredTextBox/FileTextSource.cs
index b8b76a0b..a70c445b 100644
--- a/FastColoredTextBox/FileTextSource.cs
+++ b/FastColoredTextBox/FileTextSource.cs
@@ -1,4 +1,12 @@
-//#define debug
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+//#define debug
using System;
using System.Collections.Generic;
diff --git a/FastColoredTextBox/FindForm.Designer.cs b/FastColoredTextBox/FindForm.Designer.cs
index 7c19b416..17ec79a9 100644
--- a/FastColoredTextBox/FindForm.Designer.cs
+++ b/FastColoredTextBox/FindForm.Designer.cs
@@ -1,4 +1,12 @@
-namespace FastColoredTextBoxNS
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+namespace FastColoredTextBoxNS
{
partial class FindForm
{
diff --git a/FastColoredTextBox/FindForm.cs b/FastColoredTextBox/FindForm.cs
index b20282d5..4d798ae4 100644
--- a/FastColoredTextBox/FindForm.cs
+++ b/FastColoredTextBox/FindForm.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Collections.Generic;
diff --git a/FastColoredTextBox/GoToForm.Designer.cs b/FastColoredTextBox/GoToForm.Designer.cs
index 58eabf46..70505193 100644
--- a/FastColoredTextBox/GoToForm.Designer.cs
+++ b/FastColoredTextBox/GoToForm.Designer.cs
@@ -1,4 +1,12 @@
-namespace FastColoredTextBoxNS
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+namespace FastColoredTextBoxNS
{
partial class GoToForm
{
@@ -92,7 +100,7 @@ private void InitializeComponent()
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Go To Line";
this.TopMost = true;
this.ResumeLayout(false);
diff --git a/FastColoredTextBox/GoToForm.cs b/FastColoredTextBox/GoToForm.cs
index 2b97196c..bc037de2 100644
--- a/FastColoredTextBox/GoToForm.cs
+++ b/FastColoredTextBox/GoToForm.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Windows.Forms;
namespace FastColoredTextBoxNS
diff --git a/FastColoredTextBox/Hints.cs b/FastColoredTextBox/Hints.cs
index abfba3bf..02d0ec77 100644
--- a/FastColoredTextBox/Hints.cs
+++ b/FastColoredTextBox/Hints.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
diff --git a/FastColoredTextBox/Hotkeys.cs b/FastColoredTextBox/Hotkeys.cs
index 9bac1020..c6856667 100644
--- a/FastColoredTextBox/Hotkeys.cs
+++ b/FastColoredTextBox/Hotkeys.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
diff --git a/FastColoredTextBox/HotkeysEditorForm.Designer.cs b/FastColoredTextBox/HotkeysEditorForm.Designer.cs
index f161a78f..58ab5217 100644
--- a/FastColoredTextBox/HotkeysEditorForm.Designer.cs
+++ b/FastColoredTextBox/HotkeysEditorForm.Designer.cs
@@ -1,4 +1,12 @@
-namespace FastColoredTextBoxNS
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+namespace FastColoredTextBoxNS
{
partial class HotkeysEditorForm
{
diff --git a/FastColoredTextBox/HotkeysEditorForm.cs b/FastColoredTextBox/HotkeysEditorForm.cs
index ca882c03..c31e12b6 100644
--- a/FastColoredTextBox/HotkeysEditorForm.cs
+++ b/FastColoredTextBox/HotkeysEditorForm.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
diff --git a/FastColoredTextBox/LimitedStack.cs b/FastColoredTextBox/LimitedStack.cs
index bf3c1bd2..8c34bb37 100644
--- a/FastColoredTextBox/LimitedStack.cs
+++ b/FastColoredTextBox/LimitedStack.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
namespace FastColoredTextBoxNS
{
diff --git a/FastColoredTextBox/Line.cs b/FastColoredTextBox/Line.cs
index 05885e0c..a16f26be 100644
--- a/FastColoredTextBox/Line.cs
+++ b/FastColoredTextBox/Line.cs
@@ -1,4 +1,12 @@
-using System.Collections.Generic;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Collections.Generic;
using System;
using System.Text;
using System.Drawing;
diff --git a/FastColoredTextBox/LineNumberFormatting.cs b/FastColoredTextBox/LineNumberFormatting.cs
index a059640c..811b8377 100644
--- a/FastColoredTextBox/LineNumberFormatting.cs
+++ b/FastColoredTextBox/LineNumberFormatting.cs
@@ -1,4 +1,12 @@
-namespace FastColoredTextBoxNS
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+namespace FastColoredTextBoxNS
{
///
/// Customize how we display the line numbers
diff --git a/FastColoredTextBox/LinesAccessor.cs b/FastColoredTextBox/LinesAccessor.cs
index ad6259c2..31e099c7 100644
--- a/FastColoredTextBox/LinesAccessor.cs
+++ b/FastColoredTextBox/LinesAccessor.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Text;
diff --git a/FastColoredTextBox/MacrosManager.cs b/FastColoredTextBox/MacrosManager.cs
index 1307b4ff..4f15bb2d 100644
--- a/FastColoredTextBox/MacrosManager.cs
+++ b/FastColoredTextBox/MacrosManager.cs
@@ -1,4 +1,12 @@
-using System.Collections.Generic;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
diff --git a/FastColoredTextBox/Place.cs b/FastColoredTextBox/Place.cs
index 0df32df6..2e9a689c 100644
--- a/FastColoredTextBox/Place.cs
+++ b/FastColoredTextBox/Place.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
namespace FastColoredTextBoxNS
{
diff --git a/FastColoredTextBox/PlatformType.cs b/FastColoredTextBox/PlatformType.cs
index 4fea3061..1748e914 100644
--- a/FastColoredTextBox/PlatformType.cs
+++ b/FastColoredTextBox/PlatformType.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
diff --git a/FastColoredTextBox/Properties/AssemblyInfo.cs b/FastColoredTextBox/Properties/AssemblyInfo.cs
index 1bc524e0..59ab5d03 100644
--- a/FastColoredTextBox/Properties/AssemblyInfo.cs
+++ b/FastColoredTextBox/Properties/AssemblyInfo.cs
@@ -1,4 +1,12 @@
-using System.Reflection;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
diff --git a/FastColoredTextBox/Range.cs b/FastColoredTextBox/Range.cs
index 2faabd9f..1cd4e4de 100644
--- a/FastColoredTextBox/Range.cs
+++ b/FastColoredTextBox/Range.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Text;
using System.Drawing;
using System.Text.RegularExpressions;
diff --git a/FastColoredTextBox/ReplaceForm.Designer.cs b/FastColoredTextBox/ReplaceForm.Designer.cs
index 19212bbe..616c2b1e 100644
--- a/FastColoredTextBox/ReplaceForm.Designer.cs
+++ b/FastColoredTextBox/ReplaceForm.Designer.cs
@@ -1,4 +1,12 @@
-namespace FastColoredTextBoxNS
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+namespace FastColoredTextBoxNS
{
partial class ReplaceForm
{
diff --git a/FastColoredTextBox/ReplaceForm.cs b/FastColoredTextBox/ReplaceForm.cs
index 2d7d7c1d..45e83517 100644
--- a/FastColoredTextBox/ReplaceForm.cs
+++ b/FastColoredTextBox/ReplaceForm.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Collections.Generic;
diff --git a/FastColoredTextBox/Ruler.Designer.cs b/FastColoredTextBox/Ruler.Designer.cs
index b6f99fc3..1e148354 100644
--- a/FastColoredTextBox/Ruler.Designer.cs
+++ b/FastColoredTextBox/Ruler.Designer.cs
@@ -1,4 +1,12 @@
-namespace FastColoredTextBoxNS
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+namespace FastColoredTextBoxNS
{
partial class Ruler
{
diff --git a/FastColoredTextBox/Ruler.cs b/FastColoredTextBox/Ruler.cs
index ddd91ca6..64e250a9 100644
--- a/FastColoredTextBox/Ruler.cs
+++ b/FastColoredTextBox/Ruler.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
diff --git a/FastColoredTextBox/Style.cs b/FastColoredTextBox/Style.cs
index 08b1833f..a86a5ac8 100644
--- a/FastColoredTextBox/Style.cs
+++ b/FastColoredTextBox/Style.cs
@@ -1,4 +1,12 @@
-using System.Drawing;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Drawing;
using System;
using System.Drawing.Drawing2D;
using System.Collections.Generic;
diff --git a/FastColoredTextBox/SyntaxDescriptor.cs b/FastColoredTextBox/SyntaxDescriptor.cs
index 0162fb6f..f9065b02 100644
--- a/FastColoredTextBox/SyntaxDescriptor.cs
+++ b/FastColoredTextBox/SyntaxDescriptor.cs
@@ -1,4 +1,12 @@
-using System.Collections.Generic;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Collections.Generic;
using System.Text.RegularExpressions;
using System;
diff --git a/FastColoredTextBox/SyntaxHighlighter.cs b/FastColoredTextBox/SyntaxHighlighter.cs
index 2d24adb2..572a9257 100644
--- a/FastColoredTextBox/SyntaxHighlighter.cs
+++ b/FastColoredTextBox/SyntaxHighlighter.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
diff --git a/FastColoredTextBox/TextSource.cs b/FastColoredTextBox/TextSource.cs
index 1f153e86..fd5008a6 100644
--- a/FastColoredTextBox/TextSource.cs
+++ b/FastColoredTextBox/TextSource.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
diff --git a/FastColoredTextBox/TypeDescriptor.cs b/FastColoredTextBox/TypeDescriptor.cs
index d84c37ac..499fca1a 100644
--- a/FastColoredTextBox/TypeDescriptor.cs
+++ b/FastColoredTextBox/TypeDescriptor.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.ComponentModel;
using System.Windows.Forms;
diff --git a/FastColoredTextBox/UnfocusablePanel.cs b/FastColoredTextBox/UnfocusablePanel.cs
index 8abf1315..be092009 100644
--- a/FastColoredTextBox/UnfocusablePanel.cs
+++ b/FastColoredTextBox/UnfocusablePanel.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
diff --git a/FastColoredTextBox/VisualMarker.cs b/FastColoredTextBox/VisualMarker.cs
index 2f9e2dda..2820efe9 100644
--- a/FastColoredTextBox/VisualMarker.cs
+++ b/FastColoredTextBox/VisualMarker.cs
@@ -1,4 +1,12 @@
-using System;
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
diff --git a/FastColoredTextBoxNet8/AutocompleteItem.cs b/FastColoredTextBoxNet8/AutocompleteItem.cs
new file mode 100644
index 00000000..a363dfa6
--- /dev/null
+++ b/FastColoredTextBoxNet8/AutocompleteItem.cs
@@ -0,0 +1,274 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
+using System.Drawing;
+using System.Drawing.Printing;
+
+namespace FastColoredTextBoxNS
+{
+ ///
+ /// Item of autocomplete menu
+ ///
+ public class AutocompleteItem
+ {
+ public string Text;
+ public int ImageIndex = -1;
+ public object Tag;
+ string toolTipTitle;
+ string toolTipText;
+ string menuText;
+ public AutocompleteMenu Parent { get; internal set; }
+
+
+ public AutocompleteItem()
+ {
+ }
+
+ public AutocompleteItem(string text)
+ {
+ Text = text;
+ }
+
+ public AutocompleteItem(string text, int imageIndex)
+ : this(text)
+ {
+ this.ImageIndex = imageIndex;
+ }
+
+ public AutocompleteItem(string text, int imageIndex, string menuText)
+ : this(text, imageIndex)
+ {
+ this.menuText = menuText;
+ }
+
+ public AutocompleteItem(string text, int imageIndex, string menuText, string toolTipTitle, string toolTipText)
+ : this(text, imageIndex, menuText)
+ {
+ this.toolTipTitle = toolTipTitle;
+ this.toolTipText = toolTipText;
+ }
+
+ ///
+ /// Returns text for inserting into Textbox
+ ///
+ public virtual string GetTextForReplace()
+ {
+ return Text;
+ }
+
+ ///
+ /// Compares fragment text with this item
+ ///
+ public virtual CompareResult Compare(string fragmentText)
+ {
+ if (Text.StartsWith(fragmentText, StringComparison.InvariantCultureIgnoreCase) &&
+ Text != fragmentText)
+ return CompareResult.VisibleAndSelected;
+
+ return CompareResult.Hidden;
+ }
+
+ ///
+ /// Returns text for display into popup menu
+ ///
+ public override string ToString()
+ {
+ return menuText ?? Text;
+ }
+
+ ///
+ /// This method is called after item inserted into text
+ ///
+ public virtual void OnSelected(AutocompleteMenu popupMenu, SelectedEventArgs e)
+ {
+ ;
+ }
+
+ ///
+ /// Title for tooltip.
+ ///
+ /// Return null for disable tooltip for this item
+ public virtual string ToolTipTitle
+ {
+ get { return toolTipTitle; }
+ set { toolTipTitle = value; }
+ }
+
+ ///
+ /// Tooltip text.
+ ///
+ /// For display tooltip text, ToolTipTitle must be not null
+ public virtual string ToolTipText
+ {
+ get{ return toolTipText; }
+ set { toolTipText = value; }
+ }
+
+ ///
+ /// Menu text. This text is displayed in the drop-down menu.
+ ///
+ public virtual string MenuText
+ {
+ get { return menuText; }
+ set { menuText = value; }
+ }
+
+ ///
+ /// Fore color of text of item
+ ///
+ public virtual Color ForeColor
+ {
+ get { return Color.Transparent; }
+ set { throw new NotImplementedException("Override this property to change color"); }
+ }
+
+ ///
+ /// Back color of item
+ ///
+ public virtual Color BackColor
+ {
+ get { return Color.Transparent; }
+ set { throw new NotImplementedException("Override this property to change color"); }
+ }
+ }
+
+ public enum CompareResult
+ {
+ ///
+ /// Item do not appears
+ ///
+ Hidden,
+ ///
+ /// Item appears
+ ///
+ Visible,
+ ///
+ /// Item appears and will selected
+ ///
+ VisibleAndSelected
+ }
+
+ ///
+ /// Autocomplete item for code snippets
+ ///
+ /// Snippet can contain special char ^ for caret position.
+ public class SnippetAutocompleteItem : AutocompleteItem
+ {
+ public SnippetAutocompleteItem(string snippet)
+ {
+ Text = snippet.Replace("\r", "");
+ ToolTipTitle = "Code snippet:";
+ ToolTipText = Text;
+ }
+
+ public override string ToString()
+ {
+ return MenuText ?? Text.Replace("\n", " ").Replace("^", "");
+ }
+
+ public override string GetTextForReplace()
+ {
+ return Text;
+ }
+
+ public override void OnSelected(AutocompleteMenu popupMenu, SelectedEventArgs e)
+ {
+ e.Tb.BeginUpdate();
+ e.Tb.Selection.BeginUpdate();
+ //remember places
+ var p1 = popupMenu.Fragment.Start;
+ var p2 = e.Tb.Selection.Start;
+ //do auto indent
+ if (e.Tb.AutoIndent)
+ {
+ for (int iLine = p1.iLine + 1; iLine <= p2.iLine; iLine++)
+ {
+ e.Tb.Selection.Start = new Place(0, iLine);
+ e.Tb.DoAutoIndent(iLine);
+ }
+ }
+ e.Tb.Selection.Start = p1;
+ //move caret position right and find char ^
+ while (e.Tb.Selection.CharBeforeStart != '^')
+ if (!e.Tb.Selection.GoRightThroughFolded())
+ break;
+ //remove char ^
+ e.Tb.Selection.GoLeft(true);
+ e.Tb.InsertText("");
+ //
+ e.Tb.Selection.EndUpdate();
+ e.Tb.EndUpdate();
+ }
+
+ ///
+ /// Compares fragment text with this item
+ ///
+ public override CompareResult Compare(string fragmentText)
+ {
+ if (Text.StartsWith(fragmentText, StringComparison.InvariantCultureIgnoreCase) &&
+ Text != fragmentText)
+ return CompareResult.Visible;
+
+ return CompareResult.Hidden;
+ }
+ }
+
+ ///
+ /// This autocomplete item appears after dot
+ ///
+ public class MethodAutocompleteItem : AutocompleteItem
+ {
+ string firstPart;
+ string lowercaseText;
+
+ public MethodAutocompleteItem(string text)
+ : base(text)
+ {
+ lowercaseText = Text.ToLower();
+ }
+
+ public override CompareResult Compare(string fragmentText)
+ {
+ int i = fragmentText.LastIndexOf('.');
+ if (i < 0)
+ return CompareResult.Hidden;
+ string lastPart = fragmentText.Substring(i + 1);
+ firstPart = fragmentText.Substring(0, i);
+
+ if(lastPart=="") return CompareResult.Visible;
+ if(Text.StartsWith(lastPart, StringComparison.InvariantCultureIgnoreCase))
+ return CompareResult.VisibleAndSelected;
+ if(lowercaseText.Contains(lastPart.ToLower()))
+ return CompareResult.Visible;
+
+ return CompareResult.Hidden;
+ }
+
+ public override string GetTextForReplace()
+ {
+ return firstPart + "." + Text;
+ }
+ }
+
+ ///
+ /// This Item does not check correspondence to current text fragment.
+ /// SuggestItem is intended for dynamic menus.
+ ///
+ public class SuggestItem : AutocompleteItem
+ {
+ public SuggestItem(string text, int imageIndex):base(text, imageIndex)
+ {
+ }
+
+ public override CompareResult Compare(string fragmentText)
+ {
+ return CompareResult.Visible;
+ }
+ }
+}
diff --git a/FastColoredTextBoxNet8/AutocompleteMenu.cs b/FastColoredTextBoxNet8/AutocompleteMenu.cs
new file mode 100644
index 00000000..2eddcc22
--- /dev/null
+++ b/FastColoredTextBoxNet8/AutocompleteMenu.cs
@@ -0,0 +1,805 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using System.Drawing;
+using System.ComponentModel;
+using System.Drawing.Drawing2D;
+using System.Text.RegularExpressions;
+
+namespace FastColoredTextBoxNS
+{
+ ///
+ /// Popup menu for autocomplete
+ ///
+ [Browsable(false)]
+ public class AutocompleteMenu : ToolStripDropDown, IDisposable
+ {
+ AutocompleteListView listView;
+ public ToolStripControlHost host;
+ public Range Fragment { get; internal set; }
+
+ ///
+ /// Regex pattern for serach fragment around caret
+ ///
+ public string SearchPattern { get; set; }
+ ///
+ /// Minimum fragment length for popup
+ ///
+ public int MinFragmentLength { get; set; }
+ ///
+ /// User selects item
+ ///
+ public event EventHandler Selecting;
+ ///
+ /// It fires after item inserting
+ ///
+ public event EventHandler Selected;
+ ///
+ /// Occurs when popup menu is opening
+ ///
+ public new event EventHandler Opening;
+ ///
+ /// Allow TAB for select menu item
+ ///
+ public bool AllowTabKey { get { return listView.AllowTabKey; } set { listView.AllowTabKey = value; } }
+ ///
+ /// Interval of menu appear (ms)
+ ///
+ public int AppearInterval { get { return listView.AppearInterval; } set { listView.AppearInterval = value; } }
+ ///
+ /// Sets the max tooltip window size
+ ///
+ public Size MaxTooltipSize { get { return listView.MaxToolTipSize; } set { listView.MaxToolTipSize = value; } }
+ ///
+ /// Tooltip will perm show and duration will be ignored
+ ///
+ public bool AlwaysShowTooltip { get { return listView.AlwaysShowTooltip; } set { listView.AlwaysShowTooltip = value; } }
+
+ ///
+ /// Back color of selected item
+ ///
+ [DefaultValue(typeof(Color), "Orange")]
+ public Color SelectedColor
+ {
+ get { return listView.SelectedColor; }
+ set { listView.SelectedColor = value; }
+ }
+
+ ///
+ /// Border color of hovered item
+ ///
+ [DefaultValue(typeof(Color), "Red")]
+ public Color HoveredColor
+ {
+ get { return listView.HoveredColor; }
+ set { listView.HoveredColor = value; }
+ }
+
+ public AutocompleteMenu(FastColoredTextBox tb)
+ {
+ // create a new popup and add the list view to it
+ AutoClose = false;
+ AutoSize = false;
+ Margin = Padding.Empty;
+ Padding = Padding.Empty;
+ BackColor = Color.White;
+ listView = new AutocompleteListView(tb);
+ host = new ToolStripControlHost(listView);
+ host.Margin = new Padding(2, 2, 2, 2);
+ host.Padding = Padding.Empty;
+ host.AutoSize = false;
+ host.AutoToolTip = false;
+ CalcSize();
+ base.Items.Add(host);
+ listView.Parent = this;
+ SearchPattern = @"[\w\.]";
+ MinFragmentLength = 2;
+
+ }
+
+ public new Font Font
+ {
+ get { return listView.Font; }
+ set { listView.Font = value; }
+ }
+
+ new internal void OnOpening(CancelEventArgs args)
+ {
+ if (Opening != null)
+ Opening(this, args);
+ }
+
+ public new void Close()
+ {
+ listView.toolTip.Hide(listView);
+ base.Close();
+ }
+
+ internal void CalcSize()
+ {
+ host.Size = listView.Size;
+ Size = new System.Drawing.Size(listView.Size.Width + 4, listView.Size.Height + 4);
+ }
+
+ public virtual void OnSelecting()
+ {
+ listView.OnSelecting();
+ }
+
+ public void SelectNext(int shift)
+ {
+ listView.SelectNext(shift);
+ }
+
+ internal void OnSelecting(SelectingEventArgs args)
+ {
+ if (Selecting != null)
+ Selecting(this, args);
+ }
+
+ public void OnSelected(SelectedEventArgs args)
+ {
+ if (Selected != null)
+ Selected(this, args);
+ }
+
+ public new AutocompleteListView Items
+ {
+ get { return listView; }
+ }
+
+ ///
+ /// Shows popup menu immediately
+ ///
+ /// If True - MinFragmentLength will be ignored
+ public void Show(bool forced)
+ {
+ Items.DoAutocomplete(forced);
+ }
+
+ ///
+ /// Minimal size of menu
+ ///
+ public new Size MinimumSize
+ {
+ get { return Items.MinimumSize; }
+ set { Items.MinimumSize = value; }
+ }
+
+ ///
+ /// Image list of menu
+ ///
+ public new ImageList ImageList
+ {
+ get { return Items.ImageList; }
+ set { Items.ImageList = value; }
+ }
+
+ ///
+ /// Tooltip duration (ms)
+ ///
+ public int ToolTipDuration
+ {
+ get { return Items.ToolTipDuration; }
+ set { Items.ToolTipDuration = value; }
+ }
+
+ ///
+ /// Tooltip
+ ///
+ public ToolTip ToolTip
+ {
+ get { return Items.toolTip; }
+ set { Items.toolTip = value; }
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+ if (listView != null && !listView.IsDisposed)
+ listView.Dispose();
+ }
+ }
+
+ [System.ComponentModel.ToolboxItem(false)]
+ public class AutocompleteListView : UserControl, IDisposable
+ {
+ public event EventHandler FocussedItemIndexChanged;
+
+ internal List visibleItems;
+ IEnumerable sourceItems = new List();
+ int focussedItemIndex = 0;
+ int hoveredItemIndex = -1;
+
+ private int ItemHeight
+ {
+ get { return Font.Height + 2; }
+ }
+
+ AutocompleteMenu Menu { get { return Parent as AutocompleteMenu; } }
+ int oldItemCount = 0;
+ FastColoredTextBox tb;
+ internal ToolTip toolTip = new ToolTip();
+ System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
+
+ internal bool AllowTabKey { get; set; }
+ public ImageList ImageList { get; set; }
+ internal int AppearInterval { get { return timer.Interval; } set { timer.Interval = value; } }
+ internal int ToolTipDuration { get; set; }
+ internal Size MaxToolTipSize { get; set; }
+ internal bool AlwaysShowTooltip
+ {
+ get { return toolTip.ShowAlways; }
+ set { toolTip.ShowAlways = value; }
+ }
+
+ public Color SelectedColor { get; set; }
+ public Color HoveredColor { get; set; }
+ public int FocussedItemIndex
+ {
+ get { return focussedItemIndex; }
+ set
+ {
+ if (focussedItemIndex != value)
+ {
+ focussedItemIndex = value;
+ if (FocussedItemIndexChanged != null)
+ FocussedItemIndexChanged(this, EventArgs.Empty);
+ }
+ }
+ }
+
+ public AutocompleteItem FocussedItem
+ {
+ get
+ {
+ if (FocussedItemIndex >= 0 && focussedItemIndex < visibleItems.Count)
+ return visibleItems[focussedItemIndex];
+ return null;
+ }
+ set
+ {
+ FocussedItemIndex = visibleItems.IndexOf(value);
+ }
+ }
+
+ internal AutocompleteListView(FastColoredTextBox tb)
+ {
+ SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
+ base.Font = new Font(FontFamily.GenericSansSerif, 9);
+ visibleItems = new List();
+ VerticalScroll.SmallChange = ItemHeight;
+ MaximumSize = new Size(Size.Width, 180);
+ toolTip.ShowAlways = false;
+ AppearInterval = 500;
+ timer.Tick += new EventHandler(timer_Tick);
+ SelectedColor = Color.Orange;
+ HoveredColor = Color.Red;
+ ToolTipDuration = 3000;
+ toolTip.Popup += ToolTip_Popup;
+
+ this.tb = tb;
+
+ tb.KeyDown += new KeyEventHandler(tb_KeyDown);
+ tb.SelectionChanged += new EventHandler(tb_SelectionChanged);
+ tb.KeyPressed += new KeyPressEventHandler(tb_KeyPressed);
+
+ Form form = tb.FindForm();
+ if (form != null)
+ {
+ form.LocationChanged += delegate { SafetyClose(); };
+ form.ResizeBegin += delegate { SafetyClose(); };
+ form.FormClosing += delegate { SafetyClose(); };
+ form.LostFocus += delegate { SafetyClose(); };
+ }
+
+ tb.LostFocus += (o, e) =>
+ {
+ if (Menu != null && !Menu.IsDisposed)
+ if (!Menu.Focused)
+ SafetyClose();
+ };
+
+ tb.Scroll += delegate { SafetyClose(); };
+
+ this.VisibleChanged += (o, e) =>
+ {
+ if (this.Visible)
+ DoSelectedVisible();
+ };
+ }
+
+ private void ToolTip_Popup(object sender, PopupEventArgs e)
+ {
+ if (MaxToolTipSize.Height > 0 && MaxToolTipSize.Width > 0)
+ e.ToolTipSize = MaxToolTipSize;
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (toolTip != null)
+ {
+ toolTip.Popup -= ToolTip_Popup;
+ toolTip.Dispose();
+ }
+ if (tb != null)
+ {
+ tb.KeyDown -= tb_KeyDown;
+ tb.KeyPressed -= tb_KeyPressed;
+ tb.SelectionChanged -= tb_SelectionChanged;
+ }
+
+ if (timer != null)
+ {
+ timer.Stop();
+ timer.Tick -= timer_Tick;
+ timer.Dispose();
+ }
+
+ base.Dispose(disposing);
+ }
+
+ void SafetyClose()
+ {
+ if (Menu != null && !Menu.IsDisposed)
+ Menu.Close();
+ }
+
+ void tb_KeyPressed(object sender, KeyPressEventArgs e)
+ {
+ bool backspaceORdel = e.KeyChar == '\b' || e.KeyChar == 0xff;
+
+ /*
+ if (backspaceORdel)
+ prevSelection = tb.Selection.Start;*/
+
+ if (Menu.Visible && !backspaceORdel)
+ DoAutocomplete(false);
+ else
+ ResetTimer(timer);
+ }
+
+ void timer_Tick(object sender, EventArgs e)
+ {
+ timer.Stop();
+ DoAutocomplete(false);
+ }
+
+ void ResetTimer(System.Windows.Forms.Timer timer)
+ {
+ timer.Stop();
+ timer.Start();
+ }
+
+ internal void DoAutocomplete()
+ {
+ DoAutocomplete(false);
+ }
+
+ internal void DoAutocomplete(bool forced)
+ {
+ if (!Menu.Enabled)
+ {
+ Menu.Close();
+ return;
+ }
+
+ visibleItems.Clear();
+ FocussedItemIndex = 0;
+ VerticalScroll.Value = 0;
+ //some magic for update scrolls
+ AutoScrollMinSize -= new Size(1, 0);
+ AutoScrollMinSize += new Size(1, 0);
+ //get fragment around caret
+ Range fragment = tb.Selection.GetFragment(Menu.SearchPattern);
+ string text = fragment.Text;
+ //calc screen point for popup menu
+ Point point = tb.PlaceToPoint(fragment.End);
+ point.Offset(2, tb.CharHeight);
+ //
+ if (forced || (text.Length >= Menu.MinFragmentLength
+ && tb.Selection.IsEmpty /*pops up only if selected range is empty*/
+ && (tb.Selection.Start > fragment.Start || text.Length == 0/*pops up only if caret is after first letter*/)))
+ {
+ Menu.Fragment = fragment;
+ bool foundSelected = false;
+ //build popup menu
+ foreach (var item in sourceItems)
+ {
+ item.Parent = Menu;
+ CompareResult res = item.Compare(text);
+ if(res != CompareResult.Hidden)
+ visibleItems.Add(item);
+ if (res == CompareResult.VisibleAndSelected && !foundSelected)
+ {
+ foundSelected = true;
+ FocussedItemIndex = visibleItems.Count - 1;
+ }
+ }
+
+ if (foundSelected)
+ {
+ AdjustScroll();
+ DoSelectedVisible();
+ }
+ }
+
+ //show popup menu
+ if (Count > 0)
+ {
+ if (!Menu.Visible)
+ {
+ CancelEventArgs args = new CancelEventArgs();
+ Menu.OnOpening(args);
+ if(!args.Cancel)
+ Menu.Show(tb, point);
+ }
+
+ DoSelectedVisible();
+ Invalidate();
+ }
+ else
+ Menu.Close();
+ }
+
+ void tb_SelectionChanged(object sender, EventArgs e)
+ {
+ /*
+ FastColoredTextBox tb = sender as FastColoredTextBox;
+
+ if (Math.Abs(prevSelection.iChar - tb.Selection.Start.iChar) > 1 ||
+ prevSelection.iLine != tb.Selection.Start.iLine)
+ Menu.Close();
+ prevSelection = tb.Selection.Start;*/
+ if (Menu.Visible)
+ {
+ bool needClose = false;
+
+ if (!tb.Selection.IsEmpty)
+ needClose = true;
+ else
+ if (!Menu.Fragment.Contains(tb.Selection.Start))
+ {
+ if (tb.Selection.Start.iLine == Menu.Fragment.End.iLine && tb.Selection.Start.iChar == Menu.Fragment.End.iChar + 1)
+ {
+ //user press key at end of fragment
+ char c = tb.Selection.CharBeforeStart;
+ if (!Regex.IsMatch(c.ToString(), Menu.SearchPattern))//check char
+ needClose = true;
+ }
+ else
+ needClose = true;
+ }
+
+ if (needClose)
+ Menu.Close();
+ }
+
+ }
+
+ void tb_KeyDown(object sender, KeyEventArgs e)
+ {
+ var tb = sender as FastColoredTextBox;
+
+ if (Menu.Visible)
+ if (ProcessKey(e.KeyCode, e.Modifiers))
+ e.Handled = true;
+
+ if (!Menu.Visible)
+ {
+ if (tb.HotkeysMapping.ContainsKey(e.KeyData) && tb.HotkeysMapping[e.KeyData] == FCTBAction.AutocompleteMenu)
+ {
+ DoAutocomplete();
+ e.Handled = true;
+ }
+ else
+ {
+ if (e.KeyCode == Keys.Escape && timer.Enabled)
+ timer.Stop();
+ }
+ }
+ }
+
+ void AdjustScroll()
+ {
+ if (oldItemCount == visibleItems.Count)
+ return;
+
+ int needHeight = ItemHeight * visibleItems.Count + 1;
+ Height = Math.Min(needHeight, MaximumSize.Height);
+ Menu.CalcSize();
+
+ AutoScrollMinSize = new Size(0, needHeight);
+ oldItemCount = visibleItems.Count;
+ }
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ AdjustScroll();
+
+ var itemHeight = ItemHeight;
+ int startI = VerticalScroll.Value / itemHeight - 1;
+ int finishI = (VerticalScroll.Value + ClientSize.Height) / itemHeight + 1;
+ startI = Math.Max(startI, 0);
+ finishI = Math.Min(finishI, visibleItems.Count);
+ int y = 0;
+ int leftPadding = 18;
+ for (int i = startI; i < finishI; i++)
+ {
+ y = i * itemHeight - VerticalScroll.Value;
+
+ var item = visibleItems[i];
+
+ if(item.BackColor != Color.Transparent)
+ using (var brush = new SolidBrush(item.BackColor))
+ e.Graphics.FillRectangle(brush, 1, y, ClientSize.Width - 1 - 1, itemHeight - 1);
+
+ if (ImageList != null && visibleItems[i].ImageIndex >= 0)
+ e.Graphics.DrawImage(ImageList.Images[item.ImageIndex], 1, y);
+
+ if (i == FocussedItemIndex)
+ using (var selectedBrush = new LinearGradientBrush(new Point(0, y - 3), new Point(0, y + itemHeight), Color.Transparent, SelectedColor))
+ using (var pen = new Pen(SelectedColor))
+ {
+ e.Graphics.FillRectangle(selectedBrush, leftPadding, y, ClientSize.Width - 1 - leftPadding, itemHeight - 1);
+ e.Graphics.DrawRectangle(pen, leftPadding, y, ClientSize.Width - 1 - leftPadding, itemHeight - 1);
+ }
+
+ if (i == hoveredItemIndex)
+ using(var pen = new Pen(HoveredColor))
+ e.Graphics.DrawRectangle(pen, leftPadding, y, ClientSize.Width - 1 - leftPadding, itemHeight - 1);
+
+ using (var brush = new SolidBrush(item.ForeColor != Color.Transparent ? item.ForeColor : ForeColor))
+ e.Graphics.DrawString(item.ToString(), Font, brush, leftPadding, y);
+ }
+ }
+
+ protected override void OnScroll(ScrollEventArgs se)
+ {
+ base.OnScroll(se);
+ Invalidate();
+ }
+
+ protected override void OnMouseClick(MouseEventArgs e)
+ {
+ base.OnMouseClick(e);
+
+ if (e.Button == System.Windows.Forms.MouseButtons.Left)
+ {
+ FocussedItemIndex = PointToItemIndex(e.Location);
+ DoSelectedVisible();
+ Invalidate();
+ }
+ }
+
+ protected override void OnMouseDoubleClick(MouseEventArgs e)
+ {
+ base.OnMouseDoubleClick(e);
+ FocussedItemIndex = PointToItemIndex(e.Location);
+ Invalidate();
+ OnSelecting();
+ }
+
+ internal virtual void OnSelecting()
+ {
+ if (FocussedItemIndex < 0 || FocussedItemIndex >= visibleItems.Count)
+ return;
+ tb.TextSource.Manager.BeginAutoUndoCommands();
+ try
+ {
+ AutocompleteItem item = FocussedItem;
+ SelectingEventArgs args = new SelectingEventArgs()
+ {
+ Item = item,
+ SelectedIndex = FocussedItemIndex
+ };
+
+ Menu.OnSelecting(args);
+
+ if (args.Cancel)
+ {
+ FocussedItemIndex = args.SelectedIndex;
+ Invalidate();
+ return;
+ }
+
+ if (!args.Handled)
+ {
+ var fragment = Menu.Fragment;
+ DoAutocomplete(item, fragment);
+ }
+
+ Menu.Close();
+ //
+ SelectedEventArgs args2 = new SelectedEventArgs()
+ {
+ Item = item,
+ Tb = Menu.Fragment.tb
+ };
+ item.OnSelected(Menu, args2);
+ Menu.OnSelected(args2);
+ }
+ finally
+ {
+ tb.TextSource.Manager.EndAutoUndoCommands();
+ }
+ }
+
+ private void DoAutocomplete(AutocompleteItem item, Range fragment)
+ {
+ string newText = item.GetTextForReplace();
+
+ //replace text of fragment
+ var tb = fragment.tb;
+
+ tb.BeginAutoUndo();
+ tb.TextSource.Manager.ExecuteCommand(new SelectCommand(tb.TextSource));
+ if (tb.Selection.ColumnSelectionMode)
+ {
+ var start = tb.Selection.Start;
+ var end = tb.Selection.End;
+ start.iChar = fragment.Start.iChar;
+ end.iChar = fragment.End.iChar;
+ tb.Selection.Start = start;
+ tb.Selection.End = end;
+ }
+ else
+ {
+ tb.Selection.Start = fragment.Start;
+ tb.Selection.End = fragment.End;
+ }
+ tb.InsertText(newText);
+ tb.TextSource.Manager.ExecuteCommand(new SelectCommand(tb.TextSource));
+ tb.EndAutoUndo();
+ tb.Focus();
+ }
+
+ int PointToItemIndex(Point p)
+ {
+ return (p.Y + VerticalScroll.Value) / ItemHeight;
+ }
+
+ protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
+ {
+ ProcessKey(keyData, Keys.None);
+
+ return base.ProcessCmdKey(ref msg, keyData);
+ }
+
+ private bool ProcessKey(Keys keyData, Keys keyModifiers)
+ {
+ if (keyModifiers == Keys.None)
+ switch (keyData)
+ {
+ case Keys.Down:
+ SelectNext(+1);
+ return true;
+ case Keys.PageDown:
+ SelectNext(+10);
+ return true;
+ case Keys.Up:
+ SelectNext(-1);
+ return true;
+ case Keys.PageUp:
+ SelectNext(-10);
+ return true;
+ case Keys.Enter:
+ OnSelecting();
+ return true;
+ case Keys.Tab:
+ if (!AllowTabKey)
+ break;
+ OnSelecting();
+ return true;
+ case Keys.Escape:
+ Menu.Close();
+ return true;
+ }
+
+ return false;
+ }
+
+ public void SelectNext(int shift)
+ {
+ FocussedItemIndex = Math.Max(0, Math.Min(FocussedItemIndex + shift, visibleItems.Count - 1));
+ DoSelectedVisible();
+ //
+ Invalidate();
+ }
+
+ private void DoSelectedVisible()
+ {
+ if (FocussedItem != null)
+ SetToolTip(FocussedItem);
+
+ var y = FocussedItemIndex * ItemHeight - VerticalScroll.Value;
+ if (y < 0)
+ VerticalScroll.Value = FocussedItemIndex * ItemHeight;
+ if (y > ClientSize.Height - ItemHeight)
+ VerticalScroll.Value = Math.Min(VerticalScroll.Maximum, FocussedItemIndex * ItemHeight - ClientSize.Height + ItemHeight);
+ //some magic for update scrolls
+ AutoScrollMinSize -= new Size(1, 0);
+ AutoScrollMinSize += new Size(1, 0);
+ }
+
+ private void SetToolTip(AutocompleteItem autocompleteItem)
+ {
+ var title = autocompleteItem.ToolTipTitle;
+ var text = autocompleteItem.ToolTipText;
+
+ if (string.IsNullOrEmpty(title))
+ {
+ toolTip.ToolTipTitle = null;
+ toolTip.SetToolTip(this, null);
+ return;
+ }
+
+ if (this.Parent != null)
+ {
+ IWin32Window window = this.Parent ?? this;
+ Point location;
+
+ if ((this.PointToScreen(this.Location).X + MaxToolTipSize.Width + 105) < Screen.FromControl(this.Parent).WorkingArea.Right)
+ location = new Point(Right + 5, 0);
+ else
+ location = new Point(Left - 105 - MaximumSize.Width, 0);
+
+ if (string.IsNullOrEmpty(text))
+ {
+ toolTip.ToolTipTitle = null;
+ toolTip.Show(title, window, location.X, location.Y, ToolTipDuration);
+ }
+ else
+ {
+ toolTip.ToolTipTitle = title;
+ toolTip.Show(text, window, location.X, location.Y, ToolTipDuration);
+ }
+ }
+ }
+
+ public int Count
+ {
+ get { return visibleItems.Count; }
+ }
+
+ public void SetAutocompleteItems(ICollection items)
+ {
+ List list = new List(items.Count);
+ foreach (var item in items)
+ list.Add(new AutocompleteItem(item));
+ SetAutocompleteItems(list);
+ }
+
+ public void SetAutocompleteItems(IEnumerable items)
+ {
+ sourceItems = items;
+ }
+
+ public void Dispose()
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public class SelectingEventArgs : EventArgs
+ {
+ public AutocompleteItem Item { get; internal set; }
+ public bool Cancel {get;set;}
+ public int SelectedIndex{get;set;}
+ public bool Handled { get; set; }
+ }
+
+ public class SelectedEventArgs : EventArgs
+ {
+ public AutocompleteItem Item { get; internal set; }
+ public FastColoredTextBox Tb { get; set; }
+ }
+}
diff --git a/FastColoredTextBoxNet8/Bookmarks.cs b/FastColoredTextBoxNet8/Bookmarks.cs
new file mode 100644
index 00000000..d9c9ccea
--- /dev/null
+++ b/FastColoredTextBoxNet8/Bookmarks.cs
@@ -0,0 +1,264 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Text;
+
+namespace FastColoredTextBoxNS
+{
+ ///
+ /// Base class for bookmark collection
+ ///
+ public abstract class BaseBookmarks : ICollection, IDisposable
+ {
+ #region ICollection
+ public abstract void Add(Bookmark item);
+ public abstract void Clear();
+ public abstract bool Contains(Bookmark item);
+ public abstract void CopyTo(Bookmark[] array, int arrayIndex);
+ public abstract int Count { get; }
+ public abstract bool IsReadOnly { get; }
+ public abstract bool Remove(Bookmark item);
+ public abstract IEnumerator GetEnumerator();
+
+ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+
+ #endregion
+
+ #region IDisposable
+ public abstract void Dispose();
+ #endregion
+
+ #region Additional properties
+
+ public abstract void Add(int lineIndex, string bookmarkName);
+ public abstract void Add(int lineIndex);
+ public abstract bool Contains(int lineIndex);
+ public abstract bool Remove(int lineIndex);
+ public abstract Bookmark GetBookmark(int i);
+
+ #endregion
+ }
+
+ ///
+ /// Collection of bookmarks
+ ///
+ public class Bookmarks : BaseBookmarks
+ {
+ protected FastColoredTextBox tb;
+ protected List items = new List();
+ protected int counter;
+
+ public Bookmarks(FastColoredTextBox tb)
+ {
+ this.tb = tb;
+ tb.LineInserted += tb_LineInserted;
+ tb.LineRemoved += tb_LineRemoved;
+ }
+
+ protected virtual void tb_LineRemoved(object sender, LineRemovedEventArgs e)
+ {
+ for(int i=0; i= e.Index)
+ {
+ if (items[i].LineIndex >= e.Index + e.Count)
+ {
+ items[i].LineIndex = items[i].LineIndex - e.Count;
+ continue;
+ }
+
+ var was = e.Index <= 0;
+ foreach (var b in items)
+ if (b.LineIndex == e.Index - 1)
+ was = true;
+
+ if(was)
+ {
+ items.RemoveAt(i);
+ i--;
+ }else
+ items[i].LineIndex = e.Index - 1;
+
+ //if (items[i].LineIndex == e.Index + e.Count - 1)
+ //{
+ // items[i].LineIndex = items[i].LineIndex - e.Count;
+ // continue;
+ //}
+ //
+ //items.RemoveAt(i);
+ //i--;
+ }
+ }
+
+ protected virtual void tb_LineInserted(object sender, LineInsertedEventArgs e)
+ {
+ for (int i = 0; i < Count; i++)
+ if (items[i].LineIndex >= e.Index)
+ {
+ items[i].LineIndex = items[i].LineIndex + e.Count;
+ }else
+ if (items[i].LineIndex == e.Index - 1 && e.Count == 1)
+ {
+ if(tb[e.Index - 1].StartSpacesCount == tb[e.Index - 1].Count)
+ items[i].LineIndex = items[i].LineIndex + e.Count;
+ }
+ }
+
+ public override void Dispose()
+ {
+ tb.LineInserted -= tb_LineInserted;
+ tb.LineRemoved -= tb_LineRemoved;
+ }
+
+ public override IEnumerator GetEnumerator()
+ {
+ foreach (var item in items)
+ yield return item;
+ }
+
+ public override void Add(int lineIndex, string bookmarkName)
+ {
+ Add(new Bookmark(tb, bookmarkName ?? "Bookmark " + counter, lineIndex));
+ }
+
+ public override void Add(int lineIndex)
+ {
+ Add(new Bookmark(tb, "Bookmark " + counter, lineIndex));
+ }
+
+ public override void Clear()
+ {
+ items.Clear();
+ counter = 0;
+ }
+
+ public override void Add(Bookmark bookmark)
+ {
+ foreach (var bm in items)
+ if (bm.LineIndex == bookmark.LineIndex)
+ return;
+
+ items.Add(bookmark);
+ counter++;
+ tb.Invalidate();
+ }
+
+ public override bool Contains(Bookmark item)
+ {
+ return items.Contains(item);
+ }
+
+ public override bool Contains(int lineIndex)
+ {
+ foreach (var item in items)
+ if (item.LineIndex == lineIndex)
+ return true;
+ return false;
+ }
+
+ public override void CopyTo(Bookmark[] array, int arrayIndex)
+ {
+ items.CopyTo(array, arrayIndex);
+ }
+
+ public override int Count
+ {
+ get { return items.Count; }
+ }
+
+ public override bool IsReadOnly
+ {
+ get { return false; }
+ }
+
+ public override bool Remove(Bookmark item)
+ {
+ tb.Invalidate();
+ return items.Remove(item);
+ }
+
+ ///
+ /// Removes bookmark by line index
+ ///
+ public override bool Remove(int lineIndex)
+ {
+ bool was = false;
+ for (int i = 0; i < Count; i++)
+ if (items[i].LineIndex == lineIndex)
+ {
+ items.RemoveAt(i);
+ i--;
+ was = true;
+ }
+ tb.Invalidate();
+
+ return was;
+ }
+
+ ///
+ /// Returns Bookmark by index.
+ ///
+ public override Bookmark GetBookmark(int i)
+ {
+ return items[i];
+ }
+ }
+
+ ///
+ /// Bookmark of FastColoredTextbox
+ ///
+ public class Bookmark
+ {
+ public FastColoredTextBox TB { get; private set; }
+ ///
+ /// Name of bookmark
+ ///
+ public string Name { get; set; }
+ ///
+ /// Line index
+ ///
+ public int LineIndex {get; set; }
+ ///
+ /// Color of bookmark sign
+ ///
+ public Color Color { get; set; }
+
+ ///
+ /// Scroll textbox to the bookmark
+ ///
+ public virtual void DoVisible()
+ {
+ TB.Selection.Start = new Place(0, LineIndex);
+ TB.DoRangeVisible(TB.Selection, true);
+ TB.Invalidate();
+ }
+
+ public Bookmark(FastColoredTextBox tb, string name, int lineIndex)
+ {
+ this.TB = tb;
+ this.Name = name;
+ this.LineIndex = lineIndex;
+ Color = tb.BookmarkColor;
+ }
+
+ public virtual void Paint(Graphics gr, Rectangle lineRect)
+ {
+ var size = TB.CharHeight - 1;
+ using (var brush = new LinearGradientBrush(new Rectangle(0, lineRect.Top, size, size), Color.White, Color, 45))
+ gr.FillEllipse(brush, 0, lineRect.Top, size, size);
+ using (var pen = new Pen(Color))
+ gr.DrawEllipse(pen, 0, lineRect.Top, size, size);
+ }
+ }
+}
diff --git a/FastColoredTextBoxNet8/Char.cs b/FastColoredTextBoxNet8/Char.cs
new file mode 100644
index 00000000..d654f094
--- /dev/null
+++ b/FastColoredTextBoxNet8/Char.cs
@@ -0,0 +1,34 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
+
+namespace FastColoredTextBoxNS
+{
+ ///
+ /// Char and style
+ ///
+ public struct Char
+ {
+ ///
+ /// Unicode character
+ ///
+ public char c;
+ ///
+ /// Style bit mask
+ ///
+ /// Bit 1 in position n means that this char will rendering by FastColoredTextBox.Styles[n]
+ public StyleIndex style;
+
+ public Char(char c)
+ {
+ this.c = c;
+ style = StyleIndex.None;
+ }
+ }
+}
diff --git a/FastColoredTextBoxNet8/CommandManager.cs b/FastColoredTextBoxNet8/CommandManager.cs
new file mode 100644
index 00000000..56e5159d
--- /dev/null
+++ b/FastColoredTextBoxNet8/CommandManager.cs
@@ -0,0 +1,253 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Collections.Generic;
+using System;
+
+namespace FastColoredTextBoxNS
+{
+ public class CommandManager
+ {
+ public static int MaxHistoryLength = 200;
+
+ LimitedStack history;
+ Stack redoStack = new Stack();
+ public TextSource TextSource{ get; private set; }
+ public bool UndoRedoStackIsEnabled { get; set; }
+
+ public event EventHandler RedoCompleted = delegate { };
+
+ public CommandManager(TextSource ts)
+ {
+ history = new LimitedStack(MaxHistoryLength);
+ TextSource = ts;
+ UndoRedoStackIsEnabled = true;
+ }
+
+ public virtual void ExecuteCommand(Command cmd)
+ {
+ if (disabledCommands > 0)
+ return;
+
+ //multirange ?
+ if (cmd.ts.CurrentTB.Selection.ColumnSelectionMode)
+ if (cmd is UndoableCommand)
+ //make wrapper
+ cmd = new MultiRangeCommand((UndoableCommand)cmd);
+
+
+ if (cmd is UndoableCommand)
+ {
+ //if range is ColumnRange, then create wrapper
+ (cmd as UndoableCommand).autoUndo = autoUndoCommands > 0;
+ history.Push(cmd as UndoableCommand);
+ }
+
+ try
+ {
+ cmd.Execute();
+ }
+ catch (ArgumentOutOfRangeException)
+ {
+ //OnTextChanging cancels enter of the text
+ if (cmd is UndoableCommand)
+ history.Pop();
+ }
+ //
+ if (!UndoRedoStackIsEnabled)
+ ClearHistory();
+ //
+ redoStack.Clear();
+ //
+ TextSource.CurrentTB.OnUndoRedoStateChanged();
+ }
+
+ public void Undo()
+ {
+ if (history.Count > 0)
+ {
+ var cmd = history.Pop();
+ //
+ BeginDisableCommands();//prevent text changing into handlers
+ try
+ {
+ cmd.Undo();
+ }
+ finally
+ {
+ EndDisableCommands();
+ }
+ //
+ redoStack.Push(cmd);
+ }
+
+ //undo next autoUndo command
+ if (history.Count > 0)
+ {
+ if (history.Peek().autoUndo)
+ Undo();
+ }
+
+ TextSource.CurrentTB.OnUndoRedoStateChanged();
+ }
+
+ protected int disabledCommands = 0;
+
+ private void EndDisableCommands()
+ {
+ disabledCommands--;
+ }
+
+ private void BeginDisableCommands()
+ {
+ disabledCommands++;
+ }
+
+ int autoUndoCommands = 0;
+
+ public void EndAutoUndoCommands()
+ {
+ autoUndoCommands--;
+ if (autoUndoCommands == 0)
+ if (history.Count > 0)
+ history.Peek().autoUndo = false;
+ }
+
+ public void BeginAutoUndoCommands()
+ {
+ autoUndoCommands++;
+ }
+
+ internal void ClearHistory()
+ {
+ history.Clear();
+ redoStack.Clear();
+ TextSource.CurrentTB.OnUndoRedoStateChanged();
+ }
+
+ internal void Redo()
+ {
+ if (redoStack.Count == 0)
+ return;
+ UndoableCommand cmd;
+ BeginDisableCommands();//prevent text changing into handlers
+ try
+ {
+ cmd = redoStack.Pop();
+ if (TextSource.CurrentTB.Selection.ColumnSelectionMode)
+ TextSource.CurrentTB.Selection.ColumnSelectionMode = false;
+ TextSource.CurrentTB.Selection.Start = cmd.sel.Start;
+ TextSource.CurrentTB.Selection.End = cmd.sel.End;
+ cmd.Execute();
+ history.Push(cmd);
+ }
+ finally
+ {
+ EndDisableCommands();
+ }
+
+ //call event
+ RedoCompleted(this, EventArgs.Empty);
+
+ //redo command after autoUndoable command
+ if (cmd.autoUndo)
+ Redo();
+
+ TextSource.CurrentTB.OnUndoRedoStateChanged();
+ }
+
+ public bool UndoEnabled
+ {
+ get
+ {
+ return history.Count > 0;
+ }
+ }
+
+ public bool RedoEnabled
+ {
+ get
+ {
+ return redoStack.Count > 0;
+ }
+ }
+ }
+
+ public abstract class Command
+ {
+ public TextSource ts;
+ public abstract void Execute();
+ }
+
+ internal class RangeInfo
+ {
+ public Place Start { get; set; }
+ public Place End { get; set; }
+
+ public RangeInfo(Range r)
+ {
+ Start = r.Start;
+ End = r.End;
+ }
+
+ internal int FromX
+ {
+ get
+ {
+ if (End.iLine < Start.iLine) return End.iChar;
+ if (End.iLine > Start.iLine) return Start.iChar;
+ return Math.Min(End.iChar, Start.iChar);
+ }
+ }
+ }
+
+ public abstract class UndoableCommand : Command
+ {
+ internal RangeInfo sel;
+ internal RangeInfo lastSel;
+ internal bool autoUndo;
+
+ public UndoableCommand(TextSource ts)
+ {
+ this.ts = ts;
+ sel = new RangeInfo(ts.CurrentTB.Selection);
+ }
+
+ public virtual void Undo()
+ {
+ OnTextChanged(true);
+ }
+
+ public override void Execute()
+ {
+ lastSel = new RangeInfo(ts.CurrentTB.Selection);
+ OnTextChanged(false);
+ }
+
+ protected virtual void OnTextChanged(bool invert)
+ {
+ bool b = sel.Start.iLine < lastSel.Start.iLine;
+ if (invert)
+ {
+ if (b)
+ ts.OnTextChanged(sel.Start.iLine, sel.Start.iLine);
+ else
+ ts.OnTextChanged(sel.Start.iLine, lastSel.Start.iLine);
+ }
+ else
+ {
+ if (b)
+ ts.OnTextChanged(sel.Start.iLine, lastSel.Start.iLine);
+ else
+ ts.OnTextChanged(lastSel.Start.iLine, lastSel.Start.iLine);
+ }
+ }
+
+ public abstract UndoableCommand Clone();
+ }
+}
\ No newline at end of file
diff --git a/FastColoredTextBoxNet8/Commands.cs b/FastColoredTextBoxNet8/Commands.cs
new file mode 100644
index 00000000..a2fd4504
--- /dev/null
+++ b/FastColoredTextBoxNet8/Commands.cs
@@ -0,0 +1,817 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace FastColoredTextBoxNS
+{
+ ///
+ /// Insert single char
+ ///
+ /// This operation includes also insertion of new line and removing char by backspace
+ public class InsertCharCommand : UndoableCommand
+ {
+ public char c;
+ char deletedChar = '\x0';
+
+ ///
+ /// Constructor
+ ///
+ /// Underlaying textbox
+ /// Inserting char
+ public InsertCharCommand(TextSource ts, char c): base(ts)
+ {
+ this.c = c;
+ }
+
+ ///
+ /// Undo operation
+ ///
+ public override void Undo()
+ {
+ ts.OnTextChanging();
+ switch (c)
+ {
+ case '\n': MergeLines(sel.Start.iLine, ts); break;
+ case '\r': break;
+ case '\b':
+ ts.CurrentTB.Selection.Start = lastSel.Start;
+ char cc = '\x0';
+ if (deletedChar != '\x0')
+ {
+ ts.CurrentTB.ExpandBlock(ts.CurrentTB.Selection.Start.iLine);
+ InsertChar(deletedChar, ref cc, ts);
+ }
+ break;
+ case '\t':
+ ts.CurrentTB.ExpandBlock(sel.Start.iLine);
+ for (int i = sel.FromX; i < lastSel.FromX; i++)
+ ts[sel.Start.iLine].RemoveAt(sel.Start.iChar);
+ ts.CurrentTB.Selection.Start = sel.Start;
+ break;
+ default:
+ ts.CurrentTB.ExpandBlock(sel.Start.iLine);
+ ts[sel.Start.iLine].RemoveAt(sel.Start.iChar);
+ ts.CurrentTB.Selection.Start = sel.Start;
+ break;
+ }
+
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(sel.Start.iLine, sel.Start.iLine));
+
+ base.Undo();
+ }
+
+ ///
+ /// Execute operation
+ ///
+ public override void Execute()
+ {
+ ts.CurrentTB.ExpandBlock(ts.CurrentTB.Selection.Start.iLine);
+ string s = c.ToString();
+ ts.OnTextChanging(ref s);
+ if (s.Length == 1)
+ c = s[0];
+
+ if (String.IsNullOrEmpty(s))
+ throw new ArgumentOutOfRangeException();
+
+
+ if (ts.Count == 0)
+ InsertLine(ts);
+ InsertChar(c, ref deletedChar, ts);
+
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(ts.CurrentTB.Selection.Start.iLine, ts.CurrentTB.Selection.Start.iLine));
+ base.Execute();
+ }
+
+ internal static void InsertChar(char c, ref char deletedChar, TextSource ts)
+ {
+ var tb = ts.CurrentTB;
+
+ switch (c)
+ {
+ case '\n':
+ if (!ts.CurrentTB.AllowInsertRemoveLines)
+ throw new ArgumentOutOfRangeException("Cant insert this char in ColumnRange mode");
+ if (ts.Count == 0)
+ InsertLine(ts);
+ InsertLine(ts);
+ break;
+ case '\r': break;
+ case '\b'://backspace
+ if (tb.Selection.Start.iChar == 0 && tb.Selection.Start.iLine == 0)
+ return;
+ if (tb.Selection.Start.iChar == 0)
+ {
+ if (!ts.CurrentTB.AllowInsertRemoveLines)
+ throw new ArgumentOutOfRangeException("Cant insert this char in ColumnRange mode");
+ if (tb.LineInfos[tb.Selection.Start.iLine - 1].VisibleState != VisibleState.Visible)
+ tb.ExpandBlock(tb.Selection.Start.iLine - 1);
+ deletedChar = '\n';
+ MergeLines(tb.Selection.Start.iLine - 1, ts);
+ }
+ else
+ {
+ deletedChar = ts[tb.Selection.Start.iLine][tb.Selection.Start.iChar - 1].c;
+ ts[tb.Selection.Start.iLine].RemoveAt(tb.Selection.Start.iChar - 1);
+ tb.Selection.Start = new Place(tb.Selection.Start.iChar - 1, tb.Selection.Start.iLine);
+ }
+ break;
+ case '\t':
+ int spaceCountNextTabStop = tb.TabLength - (tb.Selection.Start.iChar % tb.TabLength);
+ if (spaceCountNextTabStop == 0)
+ spaceCountNextTabStop = tb.TabLength;
+
+ for (int i = 0; i < spaceCountNextTabStop; i++)
+ ts[tb.Selection.Start.iLine].Insert(tb.Selection.Start.iChar, new Char(' '));
+
+ tb.Selection.Start = new Place(tb.Selection.Start.iChar + spaceCountNextTabStop, tb.Selection.Start.iLine);
+ break;
+ default:
+ ts[tb.Selection.Start.iLine].Insert(tb.Selection.Start.iChar, new Char(c));
+ tb.Selection.Start = new Place(tb.Selection.Start.iChar + 1, tb.Selection.Start.iLine);
+ break;
+ }
+ }
+
+ internal static void InsertLine(TextSource ts)
+ {
+ var tb = ts.CurrentTB;
+
+ if (!tb.Multiline && tb.LinesCount > 0)
+ return;
+
+ if (ts.Count == 0)
+ ts.InsertLine(0, ts.CreateLine());
+ else
+ BreakLines(tb.Selection.Start.iLine, tb.Selection.Start.iChar, ts);
+
+ tb.Selection.Start = new Place(0, tb.Selection.Start.iLine + 1);
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+ }
+
+ ///
+ /// Merge lines i and i+1
+ ///
+ internal static void MergeLines(int i, TextSource ts)
+ {
+ var tb = ts.CurrentTB;
+
+ if (i + 1 >= ts.Count)
+ return;
+ tb.ExpandBlock(i);
+ tb.ExpandBlock(i + 1);
+ int pos = ts[i].Count;
+ //
+ /*
+ if(ts[i].Count == 0)
+ ts.RemoveLine(i);
+ else*/
+ if (ts[i + 1].Count == 0)
+ ts.RemoveLine(i + 1);
+ else
+ {
+ ts[i].AddRange(ts[i + 1]);
+ ts.RemoveLine(i + 1);
+ }
+ tb.Selection.Start = new Place(pos, i);
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+ }
+
+ internal static void BreakLines(int iLine, int pos, TextSource ts)
+ {
+ Line newLine = ts.CreateLine();
+ for(int i=pos;i
+ /// Insert text
+ ///
+ public class InsertTextCommand : UndoableCommand
+ {
+ public string InsertedText;
+
+ ///
+ /// Constructor
+ ///
+ /// Underlaying textbox
+ /// Text for inserting
+ public InsertTextCommand(TextSource ts, string insertedText): base(ts)
+ {
+ this.InsertedText = insertedText;
+ }
+
+ ///
+ /// Undo operation
+ ///
+ public override void Undo()
+ {
+ ts.CurrentTB.Selection.Start = sel.Start;
+ ts.CurrentTB.Selection.End = lastSel.Start;
+ ts.OnTextChanging();
+ ClearSelectedCommand.ClearSelected(ts);
+ base.Undo();
+ }
+
+ ///
+ /// Execute operation
+ ///
+ public override void Execute()
+ {
+ ts.OnTextChanging(ref InsertedText);
+ InsertText(InsertedText, ts);
+ base.Execute();
+ }
+
+ internal static void InsertText(string insertedText, TextSource ts)
+ {
+ var tb = ts.CurrentTB;
+ try
+ {
+ tb.Selection.BeginUpdate();
+ char cc = '\x0';
+
+ if (ts.Count == 0)
+ {
+ InsertCharCommand.InsertLine(ts);
+ tb.Selection.Start = Place.Empty;
+ }
+ tb.ExpandBlock(tb.Selection.Start.iLine);
+ var len = insertedText.Length;
+ for (int i = 0; i < len; i++)
+ {
+ var c = insertedText[i];
+ if(c == '\r' && (i >= len - 1 || insertedText[i + 1] != '\n'))
+ InsertCharCommand.InsertChar('\n', ref cc, ts);
+ else
+ InsertCharCommand.InsertChar(c, ref cc, ts);
+ }
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+ }
+ finally {
+ tb.Selection.EndUpdate();
+ }
+ }
+
+ public override UndoableCommand Clone()
+ {
+ return new InsertTextCommand(ts, InsertedText);
+ }
+ }
+
+ ///
+ /// Insert text into given ranges
+ ///
+ public class ReplaceTextCommand : UndoableCommand
+ {
+ string insertedText;
+ List ranges;
+ List prevText = new List();
+
+ ///
+ /// Constructor
+ ///
+ /// Underlaying textbox
+ /// List of ranges for replace
+ /// Text for inserting
+ public ReplaceTextCommand(TextSource ts, List ranges, string insertedText)
+ : base(ts)
+ {
+ //sort ranges by place
+ ranges.Sort((r1, r2)=>
+ {
+ if (r1.Start.iLine == r2.Start.iLine)
+ return r1.Start.iChar.CompareTo(r2.Start.iChar);
+ return r1.Start.iLine.CompareTo(r2.Start.iLine);
+ });
+ //
+ this.ranges = ranges;
+ this.insertedText = insertedText;
+ lastSel = sel = new RangeInfo(ts.CurrentTB.Selection);
+ }
+
+ ///
+ /// Undo operation
+ ///
+ public override void Undo()
+ {
+ var tb = ts.CurrentTB;
+
+ ts.OnTextChanging();
+ tb.BeginUpdate();
+
+ tb.Selection.BeginUpdate();
+ for (int i = 0; i 0)
+ ts.OnTextChanged(ranges[0].Start.iLine, ranges[ranges.Count - 1].End.iLine);
+
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+ }
+
+ ///
+ /// Execute operation
+ ///
+ public override void Execute()
+ {
+ var tb = ts.CurrentTB;
+ prevText.Clear();
+
+ ts.OnTextChanging(ref insertedText);
+
+ tb.Selection.BeginUpdate();
+ tb.BeginUpdate();
+ for (int i = ranges.Count - 1; i >= 0; i--)
+ {
+ tb.Selection.Start = ranges[i].Start;
+ tb.Selection.End = ranges[i].End;
+ prevText.Add(tb.Selection.Text);
+ ClearSelected(ts);
+ if (insertedText != "")
+ InsertTextCommand.InsertText(insertedText, ts);
+ }
+ if(ranges.Count > 0)
+ ts.OnTextChanged(ranges[0].Start.iLine, ranges[ranges.Count - 1].End.iLine);
+ tb.EndUpdate();
+ tb.Selection.EndUpdate();
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+
+ lastSel = new RangeInfo(tb.Selection);
+ }
+
+ public override UndoableCommand Clone()
+ {
+ return new ReplaceTextCommand(ts, new List(ranges), insertedText);
+ }
+
+ internal static void ClearSelected(TextSource ts)
+ {
+ var tb = ts.CurrentTB;
+
+ tb.Selection.Normalize();
+
+ Place start = tb.Selection.Start;
+ Place end = tb.Selection.End;
+ int fromLine = Math.Min(end.iLine, start.iLine);
+ int toLine = Math.Max(end.iLine, start.iLine);
+ int fromChar = tb.Selection.FromX;
+ int toChar = tb.Selection.ToX;
+ if (fromLine < 0) return;
+ //
+ if (fromLine == toLine)
+ ts[fromLine].RemoveRange(fromChar, toChar - fromChar);
+ else
+ {
+ ts[fromLine].RemoveRange(fromChar, ts[fromLine].Count - fromChar);
+ ts[toLine].RemoveRange(0, toChar);
+ ts.RemoveLine(fromLine + 1, toLine - fromLine - 1);
+ InsertCharCommand.MergeLines(fromLine, ts);
+ }
+ }
+ }
+
+ ///
+ /// Clear selected text
+ ///
+ public class ClearSelectedCommand : UndoableCommand
+ {
+ string deletedText;
+
+ ///
+ /// Construstor
+ ///
+ /// Underlaying textbox
+ public ClearSelectedCommand(TextSource ts): base(ts)
+ {
+ }
+
+ ///
+ /// Undo operation
+ ///
+ public override void Undo()
+ {
+ ts.CurrentTB.Selection.Start = new Place(sel.FromX, Math.Min(sel.Start.iLine, sel.End.iLine));
+ ts.OnTextChanging();
+ InsertTextCommand.InsertText(deletedText, ts);
+ ts.OnTextChanged(sel.Start.iLine, sel.End.iLine);
+ ts.CurrentTB.Selection.Start = sel.Start;
+ ts.CurrentTB.Selection.End = sel.End;
+ }
+
+ ///
+ /// Execute operation
+ ///
+ public override void Execute()
+ {
+ var tb = ts.CurrentTB;
+
+ string temp = null;
+ ts.OnTextChanging(ref temp);
+ if (temp == "")
+ throw new ArgumentOutOfRangeException();
+
+ deletedText = tb.Selection.Text;
+ ClearSelected(ts);
+ lastSel = new RangeInfo(tb.Selection);
+ ts.OnTextChanged(lastSel.Start.iLine, lastSel.Start.iLine);
+ }
+
+ internal static void ClearSelected(TextSource ts)
+ {
+ var tb = ts.CurrentTB;
+
+ Place start = tb.Selection.Start;
+ Place end = tb.Selection.End;
+ int fromLine = Math.Min(end.iLine, start.iLine);
+ int toLine = Math.Max(end.iLine, start.iLine);
+ int fromChar = tb.Selection.FromX;
+ int toChar = tb.Selection.ToX;
+ if (fromLine < 0) return;
+ //
+ if (fromLine == toLine)
+ ts[fromLine].RemoveRange(fromChar, toChar - fromChar);
+ else
+ {
+ ts[fromLine].RemoveRange(fromChar, ts[fromLine].Count - fromChar);
+ ts[toLine].RemoveRange(0, toChar);
+ ts.RemoveLine(fromLine + 1, toLine - fromLine - 1);
+ InsertCharCommand.MergeLines(fromLine, ts);
+ }
+ //
+ tb.Selection.Start = new Place(fromChar, fromLine);
+ //
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(fromLine, toLine));
+ }
+
+ public override UndoableCommand Clone()
+ {
+ return new ClearSelectedCommand(ts);
+ }
+ }
+
+ ///
+ /// Replaces text
+ ///
+ public class ReplaceMultipleTextCommand : UndoableCommand
+ {
+ List ranges;
+ List prevText = new List();
+
+ public class ReplaceRange
+ {
+ public Range ReplacedRange { get; set; }
+ public String ReplaceText { get; set; }
+ }
+
+ ///
+ /// Constructor
+ ///
+ /// Underlaying textsource
+ /// List of ranges for replace
+ public ReplaceMultipleTextCommand(TextSource ts, List ranges)
+ : base(ts)
+ {
+ //sort ranges by place
+ ranges.Sort((r1, r2) =>
+ {
+ if (r1.ReplacedRange.Start.iLine == r2.ReplacedRange.Start.iLine)
+ return r1.ReplacedRange.Start.iChar.CompareTo(r2.ReplacedRange.Start.iChar);
+ return r1.ReplacedRange.Start.iLine.CompareTo(r2.ReplacedRange.Start.iLine);
+ });
+ //
+ this.ranges = ranges;
+ lastSel = sel = new RangeInfo(ts.CurrentTB.Selection);
+ }
+
+ ///
+ /// Undo operation
+ ///
+ public override void Undo()
+ {
+ var tb = ts.CurrentTB;
+
+ ts.OnTextChanging();
+
+ tb.Selection.BeginUpdate();
+ for (int i = 0; i < ranges.Count; i++)
+ {
+ tb.Selection.Start = ranges[i].ReplacedRange.Start;
+ for (int j = 0; j < ranges[i].ReplaceText.Length; j++)
+ tb.Selection.GoRight(true);
+ ClearSelectedCommand.ClearSelected(ts);
+ var prevTextIndex = ranges.Count - 1 - i;
+ InsertTextCommand.InsertText(prevText[prevTextIndex], ts);
+ ts.OnTextChanged(ranges[i].ReplacedRange.Start.iLine, ranges[i].ReplacedRange.Start.iLine);
+ }
+ tb.Selection.EndUpdate();
+
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+ }
+
+ ///
+ /// Execute operation
+ ///
+ public override void Execute()
+ {
+ var tb = ts.CurrentTB;
+ prevText.Clear();
+
+ ts.OnTextChanging();
+
+ tb.Selection.BeginUpdate();
+ for (int i = ranges.Count - 1; i >= 0; i--)
+ {
+ tb.Selection.Start = ranges[i].ReplacedRange.Start;
+ tb.Selection.End = ranges[i].ReplacedRange.End;
+ prevText.Add(tb.Selection.Text);
+ ClearSelectedCommand.ClearSelected(ts);
+ InsertTextCommand.InsertText(ranges[i].ReplaceText, ts);
+ ts.OnTextChanged(ranges[i].ReplacedRange.Start.iLine, ranges[i].ReplacedRange.End.iLine);
+ }
+ tb.Selection.EndUpdate();
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+
+ lastSel = new RangeInfo(tb.Selection);
+ }
+
+ public override UndoableCommand Clone()
+ {
+ return new ReplaceMultipleTextCommand(ts, new List(ranges));
+ }
+ }
+
+ ///
+ /// Removes lines
+ ///
+ public class RemoveLinesCommand : UndoableCommand
+ {
+ List iLines;
+ List prevText = new List();
+
+ ///
+ /// Constructor
+ ///
+ /// Underlaying textbox
+ /// List of ranges for replace
+ /// Text for inserting
+ public RemoveLinesCommand(TextSource ts, List iLines)
+ : base(ts)
+ {
+ //sort iLines
+ iLines.Sort();
+ //
+ this.iLines = iLines;
+ lastSel = sel = new RangeInfo(ts.CurrentTB.Selection);
+ }
+
+ ///
+ /// Undo operation
+ ///
+ public override void Undo()
+ {
+ var tb = ts.CurrentTB;
+
+ ts.OnTextChanging();
+
+ tb.Selection.BeginUpdate();
+ //tb.BeginUpdate();
+ for (int i = 0; i < iLines.Count; i++)
+ {
+ var iLine = iLines[i];
+
+ if(iLine < ts.Count)
+ tb.Selection.Start = new Place(0, iLine);
+ else
+ tb.Selection.Start = new Place(ts[ts.Count - 1].Count, ts.Count - 1);
+
+ InsertCharCommand.InsertLine(ts);
+ tb.Selection.Start = new Place(0, iLine);
+ var text = prevText[prevText.Count - i - 1];
+ InsertTextCommand.InsertText(text, ts);
+ ts[iLine].IsChanged = true;
+ if (iLine < ts.Count - 1)
+ ts[iLine + 1].IsChanged = true;
+ else
+ ts[iLine - 1].IsChanged = true;
+ if(text.Trim() != string.Empty)
+ ts.OnTextChanged(iLine, iLine);
+ }
+ //tb.EndUpdate();
+ tb.Selection.EndUpdate();
+
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+ }
+
+ ///
+ /// Execute operation
+ ///
+ public override void Execute()
+ {
+ var tb = ts.CurrentTB;
+ prevText.Clear();
+
+ ts.OnTextChanging();
+
+ tb.Selection.BeginUpdate();
+ for(int i = iLines.Count - 1; i >= 0; i--)
+ {
+ var iLine = iLines[i];
+
+ prevText.Add(ts[iLine].Text);//backward
+ ts.RemoveLine(iLine);
+ //ts.OnTextChanged(ranges[i].Start.iLine, ranges[i].End.iLine);
+ }
+ tb.Selection.Start = new Place(0, 0);
+ tb.Selection.EndUpdate();
+ ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1));
+
+ lastSel = new RangeInfo(tb.Selection);
+ }
+
+ public override UndoableCommand Clone()
+ {
+ return new RemoveLinesCommand(ts, new List(iLines));
+ }
+ }
+
+ ///
+ /// Wrapper for multirange commands
+ ///
+ public class MultiRangeCommand : UndoableCommand
+ {
+ private UndoableCommand cmd;
+ private Range range;
+ private List commandsByRanges = new List();
+
+ public MultiRangeCommand(UndoableCommand command):base(command.ts)
+ {
+ this.cmd = command;
+ range = ts.CurrentTB.Selection.Clone();
+ }
+
+ public override void Execute()
+ {
+ commandsByRanges.Clear();
+ var prevSelection = range.Clone();
+ var iChar = -1;
+ var iStartLine = prevSelection.Start.iLine;
+ var iEndLine = prevSelection.End.iLine;
+ ts.CurrentTB.Selection.ColumnSelectionMode = false;
+ ts.CurrentTB.Selection.BeginUpdate();
+ ts.CurrentTB.BeginUpdate();
+ ts.CurrentTB.AllowInsertRemoveLines = false;
+ try
+ {
+ if (cmd is InsertTextCommand)
+ ExecuteInsertTextCommand(ref iChar, (cmd as InsertTextCommand).InsertedText);
+ else
+ if (cmd is InsertCharCommand && (cmd as InsertCharCommand).c != '\x0' && (cmd as InsertCharCommand).c != '\b')//if not DEL or BACKSPACE
+ ExecuteInsertTextCommand(ref iChar, (cmd as InsertCharCommand).c.ToString());
+ else
+ ExecuteCommand(ref iChar);
+ }
+ catch (ArgumentOutOfRangeException)
+ {
+ }
+ finally
+ {
+ ts.CurrentTB.AllowInsertRemoveLines = true;
+ ts.CurrentTB.EndUpdate();
+
+ ts.CurrentTB.Selection = range;
+ if (iChar >= 0)
+ {
+ ts.CurrentTB.Selection.Start = new Place(iChar, iStartLine);
+ ts.CurrentTB.Selection.End = new Place(iChar, iEndLine);
+ }
+ ts.CurrentTB.Selection.ColumnSelectionMode = true;
+ ts.CurrentTB.Selection.EndUpdate();
+ }
+ }
+
+ private void ExecuteInsertTextCommand(ref int iChar, string text)
+ {
+ var lines = text.Split('\n');
+ var iLine = 0;
+ foreach (var r in range.GetSubRanges(true))
+ {
+ var line = ts.CurrentTB[r.Start.iLine];
+ var lineIsEmpty = r.End < r.Start && line.StartSpacesCount == line.Count;
+ if (!lineIsEmpty)
+ {
+ var insertedText = lines[iLine%lines.Length];
+ if (r.End < r.Start && insertedText!="")
+ {
+ //add forwarding spaces
+ insertedText = new string(' ', r.Start.iChar - r.End.iChar) + insertedText;
+ r.Start = r.End;
+ }
+ ts.CurrentTB.Selection = r;
+ var c = new InsertTextCommand(ts, insertedText);
+ c.Execute();
+ if (ts.CurrentTB.Selection.End.iChar > iChar)
+ iChar = ts.CurrentTB.Selection.End.iChar;
+ commandsByRanges.Add(c);
+ }
+ iLine++;
+ }
+ }
+
+ private void ExecuteCommand(ref int iChar)
+ {
+ foreach (var r in range.GetSubRanges(false))
+ {
+ ts.CurrentTB.Selection = r;
+ var c = cmd.Clone();
+ c.Execute();
+ if (ts.CurrentTB.Selection.End.iChar > iChar)
+ iChar = ts.CurrentTB.Selection.End.iChar;
+ commandsByRanges.Add(c);
+ }
+ }
+
+ public override void Undo()
+ {
+ ts.CurrentTB.BeginUpdate();
+ ts.CurrentTB.Selection.BeginUpdate();
+ try
+ {
+ for (int i = commandsByRanges.Count - 1; i >= 0; i--)
+ commandsByRanges[i].Undo();
+ }
+ finally
+ {
+ ts.CurrentTB.Selection.EndUpdate();
+ ts.CurrentTB.EndUpdate();
+ }
+ ts.CurrentTB.Selection = range.Clone();
+ ts.CurrentTB.OnTextChanged(range);
+ ts.CurrentTB.OnSelectionChanged();
+ ts.CurrentTB.Selection.ColumnSelectionMode = true;
+ }
+
+ public override UndoableCommand Clone()
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ ///
+ /// Remembers current selection and restore it after Undo
+ ///
+ public class SelectCommand : UndoableCommand
+ {
+ public SelectCommand(TextSource ts):base(ts)
+ {
+ }
+
+ public override void Execute()
+ {
+ //remember selection
+ lastSel = new RangeInfo(ts.CurrentTB.Selection);
+ }
+
+ protected override void OnTextChanged(bool invert)
+ {
+ }
+
+ public override void Undo()
+ {
+ //restore selection
+ ts.CurrentTB.Selection = new Range(ts.CurrentTB, lastSel.Start, lastSel.End);
+ }
+
+ public override UndoableCommand Clone()
+ {
+ var result = new SelectCommand(ts);
+ if(lastSel!=null)
+ result.lastSel = new RangeInfo(new Range(ts.CurrentTB, lastSel.Start, lastSel.End));
+ return result;
+ }
+ }
+}
diff --git a/FastColoredTextBoxNet8/DocumentMap.cs b/FastColoredTextBoxNet8/DocumentMap.cs
new file mode 100644
index 00000000..1e4e2516
--- /dev/null
+++ b/FastColoredTextBoxNet8/DocumentMap.cs
@@ -0,0 +1,258 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Drawing.Drawing2D;
+using System.Text;
+using System.Windows.Forms;
+
+namespace FastColoredTextBoxNS
+{
+ ///
+ /// Shows document map of FCTB
+ ///
+ public class DocumentMap : Control
+ {
+ public EventHandler TargetChanged;
+
+ FastColoredTextBox target;
+ private float scale = 0.3f;
+ private bool needRepaint = true;
+ private Place startPlace = Place.Empty;
+ private bool scrollbarVisible = true;
+
+ [Description("Target FastColoredTextBox")]
+ public FastColoredTextBox Target
+ {
+ get { return target; }
+ set
+ {
+ if (target != null)
+ UnSubscribe(target);
+
+ target = value;
+ if (value != null)
+ {
+ Subscribe(target);
+ }
+ OnTargetChanged();
+ }
+ }
+
+ ///
+ /// Scale
+ ///
+ [Description("Scale")]
+ [DefaultValue(0.3f)]
+ public float Scale
+ {
+ get { return scale; }
+ set
+ {
+ scale = value;
+ NeedRepaint();
+ }
+ }
+
+ ///
+ /// Scrollbar visibility
+ ///
+ [Description("Scrollbar visibility")]
+ [DefaultValue(true)]
+ public bool ScrollbarVisible
+ {
+ get { return scrollbarVisible; }
+ set
+ {
+ scrollbarVisible = value;
+ NeedRepaint();
+ }
+ }
+
+ public DocumentMap()
+ {
+ ForeColor = Color.Maroon;
+ SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
+ Application.Idle += Application_Idle;
+ }
+
+ void Application_Idle(object sender, EventArgs e)
+ {
+ if(needRepaint)
+ Invalidate();
+ }
+
+ protected virtual void OnTargetChanged()
+ {
+ NeedRepaint();
+
+ if (TargetChanged != null)
+ TargetChanged(this, EventArgs.Empty);
+ }
+
+ protected virtual void UnSubscribe(FastColoredTextBox target)
+ {
+ target.Scroll -= new ScrollEventHandler(Target_Scroll);
+ target.SelectionChangedDelayed -= new EventHandler(Target_SelectionChanged);
+ target.VisibleRangeChanged -= new EventHandler(Target_VisibleRangeChanged);
+ }
+
+ protected virtual void Subscribe(FastColoredTextBox target)
+ {
+ target.Scroll += new ScrollEventHandler(Target_Scroll);
+ target.SelectionChangedDelayed += new EventHandler(Target_SelectionChanged);
+ target.VisibleRangeChanged += new EventHandler(Target_VisibleRangeChanged);
+ }
+
+ protected virtual void Target_VisibleRangeChanged(object sender, EventArgs e)
+ {
+ NeedRepaint();
+ }
+
+ protected virtual void Target_SelectionChanged(object sender, EventArgs e)
+ {
+ NeedRepaint();
+ }
+
+ protected virtual void Target_Scroll(object sender, ScrollEventArgs e)
+ {
+ NeedRepaint();
+ }
+
+ protected override void OnResize(EventArgs e)
+ {
+ base.OnResize(e);
+ NeedRepaint();
+ }
+
+ public void NeedRepaint()
+ {
+ needRepaint = true;
+ }
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ if (target == null)
+ return;
+
+ var zoom = this.Scale * 100 / target.Zoom;
+
+ if (zoom <= float.Epsilon)
+ return;
+
+ //calc startPlace
+ var r = target.VisibleRange;
+ if (startPlace.iLine > r.Start.iLine)
+ startPlace.iLine = r.Start.iLine;
+ else
+ {
+ var endP = target.PlaceToPoint(r.End);
+ endP.Offset(0, -(int)(ClientSize.Height / zoom) + target.CharHeight);
+ var pp = target.PointToPlace(endP);
+ if (pp.iLine > startPlace.iLine)
+ startPlace.iLine = pp.iLine;
+ }
+ startPlace.iChar = 0;
+ //calc scroll pos
+ var linesCount = target.Lines.Count;
+ var sp1 = (float)r.Start.iLine / linesCount;
+ var sp2 = (float)r.End.iLine / linesCount;
+
+ //scale graphics
+ e.Graphics.ScaleTransform(zoom, zoom);
+ //draw text
+ var size = new SizeF(ClientSize.Width / zoom, ClientSize.Height / zoom);
+ target.DrawText(e.Graphics, startPlace, size.ToSize());
+
+ //draw visible rect
+ var p0 = target.PlaceToPoint(startPlace);
+ var p1 = target.PlaceToPoint(r.Start);
+ var p2 = target.PlaceToPoint(r.End);
+ var y1 = p1.Y - p0.Y;
+ var y2 = p2.Y + target.CharHeight - p0.Y;
+
+ e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
+
+ using (var brush = new SolidBrush(Color.FromArgb(50, ForeColor)))
+ using (var pen = new Pen(brush, 1 / zoom))
+ {
+ var rect = new Rectangle(0, y1, (int)((ClientSize.Width - 1) / zoom), y2 - y1);
+ e.Graphics.FillRectangle(brush, rect);
+ e.Graphics.DrawRectangle(pen, rect);
+ }
+
+ //draw scrollbar
+ if (scrollbarVisible)
+ {
+ e.Graphics.ResetTransform();
+ e.Graphics.SmoothingMode = SmoothingMode.None;
+
+ using (var brush = new SolidBrush(Color.FromArgb(200, ForeColor)))
+ {
+ var rect = new RectangleF(ClientSize.Width - 3, ClientSize.Height*sp1, 2,
+ ClientSize.Height*(sp2 - sp1));
+ e.Graphics.FillRectangle(brush, rect);
+ }
+ }
+
+ needRepaint = false;
+ }
+
+ protected override void OnMouseDown(MouseEventArgs e)
+ {
+ if (e.Button == System.Windows.Forms.MouseButtons.Left)
+ Scroll(e.Location);
+ base.OnMouseDown(e);
+ }
+
+ protected override void OnMouseMove(MouseEventArgs e)
+ {
+ if (e.Button == System.Windows.Forms.MouseButtons.Left)
+ Scroll(e.Location);
+ base.OnMouseMove(e);
+ }
+
+ private void Scroll(Point point)
+ {
+ if (target == null)
+ return;
+
+ var zoom = this.Scale*100/target.Zoom;
+
+ if (zoom <= float.Epsilon)
+ return;
+
+ var p0 = target.PlaceToPoint(startPlace);
+ p0 = new Point(0, p0.Y + (int) (point.Y/zoom));
+ var pp = target.PointToPlace(p0);
+ target.DoRangeVisible(new Range(target, pp, pp), true);
+ BeginInvoke((MethodInvoker)OnScroll);
+ }
+
+ private void OnScroll()
+ {
+ Refresh();
+ target.Refresh();
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ Application.Idle -= Application_Idle;
+ if (target != null)
+ UnSubscribe(target);
+ }
+ base.Dispose(disposing);
+ }
+ }
+}
diff --git a/FastColoredTextBoxNet8/EncodingDetector.cs b/FastColoredTextBoxNet8/EncodingDetector.cs
new file mode 100644
index 00000000..e0d95b32
--- /dev/null
+++ b/FastColoredTextBoxNet8/EncodingDetector.cs
@@ -0,0 +1,371 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+// Copyright Tao Klerks, 2010-2012, tao@klerks.biz
+// Licensed under the modified BSD license.
+
+
+using System;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace FastColoredTextBoxNS
+{
+ public static class EncodingDetector
+ {
+ const long _defaultHeuristicSampleSize = 0x10000; //completely arbitrary - inappropriate for high numbers of files / high speed requirements
+
+ public static Encoding DetectTextFileEncoding(string InputFilename)
+ {
+ using (FileStream textfileStream = File.OpenRead(InputFilename))
+ {
+ return DetectTextFileEncoding(textfileStream, _defaultHeuristicSampleSize);
+ }
+ }
+
+ public static Encoding DetectTextFileEncoding(FileStream InputFileStream, long HeuristicSampleSize)
+ {
+ bool uselessBool = false;
+ return DetectTextFileEncoding(InputFileStream, _defaultHeuristicSampleSize, out uselessBool);
+ }
+
+ public static Encoding DetectTextFileEncoding(FileStream InputFileStream, long HeuristicSampleSize, out bool HasBOM)
+ {
+ Encoding encodingFound = null;
+
+ long originalPos = InputFileStream.Position;
+
+ InputFileStream.Position = 0;
+
+
+ //First read only what we need for BOM detection
+ byte[] bomBytes = new byte[InputFileStream.Length > 4 ? 4 : InputFileStream.Length];
+ InputFileStream.Read(bomBytes, 0, bomBytes.Length);
+
+ encodingFound = DetectBOMBytes(bomBytes);
+
+ if (encodingFound != null)
+ {
+ InputFileStream.Position = originalPos;
+ HasBOM = true;
+ return encodingFound;
+ }
+
+
+ //BOM Detection failed, going for heuristics now.
+ // create sample byte array and populate it
+ byte[] sampleBytes = new byte[HeuristicSampleSize > InputFileStream.Length ? InputFileStream.Length : HeuristicSampleSize];
+ Array.Copy(bomBytes, sampleBytes, bomBytes.Length);
+ if (InputFileStream.Length > bomBytes.Length)
+ InputFileStream.Read(sampleBytes, bomBytes.Length, sampleBytes.Length - bomBytes.Length);
+ InputFileStream.Position = originalPos;
+
+ //test byte array content
+ encodingFound = DetectUnicodeInByteSampleByHeuristics(sampleBytes);
+
+ HasBOM = false;
+ return encodingFound;
+ }
+
+ public static Encoding DetectBOMBytes(byte[] BOMBytes)
+ {
+ if (BOMBytes.Length < 2)
+ return null;
+
+ if (BOMBytes[0] == 0xff
+ && BOMBytes[1] == 0xfe
+ && (BOMBytes.Length < 4
+ || BOMBytes[2] != 0
+ || BOMBytes[3] != 0
+ )
+ )
+ return Encoding.Unicode;
+
+ if (BOMBytes[0] == 0xfe
+ && BOMBytes[1] == 0xff
+ )
+ return Encoding.BigEndianUnicode;
+
+ if (BOMBytes.Length < 3)
+ return null;
+
+ if (BOMBytes[0] == 0xef && BOMBytes[1] == 0xbb && BOMBytes[2] == 0xbf)
+ return Encoding.UTF8;
+
+ if (BOMBytes[0] == 0x2b && BOMBytes[1] == 0x2f && BOMBytes[2] == 0x76)
+ return Encoding.UTF7;
+
+ if (BOMBytes.Length < 4)
+ return null;
+
+ if (BOMBytes[0] == 0xff && BOMBytes[1] == 0xfe && BOMBytes[2] == 0 && BOMBytes[3] == 0)
+ return Encoding.UTF32;
+
+ if (BOMBytes[0] == 0 && BOMBytes[1] == 0 && BOMBytes[2] == 0xfe && BOMBytes[3] == 0xff)
+ return Encoding.GetEncoding(12001);
+
+ return null;
+ }
+
+ public static Encoding DetectUnicodeInByteSampleByHeuristics(byte[] SampleBytes)
+ {
+ long oddBinaryNullsInSample = 0;
+ long evenBinaryNullsInSample = 0;
+ long suspiciousUTF8SequenceCount = 0;
+ long suspiciousUTF8BytesTotal = 0;
+ long likelyUSASCIIBytesInSample = 0;
+
+ //Cycle through, keeping count of binary null positions, possible UTF-8
+ // sequences from upper ranges of Windows-1252, and probable US-ASCII
+ // character counts.
+
+ long currentPos = 0;
+ int skipUTF8Bytes = 0;
+
+ while (currentPos < SampleBytes.Length)
+ {
+ //binary null distribution
+ if (SampleBytes[currentPos] == 0)
+ {
+ if (currentPos % 2 == 0)
+ evenBinaryNullsInSample++;
+ else
+ oddBinaryNullsInSample++;
+ }
+
+ //likely US-ASCII characters
+ if (IsCommonUSASCIIByte(SampleBytes[currentPos]))
+ likelyUSASCIIBytesInSample++;
+
+ //suspicious sequences (look like UTF-8)
+ if (skipUTF8Bytes == 0)
+ {
+ int lengthFound = DetectSuspiciousUTF8SequenceLength(SampleBytes, currentPos);
+
+ if (lengthFound > 0)
+ {
+ suspiciousUTF8SequenceCount++;
+ suspiciousUTF8BytesTotal += lengthFound;
+ skipUTF8Bytes = lengthFound - 1;
+ }
+ }
+ else
+ {
+ skipUTF8Bytes--;
+ }
+
+ currentPos++;
+ }
+
+ //1: UTF-16 LE - in english / european environments, this is usually characterized by a
+ // high proportion of odd binary nulls (starting at 0), with (as this is text) a low
+ // proportion of even binary nulls.
+ // The thresholds here used (less than 20% nulls where you expect non-nulls, and more than
+ // 60% nulls where you do expect nulls) are completely arbitrary.
+
+ if (((evenBinaryNullsInSample * 2.0) / SampleBytes.Length) < 0.2
+ && ((oddBinaryNullsInSample * 2.0) / SampleBytes.Length) > 0.6
+ )
+ return Encoding.Unicode;
+
+
+ //2: UTF-16 BE - in english / european environments, this is usually characterized by a
+ // high proportion of even binary nulls (starting at 0), with (as this is text) a low
+ // proportion of odd binary nulls.
+ // The thresholds here used (less than 20% nulls where you expect non-nulls, and more than
+ // 60% nulls where you do expect nulls) are completely arbitrary.
+
+ if (((oddBinaryNullsInSample * 2.0) / SampleBytes.Length) < 0.2
+ && ((evenBinaryNullsInSample * 2.0) / SampleBytes.Length) > 0.6
+ )
+ return Encoding.BigEndianUnicode;
+
+
+ //3: UTF-8 - Martin Dürst outlines a method for detecting whether something CAN be UTF-8 content
+ // using regexp, in his w3c.org unicode FAQ entry:
+ // http://www.w3.org/International/questions/qa-forms-utf-8
+ // adapted here for C#.
+ string potentiallyMangledString = Encoding.ASCII.GetString(SampleBytes);
+ Regex UTF8Validator = new Regex(@"\A("
+ + @"[\x09\x0A\x0D\x20-\x7E]"
+ + @"|[\xC2-\xDF][\x80-\xBF]"
+ + @"|\xE0[\xA0-\xBF][\x80-\xBF]"
+ + @"|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}"
+ + @"|\xED[\x80-\x9F][\x80-\xBF]"
+ + @"|\xF0[\x90-\xBF][\x80-\xBF]{2}"
+ + @"|[\xF1-\xF3][\x80-\xBF]{3}"
+ + @"|\xF4[\x80-\x8F][\x80-\xBF]{2}"
+ + @")*\z");
+ if (UTF8Validator.IsMatch(potentiallyMangledString))
+ {
+ //Unfortunately, just the fact that it CAN be UTF-8 doesn't tell you much about probabilities.
+ //If all the characters are in the 0-127 range, no harm done, most western charsets are same as UTF-8 in these ranges.
+ //If some of the characters were in the upper range (western accented characters), however, they would likely be mangled to 2-byte by the UTF-8 encoding process.
+ // So, we need to play stats.
+
+ // The "Random" likelihood of any pair of randomly generated characters being one
+ // of these "suspicious" character sequences is:
+ // 128 / (256 * 256) = 0.2%.
+ //
+ // In western text data, that is SIGNIFICANTLY reduced - most text data stays in the <127
+ // character range, so we assume that more than 1 in 500,000 of these character
+ // sequences indicates UTF-8. The number 500,000 is completely arbitrary - so sue me.
+ //
+ // We can only assume these character sequences will be rare if we ALSO assume that this
+ // IS in fact western text - in which case the bulk of the UTF-8 encoded data (that is
+ // not already suspicious sequences) should be plain US-ASCII bytes. This, I
+ // arbitrarily decided, should be 80% (a random distribution, eg binary data, would yield
+ // approx 40%, so the chances of hitting this threshold by accident in random data are
+ // VERY low).
+
+ if ((suspiciousUTF8SequenceCount * 500000.0 / SampleBytes.Length >= 1) //suspicious sequences
+ && (
+ //all suspicious, so cannot evaluate proportion of US-Ascii
+ SampleBytes.Length - suspiciousUTF8BytesTotal == 0
+ ||
+ likelyUSASCIIBytesInSample * 1.0 / (SampleBytes.Length - suspiciousUTF8BytesTotal) >= 0.8
+ )
+ )
+ return Encoding.UTF8;
+ }
+
+ return null;
+ }
+
+ private static bool IsCommonUSASCIIByte(byte testByte)
+ {
+ if (testByte == 0x0A //lf
+ || testByte == 0x0D //cr
+ || testByte == 0x09 //tab
+ || (testByte >= 0x20 && testByte <= 0x2F) //common punctuation
+ || (testByte >= 0x30 && testByte <= 0x39) //digits
+ || (testByte >= 0x3A && testByte <= 0x40) //common punctuation
+ || (testByte >= 0x41 && testByte <= 0x5A) //capital letters
+ || (testByte >= 0x5B && testByte <= 0x60) //common punctuation
+ || (testByte >= 0x61 && testByte <= 0x7A) //lowercase letters
+ || (testByte >= 0x7B && testByte <= 0x7E) //common punctuation
+ )
+ return true;
+ else
+ return false;
+ }
+
+ private static int DetectSuspiciousUTF8SequenceLength(byte[] SampleBytes, long currentPos)
+ {
+ int lengthFound = 0;
+
+ if (SampleBytes.Length >= currentPos + 1
+ && SampleBytes[currentPos] == 0xC2
+ )
+ {
+ if (SampleBytes[currentPos + 1] == 0x81
+ || SampleBytes[currentPos + 1] == 0x8D
+ || SampleBytes[currentPos + 1] == 0x8F
+ )
+ lengthFound = 2;
+ else if (SampleBytes[currentPos + 1] == 0x90
+ || SampleBytes[currentPos + 1] == 0x9D
+ )
+ lengthFound = 2;
+ else if (SampleBytes[currentPos + 1] >= 0xA0
+ && SampleBytes[currentPos + 1] <= 0xBF
+ )
+ lengthFound = 2;
+ }
+ else if (SampleBytes.Length >= currentPos + 1
+ && SampleBytes[currentPos] == 0xC3
+ )
+ {
+ if (SampleBytes[currentPos + 1] >= 0x80
+ && SampleBytes[currentPos + 1] <= 0xBF
+ )
+ lengthFound = 2;
+ }
+ else if (SampleBytes.Length >= currentPos + 1
+ && SampleBytes[currentPos] == 0xC5
+ )
+ {
+ if (SampleBytes[currentPos + 1] == 0x92
+ || SampleBytes[currentPos + 1] == 0x93
+ )
+ lengthFound = 2;
+ else if (SampleBytes[currentPos + 1] == 0xA0
+ || SampleBytes[currentPos + 1] == 0xA1
+ )
+ lengthFound = 2;
+ else if (SampleBytes[currentPos + 1] == 0xB8
+ || SampleBytes[currentPos + 1] == 0xBD
+ || SampleBytes[currentPos + 1] == 0xBE
+ )
+ lengthFound = 2;
+ }
+ else if (SampleBytes.Length >= currentPos + 1
+ && SampleBytes[currentPos] == 0xC6
+ )
+ {
+ if (SampleBytes[currentPos + 1] == 0x92)
+ lengthFound = 2;
+ }
+ else if (SampleBytes.Length >= currentPos + 1
+ && SampleBytes[currentPos] == 0xCB
+ )
+ {
+ if (SampleBytes[currentPos + 1] == 0x86
+ || SampleBytes[currentPos + 1] == 0x9C
+ )
+ lengthFound = 2;
+ }
+ else if (SampleBytes.Length >= currentPos + 2
+ && SampleBytes[currentPos] == 0xE2
+ )
+ {
+ if (SampleBytes[currentPos + 1] == 0x80)
+ {
+ if (SampleBytes[currentPos + 2] == 0x93
+ || SampleBytes[currentPos + 2] == 0x94
+ )
+ lengthFound = 3;
+ if (SampleBytes[currentPos + 2] == 0x98
+ || SampleBytes[currentPos + 2] == 0x99
+ || SampleBytes[currentPos + 2] == 0x9A
+ )
+ lengthFound = 3;
+ if (SampleBytes[currentPos + 2] == 0x9C
+ || SampleBytes[currentPos + 2] == 0x9D
+ || SampleBytes[currentPos + 2] == 0x9E
+ )
+ lengthFound = 3;
+ if (SampleBytes[currentPos + 2] == 0xA0
+ || SampleBytes[currentPos + 2] == 0xA1
+ || SampleBytes[currentPos + 2] == 0xA2
+ )
+ lengthFound = 3;
+ if (SampleBytes[currentPos + 2] == 0xA6)
+ lengthFound = 3;
+ if (SampleBytes[currentPos + 2] == 0xB0)
+ lengthFound = 3;
+ if (SampleBytes[currentPos + 2] == 0xB9
+ || SampleBytes[currentPos + 2] == 0xBA
+ )
+ lengthFound = 3;
+ }
+ else if (SampleBytes[currentPos + 1] == 0x82
+ && SampleBytes[currentPos + 2] == 0xAC
+ )
+ lengthFound = 3;
+ else if (SampleBytes[currentPos + 1] == 0x84
+ && SampleBytes[currentPos + 2] == 0xA2
+ )
+ lengthFound = 3;
+ }
+
+ return lengthFound;
+ }
+ }
+}
diff --git a/FastColoredTextBoxNet8/ExportToHTML.cs b/FastColoredTextBoxNet8/ExportToHTML.cs
new file mode 100644
index 00000000..1ad2dfb3
--- /dev/null
+++ b/FastColoredTextBoxNet8/ExportToHTML.cs
@@ -0,0 +1,230 @@
+/*
+ * Author: Nikolay Dvurechensky
+ * Site: https://sites.google.com/view/dvurechensky
+ * Gmail: dvurechenskysoft@gmail.com
+ * Last Updated: 21 октября 2025 14:30:03
+ * Version: 1.0.236
+ */
+
+using System.Text;
+using System.Drawing;
+using System.Collections.Generic;
+
+namespace FastColoredTextBoxNS
+{
+ ///
+ /// Exports colored text as HTML
+ ///
+ /// At this time only TextStyle renderer is supported. Other styles is not exported.
+ public class ExportToHTML
+ {
+ public string LineNumbersCSS = "";
+
+ ///
+ /// Use nbsp; instead space
+ ///
+ public bool UseNbsp { get; set; }
+ ///
+ /// Use nbsp; instead space in beginning of line
+ ///
+ public bool UseForwardNbsp { get; set; }
+ ///
+ /// Use original font
+ ///
+ public bool UseOriginalFont { get; set; }
+ ///
+ /// Use style tag instead style attribute
+ ///
+ public bool UseStyleTag { get; set; }
+ ///
+ /// Use 'br' tag instead of '\n'
+ ///
+ public bool UseBr { get; set; }
+ ///
+ /// Includes line numbers
+ ///
+ public bool IncludeLineNumbers { get; set; }
+
+ FastColoredTextBox tb;
+
+ public ExportToHTML()
+ {
+ UseNbsp = true;
+ UseOriginalFont = true;
+ UseStyleTag = true;
+ UseBr = true;
+ }
+
+ public string GetHtml(FastColoredTextBox tb)
+ {
+ this.tb = tb;
+ Range sel = new Range(tb);
+ sel.SelectAll();
+ return GetHtml(sel);
+ }
+
+ public string GetHtml(Range r)
+ {
+ this.tb = r.tb;
+ Dictionary styles = new Dictionary();
+ StringBuilder sb = new StringBuilder();
+ StringBuilder tempSB = new StringBuilder();
+ StyleIndex currentStyleId = StyleIndex.None;
+ r.Normalize();
+ int currentLine = r.Start.iLine;
+ styles[currentStyleId] = null;
+ //
+ if (UseOriginalFont)
+ sb.AppendFormat("",
+ r.tb.Font.Name, r.tb.Font.SizeInPoints, r.tb.CharHeight);
+
+ //
+ if (IncludeLineNumbers)
+ tempSB.AppendFormat("{0} ", currentLine + 1);
+ //
+ bool hasNonSpace = false;
+ foreach (Place p in r)
+ {
+ Char c = r.tb[p.iLine][p.iChar];
+ if (c.style != currentStyleId)
+ {
+ Flush(sb, tempSB, currentStyleId);
+ currentStyleId = c.style;
+ styles[currentStyleId] = null;
+ }
+
+ if (p.iLine != currentLine)
+ {
+ for (int i = currentLine; i < p.iLine; i++)
+ {
+ tempSB.Append(UseBr ? "
" : "\r\n");
+ if (IncludeLineNumbers)
+ tempSB.AppendFormat("{0} ", i + 2);
+ }
+ currentLine = p.iLine;
+ hasNonSpace = false;
+ }
+ switch (c.c)
+ {
+ case ' ':
+ if ((hasNonSpace || !UseForwardNbsp) && !UseNbsp)
+ goto default;
+
+ tempSB.Append(" ");
+ break;
+ case '<':
+ tempSB.Append("<");
+ break;
+ case '>':
+ tempSB.Append(">");
+ break;
+ case '&':
+ tempSB.Append("&");
+ break;
+ default:
+ hasNonSpace = true;
+ tempSB.Append(c.c);
+ break;
+ }
+ }
+ Flush(sb, tempSB, currentStyleId);
+
+ if (UseOriginalFont)
+ sb.Append("");
+
+ //build styles
+ if (UseStyleTag)
+ {
+ tempSB.Length = 0;
+ tempSB.Append("");
+
+ sb.Insert(0, tempSB.ToString());
+ }
+
+ if (IncludeLineNumbers)
+ sb.Insert(0, LineNumbersCSS);
+
+ return sb.ToString();
+ }
+
+ private string GetCss(StyleIndex styleIndex)
+ {
+ List