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