From fb2d7b7ae52c12390f7a5a3342a2beb03d206336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Henrique=20Guard=C3=A3o=20Gandarez?= Date: Sun, 4 Dec 2022 22:49:42 -0300 Subject: [PATCH 1/3] Update lib to latest version of Notepad++ --- .gitignore | 2 +- .wakatime-project | 1 - DllExport.bat | 509 + README.md | 33 +- WakaTime.sln | 68 +- WakaTime/Assets/wakatime-32.png | Bin 0 -> 876 bytes ...ythonCliParameters.cs => CliParameters.cs} | 94 +- WakaTime/ConfigFile.cs | 111 +- WakaTime/Constants.cs | 67 +- WakaTime/Dependencies.cs | 475 +- WakaTime/EnumExtensions.cs | 18 + WakaTime/Enums.cs | 46 + WakaTime/Forms/ApiKeyForm.cs | 106 +- WakaTime/Forms/SettingsForm.Designer.cs | 3 - WakaTime/Forms/SettingsForm.cs | 64 +- WakaTime/GithubReleaseApiResponse.cs | 11 + WakaTime/Heartbeat.cs | 48 +- WakaTime/ILMerge.props | 67 - WakaTime/ILMergeOrder.txt | 4 - ...Designer.cs => ImageResources.Designer.cs} | 146 +- .../Resources.resx => ImageResources.resx} | 246 +- WakaTime/JSONSerializer.cs | 44 + WakaTime/Logger.cs | 150 +- WakaTime/Metadata.cs | 10 + WakaTime/NativeMethods.cs | 32 +- .../PluginInfrastructure/ClikeStringArray.cs | 152 +- .../DllExport/DllExportAttribute.cs | 29 - .../DllExport/Mono.Cecil.dll | Bin 275968 -> 0 bytes .../DllExport/NppPlugin.DllExport.MSBuild.dll | Bin 41472 -> 0 bytes .../DllExport/NppPlugin.DllExport.dll | Bin 90112 -> 0 bytes .../DllExport/NppPlugin.DllExport.targets | 46 - WakaTime/PluginInfrastructure/Docking_h.cs | 142 +- .../PluginInfrastructure/GatewayDomain.cs | 1982 +-- .../PluginInfrastructure/IScintillaGateway.cs | 5410 ++++---- WakaTime/PluginInfrastructure/MenuCmdID_h.cs | 796 +- WakaTime/PluginInfrastructure/Msgs_h.cs | 1554 +-- .../PluginInfrastructure/NotepadPPGateway.cs | 137 +- .../PluginInfrastructure/NppPluginNETBase.cs | 108 +- .../NppPluginNETHelper.cs | 382 +- WakaTime/PluginInfrastructure/Preference_h.cs | 684 +- WakaTime/PluginInfrastructure/Resource_h.cs | 752 +- .../PluginInfrastructure/ScintillaGateway.cs | 10428 ++++++++-------- .../PluginInfrastructure/Scintilla_iface.cs | 6572 +++++----- .../PluginInfrastructure/UnmanagedExports.cs | 121 +- WakaTime/PluginInfrastructure/Win32.cs | 626 +- WakaTime/ProcessorArchitectureHelper.cs | 42 +- WakaTime/Properties/AssemblyInfo.cs | 71 +- WakaTime/Properties/star.png | Bin 811 -> 0 bytes WakaTime/Properties/star_bmp.bmp | Bin 628 -> 0 bytes WakaTime/Proxy.cs | 70 + WakaTime/Resources/wakatime-120.png | Bin 1306 -> 0 bytes WakaTime/Resources/wakatime-16.png | Bin 452 -> 0 bytes WakaTime/RunProcess.cs | 220 +- WakaTime/WakaTime.cs | 207 + WakaTime/WakaTime.csproj | 468 +- WakaTime/WakaTimePackage.cs | 496 +- WakaTime/packages.config | 6 - .../packages/DllExport.1.7.4/.gitattributes | 7 + .../packages/DllExport.1.7.4/3rd-party.txt | 59 + .../packages/DllExport.1.7.4/DllExport.bat | 509 + .../packages/DllExport.1.7.4/DllExport.nuspec | 40 + WakaTime/packages/DllExport.1.7.4/License.txt | 22 + WakaTime/packages/DllExport.1.7.4/Readme.md | 155 + .../packages/DllExport.1.7.4/build_info.txt | 9 + .../packages/DllExport.1.7.4/changelog.txt | 885 ++ .../gcache/metacor/WakaTime/DllExport.dll | Bin 0 -> 4608 bytes .../metacor/WakaTime/DllExport.dll.ddNSi | Bin 0 -> 219 bytes .../gcache/metacor/WakaTime/DllExport.xml | 49 + .../gcache/metalib/WakaTime/DllExport.dll | Bin 0 -> 5120 bytes .../metalib/WakaTime/DllExport.dll.ddNSi | Bin 0 -> 219 bytes .../gcache/metalib/WakaTime/DllExport.xml | 49 + .../packages/DllExport.1.7.4/hMSBuild.bat | 522 + .../packages/DllExport.1.7.4/lib/net20/_._ | 0 .../DllExport.1.7.4/lib/netstandard1.1/_._ | 0 .../packages/DllExport.1.7.4/tools/Conari.dll | Bin 0 -> 388608 bytes .../packages/DllExport.1.7.4/tools/Conari.xml | 2203 ++++ .../tools/Microsoft.Build.Framework.dll | Bin 0 -> 43376 bytes .../tools/Microsoft.Build.Utilities.v4.0.dll | Bin 0 -> 91000 bytes .../DllExport.1.7.4/tools/Microsoft.Build.dll | Bin 0 -> 449376 bytes .../DllExport.1.7.4/tools/Mono.Cecil.dll | Bin 0 -> 345088 bytes .../packages/DllExport.1.7.4/tools/MvsSln.dll | Bin 0 -> 116736 bytes .../packages/DllExport.1.7.4/tools/MvsSln.xml | 3791 ++++++ .../packages/DllExport.1.7.4/tools/NSBin.dll | Bin 0 -> 12800 bytes .../DllExport.1.7.4/tools/PeViewer.exe | Bin 0 -> 15360 bytes .../tools/RGiesecke.DllExport.MSBuild.dll | Bin 0 -> 73216 bytes .../tools/RGiesecke.DllExport.dll | Bin 0 -> 101376 bytes .../tools/coreclr/.version.txt | 1 + .../DllExport.1.7.4/tools/coreclr/LICENSE.TXT | 24 + .../DllExport.1.7.4/tools/coreclr/PATENTS.TXT | 47 + .../DllExport.1.7.4/tools/coreclr/README.md | 58 + .../tools/coreclr/changelog.txt | 64 + .../DllExport.1.7.4/tools/coreclr/clrgc.dll | Bin 0 -> 287744 bytes .../DllExport.1.7.4/tools/coreclr/coreclr.dll | Bin 0 -> 3784192 bytes .../DllExport.1.7.4/tools/coreclr/ilasm.exe | Bin 0 -> 342016 bytes .../DllExport.1.7.4/tools/coreclr/ildasm.exe | Bin 0 -> 360960 bytes .../tools/coreclr/ildasmrc.dll | Bin 0 -> 33792 bytes .../tools/coreclr/mscordaccore.dll | Bin 0 -> 980992 bytes .../tools/coreclr/mscordbi.dll | Bin 0 -> 1021440 bytes .../packages/DllExport.1.7.4/tools/gnt.bat | 66 + .../DllExport.1.7.4/tools/hMSBuild.bat | 522 + .../packages/DllExport.1.7.4/tools/init.ps1 | 20 + .../tools/net.r_eg.DllExport.Wizard.dll | Bin 0 -> 160768 bytes .../tools/net.r_eg.DllExport.Wizard.targets | 69 + .../tools/net.r_eg.DllExport.targets | 121 + .../tools/raw/lib/net20/DllExport.dll | Bin 0 -> 6144 bytes .../tools/raw/lib/net20/DllExport.xml | 49 + .../tools/raw/lib/netstd/DllExport.dll | Bin 0 -> 5632 bytes .../tools/raw/lib/netstd/DllExport.xml | 49 + appveyor.yml | 8 +- 109 files changed, 26545 insertions(+), 16709 deletions(-) delete mode 100644 .wakatime-project create mode 100644 DllExport.bat create mode 100644 WakaTime/Assets/wakatime-32.png rename WakaTime/{PythonCliParameters.cs => CliParameters.cs} (64%) create mode 100644 WakaTime/EnumExtensions.cs create mode 100644 WakaTime/Enums.cs create mode 100644 WakaTime/GithubReleaseApiResponse.cs delete mode 100644 WakaTime/ILMerge.props delete mode 100644 WakaTime/ILMergeOrder.txt rename WakaTime/{Properties/Resources.Designer.cs => ImageResources.Designer.cs} (85%) rename WakaTime/{Properties/Resources.resx => ImageResources.resx} (94%) create mode 100644 WakaTime/JSONSerializer.cs create mode 100644 WakaTime/Metadata.cs delete mode 100644 WakaTime/PluginInfrastructure/DllExport/DllExportAttribute.cs delete mode 100644 WakaTime/PluginInfrastructure/DllExport/Mono.Cecil.dll delete mode 100644 WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.MSBuild.dll delete mode 100644 WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.dll delete mode 100644 WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets delete mode 100644 WakaTime/Properties/star.png delete mode 100644 WakaTime/Properties/star_bmp.bmp create mode 100644 WakaTime/Proxy.cs delete mode 100644 WakaTime/Resources/wakatime-120.png delete mode 100644 WakaTime/Resources/wakatime-16.png create mode 100644 WakaTime/WakaTime.cs delete mode 100644 WakaTime/packages.config create mode 100644 WakaTime/packages/DllExport.1.7.4/.gitattributes create mode 100644 WakaTime/packages/DllExport.1.7.4/3rd-party.txt create mode 100644 WakaTime/packages/DllExport.1.7.4/DllExport.bat create mode 100644 WakaTime/packages/DllExport.1.7.4/DllExport.nuspec create mode 100644 WakaTime/packages/DllExport.1.7.4/License.txt create mode 100644 WakaTime/packages/DllExport.1.7.4/Readme.md create mode 100644 WakaTime/packages/DllExport.1.7.4/build_info.txt create mode 100644 WakaTime/packages/DllExport.1.7.4/changelog.txt create mode 100644 WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.dll.ddNSi create mode 100644 WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.xml create mode 100644 WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.dll.ddNSi create mode 100644 WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.xml create mode 100644 WakaTime/packages/DllExport.1.7.4/hMSBuild.bat create mode 100644 WakaTime/packages/DllExport.1.7.4/lib/net20/_._ create mode 100644 WakaTime/packages/DllExport.1.7.4/lib/netstandard1.1/_._ create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/Conari.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/Conari.xml create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/Microsoft.Build.Framework.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/Microsoft.Build.Utilities.v4.0.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/Microsoft.Build.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/Mono.Cecil.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/MvsSln.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/MvsSln.xml create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/NSBin.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/PeViewer.exe create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/RGiesecke.DllExport.MSBuild.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/RGiesecke.DllExport.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/.version.txt create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/LICENSE.TXT create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/PATENTS.TXT create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/README.md create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/changelog.txt create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/clrgc.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/coreclr.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/ilasm.exe create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/ildasm.exe create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/ildasmrc.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/mscordaccore.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/coreclr/mscordbi.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/gnt.bat create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/hMSBuild.bat create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/init.ps1 create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/net.r_eg.DllExport.Wizard.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/net.r_eg.DllExport.Wizard.targets create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/net.r_eg.DllExport.targets create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/raw/lib/net20/DllExport.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/raw/lib/net20/DllExport.xml create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/raw/lib/netstd/DllExport.dll create mode 100644 WakaTime/packages/DllExport.1.7.4/tools/raw/lib/netstd/DllExport.xml diff --git a/.gitignore b/.gitignore index fe986af..4433602 100644 --- a/.gitignore +++ b/.gitignore @@ -134,7 +134,7 @@ publish/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore -**/packages/* +# **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # If using the old MSBuild-Integrated Package Restore, uncomment this: diff --git a/.wakatime-project b/.wakatime-project deleted file mode 100644 index 0970915..0000000 --- a/.wakatime-project +++ /dev/null @@ -1 +0,0 @@ -notepadpp-wakatime \ No newline at end of file diff --git a/DllExport.bat b/DllExport.bat new file mode 100644 index 0000000..8c4603a --- /dev/null +++ b/DllExport.bat @@ -0,0 +1,509 @@ +@echo off +:: Copyright (c) 2016-2021 Denis Kuzmin [x-3F@outlook.com] github/3F +:: https://github.com/3F/DllExport +if "%~1"=="/?" goto bq +set "aa=%~dpnx0" +set ab=%* +set ac=%* +if defined ab ( +if defined __p_call ( +set ac=%ac:^^=^% +) else ( +set ab=%ab:^=^^% +) +) +set wMgrArgs=%ac% +set ad=%ab:!=^!% +setlocal enableDelayedExpansion +set "ae=^" +set "ad=!ad:%%=%%%%!" +set "ad=!ad:&=%%ae%%&!" +set "af=1.7.4" +set "wAction=Configure" +set "ag=DllExport" +set "ah=tools/net.r_eg.DllExport.Wizard.targets" +set "ai=packages" +set "aj=https://www.nuget.org/api/v2/package/" +set "ak=build_info.txt" +set "al=!aa!" +set "wRootPath=!cd!" +set /a wDxpOpt=0 +set "am=" +set "an=" +set "ao=" +set "ap=" +set "aq=" +set "ar=" +set "as=" +set "at=" +set "au=" +set "av=" +set /a aw=0 +if not defined ab ( +if defined wAction goto br +goto bq +) +call :bs bk !ad! bl +goto bt +:bq +echo. +@echo .NET DllExport v1.7.4.29858+c1cc52f +@echo Copyright (c) 2009-2015 Robert Giesecke +@echo Copyright (c) 2016-2021 Denis Kuzmin ^ github/3F +echo. +echo MIT License +@echo https://github.com/3F/DllExport +echo Based on hMSBuild, MvsSln, +GetNuTool: https://github.com/3F +echo. +@echo. +@echo Usage: DllExport [args to DllExport] [args to GetNuTool] [args to hMSBuild] +echo ------ +echo. +echo Arguments +echo --------- +echo -action {type} - Specified action for Wizard. Where {type}: +echo * Configure - To configure DllExport for specific projects. +echo * Update - To update pkg reference for already configured projects. +echo * Restore - To restore configured DllExport. +echo * Export - To export configured projects data. +echo * Recover - To re-configure projects via predefined/exported data. +echo * Unset - To unset all data from specified projects. +echo * Upgrade - Aggregates an Update action with additions for upgrading. +echo. +echo -sln-dir {path} - Path to directory with .sln files to be processed. +echo -sln-file {path} - Optional predefined .sln file to be processed. +echo -metalib {path} - Relative path to meta library. +echo -metacor {path} - Relative path to meta core library. +echo -dxp-target {path} - Relative path to entrypoint wrapper of the main core. +echo -dxp-version {num} - Specific version of DllExport. Where {num}: +echo * Versions: 1.7.3 ... +echo * Keywords: +echo `actual` - Unspecified local/latest remote version; +echo ( Only if you know what you are doing ) +echo. +echo -msb {path} - Full path to specific msbuild. +echo -hMSBuild {args} - Access to hMSBuild tool (packed) https://github.com/3F/hMSBuild +echo -packages {path} - A common directory for packages. +echo -server {url} - Url for searching remote packages. +echo -proxy {cfg} - To use proxy. The format: [usr[:pwd]@]host[:port] +echo -pkg-link {uri} - Direct link to package from the source via specified URI. +echo -force - Aggressive behavior, e.g. like removing pkg when updating. +echo -no-mgr - Do not use %~nx0 for automatic restore the remote package. +echo -mgr-up - Updates %~nx0 to version from '-dxp-version'. +echo -wz-target {path} - Relative path to entrypoint wrapper of the main wizard. +echo -pe-exp-list {module} - To list all available exports from PE32/PE32+ module. +echo -eng - Try to use english language for all build messages. +echo -GetNuTool {args} - Access to GetNuTool (integrated) https://github.com/3F/GetNuTool +echo -debug - To show additional information. +echo -version - Displays version for which (together with) it was compiled. +echo -build-info - Displays actual build information from selected DllExport. +echo -help - Displays this help. Aliases: -help -h +echo. +echo Flags +echo ----- +echo __p_call - To use the call-type logic when invoking %~nx0 +echo. +echo Samples +echo ------- +echo DllExport -action Configure -force -pkg-link http://host/v1.7.3.nupkg +echo DllExport -action Restore -sln-file "Conari.sln" +echo DllExport -proxy guest:1234@10.0.2.15:7428 -action Configure +echo. +echo DllExport -mgr-up -dxp-version 1.7.3 +echo DllExport -action Upgrade -dxp-version 1.7.3 +echo. +echo DllExport -GetNuTool /p:ngpackages="Conari;regXwild" +echo DllExport -pe-exp-list bin\Debug\regXwild.dll +goto bu +:bt +set /a ax=0 +:bv +set ay=!bk[%ax%]! +if [!ay!]==[-help] ( goto bq ) else if [!ay!]==[-h] ( goto bq ) else if [!ay!]==[-?] ( goto bq ) +if [!ay!]==[-debug] ( +set am=1 +goto bw +) else if [!ay!]==[-action] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wAction=!v! +for %%g in (Restore, Configure, Update, Export, Recover, Unset, Upgrade, Default) do ( +if "!v!"=="%%g" goto bw +) +echo Unknown -action !v! +exit/B 1 +) else if [!ay!]==[-sln-dir] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wSlnDir=!v! +goto bw +) else if [!ay!]==[-sln-file] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wSlnFile=!v! +goto bw +) else if [!ay!]==[-metalib] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wMetaLib=!v! +goto bw +) else if [!ay!]==[-metacor] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wMetaCor=!v! +goto bw +) else if [!ay!]==[-dxp-target] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wDxpTarget=!v! +goto bw +) else if [!ay!]==[-dxp-version] ( set /a "ax+=1" & call :bx bk[!ax!] v +set af=!v! +goto bw +) else if [!ay!]==[-msb] ( set /a "ax+=1" & call :bx bk[!ax!] v +set ao=!v! +goto bw +) else if [!ay!]==[-packages] ( set /a "ax+=1" & call :bx bk[!ax!] v +set ai=!v! +goto bw +) else if [!ay!]==[-server] ( set /a "ax+=1" & call :bx bk[!ax!] v +set aj=!v! +goto bw +) else if [!ay!]==[-proxy] ( set /a "ax+=1" & call :bx bk[!ax!] v +set at=!v! +set wProxy=!v! +goto bw +) else if [!ay!]==[-pkg-link] ( set /a "ax+=1" & call :bx bk[!ax!] v +set ap=!v! +set af=!ay! +goto bw +) else if [!ay!]==[-force] ( +set ar=1 +goto bw +) else if [!ay!]==[-no-mgr] ( +set /a wDxpOpt^|=1 +goto bw +) else if [!ay!]==[-mgr-up] ( +set as=1 +goto bw +) else if [!ay!]==[-wz-target] ( set /a "ax+=1" & call :bx bk[!ax!] v +set ah=!v! +goto bw +) else if [!ay!]==[-pe-exp-list] ( set /a "ax+=1" & call :bx bk[!ax!] v +set aq=!v! +goto bw +) else if [!ay!]==[-eng] ( +chcp 437 >nul +goto bw +) else if [!ay!]==[-GetNuTool] ( +call :by -GetNuTool 10 +set /a aw=!ERRORLEVEL! & goto bu +) else if [!ay!]==[-hMSBuild] ( +set av=1 & goto br +) else if [!ay!]==[-version] ( +@echo v1.7.4.29858+c1cc52f %__dxp_pv% +goto bu +) else if [!ay!]==[-build-info] ( +set an=1 +goto bw +) else if [!ay!]==[-tests] ( set /a "ax+=1" & call :bx bk[!ax!] v +set au=!v! +goto bw +) else ( +echo Incorrect key: !ay! +set /a aw=1 +goto bu +) +:bw +set /a "ax+=1" & if %ax% LSS !bl! goto bv +:br +call :bz "dxpName = " ag +call :bz "dxpVersion = " af +call :bz "-sln-dir = " wSlnDir +call :bz "-sln-file = " wSlnFile +call :bz "-metalib = " wMetaLib +call :bz "-metacor = " wMetaCor +call :bz "-dxp-target = " wDxpTarget +call :bz "-wz-target = " ah +call :bz "#opt " wDxpOpt +if defined af ( +if "!af!"=="actual" ( +set "af=" +) +) +set wPkgVer=!af! +if z%wAction%==zUpgrade ( +call :bz "Upgrade is on" +set as=1 +set ar=1 +) +call :b0 ai +set "ai=!ai!\\" +set "az=!ag!" +set "wPkgPath=!ai!!ag!" +if defined af ( +set "az=!az!/!af!" +set "wPkgPath=!wPkgPath!.!af!" +) +if defined ar ( +if exist "!wPkgPath!" ( +call :bz "Removing old version before continue. '-force' key rule. " wPkgPath +rmdir /S/Q "!wPkgPath!" +) +) +set a0="!wPkgPath!\\!ah!" +call :bz "wPkgPath = " wPkgPath +if not exist !a0! ( +if exist "!wPkgPath!" ( +call :bz "Trying to replace obsolete version ... " wPkgPath +rmdir /S/Q "!wPkgPath!" +) +call :bz "-pkg-link = " ap +call :bz "-server = " aj +if defined ap ( +set aj=!ap! +if "!aj::=!"=="!aj!" ( +set aj=!cd!/!aj! +) +if "!wPkgPath::=!"=="!wPkgPath!" ( +set "a1=../" +) +set "az=:!a1!!wPkgPath!|" +) +if defined ao ( +set a2=-msbuild "!ao!" +) +set a3=!a2! /p:ngserver="!aj!" /p:ngpackages="!az!" /p:ngpath="!ai!" /p:proxycfg="!at! " +call :bz "GetNuTool call: " a3 +if defined am ( +call :b1 !a3! +) else ( +call :b1 !a3! >nul +) +) +if defined av ( +call :by -hMSBuild 9 +set /a aw=!ERRORLEVEL! & goto bu +) +if defined aq ( +"!wPkgPath!\\tools\\PeViewer.exe" -list -pemodule "!aq!" +set /a aw=%ERRORLEVEL% +goto bu +) +if defined an ( +call :bz "buildInfo = " wPkgPath ak +if not exist "!wPkgPath!\\!ak!" ( +echo information about build is not available. +set /a aw=2 +goto bu +) +type "!wPkgPath!\\!ak!" +goto bu +) +if not exist !a0! ( +echo Something went wrong. Try to use another keys. +set /a aw=2 +goto bu +) +call :bz "wRootPath = " wRootPath +call :bz "wAction = " wAction +call :bz "wMgrArgs = " wMgrArgs +if defined ao ( +call :bz "Use specific MSBuild tools: " ao +set a4="!ao!" +goto b2 +) +call :b3 bm & set a4="!bm!" +if "!ERRORLEVEL!"=="0" goto b2 +echo MSBuild tools was not found. Try with `-msb` key. +set /a aw=2 +goto bu +:b2 +if not defined a4 ( +echo Something went wrong. Use `-debug` key for details. +set /a aw=2 +goto bu +) +if not defined au ( +if not defined ao if defined wPkgPath ( +set a4="!wPkgPath!\\hMSBuild" +for /f "tokens=*" %%i in ('!a4! -version') do set a5=%%i +call :b4 !a5! bn +call :bz "hMSBuild -v" a5 bn +if !bn! GEQ 230 ( +call :bz "2.3+" +set a4=!a4! -vsw-as "-requiresAny -requires Microsoft.NetCore.Component.SDK Microsoft.Net.Core.Component.SDK -products * -latest -prerelease" +) +) +call :bz "Target: " a4 a0 +call !a4! /nologo /v:m /m:4 !a0! +) +:bu +if defined au ( +echo Running Tests ... "!au!" +call :b3 bo +"!bo!" /nologo /v:m /m:4 "!au!" +exit/B 0 +) +if defined as ( +(copy /B/Y "!wPkgPath!\\DllExport.bat" "!al!" > nul) && ( echo Manager has been updated. & exit/B 0 ) || ( (echo -mgr-up failed:!aw! 1>&2) & exit/B 1 ) +) +exit/B !aw! +:b4 +set a6=%~1 +for /f "tokens=1,2 delims=." %%a in ("!a6!") do ( +set _=%%b & set /a _*=10 & set /a %2=%%a!_! +) +exit/B 0 +:by +set ay=%~1 +set /a a7=%~2 +call :bz "accessing to !ay! ..." +for /L %%p IN (0,1,8181) DO ( +if "!ad:~%%p,%a7%!"=="!ay!" ( +set a8=!ad:~%%p! +set a9=!a8:~%a7%! +if defined av ( +call "!wPkgPath!\\hMSBuild" !a9! +) else ( +call :b1 !a9! +) +exit/B !ERRORLEVEL! +) +) +call :bz "!ay! is corrupted: " ad +exit/B 1 +:b3 +call :bz "Searching from .NET Framework - .NET 4.0, ..." +for %%v in (4.0, 3.5, 2.0) do ( +call :b5 %%v Y & if defined Y ( +set %1=!Y! +exit/B 0 +) +) +call :bz "msb -netfx: not found" +set "%1=" +exit/B 2 +:b5 +call :bz "check %1" +for /F "usebackq tokens=2* skip=2" %%a in ( +`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\%1" /v MSBuildToolsPath 2^> nul` +) do if exist %%b ( +set a_=%%~b +call :bz ":msbfound " a_ +call :b6 a_ bp +set %2=!bp! +exit/B 0 +) +set "%2=" +exit/B 0 +:b6 +set %2=!%~1!\MSBuild.exe +exit/B 0 +:bz +if defined am ( +set ba=%1 +set ba=!ba:~0,-1! +set ba=!ba:~1! +echo.[%TIME% ] !ba! !%2! !%3! +) +exit/B 0 +:b0 +call :b7 %1 +call :b8 %1 +exit/B 0 +:b7 +call :b9 %1 "-=1" +exit/B 0 +:b8 +call :b9 %1 "+=1" +exit/B 0 +:b9 +set bb=z!%1!z +if "%~2"=="-=1" (set "bc=1") else (set "bc=") +if defined bc ( +set /a "i=-2" +) else ( +set /a "i=1" +) +:b_ +if "!bb:~%i%,1!"==" " ( +set /a "i%~2" +goto b_ +) +if defined bc set /a "i+=1" +if defined bc ( +set "%1=!bb:~1,%i%!" +) else ( +set "%1=!bb:~%i%,-1!" +) +exit/B 0 +:bs +set "bd=%~1" +set /a ax=-1 +:ca +set /a ax+=1 +set %bd%[!ax!]=%~2 +shift & if not "%~3"=="" goto ca +set /a ax-=1 +set %1=!ax! +exit/B 0 +:bx +set %2=!%1! +exit/B 0 +:b1 +setlocal disableDelayedExpansion +@echo off +:: GetNuTool - Executable version +:: Copyright (c) 2015-2018,2020 Denis Kuzmin [ x-3F@outlook.com ] +:: https://github.com/3F/GetNuTool +set be=gnt.core +set bf="%temp%\%random%%random%%be%" +if "%~1"=="-unpack" goto cb +set bg=%* +if defined __p_call if defined bg set bg=%bg:^^=^% +set bh=%__p_msb% +if defined bh goto cc +if "%~1"=="-msbuild" goto cd +for %%v in (4.0, 14.0, 12.0, 3.5, 2.0) do ( +for /F "usebackq tokens=2* skip=2" %%a in ( +`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\%%v" /v MSBuildToolsPath 2^> nul` +) do if exist %%b ( +set bh="%%~b\MSBuild.exe" +goto cc +) +) +echo MSBuild was not found. Try -msbuild "fullpath" args 1>&2 +exit/B 2 +:cd +shift +set bh=%1 +shift +set bi=%bg:!= #__b_ECL## % +setlocal enableDelayedExpansion +set bi=!bi:%%=%%%%! +:ce +for /F "tokens=1* delims==" %%a in ("!bi!") do ( +if "%%~b"=="" ( +call :cf !bi! +exit/B %ERRORLEVEL% +) +set bi=%%a #__b_EQ## %%b +) +goto ce +:cf +shift & shift +set "bg=" +:cg +set bg=!bg! %1 +shift & if not "%~2"=="" goto cg +set bg=!bg: #__b_EQ## ==! +setlocal disableDelayedExpansion +set bg=%bg: #__b_ECL## =!% +:cc +call :ch +call %bh% %bf% /nologo /p:wpath="%cd%/" /v:m /m:4 %bg% +set "bh=" +set bj=%ERRORLEVEL% +del /Q/F %bf% +exit/B %bj% +:cb +set bf="%cd%\%be%" +echo Generating minified version in %bf% ... +:ch +%bf% +set a=PropertyGroup&set b=Condition&set c=ngpackages&set d=Target&set e=DependsOnTargets&set f=TaskCoreDllPath&set g=MSBuildToolsPath&set h=UsingTask&set i=CodeTaskFactory&set j=ParameterGroup&set k=Reference&set l=Include&set m=System&set n=Using&set o=Namespace&set p=IsNullOrEmpty&set q=return&set r=string&set s=delegate&set t=foreach&set u=WriteLine&set v=Combine&set w=Console.WriteLine&set x=Directory&set y=GetNuTool&set z=StringComparison&set _=EXT_NUSPEC +^ - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/WakaTime/ILMergeOrder.txt b/WakaTime/ILMergeOrder.txt deleted file mode 100644 index 3fda7f5..0000000 --- a/WakaTime/ILMergeOrder.txt +++ /dev/null @@ -1,4 +0,0 @@ -# this file contains the partial list of the merged assemblies in the merge order -# you can fill it from the obj\CONFIG\PROJECT.ilmerge generated on every build -# and finetune merge order to your satisfaction - diff --git a/WakaTime/Properties/Resources.Designer.cs b/WakaTime/ImageResources.Designer.cs similarity index 85% rename from WakaTime/Properties/Resources.Designer.cs rename to WakaTime/ImageResources.Designer.cs index ebe71d2..3b9a429 100644 --- a/WakaTime/Properties/Resources.Designer.cs +++ b/WakaTime/ImageResources.Designer.cs @@ -1,73 +1,73 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace WakaTime.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WakaTime.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap wakatime { - get { - object obj = ResourceManager.GetObject("wakatime", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WakaTime { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class ImageResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal ImageResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WakaTime.ImageResources", typeof(ImageResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap WakaTime { + get { + object obj = ResourceManager.GetObject("WakaTime", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/WakaTime/Properties/Resources.resx b/WakaTime/ImageResources.resx similarity index 94% rename from WakaTime/Properties/Resources.resx rename to WakaTime/ImageResources.resx index 1e06994..3b1a0a9 100644 --- a/WakaTime/Properties/Resources.resx +++ b/WakaTime/ImageResources.resx @@ -1,124 +1,124 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\wakatime-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Assets\wakatime-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/WakaTime/JSONSerializer.cs b/WakaTime/JSONSerializer.cs new file mode 100644 index 0000000..c15ca1a --- /dev/null +++ b/WakaTime/JSONSerializer.cs @@ -0,0 +1,44 @@ +using System.Collections.ObjectModel; +using System.IO; +using System.Runtime.Serialization.Json; +using System.Text; + +namespace WakaTime +{ + public static class JSONSerializer + { + /// + /// Serializes an object to JSON + /// + public static string Serialize(TType instance) where TType : class + { + var serializer = new DataContractJsonSerializer(typeof(TType)); + using (var stream = new MemoryStream()) + { + serializer.WriteObject(stream, instance); + return Encoding.Default.GetString(stream.ToArray()); + } + } + + /// + /// Serializes a collection of Heartbeat to JSON + /// + public static string SerializeArrayHeartbeat(Collection instance) + { + var heartbeats = string.Join(",", instance); + return $"[{heartbeats}]"; + } + + /// + /// DeSerializes an object from JSON + /// + public static TType DeSerialize(string json) where TType : class + { + using (var stream = new MemoryStream(Encoding.Default.GetBytes(json))) + { + var serializer = new DataContractJsonSerializer(typeof(TType)); + return serializer.ReadObject(stream) as TType; + } + } + } +} \ No newline at end of file diff --git a/WakaTime/Logger.cs b/WakaTime/Logger.cs index 7ed472b..68c827b 100644 --- a/WakaTime/Logger.cs +++ b/WakaTime/Logger.cs @@ -1,69 +1,81 @@ -using System; -using System.IO; -using System.Windows.Forms; - -namespace WakaTime -{ - internal enum LogLevel - { - Debug = 1, - Info, - Warning, - HandledException - }; - - internal static class Logger - { - internal static void Debug(string msg) - { - if (!WakaTimePackage.Config.Debug) - return; - - Log(LogLevel.Debug, msg); - } - - internal static void Info(string msg) - { - Log(LogLevel.Info, msg); - } - - internal static void Warning(string msg) - { - Log(LogLevel.Warning, msg); - } - - internal static void Error(string msg, Exception ex = null) - { - var exceptionMessage = $"{msg}: {ex}"; - - Log(LogLevel.HandledException, exceptionMessage); - } - - internal static void Log(LogLevel level, string msg) - { - try - { - var writer = Setup(); - if (writer == null) return; - - writer.WriteLine("[Wakatime {0} {1:hh:mm:ss tt}] {2}", Enum.GetName(level.GetType(), level), DateTime.Now, msg); - writer.Flush(); - writer.Close(); - } - catch (Exception ex) - { - MessageBox.Show(ex.ToString(), "Error writing to WakaTime.log", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); - } - } - - private static StreamWriter Setup() - { - var configDir = Dependencies.AppDataDirectory; - if (string.IsNullOrWhiteSpace(configDir)) return null; - - var filename = $"{configDir}\\{Constants.PluginName}.log"; - var writer = new StreamWriter(File.Open(filename, FileMode.Append, FileAccess.Write)); - return writer; - } - } -} +using System; +using System.IO; +using System.Windows.Forms; + +namespace WakaTime +{ + public class Logger + { + private readonly bool _isDebugEnabled; + private readonly StreamWriter _writer; + + public Logger(string configFilepath) + { + var configFile = new ConfigFile(configFilepath); + + _isDebugEnabled = configFile.GetSettingAsBoolean("debug"); + + var filename = $"{AppDataDirectory}\\notepadpp-wakatime.log"; + + _writer = new StreamWriter(File.Open(filename, FileMode.Append, FileAccess.Write)); + } + + private static string AppDataDirectory + { + get + { + var roamingFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + var appFolder = Path.Combine(roamingFolder, "WakaTime"); + + // Create folder if it does not exist + if (!Directory.Exists(appFolder)) + Directory.CreateDirectory(appFolder); + + return appFolder; + } + } + + public void Debug(string msg) + { + if (!_isDebugEnabled) + return; + + Log(LogLevel.Debug, msg); + } + + public void Info(string msg) + { + Log(LogLevel.Info, msg); + } + + public void Warning(string msg) + { + Log(LogLevel.Warning, msg); + } + + public void Error(string msg, Exception ex = null) + { + var exceptionMessage = $"{msg}: {ex}"; + + Log(LogLevel.HandledException, exceptionMessage); + } + + private void Log(LogLevel level, string msg) + { + try + { + _writer.WriteLine("[Wakatime {0} {1:hh:mm:ss tt}] {2}", Enum.GetName(level.GetType(), level), DateTime.Now, msg); + _writer.Flush(); + } + catch (Exception ex) + { + MessageBox.Show(ex.ToString(), "Error writing to notepadpp-wakatime.log", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + } + } + + public void Close() + { + _writer?.Close(); + } + } +} diff --git a/WakaTime/Metadata.cs b/WakaTime/Metadata.cs new file mode 100644 index 0000000..bab3767 --- /dev/null +++ b/WakaTime/Metadata.cs @@ -0,0 +1,10 @@ +namespace WakaTime +{ + public class Metadata + { + public string EditorVersion { get; set; } + public string EditorName { get; set; } + public string PluginVersion { get; set; } + public string PluginName { get; set; } + } +} diff --git a/WakaTime/NativeMethods.cs b/WakaTime/NativeMethods.cs index dd75849..a7e09bc 100644 --- a/WakaTime/NativeMethods.cs +++ b/WakaTime/NativeMethods.cs @@ -1,20 +1,12 @@ -using System; -using System.Runtime.InteropServices; -using System.Text; - -namespace WakaTime -{ - internal static class NativeMethods - { - [DllImport("kernel32")] - internal static extern long WritePrivateProfileString(string section, string key, string val, string filePath); - - [DllImport("kernel32")] - internal static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, - int size, string filePath); - - [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool wow64Process); - } -} +using System; +using System.Runtime.InteropServices; + +namespace WakaTime +{ + internal static class NativeMethods + { + [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool wow64Process); + } +} diff --git a/WakaTime/PluginInfrastructure/ClikeStringArray.cs b/WakaTime/PluginInfrastructure/ClikeStringArray.cs index 7bc1b21..46e1b81 100644 --- a/WakaTime/PluginInfrastructure/ClikeStringArray.cs +++ b/WakaTime/PluginInfrastructure/ClikeStringArray.cs @@ -1,77 +1,77 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Windows.Forms; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - public class ClikeStringArray : IDisposable - { - IntPtr _nativeArray; - List _nativeItems; - bool _disposed = false; - - public ClikeStringArray(int num, int stringCapacity) - { - _nativeArray = Marshal.AllocHGlobal((num + 1) * IntPtr.Size); - _nativeItems = new List(); - for (int i = 0; i < num; i++) - { - IntPtr item = Marshal.AllocHGlobal(stringCapacity); - Marshal.WriteIntPtr(_nativeArray + (i * IntPtr.Size), item); - _nativeItems.Add(item); - } - Marshal.WriteIntPtr(_nativeArray + (num * IntPtr.Size), IntPtr.Zero); - } - public ClikeStringArray(List lstStrings) - { - _nativeArray = Marshal.AllocHGlobal((lstStrings.Count + 1) * IntPtr.Size); - _nativeItems = new List(); - for (int i = 0; i < lstStrings.Count; i++) - { - IntPtr item = Marshal.StringToHGlobalUni(lstStrings[i]); - Marshal.WriteIntPtr(_nativeArray + (i * IntPtr.Size), item); - _nativeItems.Add(item); - } - Marshal.WriteIntPtr(_nativeArray + (lstStrings.Count * IntPtr.Size), IntPtr.Zero); - } - - public IntPtr NativePointer { get { return _nativeArray; } } - public List ManagedStringsAnsi { get { return _getManagedItems(false); } } - public List ManagedStringsUnicode { get { return _getManagedItems(true); } } - List _getManagedItems(bool unicode) - { - List _managedItems = new List(); - for (int i = 0; i < _nativeItems.Count; i++) - { - if (unicode) _managedItems.Add(Marshal.PtrToStringUni(_nativeItems[i])); - else _managedItems.Add(Marshal.PtrToStringAnsi(_nativeItems[i])); - } - return _managedItems; - } - - public void Dispose() - { - try - { - if (!_disposed) - { - for (int i = 0; i < _nativeItems.Count; i++) - if (_nativeItems[i] != IntPtr.Zero) Marshal.FreeHGlobal(_nativeItems[i]); - if (_nativeArray != IntPtr.Zero) Marshal.FreeHGlobal(_nativeArray); - _disposed = true; - } - } - catch (Exception e) - { - MessageBox.Show(MethodBase.GetCurrentMethod().ToString() +": "+ e.Message, this.GetType().Name); - } - } - ~ClikeStringArray() - { - Dispose(); - } - } +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + public class ClikeStringArray : IDisposable + { + IntPtr _nativeArray; + List _nativeItems; + bool _disposed = false; + + public ClikeStringArray(int num, int stringCapacity) + { + _nativeArray = Marshal.AllocHGlobal((num + 1) * IntPtr.Size); + _nativeItems = new List(); + for (int i = 0; i < num; i++) + { + IntPtr item = Marshal.AllocHGlobal(stringCapacity); + Marshal.WriteIntPtr(_nativeArray + (i * IntPtr.Size), item); + _nativeItems.Add(item); + } + Marshal.WriteIntPtr(_nativeArray + (num * IntPtr.Size), IntPtr.Zero); + } + public ClikeStringArray(List lstStrings) + { + _nativeArray = Marshal.AllocHGlobal((lstStrings.Count + 1) * IntPtr.Size); + _nativeItems = new List(); + for (int i = 0; i < lstStrings.Count; i++) + { + IntPtr item = Marshal.StringToHGlobalUni(lstStrings[i]); + Marshal.WriteIntPtr(_nativeArray + (i * IntPtr.Size), item); + _nativeItems.Add(item); + } + Marshal.WriteIntPtr(_nativeArray + (lstStrings.Count * IntPtr.Size), IntPtr.Zero); + } + + public IntPtr NativePointer { get { return _nativeArray; } } + public List ManagedStringsAnsi { get { return _getManagedItems(false); } } + public List ManagedStringsUnicode { get { return _getManagedItems(true); } } + List _getManagedItems(bool unicode) + { + List _managedItems = new List(); + for (int i = 0; i < _nativeItems.Count; i++) + { + if (unicode) _managedItems.Add(Marshal.PtrToStringUni(_nativeItems[i])); + else _managedItems.Add(Marshal.PtrToStringAnsi(_nativeItems[i])); + } + return _managedItems; + } + + public void Dispose() + { + try + { + if (!_disposed) + { + for (int i = 0; i < _nativeItems.Count; i++) + if (_nativeItems[i] != IntPtr.Zero) Marshal.FreeHGlobal(_nativeItems[i]); + if (_nativeArray != IntPtr.Zero) Marshal.FreeHGlobal(_nativeArray); + _disposed = true; + } + } + catch (Exception e) + { + MessageBox.Show(MethodBase.GetCurrentMethod().ToString() +": "+ e.Message, this.GetType().Name); + } + } + ~ClikeStringArray() + { + Dispose(); + } + } } \ No newline at end of file diff --git a/WakaTime/PluginInfrastructure/DllExport/DllExportAttribute.cs b/WakaTime/PluginInfrastructure/DllExport/DllExportAttribute.cs deleted file mode 100644 index 60fbcbe..0000000 --- a/WakaTime/PluginInfrastructure/DllExport/DllExportAttribute.cs +++ /dev/null @@ -1,29 +0,0 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using System.Runtime.InteropServices; - -namespace NppPlugin.DllExport -{ - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] - partial class DllExportAttribute : Attribute - { - public DllExportAttribute() - { - } - - public DllExportAttribute(string exportName) - : this(exportName, CallingConvention.StdCall) - { - } - - public DllExportAttribute(string exportName, CallingConvention callingConvention) - { - ExportName = exportName; - CallingConvention = callingConvention; - } - - public CallingConvention CallingConvention { get; set; } - - public string ExportName { get; set; } - } -} \ No newline at end of file diff --git a/WakaTime/PluginInfrastructure/DllExport/Mono.Cecil.dll b/WakaTime/PluginInfrastructure/DllExport/Mono.Cecil.dll deleted file mode 100644 index ffe9b57debe72e460a2fa851d2870557e6030ffd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275968 zcmc${37lM2mB;`3z3NxhRozJ{-KpwymMWHnXH|C-I)W`h2uo1eH?f0C*cFsK>-o59Z zd+xdCo_p?o-^u5^%nLlv%kez)kmr4bxBj-;?<4>0A$VEsW6QjM7`Su4kMx~%=YD5B zJL6sT3ofqDUb(Y=>CXCbr=D5AJih4S$)Ta*feGo;wt3!3 zeSvrHz1N?brgp#Q?^o(8c-|yjg${bxNx18{&l9Ixo!fVO12F#e_Fhjo@G~BtBVSuz z=y@ybfA^hu4cYUqg{~zG-DwG8;oqK|HwbJ5ytNC%9?4(#JaW+aE8u@Z$4Az7UHqI~ z`0pK0@}<1OclNJNZYO73vljw1-r&*Wzqd(0-M_5}WODZ6XT>0jR}Y?z)}t5U9n+2F zT(!V-txw)Z}`H0{qdE%uj{XU{GWe!>y_*Mxe7vR?C%F{a{#EO0CNBs zO#$ZchBx(j!{n&X^U8i)Lg$L%gkNcd@owJ>8|OF*6aGlUxeTRItfV31g9&_ysEtZv zy&vu8dBw)L?(GK~Cc=&L`vY<;y(b}-93iW=W5_Yu-2?R*w=tg-~o}{fR4gMNAHI3xBffy!VSf?yrFRWJf!T>%p|f=nepe= zDAHjr^^phrM4p_A7t3irlT-1Z^R9sw`6pdvU+J0{{OBN1$2a(nl*w$C*jM>mn;6d^pnq8|npW7d{-U}wTND%dLX5fEgPV)~90YMq_BH&dNa)0Je^pzdycC3zsc!l6lXxb| zBM*jez}uqWihBeyc#Lv3i~dS)E&}eN<9U=kM&xTQ#md10F2Tx_UnRklMcH_%96XeS zJeZR{RU5Y_0aIv;_*sDNuc8nPE~8-%VkohSVmQ{51Ppqx#W1*HI0w?1H0e+;kk5(8 zM}Phtnw}e9?%r{Od{iFv6A6uXL~<}lCX(AFlBPr=(7b-6pH0ll{v>g*k{I3;dfTCm zej|UQ51)FcbT^~bPS%@J!fzDeaS;}1UO#aT!qf`Iq*k;h2&Ep#o43@eEl|#^-#gl(DXN3@cgIm;2Wq0C?`6e#-s9Ad&ZJS^j7f;m?S`pWci4 z+YHn){uc2ESH(R7&Fe?zPy8vS@dr@+$#49j<;I`h@uL^tN>H{imOzRzEm$E|b=r;+uWZ%}& z2Z84GlhudEW%GjulOLl`e)L|PA6RsR-!8(KzTzH%=JgX7Tz(YO^7B}iANgH=j$R@^ zR6fg(-tplNlOOWwl6^-fKLX9`C!3#RviYHJMt+Pw`O$lEe#n6%{7w+edFGAcfQQ7Dx_9FTbNNA|w zp(tW7jH2H0kqan($0({@4m{CZW;BJ`L-RgIQ*fhc9R>`d-tkcjXufX&O>7@B6KW65 z_dA+`hmFHs+qJF|eN(Z|rU{3g+`38-eG5Qao(@uV0aA4-q|pUPqe~&JUVyZEDWtIl zNMlPOtyzGyW+|k#3y{_>g|uz~(z+}X9XW}jHkt_PoJ3FnmPA|ch;`A{XVH#Hsnu3E zymLF`YAdpcX|nZ&$<}+4P3hHZ^#$~RWa%C660Yy@JTJOaC4NDYvVnr=u1=w+sOs7; zKow|7R2s#FsDPG4U9lJy(2}SKej!yrOQLRFj0z}=dO{)rpk5->OHvUSEGsUCFQk-H zYO1Auo|EoX*$4)Igh>9wMDk&)Tg5ukX3V`Xvw*TW=%8Yv7oq}M5|w`cLR3Im)azWI zb-d!|FmLrT zGd=&hy!?26>(|qrK2YTZ=Il@6Zt9n;mW=TSJ621$fefzhdXq8lL}_*oc3P(sx*NSeKl8n2MNXJBe&U`rJWMF)3-jGt3v0>{*?%zkNJ$yCLoy8I0LNcOrfew z(LirRc-8nUV8yU@$o6g6JDWeEkZfW^%G)gas|}^LX_66Fr7_xAO=6;VN zYo3&D(7yu%etaBnXYs`6wZy3s zCzz!kcgpYy!hMP#Kasce;qesR49pHLEYm{#3Dh^9AiZ%4`vV;sK@zg4tQq(gr`{LL zezJpVL)GgRR#rNeuCo0E+AWM;agRXr`iYTHT3Mf;i71msJ>8l{yaO^fcVN8^}fSIf6HuMIZJiNEFE``5j*#AlrBz=`@1s_7#1Y zTfn8DGBpt7=gx(|6s+U}6Pnf2_0VBHh_acJObs)f+mT>~L3|$0#xZ_e?njq)+)W9o zkZ#E_!?nQy&$~NbNnj)OUvl@31R`s9jpXnHrj{rJN`4*{$Tbhl`SY{@PLMy9G|nfP zJpvg#UWPPIcX`cuSHa_$cnnUsxxNR_j)@_;i@}BysxxObpCV6f>yC-_hVk5o9(riU z`U{H8c@cc`c|scn?a>x`ltOExo#5Jv3(hmt(V3gqC(hMLtg)H1)X>VNoKAIIBOV3| z+bAm4Z*LpVi+R4-=Xw9lb2!y;FVCH-mb6xzd9LJn1J6%*ri%~>MlUJ`t9J|yYy)Cs zX!=CjoBl^2bsTKo=@<6 zndcs!>HU)g!_xHf#0f{a#7Un1h=l53lGEQOPWb$J;v69ViL*%laaKyxUrHd$O4A=t zoaE!s;y66XP>>79vlV`=)r#CcF@dM0s3 zrRkFsXQMQI49=j6^r}0C!*aL{Z%2636A2zU9ZQ_#X}O}fA|K9|^NWk@KT#a+N32m{jMYqlwO@U5%o=p6InbzaYFw&i4(D0 zjx){FKzX1yQ!@!3^4*p=k^148D8+KIH_C3NrB#)I4Q-Ki$Ws0q4E%ou}VyjnyTh}o!_w3+^Ki5 z)Vw53ZCQC)r>_zchBZwQ3}xk>N7QZq`0xV*f)H=T+w{8BU2 zJERlbx=lU!`2$1d4*5LMhwQy(65R$pY=qVG8sX@9 zjYScM1{5(jxys&!$>sL05^-Ruh-*42%1|k4`ItBA*WBTuCpt&pp{vWe%9brCM*`Tg z2KV#_$%F&=Tb6YKb6ftWOJd9Ka8E1O4sqbnbp z43>*j-ttu;KCXjUKlD@=QcdZOYKq45?o1$)mrZ}M6MoR-`3@XSKFv8AliSUuR^iXc+3Sots?d9EHjJ^!~8uSXiVRvW3F; zC#%j8POfl{I{NV&%CF0N5_xquF|49RMlj~+o7|K@CO4Q(bG~qLKj#>m9C3~{lf%8_-nWH#4F#UW1sJIfr;^Z)XiqUuIit&;W0b8IrfIAF5S+|n(r47H3fF^{6=PnMh`oXj;t7b!EY&v|pG%sLd`x6Vr1 zYdVOiPvnt#mx$Cz9L4iAp4~jJ;Q0rhyLf)jGwnlWw7B}l7m}php4Twm-Ms&SOwX$A=HASusiG_S^S*@V79T-&tbd3Il#8wyAxY%f&Fp3gJ zaa0TySA$#}6H_$0cY)kV3YDuU2c@dAQ=;#b4MnFUlEJDnK3JN5MK%!S5SK&ZWT@2K z-H|n#P*Gl&Rh98&qss8IQgi$2G=H>(BD>tkE-y8Y8ZC}F-dB`YRK@X%QAJ&`8lF~^ znzatQ<#JhhD=W=1ZKu<$%3x)vITGXtZjLXY%`QY2@;f+Cof#U)-*oBJFALS$if}uf z+Y6@rF{Tn4ey}4MvP|X1ndmwX$R#^imJW907{{E^&(IUV3eV3eD7S;aOr*nevR<8xtTW?iKc7yw*jRbrDmSf^Nl4?p7cR{F zaVht|5cf|P_X5r9CuSxn&HRgcGyjYv^V`zs4=DPjiZ0N+e&Usies*g=LAL;KF2*jl zfn`>2c24N6#j~(6<~Ap!Fgjd|U>gNX5lUH4f7XLFv&{|Iw_M{oe`LgMoe0`W%&#Na zHJJ(2l-}Wr#kxfcq-YrCHI}yVC1Y^yePKMWuniN-Hzw=m#kK%qDf$($ZL3R~58|jC z$-Y-7ZtI!Ifw64#dm*}MuQ2)uo-lrv#L0~C@qR?}qA8f@pLsKB#l9F3Zp<=0{0AI< zVEafSxC#B*stjC1~ErNGimkur;MhLkSG^&n*y;|wWXjO#(lEXEm9 zx)|4klv#{3q;xT^2Pv}{XGrN{Tn|!aG0u?E#kd}%%wn7&rHgTfbflA0&tjYcx{GnW zXqm-0hn6nJ8QL)^wd`V?!|N=@_0Y>M#u;8`F|LPR&tjaz>nz3@A`3Zs*Y}{?-PM^6 zC|RB9LG}6;p$fDlYHl$qpe0c;unQQ_(0fT#D&ay@Kv`5)*enk~vny;}SXP@^Ve14y zC%eMd3x9-2*%h{Iq|OSPfLMhzrR)k@g5OzT>qRXr&Mcs8X1i3gD{KkX&I(&ERSele z5dz9mB@O1|PDL;Dml&C~iII66M#k;WGxOy3Iy&3s_T{lb!pxO}x!rgf)R(7QE8DVi zey%NK?SzxrVq@HMBrPna(rHkb^83-z_}q3k>~X)%o%v?Vjfjy?P|f^lI|bg(>~AY{@FI;1CPDjUS4WEW4f!zz5E zcLbjJQ_RaNV;x8ke_Eh4Q6V+P+?vl=>vCF^-Mv2AsV7Ms)^w(%4;SgQWff_+RW@bb zZ9ufP3?#}s)0P=AHNBk%?K2XPYtU{_imP=r3A9DnaSjEhQZkzxU*t#U!<9Nl{e5Z2 z$l(U@7UhXTJx_&7!}GV$v8Kr!0B%eH<^XVm0EhV|h9J63@n+eLC~!xC6d47wD8F<> zO$BLsT?&p&WvVjEoClk875j$Msprv7HP%kXB*x5wwU{r{TN?w-LBP#Pz{}GBa}e-~ z6kv`{|6)JW$yXBS`WGL8Z#Lx!V7-!8;fO}kUWuFcR=;F_i>FW*FNQth31IPVQM^@) z;}Mtsj6z+!J6w7Kn4JF(hh@kdN-yVKNqPrZJY{>FEth)7m$Seyk!&qZKw9u{d#7J2 zOr)weJ&aBSRz>LEh7+YQK2+}@WSH7IfoZUk54!ML%*%%x2HT2SU@wntutvlRLls(| zPE_LADv{a1pOa%MY|+ar?zX;KF?i#NboLr|(0!u17ZaS#DGs%kJQWk%+?x!!m~Qqx zj93`J;td8S?B14NeD>%Xi755Ep+!t)z=eglf!|Pis)V#O6;ss}^jgWh_ z7d#0!Dvf=j+ed0XmD*))p6--&DvJyo3=~ujPPq+kR7&b{vf?W{d$eQ4OE9TF`*rJ2 z5Yu@pcB7DY#jM11;fm}7k>{pM+a^5dsC-Z3eV~=Epef4cJnO_%-=d$0FK%~2{S7Ac z4aMq=Q3?Z-A>es%0P0221<`YHta9s9XC(4w$A;30DjFy#KPRO5ai!&g7qdaBJ&$;P zP>rtB+p-e4(p!+St0$*JcLVvd1+<4(6Sfcp@$-%Hstjcpp&GqFA-x$hxpCrzx5>?A zvly=0toGBC?ya?zcVv*lX&z zf=mq(Nmas>wD4Kx&4}fYMAxKWp@*K@U#@a+e~@FzGEsno*CjGfML*+G3ARTf37bkY z=Tw5o!w%0O{N79Un6yno-<~X3ZeZL{cD90MpY>g z@z*fkqMVbmaP{&fV#sJ#w=bxmwok{^QKn+5X&uEq)~Ta^L-fWZ!>&ObtJuV?G-P*O zdAl^E+r@naSNT_wE5cK{%a?cQE??>BK9U`|9$NnwJ5qulDvtNlG$hlS#H{ z8AmJ=>YC6(7S&Wne{YT;XMGLiuC?h$C3#Aqxngs~pL;ck;ocDYsD1@+Y5NXr``%(0wBtT{uVH&9 zuY_ln1AJpUZUwI!0rZKnZsbxviJW(l!#U9yEQ~KJBmo5rAPohOhLW;0d~Z|2PeN`l z`?V~3f;uNu!w*Lskr5YLb1GYi3z>3YF*v|97zW)4&RNQj59S?$Bk9Nl2^qBZb?Qc3 z*6CHqOFh4uPDT6m*24&*qjPi~DUgT-IOjMvbsU#ESd4T*$EOZXA+p5-nLiOe^~aol zla5Vo<>pZ=s1mXb9l7{C#2cL|^b}=y^KgQai@rd=C_2rE<)SC(4Xvf<4*g}i%N~v{ z%aM-#6H>>Cse@C3F6iXcaZ2hio+TJ#?{FXG{|thQex@$jk$7{_XBYTCzrg>w1%6fm zdg8NjqsRZ{1^zEB@PB22|Eml9Ut8e+`U3wq7Wi4(?@9lz1^#b#{8rD8r)*@qG>Vz% z^uluZSU^p;49&fsvJc|hD0X!c5=<0Arbc05F6O01Ty^#d|KHH8&LmWKin+z?yg@16 z@raC5oU!;47Gipx=F9)Akk6M+m*Up*d;x<8q(>DiS z$5|?K`7HOxNXPnqF2B$8&iJG|7OZylphS)ad_u>z`X}0zT7JAMBcIml&@-KzR{I}Fi9W*z#lVpqnfy@3uV(kd3Rvu5 zuJj`cQNOUy_D#{|phq7CSZXd~7xKq&(R~yazK`>o_{}~79;~QG;8-MjM~Bwz?=8cN z4feg`m)WJ$Nl^;*ruA_-L-2$^c;rjxwxdj zZog;B=)VJUMRwK%(U%~#Yd^|*(7#sDLOvR$>s}1=n|~rXr~Rdc@xJm`#KXRLo2`6F zpy-dbzRIf@+9aY0A)I9k*A>p$Ru&txxtL93EVtzRm^vLIJNC1Mw#~Ym;ZC0Vz3-C7 zqe(-#N3Mxg&rRe_G@L4?=@#W&GzcB+5Zi>lk^4M1lgOUIv+$j2Fr=}k}PKd?ZK z$Ds8m+`FkKfp-&mJd`|+8auY6Kl_ge?sjb1EK%er=Hffa!Eo3-u^h&CDKp`4zA{{B zZpK^{_R{e(rVBcCQq*A)w)aP}BP=)#^hX1*JDl5h5KHSb+BR3#^6(cSg<&pEybIgL znRL8nBSso!^%JT9BYJf7Ko@Efb3y2i=CeOt9GTF4T!B*b-3*r{mWt`59 z-Zx$9W@D*QbV>aPB?{Z}IB^fihzv{Oa*W6!TYM~Z&6Wi4!zaRwn(hAk3lrIvmt2qiOw-P`()=} zm&(x+zV-uIa<{W5Xm*DM=1Y~q=IQJVLf%l!$fwmAjqOnn$rG*}p&dMB(}J2Vfkj5FQ3eGoAu#-PYx#}D9~eI|U^qK8g8 z>_-nxQqI5hTsWS6Het~(!E&o2c3#CHkkGv}Hs^zDoVt|~b2_M5*sj%VoHKj1i2Vv; z?vTCV zmE*i%IbMxkDv$Sq%T+%%`RbE+N0RP5-Mid)Xs^cXd!;$kq#hl{k8ZaaX@t?glEAJB z^1We?u&tic-?F~o8mn>KS7MpJJ*-;(Zx2VU7j=8MI`NPBw};WcLCES#CVhI5N?)(W zEN3GgE`2)Uq;F`uyBa=`pZ!PTH2Y`&jn^K@Ud8jVEhXa@c06h=~Fb4p- z9S&d)0CYhdz#IVRX*fXQ7>!OwNEz)(6Qhse5Y0hMnrH_w2LO5<4qy%d-$?=H0B~Ol zFvoStlvAZGl76(EgxezKSK3D6vW($3z5I7Xtx=CH%mH!9nFH$IO9AEp@ck5E4ghpP zToiMp^^*WPC@#PpOqK$p=iy-HI5%Ooj*5)AO;ZM^UOf}ODHV&F(qhjT4?f~WhK>c$7a{$1UT2!i_3or*s{TM)Ub`#%EyFMbx*C>uENvf;U z^D#1UllHauEI z@K!-D+JjhH&t(b$Y=Oa6TdK5=F@-i?EKimedD6QlPl(7-{hp})SyTm@*H5(0 zcw-A6DbC=i`Te-5i* zWc1G5*<<>^(!DCrXr{!5ySnrw=pS$NjRyJCyC;8?lFQ%smA{9SKY`};6RmgoQzY`| zx86g42W67ql!>OpIMX|(Ia^B256ZB1y<@GT=Z`nuj0(Kz-NPF?;&}UkcHHI6+QFcAPdez9OXr75Cr~;9&Fd$syL1$Z zbVf)+PHv#VWE!RU#Dcc2VQHYfk3hdtb-QBB!jit``p@RAKR;rKC3~xKW9jVKOhUG0 zRB_MBEqjW)CAUl|?&ruYD~fxU+_I#)tu0TAbYnByWL^pJ#(XY%of0vdVMopx4RDqz zOpNT|$)=iIbc@g_kDSdd`pBs#YJdO8>6HeXvt9HJ#nV#~XVZb1W4CFM7n^;G@j(*! zd%$dkc;~5qPNqL1g%$_XihBeyxVn{1Rr;pl+?B8y&KJN!&E~0PF7A&NcR+CkGI+Fq z68GxfxWyzcb6=+^R>aaB%r{pFIOg6qoIp_TeovNi=)c=~`eIPOjOngD@ z;CK)M^rH?@jMrO?=muW9s8!6oe3<&sxIPzso*L_C0y2hLmlY>ybY-J zSs|l+7qp3r!kM-l3G}-}JoL+ZJI^%Dp2tF}QLVHaU`~HjAa2CM%{@*0#x!rmc2j;X zI^xydAa~VbRf|6sp_GP&+l>7Mal}_Z$glnL@@D!Zk&_ zToS93B=$WqiI8C54MP)O@T2#US=NZfBulP(IgTCoW*d(>grmom;y$)szZ>iynY@o) zOXdmV8?!AG%`*nK@f`d_6h3 z;p+0^iF=~-IGOigUZYYw_||eRz90H*kE!f6{nsqaNTWK~T$K+Cd!u(#a67fYcXAqEFiDCYHuH!$$*P?VhLc#${ z@<+qn?#9_c^d^$?qvtBokxJaJ)k>QZf2S%?*L9o2r0>nVR2m_-D?~qY6G5ffS9NjE z2%3}BEQ+&KGA=&!mG`CSukX* zKi#2kF6b|avm||suLX{r}f9b?<$Q9?NsR^hL;8h2|ADuTRnb|(&fKH5QblH3$U<@bX#za+x&EW_sVDd)2G&56y;!ab;a@Thq*}M zS^m?t_%8p{XYm`vYmMKahu@s3qq>j}sUpxm(ulh8zd5d=Yqgy6*A|N>b@PyGTPWys z{2jVEW*xv?63iv2SNPEiV%ub#?sOKC-CU&8S3`s_>|^qSVOHp?e2SS9V;{;S-O45{ zB8#whD-XXVpZ#$9;x2lBOv9hl#YeoW_YD%XEZE_)VDO^7nY7dP=c_l}a|3UIE`nfm ziCyC`PgmF(ye7TM7Ux)tdjv9gya9vf@G(=0mt3y<@1&Xl+?~3&r@@Sc9Q`PR(N3{!e-fkX1s6BUOCX)ezhv@Mf-PfG%cB=!!sx?(SJA0xq`fMXE1_v~>Z})-2NTPQvv) z6t~0E-ItQHftEsLJIz8=ftEx?ixyCoVl9c9TZ{^5NmQ6!NEJ{PmFZ>%xOBQRS0I{2 ze2=a`lmXFOb=aR*eX$zk2mNMCSyVDbgo4-9v^(48^{z?W~Tmdtl&&R)#5^$v>cjs5N z%C$nI`x4TsV`?7*t78h%T$0|@#q{2Md9myozYT-S{2S@$G*_}}<4%5A_{s(0tY9an zz{n-j4ldi~F#Ijx*P+)re{9FS`eE5tCuh|Zn#;9^=G^Fq(PzL&PbRy&`+Us_Y9BHE zP$QyNk~tA;EzP#rg=Sh1?LD9_yv%)o+i6Uv_Ej1;C9SL9x`zh7EtVIxo&S?*Y0-pq zA7wU*WjbdE;TA==ruP`+xOCI|SKO0-yV_nP%QT4{SJykHEOj*fat%ADTv%+U`WC=+ z3Th!93-*g(?%ZB4J=KeaaZ7@w32qjl)MIA_Q;+pt?%?Dj7}~1T9XMmdl>w7eGt;3- zV;(1(XfV@CnIrJl)~u%N(PR3@3Up`2CJ+D(gaCGFR$ei**htvXwQ z+{7q7zYu!N_#}GiA~FDoA5J~A9v#K~2#NLTFHKj(rUENRMtknN z8FH|PpPr|!Eir;~a5*w?#x@QvM+VNI!__o%u&khW)t!z#1M6(wIXFXj{ z7lM`rhMvk)^Jj;X-i)Qk*o=b&^SD1OMs>ZzA$nlSLA)PcMo8VQrTNah zTFqNN>BdN$uQUC{yy&hx@}eS_4Ys0B&ElN&A<>~ZmGwxpKjg<7p{?AzkZ|^mskPh) z6GF42u4$;&_*3@>vzSsUw?nAl&&k6Y_m{f}JxP4G1NS3sDj9#AlNk4!9x~-No0vEs zX|stT+{9*+=3qGcUtNOEpmU^Bc`wla>-SDUF6T%t7>c{Q7B;=yvacVb`!pH4)^n|- zlc_=N%BhXt$_C{731mCYG&AKM+iv0m5Zh2;Vvzm57Z79mXTS%NSh`WC_PATi1&gJ9 zQ#V~YI>|QpPAbee?u`$G#D?L4$G(-Q<$>7~3AJleC)VS8O2@Y!zGrrPwdP#N&bGa+ z4aAPQRV-{?W`Ou2xzAOYwqKb%9Jv#;_3EkcKl&8Y-*^|86}B~Q2yH)4nQ*QtI%m}8 z4eEg^+eWDC0;3u23Ug=(`kOZI$u`EL{`lZS51FNr3R|z)9MnPvTlenWV@hQ)gOzKW9jdfN)Xew+&Wxud*e;|a;zlZ|)r|LYjZ@NTWmi!Rc1sGg zbq6MYifzF$5PESol@U;FQsz=pT~L|@aXBg1m!6jTPdxE!ahnQFA96-Un&ClhQ=I5RG z>)S0~f%aB-=fdkez2D+Q#UG3Q#(1`q8DS-Q6yQcyTm~s6<(dc!Bd&al){YFV^$Tb< z7SR$UrM2D(-e~1)uEgo0o12wt-E^tWHAioR!GxoQDjK|&Z%}~A*QWSAgt38nU9Dg- z;hyM~L?-L-oAWN?eV)q6kVZKX>r!EUV)PMHxrbzgnn+tspmWzy=K2fFC_I{7yopW*b#E(26>7c(1nVz4&jt8F{UPvoBxt@$s{R=uop8!E zi{cZv*Pr!C_q9hMor~lkIfqrM7eucWlR@n>hZJgCgP9e5%>&`+{)Zl#Dw#boP#KWt z-9I&;S6v`Qt)Ay1Tbn??#I38}bSVvjWEf_3BQ)IzDp`vXW?PETN%j%ykmLUt($Swo z46f)}#T$PFyndaN(^w6=rYcdSbI(bhnf&NEb_CxV>%p+XsTC*q zf^{LdaK-gNf;OFW?Et1Ttt)!y9OiU|A789^lT&21{f{G!i%27w;2hS2s}5jwJm09T za6JLLE1i#W5OePFES&jsq7}@973SY0q_8!?FNLXn zeu(zF@9&2%||N0qc9z8|>_ixnyog^1zqBb}ay_K-im=i9L z6*F8!X(_uyjw`)F#8@M2A54^>HZn7mUwz?lZY8^LEKYk9aDRYL=*dxGZ;s@Ycuf-q zI7&D~kNCpjeq!~zScjys(f2mv<@r%_+Vd8GLz{!hdv% zFGmJn-lgylP4VT(;LF>CpGfI2;1UEC{-#SetuuiMmJyh|7Iok9;c)i-6jM2DJqFPwajYH=X!uYYc_BDnJt>dU>!(0yPK4wxLu&^Vh28tSvWBYO(JU_OufW6D z%lkeLOIrHI2`-!}z9GR~{5P-tt90*> zhtWN&hSK7deXE^rNYhsK&FNJ^BUjGc{My8eQrF5|@2KhP&99YO4u-2Q99r2okWtD4 zu}mokoOU^%iFjm~&sa*Lw6l39(E~O*fii4M1lsQe+C@RvX-OdDAfAblHSwEX`@SUoTr&E%<1J&`;>~{sQQ81!qU)SWy zaIL$qyh1dlM7`#Lx!xDJB)P~60A3o}bNKBOScsZ7D#)1?#9k;E-EmvhqfC|qg` zgoJl1-icqkgRjrZ9(+yDPOm*c%S>u3-8Xp5ZOc*PtCI~JbIJwU#3rRgQtXWo%sy9| zy4Pq?d`=l;&6ioLz^3kO=U)&X4I3OoXHE_*UXOsR?~)|vST$cx*_An2PF6m{;`fvcfyCW%q`+*82M-EEpF!vwCe~5R!usPqP;6&W#(Gg$SX_j%z87VE z7KQatQOm9vI)4`Fc!yNi6_$>cCUu2ppe0f3i%|h(QO|apc9}!@sk9~6HYH28@+MF= z;JPI?D}I*PKI2f8w#_mX+$@tRy<2jlC2+cHj_xrl^Py~8jE01UYUnB#cAw!Xu7ih^Z#DCU4_)uF6v z8=xycY_sbjS0mfMsJ-Zaj}4>kXMgb^TjM4MD4-C>xE=pYC_nI%vT(j{elmW$Bj*L=O@C|!6Us2WoQfkC z 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¥Oz$yjIj1vGqg;92UeJF8d4qlid5a1}CB#i4 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 diff --git a/WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.MSBuild.dll b/WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.MSBuild.dll deleted file mode 100644 index c3c9de86a2cb42776089e8ee157ca5223bfd643a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41472 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 P@*Kfp{O|Su1r7Xv!L!b_ diff --git a/WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.dll b/WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.dll deleted file mode 100644 index f673ed5ce1d567e6337dea83858dd141922daf8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90112 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≻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 bKqj?-f5*Rm3!Er*6J9a<|Ns8alfeHC8XNyQ diff --git a/WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets b/WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets deleted file mode 100644 index b7bdd41..0000000 --- a/WakaTime/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - $(DevEnvDir)\..\..\VC\bin - - - - - - - - - - diff --git a/WakaTime/PluginInfrastructure/Docking_h.cs b/WakaTime/PluginInfrastructure/Docking_h.cs index bb256da..b31abdc 100644 --- a/WakaTime/PluginInfrastructure/Docking_h.cs +++ b/WakaTime/PluginInfrastructure/Docking_h.cs @@ -1,71 +1,71 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -// -// This file should stay in sync with the CPP project file -// "notepad-plus-plus/PowerEditor/src/WinControls/DockingWnd/Docking.h" -// found at -// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/src/WinControls/DockingWnd/Docking.h - -using System; -using System.Runtime.InteropServices; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - - [Flags] - public enum NppTbMsg : uint - { - // styles for containers - //CAPTION_TOP = 1, - //CAPTION_BOTTOM = 0, - - // defines for docking manager - CONT_LEFT = 0, - CONT_RIGHT = 1, - CONT_TOP = 2, - CONT_BOTTOM = 3, - DOCKCONT_MAX = 4, - - // mask params for plugins of internal dialogs - DWS_ICONTAB = 0x00000001, // Icon for tabs are available - DWS_ICONBAR = 0x00000002, // Icon for icon bar are available (currently not supported) - DWS_ADDINFO = 0x00000004, // Additional information are in use - DWS_PARAMSALL = (DWS_ICONTAB | DWS_ICONBAR | DWS_ADDINFO), - - // default docking values for first call of plugin - DWS_DF_CONT_LEFT = (CONT_LEFT << 28), // default docking on left - DWS_DF_CONT_RIGHT = (CONT_RIGHT << 28), // default docking on right - DWS_DF_CONT_TOP = (CONT_TOP << 28), // default docking on top - DWS_DF_CONT_BOTTOM = (CONT_BOTTOM << 28), // default docking on bottom - DWS_DF_FLOATING = 0x80000000 // default state is floating - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public struct NppTbData - { - public IntPtr hClient; // HWND: client Window Handle - public string pszName; // TCHAR*: name of plugin (shown in window) - public int dlgID; // int: a funcItem provides the function pointer to start a dialog. Please parse here these ID - // user modifications - public NppTbMsg uMask; // UINT: mask params: look to above defines - public uint hIconTab; // HICON: icon for tabs - public string pszAddInfo; // TCHAR*: for plugin to display additional informations - // internal data, do not use !!! - public RECT rcFloat; // RECT: floating position - public int iPrevCont; // int: stores the privious container (toggling between float and dock) - public string pszModuleName; // const TCHAR*: it's the plugin file name. It's used to identify the plugin - } - - [StructLayout(LayoutKind.Sequential)] - public struct RECT - { - public RECT(int left, int top, int right, int bottom) - { - Left = left; Top = top; Right = right; Bottom = bottom; - } - public int Left; - public int Top; - public int Right; - public int Bottom; - } - -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +// +// This file should stay in sync with the CPP project file +// "notepad-plus-plus/PowerEditor/src/WinControls/DockingWnd/Docking.h" +// found at +// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/src/WinControls/DockingWnd/Docking.h + +using System; +using System.Runtime.InteropServices; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + + [Flags] + public enum NppTbMsg : uint + { + // styles for containers + //CAPTION_TOP = 1, + //CAPTION_BOTTOM = 0, + + // defines for docking manager + CONT_LEFT = 0, + CONT_RIGHT = 1, + CONT_TOP = 2, + CONT_BOTTOM = 3, + DOCKCONT_MAX = 4, + + // mask params for plugins of internal dialogs + DWS_ICONTAB = 0x00000001, // Icon for tabs are available + DWS_ICONBAR = 0x00000002, // Icon for icon bar are available (currently not supported) + DWS_ADDINFO = 0x00000004, // Additional information are in use + DWS_PARAMSALL = (DWS_ICONTAB | DWS_ICONBAR | DWS_ADDINFO), + + // default docking values for first call of plugin + DWS_DF_CONT_LEFT = (CONT_LEFT << 28), // default docking on left + DWS_DF_CONT_RIGHT = (CONT_RIGHT << 28), // default docking on right + DWS_DF_CONT_TOP = (CONT_TOP << 28), // default docking on top + DWS_DF_CONT_BOTTOM = (CONT_BOTTOM << 28), // default docking on bottom + DWS_DF_FLOATING = 0x80000000 // default state is floating + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct NppTbData + { + public IntPtr hClient; // HWND: client Window Handle + public string pszName; // TCHAR*: name of plugin (shown in window) + public int dlgID; // int: a funcItem provides the function pointer to start a dialog. Please parse here these ID + // user modifications + public NppTbMsg uMask; // UINT: mask params: look to above defines + public uint hIconTab; // HICON: icon for tabs + public string pszAddInfo; // TCHAR*: for plugin to display additional informations + // internal data, do not use !!! + public RECT rcFloat; // RECT: floating position + public int iPrevCont; // int: stores the privious container (toggling between float and dock) + public string pszModuleName; // const TCHAR*: it's the plugin file name. It's used to identify the plugin + } + + [StructLayout(LayoutKind.Sequential)] + public struct RECT + { + public RECT(int left, int top, int right, int bottom) + { + Left = left; Top = top; Right = right; Bottom = bottom; + } + public int Left; + public int Top; + public int Right; + public int Bottom; + } + +} diff --git a/WakaTime/PluginInfrastructure/GatewayDomain.cs b/WakaTime/PluginInfrastructure/GatewayDomain.cs index af8fd5b..905176b 100644 --- a/WakaTime/PluginInfrastructure/GatewayDomain.cs +++ b/WakaTime/PluginInfrastructure/GatewayDomain.cs @@ -1,991 +1,991 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using System.Runtime.InteropServices; -using System.Text; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - /// - /// Colours are set using the RGB format (Red, Green, Blue). The intensity of each colour is set in the range 0 to 255. - /// If you have three such intensities, they are combined as: red | (green << 8) | (blue << 16). - /// If you set all intensities to 255, the colour is white. If you set all intensities to 0, the colour is black. - /// When you set a colour, you are making a request. What you will get depends on the capabilities of the system and the current screen mode. - /// - public class Colour - { - public readonly int Red, Green, Blue; - - public Colour(int rgb) - { - Red = rgb & 0xFF; - Green = (rgb >> 8) & 0xFF; - Blue = (rgb >> 16) & 0xFF; - } - - /// - /// - /// - /// a number 0-255 - /// a number 0-255 - /// a number 0-255 - public Colour(int red, int green, int blue) - { - if(red > 255 || red < 0) - throw new ArgumentOutOfRangeException("red", "must be 0-255"); - if(green > 255 || green < 0) - throw new ArgumentOutOfRangeException("green", "must be 0-255"); - if(blue > 255 || blue < 0) - throw new ArgumentOutOfRangeException("blue", "must be 0-255"); - Red = red; - Green = green; - Blue = blue; - } - - public int Value - { - get { return Red + (Green << 8) + (Blue << 16); } - } - } - - /// - /// Positions within the Scintilla document refer to a character or the gap before that character. - /// The first character in a document is 0, the second 1 and so on. If a document contains nLen characters, the last character is numbered nLen-1. The caret exists between character positions and can be located from before the first character (0) to after the last character (nLen). - /// - /// There are places where the caret can not go where two character bytes make up one character. - /// This occurs when a DBCS character from a language like Japanese is included in the document or when line ends are marked with the CP/M - /// standard of a carriage return followed by a line feed.The INVALID_POSITION constant(-1) represents an invalid position within the document. - /// - /// All lines of text in Scintilla are the same height, and this height is calculated from the largest font in any current style.This restriction - /// is for performance; if lines differed in height then calculations involving positioning of text would require the text to be styled first. - /// - /// If you use messages, there is nothing to stop you setting a position that is in the middle of a CRLF pair, or in the middle of a 2 byte character. - /// However, keyboard commands will not move the caret into such positions. - /// - public class Position : IEquatable - { - private readonly int pos; - - public Position(int pos) - { - this.pos = pos; - } - - public int Value - { - get { return pos; } - } - - public static Position operator +(Position a, Position b) - { - return new Position(a.pos + b.pos); - } - - public static Position operator -(Position a, Position b) - { - return new Position(a.pos - b.pos); - } - - public static bool operator ==(Position a, Position b) - { - if (ReferenceEquals(a, b)) - return true; - if (ReferenceEquals(a, null)) - return false; - if (ReferenceEquals(b, null)) - return false; - return a.pos == b.pos; - } - - public static bool operator !=(Position a, Position b) - { - return !(a == b); - } - - public static bool operator >(Position a, Position b) - { - return a.Value > b.Value; - } - - public static bool operator <(Position a, Position b) - { - return a.Value < b.Value; - } - - public static Position Min(Position a, Position b) - { - if (a < b) - return a; - return b; - } - - public static Position Max(Position a, Position b) - { - if (a > b) - return a; - return b; - } - - public override string ToString() - { - return "Postion: " + pos; - } - - public bool Equals(Position other) - { - if (ReferenceEquals(null, other)) return false; - if (ReferenceEquals(this, other)) return true; - return pos == other.pos; - } - - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) return false; - if (ReferenceEquals(this, obj)) return true; - if (obj.GetType() != this.GetType()) return false; - return Equals((Position)obj); - } - - public override int GetHashCode() - { - return pos; - } - } - - /// - /// Class containing key and modifiers - /// - /// The key code is a visible or control character or a key from the SCK_* enumeration, which contains: - /// SCK_ADD, SCK_BACK, SCK_DELETE, SCK_DIVIDE, SCK_DOWN, SCK_END, SCK_ESCAPE, SCK_HOME, SCK_INSERT, SCK_LEFT, SCK_MENU, SCK_NEXT(Page Down), SCK_PRIOR(Page Up), S - /// CK_RETURN, SCK_RIGHT, SCK_RWIN, SCK_SUBTRACT, SCK_TAB, SCK_UP, and SCK_WIN. - /// - /// The modifiers are a combination of zero or more of SCMOD_ALT, SCMOD_CTRL, SCMOD_SHIFT, SCMOD_META, and SCMOD_SUPER. - /// On OS X, the Command key is mapped to SCMOD_CTRL and the Control key to SCMOD_META.SCMOD_SUPER is only available on GTK+ which is commonly the Windows key. - /// If you are building a table, you might want to use SCMOD_NORM, which has the value 0, to mean no modifiers. - /// - public class KeyModifier - { - private readonly int value; - - /// - /// The key code is a visible or control character or a key from the SCK_* enumeration, which contains: - /// SCK_ADD, SCK_BACK, SCK_DELETE, SCK_DIVIDE, SCK_DOWN, SCK_END, SCK_ESCAPE, SCK_HOME, SCK_INSERT, SCK_LEFT, SCK_MENU, SCK_NEXT(Page Down), SCK_PRIOR(Page Up), - /// SCK_RETURN, SCK_RIGHT, SCK_RWIN, SCK_SUBTRACT, SCK_TAB, SCK_UP, and SCK_WIN. - /// - /// The modifiers are a combination of zero or more of SCMOD_ALT, SCMOD_CTRL, SCMOD_SHIFT, SCMOD_META, and SCMOD_SUPER. - /// On OS X, the Command key is mapped to SCMOD_CTRL and the Control key to SCMOD_META.SCMOD_SUPER is only available on GTK+ which is commonly the Windows key. - /// If you are building a table, you might want to use SCMOD_NORM, which has the value 0, to mean no modifiers. - /// - public KeyModifier(SciMsg SCK_KeyCode, SciMsg SCMOD_modifier) - { - value = (int) SCK_KeyCode | ((int) SCMOD_modifier << 16); - } - - public int Value - { - get { return Value; } - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct CharacterRange - { - public CharacterRange(int cpmin, int cpmax) { cpMin = cpmin; cpMax = cpmax; } - public int cpMin; - public int cpMax; - } - - public class Cells - { - char[] charactersAndStyles; - - public Cells(char[] charactersAndStyles) - { - this.charactersAndStyles = charactersAndStyles; - } - public char[] Value { get { return charactersAndStyles; } } - } - - public class TextRange : IDisposable - { - Sci_TextRange _sciTextRange; - IntPtr _ptrSciTextRange; - bool _disposed = false; - - public TextRange(CharacterRange chrRange, int stringCapacity) - { - _sciTextRange.chrg = chrRange; - _sciTextRange.lpstrText = Marshal.AllocHGlobal(stringCapacity); - } - public TextRange(int cpmin, int cpmax, int stringCapacity) - { - _sciTextRange.chrg.cpMin = cpmin; - _sciTextRange.chrg.cpMax = cpmax; - _sciTextRange.lpstrText = Marshal.AllocHGlobal(stringCapacity); - } - - [StructLayout(LayoutKind.Sequential)] - struct Sci_TextRange - { - public CharacterRange chrg; - public IntPtr lpstrText; - } - public IntPtr NativePointer { get { _initNativeStruct(); return _ptrSciTextRange; } } - public string lpstrText { get { _readNativeStruct(); return Marshal.PtrToStringAnsi(_sciTextRange.lpstrText); } } - public CharacterRange chrg { get { _readNativeStruct(); return _sciTextRange.chrg; } set { _sciTextRange.chrg = value; _initNativeStruct(); } } - - void _initNativeStruct() - { - if (_ptrSciTextRange == IntPtr.Zero) - _ptrSciTextRange = Marshal.AllocHGlobal(Marshal.SizeOf(_sciTextRange)); - Marshal.StructureToPtr(_sciTextRange, _ptrSciTextRange, false); - } - - void _readNativeStruct() - { - if (_ptrSciTextRange != IntPtr.Zero) - _sciTextRange = (Sci_TextRange)Marshal.PtrToStructure(_ptrSciTextRange, typeof(Sci_TextRange)); - } - - public void Dispose() - { - if (!_disposed) - { - if (_sciTextRange.lpstrText != IntPtr.Zero) Marshal.FreeHGlobal(_sciTextRange.lpstrText); - if (_ptrSciTextRange != IntPtr.Zero) Marshal.FreeHGlobal(_ptrSciTextRange); - _disposed = true; - } - } - - ~TextRange() - { - Dispose(); - } - } - - - /* ++Autogenerated -- start of section automatically generated from Scintilla.iface */ - /// Is undo history being collected? (Scintilla feature SCWS_) - public enum WhiteSpace - { - INVISIBLE = 0, - VISIBLEALWAYS = 1, - VISIBLEAFTERINDENT = 2, - VISIBLEONLYININDENT = 3 - } - /// Make white space characters invisible, always visible or visible outside indentation. (Scintilla feature SCTD_) - public enum TabDrawMode - { - LONGARROW = 0, - STRIKEOUT = 1 - } - /// Retrieve the position of the last correctly styled character. (Scintilla feature SC_EOL_) - public enum EndOfLine - { - CRLF = 0, - CR = 1, - LF = 2 - } - /// - /// Set the code page used to interpret the bytes of the document as characters. - /// The SC_CP_UTF8 value can be used to enter Unicode mode. - /// (Scintilla feature SC_IME_) - /// - public enum IMEInteraction - { - WINDOWED = 0, - INLINE = 1 - } - /// Choose to display the the IME in a winow or inline. (Scintilla feature SC_MARK_) - public enum MarkerSymbol - { - CIRCLE = 0, - ROUNDRECT = 1, - ARROW = 2, - SMALLRECT = 3, - SHORTARROW = 4, - EMPTY = 5, - ARROWDOWN = 6, - MINUS = 7, - PLUS = 8, - VLINE = 9, - LCORNER = 10, - TCORNER = 11, - BOXPLUS = 12, - BOXPLUSCONNECTED = 13, - BOXMINUS = 14, - BOXMINUSCONNECTED = 15, - LCORNERCURVE = 16, - TCORNERCURVE = 17, - CIRCLEPLUS = 18, - CIRCLEPLUSCONNECTED = 19, - CIRCLEMINUS = 20, - CIRCLEMINUSCONNECTED = 21, - BACKGROUND = 22, - DOTDOTDOT = 23, - ARROWS = 24, - PIXMAP = 25, - FULLRECT = 26, - LEFTRECT = 27, - AVAILABLE = 28, - UNDERLINE = 29, - RGBAIMAGE = 30, - BOOKMARK = 31, - VERTICALBOOKMARK = 32, - CHARACTER = 10000 - } - /// Invisible mark that only sets the line background colour. (Scintilla feature SC_MARKNUM_) - public enum MarkerOutline - { - FOLDEREND = 25, - FOLDEROPENMID = 26, - FOLDERMIDTAIL = 27, - FOLDERTAIL = 28, - FOLDERSUB = 29, - FOLDER = 30, - FOLDEROPEN = 31 - } - /// Set the alpha used for a marker that is drawn in the text area, not the margin. (Scintilla feature SC_MARGIN_) - public enum MarginType - { - SYMBOL = 0, - NUMBER = 1, - BACK = 2, - FORE = 3, - TEXT = 4, - RTEXT = 5, - COLOUR = 6 - } - /// Styles in range 32..39 are predefined for parts of the UI and are not used as normal styles. (Scintilla feature STYLE_) - public enum StylesCommon - { - DEFAULT = 32, - LINENUMBER = 33, - BRACELIGHT = 34, - BRACEBAD = 35, - CONTROLCHAR = 36, - INDENTGUIDE = 37, - CALLTIP = 38, - FOLDDISPLAYTEXT = 39, - LASTPREDEFINED = 39, - MAX = 255 - } - /// - /// Character set identifiers are used in StyleSetCharacterSet. - /// The values are the same as the Windows *_CHARSET values. - /// (Scintilla feature SC_CHARSET_) - /// - public enum CharacterSet - { - ANSI = 0, - DEFAULT = 1, - BALTIC = 186, - CHINESEBIG5 = 136, - EASTEUROPE = 238, - GB2312 = 134, - GREEK = 161, - HANGUL = 129, - MAC = 77, - OEM = 255, - RUSSIAN = 204, - OEM866 = 866, - CYRILLIC = 1251, - SHIFTJIS = 128, - SYMBOL = 2, - TURKISH = 162, - JOHAB = 130, - HEBREW = 177, - ARABIC = 178, - VIETNAMESE = 163, - THAI = 222, - _8859_15 = 1000 - } - /// Set a style to be underlined or not. (Scintilla feature SC_CASE_) - public enum CaseVisible - { - MIXED = 0, - UPPER = 1, - LOWER = 2, - CAMEL = 3 - } - /// Get the size of characters of a style in points multiplied by 100 (Scintilla feature SC_WEIGHT_) - public enum FontWeight - { - NORMAL = 400, - SEMIBOLD = 600, - BOLD = 700 - } - /// Indicator style enumeration and some constants (Scintilla feature INDIC_) - public enum IndicatorStyle - { - PLAIN = 0, - SQUIGGLE = 1, - TT = 2, - DIAGONAL = 3, - STRIKE = 4, - HIDDEN = 5, - BOX = 6, - ROUNDBOX = 7, - STRAIGHTBOX = 8, - DASH = 9, - DOTS = 10, - SQUIGGLELOW = 11, - DOTBOX = 12, - SQUIGGLEPIXMAP = 13, - COMPOSITIONTHICK = 14, - COMPOSITIONTHIN = 15, - FULLBOX = 16, - TEXTFORE = 17, - POINT = 18, - POINTCHARACTER = 19, - GRADIENT = 20, - GRADIENTCENTRE = 21, - CONTAINER = 8, - IME = 32, - IME_MAX = 35, - MAX = 35 - } - /// - /// INDIC_CONTAINER, INDIC_IME, INDIC_IME_MAX, and INDIC_MAX are indicator numbers, - /// not IndicatorStyles so should not really be in the INDIC_ enumeration. - /// They are redeclared in IndicatorNumbers INDICATOR_. - /// (Scintilla feature INDICATOR_) - /// - public enum IndicatorNumbers - { - CONTAINER = 8, - IME = 32, - IME_MAX = 35, - MAX = 35 - } - /// Retrieve the foreground hover colour of an indicator. (Scintilla feature SC_INDICVALUE) - public enum IndicValue - { - BIT = 0x1000000, - MASK = 0xFFFFFF - } - /// Retrieve the foreground hover colour of an indicator. (Scintilla feature SC_INDICFLAG_) - public enum IndicFlag - { - VALUEFORE = 1 - } - /// Is the horizontal scroll bar visible? (Scintilla feature SC_IV_) - public enum IndentView - { - NONE = 0, - REAL = 1, - LOOKFORWARD = 2, - LOOKBOTH = 3 - } - /// Returns the print magnification. (Scintilla feature SC_PRINT_) - public enum PrintOption - { - NORMAL = 0, - INVERTLIGHT = 1, - BLACKONWHITE = 2, - COLOURONWHITE = 3, - COLOURONWHITEDEFAULTBG = 4, - SCREENCOLOURS = 5 - } - /// Returns the print colour mode. (Scintilla feature SCFIND_) - public enum FindOption - { - NONE = 0x0, - WHOLEWORD = 0x2, - MATCHCASE = 0x4, - WORDSTART = 0x00100000, - REGEXP = 0x00200000, - POSIX = 0x00400000, - CXX11REGEX = 0x00800000 - } - /// The number of display lines needed to wrap a document line (Scintilla feature SC_FOLDLEVEL) - public enum FoldLevel - { - BASE = 0x400, - WHITEFLAG = 0x1000, - HEADERFLAG = 0x2000, - NUMBERMASK = 0x0FFF - } - /// Switch a header line between expanded and contracted and show some text after the line. (Scintilla feature SC_FOLDDISPLAYTEXT_) - public enum FoldDisplayTextStyle - { - HIDDEN = 0, - STANDARD = 1, - BOXED = 2 - } - /// Get the default fold display text. (Scintilla feature SC_FOLDACTION_) - public enum FoldAction - { - CONTRACT = 0, - EXPAND = 1, - TOGGLE = 2 - } - /// Ensure a particular line is visible by expanding any header line hiding it. (Scintilla feature SC_AUTOMATICFOLD_) - public enum AutomaticFold - { - SHOW = 0x0001, - CLICK = 0x0002, - CHANGE = 0x0004 - } - /// Get automatic folding behaviours. (Scintilla feature SC_FOLDFLAG_) - public enum FoldFlag - { - LINEBEFORE_EXPANDED = 0x0002, - LINEBEFORE_CONTRACTED = 0x0004, - LINEAFTER_EXPANDED = 0x0008, - LINEAFTER_CONTRACTED = 0x0010, - LEVELNUMBERS = 0x0040, - LINESTATE = 0x0080 - } - /// Is the range start..end considered a word? (Scintilla feature SC_IDLESTYLING_) - public enum IdleStyling - { - NONE = 0, - TOVISIBLE = 1, - AFTERVISIBLE = 2, - ALL = 3 - } - /// Retrieve the limits to idle styling. (Scintilla feature SC_WRAP_) - public enum Wrap - { - NONE = 0, - WORD = 1, - CHAR = 2, - WHITESPACE = 3 - } - /// Retrieve whether text is word wrapped. (Scintilla feature SC_WRAPVISUALFLAG_) - public enum WrapVisualFlag - { - NONE = 0x0000, - END = 0x0001, - START = 0x0002, - MARGIN = 0x0004 - } - /// Retrive the display mode of visual flags for wrapped lines. (Scintilla feature SC_WRAPVISUALFLAGLOC_) - public enum WrapVisualLocation - { - DEFAULT = 0x0000, - END_BY_TEXT = 0x0001, - START_BY_TEXT = 0x0002 - } - /// Retrive the start indent for wrapped lines. (Scintilla feature SC_WRAPINDENT_) - public enum WrapIndentMode - { - FIXED = 0, - SAME = 1, - INDENT = 2, - DEEPINDENT = 3 - } - /// Retrieve how wrapped sublines are placed. Default is fixed. (Scintilla feature SC_CACHE_) - public enum LineCache - { - NONE = 0, - CARET = 1, - PAGE = 2, - DOCUMENT = 3 - } - /// Append a string to the end of the document without changing the selection. (Scintilla feature SC_PHASES_) - public enum PhasesDraw - { - ONE = 0, - TWO = 1, - MULTIPLE = 2 - } - /// Control font anti-aliasing. (Scintilla feature SC_EFF_) - public enum FontQuality - { - QUALITY_MASK = 0xF, - QUALITY_DEFAULT = 0, - QUALITY_NON_ANTIALIASED = 1, - QUALITY_ANTIALIASED = 2, - QUALITY_LCD_OPTIMIZED = 3 - } - /// Scroll so that a display line is at the top of the display. (Scintilla feature SC_MULTIPASTE_) - public enum MultiPaste - { - ONCE = 0, - EACH = 1 - } - /// Set the other colour used as a chequerboard pattern in the fold margin (Scintilla feature SC_ACCESSIBILITY_) - public enum Accessibility - { - DISABLED = 0, - ENABLED = 1 - } - /// Set which document modification events are sent to the container. (Scintilla feature EDGE_) - public enum EdgeVisualStyle - { - NONE = 0, - LINE = 1, - BACKGROUND = 2, - MULTILINE = 3 - } - /// Retrieves the number of lines completely visible. (Scintilla feature SC_POPUP_) - public enum PopUp - { - NEVER = 0, - ALL = 1, - TEXT = 2 - } - /// Retrieve the zoom level. (Scintilla feature SC_DOCUMENTOPTION_) - public enum DocumentOption - { - DEFAULT = 0, - STYLES_NONE = 0x1, - TEXT_LARGE = 0x100 - } - /// Get internal focus flag. (Scintilla feature SC_STATUS_) - public enum Status - { - OK = 0, - FAILURE = 1, - BADALLOC = 2, - WARN_START = 1000, - WARN_REGEX = 1001 - } - /// Get whether mouse wheel can be active outside the window. (Scintilla feature SC_CURSOR) - public enum CursorShape - { - NORMAL = -1, - ARROW = 2, - WAIT = 4, - REVERSEARROW = 7 - } - /// Constants for use with SetVisiblePolicy, similar to SetCaretPolicy. (Scintilla feature VISIBLE_) - public enum VisiblePolicy - { - SLOP = 0x01, - STRICT = 0x04 - } - /// Set the focus to this Scintilla widget. (Scintilla feature CARET_) - public enum CaretPolicy - { - SLOP = 0x01, - STRICT = 0x04, - JUMPS = 0x10, - EVEN = 0x08 - } - /// Copy argument text to the clipboard. (Scintilla feature SC_SEL_) - public enum SelectionMode - { - STREAM = 0, - RECTANGLE = 1, - LINES = 2, - THIN = 3 - } - /// - /// Get currently selected item text in the auto-completion list - /// Returns the length of the item text - /// Result is NUL-terminated. - /// (Scintilla feature SC_CASEINSENSITIVEBEHAVIOUR_) - /// - public enum CaseInsensitiveBehaviour - { - RESPECTCASE = 0, - IGNORECASE = 1 - } - /// Get auto-completion case insensitive behaviour. (Scintilla feature SC_MULTIAUTOC_) - public enum MultiAutoComplete - { - ONCE = 0, - EACH = 1 - } - /// Retrieve the effect of autocompleting when there are multiple selections. (Scintilla feature SC_ORDER_) - public enum Ordering - { - PRESORTED = 0, - PERFORMSORT = 1, - CUSTOM = 2 - } - /// Stop the caret preferred x position changing when the user types. (Scintilla feature SC_CARETSTICKY_) - public enum CaretSticky - { - OFF = 0, - ON = 1, - WHITESPACE = 2 - } - /// Duplicate the selection. If selection empty duplicate the line containing the caret. (Scintilla feature SC_ALPHA_) - public enum Alpha - { - TRANSPARENT = 0, - OPAQUE = 255, - NOALPHA = 256 - } - /// Get the background alpha of the caret line. (Scintilla feature CARETSTYLE_) - public enum CaretStyle - { - INVISIBLE = 0, - LINE = 1, - BLOCK = 2, - OVERSTRIKE_BAR = 0, - OVERSTRIKE_BLOCK = 0x10, - INS_MASK = 0xF, - BLOCK_AFTER = 0x100 - } - /// Get the start of the range of style numbers used for margin text (Scintilla feature SC_MARGINOPTION_) - public enum MarginOption - { - NONE = 0, - SUBLINESELECT = 1 - } - /// Clear the annotations from all lines (Scintilla feature ANNOTATION_) - public enum AnnotationVisible - { - HIDDEN = 0, - STANDARD = 1, - BOXED = 2, - INDENTED = 3 - } - /// Allocate some extended (>255) style numbers and return the start of the range (Scintilla feature UNDO_) - public enum UndoFlags - { - NONE = 0, - MAY_COALESCE = 1 - } - /// Return the virtual space of the anchor of the rectangular selection. (Scintilla feature SCVS_) - public enum VirtualSpace - { - NONE = 0, - RECTANGULARSELECTION = 1, - USERACCESSIBLE = 2, - NOWRAPLINESTART = 4 - } - /// Scroll to end of document. (Scintilla feature SC_TECHNOLOGY_) - public enum Technology - { - DEFAULT = 0, - DIRECTWRITE = 1, - DIRECTWRITERETAIN = 2, - DIRECTWRITEDC = 3 - } - /// - /// Line end types which may be used in addition to LF, CR, and CRLF - /// SC_LINE_END_TYPE_UNICODE includes U+2028 Line Separator, - /// U+2029 Paragraph Separator, and U+0085 Next Line - /// (Scintilla feature SC_LINE_END_TYPE_) - /// - public enum LineEndType - { - DEFAULT = 0, - UNICODE = 1 - } - /// - /// Retrieve a '\n' separated list of properties understood by the current lexer. - /// Result is NUL-terminated. - /// (Scintilla feature SC_TYPE_) - /// - public enum TypeProperty - { - BOOLEAN = 0, - INTEGER = 1, - STRING = 2 - } - /// - /// Notifications - /// Type of modification and the action which caused the modification. - /// These are defined as a bit mask to make it easy to specify which notifications are wanted. - /// One bit is set from each of SC_MOD_* and SC_PERFORMED_*. - /// (Scintilla feature SC_MOD_ SC_PERFORMED_ SC_MULTISTEPUNDOREDO SC_LASTSTEPINUNDOREDO SC_MULTILINEUNDOREDO SC_STARTACTION SC_MODEVENTMASKALL) - /// - public enum ModificationFlags - { - } - /// - /// Notifications - /// Type of modification and the action which caused the modification. - /// These are defined as a bit mask to make it easy to specify which notifications are wanted. - /// One bit is set from each of SC_MOD_* and SC_PERFORMED_*. - /// (Scintilla feature SC_UPDATE_) - /// - public enum Update - { - CONTENT = 0x1, - SELECTION = 0x2, - V_SCROLL = 0x4, - H_SCROLL = 0x8 - } - /// - /// Symbolic key codes and modifier flags. - /// ASCII and other printable characters below 256. - /// Extended keys above 300. - /// (Scintilla feature SCMOD_) - /// - public enum KeyMod - { - NORM = 0, - SHIFT = 1, - CTRL = 2, - ALT = 4, - SUPER = 8, - META = 16 - } - /// - /// Symbolic key codes and modifier flags. - /// ASCII and other printable characters below 256. - /// Extended keys above 300. - /// (Scintilla feature SC_AC_) - /// - public enum CompletionMethods - { - FILLUP = 1, - DOUBLECLICK = 2, - TAB = 3, - NEWLINE = 4, - COMMAND = 5 - } - /// characterSource for SCN_CHARADDED (Scintilla feature SC_CHARACTERSOURCE_) - public enum CharacterSource - { - DIRECT_INPUT = 0, - TENTATIVE_INPUT = 1, - IME_RESULT = 2 - } - /// For SciLexer.h (Scintilla feature SCLEX_) - public enum Lexer - { - CONTAINER = 0, - NULL = 1, - PYTHON = 2, - CPP = 3, - HTML = 4, - XML = 5, - PERL = 6, - SQL = 7, - VB = 8, - PROPERTIES = 9, - ERRORLIST = 10, - MAKEFILE = 11, - BATCH = 12, - XCODE = 13, - LATEX = 14, - LUA = 15, - DIFF = 16, - CONF = 17, - PASCAL = 18, - AVE = 19, - ADA = 20, - LISP = 21, - RUBY = 22, - EIFFEL = 23, - EIFFELKW = 24, - TCL = 25, - NNCRONTAB = 26, - BULLANT = 27, - VBSCRIPT = 28, - BAAN = 31, - MATLAB = 32, - SCRIPTOL = 33, - ASM = 34, - CPPNOCASE = 35, - FORTRAN = 36, - F77 = 37, - CSS = 38, - POV = 39, - LOUT = 40, - ESCRIPT = 41, - PS = 42, - NSIS = 43, - MMIXAL = 44, - CLW = 45, - CLWNOCASE = 46, - LOT = 47, - YAML = 48, - TEX = 49, - METAPOST = 50, - POWERBASIC = 51, - FORTH = 52, - ERLANG = 53, - OCTAVE = 54, - MSSQL = 55, - VERILOG = 56, - KIX = 57, - GUI4CLI = 58, - SPECMAN = 59, - AU3 = 60, - APDL = 61, - BASH = 62, - ASN1 = 63, - VHDL = 64, - CAML = 65, - BLITZBASIC = 66, - PUREBASIC = 67, - HASKELL = 68, - PHPSCRIPT = 69, - TADS3 = 70, - REBOL = 71, - SMALLTALK = 72, - FLAGSHIP = 73, - CSOUND = 74, - FREEBASIC = 75, - INNOSETUP = 76, - OPAL = 77, - SPICE = 78, - D = 79, - CMAKE = 80, - GAP = 81, - PLM = 82, - PROGRESS = 83, - ABAQUS = 84, - ASYMPTOTE = 85, - R = 86, - MAGIK = 87, - POWERSHELL = 88, - MYSQL = 89, - PO = 90, - TAL = 91, - COBOL = 92, - TACL = 93, - SORCUS = 94, - POWERPRO = 95, - NIMROD = 96, - SML = 97, - MARKDOWN = 98, - TXT2TAGS = 99, - A68K = 100, - MODULA = 101, - COFFEESCRIPT = 102, - TCMD = 103, - AVS = 104, - ECL = 105, - OSCRIPT = 106, - VISUALPROLOG = 107, - LITERATEHASKELL = 108, - STTXT = 109, - KVIRC = 110, - RUST = 111, - DMAP = 112, - AS = 113, - DMIS = 114, - REGISTRY = 115, - BIBTEX = 116, - SREC = 117, - IHEX = 118, - TEHEX = 119, - JSON = 120, - EDIFACT = 121, - INDENT = 122, - MAXIMA = 123, - STATA = 124, - SAS = 125, - NIM = 126, - CIL = 127, - X12 = 128, - DATAFLEX = 129, - AUTOMATIC = 1000 - } - /// GTK Specific to work around focus and accelerator problems: (Scintilla feature SC_BIDIRECTIONAL_) - public enum Bidirectional - { - DISABLED = 0, - L2R = 1, - R2L = 2 - } - /// Set bidirectional text display state. (Scintilla feature SC_LINECHARACTERINDEX_) - public enum LineCharacterIndexType - { - NONE = 0, - UTF32 = 1, - UTF16 = 2 - } - /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ - -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; +using System.Runtime.InteropServices; +using System.Text; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + /// + /// Colours are set using the RGB format (Red, Green, Blue). The intensity of each colour is set in the range 0 to 255. + /// If you have three such intensities, they are combined as: red | (green << 8) | (blue << 16). + /// If you set all intensities to 255, the colour is white. If you set all intensities to 0, the colour is black. + /// When you set a colour, you are making a request. What you will get depends on the capabilities of the system and the current screen mode. + /// + public class Colour + { + public readonly int Red, Green, Blue; + + public Colour(int rgb) + { + Red = rgb & 0xFF; + Green = (rgb >> 8) & 0xFF; + Blue = (rgb >> 16) & 0xFF; + } + + /// + /// + /// + /// a number 0-255 + /// a number 0-255 + /// a number 0-255 + public Colour(int red, int green, int blue) + { + if(red > 255 || red < 0) + throw new ArgumentOutOfRangeException("red", "must be 0-255"); + if(green > 255 || green < 0) + throw new ArgumentOutOfRangeException("green", "must be 0-255"); + if(blue > 255 || blue < 0) + throw new ArgumentOutOfRangeException("blue", "must be 0-255"); + Red = red; + Green = green; + Blue = blue; + } + + public int Value + { + get { return Red + (Green << 8) + (Blue << 16); } + } + } + + /// + /// Positions within the Scintilla document refer to a character or the gap before that character. + /// The first character in a document is 0, the second 1 and so on. If a document contains nLen characters, the last character is numbered nLen-1. The caret exists between character positions and can be located from before the first character (0) to after the last character (nLen). + /// + /// There are places where the caret can not go where two character bytes make up one character. + /// This occurs when a DBCS character from a language like Japanese is included in the document or when line ends are marked with the CP/M + /// standard of a carriage return followed by a line feed.The INVALID_POSITION constant(-1) represents an invalid position within the document. + /// + /// All lines of text in Scintilla are the same height, and this height is calculated from the largest font in any current style.This restriction + /// is for performance; if lines differed in height then calculations involving positioning of text would require the text to be styled first. + /// + /// If you use messages, there is nothing to stop you setting a position that is in the middle of a CRLF pair, or in the middle of a 2 byte character. + /// However, keyboard commands will not move the caret into such positions. + /// + public class Position : IEquatable + { + private readonly int pos; + + public Position(int pos) + { + this.pos = pos; + } + + public int Value + { + get { return pos; } + } + + public static Position operator +(Position a, Position b) + { + return new Position(a.pos + b.pos); + } + + public static Position operator -(Position a, Position b) + { + return new Position(a.pos - b.pos); + } + + public static bool operator ==(Position a, Position b) + { + if (ReferenceEquals(a, b)) + return true; + if (ReferenceEquals(a, null)) + return false; + if (ReferenceEquals(b, null)) + return false; + return a.pos == b.pos; + } + + public static bool operator !=(Position a, Position b) + { + return !(a == b); + } + + public static bool operator >(Position a, Position b) + { + return a.Value > b.Value; + } + + public static bool operator <(Position a, Position b) + { + return a.Value < b.Value; + } + + public static Position Min(Position a, Position b) + { + if (a < b) + return a; + return b; + } + + public static Position Max(Position a, Position b) + { + if (a > b) + return a; + return b; + } + + public override string ToString() + { + return "Postion: " + pos; + } + + public bool Equals(Position other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return pos == other.pos; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != this.GetType()) return false; + return Equals((Position)obj); + } + + public override int GetHashCode() + { + return pos; + } + } + + /// + /// Class containing key and modifiers + /// + /// The key code is a visible or control character or a key from the SCK_* enumeration, which contains: + /// SCK_ADD, SCK_BACK, SCK_DELETE, SCK_DIVIDE, SCK_DOWN, SCK_END, SCK_ESCAPE, SCK_HOME, SCK_INSERT, SCK_LEFT, SCK_MENU, SCK_NEXT(Page Down), SCK_PRIOR(Page Up), S + /// CK_RETURN, SCK_RIGHT, SCK_RWIN, SCK_SUBTRACT, SCK_TAB, SCK_UP, and SCK_WIN. + /// + /// The modifiers are a combination of zero or more of SCMOD_ALT, SCMOD_CTRL, SCMOD_SHIFT, SCMOD_META, and SCMOD_SUPER. + /// On OS X, the Command key is mapped to SCMOD_CTRL and the Control key to SCMOD_META.SCMOD_SUPER is only available on GTK+ which is commonly the Windows key. + /// If you are building a table, you might want to use SCMOD_NORM, which has the value 0, to mean no modifiers. + /// + public class KeyModifier + { + private readonly int value; + + /// + /// The key code is a visible or control character or a key from the SCK_* enumeration, which contains: + /// SCK_ADD, SCK_BACK, SCK_DELETE, SCK_DIVIDE, SCK_DOWN, SCK_END, SCK_ESCAPE, SCK_HOME, SCK_INSERT, SCK_LEFT, SCK_MENU, SCK_NEXT(Page Down), SCK_PRIOR(Page Up), + /// SCK_RETURN, SCK_RIGHT, SCK_RWIN, SCK_SUBTRACT, SCK_TAB, SCK_UP, and SCK_WIN. + /// + /// The modifiers are a combination of zero or more of SCMOD_ALT, SCMOD_CTRL, SCMOD_SHIFT, SCMOD_META, and SCMOD_SUPER. + /// On OS X, the Command key is mapped to SCMOD_CTRL and the Control key to SCMOD_META.SCMOD_SUPER is only available on GTK+ which is commonly the Windows key. + /// If you are building a table, you might want to use SCMOD_NORM, which has the value 0, to mean no modifiers. + /// + public KeyModifier(SciMsg SCK_KeyCode, SciMsg SCMOD_modifier) + { + value = (int) SCK_KeyCode | ((int) SCMOD_modifier << 16); + } + + public int Value + { + get { return Value; } + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct CharacterRange + { + public CharacterRange(int cpmin, int cpmax) { cpMin = cpmin; cpMax = cpmax; } + public int cpMin; + public int cpMax; + } + + public class Cells + { + char[] charactersAndStyles; + + public Cells(char[] charactersAndStyles) + { + this.charactersAndStyles = charactersAndStyles; + } + public char[] Value { get { return charactersAndStyles; } } + } + + public class TextRange : IDisposable + { + Sci_TextRange _sciTextRange; + IntPtr _ptrSciTextRange; + bool _disposed = false; + + public TextRange(CharacterRange chrRange, int stringCapacity) + { + _sciTextRange.chrg = chrRange; + _sciTextRange.lpstrText = Marshal.AllocHGlobal(stringCapacity); + } + public TextRange(int cpmin, int cpmax, int stringCapacity) + { + _sciTextRange.chrg.cpMin = cpmin; + _sciTextRange.chrg.cpMax = cpmax; + _sciTextRange.lpstrText = Marshal.AllocHGlobal(stringCapacity); + } + + [StructLayout(LayoutKind.Sequential)] + struct Sci_TextRange + { + public CharacterRange chrg; + public IntPtr lpstrText; + } + public IntPtr NativePointer { get { _initNativeStruct(); return _ptrSciTextRange; } } + public string lpstrText { get { _readNativeStruct(); return Marshal.PtrToStringAnsi(_sciTextRange.lpstrText); } } + public CharacterRange chrg { get { _readNativeStruct(); return _sciTextRange.chrg; } set { _sciTextRange.chrg = value; _initNativeStruct(); } } + + void _initNativeStruct() + { + if (_ptrSciTextRange == IntPtr.Zero) + _ptrSciTextRange = Marshal.AllocHGlobal(Marshal.SizeOf(_sciTextRange)); + Marshal.StructureToPtr(_sciTextRange, _ptrSciTextRange, false); + } + + void _readNativeStruct() + { + if (_ptrSciTextRange != IntPtr.Zero) + _sciTextRange = (Sci_TextRange)Marshal.PtrToStructure(_ptrSciTextRange, typeof(Sci_TextRange)); + } + + public void Dispose() + { + if (!_disposed) + { + if (_sciTextRange.lpstrText != IntPtr.Zero) Marshal.FreeHGlobal(_sciTextRange.lpstrText); + if (_ptrSciTextRange != IntPtr.Zero) Marshal.FreeHGlobal(_ptrSciTextRange); + _disposed = true; + } + } + + ~TextRange() + { + Dispose(); + } + } + + + /* ++Autogenerated -- start of section automatically generated from Scintilla.iface */ + /// Is undo history being collected? (Scintilla feature SCWS_) + public enum WhiteSpace + { + INVISIBLE = 0, + VISIBLEALWAYS = 1, + VISIBLEAFTERINDENT = 2, + VISIBLEONLYININDENT = 3 + } + /// Make white space characters invisible, always visible or visible outside indentation. (Scintilla feature SCTD_) + public enum TabDrawMode + { + LONGARROW = 0, + STRIKEOUT = 1 + } + /// Retrieve the position of the last correctly styled character. (Scintilla feature SC_EOL_) + public enum EndOfLine + { + CRLF = 0, + CR = 1, + LF = 2 + } + /// + /// Set the code page used to interpret the bytes of the document as characters. + /// The SC_CP_UTF8 value can be used to enter Unicode mode. + /// (Scintilla feature SC_IME_) + /// + public enum IMEInteraction + { + WINDOWED = 0, + INLINE = 1 + } + /// Choose to display the the IME in a winow or inline. (Scintilla feature SC_MARK_) + public enum MarkerSymbol + { + CIRCLE = 0, + ROUNDRECT = 1, + ARROW = 2, + SMALLRECT = 3, + SHORTARROW = 4, + EMPTY = 5, + ARROWDOWN = 6, + MINUS = 7, + PLUS = 8, + VLINE = 9, + LCORNER = 10, + TCORNER = 11, + BOXPLUS = 12, + BOXPLUSCONNECTED = 13, + BOXMINUS = 14, + BOXMINUSCONNECTED = 15, + LCORNERCURVE = 16, + TCORNERCURVE = 17, + CIRCLEPLUS = 18, + CIRCLEPLUSCONNECTED = 19, + CIRCLEMINUS = 20, + CIRCLEMINUSCONNECTED = 21, + BACKGROUND = 22, + DOTDOTDOT = 23, + ARROWS = 24, + PIXMAP = 25, + FULLRECT = 26, + LEFTRECT = 27, + AVAILABLE = 28, + UNDERLINE = 29, + RGBAIMAGE = 30, + BOOKMARK = 31, + VERTICALBOOKMARK = 32, + CHARACTER = 10000 + } + /// Invisible mark that only sets the line background colour. (Scintilla feature SC_MARKNUM_) + public enum MarkerOutline + { + FOLDEREND = 25, + FOLDEROPENMID = 26, + FOLDERMIDTAIL = 27, + FOLDERTAIL = 28, + FOLDERSUB = 29, + FOLDER = 30, + FOLDEROPEN = 31 + } + /// Set the alpha used for a marker that is drawn in the text area, not the margin. (Scintilla feature SC_MARGIN_) + public enum MarginType + { + SYMBOL = 0, + NUMBER = 1, + BACK = 2, + FORE = 3, + TEXT = 4, + RTEXT = 5, + COLOUR = 6 + } + /// Styles in range 32..39 are predefined for parts of the UI and are not used as normal styles. (Scintilla feature STYLE_) + public enum StylesCommon + { + DEFAULT = 32, + LINENUMBER = 33, + BRACELIGHT = 34, + BRACEBAD = 35, + CONTROLCHAR = 36, + INDENTGUIDE = 37, + CALLTIP = 38, + FOLDDISPLAYTEXT = 39, + LASTPREDEFINED = 39, + MAX = 255 + } + /// + /// Character set identifiers are used in StyleSetCharacterSet. + /// The values are the same as the Windows *_CHARSET values. + /// (Scintilla feature SC_CHARSET_) + /// + public enum CharacterSet + { + ANSI = 0, + DEFAULT = 1, + BALTIC = 186, + CHINESEBIG5 = 136, + EASTEUROPE = 238, + GB2312 = 134, + GREEK = 161, + HANGUL = 129, + MAC = 77, + OEM = 255, + RUSSIAN = 204, + OEM866 = 866, + CYRILLIC = 1251, + SHIFTJIS = 128, + SYMBOL = 2, + TURKISH = 162, + JOHAB = 130, + HEBREW = 177, + ARABIC = 178, + VIETNAMESE = 163, + THAI = 222, + _8859_15 = 1000 + } + /// Set a style to be underlined or not. (Scintilla feature SC_CASE_) + public enum CaseVisible + { + MIXED = 0, + UPPER = 1, + LOWER = 2, + CAMEL = 3 + } + /// Get the size of characters of a style in points multiplied by 100 (Scintilla feature SC_WEIGHT_) + public enum FontWeight + { + NORMAL = 400, + SEMIBOLD = 600, + BOLD = 700 + } + /// Indicator style enumeration and some constants (Scintilla feature INDIC_) + public enum IndicatorStyle + { + PLAIN = 0, + SQUIGGLE = 1, + TT = 2, + DIAGONAL = 3, + STRIKE = 4, + HIDDEN = 5, + BOX = 6, + ROUNDBOX = 7, + STRAIGHTBOX = 8, + DASH = 9, + DOTS = 10, + SQUIGGLELOW = 11, + DOTBOX = 12, + SQUIGGLEPIXMAP = 13, + COMPOSITIONTHICK = 14, + COMPOSITIONTHIN = 15, + FULLBOX = 16, + TEXTFORE = 17, + POINT = 18, + POINTCHARACTER = 19, + GRADIENT = 20, + GRADIENTCENTRE = 21, + CONTAINER = 8, + IME = 32, + IME_MAX = 35, + MAX = 35 + } + /// + /// INDIC_CONTAINER, INDIC_IME, INDIC_IME_MAX, and INDIC_MAX are indicator numbers, + /// not IndicatorStyles so should not really be in the INDIC_ enumeration. + /// They are redeclared in IndicatorNumbers INDICATOR_. + /// (Scintilla feature INDICATOR_) + /// + public enum IndicatorNumbers + { + CONTAINER = 8, + IME = 32, + IME_MAX = 35, + MAX = 35 + } + /// Retrieve the foreground hover colour of an indicator. (Scintilla feature SC_INDICVALUE) + public enum IndicValue + { + BIT = 0x1000000, + MASK = 0xFFFFFF + } + /// Retrieve the foreground hover colour of an indicator. (Scintilla feature SC_INDICFLAG_) + public enum IndicFlag + { + VALUEFORE = 1 + } + /// Is the horizontal scroll bar visible? (Scintilla feature SC_IV_) + public enum IndentView + { + NONE = 0, + REAL = 1, + LOOKFORWARD = 2, + LOOKBOTH = 3 + } + /// Returns the print magnification. (Scintilla feature SC_PRINT_) + public enum PrintOption + { + NORMAL = 0, + INVERTLIGHT = 1, + BLACKONWHITE = 2, + COLOURONWHITE = 3, + COLOURONWHITEDEFAULTBG = 4, + SCREENCOLOURS = 5 + } + /// Returns the print colour mode. (Scintilla feature SCFIND_) + public enum FindOption + { + NONE = 0x0, + WHOLEWORD = 0x2, + MATCHCASE = 0x4, + WORDSTART = 0x00100000, + REGEXP = 0x00200000, + POSIX = 0x00400000, + CXX11REGEX = 0x00800000 + } + /// The number of display lines needed to wrap a document line (Scintilla feature SC_FOLDLEVEL) + public enum FoldLevel + { + BASE = 0x400, + WHITEFLAG = 0x1000, + HEADERFLAG = 0x2000, + NUMBERMASK = 0x0FFF + } + /// Switch a header line between expanded and contracted and show some text after the line. (Scintilla feature SC_FOLDDISPLAYTEXT_) + public enum FoldDisplayTextStyle + { + HIDDEN = 0, + STANDARD = 1, + BOXED = 2 + } + /// Get the default fold display text. (Scintilla feature SC_FOLDACTION_) + public enum FoldAction + { + CONTRACT = 0, + EXPAND = 1, + TOGGLE = 2 + } + /// Ensure a particular line is visible by expanding any header line hiding it. (Scintilla feature SC_AUTOMATICFOLD_) + public enum AutomaticFold + { + SHOW = 0x0001, + CLICK = 0x0002, + CHANGE = 0x0004 + } + /// Get automatic folding behaviours. (Scintilla feature SC_FOLDFLAG_) + public enum FoldFlag + { + LINEBEFORE_EXPANDED = 0x0002, + LINEBEFORE_CONTRACTED = 0x0004, + LINEAFTER_EXPANDED = 0x0008, + LINEAFTER_CONTRACTED = 0x0010, + LEVELNUMBERS = 0x0040, + LINESTATE = 0x0080 + } + /// Is the range start..end considered a word? (Scintilla feature SC_IDLESTYLING_) + public enum IdleStyling + { + NONE = 0, + TOVISIBLE = 1, + AFTERVISIBLE = 2, + ALL = 3 + } + /// Retrieve the limits to idle styling. (Scintilla feature SC_WRAP_) + public enum Wrap + { + NONE = 0, + WORD = 1, + CHAR = 2, + WHITESPACE = 3 + } + /// Retrieve whether text is word wrapped. (Scintilla feature SC_WRAPVISUALFLAG_) + public enum WrapVisualFlag + { + NONE = 0x0000, + END = 0x0001, + START = 0x0002, + MARGIN = 0x0004 + } + /// Retrive the display mode of visual flags for wrapped lines. (Scintilla feature SC_WRAPVISUALFLAGLOC_) + public enum WrapVisualLocation + { + DEFAULT = 0x0000, + END_BY_TEXT = 0x0001, + START_BY_TEXT = 0x0002 + } + /// Retrive the start indent for wrapped lines. (Scintilla feature SC_WRAPINDENT_) + public enum WrapIndentMode + { + FIXED = 0, + SAME = 1, + INDENT = 2, + DEEPINDENT = 3 + } + /// Retrieve how wrapped sublines are placed. Default is fixed. (Scintilla feature SC_CACHE_) + public enum LineCache + { + NONE = 0, + CARET = 1, + PAGE = 2, + DOCUMENT = 3 + } + /// Append a string to the end of the document without changing the selection. (Scintilla feature SC_PHASES_) + public enum PhasesDraw + { + ONE = 0, + TWO = 1, + MULTIPLE = 2 + } + /// Control font anti-aliasing. (Scintilla feature SC_EFF_) + public enum FontQuality + { + QUALITY_MASK = 0xF, + QUALITY_DEFAULT = 0, + QUALITY_NON_ANTIALIASED = 1, + QUALITY_ANTIALIASED = 2, + QUALITY_LCD_OPTIMIZED = 3 + } + /// Scroll so that a display line is at the top of the display. (Scintilla feature SC_MULTIPASTE_) + public enum MultiPaste + { + ONCE = 0, + EACH = 1 + } + /// Set the other colour used as a chequerboard pattern in the fold margin (Scintilla feature SC_ACCESSIBILITY_) + public enum Accessibility + { + DISABLED = 0, + ENABLED = 1 + } + /// Set which document modification events are sent to the container. (Scintilla feature EDGE_) + public enum EdgeVisualStyle + { + NONE = 0, + LINE = 1, + BACKGROUND = 2, + MULTILINE = 3 + } + /// Retrieves the number of lines completely visible. (Scintilla feature SC_POPUP_) + public enum PopUp + { + NEVER = 0, + ALL = 1, + TEXT = 2 + } + /// Retrieve the zoom level. (Scintilla feature SC_DOCUMENTOPTION_) + public enum DocumentOption + { + DEFAULT = 0, + STYLES_NONE = 0x1, + TEXT_LARGE = 0x100 + } + /// Get internal focus flag. (Scintilla feature SC_STATUS_) + public enum Status + { + OK = 0, + FAILURE = 1, + BADALLOC = 2, + WARN_START = 1000, + WARN_REGEX = 1001 + } + /// Get whether mouse wheel can be active outside the window. (Scintilla feature SC_CURSOR) + public enum CursorShape + { + NORMAL = -1, + ARROW = 2, + WAIT = 4, + REVERSEARROW = 7 + } + /// Constants for use with SetVisiblePolicy, similar to SetCaretPolicy. (Scintilla feature VISIBLE_) + public enum VisiblePolicy + { + SLOP = 0x01, + STRICT = 0x04 + } + /// Set the focus to this Scintilla widget. (Scintilla feature CARET_) + public enum CaretPolicy + { + SLOP = 0x01, + STRICT = 0x04, + JUMPS = 0x10, + EVEN = 0x08 + } + /// Copy argument text to the clipboard. (Scintilla feature SC_SEL_) + public enum SelectionMode + { + STREAM = 0, + RECTANGLE = 1, + LINES = 2, + THIN = 3 + } + /// + /// Get currently selected item text in the auto-completion list + /// Returns the length of the item text + /// Result is NUL-terminated. + /// (Scintilla feature SC_CASEINSENSITIVEBEHAVIOUR_) + /// + public enum CaseInsensitiveBehaviour + { + RESPECTCASE = 0, + IGNORECASE = 1 + } + /// Get auto-completion case insensitive behaviour. (Scintilla feature SC_MULTIAUTOC_) + public enum MultiAutoComplete + { + ONCE = 0, + EACH = 1 + } + /// Retrieve the effect of autocompleting when there are multiple selections. (Scintilla feature SC_ORDER_) + public enum Ordering + { + PRESORTED = 0, + PERFORMSORT = 1, + CUSTOM = 2 + } + /// Stop the caret preferred x position changing when the user types. (Scintilla feature SC_CARETSTICKY_) + public enum CaretSticky + { + OFF = 0, + ON = 1, + WHITESPACE = 2 + } + /// Duplicate the selection. If selection empty duplicate the line containing the caret. (Scintilla feature SC_ALPHA_) + public enum Alpha + { + TRANSPARENT = 0, + OPAQUE = 255, + NOALPHA = 256 + } + /// Get the background alpha of the caret line. (Scintilla feature CARETSTYLE_) + public enum CaretStyle + { + INVISIBLE = 0, + LINE = 1, + BLOCK = 2, + OVERSTRIKE_BAR = 0, + OVERSTRIKE_BLOCK = 0x10, + INS_MASK = 0xF, + BLOCK_AFTER = 0x100 + } + /// Get the start of the range of style numbers used for margin text (Scintilla feature SC_MARGINOPTION_) + public enum MarginOption + { + NONE = 0, + SUBLINESELECT = 1 + } + /// Clear the annotations from all lines (Scintilla feature ANNOTATION_) + public enum AnnotationVisible + { + HIDDEN = 0, + STANDARD = 1, + BOXED = 2, + INDENTED = 3 + } + /// Allocate some extended (>255) style numbers and return the start of the range (Scintilla feature UNDO_) + public enum UndoFlags + { + NONE = 0, + MAY_COALESCE = 1 + } + /// Return the virtual space of the anchor of the rectangular selection. (Scintilla feature SCVS_) + public enum VirtualSpace + { + NONE = 0, + RECTANGULARSELECTION = 1, + USERACCESSIBLE = 2, + NOWRAPLINESTART = 4 + } + /// Scroll to end of document. (Scintilla feature SC_TECHNOLOGY_) + public enum Technology + { + DEFAULT = 0, + DIRECTWRITE = 1, + DIRECTWRITERETAIN = 2, + DIRECTWRITEDC = 3 + } + /// + /// Line end types which may be used in addition to LF, CR, and CRLF + /// SC_LINE_END_TYPE_UNICODE includes U+2028 Line Separator, + /// U+2029 Paragraph Separator, and U+0085 Next Line + /// (Scintilla feature SC_LINE_END_TYPE_) + /// + public enum LineEndType + { + DEFAULT = 0, + UNICODE = 1 + } + /// + /// Retrieve a '\n' separated list of properties understood by the current lexer. + /// Result is NUL-terminated. + /// (Scintilla feature SC_TYPE_) + /// + public enum TypeProperty + { + BOOLEAN = 0, + INTEGER = 1, + STRING = 2 + } + /// + /// Notifications + /// Type of modification and the action which caused the modification. + /// These are defined as a bit mask to make it easy to specify which notifications are wanted. + /// One bit is set from each of SC_MOD_* and SC_PERFORMED_*. + /// (Scintilla feature SC_MOD_ SC_PERFORMED_ SC_MULTISTEPUNDOREDO SC_LASTSTEPINUNDOREDO SC_MULTILINEUNDOREDO SC_STARTACTION SC_MODEVENTMASKALL) + /// + public enum ModificationFlags + { + } + /// + /// Notifications + /// Type of modification and the action which caused the modification. + /// These are defined as a bit mask to make it easy to specify which notifications are wanted. + /// One bit is set from each of SC_MOD_* and SC_PERFORMED_*. + /// (Scintilla feature SC_UPDATE_) + /// + public enum Update + { + CONTENT = 0x1, + SELECTION = 0x2, + V_SCROLL = 0x4, + H_SCROLL = 0x8 + } + /// + /// Symbolic key codes and modifier flags. + /// ASCII and other printable characters below 256. + /// Extended keys above 300. + /// (Scintilla feature SCMOD_) + /// + public enum KeyMod + { + NORM = 0, + SHIFT = 1, + CTRL = 2, + ALT = 4, + SUPER = 8, + META = 16 + } + /// + /// Symbolic key codes and modifier flags. + /// ASCII and other printable characters below 256. + /// Extended keys above 300. + /// (Scintilla feature SC_AC_) + /// + public enum CompletionMethods + { + FILLUP = 1, + DOUBLECLICK = 2, + TAB = 3, + NEWLINE = 4, + COMMAND = 5 + } + /// characterSource for SCN_CHARADDED (Scintilla feature SC_CHARACTERSOURCE_) + public enum CharacterSource + { + DIRECT_INPUT = 0, + TENTATIVE_INPUT = 1, + IME_RESULT = 2 + } + /// For SciLexer.h (Scintilla feature SCLEX_) + public enum Lexer + { + CONTAINER = 0, + NULL = 1, + PYTHON = 2, + CPP = 3, + HTML = 4, + XML = 5, + PERL = 6, + SQL = 7, + VB = 8, + PROPERTIES = 9, + ERRORLIST = 10, + MAKEFILE = 11, + BATCH = 12, + XCODE = 13, + LATEX = 14, + LUA = 15, + DIFF = 16, + CONF = 17, + PASCAL = 18, + AVE = 19, + ADA = 20, + LISP = 21, + RUBY = 22, + EIFFEL = 23, + EIFFELKW = 24, + TCL = 25, + NNCRONTAB = 26, + BULLANT = 27, + VBSCRIPT = 28, + BAAN = 31, + MATLAB = 32, + SCRIPTOL = 33, + ASM = 34, + CPPNOCASE = 35, + FORTRAN = 36, + F77 = 37, + CSS = 38, + POV = 39, + LOUT = 40, + ESCRIPT = 41, + PS = 42, + NSIS = 43, + MMIXAL = 44, + CLW = 45, + CLWNOCASE = 46, + LOT = 47, + YAML = 48, + TEX = 49, + METAPOST = 50, + POWERBASIC = 51, + FORTH = 52, + ERLANG = 53, + OCTAVE = 54, + MSSQL = 55, + VERILOG = 56, + KIX = 57, + GUI4CLI = 58, + SPECMAN = 59, + AU3 = 60, + APDL = 61, + BASH = 62, + ASN1 = 63, + VHDL = 64, + CAML = 65, + BLITZBASIC = 66, + PUREBASIC = 67, + HASKELL = 68, + PHPSCRIPT = 69, + TADS3 = 70, + REBOL = 71, + SMALLTALK = 72, + FLAGSHIP = 73, + CSOUND = 74, + FREEBASIC = 75, + INNOSETUP = 76, + OPAL = 77, + SPICE = 78, + D = 79, + CMAKE = 80, + GAP = 81, + PLM = 82, + PROGRESS = 83, + ABAQUS = 84, + ASYMPTOTE = 85, + R = 86, + MAGIK = 87, + POWERSHELL = 88, + MYSQL = 89, + PO = 90, + TAL = 91, + COBOL = 92, + TACL = 93, + SORCUS = 94, + POWERPRO = 95, + NIMROD = 96, + SML = 97, + MARKDOWN = 98, + TXT2TAGS = 99, + A68K = 100, + MODULA = 101, + COFFEESCRIPT = 102, + TCMD = 103, + AVS = 104, + ECL = 105, + OSCRIPT = 106, + VISUALPROLOG = 107, + LITERATEHASKELL = 108, + STTXT = 109, + KVIRC = 110, + RUST = 111, + DMAP = 112, + AS = 113, + DMIS = 114, + REGISTRY = 115, + BIBTEX = 116, + SREC = 117, + IHEX = 118, + TEHEX = 119, + JSON = 120, + EDIFACT = 121, + INDENT = 122, + MAXIMA = 123, + STATA = 124, + SAS = 125, + NIM = 126, + CIL = 127, + X12 = 128, + DATAFLEX = 129, + AUTOMATIC = 1000 + } + /// GTK Specific to work around focus and accelerator problems: (Scintilla feature SC_BIDIRECTIONAL_) + public enum Bidirectional + { + DISABLED = 0, + L2R = 1, + R2L = 2 + } + /// Set bidirectional text display state. (Scintilla feature SC_LINECHARACTERINDEX_) + public enum LineCharacterIndexType + { + NONE = 0, + UTF32 = 1, + UTF16 = 2 + } + /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ + +} diff --git a/WakaTime/PluginInfrastructure/IScintillaGateway.cs b/WakaTime/PluginInfrastructure/IScintillaGateway.cs index 981e1b7..e3f2834 100644 --- a/WakaTime/PluginInfrastructure/IScintillaGateway.cs +++ b/WakaTime/PluginInfrastructure/IScintillaGateway.cs @@ -1,2705 +1,2705 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using static Kbg.NppPluginNET.PluginInfrastructure.Win32; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - - /// - /// This it the plugin-writers primary interface to Notepad++/Scintilla. - /// It takes away all the complexity with command numbers and Int-pointer casting. - /// - /// See http://www.scintilla.org/ScintillaDoc.html for further details. - /// - public interface IScintillaGateway - { - int GetSelectionLength(); - void AppendTextAndMoveCursor(string text); - void InsertTextAndMoveCursor(string text); - void SelectCurrentLine(); - void ClearSelectionToCursor(); - - /// - /// Get the current line from the current position - /// - int GetCurrentLineNumber(); - - /// - /// Get the scroll information for the current Scintilla window. - /// - /// Arguments for the scroll information such as tracking - /// Which scroll bar information are you looking for - /// A ScrollInfo struct with information of the current scroll state - ScrollInfo GetScrollInfo(ScrollInfoMask mask = ScrollInfoMask.SIF_ALL, ScrollInfoBar scrollBar = ScrollInfoBar.SB_BOTH); - - /* ++Autogenerated -- start of section automatically generated from Scintilla.iface */ - /// Add text to the document at current position. (Scintilla feature 2001) - unsafe void AddText(int length, string text); - - /// Add array of cells to document. (Scintilla feature 2002) - unsafe void AddStyledText(int length, Cells c); - - /// Insert string at a position. (Scintilla feature 2003) - unsafe void InsertText(int pos, string text); - - /// Change the text that is being inserted in response to SC_MOD_INSERTCHECK (Scintilla feature 2672) - unsafe void ChangeInsertion(int length, string text); - - /// Delete all text in the document. (Scintilla feature 2004) - void ClearAll(); - - /// Delete a range of text in the document. (Scintilla feature 2645) - void DeleteRange(int start, int lengthDelete); - - /// Set all style bytes to 0, remove all folding information. (Scintilla feature 2005) - void ClearDocumentStyle(); - - /// Returns the number of bytes in the document. (Scintilla feature 2006) - int GetLength(); - - /// Returns the character byte at the position. (Scintilla feature 2007) - int GetCharAt(int pos); - - /// Returns the position of the caret. (Scintilla feature 2008) - int GetCurrentPos(); - - /// Returns the position of the opposite end of the selection to the caret. (Scintilla feature 2009) - int GetAnchor(); - - /// Returns the style byte at the position. (Scintilla feature 2010) - int GetStyleAt(int pos); - - /// Redoes the next action on the undo history. (Scintilla feature 2011) - void Redo(); - - /// - /// Choose between collecting actions into the undo - /// history and discarding them. - /// (Scintilla feature 2012) - /// - void SetUndoCollection(bool collectUndo); - - /// Select all the text in the document. (Scintilla feature 2013) - void SelectAll(); - - /// - /// Remember the current position in the undo history as the position - /// at which the document was saved. - /// (Scintilla feature 2014) - /// - void SetSavePoint(); - - /// - /// Retrieve a buffer of cells. - /// Returns the number of bytes in the buffer not including terminating NULs. - /// (Scintilla feature 2015) - /// - int GetStyledText(TextRange tr); - - /// Are there any redoable actions in the undo history? (Scintilla feature 2016) - bool CanRedo(); - - /// Retrieve the line number at which a particular marker is located. (Scintilla feature 2017) - int MarkerLineFromHandle(int markerHandle); - - /// Delete a marker. (Scintilla feature 2018) - void MarkerDeleteHandle(int markerHandle); - - /// Is undo history being collected? (Scintilla feature 2019) - bool GetUndoCollection(); - - /// - /// Are white space characters currently visible? - /// Returns one of SCWS_* constants. - /// (Scintilla feature 2020) - /// - WhiteSpace GetViewWS(); - - /// Make white space characters invisible, always visible or visible outside indentation. (Scintilla feature 2021) - void SetViewWS(WhiteSpace viewWS); - - /// - /// Retrieve the current tab draw mode. - /// Returns one of SCTD_* constants. - /// (Scintilla feature 2698) - /// - TabDrawMode GetTabDrawMode(); - - /// Set how tabs are drawn when visible. (Scintilla feature 2699) - void SetTabDrawMode(TabDrawMode tabDrawMode); - - /// Find the position from a point within the window. (Scintilla feature 2022) - int PositionFromPoint(int x, int y); - - /// - /// Find the position from a point within the window but return - /// INVALID_POSITION if not close to text. - /// (Scintilla feature 2023) - /// - int PositionFromPointClose(int x, int y); - - /// Set caret to start of a line and ensure it is visible. (Scintilla feature 2024) - void GotoLine(int line); - - /// Set caret to a position and ensure it is visible. (Scintilla feature 2025) - void GotoPos(int caret); - - /// - /// Set the selection anchor to a position. The anchor is the opposite - /// end of the selection from the caret. - /// (Scintilla feature 2026) - /// - void SetAnchor(int anchor); - - /// - /// Retrieve the text of the line containing the caret. - /// Returns the index of the caret on the line. - /// Result is NUL-terminated. - /// (Scintilla feature 2027) - /// - unsafe string GetCurLine(int length); - - /// Retrieve the position of the last correctly styled character. (Scintilla feature 2028) - int GetEndStyled(); - - /// Convert all line endings in the document to one mode. (Scintilla feature 2029) - void ConvertEOLs(EndOfLine eolMode); - - /// Retrieve the current end of line mode - one of CRLF, CR, or LF. (Scintilla feature 2030) - EndOfLine GetEOLMode(); - - /// Set the current end of line mode. (Scintilla feature 2031) - void SetEOLMode(EndOfLine eolMode); - - /// - /// Set the current styling position to start. - /// The unused parameter is no longer used and should be set to 0. - /// (Scintilla feature 2032) - /// - void StartStyling(int start, int unused); - - /// - /// Change style from current styling position for length characters to a style - /// and move the current styling position to after this newly styled segment. - /// (Scintilla feature 2033) - /// - void SetStyling(int length, int style); - - /// Is drawing done first into a buffer or direct to the screen? (Scintilla feature 2034) - bool GetBufferedDraw(); - - /// - /// If drawing is buffered then each line of text is drawn into a bitmap buffer - /// before drawing it to the screen to avoid flicker. - /// (Scintilla feature 2035) - /// - void SetBufferedDraw(bool buffered); - - /// Change the visible size of a tab to be a multiple of the width of a space character. (Scintilla feature 2036) - void SetTabWidth(int tabWidth); - - /// Retrieve the visible size of a tab. (Scintilla feature 2121) - int GetTabWidth(); - - /// Clear explicit tabstops on a line. (Scintilla feature 2675) - void ClearTabStops(int line); - - /// Add an explicit tab stop for a line. (Scintilla feature 2676) - void AddTabStop(int line, int x); - - /// Find the next explicit tab stop position on a line after a position. (Scintilla feature 2677) - int GetNextTabStop(int line, int x); - - /// - /// Set the code page used to interpret the bytes of the document as characters. - /// The SC_CP_UTF8 value can be used to enter Unicode mode. - /// (Scintilla feature 2037) - /// - void SetCodePage(int codePage); - - /// Is the IME displayed in a window or inline? (Scintilla feature 2678) - IMEInteraction GetIMEInteraction(); - - /// Choose to display the the IME in a winow or inline. (Scintilla feature 2679) - void SetIMEInteraction(IMEInteraction imeInteraction); - - /// Set the symbol used for a particular marker number. (Scintilla feature 2040) - void MarkerDefine(int markerNumber, MarkerSymbol markerSymbol); - - /// Set the foreground colour used for a particular marker number. (Scintilla feature 2041) - void MarkerSetFore(int markerNumber, Colour fore); - - /// Set the background colour used for a particular marker number. (Scintilla feature 2042) - void MarkerSetBack(int markerNumber, Colour back); - - /// Set the background colour used for a particular marker number when its folding block is selected. (Scintilla feature 2292) - void MarkerSetBackSelected(int markerNumber, Colour back); - - /// Enable/disable highlight for current folding bloc (smallest one that contains the caret) (Scintilla feature 2293) - void MarkerEnableHighlight(bool enabled); - - /// Add a marker to a line, returning an ID which can be used to find or delete the marker. (Scintilla feature 2043) - int MarkerAdd(int line, int markerNumber); - - /// Delete a marker from a line. (Scintilla feature 2044) - void MarkerDelete(int line, int markerNumber); - - /// Delete all markers with a particular number from all lines. (Scintilla feature 2045) - void MarkerDeleteAll(int markerNumber); - - /// Get a bit mask of all the markers set on a line. (Scintilla feature 2046) - int MarkerGet(int line); - - /// - /// Find the next line at or after lineStart that includes a marker in mask. - /// Return -1 when no more lines. - /// (Scintilla feature 2047) - /// - int MarkerNext(int lineStart, int markerMask); - - /// Find the previous line before lineStart that includes a marker in mask. (Scintilla feature 2048) - int MarkerPrevious(int lineStart, int markerMask); - - /// Define a marker from a pixmap. (Scintilla feature 2049) - unsafe void MarkerDefinePixmap(int markerNumber, string pixmap); - - /// Add a set of markers to a line. (Scintilla feature 2466) - void MarkerAddSet(int line, int markerSet); - - /// Set the alpha used for a marker that is drawn in the text area, not the margin. (Scintilla feature 2476) - void MarkerSetAlpha(int markerNumber, Alpha alpha); - - /// Set a margin to be either numeric or symbolic. (Scintilla feature 2240) - void SetMarginTypeN(int margin, MarginType marginType); - - /// Retrieve the type of a margin. (Scintilla feature 2241) - MarginType GetMarginTypeN(int margin); - - /// Set the width of a margin to a width expressed in pixels. (Scintilla feature 2242) - void SetMarginWidthN(int margin, int pixelWidth); - - /// Retrieve the width of a margin in pixels. (Scintilla feature 2243) - int GetMarginWidthN(int margin); - - /// Set a mask that determines which markers are displayed in a margin. (Scintilla feature 2244) - void SetMarginMaskN(int margin, int mask); - - /// Retrieve the marker mask of a margin. (Scintilla feature 2245) - int GetMarginMaskN(int margin); - - /// Make a margin sensitive or insensitive to mouse clicks. (Scintilla feature 2246) - void SetMarginSensitiveN(int margin, bool sensitive); - - /// Retrieve the mouse click sensitivity of a margin. (Scintilla feature 2247) - bool GetMarginSensitiveN(int margin); - - /// Set the cursor shown when the mouse is inside a margin. (Scintilla feature 2248) - void SetMarginCursorN(int margin, CursorShape cursor); - - /// Retrieve the cursor shown in a margin. (Scintilla feature 2249) - CursorShape GetMarginCursorN(int margin); - - /// Set the background colour of a margin. Only visible for SC_MARGIN_COLOUR. (Scintilla feature 2250) - void SetMarginBackN(int margin, Colour back); - - /// Retrieve the background colour of a margin (Scintilla feature 2251) - Colour GetMarginBackN(int margin); - - /// Allocate a non-standard number of margins. (Scintilla feature 2252) - void SetMargins(int margins); - - /// How many margins are there?. (Scintilla feature 2253) - int GetMargins(); - - /// Clear all the styles and make equivalent to the global default style. (Scintilla feature 2050) - void StyleClearAll(); - - /// Set the foreground colour of a style. (Scintilla feature 2051) - void StyleSetFore(int style, Colour fore); - - /// Set the background colour of a style. (Scintilla feature 2052) - void StyleSetBack(int style, Colour back); - - /// Set a style to be bold or not. (Scintilla feature 2053) - void StyleSetBold(int style, bool bold); - - /// Set a style to be italic or not. (Scintilla feature 2054) - void StyleSetItalic(int style, bool italic); - - /// Set the size of characters of a style. (Scintilla feature 2055) - void StyleSetSize(int style, int sizePoints); - - /// Set the font of a style. (Scintilla feature 2056) - unsafe void StyleSetFont(int style, string fontName); - - /// Set a style to have its end of line filled or not. (Scintilla feature 2057) - void StyleSetEOLFilled(int style, bool eolFilled); - - /// Reset the default style to its state at startup (Scintilla feature 2058) - void StyleResetDefault(); - - /// Set a style to be underlined or not. (Scintilla feature 2059) - void StyleSetUnderline(int style, bool underline); - - /// Get the foreground colour of a style. (Scintilla feature 2481) - Colour StyleGetFore(int style); - - /// Get the background colour of a style. (Scintilla feature 2482) - Colour StyleGetBack(int style); - - /// Get is a style bold or not. (Scintilla feature 2483) - bool StyleGetBold(int style); - - /// Get is a style italic or not. (Scintilla feature 2484) - bool StyleGetItalic(int style); - - /// Get the size of characters of a style. (Scintilla feature 2485) - int StyleGetSize(int style); - - /// - /// Get the font of a style. - /// Returns the length of the fontName - /// Result is NUL-terminated. - /// (Scintilla feature 2486) - /// - unsafe string StyleGetFont(int style); - - /// Get is a style to have its end of line filled or not. (Scintilla feature 2487) - bool StyleGetEOLFilled(int style); - - /// Get is a style underlined or not. (Scintilla feature 2488) - bool StyleGetUnderline(int style); - - /// Get is a style mixed case, or to force upper or lower case. (Scintilla feature 2489) - CaseVisible StyleGetCase(int style); - - /// Get the character get of the font in a style. (Scintilla feature 2490) - CharacterSet StyleGetCharacterSet(int style); - - /// Get is a style visible or not. (Scintilla feature 2491) - bool StyleGetVisible(int style); - - /// - /// Get is a style changeable or not (read only). - /// Experimental feature, currently buggy. - /// (Scintilla feature 2492) - /// - bool StyleGetChangeable(int style); - - /// Get is a style a hotspot or not. (Scintilla feature 2493) - bool StyleGetHotSpot(int style); - - /// Set a style to be mixed case, or to force upper or lower case. (Scintilla feature 2060) - void StyleSetCase(int style, CaseVisible caseVisible); - - /// Set the size of characters of a style. Size is in points multiplied by 100. (Scintilla feature 2061) - void StyleSetSizeFractional(int style, int sizeHundredthPoints); - - /// Get the size of characters of a style in points multiplied by 100 (Scintilla feature 2062) - int StyleGetSizeFractional(int style); - - /// Set the weight of characters of a style. (Scintilla feature 2063) - void StyleSetWeight(int style, FontWeight weight); - - /// Get the weight of characters of a style. (Scintilla feature 2064) - FontWeight StyleGetWeight(int style); - - /// Set the character set of the font in a style. (Scintilla feature 2066) - void StyleSetCharacterSet(int style, CharacterSet characterSet); - - /// Set a style to be a hotspot or not. (Scintilla feature 2409) - void StyleSetHotSpot(int style, bool hotspot); - - /// Set the foreground colour of the main and additional selections and whether to use this setting. (Scintilla feature 2067) - void SetSelFore(bool useSetting, Colour fore); - - /// Set the background colour of the main and additional selections and whether to use this setting. (Scintilla feature 2068) - void SetSelBack(bool useSetting, Colour back); - - /// Get the alpha of the selection. (Scintilla feature 2477) - Alpha GetSelAlpha(); - - /// Set the alpha of the selection. (Scintilla feature 2478) - void SetSelAlpha(Alpha alpha); - - /// Is the selection end of line filled? (Scintilla feature 2479) - bool GetSelEOLFilled(); - - /// Set the selection to have its end of line filled or not. (Scintilla feature 2480) - void SetSelEOLFilled(bool filled); - - /// Set the foreground colour of the caret. (Scintilla feature 2069) - void SetCaretFore(Colour fore); - - /// When key+modifier combination keyDefinition is pressed perform sciCommand. (Scintilla feature 2070) - void AssignCmdKey(KeyModifier keyDefinition, int sciCommand); - - /// When key+modifier combination keyDefinition is pressed do nothing. (Scintilla feature 2071) - void ClearCmdKey(KeyModifier keyDefinition); - - /// Drop all key mappings. (Scintilla feature 2072) - void ClearAllCmdKeys(); - - /// Set the styles for a segment of the document. (Scintilla feature 2073) - unsafe void SetStylingEx(int length, string styles); - - /// Set a style to be visible or not. (Scintilla feature 2074) - void StyleSetVisible(int style, bool visible); - - /// Get the time in milliseconds that the caret is on and off. (Scintilla feature 2075) - int GetCaretPeriod(); - - /// Get the time in milliseconds that the caret is on and off. 0 = steady on. (Scintilla feature 2076) - void SetCaretPeriod(int periodMilliseconds); - - /// - /// Set the set of characters making up words for when moving or selecting by word. - /// First sets defaults like SetCharsDefault. - /// (Scintilla feature 2077) - /// - unsafe void SetWordChars(string characters); - - /// - /// Get the set of characters making up words for when moving or selecting by word. - /// Returns the number of characters - /// (Scintilla feature 2646) - /// - unsafe string GetWordChars(); - - /// Set the number of characters to have directly indexed categories (Scintilla feature 2720) - void SetCharacterCategoryOptimization(int countCharacters); - - /// Get the number of characters to have directly indexed categories (Scintilla feature 2721) - int GetCharacterCategoryOptimization(); - - /// - /// Start a sequence of actions that is undone and redone as a unit. - /// May be nested. - /// (Scintilla feature 2078) - /// - void BeginUndoAction(); - - /// End a sequence of actions that is undone and redone as a unit. (Scintilla feature 2079) - void EndUndoAction(); - - /// Set an indicator to plain, squiggle or TT. (Scintilla feature 2080) - void IndicSetStyle(int indicator, IndicatorStyle indicatorStyle); - - /// Retrieve the style of an indicator. (Scintilla feature 2081) - IndicatorStyle IndicGetStyle(int indicator); - - /// Set the foreground colour of an indicator. (Scintilla feature 2082) - void IndicSetFore(int indicator, Colour fore); - - /// Retrieve the foreground colour of an indicator. (Scintilla feature 2083) - Colour IndicGetFore(int indicator); - - /// Set an indicator to draw under text or over(default). (Scintilla feature 2510) - void IndicSetUnder(int indicator, bool under); - - /// Retrieve whether indicator drawn under or over text. (Scintilla feature 2511) - bool IndicGetUnder(int indicator); - - /// Set a hover indicator to plain, squiggle or TT. (Scintilla feature 2680) - void IndicSetHoverStyle(int indicator, IndicatorStyle indicatorStyle); - - /// Retrieve the hover style of an indicator. (Scintilla feature 2681) - IndicatorStyle IndicGetHoverStyle(int indicator); - - /// Set the foreground hover colour of an indicator. (Scintilla feature 2682) - void IndicSetHoverFore(int indicator, Colour fore); - - /// Retrieve the foreground hover colour of an indicator. (Scintilla feature 2683) - Colour IndicGetHoverFore(int indicator); - - /// Set the attributes of an indicator. (Scintilla feature 2684) - void IndicSetFlags(int indicator, IndicFlag flags); - - /// Retrieve the attributes of an indicator. (Scintilla feature 2685) - IndicFlag IndicGetFlags(int indicator); - - /// Set the foreground colour of all whitespace and whether to use this setting. (Scintilla feature 2084) - void SetWhitespaceFore(bool useSetting, Colour fore); - - /// Set the background colour of all whitespace and whether to use this setting. (Scintilla feature 2085) - void SetWhitespaceBack(bool useSetting, Colour back); - - /// Set the size of the dots used to mark space characters. (Scintilla feature 2086) - void SetWhitespaceSize(int size); - - /// Get the size of the dots used to mark space characters. (Scintilla feature 2087) - int GetWhitespaceSize(); - - /// Used to hold extra styling information for each line. (Scintilla feature 2092) - void SetLineState(int line, int state); - - /// Retrieve the extra styling information for a line. (Scintilla feature 2093) - int GetLineState(int line); - - /// Retrieve the last line number that has line state. (Scintilla feature 2094) - int GetMaxLineState(); - - /// Is the background of the line containing the caret in a different colour? (Scintilla feature 2095) - bool GetCaretLineVisible(); - - /// Display the background of the line containing the caret in a different colour. (Scintilla feature 2096) - void SetCaretLineVisible(bool show); - - /// Get the colour of the background of the line containing the caret. (Scintilla feature 2097) - Colour GetCaretLineBack(); - - /// Set the colour of the background of the line containing the caret. (Scintilla feature 2098) - void SetCaretLineBack(Colour back); - - /// - /// Retrieve the caret line frame width. - /// Width = 0 means this option is disabled. - /// (Scintilla feature 2704) - /// - int GetCaretLineFrame(); - - /// - /// Display the caret line framed. - /// Set width != 0 to enable this option and width = 0 to disable it. - /// (Scintilla feature 2705) - /// - void SetCaretLineFrame(int width); - - /// - /// Set a style to be changeable or not (read only). - /// Experimental feature, currently buggy. - /// (Scintilla feature 2099) - /// - void StyleSetChangeable(int style, bool changeable); - - /// - /// Display a auto-completion list. - /// The lengthEntered parameter indicates how many characters before - /// the caret should be used to provide context. - /// (Scintilla feature 2100) - /// - unsafe void AutoCShow(int lengthEntered, string itemList); - - /// Remove the auto-completion list from the screen. (Scintilla feature 2101) - void AutoCCancel(); - - /// Is there an auto-completion list visible? (Scintilla feature 2102) - bool AutoCActive(); - - /// Retrieve the position of the caret when the auto-completion list was displayed. (Scintilla feature 2103) - int AutoCPosStart(); - - /// User has selected an item so remove the list and insert the selection. (Scintilla feature 2104) - void AutoCComplete(); - - /// Define a set of character that when typed cancel the auto-completion list. (Scintilla feature 2105) - unsafe void AutoCStops(string characterSet); - - /// - /// Change the separator character in the string setting up an auto-completion list. - /// Default is space but can be changed if items contain space. - /// (Scintilla feature 2106) - /// - void AutoCSetSeparator(int separatorCharacter); - - /// Retrieve the auto-completion list separator character. (Scintilla feature 2107) - int AutoCGetSeparator(); - - /// Select the item in the auto-completion list that starts with a string. (Scintilla feature 2108) - unsafe void AutoCSelect(string select); - - /// - /// Should the auto-completion list be cancelled if the user backspaces to a - /// position before where the box was created. - /// (Scintilla feature 2110) - /// - void AutoCSetCancelAtStart(bool cancel); - - /// Retrieve whether auto-completion cancelled by backspacing before start. (Scintilla feature 2111) - bool AutoCGetCancelAtStart(); - - /// - /// Define a set of characters that when typed will cause the autocompletion to - /// choose the selected item. - /// (Scintilla feature 2112) - /// - unsafe void AutoCSetFillUps(string characterSet); - - /// Should a single item auto-completion list automatically choose the item. (Scintilla feature 2113) - void AutoCSetChooseSingle(bool chooseSingle); - - /// Retrieve whether a single item auto-completion list automatically choose the item. (Scintilla feature 2114) - bool AutoCGetChooseSingle(); - - /// Set whether case is significant when performing auto-completion searches. (Scintilla feature 2115) - void AutoCSetIgnoreCase(bool ignoreCase); - - /// Retrieve state of ignore case flag. (Scintilla feature 2116) - bool AutoCGetIgnoreCase(); - - /// Display a list of strings and send notification when user chooses one. (Scintilla feature 2117) - unsafe void UserListShow(int listType, string itemList); - - /// Set whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2118) - void AutoCSetAutoHide(bool autoHide); - - /// Retrieve whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2119) - bool AutoCGetAutoHide(); - - /// - /// Set whether or not autocompletion deletes any word characters - /// after the inserted text upon completion. - /// (Scintilla feature 2270) - /// - void AutoCSetDropRestOfWord(bool dropRestOfWord); - - /// - /// Retrieve whether or not autocompletion deletes any word characters - /// after the inserted text upon completion. - /// (Scintilla feature 2271) - /// - bool AutoCGetDropRestOfWord(); - - /// Register an XPM image for use in autocompletion lists. (Scintilla feature 2405) - unsafe void RegisterImage(int type, string xpmData); - - /// Clear all the registered XPM images. (Scintilla feature 2408) - void ClearRegisteredImages(); - - /// Retrieve the auto-completion list type-separator character. (Scintilla feature 2285) - int AutoCGetTypeSeparator(); - - /// - /// Change the type-separator character in the string setting up an auto-completion list. - /// Default is '?' but can be changed if items contain '?'. - /// (Scintilla feature 2286) - /// - void AutoCSetTypeSeparator(int separatorCharacter); - - /// - /// Set the maximum width, in characters, of auto-completion and user lists. - /// Set to 0 to autosize to fit longest item, which is the default. - /// (Scintilla feature 2208) - /// - void AutoCSetMaxWidth(int characterCount); - - /// Get the maximum width, in characters, of auto-completion and user lists. (Scintilla feature 2209) - int AutoCGetMaxWidth(); - - /// - /// Set the maximum height, in rows, of auto-completion and user lists. - /// The default is 5 rows. - /// (Scintilla feature 2210) - /// - void AutoCSetMaxHeight(int rowCount); - - /// Set the maximum height, in rows, of auto-completion and user lists. (Scintilla feature 2211) - int AutoCGetMaxHeight(); - - /// Set the number of spaces used for one level of indentation. (Scintilla feature 2122) - void SetIndent(int indentSize); - - /// Retrieve indentation size. (Scintilla feature 2123) - int GetIndent(); - - /// - /// Indentation will only use space characters if useTabs is false, otherwise - /// it will use a combination of tabs and spaces. - /// (Scintilla feature 2124) - /// - void SetUseTabs(bool useTabs); - - /// Retrieve whether tabs will be used in indentation. (Scintilla feature 2125) - bool GetUseTabs(); - - /// Change the indentation of a line to a number of columns. (Scintilla feature 2126) - void SetLineIndentation(int line, int indentation); - - /// Retrieve the number of columns that a line is indented. (Scintilla feature 2127) - int GetLineIndentation(int line); - - /// Retrieve the position before the first non indentation character on a line. (Scintilla feature 2128) - int GetLineIndentPosition(int line); - - /// Retrieve the column number of a position, taking tab width into account. (Scintilla feature 2129) - int GetColumn(int pos); - - /// Count characters between two positions. (Scintilla feature 2633) - int CountCharacters(int start, int end); - - /// Count code units between two positions. (Scintilla feature 2715) - int CountCodeUnits(int start, int end); - - /// Show or hide the horizontal scroll bar. (Scintilla feature 2130) - void SetHScrollBar(bool visible); - - /// Is the horizontal scroll bar visible? (Scintilla feature 2131) - bool GetHScrollBar(); - - /// Show or hide indentation guides. (Scintilla feature 2132) - void SetIndentationGuides(IndentView indentView); - - /// Are the indentation guides visible? (Scintilla feature 2133) - IndentView GetIndentationGuides(); - - /// - /// Set the highlighted indentation guide column. - /// 0 = no highlighted guide. - /// (Scintilla feature 2134) - /// - void SetHighlightGuide(int column); - - /// Get the highlighted indentation guide column. (Scintilla feature 2135) - int GetHighlightGuide(); - - /// Get the position after the last visible characters on a line. (Scintilla feature 2136) - int GetLineEndPosition(int line); - - /// Get the code page used to interpret the bytes of the document as characters. (Scintilla feature 2137) - int GetCodePage(); - - /// Get the foreground colour of the caret. (Scintilla feature 2138) - Colour GetCaretFore(); - - /// In read-only mode? (Scintilla feature 2140) - bool GetReadOnly(); - - /// Sets the position of the caret. (Scintilla feature 2141) - void SetCurrentPos(int caret); - - /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2142) - void SetSelectionStart(int anchor); - - /// Returns the position at the start of the selection. (Scintilla feature 2143) - int GetSelectionStart(); - - /// Sets the position that ends the selection - this becomes the caret. (Scintilla feature 2144) - void SetSelectionEnd(int caret); - - /// Returns the position at the end of the selection. (Scintilla feature 2145) - int GetSelectionEnd(); - - /// Set caret to a position, while removing any existing selection. (Scintilla feature 2556) - void SetEmptySelection(int caret); - - /// Sets the print magnification added to the point size of each style for printing. (Scintilla feature 2146) - void SetPrintMagnification(int magnification); - - /// Returns the print magnification. (Scintilla feature 2147) - int GetPrintMagnification(); - - /// Modify colours when printing for clearer printed text. (Scintilla feature 2148) - void SetPrintColourMode(PrintOption mode); - - /// Returns the print colour mode. (Scintilla feature 2149) - PrintOption GetPrintColourMode(); - - /// Find some text in the document. (Scintilla feature 2150) - int FindText(FindOption searchFlags, TextToFind ft); - - /// Retrieve the display line at the top of the display. (Scintilla feature 2152) - int GetFirstVisibleLine(); - - /// - /// Retrieve the contents of a line. - /// Returns the length of the line. - /// (Scintilla feature 2153) - /// - unsafe string GetLine(int line); - - /// Returns the number of lines in the document. There is always at least one. (Scintilla feature 2154) - int GetLineCount(); - - /// Sets the size in pixels of the left margin. (Scintilla feature 2155) - void SetMarginLeft(int pixelWidth); - - /// Returns the size in pixels of the left margin. (Scintilla feature 2156) - int GetMarginLeft(); - - /// Sets the size in pixels of the right margin. (Scintilla feature 2157) - void SetMarginRight(int pixelWidth); - - /// Returns the size in pixels of the right margin. (Scintilla feature 2158) - int GetMarginRight(); - - /// Is the document different from when it was last saved? (Scintilla feature 2159) - bool GetModify(); - - /// Select a range of text. (Scintilla feature 2160) - void SetSel(int anchor, int caret); - - /// - /// Retrieve the selected text. - /// Return the length of the text. - /// Result is NUL-terminated. - /// (Scintilla feature 2161) - /// - unsafe string GetSelText(); - - /// - /// Retrieve a range of text. - /// Return the length of the text. - /// (Scintilla feature 2162) - /// - int GetTextRange(TextRange tr); - - /// Draw the selection either highlighted or in normal (non-highlighted) style. (Scintilla feature 2163) - void HideSelection(bool hide); - - /// Retrieve the x value of the point in the window where a position is displayed. (Scintilla feature 2164) - int PointXFromPosition(int pos); - - /// Retrieve the y value of the point in the window where a position is displayed. (Scintilla feature 2165) - int PointYFromPosition(int pos); - - /// Retrieve the line containing a position. (Scintilla feature 2166) - int LineFromPosition(int pos); - - /// Retrieve the position at the start of a line. (Scintilla feature 2167) - int PositionFromLine(int line); - - /// Scroll horizontally and vertically. (Scintilla feature 2168) - void LineScroll(int columns, int lines); - - /// Ensure the caret is visible. (Scintilla feature 2169) - void ScrollCaret(); - - /// - /// Scroll the argument positions and the range between them into view giving - /// priority to the primary position then the secondary position. - /// This may be used to make a search match visible. - /// (Scintilla feature 2569) - /// - void ScrollRange(int secondary, int primary); - - /// Replace the selected text with the argument text. (Scintilla feature 2170) - unsafe void ReplaceSel(string text); - - /// Set to read only or read write. (Scintilla feature 2171) - void SetReadOnly(bool readOnly); - - /// Null operation. (Scintilla feature 2172) - void Null(); - - /// Will a paste succeed? (Scintilla feature 2173) - bool CanPaste(); - - /// Are there any undoable actions in the undo history? (Scintilla feature 2174) - bool CanUndo(); - - /// Delete the undo history. (Scintilla feature 2175) - void EmptyUndoBuffer(); - - /// Undo one action in the undo history. (Scintilla feature 2176) - void Undo(); - - /// Cut the selection to the clipboard. (Scintilla feature 2177) - void Cut(); - - /// Copy the selection to the clipboard. (Scintilla feature 2178) - void Copy(); - - /// Paste the contents of the clipboard into the document replacing the selection. (Scintilla feature 2179) - void Paste(); - - /// Clear the selection. (Scintilla feature 2180) - void Clear(); - - /// Replace the contents of the document with the argument text. (Scintilla feature 2181) - unsafe void SetText(string text); - - /// - /// Retrieve all the text in the document. - /// Returns number of characters retrieved. - /// Result is NUL-terminated. - /// (Scintilla feature 2182) - /// - unsafe string GetText(int length); - - /// Retrieve the number of characters in the document. (Scintilla feature 2183) - int GetTextLength(); - - /// Retrieve a pointer to a function that processes messages for this Scintilla. (Scintilla feature 2184) - IntPtr GetDirectFunction(); - - /// - /// Retrieve a pointer value to use as the first argument when calling - /// the function returned by GetDirectFunction. - /// (Scintilla feature 2185) - /// - IntPtr GetDirectPointer(); - - /// Set to overtype (true) or insert mode. (Scintilla feature 2186) - void SetOvertype(bool overType); - - /// Returns true if overtype mode is active otherwise false is returned. (Scintilla feature 2187) - bool GetOvertype(); - - /// Set the width of the insert mode caret. (Scintilla feature 2188) - void SetCaretWidth(int pixelWidth); - - /// Returns the width of the insert mode caret. (Scintilla feature 2189) - int GetCaretWidth(); - - /// - /// Sets the position that starts the target which is used for updating the - /// document without affecting the scroll position. - /// (Scintilla feature 2190) - /// - void SetTargetStart(int start); - - /// Get the position that starts the target. (Scintilla feature 2191) - int GetTargetStart(); - - /// - /// Sets the position that ends the target which is used for updating the - /// document without affecting the scroll position. - /// (Scintilla feature 2192) - /// - void SetTargetEnd(int end); - - /// Get the position that ends the target. (Scintilla feature 2193) - int GetTargetEnd(); - - /// Sets both the start and end of the target in one call. (Scintilla feature 2686) - void SetTargetRange(int start, int end); - - /// Retrieve the text in the target. (Scintilla feature 2687) - unsafe string GetTargetText(); - - /// Make the target range start and end be the same as the selection range start and end. (Scintilla feature 2287) - void TargetFromSelection(); - - /// Sets the target to the whole document. (Scintilla feature 2690) - void TargetWholeDocument(); - - /// - /// Replace the target text with the argument text. - /// Text is counted so it can contain NULs. - /// Returns the length of the replacement text. - /// (Scintilla feature 2194) - /// - unsafe int ReplaceTarget(int length, string text); - - /// - /// Replace the target text with the argument text after \d processing. - /// Text is counted so it can contain NULs. - /// Looks for \d where d is between 1 and 9 and replaces these with the strings - /// matched in the last search operation which were surrounded by \( and \). - /// Returns the length of the replacement text including any change - /// caused by processing the \d patterns. - /// (Scintilla feature 2195) - /// - unsafe int ReplaceTargetRE(int length, string text); - - /// - /// Search for a counted string in the target and set the target to the found - /// range. Text is counted so it can contain NULs. - /// Returns start of found range or -1 for failure in which case target is not moved. - /// (Scintilla feature 2197) - /// - unsafe int SearchInTarget(int length, string text); - - /// Set the search flags used by SearchInTarget. (Scintilla feature 2198) - void SetSearchFlags(FindOption searchFlags); - - /// Get the search flags used by SearchInTarget. (Scintilla feature 2199) - FindOption GetSearchFlags(); - - /// Show a call tip containing a definition near position pos. (Scintilla feature 2200) - unsafe void CallTipShow(int pos, string definition); - - /// Remove the call tip from the screen. (Scintilla feature 2201) - void CallTipCancel(); - - /// Is there an active call tip? (Scintilla feature 2202) - bool CallTipActive(); - - /// Retrieve the position where the caret was before displaying the call tip. (Scintilla feature 2203) - int CallTipPosStart(); - - /// Set the start position in order to change when backspacing removes the calltip. (Scintilla feature 2214) - void CallTipSetPosStart(int posStart); - - /// Highlight a segment of the definition. (Scintilla feature 2204) - void CallTipSetHlt(int highlightStart, int highlightEnd); - - /// Set the background colour for the call tip. (Scintilla feature 2205) - void CallTipSetBack(Colour back); - - /// Set the foreground colour for the call tip. (Scintilla feature 2206) - void CallTipSetFore(Colour fore); - - /// Set the foreground colour for the highlighted part of the call tip. (Scintilla feature 2207) - void CallTipSetForeHlt(Colour fore); - - /// Enable use of STYLE_CALLTIP and set call tip tab size in pixels. (Scintilla feature 2212) - void CallTipUseStyle(int tabSize); - - /// Set position of calltip, above or below text. (Scintilla feature 2213) - void CallTipSetPosition(bool above); - - /// Find the display line of a document line taking hidden lines into account. (Scintilla feature 2220) - int VisibleFromDocLine(int docLine); - - /// Find the document line of a display line taking hidden lines into account. (Scintilla feature 2221) - int DocLineFromVisible(int displayLine); - - /// The number of display lines needed to wrap a document line (Scintilla feature 2235) - int WrapCount(int docLine); - - /// - /// Set the fold level of a line. - /// This encodes an integer level along with flags indicating whether the - /// line is a header and whether it is effectively white space. - /// (Scintilla feature 2222) - /// - void SetFoldLevel(int line, FoldLevel level); - - /// Retrieve the fold level of a line. (Scintilla feature 2223) - FoldLevel GetFoldLevel(int line); - - /// Find the last child line of a header line. (Scintilla feature 2224) - int GetLastChild(int line, FoldLevel level); - - /// Find the parent line of a child line. (Scintilla feature 2225) - int GetFoldParent(int line); - - /// Make a range of lines visible. (Scintilla feature 2226) - void ShowLines(int lineStart, int lineEnd); - - /// Make a range of lines invisible. (Scintilla feature 2227) - void HideLines(int lineStart, int lineEnd); - - /// Is a line visible? (Scintilla feature 2228) - bool GetLineVisible(int line); - - /// Are all lines visible? (Scintilla feature 2236) - bool GetAllLinesVisible(); - - /// Show the children of a header line. (Scintilla feature 2229) - void SetFoldExpanded(int line, bool expanded); - - /// Is a header line expanded? (Scintilla feature 2230) - bool GetFoldExpanded(int line); - - /// Switch a header line between expanded and contracted. (Scintilla feature 2231) - void ToggleFold(int line); - - /// Switch a header line between expanded and contracted and show some text after the line. (Scintilla feature 2700) - unsafe void ToggleFoldShowText(int line, string text); - - /// Set the style of fold display text. (Scintilla feature 2701) - void FoldDisplayTextSetStyle(FoldDisplayTextStyle style); - - /// Get the style of fold display text. (Scintilla feature 2707) - FoldDisplayTextStyle FoldDisplayTextGetStyle(); - - /// Set the default fold display text. (Scintilla feature 2722) - unsafe void SetDefaultFoldDisplayText(string text); - - /// Get the default fold display text. (Scintilla feature 2723) - unsafe string GetDefaultFoldDisplayText(); - - /// Expand or contract a fold header. (Scintilla feature 2237) - void FoldLine(int line, FoldAction action); - - /// Expand or contract a fold header and its children. (Scintilla feature 2238) - void FoldChildren(int line, FoldAction action); - - /// Expand a fold header and all children. Use the level argument instead of the line's current level. (Scintilla feature 2239) - void ExpandChildren(int line, FoldLevel level); - - /// Expand or contract all fold headers. (Scintilla feature 2662) - void FoldAll(FoldAction action); - - /// Ensure a particular line is visible by expanding any header line hiding it. (Scintilla feature 2232) - void EnsureVisible(int line); - - /// Set automatic folding behaviours. (Scintilla feature 2663) - void SetAutomaticFold(AutomaticFold automaticFold); - - /// Get automatic folding behaviours. (Scintilla feature 2664) - AutomaticFold GetAutomaticFold(); - - /// Set some style options for folding. (Scintilla feature 2233) - void SetFoldFlags(FoldFlag flags); - - /// - /// Ensure a particular line is visible by expanding any header line hiding it. - /// Use the currently set visibility policy to determine which range to display. - /// (Scintilla feature 2234) - /// - void EnsureVisibleEnforcePolicy(int line); - - /// Sets whether a tab pressed when caret is within indentation indents. (Scintilla feature 2260) - void SetTabIndents(bool tabIndents); - - /// Does a tab pressed when caret is within indentation indent? (Scintilla feature 2261) - bool GetTabIndents(); - - /// Sets whether a backspace pressed when caret is within indentation unindents. (Scintilla feature 2262) - void SetBackSpaceUnIndents(bool bsUnIndents); - - /// Does a backspace pressed when caret is within indentation unindent? (Scintilla feature 2263) - bool GetBackSpaceUnIndents(); - - /// Sets the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2264) - void SetMouseDwellTime(int periodMilliseconds); - - /// Retrieve the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2265) - int GetMouseDwellTime(); - - /// Get position of start of word. (Scintilla feature 2266) - int WordStartPosition(int pos, bool onlyWordCharacters); - - /// Get position of end of word. (Scintilla feature 2267) - int WordEndPosition(int pos, bool onlyWordCharacters); - - /// Is the range start..end considered a word? (Scintilla feature 2691) - bool IsRangeWord(int start, int end); - - /// Sets limits to idle styling. (Scintilla feature 2692) - void SetIdleStyling(IdleStyling idleStyling); - - /// Retrieve the limits to idle styling. (Scintilla feature 2693) - IdleStyling GetIdleStyling(); - - /// Sets whether text is word wrapped. (Scintilla feature 2268) - void SetWrapMode(Wrap wrapMode); - - /// Retrieve whether text is word wrapped. (Scintilla feature 2269) - Wrap GetWrapMode(); - - /// Set the display mode of visual flags for wrapped lines. (Scintilla feature 2460) - void SetWrapVisualFlags(WrapVisualFlag wrapVisualFlags); - - /// Retrive the display mode of visual flags for wrapped lines. (Scintilla feature 2461) - WrapVisualFlag GetWrapVisualFlags(); - - /// Set the location of visual flags for wrapped lines. (Scintilla feature 2462) - void SetWrapVisualFlagsLocation(WrapVisualLocation wrapVisualFlagsLocation); - - /// Retrive the location of visual flags for wrapped lines. (Scintilla feature 2463) - WrapVisualLocation GetWrapVisualFlagsLocation(); - - /// Set the start indent for wrapped lines. (Scintilla feature 2464) - void SetWrapStartIndent(int indent); - - /// Retrive the start indent for wrapped lines. (Scintilla feature 2465) - int GetWrapStartIndent(); - - /// Sets how wrapped sublines are placed. Default is fixed. (Scintilla feature 2472) - void SetWrapIndentMode(WrapIndentMode wrapIndentMode); - - /// Retrieve how wrapped sublines are placed. Default is fixed. (Scintilla feature 2473) - WrapIndentMode GetWrapIndentMode(); - - /// Sets the degree of caching of layout information. (Scintilla feature 2272) - void SetLayoutCache(LineCache cacheMode); - - /// Retrieve the degree of caching of layout information. (Scintilla feature 2273) - LineCache GetLayoutCache(); - - /// Sets the document width assumed for scrolling. (Scintilla feature 2274) - void SetScrollWidth(int pixelWidth); - - /// Retrieve the document width assumed for scrolling. (Scintilla feature 2275) - int GetScrollWidth(); - - /// Sets whether the maximum width line displayed is used to set scroll width. (Scintilla feature 2516) - void SetScrollWidthTracking(bool tracking); - - /// Retrieve whether the scroll width tracks wide lines. (Scintilla feature 2517) - bool GetScrollWidthTracking(); - - /// - /// Measure the pixel width of some text in a particular style. - /// NUL terminated text argument. - /// Does not handle tab or control characters. - /// (Scintilla feature 2276) - /// - unsafe int TextWidth(int style, string text); - - /// - /// Sets the scroll range so that maximum scroll position has - /// the last line at the bottom of the view (default). - /// Setting this to false allows scrolling one page below the last line. - /// (Scintilla feature 2277) - /// - void SetEndAtLastLine(bool endAtLastLine); - - /// - /// Retrieve whether the maximum scroll position has the last - /// line at the bottom of the view. - /// (Scintilla feature 2278) - /// - bool GetEndAtLastLine(); - - /// Retrieve the height of a particular line of text in pixels. (Scintilla feature 2279) - int TextHeight(int line); - - /// Show or hide the vertical scroll bar. (Scintilla feature 2280) - void SetVScrollBar(bool visible); - - /// Is the vertical scroll bar visible? (Scintilla feature 2281) - bool GetVScrollBar(); - - /// Append a string to the end of the document without changing the selection. (Scintilla feature 2282) - unsafe void AppendText(int length, string text); - - /// How many phases is drawing done in? (Scintilla feature 2673) - PhasesDraw GetPhasesDraw(); - - /// - /// In one phase draw, text is drawn in a series of rectangular blocks with no overlap. - /// In two phase draw, text is drawn in a series of lines allowing runs to overlap horizontally. - /// In multiple phase draw, each element is drawn over the whole drawing area, allowing text - /// to overlap from one line to the next. - /// (Scintilla feature 2674) - /// - void SetPhasesDraw(PhasesDraw phases); - - /// Choose the quality level for text from the FontQuality enumeration. (Scintilla feature 2611) - void SetFontQuality(FontQuality fontQuality); - - /// Retrieve the quality level for text. (Scintilla feature 2612) - FontQuality GetFontQuality(); - - /// Scroll so that a display line is at the top of the display. (Scintilla feature 2613) - void SetFirstVisibleLine(int displayLine); - - /// Change the effect of pasting when there are multiple selections. (Scintilla feature 2614) - void SetMultiPaste(MultiPaste multiPaste); - - /// Retrieve the effect of pasting when there are multiple selections. (Scintilla feature 2615) - MultiPaste GetMultiPaste(); - - /// - /// Retrieve the value of a tag from a regular expression search. - /// Result is NUL-terminated. - /// (Scintilla feature 2616) - /// - unsafe string GetTag(int tagNumber); - - /// Join the lines in the target. (Scintilla feature 2288) - void LinesJoin(); - - /// - /// Split the lines in the target into lines that are less wide than pixelWidth - /// where possible. - /// (Scintilla feature 2289) - /// - void LinesSplit(int pixelWidth); - - /// Set one of the colours used as a chequerboard pattern in the fold margin (Scintilla feature 2290) - void SetFoldMarginColour(bool useSetting, Colour back); - - /// Set the other colour used as a chequerboard pattern in the fold margin (Scintilla feature 2291) - void SetFoldMarginHiColour(bool useSetting, Colour fore); - - /// Enable or disable accessibility. (Scintilla feature 2702) - void SetAccessibility(Accessibility accessibility); - - /// Report accessibility status. (Scintilla feature 2703) - Accessibility GetAccessibility(); - - /// Move caret down one line. (Scintilla feature 2300) - void LineDown(); - - /// Move caret down one line extending selection to new caret position. (Scintilla feature 2301) - void LineDownExtend(); - - /// Move caret up one line. (Scintilla feature 2302) - void LineUp(); - - /// Move caret up one line extending selection to new caret position. (Scintilla feature 2303) - void LineUpExtend(); - - /// Move caret left one character. (Scintilla feature 2304) - void CharLeft(); - - /// Move caret left one character extending selection to new caret position. (Scintilla feature 2305) - void CharLeftExtend(); - - /// Move caret right one character. (Scintilla feature 2306) - void CharRight(); - - /// Move caret right one character extending selection to new caret position. (Scintilla feature 2307) - void CharRightExtend(); - - /// Move caret left one word. (Scintilla feature 2308) - void WordLeft(); - - /// Move caret left one word extending selection to new caret position. (Scintilla feature 2309) - void WordLeftExtend(); - - /// Move caret right one word. (Scintilla feature 2310) - void WordRight(); - - /// Move caret right one word extending selection to new caret position. (Scintilla feature 2311) - void WordRightExtend(); - - /// Move caret to first position on line. (Scintilla feature 2312) - void Home(); - - /// Move caret to first position on line extending selection to new caret position. (Scintilla feature 2313) - void HomeExtend(); - - /// Move caret to last position on line. (Scintilla feature 2314) - void LineEnd(); - - /// Move caret to last position on line extending selection to new caret position. (Scintilla feature 2315) - void LineEndExtend(); - - /// Move caret to first position in document. (Scintilla feature 2316) - void DocumentStart(); - - /// Move caret to first position in document extending selection to new caret position. (Scintilla feature 2317) - void DocumentStartExtend(); - - /// Move caret to last position in document. (Scintilla feature 2318) - void DocumentEnd(); - - /// Move caret to last position in document extending selection to new caret position. (Scintilla feature 2319) - void DocumentEndExtend(); - - /// Move caret one page up. (Scintilla feature 2320) - void PageUp(); - - /// Move caret one page up extending selection to new caret position. (Scintilla feature 2321) - void PageUpExtend(); - - /// Move caret one page down. (Scintilla feature 2322) - void PageDown(); - - /// Move caret one page down extending selection to new caret position. (Scintilla feature 2323) - void PageDownExtend(); - - /// Switch from insert to overtype mode or the reverse. (Scintilla feature 2324) - void EditToggleOvertype(); - - /// Cancel any modes such as call tip or auto-completion list display. (Scintilla feature 2325) - void Cancel(); - - /// Delete the selection or if no selection, the character before the caret. (Scintilla feature 2326) - void DeleteBack(); - - /// - /// If selection is empty or all on one line replace the selection with a tab character. - /// If more than one line selected, indent the lines. - /// (Scintilla feature 2327) - /// - void Tab(); - - /// Dedent the selected lines. (Scintilla feature 2328) - void BackTab(); - - /// Insert a new line, may use a CRLF, CR or LF depending on EOL mode. (Scintilla feature 2329) - void NewLine(); - - /// Insert a Form Feed character. (Scintilla feature 2330) - void FormFeed(); - - /// - /// Move caret to before first visible character on line. - /// If already there move to first character on line. - /// (Scintilla feature 2331) - /// - void VCHome(); - - /// Like VCHome but extending selection to new caret position. (Scintilla feature 2332) - void VCHomeExtend(); - - /// Magnify the displayed text by increasing the sizes by 1 point. (Scintilla feature 2333) - void ZoomIn(); - - /// Make the displayed text smaller by decreasing the sizes by 1 point. (Scintilla feature 2334) - void ZoomOut(); - - /// Delete the word to the left of the caret. (Scintilla feature 2335) - void DelWordLeft(); - - /// Delete the word to the right of the caret. (Scintilla feature 2336) - void DelWordRight(); - - /// Delete the word to the right of the caret, but not the trailing non-word characters. (Scintilla feature 2518) - void DelWordRightEnd(); - - /// Cut the line containing the caret. (Scintilla feature 2337) - void LineCut(); - - /// Delete the line containing the caret. (Scintilla feature 2338) - void LineDelete(); - - /// Switch the current line with the previous. (Scintilla feature 2339) - void LineTranspose(); - - /// Reverse order of selected lines. (Scintilla feature 2354) - void LineReverse(); - - /// Duplicate the current line. (Scintilla feature 2404) - void LineDuplicate(); - - /// Transform the selection to lower case. (Scintilla feature 2340) - void LowerCase(); - - /// Transform the selection to upper case. (Scintilla feature 2341) - void UpperCase(); - - /// Scroll the document down, keeping the caret visible. (Scintilla feature 2342) - void LineScrollDown(); - - /// Scroll the document up, keeping the caret visible. (Scintilla feature 2343) - void LineScrollUp(); - - /// - /// Delete the selection or if no selection, the character before the caret. - /// Will not delete the character before at the start of a line. - /// (Scintilla feature 2344) - /// - void DeleteBackNotLine(); - - /// Move caret to first position on display line. (Scintilla feature 2345) - void HomeDisplay(); - - /// - /// Move caret to first position on display line extending selection to - /// new caret position. - /// (Scintilla feature 2346) - /// - void HomeDisplayExtend(); - - /// Move caret to last position on display line. (Scintilla feature 2347) - void LineEndDisplay(); - - /// - /// Move caret to last position on display line extending selection to new - /// caret position. - /// (Scintilla feature 2348) - /// - void LineEndDisplayExtend(); - - /// - /// Like Home but when word-wrap is enabled goes first to start of display line - /// HomeDisplay, then to start of document line Home. - /// (Scintilla feature 2349) - /// - void HomeWrap(); - - /// - /// Like HomeExtend but when word-wrap is enabled extends first to start of display line - /// HomeDisplayExtend, then to start of document line HomeExtend. - /// (Scintilla feature 2450) - /// - void HomeWrapExtend(); - - /// - /// Like LineEnd but when word-wrap is enabled goes first to end of display line - /// LineEndDisplay, then to start of document line LineEnd. - /// (Scintilla feature 2451) - /// - void LineEndWrap(); - - /// - /// Like LineEndExtend but when word-wrap is enabled extends first to end of display line - /// LineEndDisplayExtend, then to start of document line LineEndExtend. - /// (Scintilla feature 2452) - /// - void LineEndWrapExtend(); - - /// - /// Like VCHome but when word-wrap is enabled goes first to start of display line - /// VCHomeDisplay, then behaves like VCHome. - /// (Scintilla feature 2453) - /// - void VCHomeWrap(); - - /// - /// Like VCHomeExtend but when word-wrap is enabled extends first to start of display line - /// VCHomeDisplayExtend, then behaves like VCHomeExtend. - /// (Scintilla feature 2454) - /// - void VCHomeWrapExtend(); - - /// Copy the line containing the caret. (Scintilla feature 2455) - void LineCopy(); - - /// Move the caret inside current view if it's not there already. (Scintilla feature 2401) - void MoveCaretInsideView(); - - /// How many characters are on a line, including end of line characters? (Scintilla feature 2350) - int LineLength(int line); - - /// Highlight the characters at two positions. (Scintilla feature 2351) - void BraceHighlight(int posA, int posB); - - /// Use specified indicator to highlight matching braces instead of changing their style. (Scintilla feature 2498) - void BraceHighlightIndicator(bool useSetting, int indicator); - - /// Highlight the character at a position indicating there is no matching brace. (Scintilla feature 2352) - void BraceBadLight(int pos); - - /// Use specified indicator to highlight non matching brace instead of changing its style. (Scintilla feature 2499) - void BraceBadLightIndicator(bool useSetting, int indicator); - - /// - /// Find the position of a matching brace or INVALID_POSITION if no match. - /// The maxReStyle must be 0 for now. It may be defined in a future release. - /// (Scintilla feature 2353) - /// - int BraceMatch(int pos, int maxReStyle); - - /// Are the end of line characters visible? (Scintilla feature 2355) - bool GetViewEOL(); - - /// Make the end of line characters visible or invisible. (Scintilla feature 2356) - void SetViewEOL(bool visible); - - /// Retrieve a pointer to the document object. (Scintilla feature 2357) - IntPtr GetDocPointer(); - - /// Change the document object used. (Scintilla feature 2358) - void SetDocPointer(IntPtr doc); - - /// Set which document modification events are sent to the container. (Scintilla feature 2359) - void SetModEventMask(ModificationFlags eventMask); - - /// Retrieve the column number which text should be kept within. (Scintilla feature 2360) - int GetEdgeColumn(); - - /// - /// Set the column number of the edge. - /// If text goes past the edge then it is highlighted. - /// (Scintilla feature 2361) - /// - void SetEdgeColumn(int column); - - /// Retrieve the edge highlight mode. (Scintilla feature 2362) - EdgeVisualStyle GetEdgeMode(); - - /// - /// The edge may be displayed by a line (EDGE_LINE/EDGE_MULTILINE) or by highlighting text that - /// goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). - /// (Scintilla feature 2363) - /// - void SetEdgeMode(EdgeVisualStyle edgeMode); - - /// Retrieve the colour used in edge indication. (Scintilla feature 2364) - Colour GetEdgeColour(); - - /// Change the colour used in edge indication. (Scintilla feature 2365) - void SetEdgeColour(Colour edgeColour); - - /// Add a new vertical edge to the view. (Scintilla feature 2694) - void MultiEdgeAddLine(int column, Colour edgeColour); - - /// Clear all vertical edges. (Scintilla feature 2695) - void MultiEdgeClearAll(); - - /// Sets the current caret position to be the search anchor. (Scintilla feature 2366) - void SearchAnchor(); - - /// - /// Find some text starting at the search anchor. - /// Does not ensure the selection is visible. - /// (Scintilla feature 2367) - /// - unsafe int SearchNext(FindOption searchFlags, string text); - - /// - /// Find some text starting at the search anchor and moving backwards. - /// Does not ensure the selection is visible. - /// (Scintilla feature 2368) - /// - unsafe int SearchPrev(FindOption searchFlags, string text); - - /// Retrieves the number of lines completely visible. (Scintilla feature 2370) - int LinesOnScreen(); - - /// - /// Set whether a pop up menu is displayed automatically when the user presses - /// the wrong mouse button on certain areas. - /// (Scintilla feature 2371) - /// - void UsePopUp(PopUp popUpMode); - - /// Is the selection rectangular? The alternative is the more common stream selection. (Scintilla feature 2372) - bool SelectionIsRectangle(); - - /// - /// Set the zoom level. This number of points is added to the size of all fonts. - /// It may be positive to magnify or negative to reduce. - /// (Scintilla feature 2373) - /// - void SetZoom(int zoomInPoints); - - /// Retrieve the zoom level. (Scintilla feature 2374) - int GetZoom(); - - /// - /// Create a new document object. - /// Starts with reference count of 1 and not selected into editor. - /// (Scintilla feature 2375) - /// - IntPtr CreateDocument(int bytes, DocumentOption documentOptions); - - /// Extend life of document. (Scintilla feature 2376) - void AddRefDocument(IntPtr doc); - - /// Release a reference to the document, deleting document if it fades to black. (Scintilla feature 2377) - void ReleaseDocument(IntPtr doc); - - /// Get which document options are set. (Scintilla feature 2379) - DocumentOption GetDocumentOptions(); - - /// Get which document modification events are sent to the container. (Scintilla feature 2378) - ModificationFlags GetModEventMask(); - - /// Set whether command events are sent to the container. (Scintilla feature 2717) - void SetCommandEvents(bool commandEvents); - - /// Get whether command events are sent to the container. (Scintilla feature 2718) - bool GetCommandEvents(); - - /// Change internal focus flag. (Scintilla feature 2380) - void SetFocus(bool focus); - - /// Get internal focus flag. (Scintilla feature 2381) - bool GetFocus(); - - /// Change error status - 0 = OK. (Scintilla feature 2382) - void SetStatus(Status status); - - /// Get error status. (Scintilla feature 2383) - Status GetStatus(); - - /// Set whether the mouse is captured when its button is pressed. (Scintilla feature 2384) - void SetMouseDownCaptures(bool captures); - - /// Get whether mouse gets captured. (Scintilla feature 2385) - bool GetMouseDownCaptures(); - - /// Set whether the mouse wheel can be active outside the window. (Scintilla feature 2696) - void SetMouseWheelCaptures(bool captures); - - /// Get whether mouse wheel can be active outside the window. (Scintilla feature 2697) - bool GetMouseWheelCaptures(); - - /// Sets the cursor to one of the SC_CURSOR* values. (Scintilla feature 2386) - void SetCursor(CursorShape cursorType); - - /// Get cursor type. (Scintilla feature 2387) - CursorShape GetCursor(); - - /// - /// Change the way control characters are displayed: - /// If symbol is < 32, keep the drawn way, else, use the given character. - /// (Scintilla feature 2388) - /// - void SetControlCharSymbol(int symbol); - - /// Get the way control characters are displayed. (Scintilla feature 2389) - int GetControlCharSymbol(); - - /// Move to the previous change in capitalisation. (Scintilla feature 2390) - void WordPartLeft(); - - /// - /// Move to the previous change in capitalisation extending selection - /// to new caret position. - /// (Scintilla feature 2391) - /// - void WordPartLeftExtend(); - - /// Move to the change next in capitalisation. (Scintilla feature 2392) - void WordPartRight(); - - /// - /// Move to the next change in capitalisation extending selection - /// to new caret position. - /// (Scintilla feature 2393) - /// - void WordPartRightExtend(); - - /// - /// Set the way the display area is determined when a particular line - /// is to be moved to by Find, FindNext, GotoLine, etc. - /// (Scintilla feature 2394) - /// - void SetVisiblePolicy(VisiblePolicy visiblePolicy, int visibleSlop); - - /// Delete back from the current position to the start of the line. (Scintilla feature 2395) - void DelLineLeft(); - - /// Delete forwards from the current position to the end of the line. (Scintilla feature 2396) - void DelLineRight(); - - /// Set the xOffset (ie, horizontal scroll position). (Scintilla feature 2397) - void SetXOffset(int xOffset); - - /// Get the xOffset (ie, horizontal scroll position). (Scintilla feature 2398) - int GetXOffset(); - - /// Set the last x chosen value to be the caret x position. (Scintilla feature 2399) - void ChooseCaretX(); - - /// Set the focus to this Scintilla widget. (Scintilla feature 2400) - void GrabFocus(); - - /// - /// Set the way the caret is kept visible when going sideways. - /// The exclusion zone is given in pixels. - /// (Scintilla feature 2402) - /// - void SetXCaretPolicy(CaretPolicy caretPolicy, int caretSlop); - - /// - /// Set the way the line the caret is on is kept visible. - /// The exclusion zone is given in lines. - /// (Scintilla feature 2403) - /// - void SetYCaretPolicy(CaretPolicy caretPolicy, int caretSlop); - - /// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). (Scintilla feature 2406) - void SetPrintWrapMode(Wrap wrapMode); - - /// Is printing line wrapped? (Scintilla feature 2407) - Wrap GetPrintWrapMode(); - - /// Set a fore colour for active hotspots. (Scintilla feature 2410) - void SetHotspotActiveFore(bool useSetting, Colour fore); - - /// Get the fore colour for active hotspots. (Scintilla feature 2494) - Colour GetHotspotActiveFore(); - - /// Set a back colour for active hotspots. (Scintilla feature 2411) - void SetHotspotActiveBack(bool useSetting, Colour back); - - /// Get the back colour for active hotspots. (Scintilla feature 2495) - Colour GetHotspotActiveBack(); - - /// Enable / Disable underlining active hotspots. (Scintilla feature 2412) - void SetHotspotActiveUnderline(bool underline); - - /// Get whether underlining for active hotspots. (Scintilla feature 2496) - bool GetHotspotActiveUnderline(); - - /// Limit hotspots to single line so hotspots on two lines don't merge. (Scintilla feature 2421) - void SetHotspotSingleLine(bool singleLine); - - /// Get the HotspotSingleLine property (Scintilla feature 2497) - bool GetHotspotSingleLine(); - - /// Move caret down one paragraph (delimited by empty lines). (Scintilla feature 2413) - void ParaDown(); - - /// Extend selection down one paragraph (delimited by empty lines). (Scintilla feature 2414) - void ParaDownExtend(); - - /// Move caret up one paragraph (delimited by empty lines). (Scintilla feature 2415) - void ParaUp(); - - /// Extend selection up one paragraph (delimited by empty lines). (Scintilla feature 2416) - void ParaUpExtend(); - - /// - /// Given a valid document position, return the previous position taking code - /// page into account. Returns 0 if passed 0. - /// (Scintilla feature 2417) - /// - int PositionBefore(int pos); - - /// - /// Given a valid document position, return the next position taking code - /// page into account. Maximum value returned is the last position in the document. - /// (Scintilla feature 2418) - /// - int PositionAfter(int pos); - - /// - /// Given a valid document position, return a position that differs in a number - /// of characters. Returned value is always between 0 and last position in document. - /// (Scintilla feature 2670) - /// - int PositionRelative(int pos, int relative); - - /// - /// Given a valid document position, return a position that differs in a number - /// of UTF-16 code units. Returned value is always between 0 and last position in document. - /// The result may point half way (2 bytes) inside a non-BMP character. - /// (Scintilla feature 2716) - /// - int PositionRelativeCodeUnits(int pos, int relative); - - /// Copy a range of text to the clipboard. Positions are clipped into the document. (Scintilla feature 2419) - void CopyRange(int start, int end); - - /// Copy argument text to the clipboard. (Scintilla feature 2420) - unsafe void CopyText(int length, string text); - - /// - /// Set the selection mode to stream (SC_SEL_STREAM) or rectangular (SC_SEL_RECTANGLE/SC_SEL_THIN) or - /// by lines (SC_SEL_LINES). - /// (Scintilla feature 2422) - /// - void SetSelectionMode(SelectionMode selectionMode); - - /// Get the mode of the current selection. (Scintilla feature 2423) - SelectionMode GetSelectionMode(); - - /// Get whether or not regular caret moves will extend or reduce the selection. (Scintilla feature 2706) - bool GetMoveExtendsSelection(); - - /// Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2424) - int GetLineSelStartPosition(int line); - - /// Retrieve the position of the end of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2425) - int GetLineSelEndPosition(int line); - - /// Move caret down one line, extending rectangular selection to new caret position. (Scintilla feature 2426) - void LineDownRectExtend(); - - /// Move caret up one line, extending rectangular selection to new caret position. (Scintilla feature 2427) - void LineUpRectExtend(); - - /// Move caret left one character, extending rectangular selection to new caret position. (Scintilla feature 2428) - void CharLeftRectExtend(); - - /// Move caret right one character, extending rectangular selection to new caret position. (Scintilla feature 2429) - void CharRightRectExtend(); - - /// Move caret to first position on line, extending rectangular selection to new caret position. (Scintilla feature 2430) - void HomeRectExtend(); - - /// - /// Move caret to before first visible character on line. - /// If already there move to first character on line. - /// In either case, extend rectangular selection to new caret position. - /// (Scintilla feature 2431) - /// - void VCHomeRectExtend(); - - /// Move caret to last position on line, extending rectangular selection to new caret position. (Scintilla feature 2432) - void LineEndRectExtend(); - - /// Move caret one page up, extending rectangular selection to new caret position. (Scintilla feature 2433) - void PageUpRectExtend(); - - /// Move caret one page down, extending rectangular selection to new caret position. (Scintilla feature 2434) - void PageDownRectExtend(); - - /// Move caret to top of page, or one page up if already at top of page. (Scintilla feature 2435) - void StutteredPageUp(); - - /// Move caret to top of page, or one page up if already at top of page, extending selection to new caret position. (Scintilla feature 2436) - void StutteredPageUpExtend(); - - /// Move caret to bottom of page, or one page down if already at bottom of page. (Scintilla feature 2437) - void StutteredPageDown(); - - /// Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position. (Scintilla feature 2438) - void StutteredPageDownExtend(); - - /// Move caret left one word, position cursor at end of word. (Scintilla feature 2439) - void WordLeftEnd(); - - /// Move caret left one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2440) - void WordLeftEndExtend(); - - /// Move caret right one word, position cursor at end of word. (Scintilla feature 2441) - void WordRightEnd(); - - /// Move caret right one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2442) - void WordRightEndExtend(); - - /// - /// Set the set of characters making up whitespace for when moving or selecting by word. - /// Should be called after SetWordChars. - /// (Scintilla feature 2443) - /// - unsafe void SetWhitespaceChars(string characters); - - /// Get the set of characters making up whitespace for when moving or selecting by word. (Scintilla feature 2647) - unsafe string GetWhitespaceChars(); - - /// - /// Set the set of characters making up punctuation characters - /// Should be called after SetWordChars. - /// (Scintilla feature 2648) - /// - unsafe void SetPunctuationChars(string characters); - - /// Get the set of characters making up punctuation characters (Scintilla feature 2649) - unsafe string GetPunctuationChars(); - - /// Reset the set of characters for whitespace and word characters to the defaults. (Scintilla feature 2444) - void SetCharsDefault(); - - /// Get currently selected item position in the auto-completion list (Scintilla feature 2445) - int AutoCGetCurrent(); - - /// - /// Get currently selected item text in the auto-completion list - /// Returns the length of the item text - /// Result is NUL-terminated. - /// (Scintilla feature 2610) - /// - unsafe string AutoCGetCurrentText(); - - /// Set auto-completion case insensitive behaviour to either prefer case-sensitive matches or have no preference. (Scintilla feature 2634) - void AutoCSetCaseInsensitiveBehaviour(CaseInsensitiveBehaviour behaviour); - - /// Get auto-completion case insensitive behaviour. (Scintilla feature 2635) - CaseInsensitiveBehaviour AutoCGetCaseInsensitiveBehaviour(); - - /// Change the effect of autocompleting when there are multiple selections. (Scintilla feature 2636) - void AutoCSetMulti(MultiAutoComplete multi); - - /// Retrieve the effect of autocompleting when there are multiple selections. (Scintilla feature 2637) - MultiAutoComplete AutoCGetMulti(); - - /// Set the way autocompletion lists are ordered. (Scintilla feature 2660) - void AutoCSetOrder(Ordering order); - - /// Get the way autocompletion lists are ordered. (Scintilla feature 2661) - Ordering AutoCGetOrder(); - - /// Enlarge the document to a particular size of text bytes. (Scintilla feature 2446) - void Allocate(int bytes); - - /// - /// Returns the target converted to UTF8. - /// Return the length in bytes. - /// (Scintilla feature 2447) - /// - unsafe string TargetAsUTF8(); - - /// - /// Set the length of the utf8 argument for calling EncodedFromUTF8. - /// Set to -1 and the string will be measured to the first nul. - /// (Scintilla feature 2448) - /// - void SetLengthForEncode(int bytes); - - /// - /// Translates a UTF8 string into the document encoding. - /// Return the length of the result in bytes. - /// On error return 0. - /// (Scintilla feature 2449) - /// - unsafe string EncodedFromUTF8(string utf8); - - /// - /// Find the position of a column on a line taking into account tabs and - /// multi-byte characters. If beyond end of line, return line end position. - /// (Scintilla feature 2456) - /// - int FindColumn(int line, int column); - - /// Can the caret preferred x position only be changed by explicit movement commands? (Scintilla feature 2457) - CaretSticky GetCaretSticky(); - - /// Stop the caret preferred x position changing when the user types. (Scintilla feature 2458) - void SetCaretSticky(CaretSticky useCaretStickyBehaviour); - - /// Switch between sticky and non-sticky: meant to be bound to a key. (Scintilla feature 2459) - void ToggleCaretSticky(); - - /// Enable/Disable convert-on-paste for line endings (Scintilla feature 2467) - void SetPasteConvertEndings(bool convert); - - /// Get convert-on-paste setting (Scintilla feature 2468) - bool GetPasteConvertEndings(); - - /// Duplicate the selection. If selection empty duplicate the line containing the caret. (Scintilla feature 2469) - void SelectionDuplicate(); - - /// Set background alpha of the caret line. (Scintilla feature 2470) - void SetCaretLineBackAlpha(Alpha alpha); - - /// Get the background alpha of the caret line. (Scintilla feature 2471) - Alpha GetCaretLineBackAlpha(); - - /// Set the style of the caret to be drawn. (Scintilla feature 2512) - void SetCaretStyle(CaretStyle caretStyle); - - /// Returns the current style of the caret. (Scintilla feature 2513) - CaretStyle GetCaretStyle(); - - /// Set the indicator used for IndicatorFillRange and IndicatorClearRange (Scintilla feature 2500) - void SetIndicatorCurrent(int indicator); - - /// Get the current indicator (Scintilla feature 2501) - int GetIndicatorCurrent(); - - /// Set the value used for IndicatorFillRange (Scintilla feature 2502) - void SetIndicatorValue(int value); - - /// Get the current indicator value (Scintilla feature 2503) - int GetIndicatorValue(); - - /// Turn a indicator on over a range. (Scintilla feature 2504) - void IndicatorFillRange(int start, int lengthFill); - - /// Turn a indicator off over a range. (Scintilla feature 2505) - void IndicatorClearRange(int start, int lengthClear); - - /// Are any indicators present at pos? (Scintilla feature 2506) - int IndicatorAllOnFor(int pos); - - /// What value does a particular indicator have at a position? (Scintilla feature 2507) - int IndicatorValueAt(int indicator, int pos); - - /// Where does a particular indicator start? (Scintilla feature 2508) - int IndicatorStart(int indicator, int pos); - - /// Where does a particular indicator end? (Scintilla feature 2509) - int IndicatorEnd(int indicator, int pos); - - /// Set number of entries in position cache (Scintilla feature 2514) - void SetPositionCache(int size); - - /// How many entries are allocated to the position cache? (Scintilla feature 2515) - int GetPositionCache(); - - /// Copy the selection, if selection empty copy the line with the caret (Scintilla feature 2519) - void CopyAllowLine(); - - /// - /// Compact the document buffer and return a read-only pointer to the - /// characters in the document. - /// (Scintilla feature 2520) - /// - IntPtr GetCharacterPointer(); - - /// - /// Return a read-only pointer to a range of characters in the document. - /// May move the gap so that the range is contiguous, but will only move up - /// to lengthRange bytes. - /// (Scintilla feature 2643) - /// - IntPtr GetRangePointer(int start, int lengthRange); - - /// - /// Return a position which, to avoid performance costs, should not be within - /// the range of a call to GetRangePointer. - /// (Scintilla feature 2644) - /// - int GetGapPosition(); - - /// Set the alpha fill colour of the given indicator. (Scintilla feature 2523) - void IndicSetAlpha(int indicator, Alpha alpha); - - /// Get the alpha fill colour of the given indicator. (Scintilla feature 2524) - Alpha IndicGetAlpha(int indicator); - - /// Set the alpha outline colour of the given indicator. (Scintilla feature 2558) - void IndicSetOutlineAlpha(int indicator, Alpha alpha); - - /// Get the alpha outline colour of the given indicator. (Scintilla feature 2559) - Alpha IndicGetOutlineAlpha(int indicator); - - /// Set extra ascent for each line (Scintilla feature 2525) - void SetExtraAscent(int extraAscent); - - /// Get extra ascent for each line (Scintilla feature 2526) - int GetExtraAscent(); - - /// Set extra descent for each line (Scintilla feature 2527) - void SetExtraDescent(int extraDescent); - - /// Get extra descent for each line (Scintilla feature 2528) - int GetExtraDescent(); - - /// Which symbol was defined for markerNumber with MarkerDefine (Scintilla feature 2529) - int MarkerSymbolDefined(int markerNumber); - - /// Set the text in the text margin for a line (Scintilla feature 2530) - unsafe void MarginSetText(int line, string text); - - /// Get the text in the text margin for a line (Scintilla feature 2531) - unsafe string MarginGetText(int line); - - /// Set the style number for the text margin for a line (Scintilla feature 2532) - void MarginSetStyle(int line, int style); - - /// Get the style number for the text margin for a line (Scintilla feature 2533) - int MarginGetStyle(int line); - - /// Set the style in the text margin for a line (Scintilla feature 2534) - unsafe void MarginSetStyles(int line, string styles); - - /// Get the styles in the text margin for a line (Scintilla feature 2535) - unsafe string MarginGetStyles(int line); - - /// Clear the margin text on all lines (Scintilla feature 2536) - void MarginTextClearAll(); - - /// Get the start of the range of style numbers used for margin text (Scintilla feature 2537) - void MarginSetStyleOffset(int style); - - /// Get the start of the range of style numbers used for margin text (Scintilla feature 2538) - int MarginGetStyleOffset(); - - /// Set the margin options. (Scintilla feature 2539) - void SetMarginOptions(MarginOption marginOptions); - - /// Get the margin options. (Scintilla feature 2557) - MarginOption GetMarginOptions(); - - /// Set the annotation text for a line (Scintilla feature 2540) - unsafe void AnnotationSetText(int line, string text); - - /// Get the annotation text for a line (Scintilla feature 2541) - unsafe string AnnotationGetText(int line); - - /// Set the style number for the annotations for a line (Scintilla feature 2542) - void AnnotationSetStyle(int line, int style); - - /// Get the style number for the annotations for a line (Scintilla feature 2543) - int AnnotationGetStyle(int line); - - /// Set the annotation styles for a line (Scintilla feature 2544) - unsafe void AnnotationSetStyles(int line, string styles); - - /// Get the annotation styles for a line (Scintilla feature 2545) - unsafe string AnnotationGetStyles(int line); - - /// Get the number of annotation lines for a line (Scintilla feature 2546) - int AnnotationGetLines(int line); - - /// Clear the annotations from all lines (Scintilla feature 2547) - void AnnotationClearAll(); - - /// Set the visibility for the annotations for a view (Scintilla feature 2548) - void AnnotationSetVisible(AnnotationVisible visible); - - /// Get the visibility for the annotations for a view (Scintilla feature 2549) - AnnotationVisible AnnotationGetVisible(); - - /// Get the start of the range of style numbers used for annotations (Scintilla feature 2550) - void AnnotationSetStyleOffset(int style); - - /// Get the start of the range of style numbers used for annotations (Scintilla feature 2551) - int AnnotationGetStyleOffset(); - - /// Release all extended (>255) style numbers (Scintilla feature 2552) - void ReleaseAllExtendedStyles(); - - /// Allocate some extended (>255) style numbers and return the start of the range (Scintilla feature 2553) - int AllocateExtendedStyles(int numberStyles); - - /// Add a container action to the undo stack (Scintilla feature 2560) - void AddUndoAction(int token, UndoFlags flags); - - /// Find the position of a character from a point within the window. (Scintilla feature 2561) - int CharPositionFromPoint(int x, int y); - - /// - /// Find the position of a character from a point within the window. - /// Return INVALID_POSITION if not close to text. - /// (Scintilla feature 2562) - /// - int CharPositionFromPointClose(int x, int y); - - /// Set whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2668) - void SetMouseSelectionRectangularSwitch(bool mouseSelectionRectangularSwitch); - - /// Whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2669) - bool GetMouseSelectionRectangularSwitch(); - - /// Set whether multiple selections can be made (Scintilla feature 2563) - void SetMultipleSelection(bool multipleSelection); - - /// Whether multiple selections can be made (Scintilla feature 2564) - bool GetMultipleSelection(); - - /// Set whether typing can be performed into multiple selections (Scintilla feature 2565) - void SetAdditionalSelectionTyping(bool additionalSelectionTyping); - - /// Whether typing can be performed into multiple selections (Scintilla feature 2566) - bool GetAdditionalSelectionTyping(); - - /// Set whether additional carets will blink (Scintilla feature 2567) - void SetAdditionalCaretsBlink(bool additionalCaretsBlink); - - /// Whether additional carets will blink (Scintilla feature 2568) - bool GetAdditionalCaretsBlink(); - - /// Set whether additional carets are visible (Scintilla feature 2608) - void SetAdditionalCaretsVisible(bool additionalCaretsVisible); - - /// Whether additional carets are visible (Scintilla feature 2609) - bool GetAdditionalCaretsVisible(); - - /// How many selections are there? (Scintilla feature 2570) - int GetSelections(); - - /// Is every selected range empty? (Scintilla feature 2650) - bool GetSelectionEmpty(); - - /// Clear selections to a single empty stream selection (Scintilla feature 2571) - void ClearSelections(); - - /// Set a simple selection (Scintilla feature 2572) - void SetSelection(int caret, int anchor); - - /// Add a selection (Scintilla feature 2573) - void AddSelection(int caret, int anchor); - - /// Drop one selection (Scintilla feature 2671) - void DropSelectionN(int selection); - - /// Set the main selection (Scintilla feature 2574) - void SetMainSelection(int selection); - - /// Which selection is the main selection (Scintilla feature 2575) - int GetMainSelection(); - - /// Set the caret position of the nth selection. (Scintilla feature 2576) - void SetSelectionNCaret(int selection, int caret); - - /// Return the caret position of the nth selection. (Scintilla feature 2577) - int GetSelectionNCaret(int selection); - - /// Set the anchor position of the nth selection. (Scintilla feature 2578) - void SetSelectionNAnchor(int selection, int anchor); - - /// Return the anchor position of the nth selection. (Scintilla feature 2579) - int GetSelectionNAnchor(int selection); - - /// Set the virtual space of the caret of the nth selection. (Scintilla feature 2580) - void SetSelectionNCaretVirtualSpace(int selection, int space); - - /// Return the virtual space of the caret of the nth selection. (Scintilla feature 2581) - int GetSelectionNCaretVirtualSpace(int selection); - - /// Set the virtual space of the anchor of the nth selection. (Scintilla feature 2582) - void SetSelectionNAnchorVirtualSpace(int selection, int space); - - /// Return the virtual space of the anchor of the nth selection. (Scintilla feature 2583) - int GetSelectionNAnchorVirtualSpace(int selection); - - /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2584) - void SetSelectionNStart(int selection, int anchor); - - /// Returns the position at the start of the selection. (Scintilla feature 2585) - int GetSelectionNStart(int selection); - - /// Sets the position that ends the selection - this becomes the currentPosition. (Scintilla feature 2586) - void SetSelectionNEnd(int selection, int caret); - - /// Returns the position at the end of the selection. (Scintilla feature 2587) - int GetSelectionNEnd(int selection); - - /// Set the caret position of the rectangular selection. (Scintilla feature 2588) - void SetRectangularSelectionCaret(int caret); - - /// Return the caret position of the rectangular selection. (Scintilla feature 2589) - int GetRectangularSelectionCaret(); - - /// Set the anchor position of the rectangular selection. (Scintilla feature 2590) - void SetRectangularSelectionAnchor(int anchor); - - /// Return the anchor position of the rectangular selection. (Scintilla feature 2591) - int GetRectangularSelectionAnchor(); - - /// Set the virtual space of the caret of the rectangular selection. (Scintilla feature 2592) - void SetRectangularSelectionCaretVirtualSpace(int space); - - /// Return the virtual space of the caret of the rectangular selection. (Scintilla feature 2593) - int GetRectangularSelectionCaretVirtualSpace(); - - /// Set the virtual space of the anchor of the rectangular selection. (Scintilla feature 2594) - void SetRectangularSelectionAnchorVirtualSpace(int space); - - /// Return the virtual space of the anchor of the rectangular selection. (Scintilla feature 2595) - int GetRectangularSelectionAnchorVirtualSpace(); - - /// Set options for virtual space behaviour. (Scintilla feature 2596) - void SetVirtualSpaceOptions(VirtualSpace virtualSpaceOptions); - - /// Return options for virtual space behaviour. (Scintilla feature 2597) - VirtualSpace GetVirtualSpaceOptions(); - - /// - /// On GTK, allow selecting the modifier key to use for mouse-based - /// rectangular selection. Often the window manager requires Alt+Mouse Drag - /// for moving windows. - /// Valid values are SCMOD_CTRL(default), SCMOD_ALT, or SCMOD_SUPER. - /// (Scintilla feature 2598) - /// - void SetRectangularSelectionModifier(int modifier); - - /// Get the modifier key used for rectangular selection. (Scintilla feature 2599) - int GetRectangularSelectionModifier(); - - /// - /// Set the foreground colour of additional selections. - /// Must have previously called SetSelFore with non-zero first argument for this to have an effect. - /// (Scintilla feature 2600) - /// - void SetAdditionalSelFore(Colour fore); - - /// - /// Set the background colour of additional selections. - /// Must have previously called SetSelBack with non-zero first argument for this to have an effect. - /// (Scintilla feature 2601) - /// - void SetAdditionalSelBack(Colour back); - - /// Set the alpha of the selection. (Scintilla feature 2602) - void SetAdditionalSelAlpha(Alpha alpha); - - /// Get the alpha of the selection. (Scintilla feature 2603) - Alpha GetAdditionalSelAlpha(); - - /// Set the foreground colour of additional carets. (Scintilla feature 2604) - void SetAdditionalCaretFore(Colour fore); - - /// Get the foreground colour of additional carets. (Scintilla feature 2605) - Colour GetAdditionalCaretFore(); - - /// Set the main selection to the next selection. (Scintilla feature 2606) - void RotateSelection(); - - /// Swap that caret and anchor of the main selection. (Scintilla feature 2607) - void SwapMainAnchorCaret(); - - /// - /// Add the next occurrence of the main selection to the set of selections as main. - /// If the current selection is empty then select word around caret. - /// (Scintilla feature 2688) - /// - void MultipleSelectAddNext(); - - /// - /// Add each occurrence of the main selection in the target to the set of selections. - /// If the current selection is empty then select word around caret. - /// (Scintilla feature 2689) - /// - void MultipleSelectAddEach(); - - /// - /// Indicate that the internal state of a lexer has changed over a range and therefore - /// there may be a need to redraw. - /// (Scintilla feature 2617) - /// - int ChangeLexerState(int start, int end); - - /// - /// Find the next line at or after lineStart that is a contracted fold header line. - /// Return -1 when no more lines. - /// (Scintilla feature 2618) - /// - int ContractedFoldNext(int lineStart); - - /// Centre current line in window. (Scintilla feature 2619) - void VerticalCentreCaret(); - - /// Move the selected lines up one line, shifting the line above after the selection (Scintilla feature 2620) - void MoveSelectedLinesUp(); - - /// Move the selected lines down one line, shifting the line below before the selection (Scintilla feature 2621) - void MoveSelectedLinesDown(); - - /// Set the identifier reported as idFrom in notification messages. (Scintilla feature 2622) - void SetIdentifier(int identifier); - - /// Get the identifier. (Scintilla feature 2623) - int GetIdentifier(); - - /// Set the width for future RGBA image data. (Scintilla feature 2624) - void RGBAImageSetWidth(int width); - - /// Set the height for future RGBA image data. (Scintilla feature 2625) - void RGBAImageSetHeight(int height); - - /// Set the scale factor in percent for future RGBA image data. (Scintilla feature 2651) - void RGBAImageSetScale(int scalePercent); - - /// - /// Define a marker from RGBA data. - /// It has the width and height from RGBAImageSetWidth/Height - /// (Scintilla feature 2626) - /// - unsafe void MarkerDefineRGBAImage(int markerNumber, string pixels); - - /// - /// Register an RGBA image for use in autocompletion lists. - /// It has the width and height from RGBAImageSetWidth/Height - /// (Scintilla feature 2627) - /// - unsafe void RegisterRGBAImage(int type, string pixels); - - /// Scroll to start of document. (Scintilla feature 2628) - void ScrollToStart(); - - /// Scroll to end of document. (Scintilla feature 2629) - void ScrollToEnd(); - - /// Set the technology used. (Scintilla feature 2630) - void SetTechnology(Technology technology); - - /// Get the tech. (Scintilla feature 2631) - Technology GetTechnology(); - - /// Create an ILoader*. (Scintilla feature 2632) - IntPtr CreateLoader(int bytes, DocumentOption documentOptions); - - /// On OS X, show a find indicator. (Scintilla feature 2640) - void FindIndicatorShow(int start, int end); - - /// On OS X, flash a find indicator, then fade out. (Scintilla feature 2641) - void FindIndicatorFlash(int start, int end); - - /// On OS X, hide the find indicator. (Scintilla feature 2642) - void FindIndicatorHide(); - - /// - /// Move caret to before first visible character on display line. - /// If already there move to first character on display line. - /// (Scintilla feature 2652) - /// - void VCHomeDisplay(); - - /// Like VCHomeDisplay but extending selection to new caret position. (Scintilla feature 2653) - void VCHomeDisplayExtend(); - - /// Is the caret line always visible? (Scintilla feature 2654) - bool GetCaretLineVisibleAlways(); - - /// Sets the caret line to always visible. (Scintilla feature 2655) - void SetCaretLineVisibleAlways(bool alwaysVisible); - - /// Set the line end types that the application wants to use. May not be used if incompatible with lexer or encoding. (Scintilla feature 2656) - void SetLineEndTypesAllowed(LineEndType lineEndBitSet); - - /// Get the line end types currently allowed. (Scintilla feature 2657) - LineEndType GetLineEndTypesAllowed(); - - /// Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation. (Scintilla feature 2658) - LineEndType GetLineEndTypesActive(); - - /// Set the way a character is drawn. (Scintilla feature 2665) - unsafe void SetRepresentation(string encodedCharacter, string representation); - - /// - /// Set the way a character is drawn. - /// Result is NUL-terminated. - /// (Scintilla feature 2666) - /// - unsafe string GetRepresentation(string encodedCharacter); - - /// Remove a character representation. (Scintilla feature 2667) - unsafe void ClearRepresentation(string encodedCharacter); - - /// Start notifying the container of all key presses and commands. (Scintilla feature 3001) - void StartRecord(); - - /// Stop notifying the container of all key presses and commands. (Scintilla feature 3002) - void StopRecord(); - - /// Set the lexing language of the document. (Scintilla feature 4001) - void SetLexer(int lexer); - - /// Retrieve the lexing language of the document. (Scintilla feature 4002) - int GetLexer(); - - /// Colourise a segment of the document using the current lexing language. (Scintilla feature 4003) - void Colourise(int start, int end); - - /// Set up a value that may be used by a lexer for some optional feature. (Scintilla feature 4004) - unsafe void SetProperty(string key, string value); - - /// Set up the key words used by the lexer. (Scintilla feature 4005) - unsafe void SetKeyWords(int keyWordSet, string keyWords); - - /// Set the lexing language of the document based on string name. (Scintilla feature 4006) - unsafe void SetLexerLanguage(string language); - - /// Load a lexer library (dll / so). (Scintilla feature 4007) - unsafe void LoadLexerLibrary(string path); - - /// - /// Retrieve a "property" value previously set with SetProperty. - /// Result is NUL-terminated. - /// (Scintilla feature 4008) - /// - unsafe string GetProperty(string key); - - /// - /// Retrieve a "property" value previously set with SetProperty, - /// with "$()" variable replacement on returned buffer. - /// Result is NUL-terminated. - /// (Scintilla feature 4009) - /// - unsafe string GetPropertyExpanded(string key); - - /// - /// Retrieve a "property" value previously set with SetProperty, - /// interpreted as an int AFTER any "$()" variable replacement. - /// (Scintilla feature 4010) - /// - unsafe int GetPropertyInt(string key, int defaultValue); - - /// - /// Retrieve the name of the lexer. - /// Return the length of the text. - /// Result is NUL-terminated. - /// (Scintilla feature 4012) - /// - unsafe string GetLexerLanguage(); - - /// For private communication between an application and a known lexer. (Scintilla feature 4013) - IntPtr PrivateLexerCall(int operation, IntPtr pointer); - - /// - /// Retrieve a '\n' separated list of properties understood by the current lexer. - /// Result is NUL-terminated. - /// (Scintilla feature 4014) - /// - unsafe string PropertyNames(); - - /// Retrieve the type of a property. (Scintilla feature 4015) - unsafe TypeProperty PropertyType(string name); - - /// - /// Describe a property. - /// Result is NUL-terminated. - /// (Scintilla feature 4016) - /// - unsafe string DescribeProperty(string name); - - /// - /// Retrieve a '\n' separated list of descriptions of the keyword sets understood by the current lexer. - /// Result is NUL-terminated. - /// (Scintilla feature 4017) - /// - unsafe string DescribeKeyWordSets(); - - /// - /// Bit set of LineEndType enumertion for which line ends beyond the standard - /// LF, CR, and CRLF are supported by the lexer. - /// (Scintilla feature 4018) - /// - int GetLineEndTypesSupported(); - - /// Allocate a set of sub styles for a particular base style, returning start of range (Scintilla feature 4020) - int AllocateSubStyles(int styleBase, int numberStyles); - - /// The starting style number for the sub styles associated with a base style (Scintilla feature 4021) - int GetSubStylesStart(int styleBase); - - /// The number of sub styles associated with a base style (Scintilla feature 4022) - int GetSubStylesLength(int styleBase); - - /// For a sub style, return the base style, else return the argument. (Scintilla feature 4027) - int GetStyleFromSubStyle(int subStyle); - - /// For a secondary style, return the primary style, else return the argument. (Scintilla feature 4028) - int GetPrimaryStyleFromStyle(int style); - - /// Free allocated sub styles (Scintilla feature 4023) - void FreeSubStyles(); - - /// Set the identifiers that are shown in a particular style (Scintilla feature 4024) - unsafe void SetIdentifiers(int style, string identifiers); - - /// - /// Where styles are duplicated by a feature such as active/inactive code - /// return the distance between the two types. - /// (Scintilla feature 4025) - /// - int DistanceToSecondaryStyles(); - - /// - /// Get the set of base styles that can be extended with sub styles - /// Result is NUL-terminated. - /// (Scintilla feature 4026) - /// - unsafe string GetSubStyleBases(); - - /// Retrieve the number of named styles for the lexer. (Scintilla feature 4029) - int GetNamedStyles(); - - /// - /// Retrieve the name of a style. - /// Result is NUL-terminated. - /// (Scintilla feature 4030) - /// - unsafe string NameOfStyle(int style); - - /// - /// Retrieve a ' ' separated list of style tags like "literal quoted string". - /// Result is NUL-terminated. - /// (Scintilla feature 4031) - /// - unsafe string TagsOfStyle(int style); - - /// - /// Retrieve a description of a style. - /// Result is NUL-terminated. - /// (Scintilla feature 4032) - /// - unsafe string DescriptionOfStyle(int style); - - /// Retrieve bidirectional text display state. (Scintilla feature 2708) - Bidirectional GetBidirectional(); - - /// Set bidirectional text display state. (Scintilla feature 2709) - void SetBidirectional(Bidirectional bidirectional); - - /// Retrieve line character index state. (Scintilla feature 2710) - LineCharacterIndexType GetLineCharacterIndex(); - - /// Request line character index be created or its use count increased. (Scintilla feature 2711) - void AllocateLineCharacterIndex(LineCharacterIndexType lineCharacterIndex); - - /// Decrease use count of line character index and remove if 0. (Scintilla feature 2712) - void ReleaseLineCharacterIndex(LineCharacterIndexType lineCharacterIndex); - - /// Retrieve the document line containing a position measured in index units. (Scintilla feature 2713) - int LineFromIndexPosition(int pos, LineCharacterIndexType lineCharacterIndex); - - /// Retrieve the position measured in index units at the start of a document line. (Scintilla feature 2714) - int IndexPositionFromLine(int line, LineCharacterIndexType lineCharacterIndex); - - /// - /// Divide each styling byte into lexical class bits (default: 5) and indicator - /// bits (default: 3). If a lexer requires more than 32 lexical states, then this - /// is used to expand the possible states. - /// (Scintilla feature 2090) - /// - void SetStyleBits(int bits); - - /// Retrieve number of bits in style bytes used to hold the lexical state. (Scintilla feature 2091) - int GetStyleBits(); - - /// Retrieve the number of bits the current lexer needs for styling. (Scintilla feature 4011) - int GetStyleBitsNeeded(); - - /// - /// Deprecated in 3.5.5 - /// Always interpret keyboard input as Unicode - /// (Scintilla feature 2521) - /// - void SetKeysUnicode(bool keysUnicode); - - /// Are keys always interpreted as Unicode? (Scintilla feature 2522) - bool GetKeysUnicode(); - - /// Is drawing done in two phases with backgrounds drawn before foregrounds? (Scintilla feature 2283) - bool GetTwoPhaseDraw(); - - /// - /// In twoPhaseDraw mode, drawing is performed in two phases, first the background - /// and then the foreground. This avoids chopping off characters that overlap the next run. - /// (Scintilla feature 2284) - /// - void SetTwoPhaseDraw(bool twoPhase); - - /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; +using static Kbg.NppPluginNET.PluginInfrastructure.Win32; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + + /// + /// This it the plugin-writers primary interface to Notepad++/Scintilla. + /// It takes away all the complexity with command numbers and Int-pointer casting. + /// + /// See http://www.scintilla.org/ScintillaDoc.html for further details. + /// + public interface IScintillaGateway + { + int GetSelectionLength(); + void AppendTextAndMoveCursor(string text); + void InsertTextAndMoveCursor(string text); + void SelectCurrentLine(); + void ClearSelectionToCursor(); + + /// + /// Get the current line from the current position + /// + int GetCurrentLineNumber(); + + /// + /// Get the scroll information for the current Scintilla window. + /// + /// Arguments for the scroll information such as tracking + /// Which scroll bar information are you looking for + /// A ScrollInfo struct with information of the current scroll state + ScrollInfo GetScrollInfo(ScrollInfoMask mask = ScrollInfoMask.SIF_ALL, ScrollInfoBar scrollBar = ScrollInfoBar.SB_BOTH); + + /* ++Autogenerated -- start of section automatically generated from Scintilla.iface */ + /// Add text to the document at current position. (Scintilla feature 2001) + unsafe void AddText(int length, string text); + + /// Add array of cells to document. (Scintilla feature 2002) + unsafe void AddStyledText(int length, Cells c); + + /// Insert string at a position. (Scintilla feature 2003) + unsafe void InsertText(int pos, string text); + + /// Change the text that is being inserted in response to SC_MOD_INSERTCHECK (Scintilla feature 2672) + unsafe void ChangeInsertion(int length, string text); + + /// Delete all text in the document. (Scintilla feature 2004) + void ClearAll(); + + /// Delete a range of text in the document. (Scintilla feature 2645) + void DeleteRange(int start, int lengthDelete); + + /// Set all style bytes to 0, remove all folding information. (Scintilla feature 2005) + void ClearDocumentStyle(); + + /// Returns the number of bytes in the document. (Scintilla feature 2006) + int GetLength(); + + /// Returns the character byte at the position. (Scintilla feature 2007) + int GetCharAt(int pos); + + /// Returns the position of the caret. (Scintilla feature 2008) + int GetCurrentPos(); + + /// Returns the position of the opposite end of the selection to the caret. (Scintilla feature 2009) + int GetAnchor(); + + /// Returns the style byte at the position. (Scintilla feature 2010) + int GetStyleAt(int pos); + + /// Redoes the next action on the undo history. (Scintilla feature 2011) + void Redo(); + + /// + /// Choose between collecting actions into the undo + /// history and discarding them. + /// (Scintilla feature 2012) + /// + void SetUndoCollection(bool collectUndo); + + /// Select all the text in the document. (Scintilla feature 2013) + void SelectAll(); + + /// + /// Remember the current position in the undo history as the position + /// at which the document was saved. + /// (Scintilla feature 2014) + /// + void SetSavePoint(); + + /// + /// Retrieve a buffer of cells. + /// Returns the number of bytes in the buffer not including terminating NULs. + /// (Scintilla feature 2015) + /// + int GetStyledText(TextRange tr); + + /// Are there any redoable actions in the undo history? (Scintilla feature 2016) + bool CanRedo(); + + /// Retrieve the line number at which a particular marker is located. (Scintilla feature 2017) + int MarkerLineFromHandle(int markerHandle); + + /// Delete a marker. (Scintilla feature 2018) + void MarkerDeleteHandle(int markerHandle); + + /// Is undo history being collected? (Scintilla feature 2019) + bool GetUndoCollection(); + + /// + /// Are white space characters currently visible? + /// Returns one of SCWS_* constants. + /// (Scintilla feature 2020) + /// + WhiteSpace GetViewWS(); + + /// Make white space characters invisible, always visible or visible outside indentation. (Scintilla feature 2021) + void SetViewWS(WhiteSpace viewWS); + + /// + /// Retrieve the current tab draw mode. + /// Returns one of SCTD_* constants. + /// (Scintilla feature 2698) + /// + TabDrawMode GetTabDrawMode(); + + /// Set how tabs are drawn when visible. (Scintilla feature 2699) + void SetTabDrawMode(TabDrawMode tabDrawMode); + + /// Find the position from a point within the window. (Scintilla feature 2022) + int PositionFromPoint(int x, int y); + + /// + /// Find the position from a point within the window but return + /// INVALID_POSITION if not close to text. + /// (Scintilla feature 2023) + /// + int PositionFromPointClose(int x, int y); + + /// Set caret to start of a line and ensure it is visible. (Scintilla feature 2024) + void GotoLine(int line); + + /// Set caret to a position and ensure it is visible. (Scintilla feature 2025) + void GotoPos(int caret); + + /// + /// Set the selection anchor to a position. The anchor is the opposite + /// end of the selection from the caret. + /// (Scintilla feature 2026) + /// + void SetAnchor(int anchor); + + /// + /// Retrieve the text of the line containing the caret. + /// Returns the index of the caret on the line. + /// Result is NUL-terminated. + /// (Scintilla feature 2027) + /// + unsafe string GetCurLine(int length); + + /// Retrieve the position of the last correctly styled character. (Scintilla feature 2028) + int GetEndStyled(); + + /// Convert all line endings in the document to one mode. (Scintilla feature 2029) + void ConvertEOLs(EndOfLine eolMode); + + /// Retrieve the current end of line mode - one of CRLF, CR, or LF. (Scintilla feature 2030) + EndOfLine GetEOLMode(); + + /// Set the current end of line mode. (Scintilla feature 2031) + void SetEOLMode(EndOfLine eolMode); + + /// + /// Set the current styling position to start. + /// The unused parameter is no longer used and should be set to 0. + /// (Scintilla feature 2032) + /// + void StartStyling(int start, int unused); + + /// + /// Change style from current styling position for length characters to a style + /// and move the current styling position to after this newly styled segment. + /// (Scintilla feature 2033) + /// + void SetStyling(int length, int style); + + /// Is drawing done first into a buffer or direct to the screen? (Scintilla feature 2034) + bool GetBufferedDraw(); + + /// + /// If drawing is buffered then each line of text is drawn into a bitmap buffer + /// before drawing it to the screen to avoid flicker. + /// (Scintilla feature 2035) + /// + void SetBufferedDraw(bool buffered); + + /// Change the visible size of a tab to be a multiple of the width of a space character. (Scintilla feature 2036) + void SetTabWidth(int tabWidth); + + /// Retrieve the visible size of a tab. (Scintilla feature 2121) + int GetTabWidth(); + + /// Clear explicit tabstops on a line. (Scintilla feature 2675) + void ClearTabStops(int line); + + /// Add an explicit tab stop for a line. (Scintilla feature 2676) + void AddTabStop(int line, int x); + + /// Find the next explicit tab stop position on a line after a position. (Scintilla feature 2677) + int GetNextTabStop(int line, int x); + + /// + /// Set the code page used to interpret the bytes of the document as characters. + /// The SC_CP_UTF8 value can be used to enter Unicode mode. + /// (Scintilla feature 2037) + /// + void SetCodePage(int codePage); + + /// Is the IME displayed in a window or inline? (Scintilla feature 2678) + IMEInteraction GetIMEInteraction(); + + /// Choose to display the the IME in a winow or inline. (Scintilla feature 2679) + void SetIMEInteraction(IMEInteraction imeInteraction); + + /// Set the symbol used for a particular marker number. (Scintilla feature 2040) + void MarkerDefine(int markerNumber, MarkerSymbol markerSymbol); + + /// Set the foreground colour used for a particular marker number. (Scintilla feature 2041) + void MarkerSetFore(int markerNumber, Colour fore); + + /// Set the background colour used for a particular marker number. (Scintilla feature 2042) + void MarkerSetBack(int markerNumber, Colour back); + + /// Set the background colour used for a particular marker number when its folding block is selected. (Scintilla feature 2292) + void MarkerSetBackSelected(int markerNumber, Colour back); + + /// Enable/disable highlight for current folding bloc (smallest one that contains the caret) (Scintilla feature 2293) + void MarkerEnableHighlight(bool enabled); + + /// Add a marker to a line, returning an ID which can be used to find or delete the marker. (Scintilla feature 2043) + int MarkerAdd(int line, int markerNumber); + + /// Delete a marker from a line. (Scintilla feature 2044) + void MarkerDelete(int line, int markerNumber); + + /// Delete all markers with a particular number from all lines. (Scintilla feature 2045) + void MarkerDeleteAll(int markerNumber); + + /// Get a bit mask of all the markers set on a line. (Scintilla feature 2046) + int MarkerGet(int line); + + /// + /// Find the next line at or after lineStart that includes a marker in mask. + /// Return -1 when no more lines. + /// (Scintilla feature 2047) + /// + int MarkerNext(int lineStart, int markerMask); + + /// Find the previous line before lineStart that includes a marker in mask. (Scintilla feature 2048) + int MarkerPrevious(int lineStart, int markerMask); + + /// Define a marker from a pixmap. (Scintilla feature 2049) + unsafe void MarkerDefinePixmap(int markerNumber, string pixmap); + + /// Add a set of markers to a line. (Scintilla feature 2466) + void MarkerAddSet(int line, int markerSet); + + /// Set the alpha used for a marker that is drawn in the text area, not the margin. (Scintilla feature 2476) + void MarkerSetAlpha(int markerNumber, Alpha alpha); + + /// Set a margin to be either numeric or symbolic. (Scintilla feature 2240) + void SetMarginTypeN(int margin, MarginType marginType); + + /// Retrieve the type of a margin. (Scintilla feature 2241) + MarginType GetMarginTypeN(int margin); + + /// Set the width of a margin to a width expressed in pixels. (Scintilla feature 2242) + void SetMarginWidthN(int margin, int pixelWidth); + + /// Retrieve the width of a margin in pixels. (Scintilla feature 2243) + int GetMarginWidthN(int margin); + + /// Set a mask that determines which markers are displayed in a margin. (Scintilla feature 2244) + void SetMarginMaskN(int margin, int mask); + + /// Retrieve the marker mask of a margin. (Scintilla feature 2245) + int GetMarginMaskN(int margin); + + /// Make a margin sensitive or insensitive to mouse clicks. (Scintilla feature 2246) + void SetMarginSensitiveN(int margin, bool sensitive); + + /// Retrieve the mouse click sensitivity of a margin. (Scintilla feature 2247) + bool GetMarginSensitiveN(int margin); + + /// Set the cursor shown when the mouse is inside a margin. (Scintilla feature 2248) + void SetMarginCursorN(int margin, CursorShape cursor); + + /// Retrieve the cursor shown in a margin. (Scintilla feature 2249) + CursorShape GetMarginCursorN(int margin); + + /// Set the background colour of a margin. Only visible for SC_MARGIN_COLOUR. (Scintilla feature 2250) + void SetMarginBackN(int margin, Colour back); + + /// Retrieve the background colour of a margin (Scintilla feature 2251) + Colour GetMarginBackN(int margin); + + /// Allocate a non-standard number of margins. (Scintilla feature 2252) + void SetMargins(int margins); + + /// How many margins are there?. (Scintilla feature 2253) + int GetMargins(); + + /// Clear all the styles and make equivalent to the global default style. (Scintilla feature 2050) + void StyleClearAll(); + + /// Set the foreground colour of a style. (Scintilla feature 2051) + void StyleSetFore(int style, Colour fore); + + /// Set the background colour of a style. (Scintilla feature 2052) + void StyleSetBack(int style, Colour back); + + /// Set a style to be bold or not. (Scintilla feature 2053) + void StyleSetBold(int style, bool bold); + + /// Set a style to be italic or not. (Scintilla feature 2054) + void StyleSetItalic(int style, bool italic); + + /// Set the size of characters of a style. (Scintilla feature 2055) + void StyleSetSize(int style, int sizePoints); + + /// Set the font of a style. (Scintilla feature 2056) + unsafe void StyleSetFont(int style, string fontName); + + /// Set a style to have its end of line filled or not. (Scintilla feature 2057) + void StyleSetEOLFilled(int style, bool eolFilled); + + /// Reset the default style to its state at startup (Scintilla feature 2058) + void StyleResetDefault(); + + /// Set a style to be underlined or not. (Scintilla feature 2059) + void StyleSetUnderline(int style, bool underline); + + /// Get the foreground colour of a style. (Scintilla feature 2481) + Colour StyleGetFore(int style); + + /// Get the background colour of a style. (Scintilla feature 2482) + Colour StyleGetBack(int style); + + /// Get is a style bold or not. (Scintilla feature 2483) + bool StyleGetBold(int style); + + /// Get is a style italic or not. (Scintilla feature 2484) + bool StyleGetItalic(int style); + + /// Get the size of characters of a style. (Scintilla feature 2485) + int StyleGetSize(int style); + + /// + /// Get the font of a style. + /// Returns the length of the fontName + /// Result is NUL-terminated. + /// (Scintilla feature 2486) + /// + unsafe string StyleGetFont(int style); + + /// Get is a style to have its end of line filled or not. (Scintilla feature 2487) + bool StyleGetEOLFilled(int style); + + /// Get is a style underlined or not. (Scintilla feature 2488) + bool StyleGetUnderline(int style); + + /// Get is a style mixed case, or to force upper or lower case. (Scintilla feature 2489) + CaseVisible StyleGetCase(int style); + + /// Get the character get of the font in a style. (Scintilla feature 2490) + CharacterSet StyleGetCharacterSet(int style); + + /// Get is a style visible or not. (Scintilla feature 2491) + bool StyleGetVisible(int style); + + /// + /// Get is a style changeable or not (read only). + /// Experimental feature, currently buggy. + /// (Scintilla feature 2492) + /// + bool StyleGetChangeable(int style); + + /// Get is a style a hotspot or not. (Scintilla feature 2493) + bool StyleGetHotSpot(int style); + + /// Set a style to be mixed case, or to force upper or lower case. (Scintilla feature 2060) + void StyleSetCase(int style, CaseVisible caseVisible); + + /// Set the size of characters of a style. Size is in points multiplied by 100. (Scintilla feature 2061) + void StyleSetSizeFractional(int style, int sizeHundredthPoints); + + /// Get the size of characters of a style in points multiplied by 100 (Scintilla feature 2062) + int StyleGetSizeFractional(int style); + + /// Set the weight of characters of a style. (Scintilla feature 2063) + void StyleSetWeight(int style, FontWeight weight); + + /// Get the weight of characters of a style. (Scintilla feature 2064) + FontWeight StyleGetWeight(int style); + + /// Set the character set of the font in a style. (Scintilla feature 2066) + void StyleSetCharacterSet(int style, CharacterSet characterSet); + + /// Set a style to be a hotspot or not. (Scintilla feature 2409) + void StyleSetHotSpot(int style, bool hotspot); + + /// Set the foreground colour of the main and additional selections and whether to use this setting. (Scintilla feature 2067) + void SetSelFore(bool useSetting, Colour fore); + + /// Set the background colour of the main and additional selections and whether to use this setting. (Scintilla feature 2068) + void SetSelBack(bool useSetting, Colour back); + + /// Get the alpha of the selection. (Scintilla feature 2477) + Alpha GetSelAlpha(); + + /// Set the alpha of the selection. (Scintilla feature 2478) + void SetSelAlpha(Alpha alpha); + + /// Is the selection end of line filled? (Scintilla feature 2479) + bool GetSelEOLFilled(); + + /// Set the selection to have its end of line filled or not. (Scintilla feature 2480) + void SetSelEOLFilled(bool filled); + + /// Set the foreground colour of the caret. (Scintilla feature 2069) + void SetCaretFore(Colour fore); + + /// When key+modifier combination keyDefinition is pressed perform sciCommand. (Scintilla feature 2070) + void AssignCmdKey(KeyModifier keyDefinition, int sciCommand); + + /// When key+modifier combination keyDefinition is pressed do nothing. (Scintilla feature 2071) + void ClearCmdKey(KeyModifier keyDefinition); + + /// Drop all key mappings. (Scintilla feature 2072) + void ClearAllCmdKeys(); + + /// Set the styles for a segment of the document. (Scintilla feature 2073) + unsafe void SetStylingEx(int length, string styles); + + /// Set a style to be visible or not. (Scintilla feature 2074) + void StyleSetVisible(int style, bool visible); + + /// Get the time in milliseconds that the caret is on and off. (Scintilla feature 2075) + int GetCaretPeriod(); + + /// Get the time in milliseconds that the caret is on and off. 0 = steady on. (Scintilla feature 2076) + void SetCaretPeriod(int periodMilliseconds); + + /// + /// Set the set of characters making up words for when moving or selecting by word. + /// First sets defaults like SetCharsDefault. + /// (Scintilla feature 2077) + /// + unsafe void SetWordChars(string characters); + + /// + /// Get the set of characters making up words for when moving or selecting by word. + /// Returns the number of characters + /// (Scintilla feature 2646) + /// + unsafe string GetWordChars(); + + /// Set the number of characters to have directly indexed categories (Scintilla feature 2720) + void SetCharacterCategoryOptimization(int countCharacters); + + /// Get the number of characters to have directly indexed categories (Scintilla feature 2721) + int GetCharacterCategoryOptimization(); + + /// + /// Start a sequence of actions that is undone and redone as a unit. + /// May be nested. + /// (Scintilla feature 2078) + /// + void BeginUndoAction(); + + /// End a sequence of actions that is undone and redone as a unit. (Scintilla feature 2079) + void EndUndoAction(); + + /// Set an indicator to plain, squiggle or TT. (Scintilla feature 2080) + void IndicSetStyle(int indicator, IndicatorStyle indicatorStyle); + + /// Retrieve the style of an indicator. (Scintilla feature 2081) + IndicatorStyle IndicGetStyle(int indicator); + + /// Set the foreground colour of an indicator. (Scintilla feature 2082) + void IndicSetFore(int indicator, Colour fore); + + /// Retrieve the foreground colour of an indicator. (Scintilla feature 2083) + Colour IndicGetFore(int indicator); + + /// Set an indicator to draw under text or over(default). (Scintilla feature 2510) + void IndicSetUnder(int indicator, bool under); + + /// Retrieve whether indicator drawn under or over text. (Scintilla feature 2511) + bool IndicGetUnder(int indicator); + + /// Set a hover indicator to plain, squiggle or TT. (Scintilla feature 2680) + void IndicSetHoverStyle(int indicator, IndicatorStyle indicatorStyle); + + /// Retrieve the hover style of an indicator. (Scintilla feature 2681) + IndicatorStyle IndicGetHoverStyle(int indicator); + + /// Set the foreground hover colour of an indicator. (Scintilla feature 2682) + void IndicSetHoverFore(int indicator, Colour fore); + + /// Retrieve the foreground hover colour of an indicator. (Scintilla feature 2683) + Colour IndicGetHoverFore(int indicator); + + /// Set the attributes of an indicator. (Scintilla feature 2684) + void IndicSetFlags(int indicator, IndicFlag flags); + + /// Retrieve the attributes of an indicator. (Scintilla feature 2685) + IndicFlag IndicGetFlags(int indicator); + + /// Set the foreground colour of all whitespace and whether to use this setting. (Scintilla feature 2084) + void SetWhitespaceFore(bool useSetting, Colour fore); + + /// Set the background colour of all whitespace and whether to use this setting. (Scintilla feature 2085) + void SetWhitespaceBack(bool useSetting, Colour back); + + /// Set the size of the dots used to mark space characters. (Scintilla feature 2086) + void SetWhitespaceSize(int size); + + /// Get the size of the dots used to mark space characters. (Scintilla feature 2087) + int GetWhitespaceSize(); + + /// Used to hold extra styling information for each line. (Scintilla feature 2092) + void SetLineState(int line, int state); + + /// Retrieve the extra styling information for a line. (Scintilla feature 2093) + int GetLineState(int line); + + /// Retrieve the last line number that has line state. (Scintilla feature 2094) + int GetMaxLineState(); + + /// Is the background of the line containing the caret in a different colour? (Scintilla feature 2095) + bool GetCaretLineVisible(); + + /// Display the background of the line containing the caret in a different colour. (Scintilla feature 2096) + void SetCaretLineVisible(bool show); + + /// Get the colour of the background of the line containing the caret. (Scintilla feature 2097) + Colour GetCaretLineBack(); + + /// Set the colour of the background of the line containing the caret. (Scintilla feature 2098) + void SetCaretLineBack(Colour back); + + /// + /// Retrieve the caret line frame width. + /// Width = 0 means this option is disabled. + /// (Scintilla feature 2704) + /// + int GetCaretLineFrame(); + + /// + /// Display the caret line framed. + /// Set width != 0 to enable this option and width = 0 to disable it. + /// (Scintilla feature 2705) + /// + void SetCaretLineFrame(int width); + + /// + /// Set a style to be changeable or not (read only). + /// Experimental feature, currently buggy. + /// (Scintilla feature 2099) + /// + void StyleSetChangeable(int style, bool changeable); + + /// + /// Display a auto-completion list. + /// The lengthEntered parameter indicates how many characters before + /// the caret should be used to provide context. + /// (Scintilla feature 2100) + /// + unsafe void AutoCShow(int lengthEntered, string itemList); + + /// Remove the auto-completion list from the screen. (Scintilla feature 2101) + void AutoCCancel(); + + /// Is there an auto-completion list visible? (Scintilla feature 2102) + bool AutoCActive(); + + /// Retrieve the position of the caret when the auto-completion list was displayed. (Scintilla feature 2103) + int AutoCPosStart(); + + /// User has selected an item so remove the list and insert the selection. (Scintilla feature 2104) + void AutoCComplete(); + + /// Define a set of character that when typed cancel the auto-completion list. (Scintilla feature 2105) + unsafe void AutoCStops(string characterSet); + + /// + /// Change the separator character in the string setting up an auto-completion list. + /// Default is space but can be changed if items contain space. + /// (Scintilla feature 2106) + /// + void AutoCSetSeparator(int separatorCharacter); + + /// Retrieve the auto-completion list separator character. (Scintilla feature 2107) + int AutoCGetSeparator(); + + /// Select the item in the auto-completion list that starts with a string. (Scintilla feature 2108) + unsafe void AutoCSelect(string select); + + /// + /// Should the auto-completion list be cancelled if the user backspaces to a + /// position before where the box was created. + /// (Scintilla feature 2110) + /// + void AutoCSetCancelAtStart(bool cancel); + + /// Retrieve whether auto-completion cancelled by backspacing before start. (Scintilla feature 2111) + bool AutoCGetCancelAtStart(); + + /// + /// Define a set of characters that when typed will cause the autocompletion to + /// choose the selected item. + /// (Scintilla feature 2112) + /// + unsafe void AutoCSetFillUps(string characterSet); + + /// Should a single item auto-completion list automatically choose the item. (Scintilla feature 2113) + void AutoCSetChooseSingle(bool chooseSingle); + + /// Retrieve whether a single item auto-completion list automatically choose the item. (Scintilla feature 2114) + bool AutoCGetChooseSingle(); + + /// Set whether case is significant when performing auto-completion searches. (Scintilla feature 2115) + void AutoCSetIgnoreCase(bool ignoreCase); + + /// Retrieve state of ignore case flag. (Scintilla feature 2116) + bool AutoCGetIgnoreCase(); + + /// Display a list of strings and send notification when user chooses one. (Scintilla feature 2117) + unsafe void UserListShow(int listType, string itemList); + + /// Set whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2118) + void AutoCSetAutoHide(bool autoHide); + + /// Retrieve whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2119) + bool AutoCGetAutoHide(); + + /// + /// Set whether or not autocompletion deletes any word characters + /// after the inserted text upon completion. + /// (Scintilla feature 2270) + /// + void AutoCSetDropRestOfWord(bool dropRestOfWord); + + /// + /// Retrieve whether or not autocompletion deletes any word characters + /// after the inserted text upon completion. + /// (Scintilla feature 2271) + /// + bool AutoCGetDropRestOfWord(); + + /// Register an XPM image for use in autocompletion lists. (Scintilla feature 2405) + unsafe void RegisterImage(int type, string xpmData); + + /// Clear all the registered XPM images. (Scintilla feature 2408) + void ClearRegisteredImages(); + + /// Retrieve the auto-completion list type-separator character. (Scintilla feature 2285) + int AutoCGetTypeSeparator(); + + /// + /// Change the type-separator character in the string setting up an auto-completion list. + /// Default is '?' but can be changed if items contain '?'. + /// (Scintilla feature 2286) + /// + void AutoCSetTypeSeparator(int separatorCharacter); + + /// + /// Set the maximum width, in characters, of auto-completion and user lists. + /// Set to 0 to autosize to fit longest item, which is the default. + /// (Scintilla feature 2208) + /// + void AutoCSetMaxWidth(int characterCount); + + /// Get the maximum width, in characters, of auto-completion and user lists. (Scintilla feature 2209) + int AutoCGetMaxWidth(); + + /// + /// Set the maximum height, in rows, of auto-completion and user lists. + /// The default is 5 rows. + /// (Scintilla feature 2210) + /// + void AutoCSetMaxHeight(int rowCount); + + /// Set the maximum height, in rows, of auto-completion and user lists. (Scintilla feature 2211) + int AutoCGetMaxHeight(); + + /// Set the number of spaces used for one level of indentation. (Scintilla feature 2122) + void SetIndent(int indentSize); + + /// Retrieve indentation size. (Scintilla feature 2123) + int GetIndent(); + + /// + /// Indentation will only use space characters if useTabs is false, otherwise + /// it will use a combination of tabs and spaces. + /// (Scintilla feature 2124) + /// + void SetUseTabs(bool useTabs); + + /// Retrieve whether tabs will be used in indentation. (Scintilla feature 2125) + bool GetUseTabs(); + + /// Change the indentation of a line to a number of columns. (Scintilla feature 2126) + void SetLineIndentation(int line, int indentation); + + /// Retrieve the number of columns that a line is indented. (Scintilla feature 2127) + int GetLineIndentation(int line); + + /// Retrieve the position before the first non indentation character on a line. (Scintilla feature 2128) + int GetLineIndentPosition(int line); + + /// Retrieve the column number of a position, taking tab width into account. (Scintilla feature 2129) + int GetColumn(int pos); + + /// Count characters between two positions. (Scintilla feature 2633) + int CountCharacters(int start, int end); + + /// Count code units between two positions. (Scintilla feature 2715) + int CountCodeUnits(int start, int end); + + /// Show or hide the horizontal scroll bar. (Scintilla feature 2130) + void SetHScrollBar(bool visible); + + /// Is the horizontal scroll bar visible? (Scintilla feature 2131) + bool GetHScrollBar(); + + /// Show or hide indentation guides. (Scintilla feature 2132) + void SetIndentationGuides(IndentView indentView); + + /// Are the indentation guides visible? (Scintilla feature 2133) + IndentView GetIndentationGuides(); + + /// + /// Set the highlighted indentation guide column. + /// 0 = no highlighted guide. + /// (Scintilla feature 2134) + /// + void SetHighlightGuide(int column); + + /// Get the highlighted indentation guide column. (Scintilla feature 2135) + int GetHighlightGuide(); + + /// Get the position after the last visible characters on a line. (Scintilla feature 2136) + int GetLineEndPosition(int line); + + /// Get the code page used to interpret the bytes of the document as characters. (Scintilla feature 2137) + int GetCodePage(); + + /// Get the foreground colour of the caret. (Scintilla feature 2138) + Colour GetCaretFore(); + + /// In read-only mode? (Scintilla feature 2140) + bool GetReadOnly(); + + /// Sets the position of the caret. (Scintilla feature 2141) + void SetCurrentPos(int caret); + + /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2142) + void SetSelectionStart(int anchor); + + /// Returns the position at the start of the selection. (Scintilla feature 2143) + int GetSelectionStart(); + + /// Sets the position that ends the selection - this becomes the caret. (Scintilla feature 2144) + void SetSelectionEnd(int caret); + + /// Returns the position at the end of the selection. (Scintilla feature 2145) + int GetSelectionEnd(); + + /// Set caret to a position, while removing any existing selection. (Scintilla feature 2556) + void SetEmptySelection(int caret); + + /// Sets the print magnification added to the point size of each style for printing. (Scintilla feature 2146) + void SetPrintMagnification(int magnification); + + /// Returns the print magnification. (Scintilla feature 2147) + int GetPrintMagnification(); + + /// Modify colours when printing for clearer printed text. (Scintilla feature 2148) + void SetPrintColourMode(PrintOption mode); + + /// Returns the print colour mode. (Scintilla feature 2149) + PrintOption GetPrintColourMode(); + + /// Find some text in the document. (Scintilla feature 2150) + int FindText(FindOption searchFlags, TextToFind ft); + + /// Retrieve the display line at the top of the display. (Scintilla feature 2152) + int GetFirstVisibleLine(); + + /// + /// Retrieve the contents of a line. + /// Returns the length of the line. + /// (Scintilla feature 2153) + /// + unsafe string GetLine(int line); + + /// Returns the number of lines in the document. There is always at least one. (Scintilla feature 2154) + int GetLineCount(); + + /// Sets the size in pixels of the left margin. (Scintilla feature 2155) + void SetMarginLeft(int pixelWidth); + + /// Returns the size in pixels of the left margin. (Scintilla feature 2156) + int GetMarginLeft(); + + /// Sets the size in pixels of the right margin. (Scintilla feature 2157) + void SetMarginRight(int pixelWidth); + + /// Returns the size in pixels of the right margin. (Scintilla feature 2158) + int GetMarginRight(); + + /// Is the document different from when it was last saved? (Scintilla feature 2159) + bool GetModify(); + + /// Select a range of text. (Scintilla feature 2160) + void SetSel(int anchor, int caret); + + /// + /// Retrieve the selected text. + /// Return the length of the text. + /// Result is NUL-terminated. + /// (Scintilla feature 2161) + /// + unsafe string GetSelText(); + + /// + /// Retrieve a range of text. + /// Return the length of the text. + /// (Scintilla feature 2162) + /// + int GetTextRange(TextRange tr); + + /// Draw the selection either highlighted or in normal (non-highlighted) style. (Scintilla feature 2163) + void HideSelection(bool hide); + + /// Retrieve the x value of the point in the window where a position is displayed. (Scintilla feature 2164) + int PointXFromPosition(int pos); + + /// Retrieve the y value of the point in the window where a position is displayed. (Scintilla feature 2165) + int PointYFromPosition(int pos); + + /// Retrieve the line containing a position. (Scintilla feature 2166) + int LineFromPosition(int pos); + + /// Retrieve the position at the start of a line. (Scintilla feature 2167) + int PositionFromLine(int line); + + /// Scroll horizontally and vertically. (Scintilla feature 2168) + void LineScroll(int columns, int lines); + + /// Ensure the caret is visible. (Scintilla feature 2169) + void ScrollCaret(); + + /// + /// Scroll the argument positions and the range between them into view giving + /// priority to the primary position then the secondary position. + /// This may be used to make a search match visible. + /// (Scintilla feature 2569) + /// + void ScrollRange(int secondary, int primary); + + /// Replace the selected text with the argument text. (Scintilla feature 2170) + unsafe void ReplaceSel(string text); + + /// Set to read only or read write. (Scintilla feature 2171) + void SetReadOnly(bool readOnly); + + /// Null operation. (Scintilla feature 2172) + void Null(); + + /// Will a paste succeed? (Scintilla feature 2173) + bool CanPaste(); + + /// Are there any undoable actions in the undo history? (Scintilla feature 2174) + bool CanUndo(); + + /// Delete the undo history. (Scintilla feature 2175) + void EmptyUndoBuffer(); + + /// Undo one action in the undo history. (Scintilla feature 2176) + void Undo(); + + /// Cut the selection to the clipboard. (Scintilla feature 2177) + void Cut(); + + /// Copy the selection to the clipboard. (Scintilla feature 2178) + void Copy(); + + /// Paste the contents of the clipboard into the document replacing the selection. (Scintilla feature 2179) + void Paste(); + + /// Clear the selection. (Scintilla feature 2180) + void Clear(); + + /// Replace the contents of the document with the argument text. (Scintilla feature 2181) + unsafe void SetText(string text); + + /// + /// Retrieve all the text in the document. + /// Returns number of characters retrieved. + /// Result is NUL-terminated. + /// (Scintilla feature 2182) + /// + unsafe string GetText(int length); + + /// Retrieve the number of characters in the document. (Scintilla feature 2183) + int GetTextLength(); + + /// Retrieve a pointer to a function that processes messages for this Scintilla. (Scintilla feature 2184) + IntPtr GetDirectFunction(); + + /// + /// Retrieve a pointer value to use as the first argument when calling + /// the function returned by GetDirectFunction. + /// (Scintilla feature 2185) + /// + IntPtr GetDirectPointer(); + + /// Set to overtype (true) or insert mode. (Scintilla feature 2186) + void SetOvertype(bool overType); + + /// Returns true if overtype mode is active otherwise false is returned. (Scintilla feature 2187) + bool GetOvertype(); + + /// Set the width of the insert mode caret. (Scintilla feature 2188) + void SetCaretWidth(int pixelWidth); + + /// Returns the width of the insert mode caret. (Scintilla feature 2189) + int GetCaretWidth(); + + /// + /// Sets the position that starts the target which is used for updating the + /// document without affecting the scroll position. + /// (Scintilla feature 2190) + /// + void SetTargetStart(int start); + + /// Get the position that starts the target. (Scintilla feature 2191) + int GetTargetStart(); + + /// + /// Sets the position that ends the target which is used for updating the + /// document without affecting the scroll position. + /// (Scintilla feature 2192) + /// + void SetTargetEnd(int end); + + /// Get the position that ends the target. (Scintilla feature 2193) + int GetTargetEnd(); + + /// Sets both the start and end of the target in one call. (Scintilla feature 2686) + void SetTargetRange(int start, int end); + + /// Retrieve the text in the target. (Scintilla feature 2687) + unsafe string GetTargetText(); + + /// Make the target range start and end be the same as the selection range start and end. (Scintilla feature 2287) + void TargetFromSelection(); + + /// Sets the target to the whole document. (Scintilla feature 2690) + void TargetWholeDocument(); + + /// + /// Replace the target text with the argument text. + /// Text is counted so it can contain NULs. + /// Returns the length of the replacement text. + /// (Scintilla feature 2194) + /// + unsafe int ReplaceTarget(int length, string text); + + /// + /// Replace the target text with the argument text after \d processing. + /// Text is counted so it can contain NULs. + /// Looks for \d where d is between 1 and 9 and replaces these with the strings + /// matched in the last search operation which were surrounded by \( and \). + /// Returns the length of the replacement text including any change + /// caused by processing the \d patterns. + /// (Scintilla feature 2195) + /// + unsafe int ReplaceTargetRE(int length, string text); + + /// + /// Search for a counted string in the target and set the target to the found + /// range. Text is counted so it can contain NULs. + /// Returns start of found range or -1 for failure in which case target is not moved. + /// (Scintilla feature 2197) + /// + unsafe int SearchInTarget(int length, string text); + + /// Set the search flags used by SearchInTarget. (Scintilla feature 2198) + void SetSearchFlags(FindOption searchFlags); + + /// Get the search flags used by SearchInTarget. (Scintilla feature 2199) + FindOption GetSearchFlags(); + + /// Show a call tip containing a definition near position pos. (Scintilla feature 2200) + unsafe void CallTipShow(int pos, string definition); + + /// Remove the call tip from the screen. (Scintilla feature 2201) + void CallTipCancel(); + + /// Is there an active call tip? (Scintilla feature 2202) + bool CallTipActive(); + + /// Retrieve the position where the caret was before displaying the call tip. (Scintilla feature 2203) + int CallTipPosStart(); + + /// Set the start position in order to change when backspacing removes the calltip. (Scintilla feature 2214) + void CallTipSetPosStart(int posStart); + + /// Highlight a segment of the definition. (Scintilla feature 2204) + void CallTipSetHlt(int highlightStart, int highlightEnd); + + /// Set the background colour for the call tip. (Scintilla feature 2205) + void CallTipSetBack(Colour back); + + /// Set the foreground colour for the call tip. (Scintilla feature 2206) + void CallTipSetFore(Colour fore); + + /// Set the foreground colour for the highlighted part of the call tip. (Scintilla feature 2207) + void CallTipSetForeHlt(Colour fore); + + /// Enable use of STYLE_CALLTIP and set call tip tab size in pixels. (Scintilla feature 2212) + void CallTipUseStyle(int tabSize); + + /// Set position of calltip, above or below text. (Scintilla feature 2213) + void CallTipSetPosition(bool above); + + /// Find the display line of a document line taking hidden lines into account. (Scintilla feature 2220) + int VisibleFromDocLine(int docLine); + + /// Find the document line of a display line taking hidden lines into account. (Scintilla feature 2221) + int DocLineFromVisible(int displayLine); + + /// The number of display lines needed to wrap a document line (Scintilla feature 2235) + int WrapCount(int docLine); + + /// + /// Set the fold level of a line. + /// This encodes an integer level along with flags indicating whether the + /// line is a header and whether it is effectively white space. + /// (Scintilla feature 2222) + /// + void SetFoldLevel(int line, FoldLevel level); + + /// Retrieve the fold level of a line. (Scintilla feature 2223) + FoldLevel GetFoldLevel(int line); + + /// Find the last child line of a header line. (Scintilla feature 2224) + int GetLastChild(int line, FoldLevel level); + + /// Find the parent line of a child line. (Scintilla feature 2225) + int GetFoldParent(int line); + + /// Make a range of lines visible. (Scintilla feature 2226) + void ShowLines(int lineStart, int lineEnd); + + /// Make a range of lines invisible. (Scintilla feature 2227) + void HideLines(int lineStart, int lineEnd); + + /// Is a line visible? (Scintilla feature 2228) + bool GetLineVisible(int line); + + /// Are all lines visible? (Scintilla feature 2236) + bool GetAllLinesVisible(); + + /// Show the children of a header line. (Scintilla feature 2229) + void SetFoldExpanded(int line, bool expanded); + + /// Is a header line expanded? (Scintilla feature 2230) + bool GetFoldExpanded(int line); + + /// Switch a header line between expanded and contracted. (Scintilla feature 2231) + void ToggleFold(int line); + + /// Switch a header line between expanded and contracted and show some text after the line. (Scintilla feature 2700) + unsafe void ToggleFoldShowText(int line, string text); + + /// Set the style of fold display text. (Scintilla feature 2701) + void FoldDisplayTextSetStyle(FoldDisplayTextStyle style); + + /// Get the style of fold display text. (Scintilla feature 2707) + FoldDisplayTextStyle FoldDisplayTextGetStyle(); + + /// Set the default fold display text. (Scintilla feature 2722) + unsafe void SetDefaultFoldDisplayText(string text); + + /// Get the default fold display text. (Scintilla feature 2723) + unsafe string GetDefaultFoldDisplayText(); + + /// Expand or contract a fold header. (Scintilla feature 2237) + void FoldLine(int line, FoldAction action); + + /// Expand or contract a fold header and its children. (Scintilla feature 2238) + void FoldChildren(int line, FoldAction action); + + /// Expand a fold header and all children. Use the level argument instead of the line's current level. (Scintilla feature 2239) + void ExpandChildren(int line, FoldLevel level); + + /// Expand or contract all fold headers. (Scintilla feature 2662) + void FoldAll(FoldAction action); + + /// Ensure a particular line is visible by expanding any header line hiding it. (Scintilla feature 2232) + void EnsureVisible(int line); + + /// Set automatic folding behaviours. (Scintilla feature 2663) + void SetAutomaticFold(AutomaticFold automaticFold); + + /// Get automatic folding behaviours. (Scintilla feature 2664) + AutomaticFold GetAutomaticFold(); + + /// Set some style options for folding. (Scintilla feature 2233) + void SetFoldFlags(FoldFlag flags); + + /// + /// Ensure a particular line is visible by expanding any header line hiding it. + /// Use the currently set visibility policy to determine which range to display. + /// (Scintilla feature 2234) + /// + void EnsureVisibleEnforcePolicy(int line); + + /// Sets whether a tab pressed when caret is within indentation indents. (Scintilla feature 2260) + void SetTabIndents(bool tabIndents); + + /// Does a tab pressed when caret is within indentation indent? (Scintilla feature 2261) + bool GetTabIndents(); + + /// Sets whether a backspace pressed when caret is within indentation unindents. (Scintilla feature 2262) + void SetBackSpaceUnIndents(bool bsUnIndents); + + /// Does a backspace pressed when caret is within indentation unindent? (Scintilla feature 2263) + bool GetBackSpaceUnIndents(); + + /// Sets the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2264) + void SetMouseDwellTime(int periodMilliseconds); + + /// Retrieve the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2265) + int GetMouseDwellTime(); + + /// Get position of start of word. (Scintilla feature 2266) + int WordStartPosition(int pos, bool onlyWordCharacters); + + /// Get position of end of word. (Scintilla feature 2267) + int WordEndPosition(int pos, bool onlyWordCharacters); + + /// Is the range start..end considered a word? (Scintilla feature 2691) + bool IsRangeWord(int start, int end); + + /// Sets limits to idle styling. (Scintilla feature 2692) + void SetIdleStyling(IdleStyling idleStyling); + + /// Retrieve the limits to idle styling. (Scintilla feature 2693) + IdleStyling GetIdleStyling(); + + /// Sets whether text is word wrapped. (Scintilla feature 2268) + void SetWrapMode(Wrap wrapMode); + + /// Retrieve whether text is word wrapped. (Scintilla feature 2269) + Wrap GetWrapMode(); + + /// Set the display mode of visual flags for wrapped lines. (Scintilla feature 2460) + void SetWrapVisualFlags(WrapVisualFlag wrapVisualFlags); + + /// Retrive the display mode of visual flags for wrapped lines. (Scintilla feature 2461) + WrapVisualFlag GetWrapVisualFlags(); + + /// Set the location of visual flags for wrapped lines. (Scintilla feature 2462) + void SetWrapVisualFlagsLocation(WrapVisualLocation wrapVisualFlagsLocation); + + /// Retrive the location of visual flags for wrapped lines. (Scintilla feature 2463) + WrapVisualLocation GetWrapVisualFlagsLocation(); + + /// Set the start indent for wrapped lines. (Scintilla feature 2464) + void SetWrapStartIndent(int indent); + + /// Retrive the start indent for wrapped lines. (Scintilla feature 2465) + int GetWrapStartIndent(); + + /// Sets how wrapped sublines are placed. Default is fixed. (Scintilla feature 2472) + void SetWrapIndentMode(WrapIndentMode wrapIndentMode); + + /// Retrieve how wrapped sublines are placed. Default is fixed. (Scintilla feature 2473) + WrapIndentMode GetWrapIndentMode(); + + /// Sets the degree of caching of layout information. (Scintilla feature 2272) + void SetLayoutCache(LineCache cacheMode); + + /// Retrieve the degree of caching of layout information. (Scintilla feature 2273) + LineCache GetLayoutCache(); + + /// Sets the document width assumed for scrolling. (Scintilla feature 2274) + void SetScrollWidth(int pixelWidth); + + /// Retrieve the document width assumed for scrolling. (Scintilla feature 2275) + int GetScrollWidth(); + + /// Sets whether the maximum width line displayed is used to set scroll width. (Scintilla feature 2516) + void SetScrollWidthTracking(bool tracking); + + /// Retrieve whether the scroll width tracks wide lines. (Scintilla feature 2517) + bool GetScrollWidthTracking(); + + /// + /// Measure the pixel width of some text in a particular style. + /// NUL terminated text argument. + /// Does not handle tab or control characters. + /// (Scintilla feature 2276) + /// + unsafe int TextWidth(int style, string text); + + /// + /// Sets the scroll range so that maximum scroll position has + /// the last line at the bottom of the view (default). + /// Setting this to false allows scrolling one page below the last line. + /// (Scintilla feature 2277) + /// + void SetEndAtLastLine(bool endAtLastLine); + + /// + /// Retrieve whether the maximum scroll position has the last + /// line at the bottom of the view. + /// (Scintilla feature 2278) + /// + bool GetEndAtLastLine(); + + /// Retrieve the height of a particular line of text in pixels. (Scintilla feature 2279) + int TextHeight(int line); + + /// Show or hide the vertical scroll bar. (Scintilla feature 2280) + void SetVScrollBar(bool visible); + + /// Is the vertical scroll bar visible? (Scintilla feature 2281) + bool GetVScrollBar(); + + /// Append a string to the end of the document without changing the selection. (Scintilla feature 2282) + unsafe void AppendText(int length, string text); + + /// How many phases is drawing done in? (Scintilla feature 2673) + PhasesDraw GetPhasesDraw(); + + /// + /// In one phase draw, text is drawn in a series of rectangular blocks with no overlap. + /// In two phase draw, text is drawn in a series of lines allowing runs to overlap horizontally. + /// In multiple phase draw, each element is drawn over the whole drawing area, allowing text + /// to overlap from one line to the next. + /// (Scintilla feature 2674) + /// + void SetPhasesDraw(PhasesDraw phases); + + /// Choose the quality level for text from the FontQuality enumeration. (Scintilla feature 2611) + void SetFontQuality(FontQuality fontQuality); + + /// Retrieve the quality level for text. (Scintilla feature 2612) + FontQuality GetFontQuality(); + + /// Scroll so that a display line is at the top of the display. (Scintilla feature 2613) + void SetFirstVisibleLine(int displayLine); + + /// Change the effect of pasting when there are multiple selections. (Scintilla feature 2614) + void SetMultiPaste(MultiPaste multiPaste); + + /// Retrieve the effect of pasting when there are multiple selections. (Scintilla feature 2615) + MultiPaste GetMultiPaste(); + + /// + /// Retrieve the value of a tag from a regular expression search. + /// Result is NUL-terminated. + /// (Scintilla feature 2616) + /// + unsafe string GetTag(int tagNumber); + + /// Join the lines in the target. (Scintilla feature 2288) + void LinesJoin(); + + /// + /// Split the lines in the target into lines that are less wide than pixelWidth + /// where possible. + /// (Scintilla feature 2289) + /// + void LinesSplit(int pixelWidth); + + /// Set one of the colours used as a chequerboard pattern in the fold margin (Scintilla feature 2290) + void SetFoldMarginColour(bool useSetting, Colour back); + + /// Set the other colour used as a chequerboard pattern in the fold margin (Scintilla feature 2291) + void SetFoldMarginHiColour(bool useSetting, Colour fore); + + /// Enable or disable accessibility. (Scintilla feature 2702) + void SetAccessibility(Accessibility accessibility); + + /// Report accessibility status. (Scintilla feature 2703) + Accessibility GetAccessibility(); + + /// Move caret down one line. (Scintilla feature 2300) + void LineDown(); + + /// Move caret down one line extending selection to new caret position. (Scintilla feature 2301) + void LineDownExtend(); + + /// Move caret up one line. (Scintilla feature 2302) + void LineUp(); + + /// Move caret up one line extending selection to new caret position. (Scintilla feature 2303) + void LineUpExtend(); + + /// Move caret left one character. (Scintilla feature 2304) + void CharLeft(); + + /// Move caret left one character extending selection to new caret position. (Scintilla feature 2305) + void CharLeftExtend(); + + /// Move caret right one character. (Scintilla feature 2306) + void CharRight(); + + /// Move caret right one character extending selection to new caret position. (Scintilla feature 2307) + void CharRightExtend(); + + /// Move caret left one word. (Scintilla feature 2308) + void WordLeft(); + + /// Move caret left one word extending selection to new caret position. (Scintilla feature 2309) + void WordLeftExtend(); + + /// Move caret right one word. (Scintilla feature 2310) + void WordRight(); + + /// Move caret right one word extending selection to new caret position. (Scintilla feature 2311) + void WordRightExtend(); + + /// Move caret to first position on line. (Scintilla feature 2312) + void Home(); + + /// Move caret to first position on line extending selection to new caret position. (Scintilla feature 2313) + void HomeExtend(); + + /// Move caret to last position on line. (Scintilla feature 2314) + void LineEnd(); + + /// Move caret to last position on line extending selection to new caret position. (Scintilla feature 2315) + void LineEndExtend(); + + /// Move caret to first position in document. (Scintilla feature 2316) + void DocumentStart(); + + /// Move caret to first position in document extending selection to new caret position. (Scintilla feature 2317) + void DocumentStartExtend(); + + /// Move caret to last position in document. (Scintilla feature 2318) + void DocumentEnd(); + + /// Move caret to last position in document extending selection to new caret position. (Scintilla feature 2319) + void DocumentEndExtend(); + + /// Move caret one page up. (Scintilla feature 2320) + void PageUp(); + + /// Move caret one page up extending selection to new caret position. (Scintilla feature 2321) + void PageUpExtend(); + + /// Move caret one page down. (Scintilla feature 2322) + void PageDown(); + + /// Move caret one page down extending selection to new caret position. (Scintilla feature 2323) + void PageDownExtend(); + + /// Switch from insert to overtype mode or the reverse. (Scintilla feature 2324) + void EditToggleOvertype(); + + /// Cancel any modes such as call tip or auto-completion list display. (Scintilla feature 2325) + void Cancel(); + + /// Delete the selection or if no selection, the character before the caret. (Scintilla feature 2326) + void DeleteBack(); + + /// + /// If selection is empty or all on one line replace the selection with a tab character. + /// If more than one line selected, indent the lines. + /// (Scintilla feature 2327) + /// + void Tab(); + + /// Dedent the selected lines. (Scintilla feature 2328) + void BackTab(); + + /// Insert a new line, may use a CRLF, CR or LF depending on EOL mode. (Scintilla feature 2329) + void NewLine(); + + /// Insert a Form Feed character. (Scintilla feature 2330) + void FormFeed(); + + /// + /// Move caret to before first visible character on line. + /// If already there move to first character on line. + /// (Scintilla feature 2331) + /// + void VCHome(); + + /// Like VCHome but extending selection to new caret position. (Scintilla feature 2332) + void VCHomeExtend(); + + /// Magnify the displayed text by increasing the sizes by 1 point. (Scintilla feature 2333) + void ZoomIn(); + + /// Make the displayed text smaller by decreasing the sizes by 1 point. (Scintilla feature 2334) + void ZoomOut(); + + /// Delete the word to the left of the caret. (Scintilla feature 2335) + void DelWordLeft(); + + /// Delete the word to the right of the caret. (Scintilla feature 2336) + void DelWordRight(); + + /// Delete the word to the right of the caret, but not the trailing non-word characters. (Scintilla feature 2518) + void DelWordRightEnd(); + + /// Cut the line containing the caret. (Scintilla feature 2337) + void LineCut(); + + /// Delete the line containing the caret. (Scintilla feature 2338) + void LineDelete(); + + /// Switch the current line with the previous. (Scintilla feature 2339) + void LineTranspose(); + + /// Reverse order of selected lines. (Scintilla feature 2354) + void LineReverse(); + + /// Duplicate the current line. (Scintilla feature 2404) + void LineDuplicate(); + + /// Transform the selection to lower case. (Scintilla feature 2340) + void LowerCase(); + + /// Transform the selection to upper case. (Scintilla feature 2341) + void UpperCase(); + + /// Scroll the document down, keeping the caret visible. (Scintilla feature 2342) + void LineScrollDown(); + + /// Scroll the document up, keeping the caret visible. (Scintilla feature 2343) + void LineScrollUp(); + + /// + /// Delete the selection or if no selection, the character before the caret. + /// Will not delete the character before at the start of a line. + /// (Scintilla feature 2344) + /// + void DeleteBackNotLine(); + + /// Move caret to first position on display line. (Scintilla feature 2345) + void HomeDisplay(); + + /// + /// Move caret to first position on display line extending selection to + /// new caret position. + /// (Scintilla feature 2346) + /// + void HomeDisplayExtend(); + + /// Move caret to last position on display line. (Scintilla feature 2347) + void LineEndDisplay(); + + /// + /// Move caret to last position on display line extending selection to new + /// caret position. + /// (Scintilla feature 2348) + /// + void LineEndDisplayExtend(); + + /// + /// Like Home but when word-wrap is enabled goes first to start of display line + /// HomeDisplay, then to start of document line Home. + /// (Scintilla feature 2349) + /// + void HomeWrap(); + + /// + /// Like HomeExtend but when word-wrap is enabled extends first to start of display line + /// HomeDisplayExtend, then to start of document line HomeExtend. + /// (Scintilla feature 2450) + /// + void HomeWrapExtend(); + + /// + /// Like LineEnd but when word-wrap is enabled goes first to end of display line + /// LineEndDisplay, then to start of document line LineEnd. + /// (Scintilla feature 2451) + /// + void LineEndWrap(); + + /// + /// Like LineEndExtend but when word-wrap is enabled extends first to end of display line + /// LineEndDisplayExtend, then to start of document line LineEndExtend. + /// (Scintilla feature 2452) + /// + void LineEndWrapExtend(); + + /// + /// Like VCHome but when word-wrap is enabled goes first to start of display line + /// VCHomeDisplay, then behaves like VCHome. + /// (Scintilla feature 2453) + /// + void VCHomeWrap(); + + /// + /// Like VCHomeExtend but when word-wrap is enabled extends first to start of display line + /// VCHomeDisplayExtend, then behaves like VCHomeExtend. + /// (Scintilla feature 2454) + /// + void VCHomeWrapExtend(); + + /// Copy the line containing the caret. (Scintilla feature 2455) + void LineCopy(); + + /// Move the caret inside current view if it's not there already. (Scintilla feature 2401) + void MoveCaretInsideView(); + + /// How many characters are on a line, including end of line characters? (Scintilla feature 2350) + int LineLength(int line); + + /// Highlight the characters at two positions. (Scintilla feature 2351) + void BraceHighlight(int posA, int posB); + + /// Use specified indicator to highlight matching braces instead of changing their style. (Scintilla feature 2498) + void BraceHighlightIndicator(bool useSetting, int indicator); + + /// Highlight the character at a position indicating there is no matching brace. (Scintilla feature 2352) + void BraceBadLight(int pos); + + /// Use specified indicator to highlight non matching brace instead of changing its style. (Scintilla feature 2499) + void BraceBadLightIndicator(bool useSetting, int indicator); + + /// + /// Find the position of a matching brace or INVALID_POSITION if no match. + /// The maxReStyle must be 0 for now. It may be defined in a future release. + /// (Scintilla feature 2353) + /// + int BraceMatch(int pos, int maxReStyle); + + /// Are the end of line characters visible? (Scintilla feature 2355) + bool GetViewEOL(); + + /// Make the end of line characters visible or invisible. (Scintilla feature 2356) + void SetViewEOL(bool visible); + + /// Retrieve a pointer to the document object. (Scintilla feature 2357) + IntPtr GetDocPointer(); + + /// Change the document object used. (Scintilla feature 2358) + void SetDocPointer(IntPtr doc); + + /// Set which document modification events are sent to the container. (Scintilla feature 2359) + void SetModEventMask(ModificationFlags eventMask); + + /// Retrieve the column number which text should be kept within. (Scintilla feature 2360) + int GetEdgeColumn(); + + /// + /// Set the column number of the edge. + /// If text goes past the edge then it is highlighted. + /// (Scintilla feature 2361) + /// + void SetEdgeColumn(int column); + + /// Retrieve the edge highlight mode. (Scintilla feature 2362) + EdgeVisualStyle GetEdgeMode(); + + /// + /// The edge may be displayed by a line (EDGE_LINE/EDGE_MULTILINE) or by highlighting text that + /// goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). + /// (Scintilla feature 2363) + /// + void SetEdgeMode(EdgeVisualStyle edgeMode); + + /// Retrieve the colour used in edge indication. (Scintilla feature 2364) + Colour GetEdgeColour(); + + /// Change the colour used in edge indication. (Scintilla feature 2365) + void SetEdgeColour(Colour edgeColour); + + /// Add a new vertical edge to the view. (Scintilla feature 2694) + void MultiEdgeAddLine(int column, Colour edgeColour); + + /// Clear all vertical edges. (Scintilla feature 2695) + void MultiEdgeClearAll(); + + /// Sets the current caret position to be the search anchor. (Scintilla feature 2366) + void SearchAnchor(); + + /// + /// Find some text starting at the search anchor. + /// Does not ensure the selection is visible. + /// (Scintilla feature 2367) + /// + unsafe int SearchNext(FindOption searchFlags, string text); + + /// + /// Find some text starting at the search anchor and moving backwards. + /// Does not ensure the selection is visible. + /// (Scintilla feature 2368) + /// + unsafe int SearchPrev(FindOption searchFlags, string text); + + /// Retrieves the number of lines completely visible. (Scintilla feature 2370) + int LinesOnScreen(); + + /// + /// Set whether a pop up menu is displayed automatically when the user presses + /// the wrong mouse button on certain areas. + /// (Scintilla feature 2371) + /// + void UsePopUp(PopUp popUpMode); + + /// Is the selection rectangular? The alternative is the more common stream selection. (Scintilla feature 2372) + bool SelectionIsRectangle(); + + /// + /// Set the zoom level. This number of points is added to the size of all fonts. + /// It may be positive to magnify or negative to reduce. + /// (Scintilla feature 2373) + /// + void SetZoom(int zoomInPoints); + + /// Retrieve the zoom level. (Scintilla feature 2374) + int GetZoom(); + + /// + /// Create a new document object. + /// Starts with reference count of 1 and not selected into editor. + /// (Scintilla feature 2375) + /// + IntPtr CreateDocument(int bytes, DocumentOption documentOptions); + + /// Extend life of document. (Scintilla feature 2376) + void AddRefDocument(IntPtr doc); + + /// Release a reference to the document, deleting document if it fades to black. (Scintilla feature 2377) + void ReleaseDocument(IntPtr doc); + + /// Get which document options are set. (Scintilla feature 2379) + DocumentOption GetDocumentOptions(); + + /// Get which document modification events are sent to the container. (Scintilla feature 2378) + ModificationFlags GetModEventMask(); + + /// Set whether command events are sent to the container. (Scintilla feature 2717) + void SetCommandEvents(bool commandEvents); + + /// Get whether command events are sent to the container. (Scintilla feature 2718) + bool GetCommandEvents(); + + /// Change internal focus flag. (Scintilla feature 2380) + void SetFocus(bool focus); + + /// Get internal focus flag. (Scintilla feature 2381) + bool GetFocus(); + + /// Change error status - 0 = OK. (Scintilla feature 2382) + void SetStatus(Status status); + + /// Get error status. (Scintilla feature 2383) + Status GetStatus(); + + /// Set whether the mouse is captured when its button is pressed. (Scintilla feature 2384) + void SetMouseDownCaptures(bool captures); + + /// Get whether mouse gets captured. (Scintilla feature 2385) + bool GetMouseDownCaptures(); + + /// Set whether the mouse wheel can be active outside the window. (Scintilla feature 2696) + void SetMouseWheelCaptures(bool captures); + + /// Get whether mouse wheel can be active outside the window. (Scintilla feature 2697) + bool GetMouseWheelCaptures(); + + /// Sets the cursor to one of the SC_CURSOR* values. (Scintilla feature 2386) + void SetCursor(CursorShape cursorType); + + /// Get cursor type. (Scintilla feature 2387) + CursorShape GetCursor(); + + /// + /// Change the way control characters are displayed: + /// If symbol is < 32, keep the drawn way, else, use the given character. + /// (Scintilla feature 2388) + /// + void SetControlCharSymbol(int symbol); + + /// Get the way control characters are displayed. (Scintilla feature 2389) + int GetControlCharSymbol(); + + /// Move to the previous change in capitalisation. (Scintilla feature 2390) + void WordPartLeft(); + + /// + /// Move to the previous change in capitalisation extending selection + /// to new caret position. + /// (Scintilla feature 2391) + /// + void WordPartLeftExtend(); + + /// Move to the change next in capitalisation. (Scintilla feature 2392) + void WordPartRight(); + + /// + /// Move to the next change in capitalisation extending selection + /// to new caret position. + /// (Scintilla feature 2393) + /// + void WordPartRightExtend(); + + /// + /// Set the way the display area is determined when a particular line + /// is to be moved to by Find, FindNext, GotoLine, etc. + /// (Scintilla feature 2394) + /// + void SetVisiblePolicy(VisiblePolicy visiblePolicy, int visibleSlop); + + /// Delete back from the current position to the start of the line. (Scintilla feature 2395) + void DelLineLeft(); + + /// Delete forwards from the current position to the end of the line. (Scintilla feature 2396) + void DelLineRight(); + + /// Set the xOffset (ie, horizontal scroll position). (Scintilla feature 2397) + void SetXOffset(int xOffset); + + /// Get the xOffset (ie, horizontal scroll position). (Scintilla feature 2398) + int GetXOffset(); + + /// Set the last x chosen value to be the caret x position. (Scintilla feature 2399) + void ChooseCaretX(); + + /// Set the focus to this Scintilla widget. (Scintilla feature 2400) + void GrabFocus(); + + /// + /// Set the way the caret is kept visible when going sideways. + /// The exclusion zone is given in pixels. + /// (Scintilla feature 2402) + /// + void SetXCaretPolicy(CaretPolicy caretPolicy, int caretSlop); + + /// + /// Set the way the line the caret is on is kept visible. + /// The exclusion zone is given in lines. + /// (Scintilla feature 2403) + /// + void SetYCaretPolicy(CaretPolicy caretPolicy, int caretSlop); + + /// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). (Scintilla feature 2406) + void SetPrintWrapMode(Wrap wrapMode); + + /// Is printing line wrapped? (Scintilla feature 2407) + Wrap GetPrintWrapMode(); + + /// Set a fore colour for active hotspots. (Scintilla feature 2410) + void SetHotspotActiveFore(bool useSetting, Colour fore); + + /// Get the fore colour for active hotspots. (Scintilla feature 2494) + Colour GetHotspotActiveFore(); + + /// Set a back colour for active hotspots. (Scintilla feature 2411) + void SetHotspotActiveBack(bool useSetting, Colour back); + + /// Get the back colour for active hotspots. (Scintilla feature 2495) + Colour GetHotspotActiveBack(); + + /// Enable / Disable underlining active hotspots. (Scintilla feature 2412) + void SetHotspotActiveUnderline(bool underline); + + /// Get whether underlining for active hotspots. (Scintilla feature 2496) + bool GetHotspotActiveUnderline(); + + /// Limit hotspots to single line so hotspots on two lines don't merge. (Scintilla feature 2421) + void SetHotspotSingleLine(bool singleLine); + + /// Get the HotspotSingleLine property (Scintilla feature 2497) + bool GetHotspotSingleLine(); + + /// Move caret down one paragraph (delimited by empty lines). (Scintilla feature 2413) + void ParaDown(); + + /// Extend selection down one paragraph (delimited by empty lines). (Scintilla feature 2414) + void ParaDownExtend(); + + /// Move caret up one paragraph (delimited by empty lines). (Scintilla feature 2415) + void ParaUp(); + + /// Extend selection up one paragraph (delimited by empty lines). (Scintilla feature 2416) + void ParaUpExtend(); + + /// + /// Given a valid document position, return the previous position taking code + /// page into account. Returns 0 if passed 0. + /// (Scintilla feature 2417) + /// + int PositionBefore(int pos); + + /// + /// Given a valid document position, return the next position taking code + /// page into account. Maximum value returned is the last position in the document. + /// (Scintilla feature 2418) + /// + int PositionAfter(int pos); + + /// + /// Given a valid document position, return a position that differs in a number + /// of characters. Returned value is always between 0 and last position in document. + /// (Scintilla feature 2670) + /// + int PositionRelative(int pos, int relative); + + /// + /// Given a valid document position, return a position that differs in a number + /// of UTF-16 code units. Returned value is always between 0 and last position in document. + /// The result may point half way (2 bytes) inside a non-BMP character. + /// (Scintilla feature 2716) + /// + int PositionRelativeCodeUnits(int pos, int relative); + + /// Copy a range of text to the clipboard. Positions are clipped into the document. (Scintilla feature 2419) + void CopyRange(int start, int end); + + /// Copy argument text to the clipboard. (Scintilla feature 2420) + unsafe void CopyText(int length, string text); + + /// + /// Set the selection mode to stream (SC_SEL_STREAM) or rectangular (SC_SEL_RECTANGLE/SC_SEL_THIN) or + /// by lines (SC_SEL_LINES). + /// (Scintilla feature 2422) + /// + void SetSelectionMode(SelectionMode selectionMode); + + /// Get the mode of the current selection. (Scintilla feature 2423) + SelectionMode GetSelectionMode(); + + /// Get whether or not regular caret moves will extend or reduce the selection. (Scintilla feature 2706) + bool GetMoveExtendsSelection(); + + /// Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2424) + int GetLineSelStartPosition(int line); + + /// Retrieve the position of the end of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2425) + int GetLineSelEndPosition(int line); + + /// Move caret down one line, extending rectangular selection to new caret position. (Scintilla feature 2426) + void LineDownRectExtend(); + + /// Move caret up one line, extending rectangular selection to new caret position. (Scintilla feature 2427) + void LineUpRectExtend(); + + /// Move caret left one character, extending rectangular selection to new caret position. (Scintilla feature 2428) + void CharLeftRectExtend(); + + /// Move caret right one character, extending rectangular selection to new caret position. (Scintilla feature 2429) + void CharRightRectExtend(); + + /// Move caret to first position on line, extending rectangular selection to new caret position. (Scintilla feature 2430) + void HomeRectExtend(); + + /// + /// Move caret to before first visible character on line. + /// If already there move to first character on line. + /// In either case, extend rectangular selection to new caret position. + /// (Scintilla feature 2431) + /// + void VCHomeRectExtend(); + + /// Move caret to last position on line, extending rectangular selection to new caret position. (Scintilla feature 2432) + void LineEndRectExtend(); + + /// Move caret one page up, extending rectangular selection to new caret position. (Scintilla feature 2433) + void PageUpRectExtend(); + + /// Move caret one page down, extending rectangular selection to new caret position. (Scintilla feature 2434) + void PageDownRectExtend(); + + /// Move caret to top of page, or one page up if already at top of page. (Scintilla feature 2435) + void StutteredPageUp(); + + /// Move caret to top of page, or one page up if already at top of page, extending selection to new caret position. (Scintilla feature 2436) + void StutteredPageUpExtend(); + + /// Move caret to bottom of page, or one page down if already at bottom of page. (Scintilla feature 2437) + void StutteredPageDown(); + + /// Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position. (Scintilla feature 2438) + void StutteredPageDownExtend(); + + /// Move caret left one word, position cursor at end of word. (Scintilla feature 2439) + void WordLeftEnd(); + + /// Move caret left one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2440) + void WordLeftEndExtend(); + + /// Move caret right one word, position cursor at end of word. (Scintilla feature 2441) + void WordRightEnd(); + + /// Move caret right one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2442) + void WordRightEndExtend(); + + /// + /// Set the set of characters making up whitespace for when moving or selecting by word. + /// Should be called after SetWordChars. + /// (Scintilla feature 2443) + /// + unsafe void SetWhitespaceChars(string characters); + + /// Get the set of characters making up whitespace for when moving or selecting by word. (Scintilla feature 2647) + unsafe string GetWhitespaceChars(); + + /// + /// Set the set of characters making up punctuation characters + /// Should be called after SetWordChars. + /// (Scintilla feature 2648) + /// + unsafe void SetPunctuationChars(string characters); + + /// Get the set of characters making up punctuation characters (Scintilla feature 2649) + unsafe string GetPunctuationChars(); + + /// Reset the set of characters for whitespace and word characters to the defaults. (Scintilla feature 2444) + void SetCharsDefault(); + + /// Get currently selected item position in the auto-completion list (Scintilla feature 2445) + int AutoCGetCurrent(); + + /// + /// Get currently selected item text in the auto-completion list + /// Returns the length of the item text + /// Result is NUL-terminated. + /// (Scintilla feature 2610) + /// + unsafe string AutoCGetCurrentText(); + + /// Set auto-completion case insensitive behaviour to either prefer case-sensitive matches or have no preference. (Scintilla feature 2634) + void AutoCSetCaseInsensitiveBehaviour(CaseInsensitiveBehaviour behaviour); + + /// Get auto-completion case insensitive behaviour. (Scintilla feature 2635) + CaseInsensitiveBehaviour AutoCGetCaseInsensitiveBehaviour(); + + /// Change the effect of autocompleting when there are multiple selections. (Scintilla feature 2636) + void AutoCSetMulti(MultiAutoComplete multi); + + /// Retrieve the effect of autocompleting when there are multiple selections. (Scintilla feature 2637) + MultiAutoComplete AutoCGetMulti(); + + /// Set the way autocompletion lists are ordered. (Scintilla feature 2660) + void AutoCSetOrder(Ordering order); + + /// Get the way autocompletion lists are ordered. (Scintilla feature 2661) + Ordering AutoCGetOrder(); + + /// Enlarge the document to a particular size of text bytes. (Scintilla feature 2446) + void Allocate(int bytes); + + /// + /// Returns the target converted to UTF8. + /// Return the length in bytes. + /// (Scintilla feature 2447) + /// + unsafe string TargetAsUTF8(); + + /// + /// Set the length of the utf8 argument for calling EncodedFromUTF8. + /// Set to -1 and the string will be measured to the first nul. + /// (Scintilla feature 2448) + /// + void SetLengthForEncode(int bytes); + + /// + /// Translates a UTF8 string into the document encoding. + /// Return the length of the result in bytes. + /// On error return 0. + /// (Scintilla feature 2449) + /// + unsafe string EncodedFromUTF8(string utf8); + + /// + /// Find the position of a column on a line taking into account tabs and + /// multi-byte characters. If beyond end of line, return line end position. + /// (Scintilla feature 2456) + /// + int FindColumn(int line, int column); + + /// Can the caret preferred x position only be changed by explicit movement commands? (Scintilla feature 2457) + CaretSticky GetCaretSticky(); + + /// Stop the caret preferred x position changing when the user types. (Scintilla feature 2458) + void SetCaretSticky(CaretSticky useCaretStickyBehaviour); + + /// Switch between sticky and non-sticky: meant to be bound to a key. (Scintilla feature 2459) + void ToggleCaretSticky(); + + /// Enable/Disable convert-on-paste for line endings (Scintilla feature 2467) + void SetPasteConvertEndings(bool convert); + + /// Get convert-on-paste setting (Scintilla feature 2468) + bool GetPasteConvertEndings(); + + /// Duplicate the selection. If selection empty duplicate the line containing the caret. (Scintilla feature 2469) + void SelectionDuplicate(); + + /// Set background alpha of the caret line. (Scintilla feature 2470) + void SetCaretLineBackAlpha(Alpha alpha); + + /// Get the background alpha of the caret line. (Scintilla feature 2471) + Alpha GetCaretLineBackAlpha(); + + /// Set the style of the caret to be drawn. (Scintilla feature 2512) + void SetCaretStyle(CaretStyle caretStyle); + + /// Returns the current style of the caret. (Scintilla feature 2513) + CaretStyle GetCaretStyle(); + + /// Set the indicator used for IndicatorFillRange and IndicatorClearRange (Scintilla feature 2500) + void SetIndicatorCurrent(int indicator); + + /// Get the current indicator (Scintilla feature 2501) + int GetIndicatorCurrent(); + + /// Set the value used for IndicatorFillRange (Scintilla feature 2502) + void SetIndicatorValue(int value); + + /// Get the current indicator value (Scintilla feature 2503) + int GetIndicatorValue(); + + /// Turn a indicator on over a range. (Scintilla feature 2504) + void IndicatorFillRange(int start, int lengthFill); + + /// Turn a indicator off over a range. (Scintilla feature 2505) + void IndicatorClearRange(int start, int lengthClear); + + /// Are any indicators present at pos? (Scintilla feature 2506) + int IndicatorAllOnFor(int pos); + + /// What value does a particular indicator have at a position? (Scintilla feature 2507) + int IndicatorValueAt(int indicator, int pos); + + /// Where does a particular indicator start? (Scintilla feature 2508) + int IndicatorStart(int indicator, int pos); + + /// Where does a particular indicator end? (Scintilla feature 2509) + int IndicatorEnd(int indicator, int pos); + + /// Set number of entries in position cache (Scintilla feature 2514) + void SetPositionCache(int size); + + /// How many entries are allocated to the position cache? (Scintilla feature 2515) + int GetPositionCache(); + + /// Copy the selection, if selection empty copy the line with the caret (Scintilla feature 2519) + void CopyAllowLine(); + + /// + /// Compact the document buffer and return a read-only pointer to the + /// characters in the document. + /// (Scintilla feature 2520) + /// + IntPtr GetCharacterPointer(); + + /// + /// Return a read-only pointer to a range of characters in the document. + /// May move the gap so that the range is contiguous, but will only move up + /// to lengthRange bytes. + /// (Scintilla feature 2643) + /// + IntPtr GetRangePointer(int start, int lengthRange); + + /// + /// Return a position which, to avoid performance costs, should not be within + /// the range of a call to GetRangePointer. + /// (Scintilla feature 2644) + /// + int GetGapPosition(); + + /// Set the alpha fill colour of the given indicator. (Scintilla feature 2523) + void IndicSetAlpha(int indicator, Alpha alpha); + + /// Get the alpha fill colour of the given indicator. (Scintilla feature 2524) + Alpha IndicGetAlpha(int indicator); + + /// Set the alpha outline colour of the given indicator. (Scintilla feature 2558) + void IndicSetOutlineAlpha(int indicator, Alpha alpha); + + /// Get the alpha outline colour of the given indicator. (Scintilla feature 2559) + Alpha IndicGetOutlineAlpha(int indicator); + + /// Set extra ascent for each line (Scintilla feature 2525) + void SetExtraAscent(int extraAscent); + + /// Get extra ascent for each line (Scintilla feature 2526) + int GetExtraAscent(); + + /// Set extra descent for each line (Scintilla feature 2527) + void SetExtraDescent(int extraDescent); + + /// Get extra descent for each line (Scintilla feature 2528) + int GetExtraDescent(); + + /// Which symbol was defined for markerNumber with MarkerDefine (Scintilla feature 2529) + int MarkerSymbolDefined(int markerNumber); + + /// Set the text in the text margin for a line (Scintilla feature 2530) + unsafe void MarginSetText(int line, string text); + + /// Get the text in the text margin for a line (Scintilla feature 2531) + unsafe string MarginGetText(int line); + + /// Set the style number for the text margin for a line (Scintilla feature 2532) + void MarginSetStyle(int line, int style); + + /// Get the style number for the text margin for a line (Scintilla feature 2533) + int MarginGetStyle(int line); + + /// Set the style in the text margin for a line (Scintilla feature 2534) + unsafe void MarginSetStyles(int line, string styles); + + /// Get the styles in the text margin for a line (Scintilla feature 2535) + unsafe string MarginGetStyles(int line); + + /// Clear the margin text on all lines (Scintilla feature 2536) + void MarginTextClearAll(); + + /// Get the start of the range of style numbers used for margin text (Scintilla feature 2537) + void MarginSetStyleOffset(int style); + + /// Get the start of the range of style numbers used for margin text (Scintilla feature 2538) + int MarginGetStyleOffset(); + + /// Set the margin options. (Scintilla feature 2539) + void SetMarginOptions(MarginOption marginOptions); + + /// Get the margin options. (Scintilla feature 2557) + MarginOption GetMarginOptions(); + + /// Set the annotation text for a line (Scintilla feature 2540) + unsafe void AnnotationSetText(int line, string text); + + /// Get the annotation text for a line (Scintilla feature 2541) + unsafe string AnnotationGetText(int line); + + /// Set the style number for the annotations for a line (Scintilla feature 2542) + void AnnotationSetStyle(int line, int style); + + /// Get the style number for the annotations for a line (Scintilla feature 2543) + int AnnotationGetStyle(int line); + + /// Set the annotation styles for a line (Scintilla feature 2544) + unsafe void AnnotationSetStyles(int line, string styles); + + /// Get the annotation styles for a line (Scintilla feature 2545) + unsafe string AnnotationGetStyles(int line); + + /// Get the number of annotation lines for a line (Scintilla feature 2546) + int AnnotationGetLines(int line); + + /// Clear the annotations from all lines (Scintilla feature 2547) + void AnnotationClearAll(); + + /// Set the visibility for the annotations for a view (Scintilla feature 2548) + void AnnotationSetVisible(AnnotationVisible visible); + + /// Get the visibility for the annotations for a view (Scintilla feature 2549) + AnnotationVisible AnnotationGetVisible(); + + /// Get the start of the range of style numbers used for annotations (Scintilla feature 2550) + void AnnotationSetStyleOffset(int style); + + /// Get the start of the range of style numbers used for annotations (Scintilla feature 2551) + int AnnotationGetStyleOffset(); + + /// Release all extended (>255) style numbers (Scintilla feature 2552) + void ReleaseAllExtendedStyles(); + + /// Allocate some extended (>255) style numbers and return the start of the range (Scintilla feature 2553) + int AllocateExtendedStyles(int numberStyles); + + /// Add a container action to the undo stack (Scintilla feature 2560) + void AddUndoAction(int token, UndoFlags flags); + + /// Find the position of a character from a point within the window. (Scintilla feature 2561) + int CharPositionFromPoint(int x, int y); + + /// + /// Find the position of a character from a point within the window. + /// Return INVALID_POSITION if not close to text. + /// (Scintilla feature 2562) + /// + int CharPositionFromPointClose(int x, int y); + + /// Set whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2668) + void SetMouseSelectionRectangularSwitch(bool mouseSelectionRectangularSwitch); + + /// Whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2669) + bool GetMouseSelectionRectangularSwitch(); + + /// Set whether multiple selections can be made (Scintilla feature 2563) + void SetMultipleSelection(bool multipleSelection); + + /// Whether multiple selections can be made (Scintilla feature 2564) + bool GetMultipleSelection(); + + /// Set whether typing can be performed into multiple selections (Scintilla feature 2565) + void SetAdditionalSelectionTyping(bool additionalSelectionTyping); + + /// Whether typing can be performed into multiple selections (Scintilla feature 2566) + bool GetAdditionalSelectionTyping(); + + /// Set whether additional carets will blink (Scintilla feature 2567) + void SetAdditionalCaretsBlink(bool additionalCaretsBlink); + + /// Whether additional carets will blink (Scintilla feature 2568) + bool GetAdditionalCaretsBlink(); + + /// Set whether additional carets are visible (Scintilla feature 2608) + void SetAdditionalCaretsVisible(bool additionalCaretsVisible); + + /// Whether additional carets are visible (Scintilla feature 2609) + bool GetAdditionalCaretsVisible(); + + /// How many selections are there? (Scintilla feature 2570) + int GetSelections(); + + /// Is every selected range empty? (Scintilla feature 2650) + bool GetSelectionEmpty(); + + /// Clear selections to a single empty stream selection (Scintilla feature 2571) + void ClearSelections(); + + /// Set a simple selection (Scintilla feature 2572) + void SetSelection(int caret, int anchor); + + /// Add a selection (Scintilla feature 2573) + void AddSelection(int caret, int anchor); + + /// Drop one selection (Scintilla feature 2671) + void DropSelectionN(int selection); + + /// Set the main selection (Scintilla feature 2574) + void SetMainSelection(int selection); + + /// Which selection is the main selection (Scintilla feature 2575) + int GetMainSelection(); + + /// Set the caret position of the nth selection. (Scintilla feature 2576) + void SetSelectionNCaret(int selection, int caret); + + /// Return the caret position of the nth selection. (Scintilla feature 2577) + int GetSelectionNCaret(int selection); + + /// Set the anchor position of the nth selection. (Scintilla feature 2578) + void SetSelectionNAnchor(int selection, int anchor); + + /// Return the anchor position of the nth selection. (Scintilla feature 2579) + int GetSelectionNAnchor(int selection); + + /// Set the virtual space of the caret of the nth selection. (Scintilla feature 2580) + void SetSelectionNCaretVirtualSpace(int selection, int space); + + /// Return the virtual space of the caret of the nth selection. (Scintilla feature 2581) + int GetSelectionNCaretVirtualSpace(int selection); + + /// Set the virtual space of the anchor of the nth selection. (Scintilla feature 2582) + void SetSelectionNAnchorVirtualSpace(int selection, int space); + + /// Return the virtual space of the anchor of the nth selection. (Scintilla feature 2583) + int GetSelectionNAnchorVirtualSpace(int selection); + + /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2584) + void SetSelectionNStart(int selection, int anchor); + + /// Returns the position at the start of the selection. (Scintilla feature 2585) + int GetSelectionNStart(int selection); + + /// Sets the position that ends the selection - this becomes the currentPosition. (Scintilla feature 2586) + void SetSelectionNEnd(int selection, int caret); + + /// Returns the position at the end of the selection. (Scintilla feature 2587) + int GetSelectionNEnd(int selection); + + /// Set the caret position of the rectangular selection. (Scintilla feature 2588) + void SetRectangularSelectionCaret(int caret); + + /// Return the caret position of the rectangular selection. (Scintilla feature 2589) + int GetRectangularSelectionCaret(); + + /// Set the anchor position of the rectangular selection. (Scintilla feature 2590) + void SetRectangularSelectionAnchor(int anchor); + + /// Return the anchor position of the rectangular selection. (Scintilla feature 2591) + int GetRectangularSelectionAnchor(); + + /// Set the virtual space of the caret of the rectangular selection. (Scintilla feature 2592) + void SetRectangularSelectionCaretVirtualSpace(int space); + + /// Return the virtual space of the caret of the rectangular selection. (Scintilla feature 2593) + int GetRectangularSelectionCaretVirtualSpace(); + + /// Set the virtual space of the anchor of the rectangular selection. (Scintilla feature 2594) + void SetRectangularSelectionAnchorVirtualSpace(int space); + + /// Return the virtual space of the anchor of the rectangular selection. (Scintilla feature 2595) + int GetRectangularSelectionAnchorVirtualSpace(); + + /// Set options for virtual space behaviour. (Scintilla feature 2596) + void SetVirtualSpaceOptions(VirtualSpace virtualSpaceOptions); + + /// Return options for virtual space behaviour. (Scintilla feature 2597) + VirtualSpace GetVirtualSpaceOptions(); + + /// + /// On GTK, allow selecting the modifier key to use for mouse-based + /// rectangular selection. Often the window manager requires Alt+Mouse Drag + /// for moving windows. + /// Valid values are SCMOD_CTRL(default), SCMOD_ALT, or SCMOD_SUPER. + /// (Scintilla feature 2598) + /// + void SetRectangularSelectionModifier(int modifier); + + /// Get the modifier key used for rectangular selection. (Scintilla feature 2599) + int GetRectangularSelectionModifier(); + + /// + /// Set the foreground colour of additional selections. + /// Must have previously called SetSelFore with non-zero first argument for this to have an effect. + /// (Scintilla feature 2600) + /// + void SetAdditionalSelFore(Colour fore); + + /// + /// Set the background colour of additional selections. + /// Must have previously called SetSelBack with non-zero first argument for this to have an effect. + /// (Scintilla feature 2601) + /// + void SetAdditionalSelBack(Colour back); + + /// Set the alpha of the selection. (Scintilla feature 2602) + void SetAdditionalSelAlpha(Alpha alpha); + + /// Get the alpha of the selection. (Scintilla feature 2603) + Alpha GetAdditionalSelAlpha(); + + /// Set the foreground colour of additional carets. (Scintilla feature 2604) + void SetAdditionalCaretFore(Colour fore); + + /// Get the foreground colour of additional carets. (Scintilla feature 2605) + Colour GetAdditionalCaretFore(); + + /// Set the main selection to the next selection. (Scintilla feature 2606) + void RotateSelection(); + + /// Swap that caret and anchor of the main selection. (Scintilla feature 2607) + void SwapMainAnchorCaret(); + + /// + /// Add the next occurrence of the main selection to the set of selections as main. + /// If the current selection is empty then select word around caret. + /// (Scintilla feature 2688) + /// + void MultipleSelectAddNext(); + + /// + /// Add each occurrence of the main selection in the target to the set of selections. + /// If the current selection is empty then select word around caret. + /// (Scintilla feature 2689) + /// + void MultipleSelectAddEach(); + + /// + /// Indicate that the internal state of a lexer has changed over a range and therefore + /// there may be a need to redraw. + /// (Scintilla feature 2617) + /// + int ChangeLexerState(int start, int end); + + /// + /// Find the next line at or after lineStart that is a contracted fold header line. + /// Return -1 when no more lines. + /// (Scintilla feature 2618) + /// + int ContractedFoldNext(int lineStart); + + /// Centre current line in window. (Scintilla feature 2619) + void VerticalCentreCaret(); + + /// Move the selected lines up one line, shifting the line above after the selection (Scintilla feature 2620) + void MoveSelectedLinesUp(); + + /// Move the selected lines down one line, shifting the line below before the selection (Scintilla feature 2621) + void MoveSelectedLinesDown(); + + /// Set the identifier reported as idFrom in notification messages. (Scintilla feature 2622) + void SetIdentifier(int identifier); + + /// Get the identifier. (Scintilla feature 2623) + int GetIdentifier(); + + /// Set the width for future RGBA image data. (Scintilla feature 2624) + void RGBAImageSetWidth(int width); + + /// Set the height for future RGBA image data. (Scintilla feature 2625) + void RGBAImageSetHeight(int height); + + /// Set the scale factor in percent for future RGBA image data. (Scintilla feature 2651) + void RGBAImageSetScale(int scalePercent); + + /// + /// Define a marker from RGBA data. + /// It has the width and height from RGBAImageSetWidth/Height + /// (Scintilla feature 2626) + /// + unsafe void MarkerDefineRGBAImage(int markerNumber, string pixels); + + /// + /// Register an RGBA image for use in autocompletion lists. + /// It has the width and height from RGBAImageSetWidth/Height + /// (Scintilla feature 2627) + /// + unsafe void RegisterRGBAImage(int type, string pixels); + + /// Scroll to start of document. (Scintilla feature 2628) + void ScrollToStart(); + + /// Scroll to end of document. (Scintilla feature 2629) + void ScrollToEnd(); + + /// Set the technology used. (Scintilla feature 2630) + void SetTechnology(Technology technology); + + /// Get the tech. (Scintilla feature 2631) + Technology GetTechnology(); + + /// Create an ILoader*. (Scintilla feature 2632) + IntPtr CreateLoader(int bytes, DocumentOption documentOptions); + + /// On OS X, show a find indicator. (Scintilla feature 2640) + void FindIndicatorShow(int start, int end); + + /// On OS X, flash a find indicator, then fade out. (Scintilla feature 2641) + void FindIndicatorFlash(int start, int end); + + /// On OS X, hide the find indicator. (Scintilla feature 2642) + void FindIndicatorHide(); + + /// + /// Move caret to before first visible character on display line. + /// If already there move to first character on display line. + /// (Scintilla feature 2652) + /// + void VCHomeDisplay(); + + /// Like VCHomeDisplay but extending selection to new caret position. (Scintilla feature 2653) + void VCHomeDisplayExtend(); + + /// Is the caret line always visible? (Scintilla feature 2654) + bool GetCaretLineVisibleAlways(); + + /// Sets the caret line to always visible. (Scintilla feature 2655) + void SetCaretLineVisibleAlways(bool alwaysVisible); + + /// Set the line end types that the application wants to use. May not be used if incompatible with lexer or encoding. (Scintilla feature 2656) + void SetLineEndTypesAllowed(LineEndType lineEndBitSet); + + /// Get the line end types currently allowed. (Scintilla feature 2657) + LineEndType GetLineEndTypesAllowed(); + + /// Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation. (Scintilla feature 2658) + LineEndType GetLineEndTypesActive(); + + /// Set the way a character is drawn. (Scintilla feature 2665) + unsafe void SetRepresentation(string encodedCharacter, string representation); + + /// + /// Set the way a character is drawn. + /// Result is NUL-terminated. + /// (Scintilla feature 2666) + /// + unsafe string GetRepresentation(string encodedCharacter); + + /// Remove a character representation. (Scintilla feature 2667) + unsafe void ClearRepresentation(string encodedCharacter); + + /// Start notifying the container of all key presses and commands. (Scintilla feature 3001) + void StartRecord(); + + /// Stop notifying the container of all key presses and commands. (Scintilla feature 3002) + void StopRecord(); + + /// Set the lexing language of the document. (Scintilla feature 4001) + void SetLexer(int lexer); + + /// Retrieve the lexing language of the document. (Scintilla feature 4002) + int GetLexer(); + + /// Colourise a segment of the document using the current lexing language. (Scintilla feature 4003) + void Colourise(int start, int end); + + /// Set up a value that may be used by a lexer for some optional feature. (Scintilla feature 4004) + unsafe void SetProperty(string key, string value); + + /// Set up the key words used by the lexer. (Scintilla feature 4005) + unsafe void SetKeyWords(int keyWordSet, string keyWords); + + /// Set the lexing language of the document based on string name. (Scintilla feature 4006) + unsafe void SetLexerLanguage(string language); + + /// Load a lexer library (dll / so). (Scintilla feature 4007) + unsafe void LoadLexerLibrary(string path); + + /// + /// Retrieve a "property" value previously set with SetProperty. + /// Result is NUL-terminated. + /// (Scintilla feature 4008) + /// + unsafe string GetProperty(string key); + + /// + /// Retrieve a "property" value previously set with SetProperty, + /// with "$()" variable replacement on returned buffer. + /// Result is NUL-terminated. + /// (Scintilla feature 4009) + /// + unsafe string GetPropertyExpanded(string key); + + /// + /// Retrieve a "property" value previously set with SetProperty, + /// interpreted as an int AFTER any "$()" variable replacement. + /// (Scintilla feature 4010) + /// + unsafe int GetPropertyInt(string key, int defaultValue); + + /// + /// Retrieve the name of the lexer. + /// Return the length of the text. + /// Result is NUL-terminated. + /// (Scintilla feature 4012) + /// + unsafe string GetLexerLanguage(); + + /// For private communication between an application and a known lexer. (Scintilla feature 4013) + IntPtr PrivateLexerCall(int operation, IntPtr pointer); + + /// + /// Retrieve a '\n' separated list of properties understood by the current lexer. + /// Result is NUL-terminated. + /// (Scintilla feature 4014) + /// + unsafe string PropertyNames(); + + /// Retrieve the type of a property. (Scintilla feature 4015) + unsafe TypeProperty PropertyType(string name); + + /// + /// Describe a property. + /// Result is NUL-terminated. + /// (Scintilla feature 4016) + /// + unsafe string DescribeProperty(string name); + + /// + /// Retrieve a '\n' separated list of descriptions of the keyword sets understood by the current lexer. + /// Result is NUL-terminated. + /// (Scintilla feature 4017) + /// + unsafe string DescribeKeyWordSets(); + + /// + /// Bit set of LineEndType enumertion for which line ends beyond the standard + /// LF, CR, and CRLF are supported by the lexer. + /// (Scintilla feature 4018) + /// + int GetLineEndTypesSupported(); + + /// Allocate a set of sub styles for a particular base style, returning start of range (Scintilla feature 4020) + int AllocateSubStyles(int styleBase, int numberStyles); + + /// The starting style number for the sub styles associated with a base style (Scintilla feature 4021) + int GetSubStylesStart(int styleBase); + + /// The number of sub styles associated with a base style (Scintilla feature 4022) + int GetSubStylesLength(int styleBase); + + /// For a sub style, return the base style, else return the argument. (Scintilla feature 4027) + int GetStyleFromSubStyle(int subStyle); + + /// For a secondary style, return the primary style, else return the argument. (Scintilla feature 4028) + int GetPrimaryStyleFromStyle(int style); + + /// Free allocated sub styles (Scintilla feature 4023) + void FreeSubStyles(); + + /// Set the identifiers that are shown in a particular style (Scintilla feature 4024) + unsafe void SetIdentifiers(int style, string identifiers); + + /// + /// Where styles are duplicated by a feature such as active/inactive code + /// return the distance between the two types. + /// (Scintilla feature 4025) + /// + int DistanceToSecondaryStyles(); + + /// + /// Get the set of base styles that can be extended with sub styles + /// Result is NUL-terminated. + /// (Scintilla feature 4026) + /// + unsafe string GetSubStyleBases(); + + /// Retrieve the number of named styles for the lexer. (Scintilla feature 4029) + int GetNamedStyles(); + + /// + /// Retrieve the name of a style. + /// Result is NUL-terminated. + /// (Scintilla feature 4030) + /// + unsafe string NameOfStyle(int style); + + /// + /// Retrieve a ' ' separated list of style tags like "literal quoted string". + /// Result is NUL-terminated. + /// (Scintilla feature 4031) + /// + unsafe string TagsOfStyle(int style); + + /// + /// Retrieve a description of a style. + /// Result is NUL-terminated. + /// (Scintilla feature 4032) + /// + unsafe string DescriptionOfStyle(int style); + + /// Retrieve bidirectional text display state. (Scintilla feature 2708) + Bidirectional GetBidirectional(); + + /// Set bidirectional text display state. (Scintilla feature 2709) + void SetBidirectional(Bidirectional bidirectional); + + /// Retrieve line character index state. (Scintilla feature 2710) + LineCharacterIndexType GetLineCharacterIndex(); + + /// Request line character index be created or its use count increased. (Scintilla feature 2711) + void AllocateLineCharacterIndex(LineCharacterIndexType lineCharacterIndex); + + /// Decrease use count of line character index and remove if 0. (Scintilla feature 2712) + void ReleaseLineCharacterIndex(LineCharacterIndexType lineCharacterIndex); + + /// Retrieve the document line containing a position measured in index units. (Scintilla feature 2713) + int LineFromIndexPosition(int pos, LineCharacterIndexType lineCharacterIndex); + + /// Retrieve the position measured in index units at the start of a document line. (Scintilla feature 2714) + int IndexPositionFromLine(int line, LineCharacterIndexType lineCharacterIndex); + + /// + /// Divide each styling byte into lexical class bits (default: 5) and indicator + /// bits (default: 3). If a lexer requires more than 32 lexical states, then this + /// is used to expand the possible states. + /// (Scintilla feature 2090) + /// + void SetStyleBits(int bits); + + /// Retrieve number of bits in style bytes used to hold the lexical state. (Scintilla feature 2091) + int GetStyleBits(); + + /// Retrieve the number of bits the current lexer needs for styling. (Scintilla feature 4011) + int GetStyleBitsNeeded(); + + /// + /// Deprecated in 3.5.5 + /// Always interpret keyboard input as Unicode + /// (Scintilla feature 2521) + /// + void SetKeysUnicode(bool keysUnicode); + + /// Are keys always interpreted as Unicode? (Scintilla feature 2522) + bool GetKeysUnicode(); + + /// Is drawing done in two phases with backgrounds drawn before foregrounds? (Scintilla feature 2283) + bool GetTwoPhaseDraw(); + + /// + /// In twoPhaseDraw mode, drawing is performed in two phases, first the background + /// and then the foreground. This avoids chopping off characters that overlap the next run. + /// (Scintilla feature 2284) + /// + void SetTwoPhaseDraw(bool twoPhase); + + /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ + } +} diff --git a/WakaTime/PluginInfrastructure/MenuCmdID_h.cs b/WakaTime/PluginInfrastructure/MenuCmdID_h.cs index b4e2a28..4d209a5 100644 --- a/WakaTime/PluginInfrastructure/MenuCmdID_h.cs +++ b/WakaTime/PluginInfrastructure/MenuCmdID_h.cs @@ -1,398 +1,398 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -// -// This file should stay in sync with the CPP project file -// "notepad-plus-plus/PowerEditor/src/menuCmdID.h" -// found at -// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/src/menuCmdID.h - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - public enum NppMenuCmd : uint - { - IDM = 40000, - - IDM_FILE = (IDM + 1000), - IDM_FILE_NEW = (IDM_FILE + 1), - IDM_FILE_OPEN = (IDM_FILE + 2), - IDM_FILE_CLOSE = (IDM_FILE + 3), - IDM_FILE_CLOSEALL = (IDM_FILE + 4), - IDM_FILE_CLOSEALL_BUT_CURRENT = (IDM_FILE + 5), - IDM_FILE_SAVE = (IDM_FILE + 6), - IDM_FILE_SAVEALL = (IDM_FILE + 7), - IDM_FILE_SAVEAS = (IDM_FILE + 8), - //IDM_FILE_ASIAN_LANG = (IDM_FILE + 9), - IDM_FILE_PRINT = (IDM_FILE + 10), - IDM_FILE_PRINTNOW = 1001, - IDM_FILE_EXIT = (IDM_FILE + 11), - IDM_FILE_LOADSESSION = (IDM_FILE + 12), - IDM_FILE_SAVESESSION = (IDM_FILE + 13), - IDM_FILE_RELOAD = (IDM_FILE + 14), - IDM_FILE_SAVECOPYAS = (IDM_FILE + 15), - IDM_FILE_DELETE = (IDM_FILE + 16), - IDM_FILE_RENAME = (IDM_FILE + 17), - - // A mettre � jour si on ajoute nouveau menu item dans le menu "File" - IDM_FILEMENU_LASTONE = IDM_FILE_RENAME, - - IDM_EDIT = (IDM + 2000), - IDM_EDIT_CUT = (IDM_EDIT + 1), - IDM_EDIT_COPY = (IDM_EDIT + 2), - IDM_EDIT_UNDO = (IDM_EDIT + 3), - IDM_EDIT_REDO = (IDM_EDIT + 4), - IDM_EDIT_PASTE = (IDM_EDIT + 5), - IDM_EDIT_DELETE = (IDM_EDIT + 6), - IDM_EDIT_SELECTALL = (IDM_EDIT + 7), - - IDM_EDIT_INS_TAB = (IDM_EDIT + 8), - IDM_EDIT_RMV_TAB = (IDM_EDIT + 9), - IDM_EDIT_DUP_LINE = (IDM_EDIT + 10), - IDM_EDIT_TRANSPOSE_LINE = (IDM_EDIT + 11), - IDM_EDIT_SPLIT_LINES = (IDM_EDIT + 12), - IDM_EDIT_JOIN_LINES = (IDM_EDIT + 13), - IDM_EDIT_LINE_UP = (IDM_EDIT + 14), - IDM_EDIT_LINE_DOWN = (IDM_EDIT + 15), - IDM_EDIT_UPPERCASE = (IDM_EDIT + 16), - IDM_EDIT_LOWERCASE = (IDM_EDIT + 17), - - // Menu macro - IDM_MACRO_STARTRECORDINGMACRO = (IDM_EDIT + 18), - IDM_MACRO_STOPRECORDINGMACRO = (IDM_EDIT + 19), - IDM_MACRO_PLAYBACKRECORDEDMACRO = (IDM_EDIT + 21), - //----------- - - IDM_EDIT_BLOCK_COMMENT = (IDM_EDIT + 22), - IDM_EDIT_STREAM_COMMENT = (IDM_EDIT + 23), - IDM_EDIT_TRIMTRAILING = (IDM_EDIT + 24), - IDM_EDIT_TRIMLINEHEAD = (IDM_EDIT + 42), - IDM_EDIT_TRIM_BOTH = (IDM_EDIT + 43), - IDM_EDIT_EOL2WS = (IDM_EDIT + 44), - IDM_EDIT_TRIMALL = (IDM_EDIT + 45), - IDM_EDIT_TAB2SW = (IDM_EDIT + 46), - IDM_EDIT_SW2TAB = (IDM_EDIT + 47), - - // Menu macro - IDM_MACRO_SAVECURRENTMACRO = (IDM_EDIT + 25), - //----------- - - IDM_EDIT_RTL = (IDM_EDIT + 26), - IDM_EDIT_LTR = (IDM_EDIT + 27), - IDM_EDIT_SETREADONLY = (IDM_EDIT + 28), - IDM_EDIT_FULLPATHTOCLIP = (IDM_EDIT + 29), - IDM_EDIT_FILENAMETOCLIP = (IDM_EDIT + 30), - IDM_EDIT_CURRENTDIRTOCLIP = (IDM_EDIT + 31), - - // Menu macro - IDM_MACRO_RUNMULTIMACRODLG = (IDM_EDIT + 32), - //----------- - - IDM_EDIT_CLEARREADONLY = (IDM_EDIT + 33), - IDM_EDIT_COLUMNMODE = (IDM_EDIT + 34), - IDM_EDIT_BLOCK_COMMENT_SET = (IDM_EDIT + 35), - IDM_EDIT_BLOCK_UNCOMMENT = (IDM_EDIT + 36), - - IDM_EDIT_AUTOCOMPLETE = (50000 + 0), - IDM_EDIT_AUTOCOMPLETE_CURRENTFILE = (50000 + 1), - IDM_EDIT_FUNCCALLTIP = (50000 + 2), - - //Belong to MENU FILE - IDM_OPEN_ALL_RECENT_FILE = (IDM_EDIT + 40), - IDM_CLEAN_RECENT_FILE_LIST = (IDM_EDIT + 41), - - IDM_SEARCH = (IDM + 3000), - - IDM_SEARCH_FIND = (IDM_SEARCH + 1), - IDM_SEARCH_FINDNEXT = (IDM_SEARCH + 2), - IDM_SEARCH_REPLACE = (IDM_SEARCH + 3), - IDM_SEARCH_GOTOLINE = (IDM_SEARCH + 4), - IDM_SEARCH_TOGGLE_BOOKMARK = (IDM_SEARCH + 5), - IDM_SEARCH_NEXT_BOOKMARK = (IDM_SEARCH + 6), - IDM_SEARCH_PREV_BOOKMARK = (IDM_SEARCH + 7), - IDM_SEARCH_CLEAR_BOOKMARKS = (IDM_SEARCH + 8), - IDM_SEARCH_GOTOMATCHINGBRACE = (IDM_SEARCH + 9), - IDM_SEARCH_FINDPREV = (IDM_SEARCH + 10), - IDM_SEARCH_FINDINCREMENT = (IDM_SEARCH + 11), - IDM_SEARCH_FINDINFILES = (IDM_SEARCH + 13), - IDM_SEARCH_VOLATILE_FINDNEXT = (IDM_SEARCH + 14), - IDM_SEARCH_VOLATILE_FINDPREV = (IDM_SEARCH + 15), - IDM_SEARCH_CUTMARKEDLINES = (IDM_SEARCH + 18), - IDM_SEARCH_COPYMARKEDLINES = (IDM_SEARCH + 19), - IDM_SEARCH_PASTEMARKEDLINES = (IDM_SEARCH + 20), - IDM_SEARCH_DELETEMARKEDLINES = (IDM_SEARCH + 21), - IDM_SEARCH_MARKALLEXT1 = (IDM_SEARCH + 22), - IDM_SEARCH_UNMARKALLEXT1 = (IDM_SEARCH + 23), - IDM_SEARCH_MARKALLEXT2 = (IDM_SEARCH + 24), - IDM_SEARCH_UNMARKALLEXT2 = (IDM_SEARCH + 25), - IDM_SEARCH_MARKALLEXT3 = (IDM_SEARCH + 26), - IDM_SEARCH_UNMARKALLEXT3 = (IDM_SEARCH + 27), - IDM_SEARCH_MARKALLEXT4 = (IDM_SEARCH + 28), - IDM_SEARCH_UNMARKALLEXT4 = (IDM_SEARCH + 29), - IDM_SEARCH_MARKALLEXT5 = (IDM_SEARCH + 30), - IDM_SEARCH_UNMARKALLEXT5 = (IDM_SEARCH + 31), - IDM_SEARCH_CLEARALLMARKS = (IDM_SEARCH + 32), - - IDM_SEARCH_GOPREVMARKER1 = (IDM_SEARCH + 33), - IDM_SEARCH_GOPREVMARKER2 = (IDM_SEARCH + 34), - IDM_SEARCH_GOPREVMARKER3 = (IDM_SEARCH + 35), - IDM_SEARCH_GOPREVMARKER4 = (IDM_SEARCH + 36), - IDM_SEARCH_GOPREVMARKER5 = (IDM_SEARCH + 37), - IDM_SEARCH_GOPREVMARKER_DEF = (IDM_SEARCH + 38), - - IDM_SEARCH_GONEXTMARKER1 = (IDM_SEARCH + 39), - IDM_SEARCH_GONEXTMARKER2 = (IDM_SEARCH + 40), - IDM_SEARCH_GONEXTMARKER3 = (IDM_SEARCH + 41), - IDM_SEARCH_GONEXTMARKER4 = (IDM_SEARCH + 42), - IDM_SEARCH_GONEXTMARKER5 = (IDM_SEARCH + 43), - IDM_SEARCH_GONEXTMARKER_DEF = (IDM_SEARCH + 44), - - IDM_FOCUS_ON_FOUND_RESULTS = (IDM_SEARCH + 45), - IDM_SEARCH_GOTONEXTFOUND = (IDM_SEARCH + 46), - IDM_SEARCH_GOTOPREVFOUND = (IDM_SEARCH + 47), - - IDM_SEARCH_SETANDFINDNEXT = (IDM_SEARCH + 48), - IDM_SEARCH_SETANDFINDPREV = (IDM_SEARCH + 49), - IDM_SEARCH_INVERSEMARKS = (IDM_SEARCH + 50), - - IDM_VIEW = (IDM + 4000), - //IDM_VIEW_TOOLBAR_HIDE = (IDM_VIEW + 1), - IDM_VIEW_TOOLBAR_REDUCE = (IDM_VIEW + 2), - IDM_VIEW_TOOLBAR_ENLARGE = (IDM_VIEW + 3), - IDM_VIEW_TOOLBAR_STANDARD = (IDM_VIEW + 4), - IDM_VIEW_REDUCETABBAR = (IDM_VIEW + 5), - IDM_VIEW_LOCKTABBAR = (IDM_VIEW + 6), - IDM_VIEW_DRAWTABBAR_TOPBAR = (IDM_VIEW + 7), - IDM_VIEW_DRAWTABBAR_INACIVETAB = (IDM_VIEW + 8), - IDM_VIEW_POSTIT = (IDM_VIEW + 9), - IDM_VIEW_TOGGLE_FOLDALL = (IDM_VIEW + 10), - IDM_VIEW_USER_DLG = (IDM_VIEW + 11), - IDM_VIEW_LINENUMBER = (IDM_VIEW + 12), - IDM_VIEW_SYMBOLMARGIN = (IDM_VIEW + 13), - IDM_VIEW_FOLDERMAGIN = (IDM_VIEW + 14), - IDM_VIEW_FOLDERMAGIN_SIMPLE = (IDM_VIEW + 15), - IDM_VIEW_FOLDERMAGIN_ARROW = (IDM_VIEW + 16), - IDM_VIEW_FOLDERMAGIN_CIRCLE = (IDM_VIEW + 17), - IDM_VIEW_FOLDERMAGIN_BOX = (IDM_VIEW + 18), - IDM_VIEW_ALL_CHARACTERS = (IDM_VIEW + 19), - IDM_VIEW_INDENT_GUIDE = (IDM_VIEW + 20), - IDM_VIEW_CURLINE_HILITING = (IDM_VIEW + 21), - IDM_VIEW_WRAP = (IDM_VIEW + 22), - IDM_VIEW_ZOOMIN = (IDM_VIEW + 23), - IDM_VIEW_ZOOMOUT = (IDM_VIEW + 24), - IDM_VIEW_TAB_SPACE = (IDM_VIEW + 25), - IDM_VIEW_EOL = (IDM_VIEW + 26), - IDM_VIEW_EDGELINE = (IDM_VIEW + 27), - IDM_VIEW_EDGEBACKGROUND = (IDM_VIEW + 28), - IDM_VIEW_TOGGLE_UNFOLDALL = (IDM_VIEW + 29), - IDM_VIEW_FOLD_CURRENT = (IDM_VIEW + 30), - IDM_VIEW_UNFOLD_CURRENT = (IDM_VIEW + 31), - IDM_VIEW_FULLSCREENTOGGLE = (IDM_VIEW + 32), - IDM_VIEW_ZOOMRESTORE = (IDM_VIEW + 33), - IDM_VIEW_ALWAYSONTOP = (IDM_VIEW + 34), - IDM_VIEW_SYNSCROLLV = (IDM_VIEW + 35), - IDM_VIEW_SYNSCROLLH = (IDM_VIEW + 36), - IDM_VIEW_EDGENONE = (IDM_VIEW + 37), - IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN = (IDM_VIEW + 38), - IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE = (IDM_VIEW + 39), - IDM_VIEW_REFRESHTABAR = (IDM_VIEW + 40), - IDM_VIEW_WRAP_SYMBOL = (IDM_VIEW + 41), - IDM_VIEW_HIDELINES = (IDM_VIEW + 42), - IDM_VIEW_DRAWTABBAR_VERTICAL = (IDM_VIEW + 43), - IDM_VIEW_DRAWTABBAR_MULTILINE = (IDM_VIEW + 44), - IDM_VIEW_DOCCHANGEMARGIN = (IDM_VIEW + 45), - IDM_VIEW_LWDEF = (IDM_VIEW + 46), - IDM_VIEW_LWALIGN = (IDM_VIEW + 47), - IDM_VIEW_LWINDENT = (IDM_VIEW + 48), - IDM_VIEW_SUMMARY = (IDM_VIEW + 49), - - IDM_VIEW_FOLD = (IDM_VIEW + 50), - IDM_VIEW_FOLD_1 = (IDM_VIEW_FOLD + 1), - IDM_VIEW_FOLD_2 = (IDM_VIEW_FOLD + 2), - IDM_VIEW_FOLD_3 = (IDM_VIEW_FOLD + 3), - IDM_VIEW_FOLD_4 = (IDM_VIEW_FOLD + 4), - IDM_VIEW_FOLD_5 = (IDM_VIEW_FOLD + 5), - IDM_VIEW_FOLD_6 = (IDM_VIEW_FOLD + 6), - IDM_VIEW_FOLD_7 = (IDM_VIEW_FOLD + 7), - IDM_VIEW_FOLD_8 = (IDM_VIEW_FOLD + 8), - - IDM_VIEW_UNFOLD = (IDM_VIEW + 60), - IDM_VIEW_UNFOLD_1 = (IDM_VIEW_UNFOLD + 1), - IDM_VIEW_UNFOLD_2 = (IDM_VIEW_UNFOLD + 2), - IDM_VIEW_UNFOLD_3 = (IDM_VIEW_UNFOLD + 3), - IDM_VIEW_UNFOLD_4 = (IDM_VIEW_UNFOLD + 4), - IDM_VIEW_UNFOLD_5 = (IDM_VIEW_UNFOLD + 5), - IDM_VIEW_UNFOLD_6 = (IDM_VIEW_UNFOLD + 6), - IDM_VIEW_UNFOLD_7 = (IDM_VIEW_UNFOLD + 7), - IDM_VIEW_UNFOLD_8 = (IDM_VIEW_UNFOLD + 8), - - IDM_VIEW_GOTO_ANOTHER_VIEW = 10001, - IDM_VIEW_CLONE_TO_ANOTHER_VIEW = 10002, - IDM_VIEW_GOTO_NEW_INSTANCE = 10003, - IDM_VIEW_LOAD_IN_NEW_INSTANCE = 10004, - - IDM_VIEW_SWITCHTO_OTHER_VIEW = (IDM_VIEW + 72), - - IDM_FORMAT = (IDM + 5000), - IDM_FORMAT_TODOS = (IDM_FORMAT + 1), - IDM_FORMAT_TOUNIX = (IDM_FORMAT + 2), - IDM_FORMAT_TOMAC = (IDM_FORMAT + 3), - IDM_FORMAT_ANSI = (IDM_FORMAT + 4), - IDM_FORMAT_UTF_8 = (IDM_FORMAT + 5), - IDM_FORMAT_UCS_2BE = (IDM_FORMAT + 6), - IDM_FORMAT_UCS_2LE = (IDM_FORMAT + 7), - IDM_FORMAT_AS_UTF_8 = (IDM_FORMAT + 8), - IDM_FORMAT_CONV2_ANSI = (IDM_FORMAT + 9), - IDM_FORMAT_CONV2_AS_UTF_8 = (IDM_FORMAT + 10), - IDM_FORMAT_CONV2_UTF_8 = (IDM_FORMAT + 11), - IDM_FORMAT_CONV2_UCS_2BE = (IDM_FORMAT + 12), - IDM_FORMAT_CONV2_UCS_2LE = (IDM_FORMAT + 13), - - IDM_FORMAT_ENCODE = (IDM_FORMAT + 20), - IDM_FORMAT_WIN_1250 = (IDM_FORMAT_ENCODE + 0), - IDM_FORMAT_WIN_1251 = (IDM_FORMAT_ENCODE + 1), - IDM_FORMAT_WIN_1252 = (IDM_FORMAT_ENCODE + 2), - IDM_FORMAT_WIN_1253 = (IDM_FORMAT_ENCODE + 3), - IDM_FORMAT_WIN_1254 = (IDM_FORMAT_ENCODE + 4), - IDM_FORMAT_WIN_1255 = (IDM_FORMAT_ENCODE + 5), - IDM_FORMAT_WIN_1256 = (IDM_FORMAT_ENCODE + 6), - IDM_FORMAT_WIN_1257 = (IDM_FORMAT_ENCODE + 7), - IDM_FORMAT_WIN_1258 = (IDM_FORMAT_ENCODE + 8), - IDM_FORMAT_ISO_8859_1 = (IDM_FORMAT_ENCODE + 9), - IDM_FORMAT_ISO_8859_2 = (IDM_FORMAT_ENCODE + 10), - IDM_FORMAT_ISO_8859_3 = (IDM_FORMAT_ENCODE + 11), - IDM_FORMAT_ISO_8859_4 = (IDM_FORMAT_ENCODE + 12), - IDM_FORMAT_ISO_8859_5 = (IDM_FORMAT_ENCODE + 13), - IDM_FORMAT_ISO_8859_6 = (IDM_FORMAT_ENCODE + 14), - IDM_FORMAT_ISO_8859_7 = (IDM_FORMAT_ENCODE + 15), - IDM_FORMAT_ISO_8859_8 = (IDM_FORMAT_ENCODE + 16), - IDM_FORMAT_ISO_8859_9 = (IDM_FORMAT_ENCODE + 17), - IDM_FORMAT_ISO_8859_10 = (IDM_FORMAT_ENCODE + 18), - IDM_FORMAT_ISO_8859_11 = (IDM_FORMAT_ENCODE + 19), - IDM_FORMAT_ISO_8859_13 = (IDM_FORMAT_ENCODE + 20), - IDM_FORMAT_ISO_8859_14 = (IDM_FORMAT_ENCODE + 21), - IDM_FORMAT_ISO_8859_15 = (IDM_FORMAT_ENCODE + 22), - IDM_FORMAT_ISO_8859_16 = (IDM_FORMAT_ENCODE + 23), - IDM_FORMAT_DOS_437 = (IDM_FORMAT_ENCODE + 24), - IDM_FORMAT_DOS_720 = (IDM_FORMAT_ENCODE + 25), - IDM_FORMAT_DOS_737 = (IDM_FORMAT_ENCODE + 26), - IDM_FORMAT_DOS_775 = (IDM_FORMAT_ENCODE + 27), - IDM_FORMAT_DOS_850 = (IDM_FORMAT_ENCODE + 28), - IDM_FORMAT_DOS_852 = (IDM_FORMAT_ENCODE + 29), - IDM_FORMAT_DOS_855 = (IDM_FORMAT_ENCODE + 30), - IDM_FORMAT_DOS_857 = (IDM_FORMAT_ENCODE + 31), - IDM_FORMAT_DOS_858 = (IDM_FORMAT_ENCODE + 32), - IDM_FORMAT_DOS_860 = (IDM_FORMAT_ENCODE + 33), - IDM_FORMAT_DOS_861 = (IDM_FORMAT_ENCODE + 34), - IDM_FORMAT_DOS_862 = (IDM_FORMAT_ENCODE + 35), - IDM_FORMAT_DOS_863 = (IDM_FORMAT_ENCODE + 36), - IDM_FORMAT_DOS_865 = (IDM_FORMAT_ENCODE + 37), - IDM_FORMAT_DOS_866 = (IDM_FORMAT_ENCODE + 38), - IDM_FORMAT_DOS_869 = (IDM_FORMAT_ENCODE + 39), - IDM_FORMAT_BIG5 = (IDM_FORMAT_ENCODE + 40), - IDM_FORMAT_GB2312 = (IDM_FORMAT_ENCODE + 41), - IDM_FORMAT_SHIFT_JIS = (IDM_FORMAT_ENCODE + 42), - IDM_FORMAT_KOREAN_WIN = (IDM_FORMAT_ENCODE + 43), - IDM_FORMAT_EUC_KR = (IDM_FORMAT_ENCODE + 44), - IDM_FORMAT_TIS_620 = (IDM_FORMAT_ENCODE + 45), - IDM_FORMAT_MAC_CYRILLIC = (IDM_FORMAT_ENCODE + 46), - IDM_FORMAT_KOI8U_CYRILLIC = (IDM_FORMAT_ENCODE + 47), - IDM_FORMAT_KOI8R_CYRILLIC = (IDM_FORMAT_ENCODE + 48), - IDM_FORMAT_ENCODE_END = IDM_FORMAT_KOI8R_CYRILLIC, - - //#define IDM_FORMAT_CONVERT 200 - - IDM_LANG = (IDM + 6000), - IDM_LANGSTYLE_CONFIG_DLG = (IDM_LANG + 1), - IDM_LANG_C = (IDM_LANG + 2), - IDM_LANG_CPP = (IDM_LANG + 3), - IDM_LANG_JAVA = (IDM_LANG + 4), - IDM_LANG_HTML = (IDM_LANG + 5), - IDM_LANG_XML = (IDM_LANG + 6), - IDM_LANG_JS = (IDM_LANG + 7), - IDM_LANG_PHP = (IDM_LANG + 8), - IDM_LANG_ASP = (IDM_LANG + 9), - IDM_LANG_CSS = (IDM_LANG + 10), - IDM_LANG_PASCAL = (IDM_LANG + 11), - IDM_LANG_PYTHON = (IDM_LANG + 12), - IDM_LANG_PERL = (IDM_LANG + 13), - IDM_LANG_OBJC = (IDM_LANG + 14), - IDM_LANG_ASCII = (IDM_LANG + 15), - IDM_LANG_TEXT = (IDM_LANG + 16), - IDM_LANG_RC = (IDM_LANG + 17), - IDM_LANG_MAKEFILE = (IDM_LANG + 18), - IDM_LANG_INI = (IDM_LANG + 19), - IDM_LANG_SQL = (IDM_LANG + 20), - IDM_LANG_VB = (IDM_LANG + 21), - IDM_LANG_BATCH = (IDM_LANG + 22), - IDM_LANG_CS = (IDM_LANG + 23), - IDM_LANG_LUA = (IDM_LANG + 24), - IDM_LANG_TEX = (IDM_LANG + 25), - IDM_LANG_FORTRAN = (IDM_LANG + 26), - IDM_LANG_BASH = (IDM_LANG + 27), - IDM_LANG_FLASH = (IDM_LANG + 28), - IDM_LANG_NSIS = (IDM_LANG + 29), - IDM_LANG_TCL = (IDM_LANG + 30), - IDM_LANG_LISP = (IDM_LANG + 31), - IDM_LANG_SCHEME = (IDM_LANG + 32), - IDM_LANG_ASM = (IDM_LANG + 33), - IDM_LANG_DIFF = (IDM_LANG + 34), - IDM_LANG_PROPS = (IDM_LANG + 35), - IDM_LANG_PS = (IDM_LANG + 36), - IDM_LANG_RUBY = (IDM_LANG + 37), - IDM_LANG_SMALLTALK = (IDM_LANG + 38), - IDM_LANG_VHDL = (IDM_LANG + 39), - IDM_LANG_CAML = (IDM_LANG + 40), - IDM_LANG_KIX = (IDM_LANG + 41), - IDM_LANG_ADA = (IDM_LANG + 42), - IDM_LANG_VERILOG = (IDM_LANG + 43), - IDM_LANG_AU3 = (IDM_LANG + 44), - IDM_LANG_MATLAB = (IDM_LANG + 45), - IDM_LANG_HASKELL = (IDM_LANG + 46), - IDM_LANG_INNO = (IDM_LANG + 47), - IDM_LANG_CMAKE = (IDM_LANG + 48), - IDM_LANG_YAML = (IDM_LANG + 49), - IDM_LANG_COBOL = (IDM_LANG + 50), - IDM_LANG_D = (IDM_LANG + 51), - IDM_LANG_GUI4CLI = (IDM_LANG + 52), - IDM_LANG_POWERSHELL = (IDM_LANG + 53), - IDM_LANG_R = (IDM_LANG + 54), - IDM_LANG_JSP = (IDM_LANG + 55), - IDM_LANG_EXTERNAL = (IDM_LANG + 65), - IDM_LANG_EXTERNAL_LIMIT = (IDM_LANG + 79), - IDM_LANG_USER = (IDM_LANG + 80), //46080 - IDM_LANG_USER_LIMIT = (IDM_LANG + 110), //46110 - - IDM_ABOUT = (IDM + 7000), - IDM_HOMESWEETHOME = (IDM_ABOUT + 1), - IDM_PROJECTPAGE = (IDM_ABOUT + 2), - IDM_ONLINEHELP = (IDM_ABOUT + 3), - IDM_FORUM = (IDM_ABOUT + 4), - IDM_PLUGINSHOME = (IDM_ABOUT + 5), - IDM_UPDATE_NPP = (IDM_ABOUT + 6), - IDM_WIKIFAQ = (IDM_ABOUT + 7), - IDM_HELP = (IDM_ABOUT + 8), - - IDM_SETTING = (IDM + 8000), - IDM_SETTING_TAB_SIZE = (IDM_SETTING + 1), - IDM_SETTING_TAB_REPLCESPACE = (IDM_SETTING + 2), - IDM_SETTING_HISTORY_SIZE = (IDM_SETTING + 3), - IDM_SETTING_EDGE_SIZE = (IDM_SETTING + 4), - IDM_SETTING_IMPORTPLUGIN = (IDM_SETTING + 5), - IDM_SETTING_IMPORTSTYLETHEMS = (IDM_SETTING + 6), - IDM_SETTING_TRAYICON = (IDM_SETTING + 8), - IDM_SETTING_SHORTCUT_MAPPER = (IDM_SETTING + 9), - IDM_SETTING_REMEMBER_LAST_SESSION = (IDM_SETTING + 10), - IDM_SETTING_PREFERECE = (IDM_SETTING + 11), - IDM_SETTING_AUTOCNBCHAR = (IDM_SETTING + 15), - IDM_SETTING_SHORTCUT_MAPPER_MACRO = (IDM_SETTING + 16), - IDM_SETTING_SHORTCUT_MAPPER_RUN = (IDM_SETTING + 17), - IDM_SETTING_EDITCONTEXTMENU = (IDM_SETTING + 18), - - IDM_EXECUTE = (IDM + 9000), - - IDM_SYSTRAYPOPUP = (IDM + 3100), - IDM_SYSTRAYPOPUP_ACTIVATE = (IDM_SYSTRAYPOPUP + 1), - IDM_SYSTRAYPOPUP_NEWDOC = (IDM_SYSTRAYPOPUP + 2), - IDM_SYSTRAYPOPUP_NEW_AND_PASTE = (IDM_SYSTRAYPOPUP + 3), - IDM_SYSTRAYPOPUP_OPENFILE = (IDM_SYSTRAYPOPUP + 4), - IDM_SYSTRAYPOPUP_CLOSE = (IDM_SYSTRAYPOPUP + 5) - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +// +// This file should stay in sync with the CPP project file +// "notepad-plus-plus/PowerEditor/src/menuCmdID.h" +// found at +// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/src/menuCmdID.h + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + public enum NppMenuCmd : uint + { + IDM = 40000, + + IDM_FILE = (IDM + 1000), + IDM_FILE_NEW = (IDM_FILE + 1), + IDM_FILE_OPEN = (IDM_FILE + 2), + IDM_FILE_CLOSE = (IDM_FILE + 3), + IDM_FILE_CLOSEALL = (IDM_FILE + 4), + IDM_FILE_CLOSEALL_BUT_CURRENT = (IDM_FILE + 5), + IDM_FILE_SAVE = (IDM_FILE + 6), + IDM_FILE_SAVEALL = (IDM_FILE + 7), + IDM_FILE_SAVEAS = (IDM_FILE + 8), + //IDM_FILE_ASIAN_LANG = (IDM_FILE + 9), + IDM_FILE_PRINT = (IDM_FILE + 10), + IDM_FILE_PRINTNOW = 1001, + IDM_FILE_EXIT = (IDM_FILE + 11), + IDM_FILE_LOADSESSION = (IDM_FILE + 12), + IDM_FILE_SAVESESSION = (IDM_FILE + 13), + IDM_FILE_RELOAD = (IDM_FILE + 14), + IDM_FILE_SAVECOPYAS = (IDM_FILE + 15), + IDM_FILE_DELETE = (IDM_FILE + 16), + IDM_FILE_RENAME = (IDM_FILE + 17), + + // A mettre � jour si on ajoute nouveau menu item dans le menu "File" + IDM_FILEMENU_LASTONE = IDM_FILE_RENAME, + + IDM_EDIT = (IDM + 2000), + IDM_EDIT_CUT = (IDM_EDIT + 1), + IDM_EDIT_COPY = (IDM_EDIT + 2), + IDM_EDIT_UNDO = (IDM_EDIT + 3), + IDM_EDIT_REDO = (IDM_EDIT + 4), + IDM_EDIT_PASTE = (IDM_EDIT + 5), + IDM_EDIT_DELETE = (IDM_EDIT + 6), + IDM_EDIT_SELECTALL = (IDM_EDIT + 7), + + IDM_EDIT_INS_TAB = (IDM_EDIT + 8), + IDM_EDIT_RMV_TAB = (IDM_EDIT + 9), + IDM_EDIT_DUP_LINE = (IDM_EDIT + 10), + IDM_EDIT_TRANSPOSE_LINE = (IDM_EDIT + 11), + IDM_EDIT_SPLIT_LINES = (IDM_EDIT + 12), + IDM_EDIT_JOIN_LINES = (IDM_EDIT + 13), + IDM_EDIT_LINE_UP = (IDM_EDIT + 14), + IDM_EDIT_LINE_DOWN = (IDM_EDIT + 15), + IDM_EDIT_UPPERCASE = (IDM_EDIT + 16), + IDM_EDIT_LOWERCASE = (IDM_EDIT + 17), + + // Menu macro + IDM_MACRO_STARTRECORDINGMACRO = (IDM_EDIT + 18), + IDM_MACRO_STOPRECORDINGMACRO = (IDM_EDIT + 19), + IDM_MACRO_PLAYBACKRECORDEDMACRO = (IDM_EDIT + 21), + //----------- + + IDM_EDIT_BLOCK_COMMENT = (IDM_EDIT + 22), + IDM_EDIT_STREAM_COMMENT = (IDM_EDIT + 23), + IDM_EDIT_TRIMTRAILING = (IDM_EDIT + 24), + IDM_EDIT_TRIMLINEHEAD = (IDM_EDIT + 42), + IDM_EDIT_TRIM_BOTH = (IDM_EDIT + 43), + IDM_EDIT_EOL2WS = (IDM_EDIT + 44), + IDM_EDIT_TRIMALL = (IDM_EDIT + 45), + IDM_EDIT_TAB2SW = (IDM_EDIT + 46), + IDM_EDIT_SW2TAB = (IDM_EDIT + 47), + + // Menu macro + IDM_MACRO_SAVECURRENTMACRO = (IDM_EDIT + 25), + //----------- + + IDM_EDIT_RTL = (IDM_EDIT + 26), + IDM_EDIT_LTR = (IDM_EDIT + 27), + IDM_EDIT_SETREADONLY = (IDM_EDIT + 28), + IDM_EDIT_FULLPATHTOCLIP = (IDM_EDIT + 29), + IDM_EDIT_FILENAMETOCLIP = (IDM_EDIT + 30), + IDM_EDIT_CURRENTDIRTOCLIP = (IDM_EDIT + 31), + + // Menu macro + IDM_MACRO_RUNMULTIMACRODLG = (IDM_EDIT + 32), + //----------- + + IDM_EDIT_CLEARREADONLY = (IDM_EDIT + 33), + IDM_EDIT_COLUMNMODE = (IDM_EDIT + 34), + IDM_EDIT_BLOCK_COMMENT_SET = (IDM_EDIT + 35), + IDM_EDIT_BLOCK_UNCOMMENT = (IDM_EDIT + 36), + + IDM_EDIT_AUTOCOMPLETE = (50000 + 0), + IDM_EDIT_AUTOCOMPLETE_CURRENTFILE = (50000 + 1), + IDM_EDIT_FUNCCALLTIP = (50000 + 2), + + //Belong to MENU FILE + IDM_OPEN_ALL_RECENT_FILE = (IDM_EDIT + 40), + IDM_CLEAN_RECENT_FILE_LIST = (IDM_EDIT + 41), + + IDM_SEARCH = (IDM + 3000), + + IDM_SEARCH_FIND = (IDM_SEARCH + 1), + IDM_SEARCH_FINDNEXT = (IDM_SEARCH + 2), + IDM_SEARCH_REPLACE = (IDM_SEARCH + 3), + IDM_SEARCH_GOTOLINE = (IDM_SEARCH + 4), + IDM_SEARCH_TOGGLE_BOOKMARK = (IDM_SEARCH + 5), + IDM_SEARCH_NEXT_BOOKMARK = (IDM_SEARCH + 6), + IDM_SEARCH_PREV_BOOKMARK = (IDM_SEARCH + 7), + IDM_SEARCH_CLEAR_BOOKMARKS = (IDM_SEARCH + 8), + IDM_SEARCH_GOTOMATCHINGBRACE = (IDM_SEARCH + 9), + IDM_SEARCH_FINDPREV = (IDM_SEARCH + 10), + IDM_SEARCH_FINDINCREMENT = (IDM_SEARCH + 11), + IDM_SEARCH_FINDINFILES = (IDM_SEARCH + 13), + IDM_SEARCH_VOLATILE_FINDNEXT = (IDM_SEARCH + 14), + IDM_SEARCH_VOLATILE_FINDPREV = (IDM_SEARCH + 15), + IDM_SEARCH_CUTMARKEDLINES = (IDM_SEARCH + 18), + IDM_SEARCH_COPYMARKEDLINES = (IDM_SEARCH + 19), + IDM_SEARCH_PASTEMARKEDLINES = (IDM_SEARCH + 20), + IDM_SEARCH_DELETEMARKEDLINES = (IDM_SEARCH + 21), + IDM_SEARCH_MARKALLEXT1 = (IDM_SEARCH + 22), + IDM_SEARCH_UNMARKALLEXT1 = (IDM_SEARCH + 23), + IDM_SEARCH_MARKALLEXT2 = (IDM_SEARCH + 24), + IDM_SEARCH_UNMARKALLEXT2 = (IDM_SEARCH + 25), + IDM_SEARCH_MARKALLEXT3 = (IDM_SEARCH + 26), + IDM_SEARCH_UNMARKALLEXT3 = (IDM_SEARCH + 27), + IDM_SEARCH_MARKALLEXT4 = (IDM_SEARCH + 28), + IDM_SEARCH_UNMARKALLEXT4 = (IDM_SEARCH + 29), + IDM_SEARCH_MARKALLEXT5 = (IDM_SEARCH + 30), + IDM_SEARCH_UNMARKALLEXT5 = (IDM_SEARCH + 31), + IDM_SEARCH_CLEARALLMARKS = (IDM_SEARCH + 32), + + IDM_SEARCH_GOPREVMARKER1 = (IDM_SEARCH + 33), + IDM_SEARCH_GOPREVMARKER2 = (IDM_SEARCH + 34), + IDM_SEARCH_GOPREVMARKER3 = (IDM_SEARCH + 35), + IDM_SEARCH_GOPREVMARKER4 = (IDM_SEARCH + 36), + IDM_SEARCH_GOPREVMARKER5 = (IDM_SEARCH + 37), + IDM_SEARCH_GOPREVMARKER_DEF = (IDM_SEARCH + 38), + + IDM_SEARCH_GONEXTMARKER1 = (IDM_SEARCH + 39), + IDM_SEARCH_GONEXTMARKER2 = (IDM_SEARCH + 40), + IDM_SEARCH_GONEXTMARKER3 = (IDM_SEARCH + 41), + IDM_SEARCH_GONEXTMARKER4 = (IDM_SEARCH + 42), + IDM_SEARCH_GONEXTMARKER5 = (IDM_SEARCH + 43), + IDM_SEARCH_GONEXTMARKER_DEF = (IDM_SEARCH + 44), + + IDM_FOCUS_ON_FOUND_RESULTS = (IDM_SEARCH + 45), + IDM_SEARCH_GOTONEXTFOUND = (IDM_SEARCH + 46), + IDM_SEARCH_GOTOPREVFOUND = (IDM_SEARCH + 47), + + IDM_SEARCH_SETANDFINDNEXT = (IDM_SEARCH + 48), + IDM_SEARCH_SETANDFINDPREV = (IDM_SEARCH + 49), + IDM_SEARCH_INVERSEMARKS = (IDM_SEARCH + 50), + + IDM_VIEW = (IDM + 4000), + //IDM_VIEW_TOOLBAR_HIDE = (IDM_VIEW + 1), + IDM_VIEW_TOOLBAR_REDUCE = (IDM_VIEW + 2), + IDM_VIEW_TOOLBAR_ENLARGE = (IDM_VIEW + 3), + IDM_VIEW_TOOLBAR_STANDARD = (IDM_VIEW + 4), + IDM_VIEW_REDUCETABBAR = (IDM_VIEW + 5), + IDM_VIEW_LOCKTABBAR = (IDM_VIEW + 6), + IDM_VIEW_DRAWTABBAR_TOPBAR = (IDM_VIEW + 7), + IDM_VIEW_DRAWTABBAR_INACIVETAB = (IDM_VIEW + 8), + IDM_VIEW_POSTIT = (IDM_VIEW + 9), + IDM_VIEW_TOGGLE_FOLDALL = (IDM_VIEW + 10), + IDM_VIEW_USER_DLG = (IDM_VIEW + 11), + IDM_VIEW_LINENUMBER = (IDM_VIEW + 12), + IDM_VIEW_SYMBOLMARGIN = (IDM_VIEW + 13), + IDM_VIEW_FOLDERMAGIN = (IDM_VIEW + 14), + IDM_VIEW_FOLDERMAGIN_SIMPLE = (IDM_VIEW + 15), + IDM_VIEW_FOLDERMAGIN_ARROW = (IDM_VIEW + 16), + IDM_VIEW_FOLDERMAGIN_CIRCLE = (IDM_VIEW + 17), + IDM_VIEW_FOLDERMAGIN_BOX = (IDM_VIEW + 18), + IDM_VIEW_ALL_CHARACTERS = (IDM_VIEW + 19), + IDM_VIEW_INDENT_GUIDE = (IDM_VIEW + 20), + IDM_VIEW_CURLINE_HILITING = (IDM_VIEW + 21), + IDM_VIEW_WRAP = (IDM_VIEW + 22), + IDM_VIEW_ZOOMIN = (IDM_VIEW + 23), + IDM_VIEW_ZOOMOUT = (IDM_VIEW + 24), + IDM_VIEW_TAB_SPACE = (IDM_VIEW + 25), + IDM_VIEW_EOL = (IDM_VIEW + 26), + IDM_VIEW_EDGELINE = (IDM_VIEW + 27), + IDM_VIEW_EDGEBACKGROUND = (IDM_VIEW + 28), + IDM_VIEW_TOGGLE_UNFOLDALL = (IDM_VIEW + 29), + IDM_VIEW_FOLD_CURRENT = (IDM_VIEW + 30), + IDM_VIEW_UNFOLD_CURRENT = (IDM_VIEW + 31), + IDM_VIEW_FULLSCREENTOGGLE = (IDM_VIEW + 32), + IDM_VIEW_ZOOMRESTORE = (IDM_VIEW + 33), + IDM_VIEW_ALWAYSONTOP = (IDM_VIEW + 34), + IDM_VIEW_SYNSCROLLV = (IDM_VIEW + 35), + IDM_VIEW_SYNSCROLLH = (IDM_VIEW + 36), + IDM_VIEW_EDGENONE = (IDM_VIEW + 37), + IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN = (IDM_VIEW + 38), + IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE = (IDM_VIEW + 39), + IDM_VIEW_REFRESHTABAR = (IDM_VIEW + 40), + IDM_VIEW_WRAP_SYMBOL = (IDM_VIEW + 41), + IDM_VIEW_HIDELINES = (IDM_VIEW + 42), + IDM_VIEW_DRAWTABBAR_VERTICAL = (IDM_VIEW + 43), + IDM_VIEW_DRAWTABBAR_MULTILINE = (IDM_VIEW + 44), + IDM_VIEW_DOCCHANGEMARGIN = (IDM_VIEW + 45), + IDM_VIEW_LWDEF = (IDM_VIEW + 46), + IDM_VIEW_LWALIGN = (IDM_VIEW + 47), + IDM_VIEW_LWINDENT = (IDM_VIEW + 48), + IDM_VIEW_SUMMARY = (IDM_VIEW + 49), + + IDM_VIEW_FOLD = (IDM_VIEW + 50), + IDM_VIEW_FOLD_1 = (IDM_VIEW_FOLD + 1), + IDM_VIEW_FOLD_2 = (IDM_VIEW_FOLD + 2), + IDM_VIEW_FOLD_3 = (IDM_VIEW_FOLD + 3), + IDM_VIEW_FOLD_4 = (IDM_VIEW_FOLD + 4), + IDM_VIEW_FOLD_5 = (IDM_VIEW_FOLD + 5), + IDM_VIEW_FOLD_6 = (IDM_VIEW_FOLD + 6), + IDM_VIEW_FOLD_7 = (IDM_VIEW_FOLD + 7), + IDM_VIEW_FOLD_8 = (IDM_VIEW_FOLD + 8), + + IDM_VIEW_UNFOLD = (IDM_VIEW + 60), + IDM_VIEW_UNFOLD_1 = (IDM_VIEW_UNFOLD + 1), + IDM_VIEW_UNFOLD_2 = (IDM_VIEW_UNFOLD + 2), + IDM_VIEW_UNFOLD_3 = (IDM_VIEW_UNFOLD + 3), + IDM_VIEW_UNFOLD_4 = (IDM_VIEW_UNFOLD + 4), + IDM_VIEW_UNFOLD_5 = (IDM_VIEW_UNFOLD + 5), + IDM_VIEW_UNFOLD_6 = (IDM_VIEW_UNFOLD + 6), + IDM_VIEW_UNFOLD_7 = (IDM_VIEW_UNFOLD + 7), + IDM_VIEW_UNFOLD_8 = (IDM_VIEW_UNFOLD + 8), + + IDM_VIEW_GOTO_ANOTHER_VIEW = 10001, + IDM_VIEW_CLONE_TO_ANOTHER_VIEW = 10002, + IDM_VIEW_GOTO_NEW_INSTANCE = 10003, + IDM_VIEW_LOAD_IN_NEW_INSTANCE = 10004, + + IDM_VIEW_SWITCHTO_OTHER_VIEW = (IDM_VIEW + 72), + + IDM_FORMAT = (IDM + 5000), + IDM_FORMAT_TODOS = (IDM_FORMAT + 1), + IDM_FORMAT_TOUNIX = (IDM_FORMAT + 2), + IDM_FORMAT_TOMAC = (IDM_FORMAT + 3), + IDM_FORMAT_ANSI = (IDM_FORMAT + 4), + IDM_FORMAT_UTF_8 = (IDM_FORMAT + 5), + IDM_FORMAT_UCS_2BE = (IDM_FORMAT + 6), + IDM_FORMAT_UCS_2LE = (IDM_FORMAT + 7), + IDM_FORMAT_AS_UTF_8 = (IDM_FORMAT + 8), + IDM_FORMAT_CONV2_ANSI = (IDM_FORMAT + 9), + IDM_FORMAT_CONV2_AS_UTF_8 = (IDM_FORMAT + 10), + IDM_FORMAT_CONV2_UTF_8 = (IDM_FORMAT + 11), + IDM_FORMAT_CONV2_UCS_2BE = (IDM_FORMAT + 12), + IDM_FORMAT_CONV2_UCS_2LE = (IDM_FORMAT + 13), + + IDM_FORMAT_ENCODE = (IDM_FORMAT + 20), + IDM_FORMAT_WIN_1250 = (IDM_FORMAT_ENCODE + 0), + IDM_FORMAT_WIN_1251 = (IDM_FORMAT_ENCODE + 1), + IDM_FORMAT_WIN_1252 = (IDM_FORMAT_ENCODE + 2), + IDM_FORMAT_WIN_1253 = (IDM_FORMAT_ENCODE + 3), + IDM_FORMAT_WIN_1254 = (IDM_FORMAT_ENCODE + 4), + IDM_FORMAT_WIN_1255 = (IDM_FORMAT_ENCODE + 5), + IDM_FORMAT_WIN_1256 = (IDM_FORMAT_ENCODE + 6), + IDM_FORMAT_WIN_1257 = (IDM_FORMAT_ENCODE + 7), + IDM_FORMAT_WIN_1258 = (IDM_FORMAT_ENCODE + 8), + IDM_FORMAT_ISO_8859_1 = (IDM_FORMAT_ENCODE + 9), + IDM_FORMAT_ISO_8859_2 = (IDM_FORMAT_ENCODE + 10), + IDM_FORMAT_ISO_8859_3 = (IDM_FORMAT_ENCODE + 11), + IDM_FORMAT_ISO_8859_4 = (IDM_FORMAT_ENCODE + 12), + IDM_FORMAT_ISO_8859_5 = (IDM_FORMAT_ENCODE + 13), + IDM_FORMAT_ISO_8859_6 = (IDM_FORMAT_ENCODE + 14), + IDM_FORMAT_ISO_8859_7 = (IDM_FORMAT_ENCODE + 15), + IDM_FORMAT_ISO_8859_8 = (IDM_FORMAT_ENCODE + 16), + IDM_FORMAT_ISO_8859_9 = (IDM_FORMAT_ENCODE + 17), + IDM_FORMAT_ISO_8859_10 = (IDM_FORMAT_ENCODE + 18), + IDM_FORMAT_ISO_8859_11 = (IDM_FORMAT_ENCODE + 19), + IDM_FORMAT_ISO_8859_13 = (IDM_FORMAT_ENCODE + 20), + IDM_FORMAT_ISO_8859_14 = (IDM_FORMAT_ENCODE + 21), + IDM_FORMAT_ISO_8859_15 = (IDM_FORMAT_ENCODE + 22), + IDM_FORMAT_ISO_8859_16 = (IDM_FORMAT_ENCODE + 23), + IDM_FORMAT_DOS_437 = (IDM_FORMAT_ENCODE + 24), + IDM_FORMAT_DOS_720 = (IDM_FORMAT_ENCODE + 25), + IDM_FORMAT_DOS_737 = (IDM_FORMAT_ENCODE + 26), + IDM_FORMAT_DOS_775 = (IDM_FORMAT_ENCODE + 27), + IDM_FORMAT_DOS_850 = (IDM_FORMAT_ENCODE + 28), + IDM_FORMAT_DOS_852 = (IDM_FORMAT_ENCODE + 29), + IDM_FORMAT_DOS_855 = (IDM_FORMAT_ENCODE + 30), + IDM_FORMAT_DOS_857 = (IDM_FORMAT_ENCODE + 31), + IDM_FORMAT_DOS_858 = (IDM_FORMAT_ENCODE + 32), + IDM_FORMAT_DOS_860 = (IDM_FORMAT_ENCODE + 33), + IDM_FORMAT_DOS_861 = (IDM_FORMAT_ENCODE + 34), + IDM_FORMAT_DOS_862 = (IDM_FORMAT_ENCODE + 35), + IDM_FORMAT_DOS_863 = (IDM_FORMAT_ENCODE + 36), + IDM_FORMAT_DOS_865 = (IDM_FORMAT_ENCODE + 37), + IDM_FORMAT_DOS_866 = (IDM_FORMAT_ENCODE + 38), + IDM_FORMAT_DOS_869 = (IDM_FORMAT_ENCODE + 39), + IDM_FORMAT_BIG5 = (IDM_FORMAT_ENCODE + 40), + IDM_FORMAT_GB2312 = (IDM_FORMAT_ENCODE + 41), + IDM_FORMAT_SHIFT_JIS = (IDM_FORMAT_ENCODE + 42), + IDM_FORMAT_KOREAN_WIN = (IDM_FORMAT_ENCODE + 43), + IDM_FORMAT_EUC_KR = (IDM_FORMAT_ENCODE + 44), + IDM_FORMAT_TIS_620 = (IDM_FORMAT_ENCODE + 45), + IDM_FORMAT_MAC_CYRILLIC = (IDM_FORMAT_ENCODE + 46), + IDM_FORMAT_KOI8U_CYRILLIC = (IDM_FORMAT_ENCODE + 47), + IDM_FORMAT_KOI8R_CYRILLIC = (IDM_FORMAT_ENCODE + 48), + IDM_FORMAT_ENCODE_END = IDM_FORMAT_KOI8R_CYRILLIC, + + //#define IDM_FORMAT_CONVERT 200 + + IDM_LANG = (IDM + 6000), + IDM_LANGSTYLE_CONFIG_DLG = (IDM_LANG + 1), + IDM_LANG_C = (IDM_LANG + 2), + IDM_LANG_CPP = (IDM_LANG + 3), + IDM_LANG_JAVA = (IDM_LANG + 4), + IDM_LANG_HTML = (IDM_LANG + 5), + IDM_LANG_XML = (IDM_LANG + 6), + IDM_LANG_JS = (IDM_LANG + 7), + IDM_LANG_PHP = (IDM_LANG + 8), + IDM_LANG_ASP = (IDM_LANG + 9), + IDM_LANG_CSS = (IDM_LANG + 10), + IDM_LANG_PASCAL = (IDM_LANG + 11), + IDM_LANG_PYTHON = (IDM_LANG + 12), + IDM_LANG_PERL = (IDM_LANG + 13), + IDM_LANG_OBJC = (IDM_LANG + 14), + IDM_LANG_ASCII = (IDM_LANG + 15), + IDM_LANG_TEXT = (IDM_LANG + 16), + IDM_LANG_RC = (IDM_LANG + 17), + IDM_LANG_MAKEFILE = (IDM_LANG + 18), + IDM_LANG_INI = (IDM_LANG + 19), + IDM_LANG_SQL = (IDM_LANG + 20), + IDM_LANG_VB = (IDM_LANG + 21), + IDM_LANG_BATCH = (IDM_LANG + 22), + IDM_LANG_CS = (IDM_LANG + 23), + IDM_LANG_LUA = (IDM_LANG + 24), + IDM_LANG_TEX = (IDM_LANG + 25), + IDM_LANG_FORTRAN = (IDM_LANG + 26), + IDM_LANG_BASH = (IDM_LANG + 27), + IDM_LANG_FLASH = (IDM_LANG + 28), + IDM_LANG_NSIS = (IDM_LANG + 29), + IDM_LANG_TCL = (IDM_LANG + 30), + IDM_LANG_LISP = (IDM_LANG + 31), + IDM_LANG_SCHEME = (IDM_LANG + 32), + IDM_LANG_ASM = (IDM_LANG + 33), + IDM_LANG_DIFF = (IDM_LANG + 34), + IDM_LANG_PROPS = (IDM_LANG + 35), + IDM_LANG_PS = (IDM_LANG + 36), + IDM_LANG_RUBY = (IDM_LANG + 37), + IDM_LANG_SMALLTALK = (IDM_LANG + 38), + IDM_LANG_VHDL = (IDM_LANG + 39), + IDM_LANG_CAML = (IDM_LANG + 40), + IDM_LANG_KIX = (IDM_LANG + 41), + IDM_LANG_ADA = (IDM_LANG + 42), + IDM_LANG_VERILOG = (IDM_LANG + 43), + IDM_LANG_AU3 = (IDM_LANG + 44), + IDM_LANG_MATLAB = (IDM_LANG + 45), + IDM_LANG_HASKELL = (IDM_LANG + 46), + IDM_LANG_INNO = (IDM_LANG + 47), + IDM_LANG_CMAKE = (IDM_LANG + 48), + IDM_LANG_YAML = (IDM_LANG + 49), + IDM_LANG_COBOL = (IDM_LANG + 50), + IDM_LANG_D = (IDM_LANG + 51), + IDM_LANG_GUI4CLI = (IDM_LANG + 52), + IDM_LANG_POWERSHELL = (IDM_LANG + 53), + IDM_LANG_R = (IDM_LANG + 54), + IDM_LANG_JSP = (IDM_LANG + 55), + IDM_LANG_EXTERNAL = (IDM_LANG + 65), + IDM_LANG_EXTERNAL_LIMIT = (IDM_LANG + 79), + IDM_LANG_USER = (IDM_LANG + 80), //46080 + IDM_LANG_USER_LIMIT = (IDM_LANG + 110), //46110 + + IDM_ABOUT = (IDM + 7000), + IDM_HOMESWEETHOME = (IDM_ABOUT + 1), + IDM_PROJECTPAGE = (IDM_ABOUT + 2), + IDM_ONLINEHELP = (IDM_ABOUT + 3), + IDM_FORUM = (IDM_ABOUT + 4), + IDM_PLUGINSHOME = (IDM_ABOUT + 5), + IDM_UPDATE_NPP = (IDM_ABOUT + 6), + IDM_WIKIFAQ = (IDM_ABOUT + 7), + IDM_HELP = (IDM_ABOUT + 8), + + IDM_SETTING = (IDM + 8000), + IDM_SETTING_TAB_SIZE = (IDM_SETTING + 1), + IDM_SETTING_TAB_REPLCESPACE = (IDM_SETTING + 2), + IDM_SETTING_HISTORY_SIZE = (IDM_SETTING + 3), + IDM_SETTING_EDGE_SIZE = (IDM_SETTING + 4), + IDM_SETTING_IMPORTPLUGIN = (IDM_SETTING + 5), + IDM_SETTING_IMPORTSTYLETHEMS = (IDM_SETTING + 6), + IDM_SETTING_TRAYICON = (IDM_SETTING + 8), + IDM_SETTING_SHORTCUT_MAPPER = (IDM_SETTING + 9), + IDM_SETTING_REMEMBER_LAST_SESSION = (IDM_SETTING + 10), + IDM_SETTING_PREFERECE = (IDM_SETTING + 11), + IDM_SETTING_AUTOCNBCHAR = (IDM_SETTING + 15), + IDM_SETTING_SHORTCUT_MAPPER_MACRO = (IDM_SETTING + 16), + IDM_SETTING_SHORTCUT_MAPPER_RUN = (IDM_SETTING + 17), + IDM_SETTING_EDITCONTEXTMENU = (IDM_SETTING + 18), + + IDM_EXECUTE = (IDM + 9000), + + IDM_SYSTRAYPOPUP = (IDM + 3100), + IDM_SYSTRAYPOPUP_ACTIVATE = (IDM_SYSTRAYPOPUP + 1), + IDM_SYSTRAYPOPUP_NEWDOC = (IDM_SYSTRAYPOPUP + 2), + IDM_SYSTRAYPOPUP_NEW_AND_PASTE = (IDM_SYSTRAYPOPUP + 3), + IDM_SYSTRAYPOPUP_OPENFILE = (IDM_SYSTRAYPOPUP + 4), + IDM_SYSTRAYPOPUP_CLOSE = (IDM_SYSTRAYPOPUP + 5) + } +} diff --git a/WakaTime/PluginInfrastructure/Msgs_h.cs b/WakaTime/PluginInfrastructure/Msgs_h.cs index a9efd7b..f6c1f5a 100644 --- a/WakaTime/PluginInfrastructure/Msgs_h.cs +++ b/WakaTime/PluginInfrastructure/Msgs_h.cs @@ -1,777 +1,777 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -// -// This file should stay in sync with the CPP project file -// "notepad-plus-plus/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h" -// found at -// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h - -using System; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - class Constants - { - public const int WM_USER = 0x400; - public const int NPPMSG = WM_USER + 1000; - } - - public enum LangType - { - L_TEXT, L_PHP, L_C, L_CPP, L_CS, L_OBJC, L_JAVA, L_RC, - L_HTML, L_XML, L_MAKEFILE, L_PASCAL, L_BATCH, L_INI, L_ASCII, L_USER, - L_ASP, L_SQL, L_VB, L_JS, L_CSS, L_PERL, L_PYTHON, L_LUA, - L_TEX, L_FORTRAN, L_BASH, L_FLASH, L_NSIS, L_TCL, L_LISP, L_SCHEME, - L_ASM, L_DIFF, L_PROPS, L_PS, L_RUBY, L_SMALLTALK, L_VHDL, L_KIX, L_AU3, - L_CAML, L_ADA, L_VERILOG, L_MATLAB, L_HASKELL, L_INNO, L_SEARCHRESULT, - L_CMAKE, L_YAML, L_COBOL, L_GUI4CLI, L_D, L_POWERSHELL, L_R, L_JSP, - L_COFFEESCRIPT, L_JSON, L_JAVASCRIPT, L_FORTRAN_77, - // Don't use L_JS, use L_JAVASCRIPT instead - // The end of enumated language type, so it should be always at the end - L_EXTERNAL - } - - [Flags] - public enum NppMsg : uint - { - /* ++Autogenerated -- start of section automatically generated from notepad-plus-plus\PowerEditor\src\MISC\PluginsManager\Notepad_plus_msgs.h */ - - NPPMSG = Constants.WM_USER + 1000, - - NPPM_GETCURRENTSCINTILLA = Constants.NPPMSG + 4, - NPPM_GETCURRENTLANGTYPE = Constants.NPPMSG + 5, - NPPM_SETCURRENTLANGTYPE = Constants.NPPMSG + 6, - - NPPM_GETNBOPENFILES = Constants.NPPMSG + 7, - ALL_OPEN_FILES = 0, - PRIMARY_VIEW = 1, - SECOND_VIEW = 2, - - NPPM_GETOPENFILENAMES = Constants.NPPMSG + 8, - - NPPM_MODELESSDIALOG = Constants.NPPMSG + 12, - MODELESSDIALOGADD = 0, - MODELESSDIALOGREMOVE = 1, - - NPPM_GETNBSESSIONFILES = Constants.NPPMSG + 13, - NPPM_GETSESSIONFILES = Constants.NPPMSG + 14, - NPPM_SAVESESSION = Constants.NPPMSG + 15, - NPPM_SAVECURRENTSESSION = Constants.NPPMSG + 16, - - NPPM_GETOPENFILENAMESPRIMARY = Constants.NPPMSG + 17, - NPPM_GETOPENFILENAMESSECOND = Constants.NPPMSG + 18, - - NPPM_CREATESCINTILLAHANDLE = Constants.NPPMSG + 20, - NPPM_DESTROYSCINTILLAHANDLE = Constants.NPPMSG + 21, - NPPM_GETNBUSERLANG = Constants.NPPMSG + 22, - - NPPM_GETCURRENTDOCINDEX = Constants.NPPMSG + 23, - MAIN_VIEW = 0, - SUB_VIEW = 1, - - NPPM_SETSTATUSBAR = Constants.NPPMSG + 24, - STATUSBAR_DOC_TYPE = 0, - STATUSBAR_DOC_SIZE = 1, - STATUSBAR_CUR_POS = 2, - STATUSBAR_EOF_FORMAT = 3, - STATUSBAR_UNICODE_TYPE = 4, - STATUSBAR_TYPING_MODE = 5, - - NPPM_GETMENUHANDLE = Constants.NPPMSG + 25, - NPPPLUGINMENU = 0, - /// - /// INT NPPM_GETMENUHANDLE(INT menuChoice, 0) - /// Return: menu handle (HMENU) of choice (plugin menu handle or Notepad++ main menu handle) - /// - NPPMAINMENU = 1, - - /// - ///ascii file to unicode - ///int NPPM_ENCODESCI(MAIN_VIEW/SUB_VIEW, 0) - ///return new unicodeMode - /// - NPPM_ENCODESCI = Constants.NPPMSG + 26, - - /// - ///unicode file to ascii - ///int NPPM_DECODESCI(MAIN_VIEW/SUB_VIEW, 0) - ///return old unicodeMode - /// - NPPM_DECODESCI = Constants.NPPMSG + 27, - - /// - ///void NPPM_ACTIVATEDOC(int view, int index2Activate) - /// - NPPM_ACTIVATEDOC = Constants.NPPMSG + 28, - - /// - ///void NPPM_LAUNCHFINDINFILESDLG(TCHAR * dir2Search, TCHAR * filtre) - /// - NPPM_LAUNCHFINDINFILESDLG = Constants.NPPMSG + 29, - - /// - ///void NPPM_DMMSHOW(0, tTbData->hClient) - /// - NPPM_DMMSHOW = Constants.NPPMSG + 30, - - /// - ///void NPPM_DMMHIDE(0, tTbData->hClient) - /// - NPPM_DMMHIDE = Constants.NPPMSG + 31, - - /// - ///void NPPM_DMMUPDATEDISPINFO(0, tTbData->hClient) - /// - NPPM_DMMUPDATEDISPINFO = Constants.NPPMSG + 32, - - /// - ///void NPPM_DMMREGASDCKDLG(0, &tTbData) - /// - NPPM_DMMREGASDCKDLG = Constants.NPPMSG + 33, - - /// - ///void NPPM_LOADSESSION(0, const TCHAR* file name) - /// - NPPM_LOADSESSION = Constants.NPPMSG + 34, - - /// - ///void WM_DMM_VIEWOTHERTAB(0, tTbData->pszName) - /// - NPPM_DMMVIEWOTHERTAB = Constants.NPPMSG + 35, - - /// - ///BOOL NPPM_RELOADFILE(BOOL withAlert, TCHAR *filePathName2Reload) - /// - NPPM_RELOADFILE = Constants.NPPMSG + 36, - - /// - ///BOOL NPPM_SWITCHTOFILE(0, TCHAR *filePathName2switch) - /// - NPPM_SWITCHTOFILE = Constants.NPPMSG + 37, - - /// - ///BOOL NPPM_SAVECURRENTFILE(0, 0) - /// - NPPM_SAVECURRENTFILE = Constants.NPPMSG + 38, - - /// - ///BOOL NPPM_SAVEALLFILES(0, 0) - /// - NPPM_SAVEALLFILES = Constants.NPPMSG + 39, - - /// - ///void WM_PIMENU_CHECK(UINT funcItem[X]._cmdID, TRUE/FALSE) - /// - NPPM_SETMENUITEMCHECK = Constants.NPPMSG + 40, - - /// - ///void WM_ADDTOOLBARICON(UINT funcItem[X]._cmdID, toolbarIcons icon) - /// - NPPM_ADDTOOLBARICON = Constants.NPPMSG + 41, - - /// - ///winVer NPPM_GETWINDOWSVERSION(0, 0) - /// - NPPM_GETWINDOWSVERSION = Constants.NPPMSG + 42, - - /// - ///HWND WM_DMM_GETPLUGINHWNDBYNAME(const TCHAR *windowName, const TCHAR *moduleName) - /// if moduleName is NULL, then return value is NULL - /// if windowName is NULL, then the first found window handle which matches with the moduleName will be returned - /// - NPPM_DMMGETPLUGINHWNDBYNAME = Constants.NPPMSG + 43, - - /// - ///BOOL NPPM_MAKECURRENTBUFFERDIRTY(0, 0) - /// - NPPM_MAKECURRENTBUFFERDIRTY = Constants.NPPMSG + 44, - - /// - ///BOOL NPPM_GETENABLETHEMETEXTUREFUNC(0, 0) - /// - NPPM_GETENABLETHEMETEXTUREFUNC = Constants.NPPMSG + 45, - - /// - ///INT NPPM_GETPLUGINSCONFIGDIR(int strLen, TCHAR *str) - /// Get user's plugin config directory path. It's useful if plugins want to save/load parameters for the current user - /// Returns the number of TCHAR copied/to copy. - /// Users should call it with "str" be NULL to get the required number of TCHAR (not including the terminating nul character), - /// allocate "str" buffer with the return value + 1, then call it again to get the path. - /// - NPPM_GETPLUGINSCONFIGDIR = Constants.NPPMSG + 46, - - /// - ///BOOL NPPM_MSGTOPLUGIN(TCHAR *destModuleName, CommunicationInfo *info) - /// return value is TRUE when the message arrive to the destination plugins. - /// if destModule or info is NULL, then return value is FALSE - /// - NPPM_MSGTOPLUGIN = Constants.NPPMSG + 47, - - /// - ///void NPPM_MENUCOMMAND(0, int cmdID) - /// uncomment //#include "menuCmdID.h" - /// in the beginning of this file then use the command symbols defined in "menuCmdID.h" file - /// to access all the Notepad++ menu command items - /// - NPPM_MENUCOMMAND = Constants.NPPMSG + 48, - - /// - ///void NPPM_TRIGGERTABBARCONTEXTMENU(int view, int index2Activate) - /// - NPPM_TRIGGERTABBARCONTEXTMENU = Constants.NPPMSG + 49, - - /// - /// int NPPM_GETNPPVERSION(0, 0) - /// return version - /// ex : v4.6 - /// HIWORD(version) == 4 - /// LOWORD(version) == 6 - /// - NPPM_GETNPPVERSION = Constants.NPPMSG + 50, - - /// - /// BOOL NPPM_HIDETABBAR(0, BOOL hideOrNot) - /// if hideOrNot is set as TRUE then tab bar will be hidden - /// otherwise it'll be shown. - /// return value : the old status value - /// - NPPM_HIDETABBAR = Constants.NPPMSG + 51, - - /// - /// BOOL NPPM_ISTABBARHIDDEN(0, 0) - /// returned value : TRUE if tab bar is hidden, otherwise FALSE - /// - NPPM_ISTABBARHIDDEN = Constants.NPPMSG + 52, - - /// - /// INT NPPM_GETPOSFROMBUFFERID(UINT_PTR bufferID, INT priorityView) - /// Return VIEW|INDEX from a buffer ID. -1 if the bufferID non existing - /// if priorityView set to SUB_VIEW, then SUB_VIEW will be search firstly - /// - /// VIEW takes 2 highest bits and INDEX (0 based) takes the rest (30 bits) - /// Here's the values for the view : - /// MAIN_VIEW 0 - /// SUB_VIEW 1 - /// - NPPM_GETPOSFROMBUFFERID = Constants.NPPMSG + 57, - - /// - /// INT NPPM_GETFULLPATHFROMBUFFERID(UINT_PTR bufferID, TCHAR *fullFilePath) - /// Get full path file name from a bufferID. - /// Return -1 if the bufferID non existing, otherwise the number of TCHAR copied/to copy - /// User should call it with fullFilePath be NULL to get the number of TCHAR (not including the nul character), - /// allocate fullFilePath with the return values + 1, then call it again to get full path file name - /// - NPPM_GETFULLPATHFROMBUFFERID = Constants.NPPMSG + 58, - - /// - /// LRESULT NPPM_GETBUFFERIDFROMPOS(INT index, INT iView) - /// wParam: Position of document - /// lParam: View to use, 0 = Main, 1 = Secondary - /// Returns 0 if invalid - /// - NPPM_GETBUFFERIDFROMPOS = Constants.NPPMSG + 59, - - /// - /// LRESULT NPPM_GETCURRENTBUFFERID(0, 0) - /// Returns active Buffer - /// - NPPM_GETCURRENTBUFFERID = Constants.NPPMSG + 60, - - /// - /// VOID NPPM_RELOADBUFFERID(UINT_PTR bufferID, BOOL alert) - /// Reloads Buffer - /// wParam: Buffer to reload - /// lParam: 0 if no alert, else alert - /// - NPPM_RELOADBUFFERID = Constants.NPPMSG + 61, - - /// - /// INT NPPM_GETBUFFERLANGTYPE(UINT_PTR bufferID, 0) - /// wParam: BufferID to get LangType from - /// lParam: 0 - /// Returns as int, see LangType. -1 on error - /// - NPPM_GETBUFFERLANGTYPE = Constants.NPPMSG + 64, - - /// - /// BOOL NPPM_SETBUFFERLANGTYPE(UINT_PTR bufferID, INT langType) - /// wParam: BufferID to set LangType of - /// lParam: LangType - /// Returns TRUE on success, FALSE otherwise - /// use int, see LangType for possible values - /// L_USER and L_EXTERNAL are not supported - /// - NPPM_SETBUFFERLANGTYPE = Constants.NPPMSG + 65, - - /// - /// INT NPPM_GETBUFFERENCODING(UINT_PTR bufferID, 0) - /// wParam: BufferID to get encoding from - /// lParam: 0 - /// returns as int, see UniMode. -1 on error - /// - NPPM_GETBUFFERENCODING = Constants.NPPMSG + 66, - - /// - /// BOOL NPPM_SETBUFFERENCODING(UINT_PTR bufferID, INT encoding) - /// wParam: BufferID to set encoding of - /// lParam: encoding - /// Returns TRUE on success, FALSE otherwise - /// use int, see UniMode - /// Can only be done on new, unedited files - /// - NPPM_SETBUFFERENCODING = Constants.NPPMSG + 67, - - /// - /// INT NPPM_GETBUFFERFORMAT(UINT_PTR bufferID, 0) - /// wParam: BufferID to get EolType format from - /// lParam: 0 - /// returns as int, see EolType format. -1 on error - /// - NPPM_GETBUFFERFORMAT = Constants.NPPMSG + 68, - - /// - /// BOOL NPPM_SETBUFFERFORMAT(UINT_PTR bufferID, INT format) - /// wParam: BufferID to set EolType format of - /// lParam: format - /// Returns TRUE on success, FALSE otherwise - /// use int, see EolType format - /// - NPPM_SETBUFFERFORMAT = Constants.NPPMSG + 69, - - /// - /// BOOL NPPM_HIDETOOLBAR(0, BOOL hideOrNot) - /// if hideOrNot is set as TRUE then tool bar will be hidden - /// otherwise it'll be shown. - /// return value : the old status value - /// - NPPM_HIDETOOLBAR = Constants.NPPMSG + 70, - - /// - /// BOOL NPPM_ISTOOLBARHIDDEN(0, 0) - /// returned value : TRUE if tool bar is hidden, otherwise FALSE - /// - NPPM_ISTOOLBARHIDDEN = Constants.NPPMSG + 71, - - /// - /// BOOL NPPM_HIDEMENU(0, BOOL hideOrNot) - /// if hideOrNot is set as TRUE then menu will be hidden - /// otherwise it'll be shown. - /// return value : the old status value - /// - NPPM_HIDEMENU = Constants.NPPMSG + 72, - - /// - /// BOOL NPPM_ISMENUHIDDEN(0, 0) - /// returned value : TRUE if menu is hidden, otherwise FALSE - /// - NPPM_ISMENUHIDDEN = Constants.NPPMSG + 73, - - /// - /// BOOL NPPM_HIDESTATUSBAR(0, BOOL hideOrNot) - /// if hideOrNot is set as TRUE then STATUSBAR will be hidden - /// otherwise it'll be shown. - /// return value : the old status value - /// - NPPM_HIDESTATUSBAR = Constants.NPPMSG + 74, - - /// - /// BOOL NPPM_ISSTATUSBARHIDDEN(0, 0) - /// returned value : TRUE if STATUSBAR is hidden, otherwise FALSE - /// - NPPM_ISSTATUSBARHIDDEN = Constants.NPPMSG + 75, - - /// - /// BOOL NPPM_GETSHORTCUTBYCMDID(int cmdID, ShortcutKey *sk) - /// get your plugin command current mapped shortcut into sk via cmdID - /// You may need it after getting NPPN_READY notification - /// returned value : TRUE if this function call is successful and shortcut is enable, otherwise FALSE - /// - NPPM_GETSHORTCUTBYCMDID = Constants.NPPMSG + 76, - - /// - /// BOOL NPPM_DOOPEN(0, const TCHAR *fullPathName2Open) - /// fullPathName2Open indicates the full file path name to be opened. - /// The return value is TRUE (1) if the operation is successful, otherwise FALSE (0). - /// - NPPM_DOOPEN = Constants.NPPMSG + 77, - - /// - /// BOOL NPPM_SAVECURRENTFILEAS (BOOL asCopy, const TCHAR* filename) - /// - NPPM_SAVECURRENTFILEAS = Constants.NPPMSG + 78, - - /// - /// INT NPPM_GETCURRENTNATIVELANGENCODING(0, 0) - /// returned value : the current native language encoding - /// - NPPM_GETCURRENTNATIVELANGENCODING = Constants.NPPMSG + 79, - - /// - /// returns TRUE if NPPM_ALLOCATECMDID is supported - /// Use to identify if subclassing is necessary - /// - NPPM_ALLOCATESUPPORTED = Constants.NPPMSG + 80, - - /// - /// BOOL NPPM_ALLOCATECMDID(int numberRequested, int* startNumber) - /// sets startNumber to the initial command ID if successful - /// Returns: TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful - /// - NPPM_ALLOCATECMDID = Constants.NPPMSG + 81, - - /// - /// BOOL NPPM_ALLOCATEMARKER(int numberRequested, int* startNumber) - /// sets startNumber to the initial command ID if successful - /// Allocates a marker number to a plugin - /// Returns: TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful - /// - NPPM_ALLOCATEMARKER = Constants.NPPMSG + 82, - - /// - /// INT NPPM_GETLANGUAGENAME(int langType, TCHAR *langName) - /// Get programming language name from the given language type (LangType) - /// Return value is the number of copied character / number of character to copy (\0 is not included) - /// You should call this function 2 times - the first time you pass langName as NULL to get the number of characters to copy. - /// You allocate a buffer of the length of (the number of characters + 1) then call NPPM_GETLANGUAGENAME function the 2nd time - /// by passing allocated buffer as argument langName - /// - NPPM_GETLANGUAGENAME = Constants.NPPMSG + 83, - - /// - /// INT NPPM_GETLANGUAGEDESC(int langType, TCHAR *langDesc) - /// Get programming language short description from the given language type (LangType) - /// Return value is the number of copied character / number of character to copy (\0 is not included) - /// You should call this function 2 times - the first time you pass langDesc as NULL to get the number of characters to copy. - /// You allocate a buffer of the length of (the number of characters + 1) then call NPPM_GETLANGUAGEDESC function the 2nd time - /// by passing allocated buffer as argument langDesc - /// - NPPM_GETLANGUAGEDESC = Constants.NPPMSG + 84, - - /// - /// VOID NPPM_SHOWDOCSWITCHER(0, BOOL toShowOrNot) - /// Send this message to show or hide doc switcher. - /// if toShowOrNot is TRUE then show doc switcher, otherwise hide it. - /// - NPPM_SHOWDOCSWITCHER = Constants.NPPMSG + 85, - - /// - /// BOOL NPPM_ISDOCSWITCHERSHOWN(0, 0) - /// Check to see if doc switcher is shown. - /// - NPPM_ISDOCSWITCHERSHOWN = Constants.NPPMSG + 86, - - /// - /// BOOL NPPM_GETAPPDATAPLUGINSALLOWED(0, 0) - /// Check to see if loading plugins from "%APPDATA%\..\Local\Notepad++\plugins" is allowed. - /// - NPPM_GETAPPDATAPLUGINSALLOWED = Constants.NPPMSG + 87, - - /// - /// INT NPPM_GETCURRENTVIEW(0, 0) - /// Return: current edit view of Notepad++. Only 2 possible values: 0 = Main, 1 = Secondary - /// - NPPM_GETCURRENTVIEW = Constants.NPPMSG + 88, - - /// - /// VOID NPPM_DOCSWITCHERDISABLECOLUMN(0, BOOL disableOrNot) - /// Disable or enable extension column of doc switcher - /// - NPPM_DOCSWITCHERDISABLECOLUMN = Constants.NPPMSG + 89, - - /// - /// INT NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR(0, 0) - /// Return: current editor default foreground color. You should convert the returned value in COLORREF - /// - NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR = Constants.NPPMSG + 90, - - /// - /// INT NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR(0, 0) - /// Return: current editor default background color. You should convert the returned value in COLORREF - /// - NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR = Constants.NPPMSG + 91, - - /// - /// VOID NPPM_SETSMOOTHFONT(0, BOOL setSmoothFontOrNot) - /// - NPPM_SETSMOOTHFONT = Constants.NPPMSG + 92, - - /// - /// VOID NPPM_SETEDITORBORDEREDGE(0, BOOL withEditorBorderEdgeOrNot) - /// - NPPM_SETEDITORBORDEREDGE = Constants.NPPMSG + 93, - - /// - /// VOID NPPM_SAVEFILE(0, const TCHAR *fileNameToSave) - /// - NPPM_SAVEFILE = Constants.NPPMSG + 94, - - /// - /// VOID NPPM_DISABLEAUTOUPDATE(0, 0) - /// - NPPM_DISABLEAUTOUPDATE = Constants.NPPMSG + 95, - - /// - /// BOOL NPPM_REMOVESHORTCUTASSIGNMENT(int cmdID) - /// removes the assigned shortcut mapped to cmdID - /// returned value : TRUE if function call is successful, otherwise FALSE - /// - NPPM_REMOVESHORTCUTBYCMDID = Constants.NPPMSG + 96, - - /// - /// INT NPPM_GETPLUGINHOMEPATH(size_t strLen, TCHAR *pluginRootPath) - /// Get plugin home root path. It's useful if plugins want to get its own path - /// by appending which is the name of plugin without extension part. - /// Returns the number of TCHAR copied/to copy. - /// Users should call it with pluginRootPath be NULL to get the required number of TCHAR (not including the terminating nul character), - /// allocate pluginRootPath buffer with the return value + 1, then call it again to get the path. - /// - NPPM_GETPLUGINHOMEPATH = Constants.NPPMSG + 97, - - RUNCOMMAND_USER = Constants.WM_USER + 3000, - NPPM_GETFULLCURRENTPATH = RUNCOMMAND_USER + FULL_CURRENT_PATH, - NPPM_GETCURRENTDIRECTORY = RUNCOMMAND_USER + CURRENT_DIRECTORY, - NPPM_GETFILENAME = RUNCOMMAND_USER + FILE_NAME, - NPPM_GETNAMEPART = RUNCOMMAND_USER + NAME_PART, - NPPM_GETEXTPART = RUNCOMMAND_USER + EXT_PART, - NPPM_GETCURRENTWORD = RUNCOMMAND_USER + CURRENT_WORD, - NPPM_GETNPPDIRECTORY = RUNCOMMAND_USER + NPP_DIRECTORY, - /// - /// BOOL NPPM_GETXXXXXXXXXXXXXXXX(size_t strLen, TCHAR *str) - /// where str is the allocated TCHAR array, - /// strLen is the allocated array size - /// The return value is TRUE when get generic_string operation success - /// Otherwise (allocated array size is too small) FALSE - /// - NPPM_GETFILENAMEATCURSOR = RUNCOMMAND_USER + GETFILENAMEATCURSOR, - - /// - /// INT NPPM_GETCURRENTLINE(0, 0) - /// return the caret current position line - /// - NPPM_GETCURRENTLINE = RUNCOMMAND_USER + CURRENT_LINE, - - /// - /// INT NPPM_GETCURRENTCOLUMN(0, 0) - /// return the caret current position column - /// - NPPM_GETCURRENTCOLUMN = RUNCOMMAND_USER + CURRENT_COLUMN, - - NPPM_GETNPPFULLFILEPATH = RUNCOMMAND_USER + NPP_FULL_FILE_PATH, - - VAR_NOT_RECOGNIZED = 0, - FULL_CURRENT_PATH = 1, - CURRENT_DIRECTORY = 2, - FILE_NAME = 3, - NAME_PART = 4, - EXT_PART = 5, - CURRENT_WORD = 6, - NPP_DIRECTORY = 7, - CURRENT_LINE = 8, - CURRENT_COLUMN = 9, - NPP_FULL_FILE_PATH = 10, - GETFILENAMEATCURSOR = 11, - - /// - /// To notify plugins that all the procedures of launchment of notepad++ are done. - ///scnNotification->nmhdr.code = NPPN_READY; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = 0; - /// - NPPN_FIRST = 1000, - /// - ///scnNotification->nmhdr.code = NPPN_READY; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = 0; - /// - NPPN_READY = NPPN_FIRST + 1, - - /// - ///scnNotification->nmhdr.code = NPPN_TB_MODIFICATION; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = 0; - /// - NPPN_TBMODIFICATION = NPPN_FIRST + 2, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEBEFORECLOSE; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILEBEFORECLOSE = NPPN_FIRST + 3, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEOPENED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILEOPENED = NPPN_FIRST + 4, - - /// - ///scnNotification->nmhdr.code = NPPN_FILECLOSED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILECLOSED = NPPN_FIRST + 5, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILEBEFOREOPEN = NPPN_FIRST + 6, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILEBEFORESAVE = NPPN_FIRST + 7, - - /// - ///scnNotification->nmhdr.code = NPPN_FILESAVED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILESAVED = NPPN_FIRST + 8, - - /// - ///scnNotification->nmhdr.code = NPPN_SHUTDOWN; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = 0; - /// - NPPN_SHUTDOWN = NPPN_FIRST + 9, - - /// - ///scnNotification->nmhdr.code = NPPN_BUFFERACTIVATED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = activatedBufferID; - /// - NPPN_BUFFERACTIVATED = NPPN_FIRST + 10, - - /// - ///scnNotification->nmhdr.code = NPPN_LANGCHANGED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = currentBufferID; - /// - NPPN_LANGCHANGED = NPPN_FIRST + 11, - - /// - ///scnNotification->nmhdr.code = NPPN_WORDSTYLESUPDATED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = currentBufferID; - /// - NPPN_WORDSTYLESUPDATED = NPPN_FIRST + 12, - - /// - ///scnNotification->nmhdr.code = NPPN_SHORTCUTSREMAPPED; - ///scnNotification->nmhdr.hwndFrom = ShortcutKeyStructurePointer; - ///scnNotification->nmhdr.idFrom = cmdID; - ///where ShortcutKeyStructurePointer is pointer of struct ShortcutKey: - ///struct ShortcutKey { - /// bool _isCtrl; - /// bool _isAlt; - /// bool _isShift; - /// UCHAR _key; - ///}; - /// - NPPN_SHORTCUTREMAPPED = NPPN_FIRST + 13, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = NULL; - /// - NPPN_FILEBEFORELOAD = NPPN_FIRST + 14, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEOPENFAILED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILELOADFAILED = NPPN_FIRST + 15, - - /// - ///scnNotification->nmhdr.code = NPPN_READONLYCHANGED; - ///scnNotification->nmhdr.hwndFrom = bufferID; - ///scnNotification->nmhdr.idFrom = docStatus; - /// where bufferID is BufferID - /// docStatus can be combined by DOCSTATUS_READONLY and DOCSTATUS_BUFFERDIRTY - /// - NPPN_READONLYCHANGED = NPPN_FIRST + 16, - - DOCSTATUS_READONLY = 1, - DOCSTATUS_BUFFERDIRTY = 2, - - /// - ///scnNotification->nmhdr.code = NPPN_DOCORDERCHANGED; - ///scnNotification->nmhdr.hwndFrom = newIndex; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_DOCORDERCHANGED = NPPN_FIRST + 17, - - /// - ///scnNotification->nmhdr.code = NPPN_SNAPSHOTDIRTYFILELOADED; - ///scnNotification->nmhdr.hwndFrom = NULL; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_SNAPSHOTDIRTYFILELOADED = NPPN_FIRST + 18, - - /// - ///scnNotification->nmhdr.code = NPPN_BEFORESHUTDOWN; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = 0; - /// - NPPN_BEFORESHUTDOWN = NPPN_FIRST + 19, - - /// - ///scnNotification->nmhdr.code = NPPN_CANCELSHUTDOWN; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = 0; - /// - NPPN_CANCELSHUTDOWN = NPPN_FIRST + 20, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEBEFORERENAME; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILEBEFORERENAME = NPPN_FIRST + 21, - - /// - ///scnNotification->nmhdr.code = NPPN_FILERENAMECANCEL; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILERENAMECANCEL = NPPN_FIRST + 22, - - /// - ///scnNotification->nmhdr.code = NPPN_FILERENAMED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILERENAMED = NPPN_FIRST + 23, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEBEFOREDELETE; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILEBEFOREDELETE = NPPN_FIRST + 24, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEDELETEFAILED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILEDELETEFAILED = NPPN_FIRST + 25, - - /// - ///scnNotification->nmhdr.code = NPPN_FILEDELETED; - ///scnNotification->nmhdr.hwndFrom = hwndNpp; - ///scnNotification->nmhdr.idFrom = BufferID; - /// - NPPN_FILEDELETED = NPPN_FIRST + 26, - - /* --Autogenerated -- end of section automatically generated from notepad-plus-plus\PowerEditor\src\MISC\PluginsManager\Notepad_plus_msgs.h * */ - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +// +// This file should stay in sync with the CPP project file +// "notepad-plus-plus/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h" +// found at +// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h + +using System; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + class Constants + { + public const int WM_USER = 0x400; + public const int NPPMSG = WM_USER + 1000; + } + + public enum LangType + { + L_TEXT, L_PHP, L_C, L_CPP, L_CS, L_OBJC, L_JAVA, L_RC, + L_HTML, L_XML, L_MAKEFILE, L_PASCAL, L_BATCH, L_INI, L_ASCII, L_USER, + L_ASP, L_SQL, L_VB, L_JS, L_CSS, L_PERL, L_PYTHON, L_LUA, + L_TEX, L_FORTRAN, L_BASH, L_FLASH, L_NSIS, L_TCL, L_LISP, L_SCHEME, + L_ASM, L_DIFF, L_PROPS, L_PS, L_RUBY, L_SMALLTALK, L_VHDL, L_KIX, L_AU3, + L_CAML, L_ADA, L_VERILOG, L_MATLAB, L_HASKELL, L_INNO, L_SEARCHRESULT, + L_CMAKE, L_YAML, L_COBOL, L_GUI4CLI, L_D, L_POWERSHELL, L_R, L_JSP, + L_COFFEESCRIPT, L_JSON, L_JAVASCRIPT, L_FORTRAN_77, + // Don't use L_JS, use L_JAVASCRIPT instead + // The end of enumated language type, so it should be always at the end + L_EXTERNAL + } + + [Flags] + public enum NppMsg : uint + { + /* ++Autogenerated -- start of section automatically generated from notepad-plus-plus\PowerEditor\src\MISC\PluginsManager\Notepad_plus_msgs.h */ + + NPPMSG = Constants.WM_USER + 1000, + + NPPM_GETCURRENTSCINTILLA = Constants.NPPMSG + 4, + NPPM_GETCURRENTLANGTYPE = Constants.NPPMSG + 5, + NPPM_SETCURRENTLANGTYPE = Constants.NPPMSG + 6, + + NPPM_GETNBOPENFILES = Constants.NPPMSG + 7, + ALL_OPEN_FILES = 0, + PRIMARY_VIEW = 1, + SECOND_VIEW = 2, + + NPPM_GETOPENFILENAMES = Constants.NPPMSG + 8, + + NPPM_MODELESSDIALOG = Constants.NPPMSG + 12, + MODELESSDIALOGADD = 0, + MODELESSDIALOGREMOVE = 1, + + NPPM_GETNBSESSIONFILES = Constants.NPPMSG + 13, + NPPM_GETSESSIONFILES = Constants.NPPMSG + 14, + NPPM_SAVESESSION = Constants.NPPMSG + 15, + NPPM_SAVECURRENTSESSION = Constants.NPPMSG + 16, + + NPPM_GETOPENFILENAMESPRIMARY = Constants.NPPMSG + 17, + NPPM_GETOPENFILENAMESSECOND = Constants.NPPMSG + 18, + + NPPM_CREATESCINTILLAHANDLE = Constants.NPPMSG + 20, + NPPM_DESTROYSCINTILLAHANDLE = Constants.NPPMSG + 21, + NPPM_GETNBUSERLANG = Constants.NPPMSG + 22, + + NPPM_GETCURRENTDOCINDEX = Constants.NPPMSG + 23, + MAIN_VIEW = 0, + SUB_VIEW = 1, + + NPPM_SETSTATUSBAR = Constants.NPPMSG + 24, + STATUSBAR_DOC_TYPE = 0, + STATUSBAR_DOC_SIZE = 1, + STATUSBAR_CUR_POS = 2, + STATUSBAR_EOF_FORMAT = 3, + STATUSBAR_UNICODE_TYPE = 4, + STATUSBAR_TYPING_MODE = 5, + + NPPM_GETMENUHANDLE = Constants.NPPMSG + 25, + NPPPLUGINMENU = 0, + /// + /// INT NPPM_GETMENUHANDLE(INT menuChoice, 0) + /// Return: menu handle (HMENU) of choice (plugin menu handle or Notepad++ main menu handle) + /// + NPPMAINMENU = 1, + + /// + ///ascii file to unicode + ///int NPPM_ENCODESCI(MAIN_VIEW/SUB_VIEW, 0) + ///return new unicodeMode + /// + NPPM_ENCODESCI = Constants.NPPMSG + 26, + + /// + ///unicode file to ascii + ///int NPPM_DECODESCI(MAIN_VIEW/SUB_VIEW, 0) + ///return old unicodeMode + /// + NPPM_DECODESCI = Constants.NPPMSG + 27, + + /// + ///void NPPM_ACTIVATEDOC(int view, int index2Activate) + /// + NPPM_ACTIVATEDOC = Constants.NPPMSG + 28, + + /// + ///void NPPM_LAUNCHFINDINFILESDLG(TCHAR * dir2Search, TCHAR * filtre) + /// + NPPM_LAUNCHFINDINFILESDLG = Constants.NPPMSG + 29, + + /// + ///void NPPM_DMMSHOW(0, tTbData->hClient) + /// + NPPM_DMMSHOW = Constants.NPPMSG + 30, + + /// + ///void NPPM_DMMHIDE(0, tTbData->hClient) + /// + NPPM_DMMHIDE = Constants.NPPMSG + 31, + + /// + ///void NPPM_DMMUPDATEDISPINFO(0, tTbData->hClient) + /// + NPPM_DMMUPDATEDISPINFO = Constants.NPPMSG + 32, + + /// + ///void NPPM_DMMREGASDCKDLG(0, &tTbData) + /// + NPPM_DMMREGASDCKDLG = Constants.NPPMSG + 33, + + /// + ///void NPPM_LOADSESSION(0, const TCHAR* file name) + /// + NPPM_LOADSESSION = Constants.NPPMSG + 34, + + /// + ///void WM_DMM_VIEWOTHERTAB(0, tTbData->pszName) + /// + NPPM_DMMVIEWOTHERTAB = Constants.NPPMSG + 35, + + /// + ///BOOL NPPM_RELOADFILE(BOOL withAlert, TCHAR *filePathName2Reload) + /// + NPPM_RELOADFILE = Constants.NPPMSG + 36, + + /// + ///BOOL NPPM_SWITCHTOFILE(0, TCHAR *filePathName2switch) + /// + NPPM_SWITCHTOFILE = Constants.NPPMSG + 37, + + /// + ///BOOL NPPM_SAVECURRENTFILE(0, 0) + /// + NPPM_SAVECURRENTFILE = Constants.NPPMSG + 38, + + /// + ///BOOL NPPM_SAVEALLFILES(0, 0) + /// + NPPM_SAVEALLFILES = Constants.NPPMSG + 39, + + /// + ///void WM_PIMENU_CHECK(UINT funcItem[X]._cmdID, TRUE/FALSE) + /// + NPPM_SETMENUITEMCHECK = Constants.NPPMSG + 40, + + /// + ///void WM_ADDTOOLBARICON(UINT funcItem[X]._cmdID, toolbarIcons icon) + /// + NPPM_ADDTOOLBARICON = Constants.NPPMSG + 41, + + /// + ///winVer NPPM_GETWINDOWSVERSION(0, 0) + /// + NPPM_GETWINDOWSVERSION = Constants.NPPMSG + 42, + + /// + ///HWND WM_DMM_GETPLUGINHWNDBYNAME(const TCHAR *windowName, const TCHAR *moduleName) + /// if moduleName is NULL, then return value is NULL + /// if windowName is NULL, then the first found window handle which matches with the moduleName will be returned + /// + NPPM_DMMGETPLUGINHWNDBYNAME = Constants.NPPMSG + 43, + + /// + ///BOOL NPPM_MAKECURRENTBUFFERDIRTY(0, 0) + /// + NPPM_MAKECURRENTBUFFERDIRTY = Constants.NPPMSG + 44, + + /// + ///BOOL NPPM_GETENABLETHEMETEXTUREFUNC(0, 0) + /// + NPPM_GETENABLETHEMETEXTUREFUNC = Constants.NPPMSG + 45, + + /// + ///INT NPPM_GETPLUGINSCONFIGDIR(int strLen, TCHAR *str) + /// Get user's plugin config directory path. It's useful if plugins want to save/load parameters for the current user + /// Returns the number of TCHAR copied/to copy. + /// Users should call it with "str" be NULL to get the required number of TCHAR (not including the terminating nul character), + /// allocate "str" buffer with the return value + 1, then call it again to get the path. + /// + NPPM_GETPLUGINSCONFIGDIR = Constants.NPPMSG + 46, + + /// + ///BOOL NPPM_MSGTOPLUGIN(TCHAR *destModuleName, CommunicationInfo *info) + /// return value is TRUE when the message arrive to the destination plugins. + /// if destModule or info is NULL, then return value is FALSE + /// + NPPM_MSGTOPLUGIN = Constants.NPPMSG + 47, + + /// + ///void NPPM_MENUCOMMAND(0, int cmdID) + /// uncomment //#include "menuCmdID.h" + /// in the beginning of this file then use the command symbols defined in "menuCmdID.h" file + /// to access all the Notepad++ menu command items + /// + NPPM_MENUCOMMAND = Constants.NPPMSG + 48, + + /// + ///void NPPM_TRIGGERTABBARCONTEXTMENU(int view, int index2Activate) + /// + NPPM_TRIGGERTABBARCONTEXTMENU = Constants.NPPMSG + 49, + + /// + /// int NPPM_GETNPPVERSION(0, 0) + /// return version + /// ex : v4.6 + /// HIWORD(version) == 4 + /// LOWORD(version) == 6 + /// + NPPM_GETNPPVERSION = Constants.NPPMSG + 50, + + /// + /// BOOL NPPM_HIDETABBAR(0, BOOL hideOrNot) + /// if hideOrNot is set as TRUE then tab bar will be hidden + /// otherwise it'll be shown. + /// return value : the old status value + /// + NPPM_HIDETABBAR = Constants.NPPMSG + 51, + + /// + /// BOOL NPPM_ISTABBARHIDDEN(0, 0) + /// returned value : TRUE if tab bar is hidden, otherwise FALSE + /// + NPPM_ISTABBARHIDDEN = Constants.NPPMSG + 52, + + /// + /// INT NPPM_GETPOSFROMBUFFERID(UINT_PTR bufferID, INT priorityView) + /// Return VIEW|INDEX from a buffer ID. -1 if the bufferID non existing + /// if priorityView set to SUB_VIEW, then SUB_VIEW will be search firstly + /// + /// VIEW takes 2 highest bits and INDEX (0 based) takes the rest (30 bits) + /// Here's the values for the view : + /// MAIN_VIEW 0 + /// SUB_VIEW 1 + /// + NPPM_GETPOSFROMBUFFERID = Constants.NPPMSG + 57, + + /// + /// INT NPPM_GETFULLPATHFROMBUFFERID(UINT_PTR bufferID, TCHAR *fullFilePath) + /// Get full path file name from a bufferID. + /// Return -1 if the bufferID non existing, otherwise the number of TCHAR copied/to copy + /// User should call it with fullFilePath be NULL to get the number of TCHAR (not including the nul character), + /// allocate fullFilePath with the return values + 1, then call it again to get full path file name + /// + NPPM_GETFULLPATHFROMBUFFERID = Constants.NPPMSG + 58, + + /// + /// LRESULT NPPM_GETBUFFERIDFROMPOS(INT index, INT iView) + /// wParam: Position of document + /// lParam: View to use, 0 = Main, 1 = Secondary + /// Returns 0 if invalid + /// + NPPM_GETBUFFERIDFROMPOS = Constants.NPPMSG + 59, + + /// + /// LRESULT NPPM_GETCURRENTBUFFERID(0, 0) + /// Returns active Buffer + /// + NPPM_GETCURRENTBUFFERID = Constants.NPPMSG + 60, + + /// + /// VOID NPPM_RELOADBUFFERID(UINT_PTR bufferID, BOOL alert) + /// Reloads Buffer + /// wParam: Buffer to reload + /// lParam: 0 if no alert, else alert + /// + NPPM_RELOADBUFFERID = Constants.NPPMSG + 61, + + /// + /// INT NPPM_GETBUFFERLANGTYPE(UINT_PTR bufferID, 0) + /// wParam: BufferID to get LangType from + /// lParam: 0 + /// Returns as int, see LangType. -1 on error + /// + NPPM_GETBUFFERLANGTYPE = Constants.NPPMSG + 64, + + /// + /// BOOL NPPM_SETBUFFERLANGTYPE(UINT_PTR bufferID, INT langType) + /// wParam: BufferID to set LangType of + /// lParam: LangType + /// Returns TRUE on success, FALSE otherwise + /// use int, see LangType for possible values + /// L_USER and L_EXTERNAL are not supported + /// + NPPM_SETBUFFERLANGTYPE = Constants.NPPMSG + 65, + + /// + /// INT NPPM_GETBUFFERENCODING(UINT_PTR bufferID, 0) + /// wParam: BufferID to get encoding from + /// lParam: 0 + /// returns as int, see UniMode. -1 on error + /// + NPPM_GETBUFFERENCODING = Constants.NPPMSG + 66, + + /// + /// BOOL NPPM_SETBUFFERENCODING(UINT_PTR bufferID, INT encoding) + /// wParam: BufferID to set encoding of + /// lParam: encoding + /// Returns TRUE on success, FALSE otherwise + /// use int, see UniMode + /// Can only be done on new, unedited files + /// + NPPM_SETBUFFERENCODING = Constants.NPPMSG + 67, + + /// + /// INT NPPM_GETBUFFERFORMAT(UINT_PTR bufferID, 0) + /// wParam: BufferID to get EolType format from + /// lParam: 0 + /// returns as int, see EolType format. -1 on error + /// + NPPM_GETBUFFERFORMAT = Constants.NPPMSG + 68, + + /// + /// BOOL NPPM_SETBUFFERFORMAT(UINT_PTR bufferID, INT format) + /// wParam: BufferID to set EolType format of + /// lParam: format + /// Returns TRUE on success, FALSE otherwise + /// use int, see EolType format + /// + NPPM_SETBUFFERFORMAT = Constants.NPPMSG + 69, + + /// + /// BOOL NPPM_HIDETOOLBAR(0, BOOL hideOrNot) + /// if hideOrNot is set as TRUE then tool bar will be hidden + /// otherwise it'll be shown. + /// return value : the old status value + /// + NPPM_HIDETOOLBAR = Constants.NPPMSG + 70, + + /// + /// BOOL NPPM_ISTOOLBARHIDDEN(0, 0) + /// returned value : TRUE if tool bar is hidden, otherwise FALSE + /// + NPPM_ISTOOLBARHIDDEN = Constants.NPPMSG + 71, + + /// + /// BOOL NPPM_HIDEMENU(0, BOOL hideOrNot) + /// if hideOrNot is set as TRUE then menu will be hidden + /// otherwise it'll be shown. + /// return value : the old status value + /// + NPPM_HIDEMENU = Constants.NPPMSG + 72, + + /// + /// BOOL NPPM_ISMENUHIDDEN(0, 0) + /// returned value : TRUE if menu is hidden, otherwise FALSE + /// + NPPM_ISMENUHIDDEN = Constants.NPPMSG + 73, + + /// + /// BOOL NPPM_HIDESTATUSBAR(0, BOOL hideOrNot) + /// if hideOrNot is set as TRUE then STATUSBAR will be hidden + /// otherwise it'll be shown. + /// return value : the old status value + /// + NPPM_HIDESTATUSBAR = Constants.NPPMSG + 74, + + /// + /// BOOL NPPM_ISSTATUSBARHIDDEN(0, 0) + /// returned value : TRUE if STATUSBAR is hidden, otherwise FALSE + /// + NPPM_ISSTATUSBARHIDDEN = Constants.NPPMSG + 75, + + /// + /// BOOL NPPM_GETSHORTCUTBYCMDID(int cmdID, ShortcutKey *sk) + /// get your plugin command current mapped shortcut into sk via cmdID + /// You may need it after getting NPPN_READY notification + /// returned value : TRUE if this function call is successful and shortcut is enable, otherwise FALSE + /// + NPPM_GETSHORTCUTBYCMDID = Constants.NPPMSG + 76, + + /// + /// BOOL NPPM_DOOPEN(0, const TCHAR *fullPathName2Open) + /// fullPathName2Open indicates the full file path name to be opened. + /// The return value is TRUE (1) if the operation is successful, otherwise FALSE (0). + /// + NPPM_DOOPEN = Constants.NPPMSG + 77, + + /// + /// BOOL NPPM_SAVECURRENTFILEAS (BOOL asCopy, const TCHAR* filename) + /// + NPPM_SAVECURRENTFILEAS = Constants.NPPMSG + 78, + + /// + /// INT NPPM_GETCURRENTNATIVELANGENCODING(0, 0) + /// returned value : the current native language encoding + /// + NPPM_GETCURRENTNATIVELANGENCODING = Constants.NPPMSG + 79, + + /// + /// returns TRUE if NPPM_ALLOCATECMDID is supported + /// Use to identify if subclassing is necessary + /// + NPPM_ALLOCATESUPPORTED = Constants.NPPMSG + 80, + + /// + /// BOOL NPPM_ALLOCATECMDID(int numberRequested, int* startNumber) + /// sets startNumber to the initial command ID if successful + /// Returns: TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful + /// + NPPM_ALLOCATECMDID = Constants.NPPMSG + 81, + + /// + /// BOOL NPPM_ALLOCATEMARKER(int numberRequested, int* startNumber) + /// sets startNumber to the initial command ID if successful + /// Allocates a marker number to a plugin + /// Returns: TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful + /// + NPPM_ALLOCATEMARKER = Constants.NPPMSG + 82, + + /// + /// INT NPPM_GETLANGUAGENAME(int langType, TCHAR *langName) + /// Get programming language name from the given language type (LangType) + /// Return value is the number of copied character / number of character to copy (\0 is not included) + /// You should call this function 2 times - the first time you pass langName as NULL to get the number of characters to copy. + /// You allocate a buffer of the length of (the number of characters + 1) then call NPPM_GETLANGUAGENAME function the 2nd time + /// by passing allocated buffer as argument langName + /// + NPPM_GETLANGUAGENAME = Constants.NPPMSG + 83, + + /// + /// INT NPPM_GETLANGUAGEDESC(int langType, TCHAR *langDesc) + /// Get programming language short description from the given language type (LangType) + /// Return value is the number of copied character / number of character to copy (\0 is not included) + /// You should call this function 2 times - the first time you pass langDesc as NULL to get the number of characters to copy. + /// You allocate a buffer of the length of (the number of characters + 1) then call NPPM_GETLANGUAGEDESC function the 2nd time + /// by passing allocated buffer as argument langDesc + /// + NPPM_GETLANGUAGEDESC = Constants.NPPMSG + 84, + + /// + /// VOID NPPM_SHOWDOCSWITCHER(0, BOOL toShowOrNot) + /// Send this message to show or hide doc switcher. + /// if toShowOrNot is TRUE then show doc switcher, otherwise hide it. + /// + NPPM_SHOWDOCSWITCHER = Constants.NPPMSG + 85, + + /// + /// BOOL NPPM_ISDOCSWITCHERSHOWN(0, 0) + /// Check to see if doc switcher is shown. + /// + NPPM_ISDOCSWITCHERSHOWN = Constants.NPPMSG + 86, + + /// + /// BOOL NPPM_GETAPPDATAPLUGINSALLOWED(0, 0) + /// Check to see if loading plugins from "%APPDATA%\..\Local\Notepad++\plugins" is allowed. + /// + NPPM_GETAPPDATAPLUGINSALLOWED = Constants.NPPMSG + 87, + + /// + /// INT NPPM_GETCURRENTVIEW(0, 0) + /// Return: current edit view of Notepad++. Only 2 possible values: 0 = Main, 1 = Secondary + /// + NPPM_GETCURRENTVIEW = Constants.NPPMSG + 88, + + /// + /// VOID NPPM_DOCSWITCHERDISABLECOLUMN(0, BOOL disableOrNot) + /// Disable or enable extension column of doc switcher + /// + NPPM_DOCSWITCHERDISABLECOLUMN = Constants.NPPMSG + 89, + + /// + /// INT NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR(0, 0) + /// Return: current editor default foreground color. You should convert the returned value in COLORREF + /// + NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR = Constants.NPPMSG + 90, + + /// + /// INT NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR(0, 0) + /// Return: current editor default background color. You should convert the returned value in COLORREF + /// + NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR = Constants.NPPMSG + 91, + + /// + /// VOID NPPM_SETSMOOTHFONT(0, BOOL setSmoothFontOrNot) + /// + NPPM_SETSMOOTHFONT = Constants.NPPMSG + 92, + + /// + /// VOID NPPM_SETEDITORBORDEREDGE(0, BOOL withEditorBorderEdgeOrNot) + /// + NPPM_SETEDITORBORDEREDGE = Constants.NPPMSG + 93, + + /// + /// VOID NPPM_SAVEFILE(0, const TCHAR *fileNameToSave) + /// + NPPM_SAVEFILE = Constants.NPPMSG + 94, + + /// + /// VOID NPPM_DISABLEAUTOUPDATE(0, 0) + /// + NPPM_DISABLEAUTOUPDATE = Constants.NPPMSG + 95, + + /// + /// BOOL NPPM_REMOVESHORTCUTASSIGNMENT(int cmdID) + /// removes the assigned shortcut mapped to cmdID + /// returned value : TRUE if function call is successful, otherwise FALSE + /// + NPPM_REMOVESHORTCUTBYCMDID = Constants.NPPMSG + 96, + + /// + /// INT NPPM_GETPLUGINHOMEPATH(size_t strLen, TCHAR *pluginRootPath) + /// Get plugin home root path. It's useful if plugins want to get its own path + /// by appending which is the name of plugin without extension part. + /// Returns the number of TCHAR copied/to copy. + /// Users should call it with pluginRootPath be NULL to get the required number of TCHAR (not including the terminating nul character), + /// allocate pluginRootPath buffer with the return value + 1, then call it again to get the path. + /// + NPPM_GETPLUGINHOMEPATH = Constants.NPPMSG + 97, + + RUNCOMMAND_USER = Constants.WM_USER + 3000, + NPPM_GETFULLCURRENTPATH = RUNCOMMAND_USER + FULL_CURRENT_PATH, + NPPM_GETCURRENTDIRECTORY = RUNCOMMAND_USER + CURRENT_DIRECTORY, + NPPM_GETFILENAME = RUNCOMMAND_USER + FILE_NAME, + NPPM_GETNAMEPART = RUNCOMMAND_USER + NAME_PART, + NPPM_GETEXTPART = RUNCOMMAND_USER + EXT_PART, + NPPM_GETCURRENTWORD = RUNCOMMAND_USER + CURRENT_WORD, + NPPM_GETNPPDIRECTORY = RUNCOMMAND_USER + NPP_DIRECTORY, + /// + /// BOOL NPPM_GETXXXXXXXXXXXXXXXX(size_t strLen, TCHAR *str) + /// where str is the allocated TCHAR array, + /// strLen is the allocated array size + /// The return value is TRUE when get generic_string operation success + /// Otherwise (allocated array size is too small) FALSE + /// + NPPM_GETFILENAMEATCURSOR = RUNCOMMAND_USER + GETFILENAMEATCURSOR, + + /// + /// INT NPPM_GETCURRENTLINE(0, 0) + /// return the caret current position line + /// + NPPM_GETCURRENTLINE = RUNCOMMAND_USER + CURRENT_LINE, + + /// + /// INT NPPM_GETCURRENTCOLUMN(0, 0) + /// return the caret current position column + /// + NPPM_GETCURRENTCOLUMN = RUNCOMMAND_USER + CURRENT_COLUMN, + + NPPM_GETNPPFULLFILEPATH = RUNCOMMAND_USER + NPP_FULL_FILE_PATH, + + VAR_NOT_RECOGNIZED = 0, + FULL_CURRENT_PATH = 1, + CURRENT_DIRECTORY = 2, + FILE_NAME = 3, + NAME_PART = 4, + EXT_PART = 5, + CURRENT_WORD = 6, + NPP_DIRECTORY = 7, + CURRENT_LINE = 8, + CURRENT_COLUMN = 9, + NPP_FULL_FILE_PATH = 10, + GETFILENAMEATCURSOR = 11, + + /// + /// To notify plugins that all the procedures of launchment of notepad++ are done. + ///scnNotification->nmhdr.code = NPPN_READY; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = 0; + /// + NPPN_FIRST = 1000, + /// + ///scnNotification->nmhdr.code = NPPN_READY; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = 0; + /// + NPPN_READY = NPPN_FIRST + 1, + + /// + ///scnNotification->nmhdr.code = NPPN_TB_MODIFICATION; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = 0; + /// + NPPN_TBMODIFICATION = NPPN_FIRST + 2, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEBEFORECLOSE; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILEBEFORECLOSE = NPPN_FIRST + 3, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEOPENED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILEOPENED = NPPN_FIRST + 4, + + /// + ///scnNotification->nmhdr.code = NPPN_FILECLOSED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILECLOSED = NPPN_FIRST + 5, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILEBEFOREOPEN = NPPN_FIRST + 6, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILEBEFORESAVE = NPPN_FIRST + 7, + + /// + ///scnNotification->nmhdr.code = NPPN_FILESAVED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILESAVED = NPPN_FIRST + 8, + + /// + ///scnNotification->nmhdr.code = NPPN_SHUTDOWN; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = 0; + /// + NPPN_SHUTDOWN = NPPN_FIRST + 9, + + /// + ///scnNotification->nmhdr.code = NPPN_BUFFERACTIVATED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = activatedBufferID; + /// + NPPN_BUFFERACTIVATED = NPPN_FIRST + 10, + + /// + ///scnNotification->nmhdr.code = NPPN_LANGCHANGED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = currentBufferID; + /// + NPPN_LANGCHANGED = NPPN_FIRST + 11, + + /// + ///scnNotification->nmhdr.code = NPPN_WORDSTYLESUPDATED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = currentBufferID; + /// + NPPN_WORDSTYLESUPDATED = NPPN_FIRST + 12, + + /// + ///scnNotification->nmhdr.code = NPPN_SHORTCUTSREMAPPED; + ///scnNotification->nmhdr.hwndFrom = ShortcutKeyStructurePointer; + ///scnNotification->nmhdr.idFrom = cmdID; + ///where ShortcutKeyStructurePointer is pointer of struct ShortcutKey: + ///struct ShortcutKey { + /// bool _isCtrl; + /// bool _isAlt; + /// bool _isShift; + /// UCHAR _key; + ///}; + /// + NPPN_SHORTCUTREMAPPED = NPPN_FIRST + 13, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = NULL; + /// + NPPN_FILEBEFORELOAD = NPPN_FIRST + 14, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEOPENFAILED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILELOADFAILED = NPPN_FIRST + 15, + + /// + ///scnNotification->nmhdr.code = NPPN_READONLYCHANGED; + ///scnNotification->nmhdr.hwndFrom = bufferID; + ///scnNotification->nmhdr.idFrom = docStatus; + /// where bufferID is BufferID + /// docStatus can be combined by DOCSTATUS_READONLY and DOCSTATUS_BUFFERDIRTY + /// + NPPN_READONLYCHANGED = NPPN_FIRST + 16, + + DOCSTATUS_READONLY = 1, + DOCSTATUS_BUFFERDIRTY = 2, + + /// + ///scnNotification->nmhdr.code = NPPN_DOCORDERCHANGED; + ///scnNotification->nmhdr.hwndFrom = newIndex; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_DOCORDERCHANGED = NPPN_FIRST + 17, + + /// + ///scnNotification->nmhdr.code = NPPN_SNAPSHOTDIRTYFILELOADED; + ///scnNotification->nmhdr.hwndFrom = NULL; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_SNAPSHOTDIRTYFILELOADED = NPPN_FIRST + 18, + + /// + ///scnNotification->nmhdr.code = NPPN_BEFORESHUTDOWN; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = 0; + /// + NPPN_BEFORESHUTDOWN = NPPN_FIRST + 19, + + /// + ///scnNotification->nmhdr.code = NPPN_CANCELSHUTDOWN; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = 0; + /// + NPPN_CANCELSHUTDOWN = NPPN_FIRST + 20, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEBEFORERENAME; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILEBEFORERENAME = NPPN_FIRST + 21, + + /// + ///scnNotification->nmhdr.code = NPPN_FILERENAMECANCEL; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILERENAMECANCEL = NPPN_FIRST + 22, + + /// + ///scnNotification->nmhdr.code = NPPN_FILERENAMED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILERENAMED = NPPN_FIRST + 23, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEBEFOREDELETE; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILEBEFOREDELETE = NPPN_FIRST + 24, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEDELETEFAILED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILEDELETEFAILED = NPPN_FIRST + 25, + + /// + ///scnNotification->nmhdr.code = NPPN_FILEDELETED; + ///scnNotification->nmhdr.hwndFrom = hwndNpp; + ///scnNotification->nmhdr.idFrom = BufferID; + /// + NPPN_FILEDELETED = NPPN_FIRST + 26, + + /* --Autogenerated -- end of section automatically generated from notepad-plus-plus\PowerEditor\src\MISC\PluginsManager\Notepad_plus_msgs.h * */ + } +} diff --git a/WakaTime/PluginInfrastructure/NotepadPPGateway.cs b/WakaTime/PluginInfrastructure/NotepadPPGateway.cs index e1668df..3884743 100644 --- a/WakaTime/PluginInfrastructure/NotepadPPGateway.cs +++ b/WakaTime/PluginInfrastructure/NotepadPPGateway.cs @@ -1,69 +1,68 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using System.Text; -using NppPluginNET.PluginInfrastructure; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - public interface INotepadPPGateway - { - void FileNew(); - - string GetCurrentFilePath(); - unsafe string GetFilePath(int bufferId); - void SetCurrentLanguage(LangType language); - } - - /// - /// This class holds helpers for sending messages defined in the Msgs_h.cs file. It is at the moment - /// incomplete. Please help fill in the blanks. - /// - public class NotepadPPGateway : INotepadPPGateway - { - private const int Unused = 0; - - public void FileNew() - { - Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_MENUCOMMAND, Unused, NppMenuCmd.IDM_FILE_NEW); - } - - /// - /// Gets the path of the current document. - /// - public string GetCurrentFilePath() - { - var path = new StringBuilder(2000); - Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_GETFULLCURRENTPATH, 0, path); - return path.ToString(); - } - - /// - /// Gets the path of the current document. - /// - public unsafe string GetFilePath(int bufferId) - { - var path = new StringBuilder(2000); - Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_GETFULLPATHFROMBUFFERID, bufferId, path); - return path.ToString(); - } - - public void SetCurrentLanguage(LangType language) - { - Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_SETCURRENTLANGTYPE, Unused, (int) language); - } - } - - /// - /// This class holds helpers for sending messages defined in the Resource_h.cs file. It is at the moment - /// incomplete. Please help fill in the blanks. - /// - class NppResource - { - private const int Unused = 0; - - public void ClearIndicator() - { - Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) Resource.NPPM_INTERNAL_CLEARINDICATOR, Unused, Unused); - } - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System.Text; +using NppPluginNET.PluginInfrastructure; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + public interface INotepadPPGateway + { + void FileNew(); + + string GetCurrentFilePath(); + unsafe string GetFilePath(int bufferId); + void SetCurrentLanguage(LangType language); + } + + /// + /// This class holds helpers for sending messages defined in the Msgs_h.cs file. It is at the moment + /// incomplete. Please help fill in the blanks. + /// + public class NotepadPPGateway : INotepadPPGateway + { + private const int Unused = 0; + + public void FileNew() + { + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_MENUCOMMAND, Unused, NppMenuCmd.IDM_FILE_NEW); + } + + /// + /// Gets the path of the current document. + /// + public string GetCurrentFilePath() + { + var path = new StringBuilder(2000); + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_GETFULLCURRENTPATH, 0, path); + return path.ToString(); + } + + /// + /// Gets the path of the current document. + /// + public unsafe string GetFilePath(int bufferId) + { + var path = new StringBuilder(2000); + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_GETFULLPATHFROMBUFFERID, bufferId, path); + return path.ToString(); + } + + public void SetCurrentLanguage(LangType language) + { + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) NppMsg.NPPM_SETCURRENTLANGTYPE, Unused, (int) language); + } + } + + /// + /// This class holds helpers for sending messages defined in the Resource_h.cs file. It is at the moment + /// incomplete. Please help fill in the blanks. + /// + class NppResource + { + private const int Unused = 0; + + public void ClearIndicator() + { + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint) Resource.NPPM_INTERNAL_CLEARINDICATOR, Unused, Unused); + } + } +} diff --git a/WakaTime/PluginInfrastructure/NppPluginNETBase.cs b/WakaTime/PluginInfrastructure/NppPluginNETBase.cs index 250a901..598cbba 100644 --- a/WakaTime/PluginInfrastructure/NppPluginNETBase.cs +++ b/WakaTime/PluginInfrastructure/NppPluginNETBase.cs @@ -1,54 +1,54 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - class PluginBase - { - internal static NppData nppData; - internal static FuncItems _funcItems = new FuncItems(); - - internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer) - { - SetCommand(index, commandName, functionPointer, new ShortcutKey(), false); - } - - internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer, ShortcutKey shortcut) - { - SetCommand(index, commandName, functionPointer, shortcut, false); - } - - internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer, bool checkOnInit) - { - SetCommand(index, commandName, functionPointer, new ShortcutKey(), checkOnInit); - } - - internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer, ShortcutKey shortcut, bool checkOnInit) - { - FuncItem funcItem = new FuncItem(); - funcItem._cmdID = index; - funcItem._itemName = commandName; - if (functionPointer != null) - funcItem._pFunc = new NppFuncItemDelegate(functionPointer); - if (shortcut._key != 0) - funcItem._pShKey = shortcut; - funcItem._init2Check = checkOnInit; - _funcItems.Add(funcItem); - } - - internal static IntPtr GetCurrentScintilla() - { - int curScintilla; - Win32.SendMessage(nppData._nppHandle, (uint) NppMsg.NPPM_GETCURRENTSCINTILLA, 0, out curScintilla); - return (curScintilla == 0) ? nppData._scintillaMainHandle : nppData._scintillaSecondHandle; - } - - - static readonly Func gatewayFactory = () => new ScintillaGateway(GetCurrentScintilla()); - - public static Func GetGatewayFactory() - { - return gatewayFactory; - } - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + class PluginBase + { + internal static NppData nppData; + internal static FuncItems _funcItems = new FuncItems(); + + internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer) + { + SetCommand(index, commandName, functionPointer, new ShortcutKey(), false); + } + + internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer, ShortcutKey shortcut) + { + SetCommand(index, commandName, functionPointer, shortcut, false); + } + + internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer, bool checkOnInit) + { + SetCommand(index, commandName, functionPointer, new ShortcutKey(), checkOnInit); + } + + internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer, ShortcutKey shortcut, bool checkOnInit) + { + FuncItem funcItem = new FuncItem(); + funcItem._cmdID = index; + funcItem._itemName = commandName; + if (functionPointer != null) + funcItem._pFunc = new NppFuncItemDelegate(functionPointer); + if (shortcut._key != 0) + funcItem._pShKey = shortcut; + funcItem._init2Check = checkOnInit; + _funcItems.Add(funcItem); + } + + internal static IntPtr GetCurrentScintilla() + { + int curScintilla; + Win32.SendMessage(nppData._nppHandle, (uint) NppMsg.NPPM_GETCURRENTSCINTILLA, 0, out curScintilla); + return (curScintilla == 0) ? nppData._scintillaMainHandle : nppData._scintillaSecondHandle; + } + + + static readonly Func gatewayFactory = () => new ScintillaGateway(GetCurrentScintilla()); + + public static Func GetGatewayFactory() + { + return gatewayFactory; + } + } +} diff --git a/WakaTime/PluginInfrastructure/NppPluginNETHelper.cs b/WakaTime/PluginInfrastructure/NppPluginNETHelper.cs index c337fea..49f1fd3 100644 --- a/WakaTime/PluginInfrastructure/NppPluginNETHelper.cs +++ b/WakaTime/PluginInfrastructure/NppPluginNETHelper.cs @@ -1,191 +1,191 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using System.Text; -using System.Windows.Forms; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - [StructLayout(LayoutKind.Sequential)] - public struct NppData - { - public IntPtr _nppHandle; - public IntPtr _scintillaMainHandle; - public IntPtr _scintillaSecondHandle; - } - - public delegate void NppFuncItemDelegate(); - - [StructLayout(LayoutKind.Sequential)] - public struct ShortcutKey - { - public ShortcutKey(bool isCtrl, bool isAlt, bool isShift, Keys key) - { - // the types 'bool' and 'char' have a size of 1 byte only! - _isCtrl = Convert.ToByte(isCtrl); - _isAlt = Convert.ToByte(isAlt); - _isShift = Convert.ToByte(isShift); - _key = Convert.ToByte(key); - } - public byte _isCtrl; - public byte _isAlt; - public byte _isShift; - public byte _key; - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - public struct FuncItem - { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] - public string _itemName; - public NppFuncItemDelegate _pFunc; - public int _cmdID; - public bool _init2Check; - public ShortcutKey _pShKey; - } - - public class FuncItems : IDisposable - { - List _funcItems; - int _sizeFuncItem; - List _shortCutKeys; - IntPtr _nativePointer; - bool _disposed = false; - - public FuncItems() - { - _funcItems = new List(); - _sizeFuncItem = Marshal.SizeOf(typeof(FuncItem)); - _shortCutKeys = new List(); - } - - [DllImport("kernel32")] - static extern void RtlMoveMemory(IntPtr Destination, IntPtr Source, int Length); - public void Add(FuncItem funcItem) - { - int oldSize = _funcItems.Count * _sizeFuncItem; - _funcItems.Add(funcItem); - int newSize = _funcItems.Count * _sizeFuncItem; - IntPtr newPointer = Marshal.AllocHGlobal(newSize); - - if (_nativePointer != IntPtr.Zero) - { - RtlMoveMemory(newPointer, _nativePointer, oldSize); - Marshal.FreeHGlobal(_nativePointer); - } - IntPtr ptrPosNewItem = (IntPtr)(newPointer.ToInt64() + oldSize); - byte[] aB = Encoding.Unicode.GetBytes(funcItem._itemName + "\0"); - Marshal.Copy(aB, 0, ptrPosNewItem, aB.Length); - ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 128); - IntPtr p = (funcItem._pFunc != null) ? Marshal.GetFunctionPointerForDelegate(funcItem._pFunc) : IntPtr.Zero; - Marshal.WriteIntPtr(ptrPosNewItem, p); - ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + IntPtr.Size); - Marshal.WriteInt32(ptrPosNewItem, funcItem._cmdID); - ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 4); - Marshal.WriteInt32(ptrPosNewItem, Convert.ToInt32(funcItem._init2Check)); - ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 4); - if (funcItem._pShKey._key != 0) - { - IntPtr newShortCutKey = Marshal.AllocHGlobal(4); - Marshal.StructureToPtr(funcItem._pShKey, newShortCutKey, false); - Marshal.WriteIntPtr(ptrPosNewItem, newShortCutKey); - } - else Marshal.WriteIntPtr(ptrPosNewItem, IntPtr.Zero); - - _nativePointer = newPointer; - } - - public void RefreshItems() - { - IntPtr ptrPosItem = _nativePointer; - for (int i = 0; i < _funcItems.Count; i++) - { - FuncItem updatedItem = new FuncItem(); - updatedItem._itemName = _funcItems[i]._itemName; - ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 128); - updatedItem._pFunc = _funcItems[i]._pFunc; - ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + IntPtr.Size); - updatedItem._cmdID = Marshal.ReadInt32(ptrPosItem); - ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 4); - updatedItem._init2Check = _funcItems[i]._init2Check; - ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 4); - updatedItem._pShKey = _funcItems[i]._pShKey; - ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + IntPtr.Size); - - _funcItems[i] = updatedItem; - } - } - - public IntPtr NativePointer { get { return _nativePointer; } } - public List Items { get { return _funcItems; } } - - public void Dispose() - { - if (!_disposed) - { - foreach (IntPtr ptr in _shortCutKeys) Marshal.FreeHGlobal(ptr); - if (_nativePointer != IntPtr.Zero) Marshal.FreeHGlobal(_nativePointer); - _disposed = true; - } - } - ~FuncItems() - { - Dispose(); - } - } - - - public enum winVer - { - WV_UNKNOWN, WV_WIN32S, WV_95, WV_98, WV_ME, WV_NT, WV_W2K, - WV_XP, WV_S2003, WV_XPX64, WV_VISTA, WV_WIN7, WV_WIN8, WV_WIN81, WV_WIN10 - } - - - [Flags] - public enum DockMgrMsg : uint - { - IDB_CLOSE_DOWN = 137, - IDB_CLOSE_UP = 138, - IDD_CONTAINER_DLG = 139, - - IDC_TAB_CONT = 1027, - IDC_CLIENT_TAB = 1028, - IDC_BTN_CAPTION = 1050, - - DMM_MSG = 0x5000, - DMM_CLOSE = (DMM_MSG + 1), - DMM_DOCK = (DMM_MSG + 2), - DMM_FLOAT = (DMM_MSG + 3), - DMM_DOCKALL = (DMM_MSG + 4), - DMM_FLOATALL = (DMM_MSG + 5), - DMM_MOVE = (DMM_MSG + 6), - DMM_UPDATEDISPINFO = (DMM_MSG + 7), - DMM_GETIMAGELIST = (DMM_MSG + 8), - DMM_GETICONPOS = (DMM_MSG + 9), - DMM_DROPDATA = (DMM_MSG + 10), - DMM_MOVE_SPLITTER = (DMM_MSG + 11), - DMM_CANCEL_MOVE = (DMM_MSG + 12), - DMM_LBUTTONUP = (DMM_MSG + 13), - - DMN_FIRST = 1050, - DMN_CLOSE = (DMN_FIRST + 1), - //nmhdr.Code = DWORD(DMN_CLOSE, 0)); - //nmhdr.hwndFrom = hwndNpp; - //nmhdr.IdFrom = ctrlIdNpp; - - DMN_DOCK = (DMN_FIRST + 2), - DMN_FLOAT = (DMN_FIRST + 3) - //nmhdr.Code = DWORD(DMN_XXX, int newContainer); - //nmhdr.hwndFrom = hwndNpp; - //nmhdr.IdFrom = ctrlIdNpp; - } - - [StructLayout(LayoutKind.Sequential)] - public struct toolbarIcons - { - public IntPtr hToolbarBmp; - public IntPtr hToolbarIcon; - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; +using System.Text; +using System.Windows.Forms; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + [StructLayout(LayoutKind.Sequential)] + public struct NppData + { + public IntPtr _nppHandle; + public IntPtr _scintillaMainHandle; + public IntPtr _scintillaSecondHandle; + } + + public delegate void NppFuncItemDelegate(); + + [StructLayout(LayoutKind.Sequential)] + public struct ShortcutKey + { + public ShortcutKey(bool isCtrl, bool isAlt, bool isShift, Keys key) + { + // the types 'bool' and 'char' have a size of 1 byte only! + _isCtrl = Convert.ToByte(isCtrl); + _isAlt = Convert.ToByte(isAlt); + _isShift = Convert.ToByte(isShift); + _key = Convert.ToByte(key); + } + public byte _isCtrl; + public byte _isAlt; + public byte _isShift; + public byte _key; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct FuncItem + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] + public string _itemName; + public NppFuncItemDelegate _pFunc; + public int _cmdID; + public bool _init2Check; + public ShortcutKey _pShKey; + } + + public class FuncItems : IDisposable + { + List _funcItems; + int _sizeFuncItem; + List _shortCutKeys; + IntPtr _nativePointer; + bool _disposed = false; + + public FuncItems() + { + _funcItems = new List(); + _sizeFuncItem = Marshal.SizeOf(typeof(FuncItem)); + _shortCutKeys = new List(); + } + + [DllImport("kernel32")] + static extern void RtlMoveMemory(IntPtr Destination, IntPtr Source, int Length); + public void Add(FuncItem funcItem) + { + int oldSize = _funcItems.Count * _sizeFuncItem; + _funcItems.Add(funcItem); + int newSize = _funcItems.Count * _sizeFuncItem; + IntPtr newPointer = Marshal.AllocHGlobal(newSize); + + if (_nativePointer != IntPtr.Zero) + { + RtlMoveMemory(newPointer, _nativePointer, oldSize); + Marshal.FreeHGlobal(_nativePointer); + } + IntPtr ptrPosNewItem = (IntPtr)(newPointer.ToInt64() + oldSize); + byte[] aB = Encoding.Unicode.GetBytes(funcItem._itemName + "\0"); + Marshal.Copy(aB, 0, ptrPosNewItem, aB.Length); + ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 128); + IntPtr p = (funcItem._pFunc != null) ? Marshal.GetFunctionPointerForDelegate(funcItem._pFunc) : IntPtr.Zero; + Marshal.WriteIntPtr(ptrPosNewItem, p); + ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + IntPtr.Size); + Marshal.WriteInt32(ptrPosNewItem, funcItem._cmdID); + ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 4); + Marshal.WriteInt32(ptrPosNewItem, Convert.ToInt32(funcItem._init2Check)); + ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 4); + if (funcItem._pShKey._key != 0) + { + IntPtr newShortCutKey = Marshal.AllocHGlobal(4); + Marshal.StructureToPtr(funcItem._pShKey, newShortCutKey, false); + Marshal.WriteIntPtr(ptrPosNewItem, newShortCutKey); + } + else Marshal.WriteIntPtr(ptrPosNewItem, IntPtr.Zero); + + _nativePointer = newPointer; + } + + public void RefreshItems() + { + IntPtr ptrPosItem = _nativePointer; + for (int i = 0; i < _funcItems.Count; i++) + { + FuncItem updatedItem = new FuncItem(); + updatedItem._itemName = _funcItems[i]._itemName; + ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 128); + updatedItem._pFunc = _funcItems[i]._pFunc; + ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + IntPtr.Size); + updatedItem._cmdID = Marshal.ReadInt32(ptrPosItem); + ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 4); + updatedItem._init2Check = _funcItems[i]._init2Check; + ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 4); + updatedItem._pShKey = _funcItems[i]._pShKey; + ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + IntPtr.Size); + + _funcItems[i] = updatedItem; + } + } + + public IntPtr NativePointer { get { return _nativePointer; } } + public List Items { get { return _funcItems; } } + + public void Dispose() + { + if (!_disposed) + { + foreach (IntPtr ptr in _shortCutKeys) Marshal.FreeHGlobal(ptr); + if (_nativePointer != IntPtr.Zero) Marshal.FreeHGlobal(_nativePointer); + _disposed = true; + } + } + ~FuncItems() + { + Dispose(); + } + } + + + public enum winVer + { + WV_UNKNOWN, WV_WIN32S, WV_95, WV_98, WV_ME, WV_NT, WV_W2K, + WV_XP, WV_S2003, WV_XPX64, WV_VISTA, WV_WIN7, WV_WIN8, WV_WIN81, WV_WIN10 + } + + + [Flags] + public enum DockMgrMsg : uint + { + IDB_CLOSE_DOWN = 137, + IDB_CLOSE_UP = 138, + IDD_CONTAINER_DLG = 139, + + IDC_TAB_CONT = 1027, + IDC_CLIENT_TAB = 1028, + IDC_BTN_CAPTION = 1050, + + DMM_MSG = 0x5000, + DMM_CLOSE = (DMM_MSG + 1), + DMM_DOCK = (DMM_MSG + 2), + DMM_FLOAT = (DMM_MSG + 3), + DMM_DOCKALL = (DMM_MSG + 4), + DMM_FLOATALL = (DMM_MSG + 5), + DMM_MOVE = (DMM_MSG + 6), + DMM_UPDATEDISPINFO = (DMM_MSG + 7), + DMM_GETIMAGELIST = (DMM_MSG + 8), + DMM_GETICONPOS = (DMM_MSG + 9), + DMM_DROPDATA = (DMM_MSG + 10), + DMM_MOVE_SPLITTER = (DMM_MSG + 11), + DMM_CANCEL_MOVE = (DMM_MSG + 12), + DMM_LBUTTONUP = (DMM_MSG + 13), + + DMN_FIRST = 1050, + DMN_CLOSE = (DMN_FIRST + 1), + //nmhdr.Code = DWORD(DMN_CLOSE, 0)); + //nmhdr.hwndFrom = hwndNpp; + //nmhdr.IdFrom = ctrlIdNpp; + + DMN_DOCK = (DMN_FIRST + 2), + DMN_FLOAT = (DMN_FIRST + 3) + //nmhdr.Code = DWORD(DMN_XXX, int newContainer); + //nmhdr.hwndFrom = hwndNpp; + //nmhdr.IdFrom = ctrlIdNpp; + } + + [StructLayout(LayoutKind.Sequential)] + public struct toolbarIcons + { + public IntPtr hToolbarBmp; + public IntPtr hToolbarIcon; + } +} diff --git a/WakaTime/PluginInfrastructure/Preference_h.cs b/WakaTime/PluginInfrastructure/Preference_h.cs index f1d1c2a..4796627 100644 --- a/WakaTime/PluginInfrastructure/Preference_h.cs +++ b/WakaTime/PluginInfrastructure/Preference_h.cs @@ -1,342 +1,342 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -// -// This file should stay in sync with the CPP project file -// "notepad-plus-plus/scintilla/include/Scintilla.iface" -// found at -// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/scintilla/include/Scintilla.iface -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace NppPluginNET.PluginInfrastructure -{ - public enum Preference - { - /* ++Autogenerated -- start of section automatically generated from preference_rc.h */ - - IDD_PREFERENCE_BOX = 6000, - IDC_BUTTON_CLOSE = IDD_PREFERENCE_BOX + 1, - IDC_LIST_DLGTITLE = IDD_PREFERENCE_BOX + 2, - - IDD_PREFERENCE_BAR_BOX = 6100, - IDC_TOOLBAR_GB_STATIC = IDD_PREFERENCE_BAR_BOX + 1, - IDC_CHECK_HIDE = IDD_PREFERENCE_BAR_BOX + 2, - IDC_RADIO_SMALLICON = IDD_PREFERENCE_BAR_BOX + 3, - IDC_RADIO_BIGICON = IDD_PREFERENCE_BAR_BOX + 4, - IDC_RADIO_STANDARD = IDD_PREFERENCE_BAR_BOX + 5, - - IDC_TABBAR_GB_STATIC = IDD_PREFERENCE_BAR_BOX + 6, - IDC_CHECK_REDUCE = IDD_PREFERENCE_BAR_BOX + 7, - IDC_CHECK_LOCK = IDD_PREFERENCE_BAR_BOX + 8, - IDC_CHECK_DRAWINACTIVE = IDD_PREFERENCE_BAR_BOX + 9, - IDC_CHECK_ORANGE = IDD_PREFERENCE_BAR_BOX + 10, - IDC_CHECK_SHOWSTATUSBAR = IDD_PREFERENCE_BAR_BOX + 11, - IDC_CHECK_ENABLETABCLOSE = IDD_PREFERENCE_BAR_BOX + 12, - IDC_CHECK_DBCLICK2CLOSE = IDD_PREFERENCE_BAR_BOX + 13, - IDC_CHECK_ENABLEDOCSWITCHER = IDD_PREFERENCE_BAR_BOX + 14, - IDC_CHECK_MAINTAININDENT = IDD_PREFERENCE_BAR_BOX + 15, - IDC_CHECK_KEEPINSAMEDIR = IDD_PREFERENCE_BAR_BOX + 16, - IDC_CHECK_STYLEMRU = IDD_PREFERENCE_BAR_BOX + 17, - IDC_CHECK_TAB_HIDE = IDD_PREFERENCE_BAR_BOX + 18, - IDC_CHECK_TAB_MULTILINE = IDD_PREFERENCE_BAR_BOX + 19, - IDC_CHECK_TAB_VERTICAL = IDD_PREFERENCE_BAR_BOX + 20, - IDC_CHECK_TAB_LAST_EXIT = IDD_PREFERENCE_BAR_BOX + 21, - IDC_CHECK_HIDEMENUBAR = IDD_PREFERENCE_BAR_BOX + 22, - IDC_LOCALIZATION_GB_STATIC = IDD_PREFERENCE_BAR_BOX + 23, - IDC_COMBO_LOCALIZATION = IDD_PREFERENCE_BAR_BOX + 24, - IDC_DOCSWITCH_GB_STATIC = IDD_PREFERENCE_BAR_BOX + 25, - IDC_CHECK_DOCSWITCH = IDD_PREFERENCE_BAR_BOX + 26, - IDC_CHECK_DOCSWITCH_NOEXTCOLUMN = IDD_PREFERENCE_BAR_BOX + 27, - - IDD_PREFERENCE_MULTIINSTANCE_BOX = 6150, - IDC_MULTIINST_GB_STATIC = IDD_PREFERENCE_MULTIINSTANCE_BOX + 1, - IDC_SESSIONININST_RADIO = IDD_PREFERENCE_MULTIINSTANCE_BOX + 2, - IDC_MULTIINST_RADIO = IDD_PREFERENCE_MULTIINSTANCE_BOX + 3, - IDC_MONOINST_RADIO = IDD_PREFERENCE_MULTIINSTANCE_BOX + 4, - IDD_STATIC_RESTARTNOTE = IDD_PREFERENCE_MULTIINSTANCE_BOX + 5, - - IDD_PREFERENCE_WORDCHARLIST_BOX = 6160, - IDC_WORDCHARLIST_GB_STATIC = IDD_PREFERENCE_WORDCHARLIST_BOX + 1, - IDC_RADIO_WORDCHAR_DEFAULT = IDD_PREFERENCE_WORDCHARLIST_BOX + 2, - IDC_RADIO_WORDCHAR_CUSTOM = IDD_PREFERENCE_WORDCHARLIST_BOX + 3, - IDC_WORDCHAR_CUSTOM_EDIT = IDD_PREFERENCE_WORDCHARLIST_BOX + 4, - IDD_WORDCHAR_QUESTION_BUTTON = IDD_PREFERENCE_WORDCHARLIST_BOX + 5, - IDD_STATIC_WORDCHAR_WARNING = IDD_PREFERENCE_WORDCHARLIST_BOX + 6, - - IDD_PREFERENCE_MARGEIN_BOX = 6200, - IDC_FMS_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 1, - IDC_RADIO_SIMPLE = IDD_PREFERENCE_MARGEIN_BOX + 2, - IDC_RADIO_ARROW = IDD_PREFERENCE_MARGEIN_BOX + 3, - IDC_RADIO_CIRCLE = IDD_PREFERENCE_MARGEIN_BOX + 4, - IDC_RADIO_BOX = IDD_PREFERENCE_MARGEIN_BOX + 5, - - IDC_CHECK_LINENUMBERMARGE = IDD_PREFERENCE_MARGEIN_BOX + 6, - IDC_CHECK_BOOKMARKMARGE = IDD_PREFERENCE_MARGEIN_BOX + 7, - - IDC_VES_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 11, - - IDC_CHECK_EDGEBGMODE = IDD_PREFERENCE_MARGEIN_BOX + 13, - IDC_CHECK_CURRENTLINEHILITE = IDD_PREFERENCE_MARGEIN_BOX + 14, - IDC_CHECK_SMOOTHFONT = IDD_PREFERENCE_MARGEIN_BOX + 15, - - IDC_CARETSETTING_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 16, - IDC_WIDTH_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 17, - IDC_WIDTH_COMBO = IDD_PREFERENCE_MARGEIN_BOX + 18, - IDC_BLINKRATE_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 19, - IDC_CARETBLINKRATE_SLIDER = IDD_PREFERENCE_MARGEIN_BOX + 20, - IDC_CARETBLINKRATE_F_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 21, - IDC_CARETBLINKRATE_S_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 22, - IDC_CHECK_DOCCHANGESTATEMARGE = IDD_PREFERENCE_MARGEIN_BOX + 23, - IDC_MULTISELECTION_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 24, - IDC_CHECK_MULTISELECTION = IDD_PREFERENCE_MARGEIN_BOX + 25, - - IDC_RADIO_FOLDMARGENONE = IDD_PREFERENCE_MARGEIN_BOX + 26, - - IDC_LW_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 27, - IDC_RADIO_LWDEF = IDD_PREFERENCE_MARGEIN_BOX + 28, - IDC_RADIO_LWALIGN = IDD_PREFERENCE_MARGEIN_BOX + 29, - IDC_RADIO_LWINDENT = IDD_PREFERENCE_MARGEIN_BOX + 30, - - IDC_BORDERWIDTH_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 31, - IDC_BORDERWIDTHVAL_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 32, - IDC_BORDERWIDTH_SLIDER = IDD_PREFERENCE_MARGEIN_BOX + 33, - IDC_CHECK_DISABLEADVANCEDSCROLL = IDD_PREFERENCE_MARGEIN_BOX + 34, - IDC_CHECK_NOEDGE = IDD_PREFERENCE_MARGEIN_BOX + 35, - IDC_CHECK_SCROLLBEYONDLASTLINE = IDD_PREFERENCE_MARGEIN_BOX + 36, - - IDC_STATIC_MULTILNMODE_TIP = IDD_PREFERENCE_MARGEIN_BOX + 37, - IDC_COLUMNPOS_EDIT = IDD_PREFERENCE_MARGEIN_BOX + 38, - IDC_CHECK_RIGHTCLICKKEEPSSELECTION = IDD_PREFERENCE_MARGEIN_BOX + 39, - - IDD_PREFERENCE_DELIMITERSETTINGS_BOX = 6250, - IDC_DELIMITERSETTINGS_GB_STATIC = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 1, - IDD_STATIC_OPENDELIMITER = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 2, - IDC_EDIT_OPENDELIMITER = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 3, - IDC_EDIT_CLOSEDELIMITER = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 4, - IDD_STATIC_CLOSEDELIMITER = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 5, - IDD_SEVERALLINEMODEON_CHECK = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 6, - IDD_STATIC_BLABLA = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 7, - IDD_STATIC_BLABLA2NDLINE = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 8, - - IDD_PREFERENCE_SETTINGSONCLOUD_BOX = 6260, - IDC_SETTINGSONCLOUD_WARNING_STATIC = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 1, - IDC_SETTINGSONCLOUD_GB_STATIC = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 2, - IDC_NOCLOUD_RADIO = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 3, - - IDC_WITHCLOUD_RADIO = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 7, - IDC_CLOUDPATH_EDIT = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 8, - IDD_CLOUDPATH_BROWSE_BUTTON = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 9, - - IDD_PREFERENCE_SEARCHENGINE_BOX = 6270, - IDC_SEARCHENGINES_GB_STATIC = IDD_PREFERENCE_SEARCHENGINE_BOX + 1, - IDC_SEARCHENGINE_DUCKDUCKGO_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 2, - IDC_SEARCHENGINE_GOOGLE_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 3, - IDC_SEARCHENGINE_BING_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 4, - IDC_SEARCHENGINE_YAHOO_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 5, - IDC_SEARCHENGINE_CUSTOM_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 6, - IDC_SEARCHENGINE_EDIT = IDD_PREFERENCE_SEARCHENGINE_BOX + 7, - IDD_SEARCHENGINE_NOTE_STATIC = IDD_PREFERENCE_SEARCHENGINE_BOX + 8, - IDC_SEARCHENGINE_STACKOVERFLOW_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 9, - - IDD_PREFERENCE_SETTING_BOX = 6300, - IDC_TABSETTING_GB_STATIC = IDD_PREFERENCE_SETTING_BOX + 1, - IDC_CHECK_REPLACEBYSPACE = IDD_PREFERENCE_SETTING_BOX + 2, - IDC_TABSIZE_STATIC = IDD_PREFERENCE_SETTING_BOX + 3, - IDC_HISTORY_GB_STATIC = IDD_PREFERENCE_SETTING_BOX + 4, - IDC_CHECK_DONTCHECKHISTORY = IDD_PREFERENCE_SETTING_BOX + 5, - IDC_MAXNBFILE_STATIC = IDD_PREFERENCE_SETTING_BOX + 6, - IDC_CHECK_MIN2SYSTRAY = IDD_PREFERENCE_SETTING_BOX + 8, - IDC_CHECK_REMEMBERSESSION = IDD_PREFERENCE_SETTING_BOX + 9, - IDC_TABSIZEVAL_STATIC = IDD_PREFERENCE_SETTING_BOX + 10, - IDC_MAXNBFILEVAL_STATIC = IDD_PREFERENCE_SETTING_BOX + 11, - IDC_FILEAUTODETECTION_STATIC = IDD_PREFERENCE_SETTING_BOX + 12, - IDC_CHECK_UPDATESILENTLY = IDD_PREFERENCE_SETTING_BOX + 13, - IDC_RADIO_BKNONE = IDD_PREFERENCE_SETTING_BOX + 15, - IDC_RADIO_BKSIMPLE = IDD_PREFERENCE_SETTING_BOX + 16, - IDC_RADIO_BKVERBOSE = IDD_PREFERENCE_SETTING_BOX + 17, - IDC_CLICKABLELINK_STATIC = IDD_PREFERENCE_SETTING_BOX + 18, - IDC_CHECK_CLICKABLELINK_ENABLE = IDD_PREFERENCE_SETTING_BOX + 19, - IDC_CHECK_CLICKABLELINK_NOUNDERLINE = IDD_PREFERENCE_SETTING_BOX + 20, - IDC_EDIT_SESSIONFILEEXT = IDD_PREFERENCE_SETTING_BOX + 21, - IDC_SESSIONFILEEXT_STATIC = IDD_PREFERENCE_SETTING_BOX + 22, - IDC_CHECK_AUTOUPDATE = IDD_PREFERENCE_SETTING_BOX + 23, - IDC_DOCUMENTSWITCHER_STATIC = IDD_PREFERENCE_SETTING_BOX + 24, - IDC_CHECK_UPDATEGOTOEOF = IDD_PREFERENCE_SETTING_BOX + 25, - IDC_CHECK_ENABLSMARTHILITE = IDD_PREFERENCE_SETTING_BOX + 26, - IDC_CHECK_ENABLTAGSMATCHHILITE = IDD_PREFERENCE_SETTING_BOX + 27, - IDC_CHECK_ENABLTAGATTRHILITE = IDD_PREFERENCE_SETTING_BOX + 28, - IDC_TAGMATCHEDHILITE_STATIC = IDD_PREFERENCE_SETTING_BOX + 29, - IDC_CHECK_HIGHLITENONEHTMLZONE = IDD_PREFERENCE_SETTING_BOX + 30, - IDC_CHECK_SHORTTITLE = IDD_PREFERENCE_SETTING_BOX + 31, - IDC_CHECK_SMARTHILITECASESENSITIVE = IDD_PREFERENCE_SETTING_BOX + 32, - IDC_SMARTHILITING_STATIC = IDD_PREFERENCE_SETTING_BOX + 33, - IDC_CHECK_DETECTENCODING = IDD_PREFERENCE_SETTING_BOX + 34, - IDC_CHECK_BACKSLASHISESCAPECHARACTERFORSQL = IDD_PREFERENCE_SETTING_BOX + 35, - IDC_EDIT_WORKSPACEFILEEXT = IDD_PREFERENCE_SETTING_BOX + 36, - IDC_WORKSPACEFILEEXT_STATIC = IDD_PREFERENCE_SETTING_BOX + 37, - IDC_CHECK_SMARTHILITEWHOLEWORDONLY = IDD_PREFERENCE_SETTING_BOX + 38, - IDC_CHECK_SMARTHILITEUSEFINDSETTINGS = IDD_PREFERENCE_SETTING_BOX + 39, - IDC_CHECK_SMARTHILITEANOTHERRVIEW = IDD_PREFERENCE_SETTING_BOX + 40, - - IDC_CHECK_REMEMBEREDITVIEWPERFILE = IDD_PREFERENCE_SETTING_BOX + 41, - IDC_REMEMBEREDITVIEWPERFILE_STATIC = IDD_PREFERENCE_SETTING_BOX + 42, - IDC_EDIT_REMEMBEREDITVIEWPERFILE = IDD_PREFERENCE_SETTING_BOX + 43, - - IDC_DOCUMENTPEEK_STATIC = IDD_PREFERENCE_SETTING_BOX + 44, - IDC_CHECK_ENABLEDOCPEEKER = IDD_PREFERENCE_SETTING_BOX + 45, - IDC_CHECK_ENABLEDOCPEEKONMAP = IDD_PREFERENCE_SETTING_BOX + 46, - IDC_COMBO_FILEUPDATECHOICE = IDD_PREFERENCE_SETTING_BOX + 47, - IDC_CHECK_DIRECTWRITE_ENABLE = IDD_PREFERENCE_SETTING_BOX + 49, - - IDD_PREFERENCE_NEWDOCSETTING_BOX = 6400, - IDC_FORMAT_GB_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 1, - IDC_RADIO_F_WIN = IDD_PREFERENCE_NEWDOCSETTING_BOX + 2, - IDC_RADIO_F_UNIX = IDD_PREFERENCE_NEWDOCSETTING_BOX + 3, - IDC_RADIO_F_MAC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 4, - IDC_ENCODING_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 5, - IDC_RADIO_ANSI = IDD_PREFERENCE_NEWDOCSETTING_BOX + 6, - IDC_RADIO_UTF8SANSBOM = IDD_PREFERENCE_NEWDOCSETTING_BOX + 7, - IDC_RADIO_UTF8 = IDD_PREFERENCE_NEWDOCSETTING_BOX + 8, - IDC_RADIO_UCS2BIG = IDD_PREFERENCE_NEWDOCSETTING_BOX + 9, - IDC_RADIO_UCS2SMALL = IDD_PREFERENCE_NEWDOCSETTING_BOX + 10, - IDC_DEFAULTLANG_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 11, - IDC_COMBO_DEFAULTLANG = IDD_PREFERENCE_NEWDOCSETTING_BOX + 12, - IDC_OPENSAVEDIR_GR_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 13, - IDC_OPENSAVEDIR_FOLLOWCURRENT_RADIO = IDD_PREFERENCE_NEWDOCSETTING_BOX + 14, - IDC_OPENSAVEDIR_REMEMBERLAST_RADIO = IDD_PREFERENCE_NEWDOCSETTING_BOX + 15, - IDC_OPENSAVEDIR_ALWAYSON_RADIO = IDD_PREFERENCE_NEWDOCSETTING_BOX + 16, - IDC_OPENSAVEDIR_ALWAYSON_EDIT = IDD_PREFERENCE_NEWDOCSETTING_BOX + 17, - IDD_OPENSAVEDIR_ALWAYSON_BROWSE_BUTTON = IDD_PREFERENCE_NEWDOCSETTING_BOX + 18, - IDC_NEWDOCUMENT_GR_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 19, - IDC_CHECK_OPENANSIASUTF8 = IDD_PREFERENCE_NEWDOCSETTING_BOX + 20, - IDC_RADIO_OTHERCP = IDD_PREFERENCE_NEWDOCSETTING_BOX + 21, - IDC_COMBO_OTHERCP = IDD_PREFERENCE_NEWDOCSETTING_BOX + 22, - IDC_GP_STATIC_RECENTFILES = IDD_PREFERENCE_NEWDOCSETTING_BOX + 23, - IDC_CHECK_INSUBMENU = IDD_PREFERENCE_NEWDOCSETTING_BOX + 24, - IDC_RADIO_ONLYFILENAME = IDD_PREFERENCE_NEWDOCSETTING_BOX + 25, - IDC_RADIO_FULLFILENAMEPATH = IDD_PREFERENCE_NEWDOCSETTING_BOX + 26, - IDC_RADIO_CUSTOMIZELENTH = IDD_PREFERENCE_NEWDOCSETTING_BOX + 27, - IDC_CUSTOMIZELENGTHVAL_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 28, - IDC_DISPLAY_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 29, - IDC_OPENSAVEDIR_CHECK_USENEWSTYLESAVEDIALOG = IDD_PREFERENCE_NEWDOCSETTING_BOX + 30, - IDC_OPENSAVEDIR_CHECK_DRROPFOLDEROPENFILES = IDD_PREFERENCE_NEWDOCSETTING_BOX + 31, - - IDD_PREFERENCE_DEFAULTDIRECTORY_BOX = 6450, - IDD_PREFERENCE_RECENTFILESHISTORY_BOX = 6460, - - IDD_PREFERENCE_LANG_BOX = 6500, - IDC_LIST_ENABLEDLANG = IDD_PREFERENCE_LANG_BOX + 1, - IDC_LIST_DISABLEDLANG = IDD_PREFERENCE_LANG_BOX + 2, - IDC_BUTTON_REMOVE = IDD_PREFERENCE_LANG_BOX + 3, - IDC_BUTTON_RESTORE = IDD_PREFERENCE_LANG_BOX + 4, - IDC_ENABLEDITEMS_STATIC = IDD_PREFERENCE_LANG_BOX + 5, - IDC_DISABLEDITEMS_STATIC = IDD_PREFERENCE_LANG_BOX + 6, - IDC_CHECK_LANGMENUCOMPACT = IDD_PREFERENCE_LANG_BOX + 7, - IDC_CHECK_LANGMENU_GR_STATIC = IDD_PREFERENCE_LANG_BOX + 8, - IDC_LIST_TABSETTNG = IDD_PREFERENCE_LANG_BOX + 9, - IDC_CHECK_DEFAULTTABVALUE = IDD_PREFERENCE_LANG_BOX + 10, - IDC_GR_TABVALUE_STATIC = IDD_PREFERENCE_LANG_BOX + 11, - IDC_TABSIZEVAL_DISABLE_STATIC = IDD_PREFERENCE_LANG_BOX + 12, - IDD_PREFERENCE_HILITE_BOX = 6550, - - IDD_PREFERENCE_PRINT_BOX = 6600, - IDC_CHECK_PRINTLINENUM = IDD_PREFERENCE_PRINT_BOX + 1, - IDC_COLOUROPT_STATIC = IDD_PREFERENCE_PRINT_BOX + 2, - IDC_RADIO_WYSIWYG = IDD_PREFERENCE_PRINT_BOX + 3, - IDC_RADIO_INVERT = IDD_PREFERENCE_PRINT_BOX + 4, - IDC_RADIO_BW = IDD_PREFERENCE_PRINT_BOX + 5, - IDC_RADIO_NOBG = IDD_PREFERENCE_PRINT_BOX + 6, - IDC_MARGESETTINGS_STATIC = IDD_PREFERENCE_PRINT_BOX + 7, - IDC_EDIT_ML = IDD_PREFERENCE_PRINT_BOX + 8, - IDC_EDIT_MT = IDD_PREFERENCE_PRINT_BOX + 9, - IDC_EDIT_MR = IDD_PREFERENCE_PRINT_BOX + 10, - IDC_EDIT_MB = IDD_PREFERENCE_PRINT_BOX + 11, - IDC_ML_STATIC = IDD_PREFERENCE_PRINT_BOX + 12, - IDC_MT_STATIC = IDD_PREFERENCE_PRINT_BOX + 13, - IDC_MR_STATIC = IDD_PREFERENCE_PRINT_BOX + 14, - IDC_MB_STATIC = IDD_PREFERENCE_PRINT_BOX + 15, - - IDD_PREFERENCE_PRINT2_BOX = 6700, - IDC_EDIT_HLEFT = IDD_PREFERENCE_PRINT2_BOX + 1, - IDC_EDIT_HMIDDLE = IDD_PREFERENCE_PRINT2_BOX + 2, - IDC_EDIT_HRIGHT = IDD_PREFERENCE_PRINT2_BOX + 3, - IDC_COMBO_HFONTNAME = IDD_PREFERENCE_PRINT2_BOX + 4, - IDC_COMBO_HFONTSIZE = IDD_PREFERENCE_PRINT2_BOX + 5, - IDC_CHECK_HBOLD = IDD_PREFERENCE_PRINT2_BOX + 6, - IDC_CHECK_HITALIC = IDD_PREFERENCE_PRINT2_BOX + 7, - IDC_HGB_STATIC = IDD_PREFERENCE_PRINT2_BOX + 8, - IDC_HL_STATIC = IDD_PREFERENCE_PRINT2_BOX + 9, - IDC_HM_STATIC = IDD_PREFERENCE_PRINT2_BOX + 10, - IDC_HR_STATIC = IDD_PREFERENCE_PRINT2_BOX + 11, - IDC_EDIT_FLEFT = IDD_PREFERENCE_PRINT2_BOX + 12, - IDC_EDIT_FMIDDLE = IDD_PREFERENCE_PRINT2_BOX + 13, - IDC_EDIT_FRIGHT = IDD_PREFERENCE_PRINT2_BOX + 14, - IDC_COMBO_FFONTNAME = IDD_PREFERENCE_PRINT2_BOX + 15, - IDC_COMBO_FFONTSIZE = IDD_PREFERENCE_PRINT2_BOX + 16, - IDC_CHECK_FBOLD = IDD_PREFERENCE_PRINT2_BOX + 17, - IDC_CHECK_FITALIC = IDD_PREFERENCE_PRINT2_BOX + 18, - IDC_FGB_STATIC = IDD_PREFERENCE_PRINT2_BOX + 19, - IDC_FL_STATIC = IDD_PREFERENCE_PRINT2_BOX + 20, - IDC_FM_STATIC = IDD_PREFERENCE_PRINT2_BOX + 21, - IDC_FR_STATIC = IDD_PREFERENCE_PRINT2_BOX + 22, - IDC_BUTTON_ADDVAR = IDD_PREFERENCE_PRINT2_BOX + 23, - IDC_COMBO_VARLIST = IDD_PREFERENCE_PRINT2_BOX + 24, - IDC_VAR_STATIC = IDD_PREFERENCE_PRINT2_BOX + 25, - IDC_VIEWPANEL_STATIC = IDD_PREFERENCE_PRINT2_BOX + 26, - IDC_WHICHPART_STATIC = IDD_PREFERENCE_PRINT2_BOX + 27, - IDC_HEADERFPPTER_GR_STATIC = IDD_PREFERENCE_PRINT2_BOX + 28, - - IDD_PREFERENCE_BACKUP_BOX = 6800, - IDC_BACKUPDIR_GRP_STATIC = IDD_PREFERENCE_BACKUP_BOX + 1, - IDC_BACKUPDIR_CHECK = IDD_PREFERENCE_BACKUP_BOX + 2, - IDD_BACKUPDIR_STATIC = IDD_PREFERENCE_BACKUP_BOX + 3, - IDC_BACKUPDIR_USERCUSTOMDIR_GRPSTATIC = IDD_PREFERENCE_BACKUP_BOX + 4, - IDC_BACKUPDIR_EDIT = IDD_PREFERENCE_BACKUP_BOX + 5, - IDD_BACKUPDIR_BROWSE_BUTTON = IDD_PREFERENCE_BACKUP_BOX + 6, - IDD_AUTOC_GRPSTATIC = IDD_PREFERENCE_BACKUP_BOX + 7, - IDD_AUTOC_ENABLECHECK = IDD_PREFERENCE_BACKUP_BOX + 8, - IDD_AUTOC_FUNCRADIO = IDD_PREFERENCE_BACKUP_BOX + 9, - IDD_AUTOC_WORDRADIO = IDD_PREFERENCE_BACKUP_BOX + 10, - IDD_AUTOC_STATIC_FROM = IDD_PREFERENCE_BACKUP_BOX + 11, - IDD_AUTOC_STATIC_N = IDD_PREFERENCE_BACKUP_BOX + 12, - IDD_AUTOC_STATIC_CHAR = IDD_PREFERENCE_BACKUP_BOX + 13, - IDD_AUTOC_STATIC_NOTE = IDD_PREFERENCE_BACKUP_BOX + 14, - IDD_FUNC_CHECK = IDD_PREFERENCE_BACKUP_BOX + 15, - IDD_AUTOC_BOTHRADIO = IDD_PREFERENCE_BACKUP_BOX + 16, - IDC_BACKUPDIR_RESTORESESSION_GRP_STATIC = IDD_PREFERENCE_BACKUP_BOX + 17, - IDC_BACKUPDIR_RESTORESESSION_CHECK = IDD_PREFERENCE_BACKUP_BOX + 18, - IDD_BACKUPDIR_RESTORESESSION_STATIC1 = IDD_PREFERENCE_BACKUP_BOX + 19, - IDC_BACKUPDIR_RESTORESESSION_EDIT = IDD_PREFERENCE_BACKUP_BOX + 20, - IDD_BACKUPDIR_RESTORESESSION_STATIC2 = IDD_PREFERENCE_BACKUP_BOX + 21, - IDD_BACKUPDIR_RESTORESESSION_PATHLABEL_STATIC = IDD_PREFERENCE_BACKUP_BOX + 22, - IDD_BACKUPDIR_RESTORESESSION_PATH_EDIT = IDD_PREFERENCE_BACKUP_BOX + 23, - IDD_AUTOC_IGNORENUMBERS = IDD_PREFERENCE_BACKUP_BOX + 24, - - IDD_PREFERENCE_AUTOCOMPLETION_BOX = 6850, - IDD_AUTOCINSERT_GRPSTATIC = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 1, - IDD_AUTOCPARENTHESES_CHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 2, - IDD_AUTOCBRACKET_CHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 3, - IDD_AUTOCCURLYBRACKET_CHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 4, - IDD_AUTOC_DOUBLEQUOTESCHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 5, - IDD_AUTOC_QUOTESCHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 6, - IDD_AUTOCTAG_CHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 7, - IDC_MACHEDPAIROPEN_STATIC = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 8, - IDC_MACHEDPAIRCLOSE_STATIC = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 9, - IDC_MACHEDPAIR_STATIC1 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 10, - IDC_MACHEDPAIROPEN_EDIT1 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 11, - IDC_MACHEDPAIRCLOSE_EDIT1 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 12, - IDC_MACHEDPAIR_STATIC2 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 13, - IDC_MACHEDPAIROPEN_EDIT2 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 14, - IDC_MACHEDPAIRCLOSE_EDIT2 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 15, - IDC_MACHEDPAIR_STATIC3 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 16, - IDC_MACHEDPAIROPEN_EDIT3 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 17, - IDC_MACHEDPAIRCLOSE_EDIT3 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 18, - - IDD_PREFERENCE_SEARCHINGSETTINGS_BOX = 6900, - IDC_CHECK_STOPFILLINGFINDFIELD = IDD_PREFERENCE_SEARCHINGSETTINGS_BOX + 1, - IDC_CHECK_MONOSPACEDFONT_FINDDLG = IDD_PREFERENCE_SEARCHINGSETTINGS_BOX + 2, - - /* --Autogenerated -- end of section automatically generated from preference_rc.h */ - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +// +// This file should stay in sync with the CPP project file +// "notepad-plus-plus/scintilla/include/Scintilla.iface" +// found at +// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/scintilla/include/Scintilla.iface +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NppPluginNET.PluginInfrastructure +{ + public enum Preference + { + /* ++Autogenerated -- start of section automatically generated from preference_rc.h */ + + IDD_PREFERENCE_BOX = 6000, + IDC_BUTTON_CLOSE = IDD_PREFERENCE_BOX + 1, + IDC_LIST_DLGTITLE = IDD_PREFERENCE_BOX + 2, + + IDD_PREFERENCE_BAR_BOX = 6100, + IDC_TOOLBAR_GB_STATIC = IDD_PREFERENCE_BAR_BOX + 1, + IDC_CHECK_HIDE = IDD_PREFERENCE_BAR_BOX + 2, + IDC_RADIO_SMALLICON = IDD_PREFERENCE_BAR_BOX + 3, + IDC_RADIO_BIGICON = IDD_PREFERENCE_BAR_BOX + 4, + IDC_RADIO_STANDARD = IDD_PREFERENCE_BAR_BOX + 5, + + IDC_TABBAR_GB_STATIC = IDD_PREFERENCE_BAR_BOX + 6, + IDC_CHECK_REDUCE = IDD_PREFERENCE_BAR_BOX + 7, + IDC_CHECK_LOCK = IDD_PREFERENCE_BAR_BOX + 8, + IDC_CHECK_DRAWINACTIVE = IDD_PREFERENCE_BAR_BOX + 9, + IDC_CHECK_ORANGE = IDD_PREFERENCE_BAR_BOX + 10, + IDC_CHECK_SHOWSTATUSBAR = IDD_PREFERENCE_BAR_BOX + 11, + IDC_CHECK_ENABLETABCLOSE = IDD_PREFERENCE_BAR_BOX + 12, + IDC_CHECK_DBCLICK2CLOSE = IDD_PREFERENCE_BAR_BOX + 13, + IDC_CHECK_ENABLEDOCSWITCHER = IDD_PREFERENCE_BAR_BOX + 14, + IDC_CHECK_MAINTAININDENT = IDD_PREFERENCE_BAR_BOX + 15, + IDC_CHECK_KEEPINSAMEDIR = IDD_PREFERENCE_BAR_BOX + 16, + IDC_CHECK_STYLEMRU = IDD_PREFERENCE_BAR_BOX + 17, + IDC_CHECK_TAB_HIDE = IDD_PREFERENCE_BAR_BOX + 18, + IDC_CHECK_TAB_MULTILINE = IDD_PREFERENCE_BAR_BOX + 19, + IDC_CHECK_TAB_VERTICAL = IDD_PREFERENCE_BAR_BOX + 20, + IDC_CHECK_TAB_LAST_EXIT = IDD_PREFERENCE_BAR_BOX + 21, + IDC_CHECK_HIDEMENUBAR = IDD_PREFERENCE_BAR_BOX + 22, + IDC_LOCALIZATION_GB_STATIC = IDD_PREFERENCE_BAR_BOX + 23, + IDC_COMBO_LOCALIZATION = IDD_PREFERENCE_BAR_BOX + 24, + IDC_DOCSWITCH_GB_STATIC = IDD_PREFERENCE_BAR_BOX + 25, + IDC_CHECK_DOCSWITCH = IDD_PREFERENCE_BAR_BOX + 26, + IDC_CHECK_DOCSWITCH_NOEXTCOLUMN = IDD_PREFERENCE_BAR_BOX + 27, + + IDD_PREFERENCE_MULTIINSTANCE_BOX = 6150, + IDC_MULTIINST_GB_STATIC = IDD_PREFERENCE_MULTIINSTANCE_BOX + 1, + IDC_SESSIONININST_RADIO = IDD_PREFERENCE_MULTIINSTANCE_BOX + 2, + IDC_MULTIINST_RADIO = IDD_PREFERENCE_MULTIINSTANCE_BOX + 3, + IDC_MONOINST_RADIO = IDD_PREFERENCE_MULTIINSTANCE_BOX + 4, + IDD_STATIC_RESTARTNOTE = IDD_PREFERENCE_MULTIINSTANCE_BOX + 5, + + IDD_PREFERENCE_WORDCHARLIST_BOX = 6160, + IDC_WORDCHARLIST_GB_STATIC = IDD_PREFERENCE_WORDCHARLIST_BOX + 1, + IDC_RADIO_WORDCHAR_DEFAULT = IDD_PREFERENCE_WORDCHARLIST_BOX + 2, + IDC_RADIO_WORDCHAR_CUSTOM = IDD_PREFERENCE_WORDCHARLIST_BOX + 3, + IDC_WORDCHAR_CUSTOM_EDIT = IDD_PREFERENCE_WORDCHARLIST_BOX + 4, + IDD_WORDCHAR_QUESTION_BUTTON = IDD_PREFERENCE_WORDCHARLIST_BOX + 5, + IDD_STATIC_WORDCHAR_WARNING = IDD_PREFERENCE_WORDCHARLIST_BOX + 6, + + IDD_PREFERENCE_MARGEIN_BOX = 6200, + IDC_FMS_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 1, + IDC_RADIO_SIMPLE = IDD_PREFERENCE_MARGEIN_BOX + 2, + IDC_RADIO_ARROW = IDD_PREFERENCE_MARGEIN_BOX + 3, + IDC_RADIO_CIRCLE = IDD_PREFERENCE_MARGEIN_BOX + 4, + IDC_RADIO_BOX = IDD_PREFERENCE_MARGEIN_BOX + 5, + + IDC_CHECK_LINENUMBERMARGE = IDD_PREFERENCE_MARGEIN_BOX + 6, + IDC_CHECK_BOOKMARKMARGE = IDD_PREFERENCE_MARGEIN_BOX + 7, + + IDC_VES_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 11, + + IDC_CHECK_EDGEBGMODE = IDD_PREFERENCE_MARGEIN_BOX + 13, + IDC_CHECK_CURRENTLINEHILITE = IDD_PREFERENCE_MARGEIN_BOX + 14, + IDC_CHECK_SMOOTHFONT = IDD_PREFERENCE_MARGEIN_BOX + 15, + + IDC_CARETSETTING_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 16, + IDC_WIDTH_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 17, + IDC_WIDTH_COMBO = IDD_PREFERENCE_MARGEIN_BOX + 18, + IDC_BLINKRATE_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 19, + IDC_CARETBLINKRATE_SLIDER = IDD_PREFERENCE_MARGEIN_BOX + 20, + IDC_CARETBLINKRATE_F_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 21, + IDC_CARETBLINKRATE_S_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 22, + IDC_CHECK_DOCCHANGESTATEMARGE = IDD_PREFERENCE_MARGEIN_BOX + 23, + IDC_MULTISELECTION_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 24, + IDC_CHECK_MULTISELECTION = IDD_PREFERENCE_MARGEIN_BOX + 25, + + IDC_RADIO_FOLDMARGENONE = IDD_PREFERENCE_MARGEIN_BOX + 26, + + IDC_LW_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 27, + IDC_RADIO_LWDEF = IDD_PREFERENCE_MARGEIN_BOX + 28, + IDC_RADIO_LWALIGN = IDD_PREFERENCE_MARGEIN_BOX + 29, + IDC_RADIO_LWINDENT = IDD_PREFERENCE_MARGEIN_BOX + 30, + + IDC_BORDERWIDTH_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 31, + IDC_BORDERWIDTHVAL_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 32, + IDC_BORDERWIDTH_SLIDER = IDD_PREFERENCE_MARGEIN_BOX + 33, + IDC_CHECK_DISABLEADVANCEDSCROLL = IDD_PREFERENCE_MARGEIN_BOX + 34, + IDC_CHECK_NOEDGE = IDD_PREFERENCE_MARGEIN_BOX + 35, + IDC_CHECK_SCROLLBEYONDLASTLINE = IDD_PREFERENCE_MARGEIN_BOX + 36, + + IDC_STATIC_MULTILNMODE_TIP = IDD_PREFERENCE_MARGEIN_BOX + 37, + IDC_COLUMNPOS_EDIT = IDD_PREFERENCE_MARGEIN_BOX + 38, + IDC_CHECK_RIGHTCLICKKEEPSSELECTION = IDD_PREFERENCE_MARGEIN_BOX + 39, + + IDD_PREFERENCE_DELIMITERSETTINGS_BOX = 6250, + IDC_DELIMITERSETTINGS_GB_STATIC = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 1, + IDD_STATIC_OPENDELIMITER = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 2, + IDC_EDIT_OPENDELIMITER = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 3, + IDC_EDIT_CLOSEDELIMITER = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 4, + IDD_STATIC_CLOSEDELIMITER = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 5, + IDD_SEVERALLINEMODEON_CHECK = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 6, + IDD_STATIC_BLABLA = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 7, + IDD_STATIC_BLABLA2NDLINE = IDD_PREFERENCE_DELIMITERSETTINGS_BOX + 8, + + IDD_PREFERENCE_SETTINGSONCLOUD_BOX = 6260, + IDC_SETTINGSONCLOUD_WARNING_STATIC = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 1, + IDC_SETTINGSONCLOUD_GB_STATIC = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 2, + IDC_NOCLOUD_RADIO = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 3, + + IDC_WITHCLOUD_RADIO = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 7, + IDC_CLOUDPATH_EDIT = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 8, + IDD_CLOUDPATH_BROWSE_BUTTON = IDD_PREFERENCE_SETTINGSONCLOUD_BOX + 9, + + IDD_PREFERENCE_SEARCHENGINE_BOX = 6270, + IDC_SEARCHENGINES_GB_STATIC = IDD_PREFERENCE_SEARCHENGINE_BOX + 1, + IDC_SEARCHENGINE_DUCKDUCKGO_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 2, + IDC_SEARCHENGINE_GOOGLE_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 3, + IDC_SEARCHENGINE_BING_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 4, + IDC_SEARCHENGINE_YAHOO_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 5, + IDC_SEARCHENGINE_CUSTOM_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 6, + IDC_SEARCHENGINE_EDIT = IDD_PREFERENCE_SEARCHENGINE_BOX + 7, + IDD_SEARCHENGINE_NOTE_STATIC = IDD_PREFERENCE_SEARCHENGINE_BOX + 8, + IDC_SEARCHENGINE_STACKOVERFLOW_RADIO = IDD_PREFERENCE_SEARCHENGINE_BOX + 9, + + IDD_PREFERENCE_SETTING_BOX = 6300, + IDC_TABSETTING_GB_STATIC = IDD_PREFERENCE_SETTING_BOX + 1, + IDC_CHECK_REPLACEBYSPACE = IDD_PREFERENCE_SETTING_BOX + 2, + IDC_TABSIZE_STATIC = IDD_PREFERENCE_SETTING_BOX + 3, + IDC_HISTORY_GB_STATIC = IDD_PREFERENCE_SETTING_BOX + 4, + IDC_CHECK_DONTCHECKHISTORY = IDD_PREFERENCE_SETTING_BOX + 5, + IDC_MAXNBFILE_STATIC = IDD_PREFERENCE_SETTING_BOX + 6, + IDC_CHECK_MIN2SYSTRAY = IDD_PREFERENCE_SETTING_BOX + 8, + IDC_CHECK_REMEMBERSESSION = IDD_PREFERENCE_SETTING_BOX + 9, + IDC_TABSIZEVAL_STATIC = IDD_PREFERENCE_SETTING_BOX + 10, + IDC_MAXNBFILEVAL_STATIC = IDD_PREFERENCE_SETTING_BOX + 11, + IDC_FILEAUTODETECTION_STATIC = IDD_PREFERENCE_SETTING_BOX + 12, + IDC_CHECK_UPDATESILENTLY = IDD_PREFERENCE_SETTING_BOX + 13, + IDC_RADIO_BKNONE = IDD_PREFERENCE_SETTING_BOX + 15, + IDC_RADIO_BKSIMPLE = IDD_PREFERENCE_SETTING_BOX + 16, + IDC_RADIO_BKVERBOSE = IDD_PREFERENCE_SETTING_BOX + 17, + IDC_CLICKABLELINK_STATIC = IDD_PREFERENCE_SETTING_BOX + 18, + IDC_CHECK_CLICKABLELINK_ENABLE = IDD_PREFERENCE_SETTING_BOX + 19, + IDC_CHECK_CLICKABLELINK_NOUNDERLINE = IDD_PREFERENCE_SETTING_BOX + 20, + IDC_EDIT_SESSIONFILEEXT = IDD_PREFERENCE_SETTING_BOX + 21, + IDC_SESSIONFILEEXT_STATIC = IDD_PREFERENCE_SETTING_BOX + 22, + IDC_CHECK_AUTOUPDATE = IDD_PREFERENCE_SETTING_BOX + 23, + IDC_DOCUMENTSWITCHER_STATIC = IDD_PREFERENCE_SETTING_BOX + 24, + IDC_CHECK_UPDATEGOTOEOF = IDD_PREFERENCE_SETTING_BOX + 25, + IDC_CHECK_ENABLSMARTHILITE = IDD_PREFERENCE_SETTING_BOX + 26, + IDC_CHECK_ENABLTAGSMATCHHILITE = IDD_PREFERENCE_SETTING_BOX + 27, + IDC_CHECK_ENABLTAGATTRHILITE = IDD_PREFERENCE_SETTING_BOX + 28, + IDC_TAGMATCHEDHILITE_STATIC = IDD_PREFERENCE_SETTING_BOX + 29, + IDC_CHECK_HIGHLITENONEHTMLZONE = IDD_PREFERENCE_SETTING_BOX + 30, + IDC_CHECK_SHORTTITLE = IDD_PREFERENCE_SETTING_BOX + 31, + IDC_CHECK_SMARTHILITECASESENSITIVE = IDD_PREFERENCE_SETTING_BOX + 32, + IDC_SMARTHILITING_STATIC = IDD_PREFERENCE_SETTING_BOX + 33, + IDC_CHECK_DETECTENCODING = IDD_PREFERENCE_SETTING_BOX + 34, + IDC_CHECK_BACKSLASHISESCAPECHARACTERFORSQL = IDD_PREFERENCE_SETTING_BOX + 35, + IDC_EDIT_WORKSPACEFILEEXT = IDD_PREFERENCE_SETTING_BOX + 36, + IDC_WORKSPACEFILEEXT_STATIC = IDD_PREFERENCE_SETTING_BOX + 37, + IDC_CHECK_SMARTHILITEWHOLEWORDONLY = IDD_PREFERENCE_SETTING_BOX + 38, + IDC_CHECK_SMARTHILITEUSEFINDSETTINGS = IDD_PREFERENCE_SETTING_BOX + 39, + IDC_CHECK_SMARTHILITEANOTHERRVIEW = IDD_PREFERENCE_SETTING_BOX + 40, + + IDC_CHECK_REMEMBEREDITVIEWPERFILE = IDD_PREFERENCE_SETTING_BOX + 41, + IDC_REMEMBEREDITVIEWPERFILE_STATIC = IDD_PREFERENCE_SETTING_BOX + 42, + IDC_EDIT_REMEMBEREDITVIEWPERFILE = IDD_PREFERENCE_SETTING_BOX + 43, + + IDC_DOCUMENTPEEK_STATIC = IDD_PREFERENCE_SETTING_BOX + 44, + IDC_CHECK_ENABLEDOCPEEKER = IDD_PREFERENCE_SETTING_BOX + 45, + IDC_CHECK_ENABLEDOCPEEKONMAP = IDD_PREFERENCE_SETTING_BOX + 46, + IDC_COMBO_FILEUPDATECHOICE = IDD_PREFERENCE_SETTING_BOX + 47, + IDC_CHECK_DIRECTWRITE_ENABLE = IDD_PREFERENCE_SETTING_BOX + 49, + + IDD_PREFERENCE_NEWDOCSETTING_BOX = 6400, + IDC_FORMAT_GB_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 1, + IDC_RADIO_F_WIN = IDD_PREFERENCE_NEWDOCSETTING_BOX + 2, + IDC_RADIO_F_UNIX = IDD_PREFERENCE_NEWDOCSETTING_BOX + 3, + IDC_RADIO_F_MAC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 4, + IDC_ENCODING_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 5, + IDC_RADIO_ANSI = IDD_PREFERENCE_NEWDOCSETTING_BOX + 6, + IDC_RADIO_UTF8SANSBOM = IDD_PREFERENCE_NEWDOCSETTING_BOX + 7, + IDC_RADIO_UTF8 = IDD_PREFERENCE_NEWDOCSETTING_BOX + 8, + IDC_RADIO_UCS2BIG = IDD_PREFERENCE_NEWDOCSETTING_BOX + 9, + IDC_RADIO_UCS2SMALL = IDD_PREFERENCE_NEWDOCSETTING_BOX + 10, + IDC_DEFAULTLANG_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 11, + IDC_COMBO_DEFAULTLANG = IDD_PREFERENCE_NEWDOCSETTING_BOX + 12, + IDC_OPENSAVEDIR_GR_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 13, + IDC_OPENSAVEDIR_FOLLOWCURRENT_RADIO = IDD_PREFERENCE_NEWDOCSETTING_BOX + 14, + IDC_OPENSAVEDIR_REMEMBERLAST_RADIO = IDD_PREFERENCE_NEWDOCSETTING_BOX + 15, + IDC_OPENSAVEDIR_ALWAYSON_RADIO = IDD_PREFERENCE_NEWDOCSETTING_BOX + 16, + IDC_OPENSAVEDIR_ALWAYSON_EDIT = IDD_PREFERENCE_NEWDOCSETTING_BOX + 17, + IDD_OPENSAVEDIR_ALWAYSON_BROWSE_BUTTON = IDD_PREFERENCE_NEWDOCSETTING_BOX + 18, + IDC_NEWDOCUMENT_GR_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 19, + IDC_CHECK_OPENANSIASUTF8 = IDD_PREFERENCE_NEWDOCSETTING_BOX + 20, + IDC_RADIO_OTHERCP = IDD_PREFERENCE_NEWDOCSETTING_BOX + 21, + IDC_COMBO_OTHERCP = IDD_PREFERENCE_NEWDOCSETTING_BOX + 22, + IDC_GP_STATIC_RECENTFILES = IDD_PREFERENCE_NEWDOCSETTING_BOX + 23, + IDC_CHECK_INSUBMENU = IDD_PREFERENCE_NEWDOCSETTING_BOX + 24, + IDC_RADIO_ONLYFILENAME = IDD_PREFERENCE_NEWDOCSETTING_BOX + 25, + IDC_RADIO_FULLFILENAMEPATH = IDD_PREFERENCE_NEWDOCSETTING_BOX + 26, + IDC_RADIO_CUSTOMIZELENTH = IDD_PREFERENCE_NEWDOCSETTING_BOX + 27, + IDC_CUSTOMIZELENGTHVAL_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 28, + IDC_DISPLAY_STATIC = IDD_PREFERENCE_NEWDOCSETTING_BOX + 29, + IDC_OPENSAVEDIR_CHECK_USENEWSTYLESAVEDIALOG = IDD_PREFERENCE_NEWDOCSETTING_BOX + 30, + IDC_OPENSAVEDIR_CHECK_DRROPFOLDEROPENFILES = IDD_PREFERENCE_NEWDOCSETTING_BOX + 31, + + IDD_PREFERENCE_DEFAULTDIRECTORY_BOX = 6450, + IDD_PREFERENCE_RECENTFILESHISTORY_BOX = 6460, + + IDD_PREFERENCE_LANG_BOX = 6500, + IDC_LIST_ENABLEDLANG = IDD_PREFERENCE_LANG_BOX + 1, + IDC_LIST_DISABLEDLANG = IDD_PREFERENCE_LANG_BOX + 2, + IDC_BUTTON_REMOVE = IDD_PREFERENCE_LANG_BOX + 3, + IDC_BUTTON_RESTORE = IDD_PREFERENCE_LANG_BOX + 4, + IDC_ENABLEDITEMS_STATIC = IDD_PREFERENCE_LANG_BOX + 5, + IDC_DISABLEDITEMS_STATIC = IDD_PREFERENCE_LANG_BOX + 6, + IDC_CHECK_LANGMENUCOMPACT = IDD_PREFERENCE_LANG_BOX + 7, + IDC_CHECK_LANGMENU_GR_STATIC = IDD_PREFERENCE_LANG_BOX + 8, + IDC_LIST_TABSETTNG = IDD_PREFERENCE_LANG_BOX + 9, + IDC_CHECK_DEFAULTTABVALUE = IDD_PREFERENCE_LANG_BOX + 10, + IDC_GR_TABVALUE_STATIC = IDD_PREFERENCE_LANG_BOX + 11, + IDC_TABSIZEVAL_DISABLE_STATIC = IDD_PREFERENCE_LANG_BOX + 12, + IDD_PREFERENCE_HILITE_BOX = 6550, + + IDD_PREFERENCE_PRINT_BOX = 6600, + IDC_CHECK_PRINTLINENUM = IDD_PREFERENCE_PRINT_BOX + 1, + IDC_COLOUROPT_STATIC = IDD_PREFERENCE_PRINT_BOX + 2, + IDC_RADIO_WYSIWYG = IDD_PREFERENCE_PRINT_BOX + 3, + IDC_RADIO_INVERT = IDD_PREFERENCE_PRINT_BOX + 4, + IDC_RADIO_BW = IDD_PREFERENCE_PRINT_BOX + 5, + IDC_RADIO_NOBG = IDD_PREFERENCE_PRINT_BOX + 6, + IDC_MARGESETTINGS_STATIC = IDD_PREFERENCE_PRINT_BOX + 7, + IDC_EDIT_ML = IDD_PREFERENCE_PRINT_BOX + 8, + IDC_EDIT_MT = IDD_PREFERENCE_PRINT_BOX + 9, + IDC_EDIT_MR = IDD_PREFERENCE_PRINT_BOX + 10, + IDC_EDIT_MB = IDD_PREFERENCE_PRINT_BOX + 11, + IDC_ML_STATIC = IDD_PREFERENCE_PRINT_BOX + 12, + IDC_MT_STATIC = IDD_PREFERENCE_PRINT_BOX + 13, + IDC_MR_STATIC = IDD_PREFERENCE_PRINT_BOX + 14, + IDC_MB_STATIC = IDD_PREFERENCE_PRINT_BOX + 15, + + IDD_PREFERENCE_PRINT2_BOX = 6700, + IDC_EDIT_HLEFT = IDD_PREFERENCE_PRINT2_BOX + 1, + IDC_EDIT_HMIDDLE = IDD_PREFERENCE_PRINT2_BOX + 2, + IDC_EDIT_HRIGHT = IDD_PREFERENCE_PRINT2_BOX + 3, + IDC_COMBO_HFONTNAME = IDD_PREFERENCE_PRINT2_BOX + 4, + IDC_COMBO_HFONTSIZE = IDD_PREFERENCE_PRINT2_BOX + 5, + IDC_CHECK_HBOLD = IDD_PREFERENCE_PRINT2_BOX + 6, + IDC_CHECK_HITALIC = IDD_PREFERENCE_PRINT2_BOX + 7, + IDC_HGB_STATIC = IDD_PREFERENCE_PRINT2_BOX + 8, + IDC_HL_STATIC = IDD_PREFERENCE_PRINT2_BOX + 9, + IDC_HM_STATIC = IDD_PREFERENCE_PRINT2_BOX + 10, + IDC_HR_STATIC = IDD_PREFERENCE_PRINT2_BOX + 11, + IDC_EDIT_FLEFT = IDD_PREFERENCE_PRINT2_BOX + 12, + IDC_EDIT_FMIDDLE = IDD_PREFERENCE_PRINT2_BOX + 13, + IDC_EDIT_FRIGHT = IDD_PREFERENCE_PRINT2_BOX + 14, + IDC_COMBO_FFONTNAME = IDD_PREFERENCE_PRINT2_BOX + 15, + IDC_COMBO_FFONTSIZE = IDD_PREFERENCE_PRINT2_BOX + 16, + IDC_CHECK_FBOLD = IDD_PREFERENCE_PRINT2_BOX + 17, + IDC_CHECK_FITALIC = IDD_PREFERENCE_PRINT2_BOX + 18, + IDC_FGB_STATIC = IDD_PREFERENCE_PRINT2_BOX + 19, + IDC_FL_STATIC = IDD_PREFERENCE_PRINT2_BOX + 20, + IDC_FM_STATIC = IDD_PREFERENCE_PRINT2_BOX + 21, + IDC_FR_STATIC = IDD_PREFERENCE_PRINT2_BOX + 22, + IDC_BUTTON_ADDVAR = IDD_PREFERENCE_PRINT2_BOX + 23, + IDC_COMBO_VARLIST = IDD_PREFERENCE_PRINT2_BOX + 24, + IDC_VAR_STATIC = IDD_PREFERENCE_PRINT2_BOX + 25, + IDC_VIEWPANEL_STATIC = IDD_PREFERENCE_PRINT2_BOX + 26, + IDC_WHICHPART_STATIC = IDD_PREFERENCE_PRINT2_BOX + 27, + IDC_HEADERFPPTER_GR_STATIC = IDD_PREFERENCE_PRINT2_BOX + 28, + + IDD_PREFERENCE_BACKUP_BOX = 6800, + IDC_BACKUPDIR_GRP_STATIC = IDD_PREFERENCE_BACKUP_BOX + 1, + IDC_BACKUPDIR_CHECK = IDD_PREFERENCE_BACKUP_BOX + 2, + IDD_BACKUPDIR_STATIC = IDD_PREFERENCE_BACKUP_BOX + 3, + IDC_BACKUPDIR_USERCUSTOMDIR_GRPSTATIC = IDD_PREFERENCE_BACKUP_BOX + 4, + IDC_BACKUPDIR_EDIT = IDD_PREFERENCE_BACKUP_BOX + 5, + IDD_BACKUPDIR_BROWSE_BUTTON = IDD_PREFERENCE_BACKUP_BOX + 6, + IDD_AUTOC_GRPSTATIC = IDD_PREFERENCE_BACKUP_BOX + 7, + IDD_AUTOC_ENABLECHECK = IDD_PREFERENCE_BACKUP_BOX + 8, + IDD_AUTOC_FUNCRADIO = IDD_PREFERENCE_BACKUP_BOX + 9, + IDD_AUTOC_WORDRADIO = IDD_PREFERENCE_BACKUP_BOX + 10, + IDD_AUTOC_STATIC_FROM = IDD_PREFERENCE_BACKUP_BOX + 11, + IDD_AUTOC_STATIC_N = IDD_PREFERENCE_BACKUP_BOX + 12, + IDD_AUTOC_STATIC_CHAR = IDD_PREFERENCE_BACKUP_BOX + 13, + IDD_AUTOC_STATIC_NOTE = IDD_PREFERENCE_BACKUP_BOX + 14, + IDD_FUNC_CHECK = IDD_PREFERENCE_BACKUP_BOX + 15, + IDD_AUTOC_BOTHRADIO = IDD_PREFERENCE_BACKUP_BOX + 16, + IDC_BACKUPDIR_RESTORESESSION_GRP_STATIC = IDD_PREFERENCE_BACKUP_BOX + 17, + IDC_BACKUPDIR_RESTORESESSION_CHECK = IDD_PREFERENCE_BACKUP_BOX + 18, + IDD_BACKUPDIR_RESTORESESSION_STATIC1 = IDD_PREFERENCE_BACKUP_BOX + 19, + IDC_BACKUPDIR_RESTORESESSION_EDIT = IDD_PREFERENCE_BACKUP_BOX + 20, + IDD_BACKUPDIR_RESTORESESSION_STATIC2 = IDD_PREFERENCE_BACKUP_BOX + 21, + IDD_BACKUPDIR_RESTORESESSION_PATHLABEL_STATIC = IDD_PREFERENCE_BACKUP_BOX + 22, + IDD_BACKUPDIR_RESTORESESSION_PATH_EDIT = IDD_PREFERENCE_BACKUP_BOX + 23, + IDD_AUTOC_IGNORENUMBERS = IDD_PREFERENCE_BACKUP_BOX + 24, + + IDD_PREFERENCE_AUTOCOMPLETION_BOX = 6850, + IDD_AUTOCINSERT_GRPSTATIC = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 1, + IDD_AUTOCPARENTHESES_CHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 2, + IDD_AUTOCBRACKET_CHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 3, + IDD_AUTOCCURLYBRACKET_CHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 4, + IDD_AUTOC_DOUBLEQUOTESCHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 5, + IDD_AUTOC_QUOTESCHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 6, + IDD_AUTOCTAG_CHECK = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 7, + IDC_MACHEDPAIROPEN_STATIC = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 8, + IDC_MACHEDPAIRCLOSE_STATIC = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 9, + IDC_MACHEDPAIR_STATIC1 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 10, + IDC_MACHEDPAIROPEN_EDIT1 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 11, + IDC_MACHEDPAIRCLOSE_EDIT1 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 12, + IDC_MACHEDPAIR_STATIC2 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 13, + IDC_MACHEDPAIROPEN_EDIT2 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 14, + IDC_MACHEDPAIRCLOSE_EDIT2 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 15, + IDC_MACHEDPAIR_STATIC3 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 16, + IDC_MACHEDPAIROPEN_EDIT3 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 17, + IDC_MACHEDPAIRCLOSE_EDIT3 = IDD_PREFERENCE_AUTOCOMPLETION_BOX + 18, + + IDD_PREFERENCE_SEARCHINGSETTINGS_BOX = 6900, + IDC_CHECK_STOPFILLINGFINDFIELD = IDD_PREFERENCE_SEARCHINGSETTINGS_BOX + 1, + IDC_CHECK_MONOSPACEDFONT_FINDDLG = IDD_PREFERENCE_SEARCHINGSETTINGS_BOX + 2, + + /* --Autogenerated -- end of section automatically generated from preference_rc.h */ + } +} diff --git a/WakaTime/PluginInfrastructure/Resource_h.cs b/WakaTime/PluginInfrastructure/Resource_h.cs index 45933bd..7e0814f 100644 --- a/WakaTime/PluginInfrastructure/Resource_h.cs +++ b/WakaTime/PluginInfrastructure/Resource_h.cs @@ -1,376 +1,376 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -// -// This file should stay in sync with the CPP project file -// "notepad-plus-plus/scintilla/include/Scintilla.iface" -// found at -// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/scintilla/include/Scintilla.iface -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Kbg.NppPluginNET.PluginInfrastructure; - -namespace NppPluginNET.PluginInfrastructure -{ - public enum Resource - { - /* ++Autogenerated -- start of section automatically generated from resource.h */ - - IDC_STATIC = -1, - - IDI_M30ICON = 100, - IDI_CHAMELEON = 101, - - IDR_RT_MANIFEST = 103, - - IDI_NEW_OFF_ICON = 201, - IDI_OPEN_OFF_ICON = 202, - IDI_CLOSE_OFF_ICON = 203, - IDI_CLOSEALL_OFF_ICON = 204, - IDI_SAVE_OFF_ICON = 205, - IDI_SAVEALL_OFF_ICON = 206, - IDI_CUT_OFF_ICON = 207, - IDI_COPY_OFF_ICON = 208, - IDI_PASTE_OFF_ICON = 209, - IDI_UNDO_OFF_ICON = 210, - IDI_REDO_OFF_ICON = 211, - IDI_FIND_OFF_ICON = 212, - IDI_REPLACE_OFF_ICON = 213, - IDI_ZOOMIN_OFF_ICON = 214, - IDI_ZOOMOUT_OFF_ICON = 215, - IDI_VIEW_UD_DLG_OFF_ICON = 216, - IDI_PRINT_OFF_ICON = 217, - IDI_VIEW_ALL_CHAR_ON_ICON = 218, - IDI_VIEW_INDENT_ON_ICON = 219, - IDI_VIEW_WRAP_ON_ICON = 220, - - IDI_STARTRECORD_OFF_ICON = 221, - IDI_STARTRECORD_ON_ICON = 222, - IDI_STARTRECORD_DISABLE_ICON = 223, - IDI_STOPRECORD_OFF_ICON = 224, - IDI_STOPRECORD_ON_ICON = 225, - IDI_STOPRECORD_DISABLE_ICON = 226, - IDI_PLAYRECORD_OFF_ICON = 227, - IDI_PLAYRECORD_ON_ICON = 228, - IDI_PLAYRECORD_DISABLE_ICON = 229, - IDI_SAVERECORD_OFF_ICON = 230, - IDI_SAVERECORD_ON_ICON = 231, - IDI_SAVERECORD_DISABLE_ICON = 232, - - IDI_MMPLAY_DIS_ICON = 233, - IDI_MMPLAY_OFF_ICON = 234, - IDI_MMPLAY_ON_ICON = 235, - - IDI_NEW_ON_ICON = 301, - IDI_OPEN_ON_ICON = 302, - IDI_CLOSE_ON_ICON = 303, - IDI_CLOSEALL_ON_ICON = 304, - IDI_SAVE_ON_ICON = 305, - IDI_SAVEALL_ON_ICON = 306, - IDI_CUT_ON_ICON = 307, - IDI_COPY_ON_ICON = 308, - IDI_PASTE_ON_ICON = 309, - IDI_UNDO_ON_ICON = 310, - IDI_REDO_ON_ICON = 311, - IDI_FIND_ON_ICON = 312, - IDI_REPLACE_ON_ICON = 313, - IDI_ZOOMIN_ON_ICON = 314, - IDI_ZOOMOUT_ON_ICON = 315, - IDI_VIEW_UD_DLG_ON_ICON = 316, - IDI_PRINT_ON_ICON = 317, - IDI_VIEW_ALL_CHAR_OFF_ICON = 318, - IDI_VIEW_INDENT_OFF_ICON = 319, - IDI_VIEW_WRAP_OFF_ICON = 320, - - IDI_SAVE_DISABLE_ICON = 403, - IDI_SAVEALL_DISABLE_ICON = 404, - - IDI_CUT_DISABLE_ICON = 407, - IDI_COPY_DISABLE_ICON = 408, - IDI_PASTE_DISABLE_ICON = 409, - IDI_UNDO_DISABLE_ICON = 410, - IDI_REDO_DISABLE_ICON = 411, - IDI_DELETE_ICON = 412, - - IDI_SYNCV_OFF_ICON = 413, - IDI_SYNCV_ON_ICON = 414, - IDI_SYNCV_DISABLE_ICON = 415, - - IDI_SYNCH_OFF_ICON = 416, - IDI_SYNCH_ON_ICON = 417, - IDI_SYNCH_DISABLE_ICON = 418, - - IDI_SAVED_ICON = 501, - IDI_UNSAVED_ICON = 502, - IDI_READONLY_ICON = 503, - IDI_FIND_RESULT_ICON = 504, - IDI_MONITORING_ICON = 505, - - IDI_PROJECT_WORKSPACE = 601, - IDI_PROJECT_WORKSPACEDIRTY = 602, - IDI_PROJECT_PROJECT = 603, - IDI_PROJECT_FOLDEROPEN = 604, - IDI_PROJECT_FOLDERCLOSE = 605, - IDI_PROJECT_FILE = 606, - IDI_PROJECT_FILEINVALID = 607, - IDI_FB_ROOTOPEN = 608, - IDI_FB_ROOTCLOSE = 609, - IDI_FB_SELECTCURRENTFILE = 610, - IDI_FB_FOLDALL = 611, - IDI_FB_EXPANDALL = 612, - - IDI_FUNCLIST_ROOT = 620, - IDI_FUNCLIST_NODE = 621, - IDI_FUNCLIST_LEAF = 622, - - IDI_FUNCLIST_SORTBUTTON = 631, - IDI_FUNCLIST_RELOADBUTTON = 632, - - IDI_VIEW_DOC_MAP_ON_ICON = 633, - IDI_VIEW_DOC_MAP_OFF_ICON = 634, - IDI_VIEW_FILEBROWSER_ON_ICON = 635, - IDI_VIEW_FILEBROWSER_OFF_ICON = 636, - IDI_VIEW_FUNCLIST_ON_ICON = 637, - IDI_VIEW_FUNCLIST_OFF_ICON = 638, - IDI_VIEW_MONITORING_ON_ICON = 639, - IDI_VIEW_MONITORING_OFF_ICON = 640, - - IDC_MY_CUR = 1402, - IDC_UP_ARROW = 1403, - IDC_DRAG_TAB = 1404, - IDC_DRAG_INTERDIT_TAB = 1405, - IDC_DRAG_PLUS_TAB = 1406, - IDC_DRAG_OUT_TAB = 1407, - - IDC_MACRO_RECORDING = 1408, - - IDR_SAVEALL = 1500, - IDR_CLOSEFILE = 1501, - IDR_CLOSEALL = 1502, - IDR_FIND = 1503, - IDR_REPLACE = 1504, - IDR_ZOOMIN = 1505, - IDR_ZOOMOUT = 1506, - IDR_WRAP = 1507, - IDR_INVISIBLECHAR = 1508, - IDR_INDENTGUIDE = 1509, - IDR_SHOWPANNEL = 1510, - IDR_STARTRECORD = 1511, - IDR_STOPRECORD = 1512, - IDR_PLAYRECORD = 1513, - IDR_SAVERECORD = 1514, - IDR_SYNCV = 1515, - IDR_SYNCH = 1516, - IDR_FILENEW = 1517, - IDR_FILEOPEN = 1518, - IDR_FILESAVE = 1519, - IDR_PRINT = 1520, - IDR_CUT = 1521, - IDR_COPY = 1522, - IDR_PASTE = 1523, - IDR_UNDO = 1524, - IDR_REDO = 1525, - IDR_M_PLAYRECORD = 1526, - IDR_DOCMAP = 1527, - IDR_FUNC_LIST = 1528, - IDR_FILEBROWSER = 1529, - IDR_CLOSETAB = 1530, - IDR_CLOSETAB_INACT = 1531, - IDR_CLOSETAB_HOVER = 1532, - IDR_CLOSETAB_PUSH = 1533, - IDR_FUNC_LIST_ICO = 1534, - IDR_DOCMAP_ICO = 1535, - IDR_PROJECTPANEL_ICO = 1536, - IDR_CLIPBOARDPANEL_ICO = 1537, - IDR_ASCIIPANEL_ICO = 1538, - IDR_DOCSWITCHER_ICO = 1539, - IDR_FILEBROWSER_ICO = 1540, - IDR_FILEMONITORING = 1541, - - ID_MACRO = 20000, - ID_MACRO_LIMIT = 20200, - - ID_USER_CMD = 21000, - ID_USER_CMD_LIMIT = 21200, - - ID_PLUGINS_CMD = 22000, - ID_PLUGINS_CMD_LIMIT = 22500, - - ID_PLUGINS_CMD_DYNAMIC = 23000, - ID_PLUGINS_CMD_DYNAMIC_LIMIT = 24999, - - MARKER_PLUGINS = 3, - MARKER_PLUGINS_LIMIT = 19, - - ID_PLUGINS_REMOVING = 22501, - ID_PLUGINS_REMOVING_END = 22600, - - IDCMD = 50000, - - IDC_PREV_DOC = IDCMD+3, - IDC_NEXT_DOC = IDCMD+4, - IDC_EDIT_TOGGLEMACRORECORDING = IDCMD+5, - - IDCMD_LIMIT = IDCMD+20, - - IDSCINTILLA = 60000, - IDSCINTILLA_KEY_HOME = IDSCINTILLA+0, - IDSCINTILLA_KEY_HOME_WRAP = IDSCINTILLA+1, - IDSCINTILLA_KEY_END = IDSCINTILLA+2, - IDSCINTILLA_KEY_END_WRAP = IDSCINTILLA+3, - IDSCINTILLA_KEY_LINE_DUP = IDSCINTILLA+4, - IDSCINTILLA_KEY_LINE_CUT = IDSCINTILLA+5, - IDSCINTILLA_KEY_LINE_DEL = IDSCINTILLA+6, - IDSCINTILLA_KEY_LINE_TRANS = IDSCINTILLA+7, - IDSCINTILLA_KEY_LINE_COPY = IDSCINTILLA+8, - IDSCINTILLA_KEY_CUT = IDSCINTILLA+9, - IDSCINTILLA_KEY_COPY = IDSCINTILLA+10, - IDSCINTILLA_KEY_PASTE = IDSCINTILLA+11, - IDSCINTILLA_KEY_DEL = IDSCINTILLA+12, - IDSCINTILLA_KEY_SELECTALL = IDSCINTILLA+13, - IDSCINTILLA_KEY_OUTDENT = IDSCINTILLA+14, - IDSCINTILLA_KEY_UNDO = IDSCINTILLA+15, - IDSCINTILLA_KEY_REDO = IDSCINTILLA+16, - IDSCINTILLA_LIMIT = IDSCINTILLA+30, - - IDD_FILEVIEW_DIALOG = 1000, - - IDC_MINIMIZED_TRAY = 67001, - - IDD_CREATE_DIRECTORY = 1100, - IDC_STATIC_CURRENT_FOLDER = 1101, - IDC_EDIT_NEW_FOLDER = 1102, - - IDD_INSERT_INPUT_TEXT = 1200, - IDC_EDIT_INPUT_VALUE = 1201, - IDC_STATIC_INPUT_TITLE = 1202, - IDC_ICON_INPUT_ICON = 1203, - - IDR_M30_MENU = 1500, - - IDR_SYSTRAYPOPUP_MENU = 1501, - - IDD_ABOUTBOX = 1700, - IDC_LICENCE_EDIT = 1701, - IDC_HOME_ADDR = 1702, - IDC_EMAIL_ADDR = 1703, - IDC_ONLINEHELP_ADDR = 1704, - IDC_AUTHOR_NAME = 1705, - IDC_BUILD_DATETIME = 1706, - IDC_VERSION_BIT = 1707, - - IDD_DEBUGINFOBOX = 1750, - IDC_DEBUGINFO_EDIT = 1751, - IDC_DEBUGINFO_COPYLINK = 1752, - - IDD_DOSAVEORNOTBOX = 1760, - IDC_DOSAVEORNOTTEX = 1761, - - IDD_GOLINE = 2000, - ID_GOLINE_EDIT = IDD_GOLINE + 1, - ID_CURRLINE = IDD_GOLINE + 2, - ID_LASTLINE = IDD_GOLINE + 3, - ID_URHERE_STATIC = IDD_GOLINE + 4, - ID_UGO_STATIC = IDD_GOLINE + 5, - ID_NOMORETHAN_STATIC = IDD_GOLINE + 6, - IDC_RADIO_GOTOLINE = IDD_GOLINE + 7, - IDC_RADIO_GOTOOFFSET = IDD_GOLINE + 8, - - IDD_VALUE_DLG = 2400, - IDC_VALUE_STATIC = 2401, - IDC_VALUE_EDIT = 2402, - - IDD_BUTTON_DLG = 2410, - IDC_RESTORE_BUTTON = 2411, - - IDD_SETTING_DLG = 2500, - - NOTEPADPLUS_USER_INTERNAL = Constants.WM_USER + 0000, - NPPM_INTERNAL_USERCMDLIST_MODIFIED = NOTEPADPLUS_USER_INTERNAL + 1, - NPPM_INTERNAL_CMDLIST_MODIFIED = NOTEPADPLUS_USER_INTERNAL + 2, - NPPM_INTERNAL_MACROLIST_MODIFIED = NOTEPADPLUS_USER_INTERNAL + 3, - NPPM_INTERNAL_PLUGINCMDLIST_MODIFIED = NOTEPADPLUS_USER_INTERNAL + 4, - NPPM_INTERNAL_CLEARSCINTILLAKEY = NOTEPADPLUS_USER_INTERNAL + 5, - NPPM_INTERNAL_BINDSCINTILLAKEY = NOTEPADPLUS_USER_INTERNAL + 6, - NPPM_INTERNAL_SCINTILLAKEYMODIFIED = NOTEPADPLUS_USER_INTERNAL + 7, - NPPM_INTERNAL_SCINTILLAFINFERCOLLAPSE = NOTEPADPLUS_USER_INTERNAL + 8, - NPPM_INTERNAL_SCINTILLAFINFERUNCOLLAPSE = NOTEPADPLUS_USER_INTERNAL + 9, - NPPM_INTERNAL_DISABLEAUTOUPDATE = NOTEPADPLUS_USER_INTERNAL + 10, - NPPM_INTERNAL_SETTING_HISTORY_SIZE = NOTEPADPLUS_USER_INTERNAL + 11, - NPPM_INTERNAL_ISTABBARREDUCED = NOTEPADPLUS_USER_INTERNAL + 12, - NPPM_INTERNAL_ISFOCUSEDTAB = NOTEPADPLUS_USER_INTERNAL + 13, - NPPM_INTERNAL_GETMENU = NOTEPADPLUS_USER_INTERNAL + 14, - NPPM_INTERNAL_CLEARINDICATOR = NOTEPADPLUS_USER_INTERNAL + 15, - NPPM_INTERNAL_SCINTILLAFINFERCOPY = NOTEPADPLUS_USER_INTERNAL + 16, - NPPM_INTERNAL_SCINTILLAFINFERSELECTALL = NOTEPADPLUS_USER_INTERNAL + 17, - NPPM_INTERNAL_SETCARETWIDTH = NOTEPADPLUS_USER_INTERNAL + 18, - NPPM_INTERNAL_SETCARETBLINKRATE = NOTEPADPLUS_USER_INTERNAL + 19, - NPPM_INTERNAL_CLEARINDICATORTAGMATCH = NOTEPADPLUS_USER_INTERNAL + 20, - NPPM_INTERNAL_CLEARINDICATORTAGATTR = NOTEPADPLUS_USER_INTERNAL + 21, - NPPM_INTERNAL_SWITCHVIEWFROMHWND = NOTEPADPLUS_USER_INTERNAL + 22, - NPPM_INTERNAL_UPDATETITLEBAR = NOTEPADPLUS_USER_INTERNAL + 23, - NPPM_INTERNAL_CANCEL_FIND_IN_FILES = NOTEPADPLUS_USER_INTERNAL + 24, - NPPM_INTERNAL_RELOADNATIVELANG = NOTEPADPLUS_USER_INTERNAL + 25, - NPPM_INTERNAL_PLUGINSHORTCUTMOTIFIED = NOTEPADPLUS_USER_INTERNAL + 26, - NPPM_INTERNAL_SCINTILLAFINFERCLEARALL = NOTEPADPLUS_USER_INTERNAL + 27, - - NPPM_INTERNAL_SETTING_TAB_REPLCESPACE = NOTEPADPLUS_USER_INTERNAL + 29, - NPPM_INTERNAL_SETTING_TAB_SIZE = NOTEPADPLUS_USER_INTERNAL + 30, - NPPM_INTERNAL_RELOADSTYLERS = NOTEPADPLUS_USER_INTERNAL + 31, - NPPM_INTERNAL_DOCORDERCHANGED = NOTEPADPLUS_USER_INTERNAL + 32, - NPPM_INTERNAL_SETMULTISELCTION = NOTEPADPLUS_USER_INTERNAL + 33, - NPPM_INTERNAL_SCINTILLAFINFEROPENALL = NOTEPADPLUS_USER_INTERNAL + 34, - NPPM_INTERNAL_RECENTFILELIST_UPDATE = NOTEPADPLUS_USER_INTERNAL + 35, - NPPM_INTERNAL_RECENTFILELIST_SWITCH = NOTEPADPLUS_USER_INTERNAL + 36, - NPPM_INTERNAL_GETSCINTEDTVIEW = NOTEPADPLUS_USER_INTERNAL + 37, - NPPM_INTERNAL_ENABLESNAPSHOT = NOTEPADPLUS_USER_INTERNAL + 38, - NPPM_INTERNAL_SAVECURRENTSESSION = NOTEPADPLUS_USER_INTERNAL + 39, - NPPM_INTERNAL_FINDINFINDERDLG = NOTEPADPLUS_USER_INTERNAL + 40, - NPPM_INTERNAL_REMOVEFINDER = NOTEPADPLUS_USER_INTERNAL + 41, - NPPM_INTERNAL_RELOADSCROLLTOEND = NOTEPADPLUS_USER_INTERNAL + 42, - NPPM_INTERNAL_FINDKEYCONFLICTS = NOTEPADPLUS_USER_INTERNAL + 43, - NPPM_INTERNAL_SCROLLBEYONDLASTLINE = NOTEPADPLUS_USER_INTERNAL + 44, - NPPM_INTERNAL_SETWORDCHARS = NOTEPADPLUS_USER_INTERNAL + 45, - NPPM_INTERNAL_EXPORTFUNCLISTANDQUIT = NOTEPADPLUS_USER_INTERNAL + 46, - NPPM_INTERNAL_PRNTANDQUIT = NOTEPADPLUS_USER_INTERNAL + 47, - NPPM_INTERNAL_SAVEBACKUP = NOTEPADPLUS_USER_INTERNAL + 48, - NPPM_INTERNAL_STOPMONITORING = NOTEPADPLUS_USER_INTERNAL + 49, - NPPM_INTERNAL_EDGEBACKGROUND = NOTEPADPLUS_USER_INTERNAL + 50, - NPPM_INTERNAL_EDGEMULTISETSIZE = NOTEPADPLUS_USER_INTERNAL + 51, - NPPM_INTERNAL_UPDATECLICKABLELINKS = NOTEPADPLUS_USER_INTERNAL + 52, - - NPPM_INTERNAL_CHECKDOCSTATUS = Constants.NPPMSG + 53, - - NPPM_INTERNAL_ENABLECHECKDOCOPT = Constants.NPPMSG + 54, - - CHECKDOCOPT_NONE = 0, - CHECKDOCOPT_UPDATESILENTLY = 1, - CHECKDOCOPT_UPDATEGO2END = 2, - - NPPM_INTERNAL_SETFILENAME = Constants.NPPMSG + 63, - - SCINTILLA_USER = Constants.WM_USER + 2000, - - MACRO_USER = Constants.WM_USER + 4000, - WM_GETCURRENTMACROSTATUS = MACRO_USER + 01, - WM_MACRODLGRUNMACRO = MACRO_USER + 02, - - SPLITTER_USER = Constants.WM_USER + 4000, - WORDSTYLE_USER = Constants.WM_USER + 5000, - COLOURPOPUP_USER = Constants.WM_USER + 6000, - BABYGRID_USER = Constants.WM_USER + 7000, - - MENUINDEX_FILE = 0, - MENUINDEX_EDIT = 1, - MENUINDEX_SEARCH = 2, - MENUINDEX_VIEW = 3, - MENUINDEX_FORMAT = 4, - MENUINDEX_LANGUAGE = 5, - MENUINDEX_SETTINGS = 6, - MENUINDEX_TOOLS = 7, - MENUINDEX_MACRO = 8, - MENUINDEX_RUN = 9, - MENUINDEX_PLUGINS = 10, - /* --Autogenerated -- end of section automatically generated from resource.h */ - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +// +// This file should stay in sync with the CPP project file +// "notepad-plus-plus/scintilla/include/Scintilla.iface" +// found at +// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/scintilla/include/Scintilla.iface +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Kbg.NppPluginNET.PluginInfrastructure; + +namespace NppPluginNET.PluginInfrastructure +{ + public enum Resource + { + /* ++Autogenerated -- start of section automatically generated from resource.h */ + + IDC_STATIC = -1, + + IDI_M30ICON = 100, + IDI_CHAMELEON = 101, + + IDR_RT_MANIFEST = 103, + + IDI_NEW_OFF_ICON = 201, + IDI_OPEN_OFF_ICON = 202, + IDI_CLOSE_OFF_ICON = 203, + IDI_CLOSEALL_OFF_ICON = 204, + IDI_SAVE_OFF_ICON = 205, + IDI_SAVEALL_OFF_ICON = 206, + IDI_CUT_OFF_ICON = 207, + IDI_COPY_OFF_ICON = 208, + IDI_PASTE_OFF_ICON = 209, + IDI_UNDO_OFF_ICON = 210, + IDI_REDO_OFF_ICON = 211, + IDI_FIND_OFF_ICON = 212, + IDI_REPLACE_OFF_ICON = 213, + IDI_ZOOMIN_OFF_ICON = 214, + IDI_ZOOMOUT_OFF_ICON = 215, + IDI_VIEW_UD_DLG_OFF_ICON = 216, + IDI_PRINT_OFF_ICON = 217, + IDI_VIEW_ALL_CHAR_ON_ICON = 218, + IDI_VIEW_INDENT_ON_ICON = 219, + IDI_VIEW_WRAP_ON_ICON = 220, + + IDI_STARTRECORD_OFF_ICON = 221, + IDI_STARTRECORD_ON_ICON = 222, + IDI_STARTRECORD_DISABLE_ICON = 223, + IDI_STOPRECORD_OFF_ICON = 224, + IDI_STOPRECORD_ON_ICON = 225, + IDI_STOPRECORD_DISABLE_ICON = 226, + IDI_PLAYRECORD_OFF_ICON = 227, + IDI_PLAYRECORD_ON_ICON = 228, + IDI_PLAYRECORD_DISABLE_ICON = 229, + IDI_SAVERECORD_OFF_ICON = 230, + IDI_SAVERECORD_ON_ICON = 231, + IDI_SAVERECORD_DISABLE_ICON = 232, + + IDI_MMPLAY_DIS_ICON = 233, + IDI_MMPLAY_OFF_ICON = 234, + IDI_MMPLAY_ON_ICON = 235, + + IDI_NEW_ON_ICON = 301, + IDI_OPEN_ON_ICON = 302, + IDI_CLOSE_ON_ICON = 303, + IDI_CLOSEALL_ON_ICON = 304, + IDI_SAVE_ON_ICON = 305, + IDI_SAVEALL_ON_ICON = 306, + IDI_CUT_ON_ICON = 307, + IDI_COPY_ON_ICON = 308, + IDI_PASTE_ON_ICON = 309, + IDI_UNDO_ON_ICON = 310, + IDI_REDO_ON_ICON = 311, + IDI_FIND_ON_ICON = 312, + IDI_REPLACE_ON_ICON = 313, + IDI_ZOOMIN_ON_ICON = 314, + IDI_ZOOMOUT_ON_ICON = 315, + IDI_VIEW_UD_DLG_ON_ICON = 316, + IDI_PRINT_ON_ICON = 317, + IDI_VIEW_ALL_CHAR_OFF_ICON = 318, + IDI_VIEW_INDENT_OFF_ICON = 319, + IDI_VIEW_WRAP_OFF_ICON = 320, + + IDI_SAVE_DISABLE_ICON = 403, + IDI_SAVEALL_DISABLE_ICON = 404, + + IDI_CUT_DISABLE_ICON = 407, + IDI_COPY_DISABLE_ICON = 408, + IDI_PASTE_DISABLE_ICON = 409, + IDI_UNDO_DISABLE_ICON = 410, + IDI_REDO_DISABLE_ICON = 411, + IDI_DELETE_ICON = 412, + + IDI_SYNCV_OFF_ICON = 413, + IDI_SYNCV_ON_ICON = 414, + IDI_SYNCV_DISABLE_ICON = 415, + + IDI_SYNCH_OFF_ICON = 416, + IDI_SYNCH_ON_ICON = 417, + IDI_SYNCH_DISABLE_ICON = 418, + + IDI_SAVED_ICON = 501, + IDI_UNSAVED_ICON = 502, + IDI_READONLY_ICON = 503, + IDI_FIND_RESULT_ICON = 504, + IDI_MONITORING_ICON = 505, + + IDI_PROJECT_WORKSPACE = 601, + IDI_PROJECT_WORKSPACEDIRTY = 602, + IDI_PROJECT_PROJECT = 603, + IDI_PROJECT_FOLDEROPEN = 604, + IDI_PROJECT_FOLDERCLOSE = 605, + IDI_PROJECT_FILE = 606, + IDI_PROJECT_FILEINVALID = 607, + IDI_FB_ROOTOPEN = 608, + IDI_FB_ROOTCLOSE = 609, + IDI_FB_SELECTCURRENTFILE = 610, + IDI_FB_FOLDALL = 611, + IDI_FB_EXPANDALL = 612, + + IDI_FUNCLIST_ROOT = 620, + IDI_FUNCLIST_NODE = 621, + IDI_FUNCLIST_LEAF = 622, + + IDI_FUNCLIST_SORTBUTTON = 631, + IDI_FUNCLIST_RELOADBUTTON = 632, + + IDI_VIEW_DOC_MAP_ON_ICON = 633, + IDI_VIEW_DOC_MAP_OFF_ICON = 634, + IDI_VIEW_FILEBROWSER_ON_ICON = 635, + IDI_VIEW_FILEBROWSER_OFF_ICON = 636, + IDI_VIEW_FUNCLIST_ON_ICON = 637, + IDI_VIEW_FUNCLIST_OFF_ICON = 638, + IDI_VIEW_MONITORING_ON_ICON = 639, + IDI_VIEW_MONITORING_OFF_ICON = 640, + + IDC_MY_CUR = 1402, + IDC_UP_ARROW = 1403, + IDC_DRAG_TAB = 1404, + IDC_DRAG_INTERDIT_TAB = 1405, + IDC_DRAG_PLUS_TAB = 1406, + IDC_DRAG_OUT_TAB = 1407, + + IDC_MACRO_RECORDING = 1408, + + IDR_SAVEALL = 1500, + IDR_CLOSEFILE = 1501, + IDR_CLOSEALL = 1502, + IDR_FIND = 1503, + IDR_REPLACE = 1504, + IDR_ZOOMIN = 1505, + IDR_ZOOMOUT = 1506, + IDR_WRAP = 1507, + IDR_INVISIBLECHAR = 1508, + IDR_INDENTGUIDE = 1509, + IDR_SHOWPANNEL = 1510, + IDR_STARTRECORD = 1511, + IDR_STOPRECORD = 1512, + IDR_PLAYRECORD = 1513, + IDR_SAVERECORD = 1514, + IDR_SYNCV = 1515, + IDR_SYNCH = 1516, + IDR_FILENEW = 1517, + IDR_FILEOPEN = 1518, + IDR_FILESAVE = 1519, + IDR_PRINT = 1520, + IDR_CUT = 1521, + IDR_COPY = 1522, + IDR_PASTE = 1523, + IDR_UNDO = 1524, + IDR_REDO = 1525, + IDR_M_PLAYRECORD = 1526, + IDR_DOCMAP = 1527, + IDR_FUNC_LIST = 1528, + IDR_FILEBROWSER = 1529, + IDR_CLOSETAB = 1530, + IDR_CLOSETAB_INACT = 1531, + IDR_CLOSETAB_HOVER = 1532, + IDR_CLOSETAB_PUSH = 1533, + IDR_FUNC_LIST_ICO = 1534, + IDR_DOCMAP_ICO = 1535, + IDR_PROJECTPANEL_ICO = 1536, + IDR_CLIPBOARDPANEL_ICO = 1537, + IDR_ASCIIPANEL_ICO = 1538, + IDR_DOCSWITCHER_ICO = 1539, + IDR_FILEBROWSER_ICO = 1540, + IDR_FILEMONITORING = 1541, + + ID_MACRO = 20000, + ID_MACRO_LIMIT = 20200, + + ID_USER_CMD = 21000, + ID_USER_CMD_LIMIT = 21200, + + ID_PLUGINS_CMD = 22000, + ID_PLUGINS_CMD_LIMIT = 22500, + + ID_PLUGINS_CMD_DYNAMIC = 23000, + ID_PLUGINS_CMD_DYNAMIC_LIMIT = 24999, + + MARKER_PLUGINS = 3, + MARKER_PLUGINS_LIMIT = 19, + + ID_PLUGINS_REMOVING = 22501, + ID_PLUGINS_REMOVING_END = 22600, + + IDCMD = 50000, + + IDC_PREV_DOC = IDCMD+3, + IDC_NEXT_DOC = IDCMD+4, + IDC_EDIT_TOGGLEMACRORECORDING = IDCMD+5, + + IDCMD_LIMIT = IDCMD+20, + + IDSCINTILLA = 60000, + IDSCINTILLA_KEY_HOME = IDSCINTILLA+0, + IDSCINTILLA_KEY_HOME_WRAP = IDSCINTILLA+1, + IDSCINTILLA_KEY_END = IDSCINTILLA+2, + IDSCINTILLA_KEY_END_WRAP = IDSCINTILLA+3, + IDSCINTILLA_KEY_LINE_DUP = IDSCINTILLA+4, + IDSCINTILLA_KEY_LINE_CUT = IDSCINTILLA+5, + IDSCINTILLA_KEY_LINE_DEL = IDSCINTILLA+6, + IDSCINTILLA_KEY_LINE_TRANS = IDSCINTILLA+7, + IDSCINTILLA_KEY_LINE_COPY = IDSCINTILLA+8, + IDSCINTILLA_KEY_CUT = IDSCINTILLA+9, + IDSCINTILLA_KEY_COPY = IDSCINTILLA+10, + IDSCINTILLA_KEY_PASTE = IDSCINTILLA+11, + IDSCINTILLA_KEY_DEL = IDSCINTILLA+12, + IDSCINTILLA_KEY_SELECTALL = IDSCINTILLA+13, + IDSCINTILLA_KEY_OUTDENT = IDSCINTILLA+14, + IDSCINTILLA_KEY_UNDO = IDSCINTILLA+15, + IDSCINTILLA_KEY_REDO = IDSCINTILLA+16, + IDSCINTILLA_LIMIT = IDSCINTILLA+30, + + IDD_FILEVIEW_DIALOG = 1000, + + IDC_MINIMIZED_TRAY = 67001, + + IDD_CREATE_DIRECTORY = 1100, + IDC_STATIC_CURRENT_FOLDER = 1101, + IDC_EDIT_NEW_FOLDER = 1102, + + IDD_INSERT_INPUT_TEXT = 1200, + IDC_EDIT_INPUT_VALUE = 1201, + IDC_STATIC_INPUT_TITLE = 1202, + IDC_ICON_INPUT_ICON = 1203, + + IDR_M30_MENU = 1500, + + IDR_SYSTRAYPOPUP_MENU = 1501, + + IDD_ABOUTBOX = 1700, + IDC_LICENCE_EDIT = 1701, + IDC_HOME_ADDR = 1702, + IDC_EMAIL_ADDR = 1703, + IDC_ONLINEHELP_ADDR = 1704, + IDC_AUTHOR_NAME = 1705, + IDC_BUILD_DATETIME = 1706, + IDC_VERSION_BIT = 1707, + + IDD_DEBUGINFOBOX = 1750, + IDC_DEBUGINFO_EDIT = 1751, + IDC_DEBUGINFO_COPYLINK = 1752, + + IDD_DOSAVEORNOTBOX = 1760, + IDC_DOSAVEORNOTTEX = 1761, + + IDD_GOLINE = 2000, + ID_GOLINE_EDIT = IDD_GOLINE + 1, + ID_CURRLINE = IDD_GOLINE + 2, + ID_LASTLINE = IDD_GOLINE + 3, + ID_URHERE_STATIC = IDD_GOLINE + 4, + ID_UGO_STATIC = IDD_GOLINE + 5, + ID_NOMORETHAN_STATIC = IDD_GOLINE + 6, + IDC_RADIO_GOTOLINE = IDD_GOLINE + 7, + IDC_RADIO_GOTOOFFSET = IDD_GOLINE + 8, + + IDD_VALUE_DLG = 2400, + IDC_VALUE_STATIC = 2401, + IDC_VALUE_EDIT = 2402, + + IDD_BUTTON_DLG = 2410, + IDC_RESTORE_BUTTON = 2411, + + IDD_SETTING_DLG = 2500, + + NOTEPADPLUS_USER_INTERNAL = Constants.WM_USER + 0000, + NPPM_INTERNAL_USERCMDLIST_MODIFIED = NOTEPADPLUS_USER_INTERNAL + 1, + NPPM_INTERNAL_CMDLIST_MODIFIED = NOTEPADPLUS_USER_INTERNAL + 2, + NPPM_INTERNAL_MACROLIST_MODIFIED = NOTEPADPLUS_USER_INTERNAL + 3, + NPPM_INTERNAL_PLUGINCMDLIST_MODIFIED = NOTEPADPLUS_USER_INTERNAL + 4, + NPPM_INTERNAL_CLEARSCINTILLAKEY = NOTEPADPLUS_USER_INTERNAL + 5, + NPPM_INTERNAL_BINDSCINTILLAKEY = NOTEPADPLUS_USER_INTERNAL + 6, + NPPM_INTERNAL_SCINTILLAKEYMODIFIED = NOTEPADPLUS_USER_INTERNAL + 7, + NPPM_INTERNAL_SCINTILLAFINFERCOLLAPSE = NOTEPADPLUS_USER_INTERNAL + 8, + NPPM_INTERNAL_SCINTILLAFINFERUNCOLLAPSE = NOTEPADPLUS_USER_INTERNAL + 9, + NPPM_INTERNAL_DISABLEAUTOUPDATE = NOTEPADPLUS_USER_INTERNAL + 10, + NPPM_INTERNAL_SETTING_HISTORY_SIZE = NOTEPADPLUS_USER_INTERNAL + 11, + NPPM_INTERNAL_ISTABBARREDUCED = NOTEPADPLUS_USER_INTERNAL + 12, + NPPM_INTERNAL_ISFOCUSEDTAB = NOTEPADPLUS_USER_INTERNAL + 13, + NPPM_INTERNAL_GETMENU = NOTEPADPLUS_USER_INTERNAL + 14, + NPPM_INTERNAL_CLEARINDICATOR = NOTEPADPLUS_USER_INTERNAL + 15, + NPPM_INTERNAL_SCINTILLAFINFERCOPY = NOTEPADPLUS_USER_INTERNAL + 16, + NPPM_INTERNAL_SCINTILLAFINFERSELECTALL = NOTEPADPLUS_USER_INTERNAL + 17, + NPPM_INTERNAL_SETCARETWIDTH = NOTEPADPLUS_USER_INTERNAL + 18, + NPPM_INTERNAL_SETCARETBLINKRATE = NOTEPADPLUS_USER_INTERNAL + 19, + NPPM_INTERNAL_CLEARINDICATORTAGMATCH = NOTEPADPLUS_USER_INTERNAL + 20, + NPPM_INTERNAL_CLEARINDICATORTAGATTR = NOTEPADPLUS_USER_INTERNAL + 21, + NPPM_INTERNAL_SWITCHVIEWFROMHWND = NOTEPADPLUS_USER_INTERNAL + 22, + NPPM_INTERNAL_UPDATETITLEBAR = NOTEPADPLUS_USER_INTERNAL + 23, + NPPM_INTERNAL_CANCEL_FIND_IN_FILES = NOTEPADPLUS_USER_INTERNAL + 24, + NPPM_INTERNAL_RELOADNATIVELANG = NOTEPADPLUS_USER_INTERNAL + 25, + NPPM_INTERNAL_PLUGINSHORTCUTMOTIFIED = NOTEPADPLUS_USER_INTERNAL + 26, + NPPM_INTERNAL_SCINTILLAFINFERCLEARALL = NOTEPADPLUS_USER_INTERNAL + 27, + + NPPM_INTERNAL_SETTING_TAB_REPLCESPACE = NOTEPADPLUS_USER_INTERNAL + 29, + NPPM_INTERNAL_SETTING_TAB_SIZE = NOTEPADPLUS_USER_INTERNAL + 30, + NPPM_INTERNAL_RELOADSTYLERS = NOTEPADPLUS_USER_INTERNAL + 31, + NPPM_INTERNAL_DOCORDERCHANGED = NOTEPADPLUS_USER_INTERNAL + 32, + NPPM_INTERNAL_SETMULTISELCTION = NOTEPADPLUS_USER_INTERNAL + 33, + NPPM_INTERNAL_SCINTILLAFINFEROPENALL = NOTEPADPLUS_USER_INTERNAL + 34, + NPPM_INTERNAL_RECENTFILELIST_UPDATE = NOTEPADPLUS_USER_INTERNAL + 35, + NPPM_INTERNAL_RECENTFILELIST_SWITCH = NOTEPADPLUS_USER_INTERNAL + 36, + NPPM_INTERNAL_GETSCINTEDTVIEW = NOTEPADPLUS_USER_INTERNAL + 37, + NPPM_INTERNAL_ENABLESNAPSHOT = NOTEPADPLUS_USER_INTERNAL + 38, + NPPM_INTERNAL_SAVECURRENTSESSION = NOTEPADPLUS_USER_INTERNAL + 39, + NPPM_INTERNAL_FINDINFINDERDLG = NOTEPADPLUS_USER_INTERNAL + 40, + NPPM_INTERNAL_REMOVEFINDER = NOTEPADPLUS_USER_INTERNAL + 41, + NPPM_INTERNAL_RELOADSCROLLTOEND = NOTEPADPLUS_USER_INTERNAL + 42, + NPPM_INTERNAL_FINDKEYCONFLICTS = NOTEPADPLUS_USER_INTERNAL + 43, + NPPM_INTERNAL_SCROLLBEYONDLASTLINE = NOTEPADPLUS_USER_INTERNAL + 44, + NPPM_INTERNAL_SETWORDCHARS = NOTEPADPLUS_USER_INTERNAL + 45, + NPPM_INTERNAL_EXPORTFUNCLISTANDQUIT = NOTEPADPLUS_USER_INTERNAL + 46, + NPPM_INTERNAL_PRNTANDQUIT = NOTEPADPLUS_USER_INTERNAL + 47, + NPPM_INTERNAL_SAVEBACKUP = NOTEPADPLUS_USER_INTERNAL + 48, + NPPM_INTERNAL_STOPMONITORING = NOTEPADPLUS_USER_INTERNAL + 49, + NPPM_INTERNAL_EDGEBACKGROUND = NOTEPADPLUS_USER_INTERNAL + 50, + NPPM_INTERNAL_EDGEMULTISETSIZE = NOTEPADPLUS_USER_INTERNAL + 51, + NPPM_INTERNAL_UPDATECLICKABLELINKS = NOTEPADPLUS_USER_INTERNAL + 52, + + NPPM_INTERNAL_CHECKDOCSTATUS = Constants.NPPMSG + 53, + + NPPM_INTERNAL_ENABLECHECKDOCOPT = Constants.NPPMSG + 54, + + CHECKDOCOPT_NONE = 0, + CHECKDOCOPT_UPDATESILENTLY = 1, + CHECKDOCOPT_UPDATEGO2END = 2, + + NPPM_INTERNAL_SETFILENAME = Constants.NPPMSG + 63, + + SCINTILLA_USER = Constants.WM_USER + 2000, + + MACRO_USER = Constants.WM_USER + 4000, + WM_GETCURRENTMACROSTATUS = MACRO_USER + 01, + WM_MACRODLGRUNMACRO = MACRO_USER + 02, + + SPLITTER_USER = Constants.WM_USER + 4000, + WORDSTYLE_USER = Constants.WM_USER + 5000, + COLOURPOPUP_USER = Constants.WM_USER + 6000, + BABYGRID_USER = Constants.WM_USER + 7000, + + MENUINDEX_FILE = 0, + MENUINDEX_EDIT = 1, + MENUINDEX_SEARCH = 2, + MENUINDEX_VIEW = 3, + MENUINDEX_FORMAT = 4, + MENUINDEX_LANGUAGE = 5, + MENUINDEX_SETTINGS = 6, + MENUINDEX_TOOLS = 7, + MENUINDEX_MACRO = 8, + MENUINDEX_RUN = 9, + MENUINDEX_PLUGINS = 10, + /* --Autogenerated -- end of section automatically generated from resource.h */ + } +} diff --git a/WakaTime/PluginInfrastructure/ScintillaGateway.cs b/WakaTime/PluginInfrastructure/ScintillaGateway.cs index 4483904..168c646 100644 --- a/WakaTime/PluginInfrastructure/ScintillaGateway.cs +++ b/WakaTime/PluginInfrastructure/ScintillaGateway.cs @@ -1,5214 +1,5214 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using System.Runtime.InteropServices; -using System.Text; -using static Kbg.NppPluginNET.PluginInfrastructure.Win32; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - /// - /// This it the plugin-writers primary interface to Notepad++/Scintilla. - /// It takes away all the complexity with command numbers and Int-pointer casting. - /// - /// See http://www.scintilla.org/ScintillaDoc.html for further details. - /// - public class ScintillaGateway : IScintillaGateway - { - private const int Unused = 0; - - private readonly IntPtr scintilla; - - public static readonly int LengthZeroTerminator = "\0".Length; - - - public ScintillaGateway(IntPtr scintilla) - { - this.scintilla = scintilla; - } - - public int GetSelectionLength() - { - var selectionLength = (int) Win32.SendMessage(scintilla, SciMsg.SCI_GETSELTEXT, Unused, Unused) - LengthZeroTerminator; - return selectionLength; - } - - public void AppendTextAndMoveCursor(string text) - { - AppendText(text.Length, text); - GotoPos(GetCurrentPos() + text.Length); - } - - public void InsertTextAndMoveCursor(string text) - { - var currentPos = GetCurrentPos(); - InsertText(currentPos, text); - GotoPos(currentPos + text.Length); - } - - public void SelectCurrentLine() - { - int line = GetCurrentLineNumber(); - SetSelection(PositionFromLine(line), PositionFromLine(line + 1)); - } - - /// - /// clears the selection without changing the position of the cursor - /// - public void ClearSelectionToCursor() - { - var pos = GetCurrentPos(); - SetSelection(pos, pos); - } - - /// - /// Get the current line from the current position - /// - public int GetCurrentLineNumber() - { - return LineFromPosition(GetCurrentPos()); - } - - /// - /// Get the scroll information for the current Scintilla window. - /// - /// Arguments for the scroll information such as tracking - /// Which scroll bar information are you looking for - /// A ScrollInfo struct with information of the current scroll state - public ScrollInfo GetScrollInfo(ScrollInfoMask mask = ScrollInfoMask.SIF_ALL, ScrollInfoBar scrollBar = ScrollInfoBar.SB_BOTH) - { - ScrollInfo scrollInfo = new ScrollInfo(); - scrollInfo.cbSize = (uint)Marshal.SizeOf(scrollInfo); - scrollInfo.fMask = (uint)mask; - Win32.GetScrollInfo(scintilla, (int)scrollBar, ref scrollInfo); - return scrollInfo; - } - - /* ++Autogenerated -- start of section automatically generated from Scintilla.iface */ - /// Add text to the document at current position. (Scintilla feature 2001) - public unsafe void AddText(int length, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ADDTEXT, (IntPtr) length, (IntPtr) textPtr); - } - } - - /// Add array of cells to document. (Scintilla feature 2002) - public unsafe void AddStyledText(int length, Cells c) - { - fixed (char* cPtr = c.Value) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ADDSTYLEDTEXT, (IntPtr) length, (IntPtr) cPtr); - } - } - - /// Insert string at a position. (Scintilla feature 2003) - public unsafe void InsertText(int pos, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INSERTTEXT, (IntPtr) pos, (IntPtr) textPtr); - } - } - - /// Change the text that is being inserted in response to SC_MOD_INSERTCHECK (Scintilla feature 2672) - public unsafe void ChangeInsertion(int length, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CHANGEINSERTION, (IntPtr) length, (IntPtr) textPtr); - } - } - - /// Delete all text in the document. (Scintilla feature 2004) - public void ClearAll() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEARALL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Delete a range of text in the document. (Scintilla feature 2645) - public void DeleteRange(int start, int lengthDelete) - { - Win32.SendMessage(scintilla, SciMsg.SCI_DELETERANGE, (IntPtr) start, (IntPtr) lengthDelete); - } - - /// Set all style bytes to 0, remove all folding information. (Scintilla feature 2005) - public void ClearDocumentStyle() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEARDOCUMENTSTYLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Returns the number of bytes in the document. (Scintilla feature 2006) - public int GetLength() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLENGTH, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Returns the character byte at the position. (Scintilla feature 2007) - public int GetCharAt(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCHARAT, (IntPtr) pos, (IntPtr) Unused); - } - - /// Returns the position of the caret. (Scintilla feature 2008) - public int GetCurrentPos() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCURRENTPOS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Returns the position of the opposite end of the selection to the caret. (Scintilla feature 2009) - public int GetAnchor() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETANCHOR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Returns the style byte at the position. (Scintilla feature 2010) - public int GetStyleAt(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEAT, (IntPtr) pos, (IntPtr) Unused); - } - - /// Redoes the next action on the undo history. (Scintilla feature 2011) - public void Redo() - { - Win32.SendMessage(scintilla, SciMsg.SCI_REDO, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Choose between collecting actions into the undo - /// history and discarding them. - /// (Scintilla feature 2012) - /// - public void SetUndoCollection(bool collectUndo) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETUNDOCOLLECTION, new IntPtr(collectUndo ? 1 : 0), (IntPtr) Unused); - } - - /// Select all the text in the document. (Scintilla feature 2013) - public void SelectAll() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SELECTALL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Remember the current position in the undo history as the position - /// at which the document was saved. - /// (Scintilla feature 2014) - /// - public void SetSavePoint() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSAVEPOINT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Retrieve a buffer of cells. - /// Returns the number of bytes in the buffer not including terminating NULs. - /// (Scintilla feature 2015) - /// - public int GetStyledText(TextRange tr) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEDTEXT, (IntPtr) Unused, tr.NativePointer); - } - - /// Are there any redoable actions in the undo history? (Scintilla feature 2016) - public bool CanRedo() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_CANREDO, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Retrieve the line number at which a particular marker is located. (Scintilla feature 2017) - public int MarkerLineFromHandle(int markerHandle) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERLINEFROMHANDLE, (IntPtr) markerHandle, (IntPtr) Unused); - } - - /// Delete a marker. (Scintilla feature 2018) - public void MarkerDeleteHandle(int markerHandle) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETEHANDLE, (IntPtr) markerHandle, (IntPtr) Unused); - } - - /// Is undo history being collected? (Scintilla feature 2019) - public bool GetUndoCollection() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETUNDOCOLLECTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Are white space characters currently visible? - /// Returns one of SCWS_* constants. - /// (Scintilla feature 2020) - /// - public WhiteSpace GetViewWS() - { - return (WhiteSpace)Win32.SendMessage(scintilla, SciMsg.SCI_GETVIEWWS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Make white space characters invisible, always visible or visible outside indentation. (Scintilla feature 2021) - public void SetViewWS(WhiteSpace viewWS) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETVIEWWS, (IntPtr) viewWS, (IntPtr) Unused); - } - - /// - /// Retrieve the current tab draw mode. - /// Returns one of SCTD_* constants. - /// (Scintilla feature 2698) - /// - public TabDrawMode GetTabDrawMode() - { - return (TabDrawMode)Win32.SendMessage(scintilla, SciMsg.SCI_GETTABDRAWMODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set how tabs are drawn when visible. (Scintilla feature 2699) - public void SetTabDrawMode(TabDrawMode tabDrawMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTABDRAWMODE, (IntPtr) tabDrawMode, (IntPtr) Unused); - } - - /// Find the position from a point within the window. (Scintilla feature 2022) - public int PositionFromPoint(int x, int y) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMPOINT, (IntPtr) x, (IntPtr) y); - } - - /// - /// Find the position from a point within the window but return - /// INVALID_POSITION if not close to text. - /// (Scintilla feature 2023) - /// - public int PositionFromPointClose(int x, int y) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMPOINTCLOSE, (IntPtr) x, (IntPtr) y); - } - - /// Set caret to start of a line and ensure it is visible. (Scintilla feature 2024) - public void GotoLine(int line) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GOTOLINE, (IntPtr) line, (IntPtr) Unused); - } - - /// Set caret to a position and ensure it is visible. (Scintilla feature 2025) - public void GotoPos(int caret) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GOTOPOS, (IntPtr) caret, (IntPtr) Unused); - } - - /// - /// Set the selection anchor to a position. The anchor is the opposite - /// end of the selection from the caret. - /// (Scintilla feature 2026) - /// - public void SetAnchor(int anchor) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETANCHOR, (IntPtr) anchor, (IntPtr) Unused); - } - - /// - /// Retrieve the text of the line containing the caret. - /// Returns the index of the caret on the line. - /// Result is NUL-terminated. - /// (Scintilla feature 2027) - /// - public unsafe string GetCurLine(int length) - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETCURLINE, (IntPtr) length, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// Retrieve the position of the last correctly styled character. (Scintilla feature 2028) - public int GetEndStyled() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETENDSTYLED, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Convert all line endings in the document to one mode. (Scintilla feature 2029) - public void ConvertEOLs(EndOfLine eolMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CONVERTEOLS, (IntPtr) eolMode, (IntPtr) Unused); - } - - /// Retrieve the current end of line mode - one of CRLF, CR, or LF. (Scintilla feature 2030) - public EndOfLine GetEOLMode() - { - return (EndOfLine)Win32.SendMessage(scintilla, SciMsg.SCI_GETEOLMODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the current end of line mode. (Scintilla feature 2031) - public void SetEOLMode(EndOfLine eolMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETEOLMODE, (IntPtr) eolMode, (IntPtr) Unused); - } - - /// - /// Set the current styling position to start. - /// The unused parameter is no longer used and should be set to 0. - /// (Scintilla feature 2032) - /// - public void StartStyling(int start, int unused) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STARTSTYLING, (IntPtr) start, (IntPtr) unused); - } - - /// - /// Change style from current styling position for length characters to a style - /// and move the current styling position to after this newly styled segment. - /// (Scintilla feature 2033) - /// - public void SetStyling(int length, int style) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLING, (IntPtr) length, (IntPtr) style); - } - - /// Is drawing done first into a buffer or direct to the screen? (Scintilla feature 2034) - public bool GetBufferedDraw() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETBUFFEREDDRAW, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// If drawing is buffered then each line of text is drawn into a bitmap buffer - /// before drawing it to the screen to avoid flicker. - /// (Scintilla feature 2035) - /// - public void SetBufferedDraw(bool buffered) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETBUFFEREDDRAW, new IntPtr(buffered ? 1 : 0), (IntPtr) Unused); - } - - /// Change the visible size of a tab to be a multiple of the width of a space character. (Scintilla feature 2036) - public void SetTabWidth(int tabWidth) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTABWIDTH, (IntPtr) tabWidth, (IntPtr) Unused); - } - - /// Retrieve the visible size of a tab. (Scintilla feature 2121) - public int GetTabWidth() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTABWIDTH, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Clear explicit tabstops on a line. (Scintilla feature 2675) - public void ClearTabStops(int line) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEARTABSTOPS, (IntPtr) line, (IntPtr) Unused); - } - - /// Add an explicit tab stop for a line. (Scintilla feature 2676) - public void AddTabStop(int line, int x) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ADDTABSTOP, (IntPtr) line, (IntPtr) x); - } - - /// Find the next explicit tab stop position on a line after a position. (Scintilla feature 2677) - public int GetNextTabStop(int line, int x) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETNEXTTABSTOP, (IntPtr) line, (IntPtr) x); - } - - /// - /// Set the code page used to interpret the bytes of the document as characters. - /// The SC_CP_UTF8 value can be used to enter Unicode mode. - /// (Scintilla feature 2037) - /// - public void SetCodePage(int codePage) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCODEPAGE, (IntPtr) codePage, (IntPtr) Unused); - } - - /// Is the IME displayed in a window or inline? (Scintilla feature 2678) - public IMEInteraction GetIMEInteraction() - { - return (IMEInteraction)Win32.SendMessage(scintilla, SciMsg.SCI_GETIMEINTERACTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Choose to display the the IME in a winow or inline. (Scintilla feature 2679) - public void SetIMEInteraction(IMEInteraction imeInteraction) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETIMEINTERACTION, (IntPtr) imeInteraction, (IntPtr) Unused); - } - - /// Set the symbol used for a particular marker number. (Scintilla feature 2040) - public void MarkerDefine(int markerNumber, MarkerSymbol markerSymbol) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINE, (IntPtr) markerNumber, (IntPtr) markerSymbol); - } - - /// Set the foreground colour used for a particular marker number. (Scintilla feature 2041) - public void MarkerSetFore(int markerNumber, Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETFORE, (IntPtr) markerNumber, fore.Value); - } - - /// Set the background colour used for a particular marker number. (Scintilla feature 2042) - public void MarkerSetBack(int markerNumber, Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETBACK, (IntPtr) markerNumber, back.Value); - } - - /// Set the background colour used for a particular marker number when its folding block is selected. (Scintilla feature 2292) - public void MarkerSetBackSelected(int markerNumber, Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETBACKSELECTED, (IntPtr) markerNumber, back.Value); - } - - /// Enable/disable highlight for current folding bloc (smallest one that contains the caret) (Scintilla feature 2293) - public void MarkerEnableHighlight(bool enabled) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERENABLEHIGHLIGHT, new IntPtr(enabled ? 1 : 0), (IntPtr) Unused); - } - - /// Add a marker to a line, returning an ID which can be used to find or delete the marker. (Scintilla feature 2043) - public int MarkerAdd(int line, int markerNumber) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERADD, (IntPtr) line, (IntPtr) markerNumber); - } - - /// Delete a marker from a line. (Scintilla feature 2044) - public void MarkerDelete(int line, int markerNumber) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETE, (IntPtr) line, (IntPtr) markerNumber); - } - - /// Delete all markers with a particular number from all lines. (Scintilla feature 2045) - public void MarkerDeleteAll(int markerNumber) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETEALL, (IntPtr) markerNumber, (IntPtr) Unused); - } - - /// Get a bit mask of all the markers set on a line. (Scintilla feature 2046) - public int MarkerGet(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERGET, (IntPtr) line, (IntPtr) Unused); - } - - /// - /// Find the next line at or after lineStart that includes a marker in mask. - /// Return -1 when no more lines. - /// (Scintilla feature 2047) - /// - public int MarkerNext(int lineStart, int markerMask) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERNEXT, (IntPtr) lineStart, (IntPtr) markerMask); - } - - /// Find the previous line before lineStart that includes a marker in mask. (Scintilla feature 2048) - public int MarkerPrevious(int lineStart, int markerMask) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERPREVIOUS, (IntPtr) lineStart, (IntPtr) markerMask); - } - - /// Define a marker from a pixmap. (Scintilla feature 2049) - public unsafe void MarkerDefinePixmap(int markerNumber, string pixmap) - { - fixed (byte* pixmapPtr = Encoding.UTF8.GetBytes(pixmap)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINEPIXMAP, (IntPtr) markerNumber, (IntPtr) pixmapPtr); - } - } - - /// Add a set of markers to a line. (Scintilla feature 2466) - public void MarkerAddSet(int line, int markerSet) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERADDSET, (IntPtr) line, (IntPtr) markerSet); - } - - /// Set the alpha used for a marker that is drawn in the text area, not the margin. (Scintilla feature 2476) - public void MarkerSetAlpha(int markerNumber, Alpha alpha) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETALPHA, (IntPtr) markerNumber, (IntPtr) alpha); - } - - /// Set a margin to be either numeric or symbolic. (Scintilla feature 2240) - public void SetMarginTypeN(int margin, MarginType marginType) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINTYPEN, (IntPtr) margin, (IntPtr) marginType); - } - - /// Retrieve the type of a margin. (Scintilla feature 2241) - public MarginType GetMarginTypeN(int margin) - { - return (MarginType)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINTYPEN, (IntPtr) margin, (IntPtr) Unused); - } - - /// Set the width of a margin to a width expressed in pixels. (Scintilla feature 2242) - public void SetMarginWidthN(int margin, int pixelWidth) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINWIDTHN, (IntPtr) margin, (IntPtr) pixelWidth); - } - - /// Retrieve the width of a margin in pixels. (Scintilla feature 2243) - public int GetMarginWidthN(int margin) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINWIDTHN, (IntPtr) margin, (IntPtr) Unused); - } - - /// Set a mask that determines which markers are displayed in a margin. (Scintilla feature 2244) - public void SetMarginMaskN(int margin, int mask) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINMASKN, (IntPtr) margin, (IntPtr) mask); - } - - /// Retrieve the marker mask of a margin. (Scintilla feature 2245) - public int GetMarginMaskN(int margin) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINMASKN, (IntPtr) margin, (IntPtr) Unused); - } - - /// Make a margin sensitive or insensitive to mouse clicks. (Scintilla feature 2246) - public void SetMarginSensitiveN(int margin, bool sensitive) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINSENSITIVEN, (IntPtr) margin, new IntPtr(sensitive ? 1 : 0)); - } - - /// Retrieve the mouse click sensitivity of a margin. (Scintilla feature 2247) - public bool GetMarginSensitiveN(int margin) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINSENSITIVEN, (IntPtr) margin, (IntPtr) Unused); - } - - /// Set the cursor shown when the mouse is inside a margin. (Scintilla feature 2248) - public void SetMarginCursorN(int margin, CursorShape cursor) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINCURSORN, (IntPtr) margin, (IntPtr) cursor); - } - - /// Retrieve the cursor shown in a margin. (Scintilla feature 2249) - public CursorShape GetMarginCursorN(int margin) - { - return (CursorShape)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINCURSORN, (IntPtr) margin, (IntPtr) Unused); - } - - /// Set the background colour of a margin. Only visible for SC_MARGIN_COLOUR. (Scintilla feature 2250) - public void SetMarginBackN(int margin, Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINBACKN, (IntPtr) margin, back.Value); - } - - /// Retrieve the background colour of a margin (Scintilla feature 2251) - public Colour GetMarginBackN(int margin) - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINBACKN, (IntPtr) margin, (IntPtr) Unused)); - } - - /// Allocate a non-standard number of margins. (Scintilla feature 2252) - public void SetMargins(int margins) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINS, (IntPtr) margins, (IntPtr) Unused); - } - - /// How many margins are there?. (Scintilla feature 2253) - public int GetMargins() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Clear all the styles and make equivalent to the global default style. (Scintilla feature 2050) - public void StyleClearAll() - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLECLEARALL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the foreground colour of a style. (Scintilla feature 2051) - public void StyleSetFore(int style, Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETFORE, (IntPtr) style, fore.Value); - } - - /// Set the background colour of a style. (Scintilla feature 2052) - public void StyleSetBack(int style, Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETBACK, (IntPtr) style, back.Value); - } - - /// Set a style to be bold or not. (Scintilla feature 2053) - public void StyleSetBold(int style, bool bold) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETBOLD, (IntPtr) style, new IntPtr(bold ? 1 : 0)); - } - - /// Set a style to be italic or not. (Scintilla feature 2054) - public void StyleSetItalic(int style, bool italic) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETITALIC, (IntPtr) style, new IntPtr(italic ? 1 : 0)); - } - - /// Set the size of characters of a style. (Scintilla feature 2055) - public void StyleSetSize(int style, int sizePoints) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETSIZE, (IntPtr) style, (IntPtr) sizePoints); - } - - /// Set the font of a style. (Scintilla feature 2056) - public unsafe void StyleSetFont(int style, string fontName) - { - fixed (byte* fontNamePtr = Encoding.UTF8.GetBytes(fontName)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETFONT, (IntPtr) style, (IntPtr) fontNamePtr); - } - } - - /// Set a style to have its end of line filled or not. (Scintilla feature 2057) - public void StyleSetEOLFilled(int style, bool eolFilled) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETEOLFILLED, (IntPtr) style, new IntPtr(eolFilled ? 1 : 0)); - } - - /// Reset the default style to its state at startup (Scintilla feature 2058) - public void StyleResetDefault() - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLERESETDEFAULT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set a style to be underlined or not. (Scintilla feature 2059) - public void StyleSetUnderline(int style, bool underline) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETUNDERLINE, (IntPtr) style, new IntPtr(underline ? 1 : 0)); - } - - /// Get the foreground colour of a style. (Scintilla feature 2481) - public Colour StyleGetFore(int style) - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETFORE, (IntPtr) style, (IntPtr) Unused)); - } - - /// Get the background colour of a style. (Scintilla feature 2482) - public Colour StyleGetBack(int style) - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETBACK, (IntPtr) style, (IntPtr) Unused)); - } - - /// Get is a style bold or not. (Scintilla feature 2483) - public bool StyleGetBold(int style) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETBOLD, (IntPtr) style, (IntPtr) Unused); - } - - /// Get is a style italic or not. (Scintilla feature 2484) - public bool StyleGetItalic(int style) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETITALIC, (IntPtr) style, (IntPtr) Unused); - } - - /// Get the size of characters of a style. (Scintilla feature 2485) - public int StyleGetSize(int style) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETSIZE, (IntPtr) style, (IntPtr) Unused); - } - - /// - /// Get the font of a style. - /// Returns the length of the fontName - /// Result is NUL-terminated. - /// (Scintilla feature 2486) - /// - public unsafe string StyleGetFont(int style) - { - byte[] fontNameBuffer = new byte[10000]; - fixed (byte* fontNamePtr = fontNameBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETFONT, (IntPtr) style, (IntPtr) fontNamePtr); - return Encoding.UTF8.GetString(fontNameBuffer).TrimEnd('\0'); - } - } - - /// Get is a style to have its end of line filled or not. (Scintilla feature 2487) - public bool StyleGetEOLFilled(int style) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETEOLFILLED, (IntPtr) style, (IntPtr) Unused); - } - - /// Get is a style underlined or not. (Scintilla feature 2488) - public bool StyleGetUnderline(int style) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETUNDERLINE, (IntPtr) style, (IntPtr) Unused); - } - - /// Get is a style mixed case, or to force upper or lower case. (Scintilla feature 2489) - public CaseVisible StyleGetCase(int style) - { - return (CaseVisible)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCASE, (IntPtr) style, (IntPtr) Unused); - } - - /// Get the character get of the font in a style. (Scintilla feature 2490) - public CharacterSet StyleGetCharacterSet(int style) - { - return (CharacterSet)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCHARACTERSET, (IntPtr) style, (IntPtr) Unused); - } - - /// Get is a style visible or not. (Scintilla feature 2491) - public bool StyleGetVisible(int style) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETVISIBLE, (IntPtr) style, (IntPtr) Unused); - } - - /// - /// Get is a style changeable or not (read only). - /// Experimental feature, currently buggy. - /// (Scintilla feature 2492) - /// - public bool StyleGetChangeable(int style) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCHANGEABLE, (IntPtr) style, (IntPtr) Unused); - } - - /// Get is a style a hotspot or not. (Scintilla feature 2493) - public bool StyleGetHotSpot(int style) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETHOTSPOT, (IntPtr) style, (IntPtr) Unused); - } - - /// Set a style to be mixed case, or to force upper or lower case. (Scintilla feature 2060) - public void StyleSetCase(int style, CaseVisible caseVisible) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCASE, (IntPtr) style, (IntPtr) caseVisible); - } - - /// Set the size of characters of a style. Size is in points multiplied by 100. (Scintilla feature 2061) - public void StyleSetSizeFractional(int style, int sizeHundredthPoints) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETSIZEFRACTIONAL, (IntPtr) style, (IntPtr) sizeHundredthPoints); - } - - /// Get the size of characters of a style in points multiplied by 100 (Scintilla feature 2062) - public int StyleGetSizeFractional(int style) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETSIZEFRACTIONAL, (IntPtr) style, (IntPtr) Unused); - } - - /// Set the weight of characters of a style. (Scintilla feature 2063) - public void StyleSetWeight(int style, FontWeight weight) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETWEIGHT, (IntPtr) style, (IntPtr) weight); - } - - /// Get the weight of characters of a style. (Scintilla feature 2064) - public FontWeight StyleGetWeight(int style) - { - return (FontWeight)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETWEIGHT, (IntPtr) style, (IntPtr) Unused); - } - - /// Set the character set of the font in a style. (Scintilla feature 2066) - public void StyleSetCharacterSet(int style, CharacterSet characterSet) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCHARACTERSET, (IntPtr) style, (IntPtr) characterSet); - } - - /// Set a style to be a hotspot or not. (Scintilla feature 2409) - public void StyleSetHotSpot(int style, bool hotspot) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETHOTSPOT, (IntPtr) style, new IntPtr(hotspot ? 1 : 0)); - } - - /// Set the foreground colour of the main and additional selections and whether to use this setting. (Scintilla feature 2067) - public void SetSelFore(bool useSetting, Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELFORE, new IntPtr(useSetting ? 1 : 0), fore.Value); - } - - /// Set the background colour of the main and additional selections and whether to use this setting. (Scintilla feature 2068) - public void SetSelBack(bool useSetting, Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELBACK, new IntPtr(useSetting ? 1 : 0), back.Value); - } - - /// Get the alpha of the selection. (Scintilla feature 2477) - public Alpha GetSelAlpha() - { - return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELALPHA, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the alpha of the selection. (Scintilla feature 2478) - public void SetSelAlpha(Alpha alpha) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELALPHA, (IntPtr) alpha, (IntPtr) Unused); - } - - /// Is the selection end of line filled? (Scintilla feature 2479) - public bool GetSelEOLFilled() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELEOLFILLED, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the selection to have its end of line filled or not. (Scintilla feature 2480) - public void SetSelEOLFilled(bool filled) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELEOLFILLED, new IntPtr(filled ? 1 : 0), (IntPtr) Unused); - } - - /// Set the foreground colour of the caret. (Scintilla feature 2069) - public void SetCaretFore(Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETFORE, fore.Value, (IntPtr) Unused); - } - - /// When key+modifier combination keyDefinition is pressed perform sciCommand. (Scintilla feature 2070) - public void AssignCmdKey(KeyModifier keyDefinition, int sciCommand) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ASSIGNCMDKEY, keyDefinition.Value, (IntPtr) sciCommand); - } - - /// When key+modifier combination keyDefinition is pressed do nothing. (Scintilla feature 2071) - public void ClearCmdKey(KeyModifier keyDefinition) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEARCMDKEY, keyDefinition.Value, (IntPtr) Unused); - } - - /// Drop all key mappings. (Scintilla feature 2072) - public void ClearAllCmdKeys() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEARALLCMDKEYS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the styles for a segment of the document. (Scintilla feature 2073) - public unsafe void SetStylingEx(int length, string styles) - { - fixed (byte* stylesPtr = Encoding.UTF8.GetBytes(styles)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLINGEX, (IntPtr) length, (IntPtr) stylesPtr); - } - } - - /// Set a style to be visible or not. (Scintilla feature 2074) - public void StyleSetVisible(int style, bool visible) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETVISIBLE, (IntPtr) style, new IntPtr(visible ? 1 : 0)); - } - - /// Get the time in milliseconds that the caret is on and off. (Scintilla feature 2075) - public int GetCaretPeriod() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETPERIOD, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get the time in milliseconds that the caret is on and off. 0 = steady on. (Scintilla feature 2076) - public void SetCaretPeriod(int periodMilliseconds) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETPERIOD, (IntPtr) periodMilliseconds, (IntPtr) Unused); - } - - /// - /// Set the set of characters making up words for when moving or selecting by word. - /// First sets defaults like SetCharsDefault. - /// (Scintilla feature 2077) - /// - public unsafe void SetWordChars(string characters) - { - fixed (byte* charactersPtr = Encoding.UTF8.GetBytes(characters)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWORDCHARS, (IntPtr) Unused, (IntPtr) charactersPtr); - } - } - - /// - /// Get the set of characters making up words for when moving or selecting by word. - /// Returns the number of characters - /// (Scintilla feature 2646) - /// - public unsafe string GetWordChars() - { - byte[] charactersBuffer = new byte[10000]; - fixed (byte* charactersPtr = charactersBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETWORDCHARS, (IntPtr) Unused, (IntPtr) charactersPtr); - return Encoding.UTF8.GetString(charactersBuffer).TrimEnd('\0'); - } - } - - /// Set the number of characters to have directly indexed categories (Scintilla feature 2720) - public void SetCharacterCategoryOptimization(int countCharacters) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCHARACTERCATEGORYOPTIMIZATION, (IntPtr) countCharacters, (IntPtr) Unused); - } - - /// Get the number of characters to have directly indexed categories (Scintilla feature 2721) - public int GetCharacterCategoryOptimization() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCHARACTERCATEGORYOPTIMIZATION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Start a sequence of actions that is undone and redone as a unit. - /// May be nested. - /// (Scintilla feature 2078) - /// - public void BeginUndoAction() - { - Win32.SendMessage(scintilla, SciMsg.SCI_BEGINUNDOACTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// End a sequence of actions that is undone and redone as a unit. (Scintilla feature 2079) - public void EndUndoAction() - { - Win32.SendMessage(scintilla, SciMsg.SCI_ENDUNDOACTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set an indicator to plain, squiggle or TT. (Scintilla feature 2080) - public void IndicSetStyle(int indicator, IndicatorStyle indicatorStyle) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETSTYLE, (IntPtr) indicator, (IntPtr) indicatorStyle); - } - - /// Retrieve the style of an indicator. (Scintilla feature 2081) - public IndicatorStyle IndicGetStyle(int indicator) - { - return (IndicatorStyle)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETSTYLE, (IntPtr) indicator, (IntPtr) Unused); - } - - /// Set the foreground colour of an indicator. (Scintilla feature 2082) - public void IndicSetFore(int indicator, Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETFORE, (IntPtr) indicator, fore.Value); - } - - /// Retrieve the foreground colour of an indicator. (Scintilla feature 2083) - public Colour IndicGetFore(int indicator) - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETFORE, (IntPtr) indicator, (IntPtr) Unused)); - } - - /// Set an indicator to draw under text or over(default). (Scintilla feature 2510) - public void IndicSetUnder(int indicator, bool under) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETUNDER, (IntPtr) indicator, new IntPtr(under ? 1 : 0)); - } - - /// Retrieve whether indicator drawn under or over text. (Scintilla feature 2511) - public bool IndicGetUnder(int indicator) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETUNDER, (IntPtr) indicator, (IntPtr) Unused); - } - - /// Set a hover indicator to plain, squiggle or TT. (Scintilla feature 2680) - public void IndicSetHoverStyle(int indicator, IndicatorStyle indicatorStyle) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETHOVERSTYLE, (IntPtr) indicator, (IntPtr) indicatorStyle); - } - - /// Retrieve the hover style of an indicator. (Scintilla feature 2681) - public IndicatorStyle IndicGetHoverStyle(int indicator) - { - return (IndicatorStyle)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETHOVERSTYLE, (IntPtr) indicator, (IntPtr) Unused); - } - - /// Set the foreground hover colour of an indicator. (Scintilla feature 2682) - public void IndicSetHoverFore(int indicator, Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETHOVERFORE, (IntPtr) indicator, fore.Value); - } - - /// Retrieve the foreground hover colour of an indicator. (Scintilla feature 2683) - public Colour IndicGetHoverFore(int indicator) - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETHOVERFORE, (IntPtr) indicator, (IntPtr) Unused)); - } - - /// Set the attributes of an indicator. (Scintilla feature 2684) - public void IndicSetFlags(int indicator, IndicFlag flags) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETFLAGS, (IntPtr) indicator, (IntPtr) flags); - } - - /// Retrieve the attributes of an indicator. (Scintilla feature 2685) - public IndicFlag IndicGetFlags(int indicator) - { - return (IndicFlag)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETFLAGS, (IntPtr) indicator, (IntPtr) Unused); - } - - /// Set the foreground colour of all whitespace and whether to use this setting. (Scintilla feature 2084) - public void SetWhitespaceFore(bool useSetting, Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACEFORE, new IntPtr(useSetting ? 1 : 0), fore.Value); - } - - /// Set the background colour of all whitespace and whether to use this setting. (Scintilla feature 2085) - public void SetWhitespaceBack(bool useSetting, Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACEBACK, new IntPtr(useSetting ? 1 : 0), back.Value); - } - - /// Set the size of the dots used to mark space characters. (Scintilla feature 2086) - public void SetWhitespaceSize(int size) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACESIZE, (IntPtr) size, (IntPtr) Unused); - } - - /// Get the size of the dots used to mark space characters. (Scintilla feature 2087) - public int GetWhitespaceSize() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETWHITESPACESIZE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Used to hold extra styling information for each line. (Scintilla feature 2092) - public void SetLineState(int line, int state) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETLINESTATE, (IntPtr) line, (IntPtr) state); - } - - /// Retrieve the extra styling information for a line. (Scintilla feature 2093) - public int GetLineState(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESTATE, (IntPtr) line, (IntPtr) Unused); - } - - /// Retrieve the last line number that has line state. (Scintilla feature 2094) - public int GetMaxLineState() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMAXLINESTATE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Is the background of the line containing the caret in a different colour? (Scintilla feature 2095) - public bool GetCaretLineVisible() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEVISIBLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Display the background of the line containing the caret in a different colour. (Scintilla feature 2096) - public void SetCaretLineVisible(bool show) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEVISIBLE, new IntPtr(show ? 1 : 0), (IntPtr) Unused); - } - - /// Get the colour of the background of the line containing the caret. (Scintilla feature 2097) - public Colour GetCaretLineBack() - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEBACK, (IntPtr) Unused, (IntPtr) Unused)); - } - - /// Set the colour of the background of the line containing the caret. (Scintilla feature 2098) - public void SetCaretLineBack(Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEBACK, back.Value, (IntPtr) Unused); - } - - /// - /// Retrieve the caret line frame width. - /// Width = 0 means this option is disabled. - /// (Scintilla feature 2704) - /// - public int GetCaretLineFrame() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEFRAME, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Display the caret line framed. - /// Set width != 0 to enable this option and width = 0 to disable it. - /// (Scintilla feature 2705) - /// - public void SetCaretLineFrame(int width) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEFRAME, (IntPtr) width, (IntPtr) Unused); - } - - /// - /// Set a style to be changeable or not (read only). - /// Experimental feature, currently buggy. - /// (Scintilla feature 2099) - /// - public void StyleSetChangeable(int style, bool changeable) - { - Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCHANGEABLE, (IntPtr) style, new IntPtr(changeable ? 1 : 0)); - } - - /// - /// Display a auto-completion list. - /// The lengthEntered parameter indicates how many characters before - /// the caret should be used to provide context. - /// (Scintilla feature 2100) - /// - public unsafe void AutoCShow(int lengthEntered, string itemList) - { - fixed (byte* itemListPtr = Encoding.UTF8.GetBytes(itemList)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSHOW, (IntPtr) lengthEntered, (IntPtr) itemListPtr); - } - } - - /// Remove the auto-completion list from the screen. (Scintilla feature 2101) - public void AutoCCancel() - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCCANCEL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Is there an auto-completion list visible? (Scintilla feature 2102) - public bool AutoCActive() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCACTIVE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Retrieve the position of the caret when the auto-completion list was displayed. (Scintilla feature 2103) - public int AutoCPosStart() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCPOSSTART, (IntPtr) Unused, (IntPtr) Unused); - } - - /// User has selected an item so remove the list and insert the selection. (Scintilla feature 2104) - public void AutoCComplete() - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCCOMPLETE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Define a set of character that when typed cancel the auto-completion list. (Scintilla feature 2105) - public unsafe void AutoCStops(string characterSet) - { - fixed (byte* characterSetPtr = Encoding.UTF8.GetBytes(characterSet)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSTOPS, (IntPtr) Unused, (IntPtr) characterSetPtr); - } - } - - /// - /// Change the separator character in the string setting up an auto-completion list. - /// Default is space but can be changed if items contain space. - /// (Scintilla feature 2106) - /// - public void AutoCSetSeparator(int separatorCharacter) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETSEPARATOR, (IntPtr) separatorCharacter, (IntPtr) Unused); - } - - /// Retrieve the auto-completion list separator character. (Scintilla feature 2107) - public int AutoCGetSeparator() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETSEPARATOR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Select the item in the auto-completion list that starts with a string. (Scintilla feature 2108) - public unsafe void AutoCSelect(string select) - { - fixed (byte* selectPtr = Encoding.UTF8.GetBytes(select)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSELECT, (IntPtr) Unused, (IntPtr) selectPtr); - } - } - - /// - /// Should the auto-completion list be cancelled if the user backspaces to a - /// position before where the box was created. - /// (Scintilla feature 2110) - /// - public void AutoCSetCancelAtStart(bool cancel) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCANCELATSTART, new IntPtr(cancel ? 1 : 0), (IntPtr) Unused); - } - - /// Retrieve whether auto-completion cancelled by backspacing before start. (Scintilla feature 2111) - public bool AutoCGetCancelAtStart() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCANCELATSTART, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Define a set of characters that when typed will cause the autocompletion to - /// choose the selected item. - /// (Scintilla feature 2112) - /// - public unsafe void AutoCSetFillUps(string characterSet) - { - fixed (byte* characterSetPtr = Encoding.UTF8.GetBytes(characterSet)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETFILLUPS, (IntPtr) Unused, (IntPtr) characterSetPtr); - } - } - - /// Should a single item auto-completion list automatically choose the item. (Scintilla feature 2113) - public void AutoCSetChooseSingle(bool chooseSingle) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCHOOSESINGLE, new IntPtr(chooseSingle ? 1 : 0), (IntPtr) Unused); - } - - /// Retrieve whether a single item auto-completion list automatically choose the item. (Scintilla feature 2114) - public bool AutoCGetChooseSingle() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCHOOSESINGLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set whether case is significant when performing auto-completion searches. (Scintilla feature 2115) - public void AutoCSetIgnoreCase(bool ignoreCase) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETIGNORECASE, new IntPtr(ignoreCase ? 1 : 0), (IntPtr) Unused); - } - - /// Retrieve state of ignore case flag. (Scintilla feature 2116) - public bool AutoCGetIgnoreCase() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETIGNORECASE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Display a list of strings and send notification when user chooses one. (Scintilla feature 2117) - public unsafe void UserListShow(int listType, string itemList) - { - fixed (byte* itemListPtr = Encoding.UTF8.GetBytes(itemList)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_USERLISTSHOW, (IntPtr) listType, (IntPtr) itemListPtr); - } - } - - /// Set whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2118) - public void AutoCSetAutoHide(bool autoHide) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETAUTOHIDE, new IntPtr(autoHide ? 1 : 0), (IntPtr) Unused); - } - - /// Retrieve whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2119) - public bool AutoCGetAutoHide() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETAUTOHIDE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set whether or not autocompletion deletes any word characters - /// after the inserted text upon completion. - /// (Scintilla feature 2270) - /// - public void AutoCSetDropRestOfWord(bool dropRestOfWord) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETDROPRESTOFWORD, new IntPtr(dropRestOfWord ? 1 : 0), (IntPtr) Unused); - } - - /// - /// Retrieve whether or not autocompletion deletes any word characters - /// after the inserted text upon completion. - /// (Scintilla feature 2271) - /// - public bool AutoCGetDropRestOfWord() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETDROPRESTOFWORD, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Register an XPM image for use in autocompletion lists. (Scintilla feature 2405) - public unsafe void RegisterImage(int type, string xpmData) - { - fixed (byte* xpmDataPtr = Encoding.UTF8.GetBytes(xpmData)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_REGISTERIMAGE, (IntPtr) type, (IntPtr) xpmDataPtr); - } - } - - /// Clear all the registered XPM images. (Scintilla feature 2408) - public void ClearRegisteredImages() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEARREGISTEREDIMAGES, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Retrieve the auto-completion list type-separator character. (Scintilla feature 2285) - public int AutoCGetTypeSeparator() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETTYPESEPARATOR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Change the type-separator character in the string setting up an auto-completion list. - /// Default is '?' but can be changed if items contain '?'. - /// (Scintilla feature 2286) - /// - public void AutoCSetTypeSeparator(int separatorCharacter) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETTYPESEPARATOR, (IntPtr) separatorCharacter, (IntPtr) Unused); - } - - /// - /// Set the maximum width, in characters, of auto-completion and user lists. - /// Set to 0 to autosize to fit longest item, which is the default. - /// (Scintilla feature 2208) - /// - public void AutoCSetMaxWidth(int characterCount) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMAXWIDTH, (IntPtr) characterCount, (IntPtr) Unused); - } - - /// Get the maximum width, in characters, of auto-completion and user lists. (Scintilla feature 2209) - public int AutoCGetMaxWidth() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMAXWIDTH, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set the maximum height, in rows, of auto-completion and user lists. - /// The default is 5 rows. - /// (Scintilla feature 2210) - /// - public void AutoCSetMaxHeight(int rowCount) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMAXHEIGHT, (IntPtr) rowCount, (IntPtr) Unused); - } - - /// Set the maximum height, in rows, of auto-completion and user lists. (Scintilla feature 2211) - public int AutoCGetMaxHeight() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMAXHEIGHT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the number of spaces used for one level of indentation. (Scintilla feature 2122) - public void SetIndent(int indentSize) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETINDENT, (IntPtr) indentSize, (IntPtr) Unused); - } - - /// Retrieve indentation size. (Scintilla feature 2123) - public int GetIndent() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETINDENT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Indentation will only use space characters if useTabs is false, otherwise - /// it will use a combination of tabs and spaces. - /// (Scintilla feature 2124) - /// - public void SetUseTabs(bool useTabs) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETUSETABS, new IntPtr(useTabs ? 1 : 0), (IntPtr) Unused); - } - - /// Retrieve whether tabs will be used in indentation. (Scintilla feature 2125) - public bool GetUseTabs() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETUSETABS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Change the indentation of a line to a number of columns. (Scintilla feature 2126) - public void SetLineIndentation(int line, int indentation) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETLINEINDENTATION, (IntPtr) line, (IntPtr) indentation); - } - - /// Retrieve the number of columns that a line is indented. (Scintilla feature 2127) - public int GetLineIndentation(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEINDENTATION, (IntPtr) line, (IntPtr) Unused); - } - - /// Retrieve the position before the first non indentation character on a line. (Scintilla feature 2128) - public int GetLineIndentPosition(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEINDENTPOSITION, (IntPtr) line, (IntPtr) Unused); - } - - /// Retrieve the column number of a position, taking tab width into account. (Scintilla feature 2129) - public int GetColumn(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCOLUMN, (IntPtr) pos, (IntPtr) Unused); - } - - /// Count characters between two positions. (Scintilla feature 2633) - public int CountCharacters(int start, int end) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_COUNTCHARACTERS, (IntPtr) start, (IntPtr) end); - } - - /// Count code units between two positions. (Scintilla feature 2715) - public int CountCodeUnits(int start, int end) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_COUNTCODEUNITS, (IntPtr) start, (IntPtr) end); - } - - /// Show or hide the horizontal scroll bar. (Scintilla feature 2130) - public void SetHScrollBar(bool visible) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETHSCROLLBAR, new IntPtr(visible ? 1 : 0), (IntPtr) Unused); - } - - /// Is the horizontal scroll bar visible? (Scintilla feature 2131) - public bool GetHScrollBar() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETHSCROLLBAR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Show or hide indentation guides. (Scintilla feature 2132) - public void SetIndentationGuides(IndentView indentView) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETINDENTATIONGUIDES, (IntPtr) indentView, (IntPtr) Unused); - } - - /// Are the indentation guides visible? (Scintilla feature 2133) - public IndentView GetIndentationGuides() - { - return (IndentView)Win32.SendMessage(scintilla, SciMsg.SCI_GETINDENTATIONGUIDES, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set the highlighted indentation guide column. - /// 0 = no highlighted guide. - /// (Scintilla feature 2134) - /// - public void SetHighlightGuide(int column) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETHIGHLIGHTGUIDE, (IntPtr) column, (IntPtr) Unused); - } - - /// Get the highlighted indentation guide column. (Scintilla feature 2135) - public int GetHighlightGuide() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETHIGHLIGHTGUIDE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get the position after the last visible characters on a line. (Scintilla feature 2136) - public int GetLineEndPosition(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDPOSITION, (IntPtr) line, (IntPtr) Unused); - } - - /// Get the code page used to interpret the bytes of the document as characters. (Scintilla feature 2137) - public int GetCodePage() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCODEPAGE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get the foreground colour of the caret. (Scintilla feature 2138) - public Colour GetCaretFore() - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETFORE, (IntPtr) Unused, (IntPtr) Unused)); - } - - /// In read-only mode? (Scintilla feature 2140) - public bool GetReadOnly() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETREADONLY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the position of the caret. (Scintilla feature 2141) - public void SetCurrentPos(int caret) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCURRENTPOS, (IntPtr) caret, (IntPtr) Unused); - } - - /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2142) - public void SetSelectionStart(int anchor) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONSTART, (IntPtr) anchor, (IntPtr) Unused); - } - - /// Returns the position at the start of the selection. (Scintilla feature 2143) - public int GetSelectionStart() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONSTART, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the position that ends the selection - this becomes the caret. (Scintilla feature 2144) - public void SetSelectionEnd(int caret) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONEND, (IntPtr) caret, (IntPtr) Unused); - } - - /// Returns the position at the end of the selection. (Scintilla feature 2145) - public int GetSelectionEnd() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set caret to a position, while removing any existing selection. (Scintilla feature 2556) - public void SetEmptySelection(int caret) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETEMPTYSELECTION, (IntPtr) caret, (IntPtr) Unused); - } - - /// Sets the print magnification added to the point size of each style for printing. (Scintilla feature 2146) - public void SetPrintMagnification(int magnification) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTMAGNIFICATION, (IntPtr) magnification, (IntPtr) Unused); - } - - /// Returns the print magnification. (Scintilla feature 2147) - public int GetPrintMagnification() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTMAGNIFICATION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Modify colours when printing for clearer printed text. (Scintilla feature 2148) - public void SetPrintColourMode(PrintOption mode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTCOLOURMODE, (IntPtr) mode, (IntPtr) Unused); - } - - /// Returns the print colour mode. (Scintilla feature 2149) - public PrintOption GetPrintColourMode() - { - return (PrintOption)Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTCOLOURMODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Find some text in the document. (Scintilla feature 2150) - public int FindText(FindOption searchFlags, TextToFind ft) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_FINDTEXT, (IntPtr) searchFlags, ft.NativePointer); - } - - /// Retrieve the display line at the top of the display. (Scintilla feature 2152) - public int GetFirstVisibleLine() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETFIRSTVISIBLELINE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Retrieve the contents of a line. - /// Returns the length of the line. - /// (Scintilla feature 2153) - /// - public unsafe string GetLine(int line) - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETLINE, (IntPtr) line, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// Returns the number of lines in the document. There is always at least one. (Scintilla feature 2154) - public int GetLineCount() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINECOUNT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the size in pixels of the left margin. (Scintilla feature 2155) - public void SetMarginLeft(int pixelWidth) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINLEFT, (IntPtr) Unused, (IntPtr) pixelWidth); - } - - /// Returns the size in pixels of the left margin. (Scintilla feature 2156) - public int GetMarginLeft() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINLEFT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the size in pixels of the right margin. (Scintilla feature 2157) - public void SetMarginRight(int pixelWidth) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINRIGHT, (IntPtr) Unused, (IntPtr) pixelWidth); - } - - /// Returns the size in pixels of the right margin. (Scintilla feature 2158) - public int GetMarginRight() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINRIGHT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Is the document different from when it was last saved? (Scintilla feature 2159) - public bool GetModify() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMODIFY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Select a range of text. (Scintilla feature 2160) - public void SetSel(int anchor, int caret) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSEL, (IntPtr) anchor, (IntPtr) caret); - } - - /// - /// Retrieve the selected text. - /// Return the length of the text. - /// Result is NUL-terminated. - /// (Scintilla feature 2161) - /// - public unsafe string GetSelText() - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETSELTEXT, (IntPtr) Unused, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// - /// Retrieve a range of text. - /// Return the length of the text. - /// (Scintilla feature 2162) - /// - public int GetTextRange(TextRange tr) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXTRANGE, (IntPtr) Unused, tr.NativePointer); - } - - /// Draw the selection either highlighted or in normal (non-highlighted) style. (Scintilla feature 2163) - public void HideSelection(bool hide) - { - Win32.SendMessage(scintilla, SciMsg.SCI_HIDESELECTION, new IntPtr(hide ? 1 : 0), (IntPtr) Unused); - } - - /// Retrieve the x value of the point in the window where a position is displayed. (Scintilla feature 2164) - public int PointXFromPosition(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POINTXFROMPOSITION, (IntPtr) Unused, (IntPtr) pos); - } - - /// Retrieve the y value of the point in the window where a position is displayed. (Scintilla feature 2165) - public int PointYFromPosition(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POINTYFROMPOSITION, (IntPtr) Unused, (IntPtr) pos); - } - - /// Retrieve the line containing a position. (Scintilla feature 2166) - public int LineFromPosition(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_LINEFROMPOSITION, (IntPtr) pos, (IntPtr) Unused); - } - - /// Retrieve the position at the start of a line. (Scintilla feature 2167) - public int PositionFromLine(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMLINE, (IntPtr) line, (IntPtr) Unused); - } - - /// Scroll horizontally and vertically. (Scintilla feature 2168) - public void LineScroll(int columns, int lines) - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLL, (IntPtr) columns, (IntPtr) lines); - } - - /// Ensure the caret is visible. (Scintilla feature 2169) - public void ScrollCaret() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLCARET, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Scroll the argument positions and the range between them into view giving - /// priority to the primary position then the secondary position. - /// This may be used to make a search match visible. - /// (Scintilla feature 2569) - /// - public void ScrollRange(int secondary, int primary) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLRANGE, (IntPtr) secondary, (IntPtr) primary); - } - - /// Replace the selected text with the argument text. (Scintilla feature 2170) - public unsafe void ReplaceSel(string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_REPLACESEL, (IntPtr) Unused, (IntPtr) textPtr); - } - } - - /// Set to read only or read write. (Scintilla feature 2171) - public void SetReadOnly(bool readOnly) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETREADONLY, new IntPtr(readOnly ? 1 : 0), (IntPtr) Unused); - } - - /// Null operation. (Scintilla feature 2172) - public void Null() - { - Win32.SendMessage(scintilla, SciMsg.SCI_NULL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Will a paste succeed? (Scintilla feature 2173) - public bool CanPaste() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_CANPASTE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Are there any undoable actions in the undo history? (Scintilla feature 2174) - public bool CanUndo() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_CANUNDO, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Delete the undo history. (Scintilla feature 2175) - public void EmptyUndoBuffer() - { - Win32.SendMessage(scintilla, SciMsg.SCI_EMPTYUNDOBUFFER, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Undo one action in the undo history. (Scintilla feature 2176) - public void Undo() - { - Win32.SendMessage(scintilla, SciMsg.SCI_UNDO, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Cut the selection to the clipboard. (Scintilla feature 2177) - public void Cut() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CUT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Copy the selection to the clipboard. (Scintilla feature 2178) - public void Copy() - { - Win32.SendMessage(scintilla, SciMsg.SCI_COPY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Paste the contents of the clipboard into the document replacing the selection. (Scintilla feature 2179) - public void Paste() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PASTE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Clear the selection. (Scintilla feature 2180) - public void Clear() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEAR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Replace the contents of the document with the argument text. (Scintilla feature 2181) - public unsafe void SetText(string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTEXT, (IntPtr) Unused, (IntPtr) textPtr); - } - } - - /// - /// Retrieve all the text in the document. - /// Returns number of characters retrieved. - /// Result is NUL-terminated. - /// (Scintilla feature 2182) - /// - public unsafe string GetText(int length) - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXT, (IntPtr) length, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// Retrieve the number of characters in the document. (Scintilla feature 2183) - public int GetTextLength() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXTLENGTH, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Retrieve a pointer to a function that processes messages for this Scintilla. (Scintilla feature 2184) - public IntPtr GetDirectFunction() - { - return Win32.SendMessage(scintilla, SciMsg.SCI_GETDIRECTFUNCTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Retrieve a pointer value to use as the first argument when calling - /// the function returned by GetDirectFunction. - /// (Scintilla feature 2185) - /// - public IntPtr GetDirectPointer() - { - return Win32.SendMessage(scintilla, SciMsg.SCI_GETDIRECTPOINTER, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set to overtype (true) or insert mode. (Scintilla feature 2186) - public void SetOvertype(bool overType) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETOVERTYPE, new IntPtr(overType ? 1 : 0), (IntPtr) Unused); - } - - /// Returns true if overtype mode is active otherwise false is returned. (Scintilla feature 2187) - public bool GetOvertype() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETOVERTYPE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the width of the insert mode caret. (Scintilla feature 2188) - public void SetCaretWidth(int pixelWidth) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETWIDTH, (IntPtr) pixelWidth, (IntPtr) Unused); - } - - /// Returns the width of the insert mode caret. (Scintilla feature 2189) - public int GetCaretWidth() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETWIDTH, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Sets the position that starts the target which is used for updating the - /// document without affecting the scroll position. - /// (Scintilla feature 2190) - /// - public void SetTargetStart(int start) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETSTART, (IntPtr) start, (IntPtr) Unused); - } - - /// Get the position that starts the target. (Scintilla feature 2191) - public int GetTargetStart() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETSTART, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Sets the position that ends the target which is used for updating the - /// document without affecting the scroll position. - /// (Scintilla feature 2192) - /// - public void SetTargetEnd(int end) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETEND, (IntPtr) end, (IntPtr) Unused); - } - - /// Get the position that ends the target. (Scintilla feature 2193) - public int GetTargetEnd() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets both the start and end of the target in one call. (Scintilla feature 2686) - public void SetTargetRange(int start, int end) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETRANGE, (IntPtr) start, (IntPtr) end); - } - - /// Retrieve the text in the target. (Scintilla feature 2687) - public unsafe string GetTargetText() - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETTEXT, (IntPtr) Unused, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// Make the target range start and end be the same as the selection range start and end. (Scintilla feature 2287) - public void TargetFromSelection() - { - Win32.SendMessage(scintilla, SciMsg.SCI_TARGETFROMSELECTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the target to the whole document. (Scintilla feature 2690) - public void TargetWholeDocument() - { - Win32.SendMessage(scintilla, SciMsg.SCI_TARGETWHOLEDOCUMENT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Replace the target text with the argument text. - /// Text is counted so it can contain NULs. - /// Returns the length of the replacement text. - /// (Scintilla feature 2194) - /// - public unsafe int ReplaceTarget(int length, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_REPLACETARGET, (IntPtr) length, (IntPtr) textPtr); - } - } - - /// - /// Replace the target text with the argument text after \d processing. - /// Text is counted so it can contain NULs. - /// Looks for \d where d is between 1 and 9 and replaces these with the strings - /// matched in the last search operation which were surrounded by \( and \). - /// Returns the length of the replacement text including any change - /// caused by processing the \d patterns. - /// (Scintilla feature 2195) - /// - public unsafe int ReplaceTargetRE(int length, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_REPLACETARGETRE, (IntPtr) length, (IntPtr) textPtr); - } - } - - /// - /// Search for a counted string in the target and set the target to the found - /// range. Text is counted so it can contain NULs. - /// Returns start of found range or -1 for failure in which case target is not moved. - /// (Scintilla feature 2197) - /// - public unsafe int SearchInTarget(int length, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHINTARGET, (IntPtr) length, (IntPtr) textPtr); - } - } - - /// Set the search flags used by SearchInTarget. (Scintilla feature 2198) - public void SetSearchFlags(FindOption searchFlags) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSEARCHFLAGS, (IntPtr) searchFlags, (IntPtr) Unused); - } - - /// Get the search flags used by SearchInTarget. (Scintilla feature 2199) - public FindOption GetSearchFlags() - { - return (FindOption)Win32.SendMessage(scintilla, SciMsg.SCI_GETSEARCHFLAGS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Show a call tip containing a definition near position pos. (Scintilla feature 2200) - public unsafe void CallTipShow(int pos, string definition) - { - fixed (byte* definitionPtr = Encoding.UTF8.GetBytes(definition)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSHOW, (IntPtr) pos, (IntPtr) definitionPtr); - } - } - - /// Remove the call tip from the screen. (Scintilla feature 2201) - public void CallTipCancel() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPCANCEL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Is there an active call tip? (Scintilla feature 2202) - public bool CallTipActive() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPACTIVE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Retrieve the position where the caret was before displaying the call tip. (Scintilla feature 2203) - public int CallTipPosStart() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPPOSSTART, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the start position in order to change when backspacing removes the calltip. (Scintilla feature 2214) - public void CallTipSetPosStart(int posStart) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETPOSSTART, (IntPtr) posStart, (IntPtr) Unused); - } - - /// Highlight a segment of the definition. (Scintilla feature 2204) - public void CallTipSetHlt(int highlightStart, int highlightEnd) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETHLT, (IntPtr) highlightStart, (IntPtr) highlightEnd); - } - - /// Set the background colour for the call tip. (Scintilla feature 2205) - public void CallTipSetBack(Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETBACK, back.Value, (IntPtr) Unused); - } - - /// Set the foreground colour for the call tip. (Scintilla feature 2206) - public void CallTipSetFore(Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETFORE, fore.Value, (IntPtr) Unused); - } - - /// Set the foreground colour for the highlighted part of the call tip. (Scintilla feature 2207) - public void CallTipSetForeHlt(Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETFOREHLT, fore.Value, (IntPtr) Unused); - } - - /// Enable use of STYLE_CALLTIP and set call tip tab size in pixels. (Scintilla feature 2212) - public void CallTipUseStyle(int tabSize) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPUSESTYLE, (IntPtr) tabSize, (IntPtr) Unused); - } - - /// Set position of calltip, above or below text. (Scintilla feature 2213) - public void CallTipSetPosition(bool above) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETPOSITION, new IntPtr(above ? 1 : 0), (IntPtr) Unused); - } - - /// Find the display line of a document line taking hidden lines into account. (Scintilla feature 2220) - public int VisibleFromDocLine(int docLine) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_VISIBLEFROMDOCLINE, (IntPtr) docLine, (IntPtr) Unused); - } - - /// Find the document line of a display line taking hidden lines into account. (Scintilla feature 2221) - public int DocLineFromVisible(int displayLine) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_DOCLINEFROMVISIBLE, (IntPtr) displayLine, (IntPtr) Unused); - } - - /// The number of display lines needed to wrap a document line (Scintilla feature 2235) - public int WrapCount(int docLine) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_WRAPCOUNT, (IntPtr) docLine, (IntPtr) Unused); - } - - /// - /// Set the fold level of a line. - /// This encodes an integer level along with flags indicating whether the - /// line is a header and whether it is effectively white space. - /// (Scintilla feature 2222) - /// - public void SetFoldLevel(int line, FoldLevel level) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDLEVEL, (IntPtr) line, (IntPtr) level); - } - - /// Retrieve the fold level of a line. (Scintilla feature 2223) - public FoldLevel GetFoldLevel(int line) - { - return (FoldLevel)Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDLEVEL, (IntPtr) line, (IntPtr) Unused); - } - - /// Find the last child line of a header line. (Scintilla feature 2224) - public int GetLastChild(int line, FoldLevel level) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLASTCHILD, (IntPtr) line, (IntPtr) level); - } - - /// Find the parent line of a child line. (Scintilla feature 2225) - public int GetFoldParent(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDPARENT, (IntPtr) line, (IntPtr) Unused); - } - - /// Make a range of lines visible. (Scintilla feature 2226) - public void ShowLines(int lineStart, int lineEnd) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SHOWLINES, (IntPtr) lineStart, (IntPtr) lineEnd); - } - - /// Make a range of lines invisible. (Scintilla feature 2227) - public void HideLines(int lineStart, int lineEnd) - { - Win32.SendMessage(scintilla, SciMsg.SCI_HIDELINES, (IntPtr) lineStart, (IntPtr) lineEnd); - } - - /// Is a line visible? (Scintilla feature 2228) - public bool GetLineVisible(int line) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEVISIBLE, (IntPtr) line, (IntPtr) Unused); - } - - /// Are all lines visible? (Scintilla feature 2236) - public bool GetAllLinesVisible() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETALLLINESVISIBLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Show the children of a header line. (Scintilla feature 2229) - public void SetFoldExpanded(int line, bool expanded) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDEXPANDED, (IntPtr) line, new IntPtr(expanded ? 1 : 0)); - } - - /// Is a header line expanded? (Scintilla feature 2230) - public bool GetFoldExpanded(int line) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDEXPANDED, (IntPtr) line, (IntPtr) Unused); - } - - /// Switch a header line between expanded and contracted. (Scintilla feature 2231) - public void ToggleFold(int line) - { - Win32.SendMessage(scintilla, SciMsg.SCI_TOGGLEFOLD, (IntPtr) line, (IntPtr) Unused); - } - - /// Switch a header line between expanded and contracted and show some text after the line. (Scintilla feature 2700) - public unsafe void ToggleFoldShowText(int line, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_TOGGLEFOLDSHOWTEXT, (IntPtr) line, (IntPtr) textPtr); - } - } - - /// Set the style of fold display text. (Scintilla feature 2701) - public void FoldDisplayTextSetStyle(FoldDisplayTextStyle style) - { - Win32.SendMessage(scintilla, SciMsg.SCI_FOLDDISPLAYTEXTSETSTYLE, (IntPtr) style, (IntPtr) Unused); - } - - /// Get the style of fold display text. (Scintilla feature 2707) - public FoldDisplayTextStyle FoldDisplayTextGetStyle() - { - return (FoldDisplayTextStyle)Win32.SendMessage(scintilla, SciMsg.SCI_FOLDDISPLAYTEXTGETSTYLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the default fold display text. (Scintilla feature 2722) - public unsafe void SetDefaultFoldDisplayText(string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETDEFAULTFOLDDISPLAYTEXT, (IntPtr) Unused, (IntPtr) textPtr); - } - } - - /// Get the default fold display text. (Scintilla feature 2723) - public unsafe string GetDefaultFoldDisplayText() - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETDEFAULTFOLDDISPLAYTEXT, (IntPtr) Unused, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// Expand or contract a fold header. (Scintilla feature 2237) - public void FoldLine(int line, FoldAction action) - { - Win32.SendMessage(scintilla, SciMsg.SCI_FOLDLINE, (IntPtr) line, (IntPtr) action); - } - - /// Expand or contract a fold header and its children. (Scintilla feature 2238) - public void FoldChildren(int line, FoldAction action) - { - Win32.SendMessage(scintilla, SciMsg.SCI_FOLDCHILDREN, (IntPtr) line, (IntPtr) action); - } - - /// Expand a fold header and all children. Use the level argument instead of the line's current level. (Scintilla feature 2239) - public void ExpandChildren(int line, FoldLevel level) - { - Win32.SendMessage(scintilla, SciMsg.SCI_EXPANDCHILDREN, (IntPtr) line, (IntPtr) level); - } - - /// Expand or contract all fold headers. (Scintilla feature 2662) - public void FoldAll(FoldAction action) - { - Win32.SendMessage(scintilla, SciMsg.SCI_FOLDALL, (IntPtr) action, (IntPtr) Unused); - } - - /// Ensure a particular line is visible by expanding any header line hiding it. (Scintilla feature 2232) - public void EnsureVisible(int line) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ENSUREVISIBLE, (IntPtr) line, (IntPtr) Unused); - } - - /// Set automatic folding behaviours. (Scintilla feature 2663) - public void SetAutomaticFold(AutomaticFold automaticFold) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETAUTOMATICFOLD, (IntPtr) automaticFold, (IntPtr) Unused); - } - - /// Get automatic folding behaviours. (Scintilla feature 2664) - public AutomaticFold GetAutomaticFold() - { - return (AutomaticFold)Win32.SendMessage(scintilla, SciMsg.SCI_GETAUTOMATICFOLD, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set some style options for folding. (Scintilla feature 2233) - public void SetFoldFlags(FoldFlag flags) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDFLAGS, (IntPtr) flags, (IntPtr) Unused); - } - - /// - /// Ensure a particular line is visible by expanding any header line hiding it. - /// Use the currently set visibility policy to determine which range to display. - /// (Scintilla feature 2234) - /// - public void EnsureVisibleEnforcePolicy(int line) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ENSUREVISIBLEENFORCEPOLICY, (IntPtr) line, (IntPtr) Unused); - } - - /// Sets whether a tab pressed when caret is within indentation indents. (Scintilla feature 2260) - public void SetTabIndents(bool tabIndents) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTABINDENTS, new IntPtr(tabIndents ? 1 : 0), (IntPtr) Unused); - } - - /// Does a tab pressed when caret is within indentation indent? (Scintilla feature 2261) - public bool GetTabIndents() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTABINDENTS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets whether a backspace pressed when caret is within indentation unindents. (Scintilla feature 2262) - public void SetBackSpaceUnIndents(bool bsUnIndents) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETBACKSPACEUNINDENTS, new IntPtr(bsUnIndents ? 1 : 0), (IntPtr) Unused); - } - - /// Does a backspace pressed when caret is within indentation unindent? (Scintilla feature 2263) - public bool GetBackSpaceUnIndents() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETBACKSPACEUNINDENTS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2264) - public void SetMouseDwellTime(int periodMilliseconds) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSEDWELLTIME, (IntPtr) periodMilliseconds, (IntPtr) Unused); - } - - /// Retrieve the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2265) - public int GetMouseDwellTime() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSEDWELLTIME, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get position of start of word. (Scintilla feature 2266) - public int WordStartPosition(int pos, bool onlyWordCharacters) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_WORDSTARTPOSITION, (IntPtr) pos, new IntPtr(onlyWordCharacters ? 1 : 0)); - } - - /// Get position of end of word. (Scintilla feature 2267) - public int WordEndPosition(int pos, bool onlyWordCharacters) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_WORDENDPOSITION, (IntPtr) pos, new IntPtr(onlyWordCharacters ? 1 : 0)); - } - - /// Is the range start..end considered a word? (Scintilla feature 2691) - public bool IsRangeWord(int start, int end) - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_ISRANGEWORD, (IntPtr) start, (IntPtr) end); - } - - /// Sets limits to idle styling. (Scintilla feature 2692) - public void SetIdleStyling(IdleStyling idleStyling) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETIDLESTYLING, (IntPtr) idleStyling, (IntPtr) Unused); - } - - /// Retrieve the limits to idle styling. (Scintilla feature 2693) - public IdleStyling GetIdleStyling() - { - return (IdleStyling)Win32.SendMessage(scintilla, SciMsg.SCI_GETIDLESTYLING, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets whether text is word wrapped. (Scintilla feature 2268) - public void SetWrapMode(Wrap wrapMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPMODE, (IntPtr) wrapMode, (IntPtr) Unused); - } - - /// Retrieve whether text is word wrapped. (Scintilla feature 2269) - public Wrap GetWrapMode() - { - return (Wrap)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPMODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the display mode of visual flags for wrapped lines. (Scintilla feature 2460) - public void SetWrapVisualFlags(WrapVisualFlag wrapVisualFlags) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPVISUALFLAGS, (IntPtr) wrapVisualFlags, (IntPtr) Unused); - } - - /// Retrive the display mode of visual flags for wrapped lines. (Scintilla feature 2461) - public WrapVisualFlag GetWrapVisualFlags() - { - return (WrapVisualFlag)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPVISUALFLAGS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the location of visual flags for wrapped lines. (Scintilla feature 2462) - public void SetWrapVisualFlagsLocation(WrapVisualLocation wrapVisualFlagsLocation) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPVISUALFLAGSLOCATION, (IntPtr) wrapVisualFlagsLocation, (IntPtr) Unused); - } - - /// Retrive the location of visual flags for wrapped lines. (Scintilla feature 2463) - public WrapVisualLocation GetWrapVisualFlagsLocation() - { - return (WrapVisualLocation)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPVISUALFLAGSLOCATION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the start indent for wrapped lines. (Scintilla feature 2464) - public void SetWrapStartIndent(int indent) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPSTARTINDENT, (IntPtr) indent, (IntPtr) Unused); - } - - /// Retrive the start indent for wrapped lines. (Scintilla feature 2465) - public int GetWrapStartIndent() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPSTARTINDENT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets how wrapped sublines are placed. Default is fixed. (Scintilla feature 2472) - public void SetWrapIndentMode(WrapIndentMode wrapIndentMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPINDENTMODE, (IntPtr) wrapIndentMode, (IntPtr) Unused); - } - - /// Retrieve how wrapped sublines are placed. Default is fixed. (Scintilla feature 2473) - public WrapIndentMode GetWrapIndentMode() - { - return (WrapIndentMode)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPINDENTMODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the degree of caching of layout information. (Scintilla feature 2272) - public void SetLayoutCache(LineCache cacheMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETLAYOUTCACHE, (IntPtr) cacheMode, (IntPtr) Unused); - } - - /// Retrieve the degree of caching of layout information. (Scintilla feature 2273) - public LineCache GetLayoutCache() - { - return (LineCache)Win32.SendMessage(scintilla, SciMsg.SCI_GETLAYOUTCACHE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the document width assumed for scrolling. (Scintilla feature 2274) - public void SetScrollWidth(int pixelWidth) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSCROLLWIDTH, (IntPtr) pixelWidth, (IntPtr) Unused); - } - - /// Retrieve the document width assumed for scrolling. (Scintilla feature 2275) - public int GetScrollWidth() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSCROLLWIDTH, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets whether the maximum width line displayed is used to set scroll width. (Scintilla feature 2516) - public void SetScrollWidthTracking(bool tracking) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSCROLLWIDTHTRACKING, new IntPtr(tracking ? 1 : 0), (IntPtr) Unused); - } - - /// Retrieve whether the scroll width tracks wide lines. (Scintilla feature 2517) - public bool GetScrollWidthTracking() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSCROLLWIDTHTRACKING, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Measure the pixel width of some text in a particular style. - /// NUL terminated text argument. - /// Does not handle tab or control characters. - /// (Scintilla feature 2276) - /// - public unsafe int TextWidth(int style, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_TEXTWIDTH, (IntPtr) style, (IntPtr) textPtr); - } - } - - /// - /// Sets the scroll range so that maximum scroll position has - /// the last line at the bottom of the view (default). - /// Setting this to false allows scrolling one page below the last line. - /// (Scintilla feature 2277) - /// - public void SetEndAtLastLine(bool endAtLastLine) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETENDATLASTLINE, new IntPtr(endAtLastLine ? 1 : 0), (IntPtr) Unused); - } - - /// - /// Retrieve whether the maximum scroll position has the last - /// line at the bottom of the view. - /// (Scintilla feature 2278) - /// - public bool GetEndAtLastLine() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETENDATLASTLINE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Retrieve the height of a particular line of text in pixels. (Scintilla feature 2279) - public int TextHeight(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_TEXTHEIGHT, (IntPtr) line, (IntPtr) Unused); - } - - /// Show or hide the vertical scroll bar. (Scintilla feature 2280) - public void SetVScrollBar(bool visible) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETVSCROLLBAR, new IntPtr(visible ? 1 : 0), (IntPtr) Unused); - } - - /// Is the vertical scroll bar visible? (Scintilla feature 2281) - public bool GetVScrollBar() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETVSCROLLBAR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Append a string to the end of the document without changing the selection. (Scintilla feature 2282) - public unsafe void AppendText(int length, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_APPENDTEXT, (IntPtr) length, (IntPtr) textPtr); - } - } - - /// How many phases is drawing done in? (Scintilla feature 2673) - public PhasesDraw GetPhasesDraw() - { - return (PhasesDraw)Win32.SendMessage(scintilla, SciMsg.SCI_GETPHASESDRAW, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// In one phase draw, text is drawn in a series of rectangular blocks with no overlap. - /// In two phase draw, text is drawn in a series of lines allowing runs to overlap horizontally. - /// In multiple phase draw, each element is drawn over the whole drawing area, allowing text - /// to overlap from one line to the next. - /// (Scintilla feature 2674) - /// - public void SetPhasesDraw(PhasesDraw phases) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETPHASESDRAW, (IntPtr) phases, (IntPtr) Unused); - } - - /// Choose the quality level for text from the FontQuality enumeration. (Scintilla feature 2611) - public void SetFontQuality(FontQuality fontQuality) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETFONTQUALITY, (IntPtr) fontQuality, (IntPtr) Unused); - } - - /// Retrieve the quality level for text. (Scintilla feature 2612) - public FontQuality GetFontQuality() - { - return (FontQuality)Win32.SendMessage(scintilla, SciMsg.SCI_GETFONTQUALITY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Scroll so that a display line is at the top of the display. (Scintilla feature 2613) - public void SetFirstVisibleLine(int displayLine) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETFIRSTVISIBLELINE, (IntPtr) displayLine, (IntPtr) Unused); - } - - /// Change the effect of pasting when there are multiple selections. (Scintilla feature 2614) - public void SetMultiPaste(MultiPaste multiPaste) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMULTIPASTE, (IntPtr) multiPaste, (IntPtr) Unused); - } - - /// Retrieve the effect of pasting when there are multiple selections. (Scintilla feature 2615) - public MultiPaste GetMultiPaste() - { - return (MultiPaste)Win32.SendMessage(scintilla, SciMsg.SCI_GETMULTIPASTE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Retrieve the value of a tag from a regular expression search. - /// Result is NUL-terminated. - /// (Scintilla feature 2616) - /// - public unsafe string GetTag(int tagNumber) - { - byte[] tagValueBuffer = new byte[10000]; - fixed (byte* tagValuePtr = tagValueBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETTAG, (IntPtr) tagNumber, (IntPtr) tagValuePtr); - return Encoding.UTF8.GetString(tagValueBuffer).TrimEnd('\0'); - } - } - - /// Join the lines in the target. (Scintilla feature 2288) - public void LinesJoin() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINESJOIN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Split the lines in the target into lines that are less wide than pixelWidth - /// where possible. - /// (Scintilla feature 2289) - /// - public void LinesSplit(int pixelWidth) - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINESSPLIT, (IntPtr) pixelWidth, (IntPtr) Unused); - } - - /// Set one of the colours used as a chequerboard pattern in the fold margin (Scintilla feature 2290) - public void SetFoldMarginColour(bool useSetting, Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDMARGINCOLOUR, new IntPtr(useSetting ? 1 : 0), back.Value); - } - - /// Set the other colour used as a chequerboard pattern in the fold margin (Scintilla feature 2291) - public void SetFoldMarginHiColour(bool useSetting, Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDMARGINHICOLOUR, new IntPtr(useSetting ? 1 : 0), fore.Value); - } - - /// Enable or disable accessibility. (Scintilla feature 2702) - public void SetAccessibility(Accessibility accessibility) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETACCESSIBILITY, (IntPtr) accessibility, (IntPtr) Unused); - } - - /// Report accessibility status. (Scintilla feature 2703) - public Accessibility GetAccessibility() - { - return (Accessibility)Win32.SendMessage(scintilla, SciMsg.SCI_GETACCESSIBILITY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret down one line. (Scintilla feature 2300) - public void LineDown() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret down one line extending selection to new caret position. (Scintilla feature 2301) - public void LineDownExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWNEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret up one line. (Scintilla feature 2302) - public void LineUp() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEUP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret up one line extending selection to new caret position. (Scintilla feature 2303) - public void LineUpExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEUPEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret left one character. (Scintilla feature 2304) - public void CharLeft() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret left one character extending selection to new caret position. (Scintilla feature 2305) - public void CharLeftExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret right one character. (Scintilla feature 2306) - public void CharRight() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret right one character extending selection to new caret position. (Scintilla feature 2307) - public void CharRightExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret left one word. (Scintilla feature 2308) - public void WordLeft() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret left one word extending selection to new caret position. (Scintilla feature 2309) - public void WordLeftExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret right one word. (Scintilla feature 2310) - public void WordRight() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret right one word extending selection to new caret position. (Scintilla feature 2311) - public void WordRightExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to first position on line. (Scintilla feature 2312) - public void Home() - { - Win32.SendMessage(scintilla, SciMsg.SCI_HOME, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to first position on line extending selection to new caret position. (Scintilla feature 2313) - public void HomeExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_HOMEEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to last position on line. (Scintilla feature 2314) - public void LineEnd() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to last position on line extending selection to new caret position. (Scintilla feature 2315) - public void LineEndExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to first position in document. (Scintilla feature 2316) - public void DocumentStart() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTSTART, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to first position in document extending selection to new caret position. (Scintilla feature 2317) - public void DocumentStartExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTSTARTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to last position in document. (Scintilla feature 2318) - public void DocumentEnd() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to last position in document extending selection to new caret position. (Scintilla feature 2319) - public void DocumentEndExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTENDEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret one page up. (Scintilla feature 2320) - public void PageUp() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret one page up extending selection to new caret position. (Scintilla feature 2321) - public void PageUpExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUPEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret one page down. (Scintilla feature 2322) - public void PageDown() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret one page down extending selection to new caret position. (Scintilla feature 2323) - public void PageDownExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWNEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Switch from insert to overtype mode or the reverse. (Scintilla feature 2324) - public void EditToggleOvertype() - { - Win32.SendMessage(scintilla, SciMsg.SCI_EDITTOGGLEOVERTYPE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Cancel any modes such as call tip or auto-completion list display. (Scintilla feature 2325) - public void Cancel() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CANCEL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Delete the selection or if no selection, the character before the caret. (Scintilla feature 2326) - public void DeleteBack() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DELETEBACK, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// If selection is empty or all on one line replace the selection with a tab character. - /// If more than one line selected, indent the lines. - /// (Scintilla feature 2327) - /// - public void Tab() - { - Win32.SendMessage(scintilla, SciMsg.SCI_TAB, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Dedent the selected lines. (Scintilla feature 2328) - public void BackTab() - { - Win32.SendMessage(scintilla, SciMsg.SCI_BACKTAB, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Insert a new line, may use a CRLF, CR or LF depending on EOL mode. (Scintilla feature 2329) - public void NewLine() - { - Win32.SendMessage(scintilla, SciMsg.SCI_NEWLINE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Insert a Form Feed character. (Scintilla feature 2330) - public void FormFeed() - { - Win32.SendMessage(scintilla, SciMsg.SCI_FORMFEED, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Move caret to before first visible character on line. - /// If already there move to first character on line. - /// (Scintilla feature 2331) - /// - public void VCHome() - { - Win32.SendMessage(scintilla, SciMsg.SCI_VCHOME, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Like VCHome but extending selection to new caret position. (Scintilla feature 2332) - public void VCHomeExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Magnify the displayed text by increasing the sizes by 1 point. (Scintilla feature 2333) - public void ZoomIn() - { - Win32.SendMessage(scintilla, SciMsg.SCI_ZOOMIN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Make the displayed text smaller by decreasing the sizes by 1 point. (Scintilla feature 2334) - public void ZoomOut() - { - Win32.SendMessage(scintilla, SciMsg.SCI_ZOOMOUT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Delete the word to the left of the caret. (Scintilla feature 2335) - public void DelWordLeft() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDLEFT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Delete the word to the right of the caret. (Scintilla feature 2336) - public void DelWordRight() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDRIGHT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Delete the word to the right of the caret, but not the trailing non-word characters. (Scintilla feature 2518) - public void DelWordRightEnd() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDRIGHTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Cut the line containing the caret. (Scintilla feature 2337) - public void LineCut() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINECUT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Delete the line containing the caret. (Scintilla feature 2338) - public void LineDelete() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEDELETE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Switch the current line with the previous. (Scintilla feature 2339) - public void LineTranspose() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINETRANSPOSE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Reverse order of selected lines. (Scintilla feature 2354) - public void LineReverse() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEREVERSE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Duplicate the current line. (Scintilla feature 2404) - public void LineDuplicate() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEDUPLICATE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Transform the selection to lower case. (Scintilla feature 2340) - public void LowerCase() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LOWERCASE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Transform the selection to upper case. (Scintilla feature 2341) - public void UpperCase() - { - Win32.SendMessage(scintilla, SciMsg.SCI_UPPERCASE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Scroll the document down, keeping the caret visible. (Scintilla feature 2342) - public void LineScrollDown() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLLDOWN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Scroll the document up, keeping the caret visible. (Scintilla feature 2343) - public void LineScrollUp() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLLUP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Delete the selection or if no selection, the character before the caret. - /// Will not delete the character before at the start of a line. - /// (Scintilla feature 2344) - /// - public void DeleteBackNotLine() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DELETEBACKNOTLINE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to first position on display line. (Scintilla feature 2345) - public void HomeDisplay() - { - Win32.SendMessage(scintilla, SciMsg.SCI_HOMEDISPLAY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Move caret to first position on display line extending selection to - /// new caret position. - /// (Scintilla feature 2346) - /// - public void HomeDisplayExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_HOMEDISPLAYEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to last position on display line. (Scintilla feature 2347) - public void LineEndDisplay() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDDISPLAY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Move caret to last position on display line extending selection to new - /// caret position. - /// (Scintilla feature 2348) - /// - public void LineEndDisplayExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDDISPLAYEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Like Home but when word-wrap is enabled goes first to start of display line - /// HomeDisplay, then to start of document line Home. - /// (Scintilla feature 2349) - /// - public void HomeWrap() - { - Win32.SendMessage(scintilla, SciMsg.SCI_HOMEWRAP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Like HomeExtend but when word-wrap is enabled extends first to start of display line - /// HomeDisplayExtend, then to start of document line HomeExtend. - /// (Scintilla feature 2450) - /// - public void HomeWrapExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_HOMEWRAPEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Like LineEnd but when word-wrap is enabled goes first to end of display line - /// LineEndDisplay, then to start of document line LineEnd. - /// (Scintilla feature 2451) - /// - public void LineEndWrap() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDWRAP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Like LineEndExtend but when word-wrap is enabled extends first to end of display line - /// LineEndDisplayExtend, then to start of document line LineEndExtend. - /// (Scintilla feature 2452) - /// - public void LineEndWrapExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDWRAPEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Like VCHome but when word-wrap is enabled goes first to start of display line - /// VCHomeDisplay, then behaves like VCHome. - /// (Scintilla feature 2453) - /// - public void VCHomeWrap() - { - Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEWRAP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Like VCHomeExtend but when word-wrap is enabled extends first to start of display line - /// VCHomeDisplayExtend, then behaves like VCHomeExtend. - /// (Scintilla feature 2454) - /// - public void VCHomeWrapExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEWRAPEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Copy the line containing the caret. (Scintilla feature 2455) - public void LineCopy() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINECOPY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move the caret inside current view if it's not there already. (Scintilla feature 2401) - public void MoveCaretInsideView() - { - Win32.SendMessage(scintilla, SciMsg.SCI_MOVECARETINSIDEVIEW, (IntPtr) Unused, (IntPtr) Unused); - } - - /// How many characters are on a line, including end of line characters? (Scintilla feature 2350) - public int LineLength(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_LINELENGTH, (IntPtr) line, (IntPtr) Unused); - } - - /// Highlight the characters at two positions. (Scintilla feature 2351) - public void BraceHighlight(int posA, int posB) - { - Win32.SendMessage(scintilla, SciMsg.SCI_BRACEHIGHLIGHT, (IntPtr) posA, (IntPtr) posB); - } - - /// Use specified indicator to highlight matching braces instead of changing their style. (Scintilla feature 2498) - public void BraceHighlightIndicator(bool useSetting, int indicator) - { - Win32.SendMessage(scintilla, SciMsg.SCI_BRACEHIGHLIGHTINDICATOR, new IntPtr(useSetting ? 1 : 0), (IntPtr) indicator); - } - - /// Highlight the character at a position indicating there is no matching brace. (Scintilla feature 2352) - public void BraceBadLight(int pos) - { - Win32.SendMessage(scintilla, SciMsg.SCI_BRACEBADLIGHT, (IntPtr) pos, (IntPtr) Unused); - } - - /// Use specified indicator to highlight non matching brace instead of changing its style. (Scintilla feature 2499) - public void BraceBadLightIndicator(bool useSetting, int indicator) - { - Win32.SendMessage(scintilla, SciMsg.SCI_BRACEBADLIGHTINDICATOR, new IntPtr(useSetting ? 1 : 0), (IntPtr) indicator); - } - - /// - /// Find the position of a matching brace or INVALID_POSITION if no match. - /// The maxReStyle must be 0 for now. It may be defined in a future release. - /// (Scintilla feature 2353) - /// - public int BraceMatch(int pos, int maxReStyle) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_BRACEMATCH, (IntPtr) pos, (IntPtr) maxReStyle); - } - - /// Are the end of line characters visible? (Scintilla feature 2355) - public bool GetViewEOL() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETVIEWEOL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Make the end of line characters visible or invisible. (Scintilla feature 2356) - public void SetViewEOL(bool visible) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETVIEWEOL, new IntPtr(visible ? 1 : 0), (IntPtr) Unused); - } - - /// Retrieve a pointer to the document object. (Scintilla feature 2357) - public IntPtr GetDocPointer() - { - return Win32.SendMessage(scintilla, SciMsg.SCI_GETDOCPOINTER, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Change the document object used. (Scintilla feature 2358) - public void SetDocPointer(IntPtr doc) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETDOCPOINTER, (IntPtr) Unused, (IntPtr) doc); - } - - /// Set which document modification events are sent to the container. (Scintilla feature 2359) - public void SetModEventMask(ModificationFlags eventMask) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMODEVENTMASK, (IntPtr) eventMask, (IntPtr) Unused); - } - - /// Retrieve the column number which text should be kept within. (Scintilla feature 2360) - public int GetEdgeColumn() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGECOLUMN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set the column number of the edge. - /// If text goes past the edge then it is highlighted. - /// (Scintilla feature 2361) - /// - public void SetEdgeColumn(int column) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGECOLUMN, (IntPtr) column, (IntPtr) Unused); - } - - /// Retrieve the edge highlight mode. (Scintilla feature 2362) - public EdgeVisualStyle GetEdgeMode() - { - return (EdgeVisualStyle)Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGEMODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// The edge may be displayed by a line (EDGE_LINE/EDGE_MULTILINE) or by highlighting text that - /// goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). - /// (Scintilla feature 2363) - /// - public void SetEdgeMode(EdgeVisualStyle edgeMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGEMODE, (IntPtr) edgeMode, (IntPtr) Unused); - } - - /// Retrieve the colour used in edge indication. (Scintilla feature 2364) - public Colour GetEdgeColour() - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGECOLOUR, (IntPtr) Unused, (IntPtr) Unused)); - } - - /// Change the colour used in edge indication. (Scintilla feature 2365) - public void SetEdgeColour(Colour edgeColour) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGECOLOUR, edgeColour.Value, (IntPtr) Unused); - } - - /// Add a new vertical edge to the view. (Scintilla feature 2694) - public void MultiEdgeAddLine(int column, Colour edgeColour) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MULTIEDGEADDLINE, (IntPtr) column, edgeColour.Value); - } - - /// Clear all vertical edges. (Scintilla feature 2695) - public void MultiEdgeClearAll() - { - Win32.SendMessage(scintilla, SciMsg.SCI_MULTIEDGECLEARALL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the current caret position to be the search anchor. (Scintilla feature 2366) - public void SearchAnchor() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHANCHOR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Find some text starting at the search anchor. - /// Does not ensure the selection is visible. - /// (Scintilla feature 2367) - /// - public unsafe int SearchNext(FindOption searchFlags, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHNEXT, (IntPtr) searchFlags, (IntPtr) textPtr); - } - } - - /// - /// Find some text starting at the search anchor and moving backwards. - /// Does not ensure the selection is visible. - /// (Scintilla feature 2368) - /// - public unsafe int SearchPrev(FindOption searchFlags, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHPREV, (IntPtr) searchFlags, (IntPtr) textPtr); - } - } - - /// Retrieves the number of lines completely visible. (Scintilla feature 2370) - public int LinesOnScreen() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_LINESONSCREEN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set whether a pop up menu is displayed automatically when the user presses - /// the wrong mouse button on certain areas. - /// (Scintilla feature 2371) - /// - public void UsePopUp(PopUp popUpMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_USEPOPUP, (IntPtr) popUpMode, (IntPtr) Unused); - } - - /// Is the selection rectangular? The alternative is the more common stream selection. (Scintilla feature 2372) - public bool SelectionIsRectangle() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_SELECTIONISRECTANGLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set the zoom level. This number of points is added to the size of all fonts. - /// It may be positive to magnify or negative to reduce. - /// (Scintilla feature 2373) - /// - public void SetZoom(int zoomInPoints) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETZOOM, (IntPtr) zoomInPoints, (IntPtr) Unused); - } - - /// Retrieve the zoom level. (Scintilla feature 2374) - public int GetZoom() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETZOOM, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Create a new document object. - /// Starts with reference count of 1 and not selected into editor. - /// (Scintilla feature 2375) - /// - public IntPtr CreateDocument(int bytes, DocumentOption documentOptions) - { - return Win32.SendMessage(scintilla, SciMsg.SCI_CREATEDOCUMENT, (IntPtr) bytes, (IntPtr) documentOptions); - } - - /// Extend life of document. (Scintilla feature 2376) - public void AddRefDocument(IntPtr doc) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ADDREFDOCUMENT, (IntPtr) Unused, (IntPtr) doc); - } - - /// Release a reference to the document, deleting document if it fades to black. (Scintilla feature 2377) - public void ReleaseDocument(IntPtr doc) - { - Win32.SendMessage(scintilla, SciMsg.SCI_RELEASEDOCUMENT, (IntPtr) Unused, (IntPtr) doc); - } - - /// Get which document options are set. (Scintilla feature 2379) - public DocumentOption GetDocumentOptions() - { - return (DocumentOption)Win32.SendMessage(scintilla, SciMsg.SCI_GETDOCUMENTOPTIONS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get which document modification events are sent to the container. (Scintilla feature 2378) - public ModificationFlags GetModEventMask() - { - return (ModificationFlags)Win32.SendMessage(scintilla, SciMsg.SCI_GETMODEVENTMASK, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set whether command events are sent to the container. (Scintilla feature 2717) - public void SetCommandEvents(bool commandEvents) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCOMMANDEVENTS, new IntPtr(commandEvents ? 1 : 0), (IntPtr) Unused); - } - - /// Get whether command events are sent to the container. (Scintilla feature 2718) - public bool GetCommandEvents() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCOMMANDEVENTS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Change internal focus flag. (Scintilla feature 2380) - public void SetFocus(bool focus) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETFOCUS, new IntPtr(focus ? 1 : 0), (IntPtr) Unused); - } - - /// Get internal focus flag. (Scintilla feature 2381) - public bool GetFocus() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETFOCUS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Change error status - 0 = OK. (Scintilla feature 2382) - public void SetStatus(Status status) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSTATUS, (IntPtr) status, (IntPtr) Unused); - } - - /// Get error status. (Scintilla feature 2383) - public Status GetStatus() - { - return (Status)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTATUS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set whether the mouse is captured when its button is pressed. (Scintilla feature 2384) - public void SetMouseDownCaptures(bool captures) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSEDOWNCAPTURES, new IntPtr(captures ? 1 : 0), (IntPtr) Unused); - } - - /// Get whether mouse gets captured. (Scintilla feature 2385) - public bool GetMouseDownCaptures() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSEDOWNCAPTURES, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set whether the mouse wheel can be active outside the window. (Scintilla feature 2696) - public void SetMouseWheelCaptures(bool captures) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSEWHEELCAPTURES, new IntPtr(captures ? 1 : 0), (IntPtr) Unused); - } - - /// Get whether mouse wheel can be active outside the window. (Scintilla feature 2697) - public bool GetMouseWheelCaptures() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSEWHEELCAPTURES, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the cursor to one of the SC_CURSOR* values. (Scintilla feature 2386) - public void SetCursor(CursorShape cursorType) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCURSOR, (IntPtr) cursorType, (IntPtr) Unused); - } - - /// Get cursor type. (Scintilla feature 2387) - public CursorShape GetCursor() - { - return (CursorShape)Win32.SendMessage(scintilla, SciMsg.SCI_GETCURSOR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Change the way control characters are displayed: - /// If symbol is < 32, keep the drawn way, else, use the given character. - /// (Scintilla feature 2388) - /// - public void SetControlCharSymbol(int symbol) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCONTROLCHARSYMBOL, (IntPtr) symbol, (IntPtr) Unused); - } - - /// Get the way control characters are displayed. (Scintilla feature 2389) - public int GetControlCharSymbol() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCONTROLCHARSYMBOL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move to the previous change in capitalisation. (Scintilla feature 2390) - public void WordPartLeft() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTLEFT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Move to the previous change in capitalisation extending selection - /// to new caret position. - /// (Scintilla feature 2391) - /// - public void WordPartLeftExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTLEFTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move to the change next in capitalisation. (Scintilla feature 2392) - public void WordPartRight() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTRIGHT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Move to the next change in capitalisation extending selection - /// to new caret position. - /// (Scintilla feature 2393) - /// - public void WordPartRightExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTRIGHTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set the way the display area is determined when a particular line - /// is to be moved to by Find, FindNext, GotoLine, etc. - /// (Scintilla feature 2394) - /// - public void SetVisiblePolicy(VisiblePolicy visiblePolicy, int visibleSlop) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETVISIBLEPOLICY, (IntPtr) visiblePolicy, (IntPtr) visibleSlop); - } - - /// Delete back from the current position to the start of the line. (Scintilla feature 2395) - public void DelLineLeft() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DELLINELEFT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Delete forwards from the current position to the end of the line. (Scintilla feature 2396) - public void DelLineRight() - { - Win32.SendMessage(scintilla, SciMsg.SCI_DELLINERIGHT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the xOffset (ie, horizontal scroll position). (Scintilla feature 2397) - public void SetXOffset(int xOffset) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETXOFFSET, (IntPtr) xOffset, (IntPtr) Unused); - } - - /// Get the xOffset (ie, horizontal scroll position). (Scintilla feature 2398) - public int GetXOffset() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETXOFFSET, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the last x chosen value to be the caret x position. (Scintilla feature 2399) - public void ChooseCaretX() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CHOOSECARETX, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the focus to this Scintilla widget. (Scintilla feature 2400) - public void GrabFocus() - { - Win32.SendMessage(scintilla, SciMsg.SCI_GRABFOCUS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set the way the caret is kept visible when going sideways. - /// The exclusion zone is given in pixels. - /// (Scintilla feature 2402) - /// - public void SetXCaretPolicy(CaretPolicy caretPolicy, int caretSlop) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETXCARETPOLICY, (IntPtr) caretPolicy, (IntPtr) caretSlop); - } - - /// - /// Set the way the line the caret is on is kept visible. - /// The exclusion zone is given in lines. - /// (Scintilla feature 2403) - /// - public void SetYCaretPolicy(CaretPolicy caretPolicy, int caretSlop) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETYCARETPOLICY, (IntPtr) caretPolicy, (IntPtr) caretSlop); - } - - /// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). (Scintilla feature 2406) - public void SetPrintWrapMode(Wrap wrapMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTWRAPMODE, (IntPtr) wrapMode, (IntPtr) Unused); - } - - /// Is printing line wrapped? (Scintilla feature 2407) - public Wrap GetPrintWrapMode() - { - return (Wrap)Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTWRAPMODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set a fore colour for active hotspots. (Scintilla feature 2410) - public void SetHotspotActiveFore(bool useSetting, Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEFORE, new IntPtr(useSetting ? 1 : 0), fore.Value); - } - - /// Get the fore colour for active hotspots. (Scintilla feature 2494) - public Colour GetHotspotActiveFore() - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEFORE, (IntPtr) Unused, (IntPtr) Unused)); - } - - /// Set a back colour for active hotspots. (Scintilla feature 2411) - public void SetHotspotActiveBack(bool useSetting, Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEBACK, new IntPtr(useSetting ? 1 : 0), back.Value); - } - - /// Get the back colour for active hotspots. (Scintilla feature 2495) - public Colour GetHotspotActiveBack() - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEBACK, (IntPtr) Unused, (IntPtr) Unused)); - } - - /// Enable / Disable underlining active hotspots. (Scintilla feature 2412) - public void SetHotspotActiveUnderline(bool underline) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEUNDERLINE, new IntPtr(underline ? 1 : 0), (IntPtr) Unused); - } - - /// Get whether underlining for active hotspots. (Scintilla feature 2496) - public bool GetHotspotActiveUnderline() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEUNDERLINE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Limit hotspots to single line so hotspots on two lines don't merge. (Scintilla feature 2421) - public void SetHotspotSingleLine(bool singleLine) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTSINGLELINE, new IntPtr(singleLine ? 1 : 0), (IntPtr) Unused); - } - - /// Get the HotspotSingleLine property (Scintilla feature 2497) - public bool GetHotspotSingleLine() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTSINGLELINE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret down one paragraph (delimited by empty lines). (Scintilla feature 2413) - public void ParaDown() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PARADOWN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Extend selection down one paragraph (delimited by empty lines). (Scintilla feature 2414) - public void ParaDownExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PARADOWNEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret up one paragraph (delimited by empty lines). (Scintilla feature 2415) - public void ParaUp() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PARAUP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Extend selection up one paragraph (delimited by empty lines). (Scintilla feature 2416) - public void ParaUpExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PARAUPEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Given a valid document position, return the previous position taking code - /// page into account. Returns 0 if passed 0. - /// (Scintilla feature 2417) - /// - public int PositionBefore(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONBEFORE, (IntPtr) pos, (IntPtr) Unused); - } - - /// - /// Given a valid document position, return the next position taking code - /// page into account. Maximum value returned is the last position in the document. - /// (Scintilla feature 2418) - /// - public int PositionAfter(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONAFTER, (IntPtr) pos, (IntPtr) Unused); - } - - /// - /// Given a valid document position, return a position that differs in a number - /// of characters. Returned value is always between 0 and last position in document. - /// (Scintilla feature 2670) - /// - public int PositionRelative(int pos, int relative) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONRELATIVE, (IntPtr) pos, (IntPtr) relative); - } - - /// - /// Given a valid document position, return a position that differs in a number - /// of UTF-16 code units. Returned value is always between 0 and last position in document. - /// The result may point half way (2 bytes) inside a non-BMP character. - /// (Scintilla feature 2716) - /// - public int PositionRelativeCodeUnits(int pos, int relative) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONRELATIVECODEUNITS, (IntPtr) pos, (IntPtr) relative); - } - - /// Copy a range of text to the clipboard. Positions are clipped into the document. (Scintilla feature 2419) - public void CopyRange(int start, int end) - { - Win32.SendMessage(scintilla, SciMsg.SCI_COPYRANGE, (IntPtr) start, (IntPtr) end); - } - - /// Copy argument text to the clipboard. (Scintilla feature 2420) - public unsafe void CopyText(int length, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_COPYTEXT, (IntPtr) length, (IntPtr) textPtr); - } - } - - /// - /// Set the selection mode to stream (SC_SEL_STREAM) or rectangular (SC_SEL_RECTANGLE/SC_SEL_THIN) or - /// by lines (SC_SEL_LINES). - /// (Scintilla feature 2422) - /// - public void SetSelectionMode(SelectionMode selectionMode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONMODE, (IntPtr) selectionMode, (IntPtr) Unused); - } - - /// Get the mode of the current selection. (Scintilla feature 2423) - public SelectionMode GetSelectionMode() - { - return (SelectionMode)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONMODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get whether or not regular caret moves will extend or reduce the selection. (Scintilla feature 2706) - public bool GetMoveExtendsSelection() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOVEEXTENDSSELECTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2424) - public int GetLineSelStartPosition(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESELSTARTPOSITION, (IntPtr) line, (IntPtr) Unused); - } - - /// Retrieve the position of the end of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2425) - public int GetLineSelEndPosition(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESELENDPOSITION, (IntPtr) line, (IntPtr) Unused); - } - - /// Move caret down one line, extending rectangular selection to new caret position. (Scintilla feature 2426) - public void LineDownRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWNRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret up one line, extending rectangular selection to new caret position. (Scintilla feature 2427) - public void LineUpRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEUPRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret left one character, extending rectangular selection to new caret position. (Scintilla feature 2428) - public void CharLeftRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFTRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret right one character, extending rectangular selection to new caret position. (Scintilla feature 2429) - public void CharRightRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHTRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to first position on line, extending rectangular selection to new caret position. (Scintilla feature 2430) - public void HomeRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_HOMERECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Move caret to before first visible character on line. - /// If already there move to first character on line. - /// In either case, extend rectangular selection to new caret position. - /// (Scintilla feature 2431) - /// - public void VCHomeRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMERECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to last position on line, extending rectangular selection to new caret position. (Scintilla feature 2432) - public void LineEndRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret one page up, extending rectangular selection to new caret position. (Scintilla feature 2433) - public void PageUpRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUPRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret one page down, extending rectangular selection to new caret position. (Scintilla feature 2434) - public void PageDownRectExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWNRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to top of page, or one page up if already at top of page. (Scintilla feature 2435) - public void StutteredPageUp() - { - Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEUP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to top of page, or one page up if already at top of page, extending selection to new caret position. (Scintilla feature 2436) - public void StutteredPageUpExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEUPEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to bottom of page, or one page down if already at bottom of page. (Scintilla feature 2437) - public void StutteredPageDown() - { - Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEDOWN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position. (Scintilla feature 2438) - public void StutteredPageDownExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEDOWNEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret left one word, position cursor at end of word. (Scintilla feature 2439) - public void WordLeftEnd() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret left one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2440) - public void WordLeftEndExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTENDEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret right one word, position cursor at end of word. (Scintilla feature 2441) - public void WordRightEnd() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move caret right one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2442) - public void WordRightEndExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTENDEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set the set of characters making up whitespace for when moving or selecting by word. - /// Should be called after SetWordChars. - /// (Scintilla feature 2443) - /// - public unsafe void SetWhitespaceChars(string characters) - { - fixed (byte* charactersPtr = Encoding.UTF8.GetBytes(characters)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACECHARS, (IntPtr) Unused, (IntPtr) charactersPtr); - } - } - - /// Get the set of characters making up whitespace for when moving or selecting by word. (Scintilla feature 2647) - public unsafe string GetWhitespaceChars() - { - byte[] charactersBuffer = new byte[10000]; - fixed (byte* charactersPtr = charactersBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETWHITESPACECHARS, (IntPtr) Unused, (IntPtr) charactersPtr); - return Encoding.UTF8.GetString(charactersBuffer).TrimEnd('\0'); - } - } - - /// - /// Set the set of characters making up punctuation characters - /// Should be called after SetWordChars. - /// (Scintilla feature 2648) - /// - public unsafe void SetPunctuationChars(string characters) - { - fixed (byte* charactersPtr = Encoding.UTF8.GetBytes(characters)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETPUNCTUATIONCHARS, (IntPtr) Unused, (IntPtr) charactersPtr); - } - } - - /// Get the set of characters making up punctuation characters (Scintilla feature 2649) - public unsafe string GetPunctuationChars() - { - byte[] charactersBuffer = new byte[10000]; - fixed (byte* charactersPtr = charactersBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETPUNCTUATIONCHARS, (IntPtr) Unused, (IntPtr) charactersPtr); - return Encoding.UTF8.GetString(charactersBuffer).TrimEnd('\0'); - } - } - - /// Reset the set of characters for whitespace and word characters to the defaults. (Scintilla feature 2444) - public void SetCharsDefault() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCHARSDEFAULT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get currently selected item position in the auto-completion list (Scintilla feature 2445) - public int AutoCGetCurrent() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCURRENT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Get currently selected item text in the auto-completion list - /// Returns the length of the item text - /// Result is NUL-terminated. - /// (Scintilla feature 2610) - /// - public unsafe string AutoCGetCurrentText() - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCURRENTTEXT, (IntPtr) Unused, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// Set auto-completion case insensitive behaviour to either prefer case-sensitive matches or have no preference. (Scintilla feature 2634) - public void AutoCSetCaseInsensitiveBehaviour(CaseInsensitiveBehaviour behaviour) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR, (IntPtr) behaviour, (IntPtr) Unused); - } - - /// Get auto-completion case insensitive behaviour. (Scintilla feature 2635) - public CaseInsensitiveBehaviour AutoCGetCaseInsensitiveBehaviour() - { - return (CaseInsensitiveBehaviour)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Change the effect of autocompleting when there are multiple selections. (Scintilla feature 2636) - public void AutoCSetMulti(MultiAutoComplete multi) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMULTI, (IntPtr) multi, (IntPtr) Unused); - } - - /// Retrieve the effect of autocompleting when there are multiple selections. (Scintilla feature 2637) - public MultiAutoComplete AutoCGetMulti() - { - return (MultiAutoComplete)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMULTI, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the way autocompletion lists are ordered. (Scintilla feature 2660) - public void AutoCSetOrder(Ordering order) - { - Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETORDER, (IntPtr) order, (IntPtr) Unused); - } - - /// Get the way autocompletion lists are ordered. (Scintilla feature 2661) - public Ordering AutoCGetOrder() - { - return (Ordering)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETORDER, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Enlarge the document to a particular size of text bytes. (Scintilla feature 2446) - public void Allocate(int bytes) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATE, (IntPtr) bytes, (IntPtr) Unused); - } - - /// - /// Returns the target converted to UTF8. - /// Return the length in bytes. - /// (Scintilla feature 2447) - /// - public unsafe string TargetAsUTF8() - { - byte[] sBuffer = new byte[10000]; - fixed (byte* sPtr = sBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_TARGETASUTF8, (IntPtr) Unused, (IntPtr) sPtr); - return Encoding.UTF8.GetString(sBuffer).TrimEnd('\0'); - } - } - - /// - /// Set the length of the utf8 argument for calling EncodedFromUTF8. - /// Set to -1 and the string will be measured to the first nul. - /// (Scintilla feature 2448) - /// - public void SetLengthForEncode(int bytes) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETLENGTHFORENCODE, (IntPtr) bytes, (IntPtr) Unused); - } - - /// - /// Translates a UTF8 string into the document encoding. - /// Return the length of the result in bytes. - /// On error return 0. - /// (Scintilla feature 2449) - /// - public unsafe string EncodedFromUTF8(string utf8) - { - fixed (byte* utf8Ptr = Encoding.UTF8.GetBytes(utf8)) - { - byte[] encodedBuffer = new byte[10000]; - fixed (byte* encodedPtr = encodedBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ENCODEDFROMUTF8, (IntPtr) utf8Ptr, (IntPtr) encodedPtr); - return Encoding.UTF8.GetString(encodedBuffer).TrimEnd('\0'); - } - } - } - - /// - /// Find the position of a column on a line taking into account tabs and - /// multi-byte characters. If beyond end of line, return line end position. - /// (Scintilla feature 2456) - /// - public int FindColumn(int line, int column) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_FINDCOLUMN, (IntPtr) line, (IntPtr) column); - } - - /// Can the caret preferred x position only be changed by explicit movement commands? (Scintilla feature 2457) - public CaretSticky GetCaretSticky() - { - return (CaretSticky)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETSTICKY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Stop the caret preferred x position changing when the user types. (Scintilla feature 2458) - public void SetCaretSticky(CaretSticky useCaretStickyBehaviour) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETSTICKY, (IntPtr) useCaretStickyBehaviour, (IntPtr) Unused); - } - - /// Switch between sticky and non-sticky: meant to be bound to a key. (Scintilla feature 2459) - public void ToggleCaretSticky() - { - Win32.SendMessage(scintilla, SciMsg.SCI_TOGGLECARETSTICKY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Enable/Disable convert-on-paste for line endings (Scintilla feature 2467) - public void SetPasteConvertEndings(bool convert) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETPASTECONVERTENDINGS, new IntPtr(convert ? 1 : 0), (IntPtr) Unused); - } - - /// Get convert-on-paste setting (Scintilla feature 2468) - public bool GetPasteConvertEndings() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPASTECONVERTENDINGS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Duplicate the selection. If selection empty duplicate the line containing the caret. (Scintilla feature 2469) - public void SelectionDuplicate() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SELECTIONDUPLICATE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set background alpha of the caret line. (Scintilla feature 2470) - public void SetCaretLineBackAlpha(Alpha alpha) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEBACKALPHA, (IntPtr) alpha, (IntPtr) Unused); - } - - /// Get the background alpha of the caret line. (Scintilla feature 2471) - public Alpha GetCaretLineBackAlpha() - { - return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEBACKALPHA, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the style of the caret to be drawn. (Scintilla feature 2512) - public void SetCaretStyle(CaretStyle caretStyle) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETSTYLE, (IntPtr) caretStyle, (IntPtr) Unused); - } - - /// Returns the current style of the caret. (Scintilla feature 2513) - public CaretStyle GetCaretStyle() - { - return (CaretStyle)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETSTYLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the indicator used for IndicatorFillRange and IndicatorClearRange (Scintilla feature 2500) - public void SetIndicatorCurrent(int indicator) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETINDICATORCURRENT, (IntPtr) indicator, (IntPtr) Unused); - } - - /// Get the current indicator (Scintilla feature 2501) - public int GetIndicatorCurrent() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETINDICATORCURRENT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the value used for IndicatorFillRange (Scintilla feature 2502) - public void SetIndicatorValue(int value) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETINDICATORVALUE, (IntPtr) value, (IntPtr) Unused); - } - - /// Get the current indicator value (Scintilla feature 2503) - public int GetIndicatorValue() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETINDICATORVALUE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Turn a indicator on over a range. (Scintilla feature 2504) - public void IndicatorFillRange(int start, int lengthFill) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORFILLRANGE, (IntPtr) start, (IntPtr) lengthFill); - } - - /// Turn a indicator off over a range. (Scintilla feature 2505) - public void IndicatorClearRange(int start, int lengthClear) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORCLEARRANGE, (IntPtr) start, (IntPtr) lengthClear); - } - - /// Are any indicators present at pos? (Scintilla feature 2506) - public int IndicatorAllOnFor(int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORALLONFOR, (IntPtr) pos, (IntPtr) Unused); - } - - /// What value does a particular indicator have at a position? (Scintilla feature 2507) - public int IndicatorValueAt(int indicator, int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORVALUEAT, (IntPtr) indicator, (IntPtr) pos); - } - - /// Where does a particular indicator start? (Scintilla feature 2508) - public int IndicatorStart(int indicator, int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORSTART, (IntPtr) indicator, (IntPtr) pos); - } - - /// Where does a particular indicator end? (Scintilla feature 2509) - public int IndicatorEnd(int indicator, int pos) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICATOREND, (IntPtr) indicator, (IntPtr) pos); - } - - /// Set number of entries in position cache (Scintilla feature 2514) - public void SetPositionCache(int size) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETPOSITIONCACHE, (IntPtr) size, (IntPtr) Unused); - } - - /// How many entries are allocated to the position cache? (Scintilla feature 2515) - public int GetPositionCache() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPOSITIONCACHE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Copy the selection, if selection empty copy the line with the caret (Scintilla feature 2519) - public void CopyAllowLine() - { - Win32.SendMessage(scintilla, SciMsg.SCI_COPYALLOWLINE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Compact the document buffer and return a read-only pointer to the - /// characters in the document. - /// (Scintilla feature 2520) - /// - public IntPtr GetCharacterPointer() - { - return Win32.SendMessage(scintilla, SciMsg.SCI_GETCHARACTERPOINTER, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Return a read-only pointer to a range of characters in the document. - /// May move the gap so that the range is contiguous, but will only move up - /// to lengthRange bytes. - /// (Scintilla feature 2643) - /// - public IntPtr GetRangePointer(int start, int lengthRange) - { - return Win32.SendMessage(scintilla, SciMsg.SCI_GETRANGEPOINTER, (IntPtr) start, (IntPtr) lengthRange); - } - - /// - /// Return a position which, to avoid performance costs, should not be within - /// the range of a call to GetRangePointer. - /// (Scintilla feature 2644) - /// - public int GetGapPosition() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETGAPPOSITION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the alpha fill colour of the given indicator. (Scintilla feature 2523) - public void IndicSetAlpha(int indicator, Alpha alpha) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETALPHA, (IntPtr) indicator, (IntPtr) alpha); - } - - /// Get the alpha fill colour of the given indicator. (Scintilla feature 2524) - public Alpha IndicGetAlpha(int indicator) - { - return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETALPHA, (IntPtr) indicator, (IntPtr) Unused); - } - - /// Set the alpha outline colour of the given indicator. (Scintilla feature 2558) - public void IndicSetOutlineAlpha(int indicator, Alpha alpha) - { - Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETOUTLINEALPHA, (IntPtr) indicator, (IntPtr) alpha); - } - - /// Get the alpha outline colour of the given indicator. (Scintilla feature 2559) - public Alpha IndicGetOutlineAlpha(int indicator) - { - return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETOUTLINEALPHA, (IntPtr) indicator, (IntPtr) Unused); - } - - /// Set extra ascent for each line (Scintilla feature 2525) - public void SetExtraAscent(int extraAscent) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETEXTRAASCENT, (IntPtr) extraAscent, (IntPtr) Unused); - } - - /// Get extra ascent for each line (Scintilla feature 2526) - public int GetExtraAscent() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETEXTRAASCENT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set extra descent for each line (Scintilla feature 2527) - public void SetExtraDescent(int extraDescent) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETEXTRADESCENT, (IntPtr) extraDescent, (IntPtr) Unused); - } - - /// Get extra descent for each line (Scintilla feature 2528) - public int GetExtraDescent() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETEXTRADESCENT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Which symbol was defined for markerNumber with MarkerDefine (Scintilla feature 2529) - public int MarkerSymbolDefined(int markerNumber) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSYMBOLDEFINED, (IntPtr) markerNumber, (IntPtr) Unused); - } - - /// Set the text in the text margin for a line (Scintilla feature 2530) - public unsafe void MarginSetText(int line, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETTEXT, (IntPtr) line, (IntPtr) textPtr); - } - } - - /// Get the text in the text margin for a line (Scintilla feature 2531) - public unsafe string MarginGetText(int line) - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETTEXT, (IntPtr) line, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// Set the style number for the text margin for a line (Scintilla feature 2532) - public void MarginSetStyle(int line, int style) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLE, (IntPtr) line, (IntPtr) style); - } - - /// Get the style number for the text margin for a line (Scintilla feature 2533) - public int MarginGetStyle(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLE, (IntPtr) line, (IntPtr) Unused); - } - - /// Set the style in the text margin for a line (Scintilla feature 2534) - public unsafe void MarginSetStyles(int line, string styles) - { - fixed (byte* stylesPtr = Encoding.UTF8.GetBytes(styles)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLES, (IntPtr) line, (IntPtr) stylesPtr); - } - } - - /// Get the styles in the text margin for a line (Scintilla feature 2535) - public unsafe string MarginGetStyles(int line) - { - byte[] stylesBuffer = new byte[10000]; - fixed (byte* stylesPtr = stylesBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLES, (IntPtr) line, (IntPtr) stylesPtr); - return Encoding.UTF8.GetString(stylesBuffer).TrimEnd('\0'); - } - } - - /// Clear the margin text on all lines (Scintilla feature 2536) - public void MarginTextClearAll() - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARGINTEXTCLEARALL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get the start of the range of style numbers used for margin text (Scintilla feature 2537) - public void MarginSetStyleOffset(int style) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLEOFFSET, (IntPtr) style, (IntPtr) Unused); - } - - /// Get the start of the range of style numbers used for margin text (Scintilla feature 2538) - public int MarginGetStyleOffset() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLEOFFSET, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the margin options. (Scintilla feature 2539) - public void SetMarginOptions(MarginOption marginOptions) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINOPTIONS, (IntPtr) marginOptions, (IntPtr) Unused); - } - - /// Get the margin options. (Scintilla feature 2557) - public MarginOption GetMarginOptions() - { - return (MarginOption)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINOPTIONS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the annotation text for a line (Scintilla feature 2540) - public unsafe void AnnotationSetText(int line, string text) - { - fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETTEXT, (IntPtr) line, (IntPtr) textPtr); - } - } - - /// Get the annotation text for a line (Scintilla feature 2541) - public unsafe string AnnotationGetText(int line) - { - byte[] textBuffer = new byte[10000]; - fixed (byte* textPtr = textBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETTEXT, (IntPtr) line, (IntPtr) textPtr); - return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); - } - } - - /// Set the style number for the annotations for a line (Scintilla feature 2542) - public void AnnotationSetStyle(int line, int style) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLE, (IntPtr) line, (IntPtr) style); - } - - /// Get the style number for the annotations for a line (Scintilla feature 2543) - public int AnnotationGetStyle(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLE, (IntPtr) line, (IntPtr) Unused); - } - - /// Set the annotation styles for a line (Scintilla feature 2544) - public unsafe void AnnotationSetStyles(int line, string styles) - { - fixed (byte* stylesPtr = Encoding.UTF8.GetBytes(styles)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLES, (IntPtr) line, (IntPtr) stylesPtr); - } - } - - /// Get the annotation styles for a line (Scintilla feature 2545) - public unsafe string AnnotationGetStyles(int line) - { - byte[] stylesBuffer = new byte[10000]; - fixed (byte* stylesPtr = stylesBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLES, (IntPtr) line, (IntPtr) stylesPtr); - return Encoding.UTF8.GetString(stylesBuffer).TrimEnd('\0'); - } - } - - /// Get the number of annotation lines for a line (Scintilla feature 2546) - public int AnnotationGetLines(int line) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETLINES, (IntPtr) line, (IntPtr) Unused); - } - - /// Clear the annotations from all lines (Scintilla feature 2547) - public void AnnotationClearAll() - { - Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONCLEARALL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the visibility for the annotations for a view (Scintilla feature 2548) - public void AnnotationSetVisible(AnnotationVisible visible) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETVISIBLE, (IntPtr) visible, (IntPtr) Unused); - } - - /// Get the visibility for the annotations for a view (Scintilla feature 2549) - public AnnotationVisible AnnotationGetVisible() - { - return (AnnotationVisible)Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETVISIBLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get the start of the range of style numbers used for annotations (Scintilla feature 2550) - public void AnnotationSetStyleOffset(int style) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLEOFFSET, (IntPtr) style, (IntPtr) Unused); - } - - /// Get the start of the range of style numbers used for annotations (Scintilla feature 2551) - public int AnnotationGetStyleOffset() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLEOFFSET, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Release all extended (>255) style numbers (Scintilla feature 2552) - public void ReleaseAllExtendedStyles() - { - Win32.SendMessage(scintilla, SciMsg.SCI_RELEASEALLEXTENDEDSTYLES, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Allocate some extended (>255) style numbers and return the start of the range (Scintilla feature 2553) - public int AllocateExtendedStyles(int numberStyles) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATEEXTENDEDSTYLES, (IntPtr) numberStyles, (IntPtr) Unused); - } - - /// Add a container action to the undo stack (Scintilla feature 2560) - public void AddUndoAction(int token, UndoFlags flags) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ADDUNDOACTION, (IntPtr) token, (IntPtr) flags); - } - - /// Find the position of a character from a point within the window. (Scintilla feature 2561) - public int CharPositionFromPoint(int x, int y) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CHARPOSITIONFROMPOINT, (IntPtr) x, (IntPtr) y); - } - - /// - /// Find the position of a character from a point within the window. - /// Return INVALID_POSITION if not close to text. - /// (Scintilla feature 2562) - /// - public int CharPositionFromPointClose(int x, int y) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CHARPOSITIONFROMPOINTCLOSE, (IntPtr) x, (IntPtr) y); - } - - /// Set whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2668) - public void SetMouseSelectionRectangularSwitch(bool mouseSelectionRectangularSwitch) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSESELECTIONRECTANGULARSWITCH, new IntPtr(mouseSelectionRectangularSwitch ? 1 : 0), (IntPtr) Unused); - } - - /// Whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2669) - public bool GetMouseSelectionRectangularSwitch() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSESELECTIONRECTANGULARSWITCH, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set whether multiple selections can be made (Scintilla feature 2563) - public void SetMultipleSelection(bool multipleSelection) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMULTIPLESELECTION, new IntPtr(multipleSelection ? 1 : 0), (IntPtr) Unused); - } - - /// Whether multiple selections can be made (Scintilla feature 2564) - public bool GetMultipleSelection() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMULTIPLESELECTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set whether typing can be performed into multiple selections (Scintilla feature 2565) - public void SetAdditionalSelectionTyping(bool additionalSelectionTyping) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELECTIONTYPING, new IntPtr(additionalSelectionTyping ? 1 : 0), (IntPtr) Unused); - } - - /// Whether typing can be performed into multiple selections (Scintilla feature 2566) - public bool GetAdditionalSelectionTyping() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALSELECTIONTYPING, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set whether additional carets will blink (Scintilla feature 2567) - public void SetAdditionalCaretsBlink(bool additionalCaretsBlink) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETSBLINK, new IntPtr(additionalCaretsBlink ? 1 : 0), (IntPtr) Unused); - } - - /// Whether additional carets will blink (Scintilla feature 2568) - public bool GetAdditionalCaretsBlink() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETSBLINK, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set whether additional carets are visible (Scintilla feature 2608) - public void SetAdditionalCaretsVisible(bool additionalCaretsVisible) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETSVISIBLE, new IntPtr(additionalCaretsVisible ? 1 : 0), (IntPtr) Unused); - } - - /// Whether additional carets are visible (Scintilla feature 2609) - public bool GetAdditionalCaretsVisible() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETSVISIBLE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// How many selections are there? (Scintilla feature 2570) - public int GetSelections() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Is every selected range empty? (Scintilla feature 2650) - public bool GetSelectionEmpty() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONEMPTY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Clear selections to a single empty stream selection (Scintilla feature 2571) - public void ClearSelections() - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEARSELECTIONS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set a simple selection (Scintilla feature 2572) - public void SetSelection(int caret, int anchor) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTION, (IntPtr) caret, (IntPtr) anchor); - } - - /// Add a selection (Scintilla feature 2573) - public void AddSelection(int caret, int anchor) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ADDSELECTION, (IntPtr) caret, (IntPtr) anchor); - } - - /// Drop one selection (Scintilla feature 2671) - public void DropSelectionN(int selection) - { - Win32.SendMessage(scintilla, SciMsg.SCI_DROPSELECTIONN, (IntPtr) selection, (IntPtr) Unused); - } - - /// Set the main selection (Scintilla feature 2574) - public void SetMainSelection(int selection) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETMAINSELECTION, (IntPtr) selection, (IntPtr) Unused); - } - - /// Which selection is the main selection (Scintilla feature 2575) - public int GetMainSelection() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMAINSELECTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the caret position of the nth selection. (Scintilla feature 2576) - public void SetSelectionNCaret(int selection, int caret) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNCARET, (IntPtr) selection, (IntPtr) caret); - } - - /// Return the caret position of the nth selection. (Scintilla feature 2577) - public int GetSelectionNCaret(int selection) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNCARET, (IntPtr) selection, (IntPtr) Unused); - } - - /// Set the anchor position of the nth selection. (Scintilla feature 2578) - public void SetSelectionNAnchor(int selection, int anchor) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNANCHOR, (IntPtr) selection, (IntPtr) anchor); - } - - /// Return the anchor position of the nth selection. (Scintilla feature 2579) - public int GetSelectionNAnchor(int selection) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNANCHOR, (IntPtr) selection, (IntPtr) Unused); - } - - /// Set the virtual space of the caret of the nth selection. (Scintilla feature 2580) - public void SetSelectionNCaretVirtualSpace(int selection, int space) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNCARETVIRTUALSPACE, (IntPtr) selection, (IntPtr) space); - } - - /// Return the virtual space of the caret of the nth selection. (Scintilla feature 2581) - public int GetSelectionNCaretVirtualSpace(int selection) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNCARETVIRTUALSPACE, (IntPtr) selection, (IntPtr) Unused); - } - - /// Set the virtual space of the anchor of the nth selection. (Scintilla feature 2582) - public void SetSelectionNAnchorVirtualSpace(int selection, int space) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNANCHORVIRTUALSPACE, (IntPtr) selection, (IntPtr) space); - } - - /// Return the virtual space of the anchor of the nth selection. (Scintilla feature 2583) - public int GetSelectionNAnchorVirtualSpace(int selection) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNANCHORVIRTUALSPACE, (IntPtr) selection, (IntPtr) Unused); - } - - /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2584) - public void SetSelectionNStart(int selection, int anchor) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNSTART, (IntPtr) selection, (IntPtr) anchor); - } - - /// Returns the position at the start of the selection. (Scintilla feature 2585) - public int GetSelectionNStart(int selection) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNSTART, (IntPtr) selection, (IntPtr) Unused); - } - - /// Sets the position that ends the selection - this becomes the currentPosition. (Scintilla feature 2586) - public void SetSelectionNEnd(int selection, int caret) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNEND, (IntPtr) selection, (IntPtr) caret); - } - - /// Returns the position at the end of the selection. (Scintilla feature 2587) - public int GetSelectionNEnd(int selection) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNEND, (IntPtr) selection, (IntPtr) Unused); - } - - /// Set the caret position of the rectangular selection. (Scintilla feature 2588) - public void SetRectangularSelectionCaret(int caret) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONCARET, (IntPtr) caret, (IntPtr) Unused); - } - - /// Return the caret position of the rectangular selection. (Scintilla feature 2589) - public int GetRectangularSelectionCaret() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONCARET, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the anchor position of the rectangular selection. (Scintilla feature 2590) - public void SetRectangularSelectionAnchor(int anchor) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONANCHOR, (IntPtr) anchor, (IntPtr) Unused); - } - - /// Return the anchor position of the rectangular selection. (Scintilla feature 2591) - public int GetRectangularSelectionAnchor() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONANCHOR, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the virtual space of the caret of the rectangular selection. (Scintilla feature 2592) - public void SetRectangularSelectionCaretVirtualSpace(int space) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (IntPtr) space, (IntPtr) Unused); - } - - /// Return the virtual space of the caret of the rectangular selection. (Scintilla feature 2593) - public int GetRectangularSelectionCaretVirtualSpace() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the virtual space of the anchor of the rectangular selection. (Scintilla feature 2594) - public void SetRectangularSelectionAnchorVirtualSpace(int space) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (IntPtr) space, (IntPtr) Unused); - } - - /// Return the virtual space of the anchor of the rectangular selection. (Scintilla feature 2595) - public int GetRectangularSelectionAnchorVirtualSpace() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set options for virtual space behaviour. (Scintilla feature 2596) - public void SetVirtualSpaceOptions(VirtualSpace virtualSpaceOptions) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETVIRTUALSPACEOPTIONS, (IntPtr) virtualSpaceOptions, (IntPtr) Unused); - } - - /// Return options for virtual space behaviour. (Scintilla feature 2597) - public VirtualSpace GetVirtualSpaceOptions() - { - return (VirtualSpace)Win32.SendMessage(scintilla, SciMsg.SCI_GETVIRTUALSPACEOPTIONS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// On GTK, allow selecting the modifier key to use for mouse-based - /// rectangular selection. Often the window manager requires Alt+Mouse Drag - /// for moving windows. - /// Valid values are SCMOD_CTRL(default), SCMOD_ALT, or SCMOD_SUPER. - /// (Scintilla feature 2598) - /// - public void SetRectangularSelectionModifier(int modifier) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONMODIFIER, (IntPtr) modifier, (IntPtr) Unused); - } - - /// Get the modifier key used for rectangular selection. (Scintilla feature 2599) - public int GetRectangularSelectionModifier() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONMODIFIER, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Set the foreground colour of additional selections. - /// Must have previously called SetSelFore with non-zero first argument for this to have an effect. - /// (Scintilla feature 2600) - /// - public void SetAdditionalSelFore(Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELFORE, fore.Value, (IntPtr) Unused); - } - - /// - /// Set the background colour of additional selections. - /// Must have previously called SetSelBack with non-zero first argument for this to have an effect. - /// (Scintilla feature 2601) - /// - public void SetAdditionalSelBack(Colour back) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELBACK, back.Value, (IntPtr) Unused); - } - - /// Set the alpha of the selection. (Scintilla feature 2602) - public void SetAdditionalSelAlpha(Alpha alpha) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELALPHA, (IntPtr) alpha, (IntPtr) Unused); - } - - /// Get the alpha of the selection. (Scintilla feature 2603) - public Alpha GetAdditionalSelAlpha() - { - return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALSELALPHA, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the foreground colour of additional carets. (Scintilla feature 2604) - public void SetAdditionalCaretFore(Colour fore) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETFORE, fore.Value, (IntPtr) Unused); - } - - /// Get the foreground colour of additional carets. (Scintilla feature 2605) - public Colour GetAdditionalCaretFore() - { - return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETFORE, (IntPtr) Unused, (IntPtr) Unused)); - } - - /// Set the main selection to the next selection. (Scintilla feature 2606) - public void RotateSelection() - { - Win32.SendMessage(scintilla, SciMsg.SCI_ROTATESELECTION, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Swap that caret and anchor of the main selection. (Scintilla feature 2607) - public void SwapMainAnchorCaret() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SWAPMAINANCHORCARET, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Add the next occurrence of the main selection to the set of selections as main. - /// If the current selection is empty then select word around caret. - /// (Scintilla feature 2688) - /// - public void MultipleSelectAddNext() - { - Win32.SendMessage(scintilla, SciMsg.SCI_MULTIPLESELECTADDNEXT, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Add each occurrence of the main selection in the target to the set of selections. - /// If the current selection is empty then select word around caret. - /// (Scintilla feature 2689) - /// - public void MultipleSelectAddEach() - { - Win32.SendMessage(scintilla, SciMsg.SCI_MULTIPLESELECTADDEACH, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Indicate that the internal state of a lexer has changed over a range and therefore - /// there may be a need to redraw. - /// (Scintilla feature 2617) - /// - public int ChangeLexerState(int start, int end) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CHANGELEXERSTATE, (IntPtr) start, (IntPtr) end); - } - - /// - /// Find the next line at or after lineStart that is a contracted fold header line. - /// Return -1 when no more lines. - /// (Scintilla feature 2618) - /// - public int ContractedFoldNext(int lineStart) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CONTRACTEDFOLDNEXT, (IntPtr) lineStart, (IntPtr) Unused); - } - - /// Centre current line in window. (Scintilla feature 2619) - public void VerticalCentreCaret() - { - Win32.SendMessage(scintilla, SciMsg.SCI_VERTICALCENTRECARET, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move the selected lines up one line, shifting the line above after the selection (Scintilla feature 2620) - public void MoveSelectedLinesUp() - { - Win32.SendMessage(scintilla, SciMsg.SCI_MOVESELECTEDLINESUP, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Move the selected lines down one line, shifting the line below before the selection (Scintilla feature 2621) - public void MoveSelectedLinesDown() - { - Win32.SendMessage(scintilla, SciMsg.SCI_MOVESELECTEDLINESDOWN, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the identifier reported as idFrom in notification messages. (Scintilla feature 2622) - public void SetIdentifier(int identifier) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETIDENTIFIER, (IntPtr) identifier, (IntPtr) Unused); - } - - /// Get the identifier. (Scintilla feature 2623) - public int GetIdentifier() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETIDENTIFIER, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the width for future RGBA image data. (Scintilla feature 2624) - public void RGBAImageSetWidth(int width) - { - Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETWIDTH, (IntPtr) width, (IntPtr) Unused); - } - - /// Set the height for future RGBA image data. (Scintilla feature 2625) - public void RGBAImageSetHeight(int height) - { - Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETHEIGHT, (IntPtr) height, (IntPtr) Unused); - } - - /// Set the scale factor in percent for future RGBA image data. (Scintilla feature 2651) - public void RGBAImageSetScale(int scalePercent) - { - Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETSCALE, (IntPtr) scalePercent, (IntPtr) Unused); - } - - /// - /// Define a marker from RGBA data. - /// It has the width and height from RGBAImageSetWidth/Height - /// (Scintilla feature 2626) - /// - public unsafe void MarkerDefineRGBAImage(int markerNumber, string pixels) - { - fixed (byte* pixelsPtr = Encoding.UTF8.GetBytes(pixels)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINERGBAIMAGE, (IntPtr) markerNumber, (IntPtr) pixelsPtr); - } - } - - /// - /// Register an RGBA image for use in autocompletion lists. - /// It has the width and height from RGBAImageSetWidth/Height - /// (Scintilla feature 2627) - /// - public unsafe void RegisterRGBAImage(int type, string pixels) - { - fixed (byte* pixelsPtr = Encoding.UTF8.GetBytes(pixels)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_REGISTERRGBAIMAGE, (IntPtr) type, (IntPtr) pixelsPtr); - } - } - - /// Scroll to start of document. (Scintilla feature 2628) - public void ScrollToStart() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLTOSTART, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Scroll to end of document. (Scintilla feature 2629) - public void ScrollToEnd() - { - Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLTOEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the technology used. (Scintilla feature 2630) - public void SetTechnology(Technology technology) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTECHNOLOGY, (IntPtr) technology, (IntPtr) Unused); - } - - /// Get the tech. (Scintilla feature 2631) - public Technology GetTechnology() - { - return (Technology)Win32.SendMessage(scintilla, SciMsg.SCI_GETTECHNOLOGY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Create an ILoader*. (Scintilla feature 2632) - public IntPtr CreateLoader(int bytes, DocumentOption documentOptions) - { - return Win32.SendMessage(scintilla, SciMsg.SCI_CREATELOADER, (IntPtr) bytes, (IntPtr) documentOptions); - } - - /// On OS X, show a find indicator. (Scintilla feature 2640) - public void FindIndicatorShow(int start, int end) - { - Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORSHOW, (IntPtr) start, (IntPtr) end); - } - - /// On OS X, flash a find indicator, then fade out. (Scintilla feature 2641) - public void FindIndicatorFlash(int start, int end) - { - Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORFLASH, (IntPtr) start, (IntPtr) end); - } - - /// On OS X, hide the find indicator. (Scintilla feature 2642) - public void FindIndicatorHide() - { - Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORHIDE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Move caret to before first visible character on display line. - /// If already there move to first character on display line. - /// (Scintilla feature 2652) - /// - public void VCHomeDisplay() - { - Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEDISPLAY, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Like VCHomeDisplay but extending selection to new caret position. (Scintilla feature 2653) - public void VCHomeDisplayExtend() - { - Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEDISPLAYEXTEND, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Is the caret line always visible? (Scintilla feature 2654) - public bool GetCaretLineVisibleAlways() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEVISIBLEALWAYS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Sets the caret line to always visible. (Scintilla feature 2655) - public void SetCaretLineVisibleAlways(bool alwaysVisible) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEVISIBLEALWAYS, new IntPtr(alwaysVisible ? 1 : 0), (IntPtr) Unused); - } - - /// Set the line end types that the application wants to use. May not be used if incompatible with lexer or encoding. (Scintilla feature 2656) - public void SetLineEndTypesAllowed(LineEndType lineEndBitSet) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETLINEENDTYPESALLOWED, (IntPtr) lineEndBitSet, (IntPtr) Unused); - } - - /// Get the line end types currently allowed. (Scintilla feature 2657) - public LineEndType GetLineEndTypesAllowed() - { - return (LineEndType)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESALLOWED, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation. (Scintilla feature 2658) - public LineEndType GetLineEndTypesActive() - { - return (LineEndType)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESACTIVE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the way a character is drawn. (Scintilla feature 2665) - public unsafe void SetRepresentation(string encodedCharacter, string representation) - { - fixed (byte* encodedCharacterPtr = Encoding.UTF8.GetBytes(encodedCharacter)) - { - fixed (byte* representationPtr = Encoding.UTF8.GetBytes(representation)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETREPRESENTATION, (IntPtr) encodedCharacterPtr, (IntPtr) representationPtr); - } - } - } - - /// - /// Set the way a character is drawn. - /// Result is NUL-terminated. - /// (Scintilla feature 2666) - /// - public unsafe string GetRepresentation(string encodedCharacter) - { - fixed (byte* encodedCharacterPtr = Encoding.UTF8.GetBytes(encodedCharacter)) - { - byte[] representationBuffer = new byte[10000]; - fixed (byte* representationPtr = representationBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETREPRESENTATION, (IntPtr) encodedCharacterPtr, (IntPtr) representationPtr); - return Encoding.UTF8.GetString(representationBuffer).TrimEnd('\0'); - } - } - } - - /// Remove a character representation. (Scintilla feature 2667) - public unsafe void ClearRepresentation(string encodedCharacter) - { - fixed (byte* encodedCharacterPtr = Encoding.UTF8.GetBytes(encodedCharacter)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_CLEARREPRESENTATION, (IntPtr) encodedCharacterPtr, (IntPtr) Unused); - } - } - - /// Start notifying the container of all key presses and commands. (Scintilla feature 3001) - public void StartRecord() - { - Win32.SendMessage(scintilla, SciMsg.SCI_STARTRECORD, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Stop notifying the container of all key presses and commands. (Scintilla feature 3002) - public void StopRecord() - { - Win32.SendMessage(scintilla, SciMsg.SCI_STOPRECORD, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the lexing language of the document. (Scintilla feature 4001) - public void SetLexer(int lexer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETLEXER, (IntPtr) lexer, (IntPtr) Unused); - } - - /// Retrieve the lexing language of the document. (Scintilla feature 4002) - public int GetLexer() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLEXER, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Colourise a segment of the document using the current lexing language. (Scintilla feature 4003) - public void Colourise(int start, int end) - { - Win32.SendMessage(scintilla, SciMsg.SCI_COLOURISE, (IntPtr) start, (IntPtr) end); - } - - /// Set up a value that may be used by a lexer for some optional feature. (Scintilla feature 4004) - public unsafe void SetProperty(string key, string value) - { - fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) - { - fixed (byte* valuePtr = Encoding.UTF8.GetBytes(value)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETPROPERTY, (IntPtr) keyPtr, (IntPtr) valuePtr); - } - } - } - - /// Set up the key words used by the lexer. (Scintilla feature 4005) - public unsafe void SetKeyWords(int keyWordSet, string keyWords) - { - fixed (byte* keyWordsPtr = Encoding.UTF8.GetBytes(keyWords)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETKEYWORDS, (IntPtr) keyWordSet, (IntPtr) keyWordsPtr); - } - } - - /// Set the lexing language of the document based on string name. (Scintilla feature 4006) - public unsafe void SetLexerLanguage(string language) - { - fixed (byte* languagePtr = Encoding.UTF8.GetBytes(language)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETLEXERLANGUAGE, (IntPtr) Unused, (IntPtr) languagePtr); - } - } - - /// Load a lexer library (dll / so). (Scintilla feature 4007) - public unsafe void LoadLexerLibrary(string path) - { - fixed (byte* pathPtr = Encoding.UTF8.GetBytes(path)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_LOADLEXERLIBRARY, (IntPtr) Unused, (IntPtr) pathPtr); - } - } - - /// - /// Retrieve a "property" value previously set with SetProperty. - /// Result is NUL-terminated. - /// (Scintilla feature 4008) - /// - public unsafe string GetProperty(string key) - { - fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) - { - byte[] valueBuffer = new byte[10000]; - fixed (byte* valuePtr = valueBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTY, (IntPtr) keyPtr, (IntPtr) valuePtr); - return Encoding.UTF8.GetString(valueBuffer).TrimEnd('\0'); - } - } - } - - /// - /// Retrieve a "property" value previously set with SetProperty, - /// with "$()" variable replacement on returned buffer. - /// Result is NUL-terminated. - /// (Scintilla feature 4009) - /// - public unsafe string GetPropertyExpanded(string key) - { - fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) - { - byte[] valueBuffer = new byte[10000]; - fixed (byte* valuePtr = valueBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTYEXPANDED, (IntPtr) keyPtr, (IntPtr) valuePtr); - return Encoding.UTF8.GetString(valueBuffer).TrimEnd('\0'); - } - } - } - - /// - /// Retrieve a "property" value previously set with SetProperty, - /// interpreted as an int AFTER any "$()" variable replacement. - /// (Scintilla feature 4010) - /// - public unsafe int GetPropertyInt(string key, int defaultValue) - { - fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTYINT, (IntPtr) keyPtr, (IntPtr) defaultValue); - } - } - - /// - /// Retrieve the name of the lexer. - /// Return the length of the text. - /// Result is NUL-terminated. - /// (Scintilla feature 4012) - /// - public unsafe string GetLexerLanguage() - { - byte[] languageBuffer = new byte[10000]; - fixed (byte* languagePtr = languageBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETLEXERLANGUAGE, (IntPtr) Unused, (IntPtr) languagePtr); - return Encoding.UTF8.GetString(languageBuffer).TrimEnd('\0'); - } - } - - /// For private communication between an application and a known lexer. (Scintilla feature 4013) - public IntPtr PrivateLexerCall(int operation, IntPtr pointer) - { - return Win32.SendMessage(scintilla, SciMsg.SCI_PRIVATELEXERCALL, (IntPtr) operation, (IntPtr) pointer); - } - - /// - /// Retrieve a '\n' separated list of properties understood by the current lexer. - /// Result is NUL-terminated. - /// (Scintilla feature 4014) - /// - public unsafe string PropertyNames() - { - byte[] namesBuffer = new byte[10000]; - fixed (byte* namesPtr = namesBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_PROPERTYNAMES, (IntPtr) Unused, (IntPtr) namesPtr); - return Encoding.UTF8.GetString(namesBuffer).TrimEnd('\0'); - } - } - - /// Retrieve the type of a property. (Scintilla feature 4015) - public unsafe TypeProperty PropertyType(string name) - { - fixed (byte* namePtr = Encoding.UTF8.GetBytes(name)) - { - return (TypeProperty)Win32.SendMessage(scintilla, SciMsg.SCI_PROPERTYTYPE, (IntPtr) namePtr, (IntPtr) Unused); - } - } - - /// - /// Describe a property. - /// Result is NUL-terminated. - /// (Scintilla feature 4016) - /// - public unsafe string DescribeProperty(string name) - { - fixed (byte* namePtr = Encoding.UTF8.GetBytes(name)) - { - byte[] descriptionBuffer = new byte[10000]; - fixed (byte* descriptionPtr = descriptionBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_DESCRIBEPROPERTY, (IntPtr) namePtr, (IntPtr) descriptionPtr); - return Encoding.UTF8.GetString(descriptionBuffer).TrimEnd('\0'); - } - } - } - - /// - /// Retrieve a '\n' separated list of descriptions of the keyword sets understood by the current lexer. - /// Result is NUL-terminated. - /// (Scintilla feature 4017) - /// - public unsafe string DescribeKeyWordSets() - { - byte[] descriptionsBuffer = new byte[10000]; - fixed (byte* descriptionsPtr = descriptionsBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_DESCRIBEKEYWORDSETS, (IntPtr) Unused, (IntPtr) descriptionsPtr); - return Encoding.UTF8.GetString(descriptionsBuffer).TrimEnd('\0'); - } - } - - /// - /// Bit set of LineEndType enumertion for which line ends beyond the standard - /// LF, CR, and CRLF are supported by the lexer. - /// (Scintilla feature 4018) - /// - public int GetLineEndTypesSupported() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESSUPPORTED, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Allocate a set of sub styles for a particular base style, returning start of range (Scintilla feature 4020) - public int AllocateSubStyles(int styleBase, int numberStyles) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATESUBSTYLES, (IntPtr) styleBase, (IntPtr) numberStyles); - } - - /// The starting style number for the sub styles associated with a base style (Scintilla feature 4021) - public int GetSubStylesStart(int styleBase) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLESSTART, (IntPtr) styleBase, (IntPtr) Unused); - } - - /// The number of sub styles associated with a base style (Scintilla feature 4022) - public int GetSubStylesLength(int styleBase) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLESLENGTH, (IntPtr) styleBase, (IntPtr) Unused); - } - - /// For a sub style, return the base style, else return the argument. (Scintilla feature 4027) - public int GetStyleFromSubStyle(int subStyle) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEFROMSUBSTYLE, (IntPtr) subStyle, (IntPtr) Unused); - } - - /// For a secondary style, return the primary style, else return the argument. (Scintilla feature 4028) - public int GetPrimaryStyleFromStyle(int style) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPRIMARYSTYLEFROMSTYLE, (IntPtr) style, (IntPtr) Unused); - } - - /// Free allocated sub styles (Scintilla feature 4023) - public void FreeSubStyles() - { - Win32.SendMessage(scintilla, SciMsg.SCI_FREESUBSTYLES, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set the identifiers that are shown in a particular style (Scintilla feature 4024) - public unsafe void SetIdentifiers(int style, string identifiers) - { - fixed (byte* identifiersPtr = Encoding.UTF8.GetBytes(identifiers)) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETIDENTIFIERS, (IntPtr) style, (IntPtr) identifiersPtr); - } - } - - /// - /// Where styles are duplicated by a feature such as active/inactive code - /// return the distance between the two types. - /// (Scintilla feature 4025) - /// - public int DistanceToSecondaryStyles() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_DISTANCETOSECONDARYSTYLES, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Get the set of base styles that can be extended with sub styles - /// Result is NUL-terminated. - /// (Scintilla feature 4026) - /// - public unsafe string GetSubStyleBases() - { - byte[] stylesBuffer = new byte[10000]; - fixed (byte* stylesPtr = stylesBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLEBASES, (IntPtr) Unused, (IntPtr) stylesPtr); - return Encoding.UTF8.GetString(stylesBuffer).TrimEnd('\0'); - } - } - - /// Retrieve the number of named styles for the lexer. (Scintilla feature 4029) - public int GetNamedStyles() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETNAMEDSTYLES, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Retrieve the name of a style. - /// Result is NUL-terminated. - /// (Scintilla feature 4030) - /// - public unsafe string NameOfStyle(int style) - { - byte[] nameBuffer = new byte[10000]; - fixed (byte* namePtr = nameBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_NAMEOFSTYLE, (IntPtr) style, (IntPtr) namePtr); - return Encoding.UTF8.GetString(nameBuffer).TrimEnd('\0'); - } - } - - /// - /// Retrieve a ' ' separated list of style tags like "literal quoted string". - /// Result is NUL-terminated. - /// (Scintilla feature 4031) - /// - public unsafe string TagsOfStyle(int style) - { - byte[] tagsBuffer = new byte[10000]; - fixed (byte* tagsPtr = tagsBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_TAGSOFSTYLE, (IntPtr) style, (IntPtr) tagsPtr); - return Encoding.UTF8.GetString(tagsBuffer).TrimEnd('\0'); - } - } - - /// - /// Retrieve a description of a style. - /// Result is NUL-terminated. - /// (Scintilla feature 4032) - /// - public unsafe string DescriptionOfStyle(int style) - { - byte[] descriptionBuffer = new byte[10000]; - fixed (byte* descriptionPtr = descriptionBuffer) - { - Win32.SendMessage(scintilla, SciMsg.SCI_DESCRIPTIONOFSTYLE, (IntPtr) style, (IntPtr) descriptionPtr); - return Encoding.UTF8.GetString(descriptionBuffer).TrimEnd('\0'); - } - } - - /// Retrieve bidirectional text display state. (Scintilla feature 2708) - public Bidirectional GetBidirectional() - { - return (Bidirectional)Win32.SendMessage(scintilla, SciMsg.SCI_GETBIDIRECTIONAL, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Set bidirectional text display state. (Scintilla feature 2709) - public void SetBidirectional(Bidirectional bidirectional) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETBIDIRECTIONAL, (IntPtr) bidirectional, (IntPtr) Unused); - } - - /// Retrieve line character index state. (Scintilla feature 2710) - public LineCharacterIndexType GetLineCharacterIndex() - { - return (LineCharacterIndexType)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINECHARACTERINDEX, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Request line character index be created or its use count increased. (Scintilla feature 2711) - public void AllocateLineCharacterIndex(LineCharacterIndexType lineCharacterIndex) - { - Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATELINECHARACTERINDEX, (IntPtr) lineCharacterIndex, (IntPtr) Unused); - } - - /// Decrease use count of line character index and remove if 0. (Scintilla feature 2712) - public void ReleaseLineCharacterIndex(LineCharacterIndexType lineCharacterIndex) - { - Win32.SendMessage(scintilla, SciMsg.SCI_RELEASELINECHARACTERINDEX, (IntPtr) lineCharacterIndex, (IntPtr) Unused); - } - - /// Retrieve the document line containing a position measured in index units. (Scintilla feature 2713) - public int LineFromIndexPosition(int pos, LineCharacterIndexType lineCharacterIndex) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_LINEFROMINDEXPOSITION, (IntPtr) pos, (IntPtr) lineCharacterIndex); - } - - /// Retrieve the position measured in index units at the start of a document line. (Scintilla feature 2714) - public int IndexPositionFromLine(int line, LineCharacterIndexType lineCharacterIndex) - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDEXPOSITIONFROMLINE, (IntPtr) line, (IntPtr) lineCharacterIndex); - } - - /// - /// Divide each styling byte into lexical class bits (default: 5) and indicator - /// bits (default: 3). If a lexer requires more than 32 lexical states, then this - /// is used to expand the possible states. - /// (Scintilla feature 2090) - /// - public void SetStyleBits(int bits) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLEBITS, (IntPtr) bits, (IntPtr) Unused); - } - - /// Retrieve number of bits in style bytes used to hold the lexical state. (Scintilla feature 2091) - public int GetStyleBits() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEBITS, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Retrieve the number of bits the current lexer needs for styling. (Scintilla feature 4011) - public int GetStyleBitsNeeded() - { - return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEBITSNEEDED, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// Deprecated in 3.5.5 - /// Always interpret keyboard input as Unicode - /// (Scintilla feature 2521) - /// - public void SetKeysUnicode(bool keysUnicode) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETKEYSUNICODE, new IntPtr(keysUnicode ? 1 : 0), (IntPtr) Unused); - } - - /// Are keys always interpreted as Unicode? (Scintilla feature 2522) - public bool GetKeysUnicode() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETKEYSUNICODE, (IntPtr) Unused, (IntPtr) Unused); - } - - /// Is drawing done in two phases with backgrounds drawn before foregrounds? (Scintilla feature 2283) - public bool GetTwoPhaseDraw() - { - return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTWOPHASEDRAW, (IntPtr) Unused, (IntPtr) Unused); - } - - /// - /// In twoPhaseDraw mode, drawing is performed in two phases, first the background - /// and then the foreground. This avoids chopping off characters that overlap the next run. - /// (Scintilla feature 2284) - /// - public void SetTwoPhaseDraw(bool twoPhase) - { - Win32.SendMessage(scintilla, SciMsg.SCI_SETTWOPHASEDRAW, new IntPtr(twoPhase ? 1 : 0), (IntPtr) Unused); - } - - /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; +using System.Runtime.InteropServices; +using System.Text; +using static Kbg.NppPluginNET.PluginInfrastructure.Win32; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + /// + /// This it the plugin-writers primary interface to Notepad++/Scintilla. + /// It takes away all the complexity with command numbers and Int-pointer casting. + /// + /// See http://www.scintilla.org/ScintillaDoc.html for further details. + /// + public class ScintillaGateway : IScintillaGateway + { + private const int Unused = 0; + + private readonly IntPtr scintilla; + + public static readonly int LengthZeroTerminator = "\0".Length; + + + public ScintillaGateway(IntPtr scintilla) + { + this.scintilla = scintilla; + } + + public int GetSelectionLength() + { + var selectionLength = (int) Win32.SendMessage(scintilla, SciMsg.SCI_GETSELTEXT, Unused, Unused) - LengthZeroTerminator; + return selectionLength; + } + + public void AppendTextAndMoveCursor(string text) + { + AppendText(text.Length, text); + GotoPos(GetCurrentPos() + text.Length); + } + + public void InsertTextAndMoveCursor(string text) + { + var currentPos = GetCurrentPos(); + InsertText(currentPos, text); + GotoPos(currentPos + text.Length); + } + + public void SelectCurrentLine() + { + int line = GetCurrentLineNumber(); + SetSelection(PositionFromLine(line), PositionFromLine(line + 1)); + } + + /// + /// clears the selection without changing the position of the cursor + /// + public void ClearSelectionToCursor() + { + var pos = GetCurrentPos(); + SetSelection(pos, pos); + } + + /// + /// Get the current line from the current position + /// + public int GetCurrentLineNumber() + { + return LineFromPosition(GetCurrentPos()); + } + + /// + /// Get the scroll information for the current Scintilla window. + /// + /// Arguments for the scroll information such as tracking + /// Which scroll bar information are you looking for + /// A ScrollInfo struct with information of the current scroll state + public ScrollInfo GetScrollInfo(ScrollInfoMask mask = ScrollInfoMask.SIF_ALL, ScrollInfoBar scrollBar = ScrollInfoBar.SB_BOTH) + { + ScrollInfo scrollInfo = new ScrollInfo(); + scrollInfo.cbSize = (uint)Marshal.SizeOf(scrollInfo); + scrollInfo.fMask = (uint)mask; + Win32.GetScrollInfo(scintilla, (int)scrollBar, ref scrollInfo); + return scrollInfo; + } + + /* ++Autogenerated -- start of section automatically generated from Scintilla.iface */ + /// Add text to the document at current position. (Scintilla feature 2001) + public unsafe void AddText(int length, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ADDTEXT, (IntPtr) length, (IntPtr) textPtr); + } + } + + /// Add array of cells to document. (Scintilla feature 2002) + public unsafe void AddStyledText(int length, Cells c) + { + fixed (char* cPtr = c.Value) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ADDSTYLEDTEXT, (IntPtr) length, (IntPtr) cPtr); + } + } + + /// Insert string at a position. (Scintilla feature 2003) + public unsafe void InsertText(int pos, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INSERTTEXT, (IntPtr) pos, (IntPtr) textPtr); + } + } + + /// Change the text that is being inserted in response to SC_MOD_INSERTCHECK (Scintilla feature 2672) + public unsafe void ChangeInsertion(int length, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CHANGEINSERTION, (IntPtr) length, (IntPtr) textPtr); + } + } + + /// Delete all text in the document. (Scintilla feature 2004) + public void ClearAll() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEARALL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Delete a range of text in the document. (Scintilla feature 2645) + public void DeleteRange(int start, int lengthDelete) + { + Win32.SendMessage(scintilla, SciMsg.SCI_DELETERANGE, (IntPtr) start, (IntPtr) lengthDelete); + } + + /// Set all style bytes to 0, remove all folding information. (Scintilla feature 2005) + public void ClearDocumentStyle() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEARDOCUMENTSTYLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Returns the number of bytes in the document. (Scintilla feature 2006) + public int GetLength() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLENGTH, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Returns the character byte at the position. (Scintilla feature 2007) + public int GetCharAt(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCHARAT, (IntPtr) pos, (IntPtr) Unused); + } + + /// Returns the position of the caret. (Scintilla feature 2008) + public int GetCurrentPos() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCURRENTPOS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Returns the position of the opposite end of the selection to the caret. (Scintilla feature 2009) + public int GetAnchor() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETANCHOR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Returns the style byte at the position. (Scintilla feature 2010) + public int GetStyleAt(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEAT, (IntPtr) pos, (IntPtr) Unused); + } + + /// Redoes the next action on the undo history. (Scintilla feature 2011) + public void Redo() + { + Win32.SendMessage(scintilla, SciMsg.SCI_REDO, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Choose between collecting actions into the undo + /// history and discarding them. + /// (Scintilla feature 2012) + /// + public void SetUndoCollection(bool collectUndo) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETUNDOCOLLECTION, new IntPtr(collectUndo ? 1 : 0), (IntPtr) Unused); + } + + /// Select all the text in the document. (Scintilla feature 2013) + public void SelectAll() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SELECTALL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Remember the current position in the undo history as the position + /// at which the document was saved. + /// (Scintilla feature 2014) + /// + public void SetSavePoint() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSAVEPOINT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Retrieve a buffer of cells. + /// Returns the number of bytes in the buffer not including terminating NULs. + /// (Scintilla feature 2015) + /// + public int GetStyledText(TextRange tr) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEDTEXT, (IntPtr) Unused, tr.NativePointer); + } + + /// Are there any redoable actions in the undo history? (Scintilla feature 2016) + public bool CanRedo() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_CANREDO, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Retrieve the line number at which a particular marker is located. (Scintilla feature 2017) + public int MarkerLineFromHandle(int markerHandle) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERLINEFROMHANDLE, (IntPtr) markerHandle, (IntPtr) Unused); + } + + /// Delete a marker. (Scintilla feature 2018) + public void MarkerDeleteHandle(int markerHandle) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETEHANDLE, (IntPtr) markerHandle, (IntPtr) Unused); + } + + /// Is undo history being collected? (Scintilla feature 2019) + public bool GetUndoCollection() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETUNDOCOLLECTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Are white space characters currently visible? + /// Returns one of SCWS_* constants. + /// (Scintilla feature 2020) + /// + public WhiteSpace GetViewWS() + { + return (WhiteSpace)Win32.SendMessage(scintilla, SciMsg.SCI_GETVIEWWS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Make white space characters invisible, always visible or visible outside indentation. (Scintilla feature 2021) + public void SetViewWS(WhiteSpace viewWS) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETVIEWWS, (IntPtr) viewWS, (IntPtr) Unused); + } + + /// + /// Retrieve the current tab draw mode. + /// Returns one of SCTD_* constants. + /// (Scintilla feature 2698) + /// + public TabDrawMode GetTabDrawMode() + { + return (TabDrawMode)Win32.SendMessage(scintilla, SciMsg.SCI_GETTABDRAWMODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set how tabs are drawn when visible. (Scintilla feature 2699) + public void SetTabDrawMode(TabDrawMode tabDrawMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTABDRAWMODE, (IntPtr) tabDrawMode, (IntPtr) Unused); + } + + /// Find the position from a point within the window. (Scintilla feature 2022) + public int PositionFromPoint(int x, int y) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMPOINT, (IntPtr) x, (IntPtr) y); + } + + /// + /// Find the position from a point within the window but return + /// INVALID_POSITION if not close to text. + /// (Scintilla feature 2023) + /// + public int PositionFromPointClose(int x, int y) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMPOINTCLOSE, (IntPtr) x, (IntPtr) y); + } + + /// Set caret to start of a line and ensure it is visible. (Scintilla feature 2024) + public void GotoLine(int line) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GOTOLINE, (IntPtr) line, (IntPtr) Unused); + } + + /// Set caret to a position and ensure it is visible. (Scintilla feature 2025) + public void GotoPos(int caret) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GOTOPOS, (IntPtr) caret, (IntPtr) Unused); + } + + /// + /// Set the selection anchor to a position. The anchor is the opposite + /// end of the selection from the caret. + /// (Scintilla feature 2026) + /// + public void SetAnchor(int anchor) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETANCHOR, (IntPtr) anchor, (IntPtr) Unused); + } + + /// + /// Retrieve the text of the line containing the caret. + /// Returns the index of the caret on the line. + /// Result is NUL-terminated. + /// (Scintilla feature 2027) + /// + public unsafe string GetCurLine(int length) + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETCURLINE, (IntPtr) length, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Retrieve the position of the last correctly styled character. (Scintilla feature 2028) + public int GetEndStyled() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETENDSTYLED, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Convert all line endings in the document to one mode. (Scintilla feature 2029) + public void ConvertEOLs(EndOfLine eolMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CONVERTEOLS, (IntPtr) eolMode, (IntPtr) Unused); + } + + /// Retrieve the current end of line mode - one of CRLF, CR, or LF. (Scintilla feature 2030) + public EndOfLine GetEOLMode() + { + return (EndOfLine)Win32.SendMessage(scintilla, SciMsg.SCI_GETEOLMODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the current end of line mode. (Scintilla feature 2031) + public void SetEOLMode(EndOfLine eolMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETEOLMODE, (IntPtr) eolMode, (IntPtr) Unused); + } + + /// + /// Set the current styling position to start. + /// The unused parameter is no longer used and should be set to 0. + /// (Scintilla feature 2032) + /// + public void StartStyling(int start, int unused) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STARTSTYLING, (IntPtr) start, (IntPtr) unused); + } + + /// + /// Change style from current styling position for length characters to a style + /// and move the current styling position to after this newly styled segment. + /// (Scintilla feature 2033) + /// + public void SetStyling(int length, int style) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLING, (IntPtr) length, (IntPtr) style); + } + + /// Is drawing done first into a buffer or direct to the screen? (Scintilla feature 2034) + public bool GetBufferedDraw() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETBUFFEREDDRAW, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// If drawing is buffered then each line of text is drawn into a bitmap buffer + /// before drawing it to the screen to avoid flicker. + /// (Scintilla feature 2035) + /// + public void SetBufferedDraw(bool buffered) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETBUFFEREDDRAW, new IntPtr(buffered ? 1 : 0), (IntPtr) Unused); + } + + /// Change the visible size of a tab to be a multiple of the width of a space character. (Scintilla feature 2036) + public void SetTabWidth(int tabWidth) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTABWIDTH, (IntPtr) tabWidth, (IntPtr) Unused); + } + + /// Retrieve the visible size of a tab. (Scintilla feature 2121) + public int GetTabWidth() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTABWIDTH, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Clear explicit tabstops on a line. (Scintilla feature 2675) + public void ClearTabStops(int line) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEARTABSTOPS, (IntPtr) line, (IntPtr) Unused); + } + + /// Add an explicit tab stop for a line. (Scintilla feature 2676) + public void AddTabStop(int line, int x) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ADDTABSTOP, (IntPtr) line, (IntPtr) x); + } + + /// Find the next explicit tab stop position on a line after a position. (Scintilla feature 2677) + public int GetNextTabStop(int line, int x) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETNEXTTABSTOP, (IntPtr) line, (IntPtr) x); + } + + /// + /// Set the code page used to interpret the bytes of the document as characters. + /// The SC_CP_UTF8 value can be used to enter Unicode mode. + /// (Scintilla feature 2037) + /// + public void SetCodePage(int codePage) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCODEPAGE, (IntPtr) codePage, (IntPtr) Unused); + } + + /// Is the IME displayed in a window or inline? (Scintilla feature 2678) + public IMEInteraction GetIMEInteraction() + { + return (IMEInteraction)Win32.SendMessage(scintilla, SciMsg.SCI_GETIMEINTERACTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Choose to display the the IME in a winow or inline. (Scintilla feature 2679) + public void SetIMEInteraction(IMEInteraction imeInteraction) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETIMEINTERACTION, (IntPtr) imeInteraction, (IntPtr) Unused); + } + + /// Set the symbol used for a particular marker number. (Scintilla feature 2040) + public void MarkerDefine(int markerNumber, MarkerSymbol markerSymbol) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINE, (IntPtr) markerNumber, (IntPtr) markerSymbol); + } + + /// Set the foreground colour used for a particular marker number. (Scintilla feature 2041) + public void MarkerSetFore(int markerNumber, Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETFORE, (IntPtr) markerNumber, fore.Value); + } + + /// Set the background colour used for a particular marker number. (Scintilla feature 2042) + public void MarkerSetBack(int markerNumber, Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETBACK, (IntPtr) markerNumber, back.Value); + } + + /// Set the background colour used for a particular marker number when its folding block is selected. (Scintilla feature 2292) + public void MarkerSetBackSelected(int markerNumber, Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETBACKSELECTED, (IntPtr) markerNumber, back.Value); + } + + /// Enable/disable highlight for current folding bloc (smallest one that contains the caret) (Scintilla feature 2293) + public void MarkerEnableHighlight(bool enabled) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERENABLEHIGHLIGHT, new IntPtr(enabled ? 1 : 0), (IntPtr) Unused); + } + + /// Add a marker to a line, returning an ID which can be used to find or delete the marker. (Scintilla feature 2043) + public int MarkerAdd(int line, int markerNumber) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERADD, (IntPtr) line, (IntPtr) markerNumber); + } + + /// Delete a marker from a line. (Scintilla feature 2044) + public void MarkerDelete(int line, int markerNumber) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETE, (IntPtr) line, (IntPtr) markerNumber); + } + + /// Delete all markers with a particular number from all lines. (Scintilla feature 2045) + public void MarkerDeleteAll(int markerNumber) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETEALL, (IntPtr) markerNumber, (IntPtr) Unused); + } + + /// Get a bit mask of all the markers set on a line. (Scintilla feature 2046) + public int MarkerGet(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERGET, (IntPtr) line, (IntPtr) Unused); + } + + /// + /// Find the next line at or after lineStart that includes a marker in mask. + /// Return -1 when no more lines. + /// (Scintilla feature 2047) + /// + public int MarkerNext(int lineStart, int markerMask) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERNEXT, (IntPtr) lineStart, (IntPtr) markerMask); + } + + /// Find the previous line before lineStart that includes a marker in mask. (Scintilla feature 2048) + public int MarkerPrevious(int lineStart, int markerMask) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERPREVIOUS, (IntPtr) lineStart, (IntPtr) markerMask); + } + + /// Define a marker from a pixmap. (Scintilla feature 2049) + public unsafe void MarkerDefinePixmap(int markerNumber, string pixmap) + { + fixed (byte* pixmapPtr = Encoding.UTF8.GetBytes(pixmap)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINEPIXMAP, (IntPtr) markerNumber, (IntPtr) pixmapPtr); + } + } + + /// Add a set of markers to a line. (Scintilla feature 2466) + public void MarkerAddSet(int line, int markerSet) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERADDSET, (IntPtr) line, (IntPtr) markerSet); + } + + /// Set the alpha used for a marker that is drawn in the text area, not the margin. (Scintilla feature 2476) + public void MarkerSetAlpha(int markerNumber, Alpha alpha) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETALPHA, (IntPtr) markerNumber, (IntPtr) alpha); + } + + /// Set a margin to be either numeric or symbolic. (Scintilla feature 2240) + public void SetMarginTypeN(int margin, MarginType marginType) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINTYPEN, (IntPtr) margin, (IntPtr) marginType); + } + + /// Retrieve the type of a margin. (Scintilla feature 2241) + public MarginType GetMarginTypeN(int margin) + { + return (MarginType)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINTYPEN, (IntPtr) margin, (IntPtr) Unused); + } + + /// Set the width of a margin to a width expressed in pixels. (Scintilla feature 2242) + public void SetMarginWidthN(int margin, int pixelWidth) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINWIDTHN, (IntPtr) margin, (IntPtr) pixelWidth); + } + + /// Retrieve the width of a margin in pixels. (Scintilla feature 2243) + public int GetMarginWidthN(int margin) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINWIDTHN, (IntPtr) margin, (IntPtr) Unused); + } + + /// Set a mask that determines which markers are displayed in a margin. (Scintilla feature 2244) + public void SetMarginMaskN(int margin, int mask) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINMASKN, (IntPtr) margin, (IntPtr) mask); + } + + /// Retrieve the marker mask of a margin. (Scintilla feature 2245) + public int GetMarginMaskN(int margin) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINMASKN, (IntPtr) margin, (IntPtr) Unused); + } + + /// Make a margin sensitive or insensitive to mouse clicks. (Scintilla feature 2246) + public void SetMarginSensitiveN(int margin, bool sensitive) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINSENSITIVEN, (IntPtr) margin, new IntPtr(sensitive ? 1 : 0)); + } + + /// Retrieve the mouse click sensitivity of a margin. (Scintilla feature 2247) + public bool GetMarginSensitiveN(int margin) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINSENSITIVEN, (IntPtr) margin, (IntPtr) Unused); + } + + /// Set the cursor shown when the mouse is inside a margin. (Scintilla feature 2248) + public void SetMarginCursorN(int margin, CursorShape cursor) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINCURSORN, (IntPtr) margin, (IntPtr) cursor); + } + + /// Retrieve the cursor shown in a margin. (Scintilla feature 2249) + public CursorShape GetMarginCursorN(int margin) + { + return (CursorShape)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINCURSORN, (IntPtr) margin, (IntPtr) Unused); + } + + /// Set the background colour of a margin. Only visible for SC_MARGIN_COLOUR. (Scintilla feature 2250) + public void SetMarginBackN(int margin, Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINBACKN, (IntPtr) margin, back.Value); + } + + /// Retrieve the background colour of a margin (Scintilla feature 2251) + public Colour GetMarginBackN(int margin) + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINBACKN, (IntPtr) margin, (IntPtr) Unused)); + } + + /// Allocate a non-standard number of margins. (Scintilla feature 2252) + public void SetMargins(int margins) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINS, (IntPtr) margins, (IntPtr) Unused); + } + + /// How many margins are there?. (Scintilla feature 2253) + public int GetMargins() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Clear all the styles and make equivalent to the global default style. (Scintilla feature 2050) + public void StyleClearAll() + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLECLEARALL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the foreground colour of a style. (Scintilla feature 2051) + public void StyleSetFore(int style, Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETFORE, (IntPtr) style, fore.Value); + } + + /// Set the background colour of a style. (Scintilla feature 2052) + public void StyleSetBack(int style, Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETBACK, (IntPtr) style, back.Value); + } + + /// Set a style to be bold or not. (Scintilla feature 2053) + public void StyleSetBold(int style, bool bold) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETBOLD, (IntPtr) style, new IntPtr(bold ? 1 : 0)); + } + + /// Set a style to be italic or not. (Scintilla feature 2054) + public void StyleSetItalic(int style, bool italic) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETITALIC, (IntPtr) style, new IntPtr(italic ? 1 : 0)); + } + + /// Set the size of characters of a style. (Scintilla feature 2055) + public void StyleSetSize(int style, int sizePoints) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETSIZE, (IntPtr) style, (IntPtr) sizePoints); + } + + /// Set the font of a style. (Scintilla feature 2056) + public unsafe void StyleSetFont(int style, string fontName) + { + fixed (byte* fontNamePtr = Encoding.UTF8.GetBytes(fontName)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETFONT, (IntPtr) style, (IntPtr) fontNamePtr); + } + } + + /// Set a style to have its end of line filled or not. (Scintilla feature 2057) + public void StyleSetEOLFilled(int style, bool eolFilled) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETEOLFILLED, (IntPtr) style, new IntPtr(eolFilled ? 1 : 0)); + } + + /// Reset the default style to its state at startup (Scintilla feature 2058) + public void StyleResetDefault() + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLERESETDEFAULT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set a style to be underlined or not. (Scintilla feature 2059) + public void StyleSetUnderline(int style, bool underline) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETUNDERLINE, (IntPtr) style, new IntPtr(underline ? 1 : 0)); + } + + /// Get the foreground colour of a style. (Scintilla feature 2481) + public Colour StyleGetFore(int style) + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETFORE, (IntPtr) style, (IntPtr) Unused)); + } + + /// Get the background colour of a style. (Scintilla feature 2482) + public Colour StyleGetBack(int style) + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETBACK, (IntPtr) style, (IntPtr) Unused)); + } + + /// Get is a style bold or not. (Scintilla feature 2483) + public bool StyleGetBold(int style) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETBOLD, (IntPtr) style, (IntPtr) Unused); + } + + /// Get is a style italic or not. (Scintilla feature 2484) + public bool StyleGetItalic(int style) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETITALIC, (IntPtr) style, (IntPtr) Unused); + } + + /// Get the size of characters of a style. (Scintilla feature 2485) + public int StyleGetSize(int style) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETSIZE, (IntPtr) style, (IntPtr) Unused); + } + + /// + /// Get the font of a style. + /// Returns the length of the fontName + /// Result is NUL-terminated. + /// (Scintilla feature 2486) + /// + public unsafe string StyleGetFont(int style) + { + byte[] fontNameBuffer = new byte[10000]; + fixed (byte* fontNamePtr = fontNameBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETFONT, (IntPtr) style, (IntPtr) fontNamePtr); + return Encoding.UTF8.GetString(fontNameBuffer).TrimEnd('\0'); + } + } + + /// Get is a style to have its end of line filled or not. (Scintilla feature 2487) + public bool StyleGetEOLFilled(int style) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETEOLFILLED, (IntPtr) style, (IntPtr) Unused); + } + + /// Get is a style underlined or not. (Scintilla feature 2488) + public bool StyleGetUnderline(int style) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETUNDERLINE, (IntPtr) style, (IntPtr) Unused); + } + + /// Get is a style mixed case, or to force upper or lower case. (Scintilla feature 2489) + public CaseVisible StyleGetCase(int style) + { + return (CaseVisible)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCASE, (IntPtr) style, (IntPtr) Unused); + } + + /// Get the character get of the font in a style. (Scintilla feature 2490) + public CharacterSet StyleGetCharacterSet(int style) + { + return (CharacterSet)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCHARACTERSET, (IntPtr) style, (IntPtr) Unused); + } + + /// Get is a style visible or not. (Scintilla feature 2491) + public bool StyleGetVisible(int style) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETVISIBLE, (IntPtr) style, (IntPtr) Unused); + } + + /// + /// Get is a style changeable or not (read only). + /// Experimental feature, currently buggy. + /// (Scintilla feature 2492) + /// + public bool StyleGetChangeable(int style) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCHANGEABLE, (IntPtr) style, (IntPtr) Unused); + } + + /// Get is a style a hotspot or not. (Scintilla feature 2493) + public bool StyleGetHotSpot(int style) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETHOTSPOT, (IntPtr) style, (IntPtr) Unused); + } + + /// Set a style to be mixed case, or to force upper or lower case. (Scintilla feature 2060) + public void StyleSetCase(int style, CaseVisible caseVisible) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCASE, (IntPtr) style, (IntPtr) caseVisible); + } + + /// Set the size of characters of a style. Size is in points multiplied by 100. (Scintilla feature 2061) + public void StyleSetSizeFractional(int style, int sizeHundredthPoints) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETSIZEFRACTIONAL, (IntPtr) style, (IntPtr) sizeHundredthPoints); + } + + /// Get the size of characters of a style in points multiplied by 100 (Scintilla feature 2062) + public int StyleGetSizeFractional(int style) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETSIZEFRACTIONAL, (IntPtr) style, (IntPtr) Unused); + } + + /// Set the weight of characters of a style. (Scintilla feature 2063) + public void StyleSetWeight(int style, FontWeight weight) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETWEIGHT, (IntPtr) style, (IntPtr) weight); + } + + /// Get the weight of characters of a style. (Scintilla feature 2064) + public FontWeight StyleGetWeight(int style) + { + return (FontWeight)Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETWEIGHT, (IntPtr) style, (IntPtr) Unused); + } + + /// Set the character set of the font in a style. (Scintilla feature 2066) + public void StyleSetCharacterSet(int style, CharacterSet characterSet) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCHARACTERSET, (IntPtr) style, (IntPtr) characterSet); + } + + /// Set a style to be a hotspot or not. (Scintilla feature 2409) + public void StyleSetHotSpot(int style, bool hotspot) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETHOTSPOT, (IntPtr) style, new IntPtr(hotspot ? 1 : 0)); + } + + /// Set the foreground colour of the main and additional selections and whether to use this setting. (Scintilla feature 2067) + public void SetSelFore(bool useSetting, Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELFORE, new IntPtr(useSetting ? 1 : 0), fore.Value); + } + + /// Set the background colour of the main and additional selections and whether to use this setting. (Scintilla feature 2068) + public void SetSelBack(bool useSetting, Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELBACK, new IntPtr(useSetting ? 1 : 0), back.Value); + } + + /// Get the alpha of the selection. (Scintilla feature 2477) + public Alpha GetSelAlpha() + { + return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELALPHA, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the alpha of the selection. (Scintilla feature 2478) + public void SetSelAlpha(Alpha alpha) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELALPHA, (IntPtr) alpha, (IntPtr) Unused); + } + + /// Is the selection end of line filled? (Scintilla feature 2479) + public bool GetSelEOLFilled() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELEOLFILLED, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the selection to have its end of line filled or not. (Scintilla feature 2480) + public void SetSelEOLFilled(bool filled) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELEOLFILLED, new IntPtr(filled ? 1 : 0), (IntPtr) Unused); + } + + /// Set the foreground colour of the caret. (Scintilla feature 2069) + public void SetCaretFore(Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETFORE, fore.Value, (IntPtr) Unused); + } + + /// When key+modifier combination keyDefinition is pressed perform sciCommand. (Scintilla feature 2070) + public void AssignCmdKey(KeyModifier keyDefinition, int sciCommand) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ASSIGNCMDKEY, keyDefinition.Value, (IntPtr) sciCommand); + } + + /// When key+modifier combination keyDefinition is pressed do nothing. (Scintilla feature 2071) + public void ClearCmdKey(KeyModifier keyDefinition) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEARCMDKEY, keyDefinition.Value, (IntPtr) Unused); + } + + /// Drop all key mappings. (Scintilla feature 2072) + public void ClearAllCmdKeys() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEARALLCMDKEYS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the styles for a segment of the document. (Scintilla feature 2073) + public unsafe void SetStylingEx(int length, string styles) + { + fixed (byte* stylesPtr = Encoding.UTF8.GetBytes(styles)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLINGEX, (IntPtr) length, (IntPtr) stylesPtr); + } + } + + /// Set a style to be visible or not. (Scintilla feature 2074) + public void StyleSetVisible(int style, bool visible) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETVISIBLE, (IntPtr) style, new IntPtr(visible ? 1 : 0)); + } + + /// Get the time in milliseconds that the caret is on and off. (Scintilla feature 2075) + public int GetCaretPeriod() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETPERIOD, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get the time in milliseconds that the caret is on and off. 0 = steady on. (Scintilla feature 2076) + public void SetCaretPeriod(int periodMilliseconds) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETPERIOD, (IntPtr) periodMilliseconds, (IntPtr) Unused); + } + + /// + /// Set the set of characters making up words for when moving or selecting by word. + /// First sets defaults like SetCharsDefault. + /// (Scintilla feature 2077) + /// + public unsafe void SetWordChars(string characters) + { + fixed (byte* charactersPtr = Encoding.UTF8.GetBytes(characters)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWORDCHARS, (IntPtr) Unused, (IntPtr) charactersPtr); + } + } + + /// + /// Get the set of characters making up words for when moving or selecting by word. + /// Returns the number of characters + /// (Scintilla feature 2646) + /// + public unsafe string GetWordChars() + { + byte[] charactersBuffer = new byte[10000]; + fixed (byte* charactersPtr = charactersBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETWORDCHARS, (IntPtr) Unused, (IntPtr) charactersPtr); + return Encoding.UTF8.GetString(charactersBuffer).TrimEnd('\0'); + } + } + + /// Set the number of characters to have directly indexed categories (Scintilla feature 2720) + public void SetCharacterCategoryOptimization(int countCharacters) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCHARACTERCATEGORYOPTIMIZATION, (IntPtr) countCharacters, (IntPtr) Unused); + } + + /// Get the number of characters to have directly indexed categories (Scintilla feature 2721) + public int GetCharacterCategoryOptimization() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCHARACTERCATEGORYOPTIMIZATION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Start a sequence of actions that is undone and redone as a unit. + /// May be nested. + /// (Scintilla feature 2078) + /// + public void BeginUndoAction() + { + Win32.SendMessage(scintilla, SciMsg.SCI_BEGINUNDOACTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// End a sequence of actions that is undone and redone as a unit. (Scintilla feature 2079) + public void EndUndoAction() + { + Win32.SendMessage(scintilla, SciMsg.SCI_ENDUNDOACTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set an indicator to plain, squiggle or TT. (Scintilla feature 2080) + public void IndicSetStyle(int indicator, IndicatorStyle indicatorStyle) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETSTYLE, (IntPtr) indicator, (IntPtr) indicatorStyle); + } + + /// Retrieve the style of an indicator. (Scintilla feature 2081) + public IndicatorStyle IndicGetStyle(int indicator) + { + return (IndicatorStyle)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETSTYLE, (IntPtr) indicator, (IntPtr) Unused); + } + + /// Set the foreground colour of an indicator. (Scintilla feature 2082) + public void IndicSetFore(int indicator, Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETFORE, (IntPtr) indicator, fore.Value); + } + + /// Retrieve the foreground colour of an indicator. (Scintilla feature 2083) + public Colour IndicGetFore(int indicator) + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETFORE, (IntPtr) indicator, (IntPtr) Unused)); + } + + /// Set an indicator to draw under text or over(default). (Scintilla feature 2510) + public void IndicSetUnder(int indicator, bool under) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETUNDER, (IntPtr) indicator, new IntPtr(under ? 1 : 0)); + } + + /// Retrieve whether indicator drawn under or over text. (Scintilla feature 2511) + public bool IndicGetUnder(int indicator) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETUNDER, (IntPtr) indicator, (IntPtr) Unused); + } + + /// Set a hover indicator to plain, squiggle or TT. (Scintilla feature 2680) + public void IndicSetHoverStyle(int indicator, IndicatorStyle indicatorStyle) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETHOVERSTYLE, (IntPtr) indicator, (IntPtr) indicatorStyle); + } + + /// Retrieve the hover style of an indicator. (Scintilla feature 2681) + public IndicatorStyle IndicGetHoverStyle(int indicator) + { + return (IndicatorStyle)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETHOVERSTYLE, (IntPtr) indicator, (IntPtr) Unused); + } + + /// Set the foreground hover colour of an indicator. (Scintilla feature 2682) + public void IndicSetHoverFore(int indicator, Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETHOVERFORE, (IntPtr) indicator, fore.Value); + } + + /// Retrieve the foreground hover colour of an indicator. (Scintilla feature 2683) + public Colour IndicGetHoverFore(int indicator) + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETHOVERFORE, (IntPtr) indicator, (IntPtr) Unused)); + } + + /// Set the attributes of an indicator. (Scintilla feature 2684) + public void IndicSetFlags(int indicator, IndicFlag flags) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETFLAGS, (IntPtr) indicator, (IntPtr) flags); + } + + /// Retrieve the attributes of an indicator. (Scintilla feature 2685) + public IndicFlag IndicGetFlags(int indicator) + { + return (IndicFlag)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETFLAGS, (IntPtr) indicator, (IntPtr) Unused); + } + + /// Set the foreground colour of all whitespace and whether to use this setting. (Scintilla feature 2084) + public void SetWhitespaceFore(bool useSetting, Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACEFORE, new IntPtr(useSetting ? 1 : 0), fore.Value); + } + + /// Set the background colour of all whitespace and whether to use this setting. (Scintilla feature 2085) + public void SetWhitespaceBack(bool useSetting, Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACEBACK, new IntPtr(useSetting ? 1 : 0), back.Value); + } + + /// Set the size of the dots used to mark space characters. (Scintilla feature 2086) + public void SetWhitespaceSize(int size) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACESIZE, (IntPtr) size, (IntPtr) Unused); + } + + /// Get the size of the dots used to mark space characters. (Scintilla feature 2087) + public int GetWhitespaceSize() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETWHITESPACESIZE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Used to hold extra styling information for each line. (Scintilla feature 2092) + public void SetLineState(int line, int state) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETLINESTATE, (IntPtr) line, (IntPtr) state); + } + + /// Retrieve the extra styling information for a line. (Scintilla feature 2093) + public int GetLineState(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESTATE, (IntPtr) line, (IntPtr) Unused); + } + + /// Retrieve the last line number that has line state. (Scintilla feature 2094) + public int GetMaxLineState() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMAXLINESTATE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Is the background of the line containing the caret in a different colour? (Scintilla feature 2095) + public bool GetCaretLineVisible() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEVISIBLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Display the background of the line containing the caret in a different colour. (Scintilla feature 2096) + public void SetCaretLineVisible(bool show) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEVISIBLE, new IntPtr(show ? 1 : 0), (IntPtr) Unused); + } + + /// Get the colour of the background of the line containing the caret. (Scintilla feature 2097) + public Colour GetCaretLineBack() + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEBACK, (IntPtr) Unused, (IntPtr) Unused)); + } + + /// Set the colour of the background of the line containing the caret. (Scintilla feature 2098) + public void SetCaretLineBack(Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEBACK, back.Value, (IntPtr) Unused); + } + + /// + /// Retrieve the caret line frame width. + /// Width = 0 means this option is disabled. + /// (Scintilla feature 2704) + /// + public int GetCaretLineFrame() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEFRAME, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Display the caret line framed. + /// Set width != 0 to enable this option and width = 0 to disable it. + /// (Scintilla feature 2705) + /// + public void SetCaretLineFrame(int width) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEFRAME, (IntPtr) width, (IntPtr) Unused); + } + + /// + /// Set a style to be changeable or not (read only). + /// Experimental feature, currently buggy. + /// (Scintilla feature 2099) + /// + public void StyleSetChangeable(int style, bool changeable) + { + Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCHANGEABLE, (IntPtr) style, new IntPtr(changeable ? 1 : 0)); + } + + /// + /// Display a auto-completion list. + /// The lengthEntered parameter indicates how many characters before + /// the caret should be used to provide context. + /// (Scintilla feature 2100) + /// + public unsafe void AutoCShow(int lengthEntered, string itemList) + { + fixed (byte* itemListPtr = Encoding.UTF8.GetBytes(itemList)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSHOW, (IntPtr) lengthEntered, (IntPtr) itemListPtr); + } + } + + /// Remove the auto-completion list from the screen. (Scintilla feature 2101) + public void AutoCCancel() + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCCANCEL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Is there an auto-completion list visible? (Scintilla feature 2102) + public bool AutoCActive() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCACTIVE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Retrieve the position of the caret when the auto-completion list was displayed. (Scintilla feature 2103) + public int AutoCPosStart() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCPOSSTART, (IntPtr) Unused, (IntPtr) Unused); + } + + /// User has selected an item so remove the list and insert the selection. (Scintilla feature 2104) + public void AutoCComplete() + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCCOMPLETE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Define a set of character that when typed cancel the auto-completion list. (Scintilla feature 2105) + public unsafe void AutoCStops(string characterSet) + { + fixed (byte* characterSetPtr = Encoding.UTF8.GetBytes(characterSet)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSTOPS, (IntPtr) Unused, (IntPtr) characterSetPtr); + } + } + + /// + /// Change the separator character in the string setting up an auto-completion list. + /// Default is space but can be changed if items contain space. + /// (Scintilla feature 2106) + /// + public void AutoCSetSeparator(int separatorCharacter) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETSEPARATOR, (IntPtr) separatorCharacter, (IntPtr) Unused); + } + + /// Retrieve the auto-completion list separator character. (Scintilla feature 2107) + public int AutoCGetSeparator() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETSEPARATOR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Select the item in the auto-completion list that starts with a string. (Scintilla feature 2108) + public unsafe void AutoCSelect(string select) + { + fixed (byte* selectPtr = Encoding.UTF8.GetBytes(select)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSELECT, (IntPtr) Unused, (IntPtr) selectPtr); + } + } + + /// + /// Should the auto-completion list be cancelled if the user backspaces to a + /// position before where the box was created. + /// (Scintilla feature 2110) + /// + public void AutoCSetCancelAtStart(bool cancel) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCANCELATSTART, new IntPtr(cancel ? 1 : 0), (IntPtr) Unused); + } + + /// Retrieve whether auto-completion cancelled by backspacing before start. (Scintilla feature 2111) + public bool AutoCGetCancelAtStart() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCANCELATSTART, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Define a set of characters that when typed will cause the autocompletion to + /// choose the selected item. + /// (Scintilla feature 2112) + /// + public unsafe void AutoCSetFillUps(string characterSet) + { + fixed (byte* characterSetPtr = Encoding.UTF8.GetBytes(characterSet)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETFILLUPS, (IntPtr) Unused, (IntPtr) characterSetPtr); + } + } + + /// Should a single item auto-completion list automatically choose the item. (Scintilla feature 2113) + public void AutoCSetChooseSingle(bool chooseSingle) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCHOOSESINGLE, new IntPtr(chooseSingle ? 1 : 0), (IntPtr) Unused); + } + + /// Retrieve whether a single item auto-completion list automatically choose the item. (Scintilla feature 2114) + public bool AutoCGetChooseSingle() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCHOOSESINGLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set whether case is significant when performing auto-completion searches. (Scintilla feature 2115) + public void AutoCSetIgnoreCase(bool ignoreCase) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETIGNORECASE, new IntPtr(ignoreCase ? 1 : 0), (IntPtr) Unused); + } + + /// Retrieve state of ignore case flag. (Scintilla feature 2116) + public bool AutoCGetIgnoreCase() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETIGNORECASE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Display a list of strings and send notification when user chooses one. (Scintilla feature 2117) + public unsafe void UserListShow(int listType, string itemList) + { + fixed (byte* itemListPtr = Encoding.UTF8.GetBytes(itemList)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_USERLISTSHOW, (IntPtr) listType, (IntPtr) itemListPtr); + } + } + + /// Set whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2118) + public void AutoCSetAutoHide(bool autoHide) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETAUTOHIDE, new IntPtr(autoHide ? 1 : 0), (IntPtr) Unused); + } + + /// Retrieve whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2119) + public bool AutoCGetAutoHide() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETAUTOHIDE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set whether or not autocompletion deletes any word characters + /// after the inserted text upon completion. + /// (Scintilla feature 2270) + /// + public void AutoCSetDropRestOfWord(bool dropRestOfWord) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETDROPRESTOFWORD, new IntPtr(dropRestOfWord ? 1 : 0), (IntPtr) Unused); + } + + /// + /// Retrieve whether or not autocompletion deletes any word characters + /// after the inserted text upon completion. + /// (Scintilla feature 2271) + /// + public bool AutoCGetDropRestOfWord() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETDROPRESTOFWORD, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Register an XPM image for use in autocompletion lists. (Scintilla feature 2405) + public unsafe void RegisterImage(int type, string xpmData) + { + fixed (byte* xpmDataPtr = Encoding.UTF8.GetBytes(xpmData)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_REGISTERIMAGE, (IntPtr) type, (IntPtr) xpmDataPtr); + } + } + + /// Clear all the registered XPM images. (Scintilla feature 2408) + public void ClearRegisteredImages() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEARREGISTEREDIMAGES, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Retrieve the auto-completion list type-separator character. (Scintilla feature 2285) + public int AutoCGetTypeSeparator() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETTYPESEPARATOR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Change the type-separator character in the string setting up an auto-completion list. + /// Default is '?' but can be changed if items contain '?'. + /// (Scintilla feature 2286) + /// + public void AutoCSetTypeSeparator(int separatorCharacter) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETTYPESEPARATOR, (IntPtr) separatorCharacter, (IntPtr) Unused); + } + + /// + /// Set the maximum width, in characters, of auto-completion and user lists. + /// Set to 0 to autosize to fit longest item, which is the default. + /// (Scintilla feature 2208) + /// + public void AutoCSetMaxWidth(int characterCount) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMAXWIDTH, (IntPtr) characterCount, (IntPtr) Unused); + } + + /// Get the maximum width, in characters, of auto-completion and user lists. (Scintilla feature 2209) + public int AutoCGetMaxWidth() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMAXWIDTH, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set the maximum height, in rows, of auto-completion and user lists. + /// The default is 5 rows. + /// (Scintilla feature 2210) + /// + public void AutoCSetMaxHeight(int rowCount) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMAXHEIGHT, (IntPtr) rowCount, (IntPtr) Unused); + } + + /// Set the maximum height, in rows, of auto-completion and user lists. (Scintilla feature 2211) + public int AutoCGetMaxHeight() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMAXHEIGHT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the number of spaces used for one level of indentation. (Scintilla feature 2122) + public void SetIndent(int indentSize) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETINDENT, (IntPtr) indentSize, (IntPtr) Unused); + } + + /// Retrieve indentation size. (Scintilla feature 2123) + public int GetIndent() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETINDENT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Indentation will only use space characters if useTabs is false, otherwise + /// it will use a combination of tabs and spaces. + /// (Scintilla feature 2124) + /// + public void SetUseTabs(bool useTabs) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETUSETABS, new IntPtr(useTabs ? 1 : 0), (IntPtr) Unused); + } + + /// Retrieve whether tabs will be used in indentation. (Scintilla feature 2125) + public bool GetUseTabs() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETUSETABS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Change the indentation of a line to a number of columns. (Scintilla feature 2126) + public void SetLineIndentation(int line, int indentation) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETLINEINDENTATION, (IntPtr) line, (IntPtr) indentation); + } + + /// Retrieve the number of columns that a line is indented. (Scintilla feature 2127) + public int GetLineIndentation(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEINDENTATION, (IntPtr) line, (IntPtr) Unused); + } + + /// Retrieve the position before the first non indentation character on a line. (Scintilla feature 2128) + public int GetLineIndentPosition(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEINDENTPOSITION, (IntPtr) line, (IntPtr) Unused); + } + + /// Retrieve the column number of a position, taking tab width into account. (Scintilla feature 2129) + public int GetColumn(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCOLUMN, (IntPtr) pos, (IntPtr) Unused); + } + + /// Count characters between two positions. (Scintilla feature 2633) + public int CountCharacters(int start, int end) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_COUNTCHARACTERS, (IntPtr) start, (IntPtr) end); + } + + /// Count code units between two positions. (Scintilla feature 2715) + public int CountCodeUnits(int start, int end) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_COUNTCODEUNITS, (IntPtr) start, (IntPtr) end); + } + + /// Show or hide the horizontal scroll bar. (Scintilla feature 2130) + public void SetHScrollBar(bool visible) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETHSCROLLBAR, new IntPtr(visible ? 1 : 0), (IntPtr) Unused); + } + + /// Is the horizontal scroll bar visible? (Scintilla feature 2131) + public bool GetHScrollBar() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETHSCROLLBAR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Show or hide indentation guides. (Scintilla feature 2132) + public void SetIndentationGuides(IndentView indentView) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETINDENTATIONGUIDES, (IntPtr) indentView, (IntPtr) Unused); + } + + /// Are the indentation guides visible? (Scintilla feature 2133) + public IndentView GetIndentationGuides() + { + return (IndentView)Win32.SendMessage(scintilla, SciMsg.SCI_GETINDENTATIONGUIDES, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set the highlighted indentation guide column. + /// 0 = no highlighted guide. + /// (Scintilla feature 2134) + /// + public void SetHighlightGuide(int column) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETHIGHLIGHTGUIDE, (IntPtr) column, (IntPtr) Unused); + } + + /// Get the highlighted indentation guide column. (Scintilla feature 2135) + public int GetHighlightGuide() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETHIGHLIGHTGUIDE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get the position after the last visible characters on a line. (Scintilla feature 2136) + public int GetLineEndPosition(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDPOSITION, (IntPtr) line, (IntPtr) Unused); + } + + /// Get the code page used to interpret the bytes of the document as characters. (Scintilla feature 2137) + public int GetCodePage() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCODEPAGE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get the foreground colour of the caret. (Scintilla feature 2138) + public Colour GetCaretFore() + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETFORE, (IntPtr) Unused, (IntPtr) Unused)); + } + + /// In read-only mode? (Scintilla feature 2140) + public bool GetReadOnly() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETREADONLY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the position of the caret. (Scintilla feature 2141) + public void SetCurrentPos(int caret) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCURRENTPOS, (IntPtr) caret, (IntPtr) Unused); + } + + /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2142) + public void SetSelectionStart(int anchor) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONSTART, (IntPtr) anchor, (IntPtr) Unused); + } + + /// Returns the position at the start of the selection. (Scintilla feature 2143) + public int GetSelectionStart() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONSTART, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the position that ends the selection - this becomes the caret. (Scintilla feature 2144) + public void SetSelectionEnd(int caret) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONEND, (IntPtr) caret, (IntPtr) Unused); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2145) + public int GetSelectionEnd() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set caret to a position, while removing any existing selection. (Scintilla feature 2556) + public void SetEmptySelection(int caret) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETEMPTYSELECTION, (IntPtr) caret, (IntPtr) Unused); + } + + /// Sets the print magnification added to the point size of each style for printing. (Scintilla feature 2146) + public void SetPrintMagnification(int magnification) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTMAGNIFICATION, (IntPtr) magnification, (IntPtr) Unused); + } + + /// Returns the print magnification. (Scintilla feature 2147) + public int GetPrintMagnification() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTMAGNIFICATION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Modify colours when printing for clearer printed text. (Scintilla feature 2148) + public void SetPrintColourMode(PrintOption mode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTCOLOURMODE, (IntPtr) mode, (IntPtr) Unused); + } + + /// Returns the print colour mode. (Scintilla feature 2149) + public PrintOption GetPrintColourMode() + { + return (PrintOption)Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTCOLOURMODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Find some text in the document. (Scintilla feature 2150) + public int FindText(FindOption searchFlags, TextToFind ft) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_FINDTEXT, (IntPtr) searchFlags, ft.NativePointer); + } + + /// Retrieve the display line at the top of the display. (Scintilla feature 2152) + public int GetFirstVisibleLine() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETFIRSTVISIBLELINE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Retrieve the contents of a line. + /// Returns the length of the line. + /// (Scintilla feature 2153) + /// + public unsafe string GetLine(int line) + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETLINE, (IntPtr) line, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Returns the number of lines in the document. There is always at least one. (Scintilla feature 2154) + public int GetLineCount() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINECOUNT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the size in pixels of the left margin. (Scintilla feature 2155) + public void SetMarginLeft(int pixelWidth) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINLEFT, (IntPtr) Unused, (IntPtr) pixelWidth); + } + + /// Returns the size in pixels of the left margin. (Scintilla feature 2156) + public int GetMarginLeft() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINLEFT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the size in pixels of the right margin. (Scintilla feature 2157) + public void SetMarginRight(int pixelWidth) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINRIGHT, (IntPtr) Unused, (IntPtr) pixelWidth); + } + + /// Returns the size in pixels of the right margin. (Scintilla feature 2158) + public int GetMarginRight() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINRIGHT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Is the document different from when it was last saved? (Scintilla feature 2159) + public bool GetModify() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMODIFY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Select a range of text. (Scintilla feature 2160) + public void SetSel(int anchor, int caret) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSEL, (IntPtr) anchor, (IntPtr) caret); + } + + /// + /// Retrieve the selected text. + /// Return the length of the text. + /// Result is NUL-terminated. + /// (Scintilla feature 2161) + /// + public unsafe string GetSelText() + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETSELTEXT, (IntPtr) Unused, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// + /// Retrieve a range of text. + /// Return the length of the text. + /// (Scintilla feature 2162) + /// + public int GetTextRange(TextRange tr) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXTRANGE, (IntPtr) Unused, tr.NativePointer); + } + + /// Draw the selection either highlighted or in normal (non-highlighted) style. (Scintilla feature 2163) + public void HideSelection(bool hide) + { + Win32.SendMessage(scintilla, SciMsg.SCI_HIDESELECTION, new IntPtr(hide ? 1 : 0), (IntPtr) Unused); + } + + /// Retrieve the x value of the point in the window where a position is displayed. (Scintilla feature 2164) + public int PointXFromPosition(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POINTXFROMPOSITION, (IntPtr) Unused, (IntPtr) pos); + } + + /// Retrieve the y value of the point in the window where a position is displayed. (Scintilla feature 2165) + public int PointYFromPosition(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POINTYFROMPOSITION, (IntPtr) Unused, (IntPtr) pos); + } + + /// Retrieve the line containing a position. (Scintilla feature 2166) + public int LineFromPosition(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_LINEFROMPOSITION, (IntPtr) pos, (IntPtr) Unused); + } + + /// Retrieve the position at the start of a line. (Scintilla feature 2167) + public int PositionFromLine(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMLINE, (IntPtr) line, (IntPtr) Unused); + } + + /// Scroll horizontally and vertically. (Scintilla feature 2168) + public void LineScroll(int columns, int lines) + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLL, (IntPtr) columns, (IntPtr) lines); + } + + /// Ensure the caret is visible. (Scintilla feature 2169) + public void ScrollCaret() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLCARET, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Scroll the argument positions and the range between them into view giving + /// priority to the primary position then the secondary position. + /// This may be used to make a search match visible. + /// (Scintilla feature 2569) + /// + public void ScrollRange(int secondary, int primary) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLRANGE, (IntPtr) secondary, (IntPtr) primary); + } + + /// Replace the selected text with the argument text. (Scintilla feature 2170) + public unsafe void ReplaceSel(string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_REPLACESEL, (IntPtr) Unused, (IntPtr) textPtr); + } + } + + /// Set to read only or read write. (Scintilla feature 2171) + public void SetReadOnly(bool readOnly) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETREADONLY, new IntPtr(readOnly ? 1 : 0), (IntPtr) Unused); + } + + /// Null operation. (Scintilla feature 2172) + public void Null() + { + Win32.SendMessage(scintilla, SciMsg.SCI_NULL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Will a paste succeed? (Scintilla feature 2173) + public bool CanPaste() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_CANPASTE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Are there any undoable actions in the undo history? (Scintilla feature 2174) + public bool CanUndo() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_CANUNDO, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Delete the undo history. (Scintilla feature 2175) + public void EmptyUndoBuffer() + { + Win32.SendMessage(scintilla, SciMsg.SCI_EMPTYUNDOBUFFER, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Undo one action in the undo history. (Scintilla feature 2176) + public void Undo() + { + Win32.SendMessage(scintilla, SciMsg.SCI_UNDO, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Cut the selection to the clipboard. (Scintilla feature 2177) + public void Cut() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CUT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Copy the selection to the clipboard. (Scintilla feature 2178) + public void Copy() + { + Win32.SendMessage(scintilla, SciMsg.SCI_COPY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Paste the contents of the clipboard into the document replacing the selection. (Scintilla feature 2179) + public void Paste() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PASTE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Clear the selection. (Scintilla feature 2180) + public void Clear() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEAR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Replace the contents of the document with the argument text. (Scintilla feature 2181) + public unsafe void SetText(string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTEXT, (IntPtr) Unused, (IntPtr) textPtr); + } + } + + /// + /// Retrieve all the text in the document. + /// Returns number of characters retrieved. + /// Result is NUL-terminated. + /// (Scintilla feature 2182) + /// + public unsafe string GetText(int length) + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXT, (IntPtr) length, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Retrieve the number of characters in the document. (Scintilla feature 2183) + public int GetTextLength() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXTLENGTH, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Retrieve a pointer to a function that processes messages for this Scintilla. (Scintilla feature 2184) + public IntPtr GetDirectFunction() + { + return Win32.SendMessage(scintilla, SciMsg.SCI_GETDIRECTFUNCTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Retrieve a pointer value to use as the first argument when calling + /// the function returned by GetDirectFunction. + /// (Scintilla feature 2185) + /// + public IntPtr GetDirectPointer() + { + return Win32.SendMessage(scintilla, SciMsg.SCI_GETDIRECTPOINTER, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set to overtype (true) or insert mode. (Scintilla feature 2186) + public void SetOvertype(bool overType) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETOVERTYPE, new IntPtr(overType ? 1 : 0), (IntPtr) Unused); + } + + /// Returns true if overtype mode is active otherwise false is returned. (Scintilla feature 2187) + public bool GetOvertype() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETOVERTYPE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the width of the insert mode caret. (Scintilla feature 2188) + public void SetCaretWidth(int pixelWidth) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETWIDTH, (IntPtr) pixelWidth, (IntPtr) Unused); + } + + /// Returns the width of the insert mode caret. (Scintilla feature 2189) + public int GetCaretWidth() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETWIDTH, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Sets the position that starts the target which is used for updating the + /// document without affecting the scroll position. + /// (Scintilla feature 2190) + /// + public void SetTargetStart(int start) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETSTART, (IntPtr) start, (IntPtr) Unused); + } + + /// Get the position that starts the target. (Scintilla feature 2191) + public int GetTargetStart() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETSTART, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Sets the position that ends the target which is used for updating the + /// document without affecting the scroll position. + /// (Scintilla feature 2192) + /// + public void SetTargetEnd(int end) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETEND, (IntPtr) end, (IntPtr) Unused); + } + + /// Get the position that ends the target. (Scintilla feature 2193) + public int GetTargetEnd() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets both the start and end of the target in one call. (Scintilla feature 2686) + public void SetTargetRange(int start, int end) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETRANGE, (IntPtr) start, (IntPtr) end); + } + + /// Retrieve the text in the target. (Scintilla feature 2687) + public unsafe string GetTargetText() + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETTEXT, (IntPtr) Unused, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Make the target range start and end be the same as the selection range start and end. (Scintilla feature 2287) + public void TargetFromSelection() + { + Win32.SendMessage(scintilla, SciMsg.SCI_TARGETFROMSELECTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the target to the whole document. (Scintilla feature 2690) + public void TargetWholeDocument() + { + Win32.SendMessage(scintilla, SciMsg.SCI_TARGETWHOLEDOCUMENT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Replace the target text with the argument text. + /// Text is counted so it can contain NULs. + /// Returns the length of the replacement text. + /// (Scintilla feature 2194) + /// + public unsafe int ReplaceTarget(int length, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_REPLACETARGET, (IntPtr) length, (IntPtr) textPtr); + } + } + + /// + /// Replace the target text with the argument text after \d processing. + /// Text is counted so it can contain NULs. + /// Looks for \d where d is between 1 and 9 and replaces these with the strings + /// matched in the last search operation which were surrounded by \( and \). + /// Returns the length of the replacement text including any change + /// caused by processing the \d patterns. + /// (Scintilla feature 2195) + /// + public unsafe int ReplaceTargetRE(int length, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_REPLACETARGETRE, (IntPtr) length, (IntPtr) textPtr); + } + } + + /// + /// Search for a counted string in the target and set the target to the found + /// range. Text is counted so it can contain NULs. + /// Returns start of found range or -1 for failure in which case target is not moved. + /// (Scintilla feature 2197) + /// + public unsafe int SearchInTarget(int length, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHINTARGET, (IntPtr) length, (IntPtr) textPtr); + } + } + + /// Set the search flags used by SearchInTarget. (Scintilla feature 2198) + public void SetSearchFlags(FindOption searchFlags) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSEARCHFLAGS, (IntPtr) searchFlags, (IntPtr) Unused); + } + + /// Get the search flags used by SearchInTarget. (Scintilla feature 2199) + public FindOption GetSearchFlags() + { + return (FindOption)Win32.SendMessage(scintilla, SciMsg.SCI_GETSEARCHFLAGS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Show a call tip containing a definition near position pos. (Scintilla feature 2200) + public unsafe void CallTipShow(int pos, string definition) + { + fixed (byte* definitionPtr = Encoding.UTF8.GetBytes(definition)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSHOW, (IntPtr) pos, (IntPtr) definitionPtr); + } + } + + /// Remove the call tip from the screen. (Scintilla feature 2201) + public void CallTipCancel() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPCANCEL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Is there an active call tip? (Scintilla feature 2202) + public bool CallTipActive() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPACTIVE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Retrieve the position where the caret was before displaying the call tip. (Scintilla feature 2203) + public int CallTipPosStart() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPPOSSTART, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the start position in order to change when backspacing removes the calltip. (Scintilla feature 2214) + public void CallTipSetPosStart(int posStart) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETPOSSTART, (IntPtr) posStart, (IntPtr) Unused); + } + + /// Highlight a segment of the definition. (Scintilla feature 2204) + public void CallTipSetHlt(int highlightStart, int highlightEnd) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETHLT, (IntPtr) highlightStart, (IntPtr) highlightEnd); + } + + /// Set the background colour for the call tip. (Scintilla feature 2205) + public void CallTipSetBack(Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETBACK, back.Value, (IntPtr) Unused); + } + + /// Set the foreground colour for the call tip. (Scintilla feature 2206) + public void CallTipSetFore(Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETFORE, fore.Value, (IntPtr) Unused); + } + + /// Set the foreground colour for the highlighted part of the call tip. (Scintilla feature 2207) + public void CallTipSetForeHlt(Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETFOREHLT, fore.Value, (IntPtr) Unused); + } + + /// Enable use of STYLE_CALLTIP and set call tip tab size in pixels. (Scintilla feature 2212) + public void CallTipUseStyle(int tabSize) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPUSESTYLE, (IntPtr) tabSize, (IntPtr) Unused); + } + + /// Set position of calltip, above or below text. (Scintilla feature 2213) + public void CallTipSetPosition(bool above) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETPOSITION, new IntPtr(above ? 1 : 0), (IntPtr) Unused); + } + + /// Find the display line of a document line taking hidden lines into account. (Scintilla feature 2220) + public int VisibleFromDocLine(int docLine) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_VISIBLEFROMDOCLINE, (IntPtr) docLine, (IntPtr) Unused); + } + + /// Find the document line of a display line taking hidden lines into account. (Scintilla feature 2221) + public int DocLineFromVisible(int displayLine) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_DOCLINEFROMVISIBLE, (IntPtr) displayLine, (IntPtr) Unused); + } + + /// The number of display lines needed to wrap a document line (Scintilla feature 2235) + public int WrapCount(int docLine) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_WRAPCOUNT, (IntPtr) docLine, (IntPtr) Unused); + } + + /// + /// Set the fold level of a line. + /// This encodes an integer level along with flags indicating whether the + /// line is a header and whether it is effectively white space. + /// (Scintilla feature 2222) + /// + public void SetFoldLevel(int line, FoldLevel level) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDLEVEL, (IntPtr) line, (IntPtr) level); + } + + /// Retrieve the fold level of a line. (Scintilla feature 2223) + public FoldLevel GetFoldLevel(int line) + { + return (FoldLevel)Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDLEVEL, (IntPtr) line, (IntPtr) Unused); + } + + /// Find the last child line of a header line. (Scintilla feature 2224) + public int GetLastChild(int line, FoldLevel level) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLASTCHILD, (IntPtr) line, (IntPtr) level); + } + + /// Find the parent line of a child line. (Scintilla feature 2225) + public int GetFoldParent(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDPARENT, (IntPtr) line, (IntPtr) Unused); + } + + /// Make a range of lines visible. (Scintilla feature 2226) + public void ShowLines(int lineStart, int lineEnd) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SHOWLINES, (IntPtr) lineStart, (IntPtr) lineEnd); + } + + /// Make a range of lines invisible. (Scintilla feature 2227) + public void HideLines(int lineStart, int lineEnd) + { + Win32.SendMessage(scintilla, SciMsg.SCI_HIDELINES, (IntPtr) lineStart, (IntPtr) lineEnd); + } + + /// Is a line visible? (Scintilla feature 2228) + public bool GetLineVisible(int line) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEVISIBLE, (IntPtr) line, (IntPtr) Unused); + } + + /// Are all lines visible? (Scintilla feature 2236) + public bool GetAllLinesVisible() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETALLLINESVISIBLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Show the children of a header line. (Scintilla feature 2229) + public void SetFoldExpanded(int line, bool expanded) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDEXPANDED, (IntPtr) line, new IntPtr(expanded ? 1 : 0)); + } + + /// Is a header line expanded? (Scintilla feature 2230) + public bool GetFoldExpanded(int line) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDEXPANDED, (IntPtr) line, (IntPtr) Unused); + } + + /// Switch a header line between expanded and contracted. (Scintilla feature 2231) + public void ToggleFold(int line) + { + Win32.SendMessage(scintilla, SciMsg.SCI_TOGGLEFOLD, (IntPtr) line, (IntPtr) Unused); + } + + /// Switch a header line between expanded and contracted and show some text after the line. (Scintilla feature 2700) + public unsafe void ToggleFoldShowText(int line, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_TOGGLEFOLDSHOWTEXT, (IntPtr) line, (IntPtr) textPtr); + } + } + + /// Set the style of fold display text. (Scintilla feature 2701) + public void FoldDisplayTextSetStyle(FoldDisplayTextStyle style) + { + Win32.SendMessage(scintilla, SciMsg.SCI_FOLDDISPLAYTEXTSETSTYLE, (IntPtr) style, (IntPtr) Unused); + } + + /// Get the style of fold display text. (Scintilla feature 2707) + public FoldDisplayTextStyle FoldDisplayTextGetStyle() + { + return (FoldDisplayTextStyle)Win32.SendMessage(scintilla, SciMsg.SCI_FOLDDISPLAYTEXTGETSTYLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the default fold display text. (Scintilla feature 2722) + public unsafe void SetDefaultFoldDisplayText(string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETDEFAULTFOLDDISPLAYTEXT, (IntPtr) Unused, (IntPtr) textPtr); + } + } + + /// Get the default fold display text. (Scintilla feature 2723) + public unsafe string GetDefaultFoldDisplayText() + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETDEFAULTFOLDDISPLAYTEXT, (IntPtr) Unused, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Expand or contract a fold header. (Scintilla feature 2237) + public void FoldLine(int line, FoldAction action) + { + Win32.SendMessage(scintilla, SciMsg.SCI_FOLDLINE, (IntPtr) line, (IntPtr) action); + } + + /// Expand or contract a fold header and its children. (Scintilla feature 2238) + public void FoldChildren(int line, FoldAction action) + { + Win32.SendMessage(scintilla, SciMsg.SCI_FOLDCHILDREN, (IntPtr) line, (IntPtr) action); + } + + /// Expand a fold header and all children. Use the level argument instead of the line's current level. (Scintilla feature 2239) + public void ExpandChildren(int line, FoldLevel level) + { + Win32.SendMessage(scintilla, SciMsg.SCI_EXPANDCHILDREN, (IntPtr) line, (IntPtr) level); + } + + /// Expand or contract all fold headers. (Scintilla feature 2662) + public void FoldAll(FoldAction action) + { + Win32.SendMessage(scintilla, SciMsg.SCI_FOLDALL, (IntPtr) action, (IntPtr) Unused); + } + + /// Ensure a particular line is visible by expanding any header line hiding it. (Scintilla feature 2232) + public void EnsureVisible(int line) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ENSUREVISIBLE, (IntPtr) line, (IntPtr) Unused); + } + + /// Set automatic folding behaviours. (Scintilla feature 2663) + public void SetAutomaticFold(AutomaticFold automaticFold) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETAUTOMATICFOLD, (IntPtr) automaticFold, (IntPtr) Unused); + } + + /// Get automatic folding behaviours. (Scintilla feature 2664) + public AutomaticFold GetAutomaticFold() + { + return (AutomaticFold)Win32.SendMessage(scintilla, SciMsg.SCI_GETAUTOMATICFOLD, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set some style options for folding. (Scintilla feature 2233) + public void SetFoldFlags(FoldFlag flags) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDFLAGS, (IntPtr) flags, (IntPtr) Unused); + } + + /// + /// Ensure a particular line is visible by expanding any header line hiding it. + /// Use the currently set visibility policy to determine which range to display. + /// (Scintilla feature 2234) + /// + public void EnsureVisibleEnforcePolicy(int line) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ENSUREVISIBLEENFORCEPOLICY, (IntPtr) line, (IntPtr) Unused); + } + + /// Sets whether a tab pressed when caret is within indentation indents. (Scintilla feature 2260) + public void SetTabIndents(bool tabIndents) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTABINDENTS, new IntPtr(tabIndents ? 1 : 0), (IntPtr) Unused); + } + + /// Does a tab pressed when caret is within indentation indent? (Scintilla feature 2261) + public bool GetTabIndents() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTABINDENTS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets whether a backspace pressed when caret is within indentation unindents. (Scintilla feature 2262) + public void SetBackSpaceUnIndents(bool bsUnIndents) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETBACKSPACEUNINDENTS, new IntPtr(bsUnIndents ? 1 : 0), (IntPtr) Unused); + } + + /// Does a backspace pressed when caret is within indentation unindent? (Scintilla feature 2263) + public bool GetBackSpaceUnIndents() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETBACKSPACEUNINDENTS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2264) + public void SetMouseDwellTime(int periodMilliseconds) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSEDWELLTIME, (IntPtr) periodMilliseconds, (IntPtr) Unused); + } + + /// Retrieve the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2265) + public int GetMouseDwellTime() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSEDWELLTIME, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get position of start of word. (Scintilla feature 2266) + public int WordStartPosition(int pos, bool onlyWordCharacters) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_WORDSTARTPOSITION, (IntPtr) pos, new IntPtr(onlyWordCharacters ? 1 : 0)); + } + + /// Get position of end of word. (Scintilla feature 2267) + public int WordEndPosition(int pos, bool onlyWordCharacters) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_WORDENDPOSITION, (IntPtr) pos, new IntPtr(onlyWordCharacters ? 1 : 0)); + } + + /// Is the range start..end considered a word? (Scintilla feature 2691) + public bool IsRangeWord(int start, int end) + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_ISRANGEWORD, (IntPtr) start, (IntPtr) end); + } + + /// Sets limits to idle styling. (Scintilla feature 2692) + public void SetIdleStyling(IdleStyling idleStyling) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETIDLESTYLING, (IntPtr) idleStyling, (IntPtr) Unused); + } + + /// Retrieve the limits to idle styling. (Scintilla feature 2693) + public IdleStyling GetIdleStyling() + { + return (IdleStyling)Win32.SendMessage(scintilla, SciMsg.SCI_GETIDLESTYLING, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets whether text is word wrapped. (Scintilla feature 2268) + public void SetWrapMode(Wrap wrapMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPMODE, (IntPtr) wrapMode, (IntPtr) Unused); + } + + /// Retrieve whether text is word wrapped. (Scintilla feature 2269) + public Wrap GetWrapMode() + { + return (Wrap)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPMODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the display mode of visual flags for wrapped lines. (Scintilla feature 2460) + public void SetWrapVisualFlags(WrapVisualFlag wrapVisualFlags) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPVISUALFLAGS, (IntPtr) wrapVisualFlags, (IntPtr) Unused); + } + + /// Retrive the display mode of visual flags for wrapped lines. (Scintilla feature 2461) + public WrapVisualFlag GetWrapVisualFlags() + { + return (WrapVisualFlag)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPVISUALFLAGS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the location of visual flags for wrapped lines. (Scintilla feature 2462) + public void SetWrapVisualFlagsLocation(WrapVisualLocation wrapVisualFlagsLocation) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPVISUALFLAGSLOCATION, (IntPtr) wrapVisualFlagsLocation, (IntPtr) Unused); + } + + /// Retrive the location of visual flags for wrapped lines. (Scintilla feature 2463) + public WrapVisualLocation GetWrapVisualFlagsLocation() + { + return (WrapVisualLocation)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPVISUALFLAGSLOCATION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the start indent for wrapped lines. (Scintilla feature 2464) + public void SetWrapStartIndent(int indent) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPSTARTINDENT, (IntPtr) indent, (IntPtr) Unused); + } + + /// Retrive the start indent for wrapped lines. (Scintilla feature 2465) + public int GetWrapStartIndent() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPSTARTINDENT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets how wrapped sublines are placed. Default is fixed. (Scintilla feature 2472) + public void SetWrapIndentMode(WrapIndentMode wrapIndentMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPINDENTMODE, (IntPtr) wrapIndentMode, (IntPtr) Unused); + } + + /// Retrieve how wrapped sublines are placed. Default is fixed. (Scintilla feature 2473) + public WrapIndentMode GetWrapIndentMode() + { + return (WrapIndentMode)Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPINDENTMODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the degree of caching of layout information. (Scintilla feature 2272) + public void SetLayoutCache(LineCache cacheMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETLAYOUTCACHE, (IntPtr) cacheMode, (IntPtr) Unused); + } + + /// Retrieve the degree of caching of layout information. (Scintilla feature 2273) + public LineCache GetLayoutCache() + { + return (LineCache)Win32.SendMessage(scintilla, SciMsg.SCI_GETLAYOUTCACHE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the document width assumed for scrolling. (Scintilla feature 2274) + public void SetScrollWidth(int pixelWidth) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSCROLLWIDTH, (IntPtr) pixelWidth, (IntPtr) Unused); + } + + /// Retrieve the document width assumed for scrolling. (Scintilla feature 2275) + public int GetScrollWidth() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSCROLLWIDTH, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets whether the maximum width line displayed is used to set scroll width. (Scintilla feature 2516) + public void SetScrollWidthTracking(bool tracking) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSCROLLWIDTHTRACKING, new IntPtr(tracking ? 1 : 0), (IntPtr) Unused); + } + + /// Retrieve whether the scroll width tracks wide lines. (Scintilla feature 2517) + public bool GetScrollWidthTracking() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSCROLLWIDTHTRACKING, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Measure the pixel width of some text in a particular style. + /// NUL terminated text argument. + /// Does not handle tab or control characters. + /// (Scintilla feature 2276) + /// + public unsafe int TextWidth(int style, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_TEXTWIDTH, (IntPtr) style, (IntPtr) textPtr); + } + } + + /// + /// Sets the scroll range so that maximum scroll position has + /// the last line at the bottom of the view (default). + /// Setting this to false allows scrolling one page below the last line. + /// (Scintilla feature 2277) + /// + public void SetEndAtLastLine(bool endAtLastLine) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETENDATLASTLINE, new IntPtr(endAtLastLine ? 1 : 0), (IntPtr) Unused); + } + + /// + /// Retrieve whether the maximum scroll position has the last + /// line at the bottom of the view. + /// (Scintilla feature 2278) + /// + public bool GetEndAtLastLine() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETENDATLASTLINE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Retrieve the height of a particular line of text in pixels. (Scintilla feature 2279) + public int TextHeight(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_TEXTHEIGHT, (IntPtr) line, (IntPtr) Unused); + } + + /// Show or hide the vertical scroll bar. (Scintilla feature 2280) + public void SetVScrollBar(bool visible) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETVSCROLLBAR, new IntPtr(visible ? 1 : 0), (IntPtr) Unused); + } + + /// Is the vertical scroll bar visible? (Scintilla feature 2281) + public bool GetVScrollBar() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETVSCROLLBAR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Append a string to the end of the document without changing the selection. (Scintilla feature 2282) + public unsafe void AppendText(int length, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_APPENDTEXT, (IntPtr) length, (IntPtr) textPtr); + } + } + + /// How many phases is drawing done in? (Scintilla feature 2673) + public PhasesDraw GetPhasesDraw() + { + return (PhasesDraw)Win32.SendMessage(scintilla, SciMsg.SCI_GETPHASESDRAW, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// In one phase draw, text is drawn in a series of rectangular blocks with no overlap. + /// In two phase draw, text is drawn in a series of lines allowing runs to overlap horizontally. + /// In multiple phase draw, each element is drawn over the whole drawing area, allowing text + /// to overlap from one line to the next. + /// (Scintilla feature 2674) + /// + public void SetPhasesDraw(PhasesDraw phases) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETPHASESDRAW, (IntPtr) phases, (IntPtr) Unused); + } + + /// Choose the quality level for text from the FontQuality enumeration. (Scintilla feature 2611) + public void SetFontQuality(FontQuality fontQuality) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETFONTQUALITY, (IntPtr) fontQuality, (IntPtr) Unused); + } + + /// Retrieve the quality level for text. (Scintilla feature 2612) + public FontQuality GetFontQuality() + { + return (FontQuality)Win32.SendMessage(scintilla, SciMsg.SCI_GETFONTQUALITY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Scroll so that a display line is at the top of the display. (Scintilla feature 2613) + public void SetFirstVisibleLine(int displayLine) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETFIRSTVISIBLELINE, (IntPtr) displayLine, (IntPtr) Unused); + } + + /// Change the effect of pasting when there are multiple selections. (Scintilla feature 2614) + public void SetMultiPaste(MultiPaste multiPaste) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMULTIPASTE, (IntPtr) multiPaste, (IntPtr) Unused); + } + + /// Retrieve the effect of pasting when there are multiple selections. (Scintilla feature 2615) + public MultiPaste GetMultiPaste() + { + return (MultiPaste)Win32.SendMessage(scintilla, SciMsg.SCI_GETMULTIPASTE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Retrieve the value of a tag from a regular expression search. + /// Result is NUL-terminated. + /// (Scintilla feature 2616) + /// + public unsafe string GetTag(int tagNumber) + { + byte[] tagValueBuffer = new byte[10000]; + fixed (byte* tagValuePtr = tagValueBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETTAG, (IntPtr) tagNumber, (IntPtr) tagValuePtr); + return Encoding.UTF8.GetString(tagValueBuffer).TrimEnd('\0'); + } + } + + /// Join the lines in the target. (Scintilla feature 2288) + public void LinesJoin() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINESJOIN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Split the lines in the target into lines that are less wide than pixelWidth + /// where possible. + /// (Scintilla feature 2289) + /// + public void LinesSplit(int pixelWidth) + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINESSPLIT, (IntPtr) pixelWidth, (IntPtr) Unused); + } + + /// Set one of the colours used as a chequerboard pattern in the fold margin (Scintilla feature 2290) + public void SetFoldMarginColour(bool useSetting, Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDMARGINCOLOUR, new IntPtr(useSetting ? 1 : 0), back.Value); + } + + /// Set the other colour used as a chequerboard pattern in the fold margin (Scintilla feature 2291) + public void SetFoldMarginHiColour(bool useSetting, Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDMARGINHICOLOUR, new IntPtr(useSetting ? 1 : 0), fore.Value); + } + + /// Enable or disable accessibility. (Scintilla feature 2702) + public void SetAccessibility(Accessibility accessibility) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETACCESSIBILITY, (IntPtr) accessibility, (IntPtr) Unused); + } + + /// Report accessibility status. (Scintilla feature 2703) + public Accessibility GetAccessibility() + { + return (Accessibility)Win32.SendMessage(scintilla, SciMsg.SCI_GETACCESSIBILITY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret down one line. (Scintilla feature 2300) + public void LineDown() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret down one line extending selection to new caret position. (Scintilla feature 2301) + public void LineDownExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWNEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret up one line. (Scintilla feature 2302) + public void LineUp() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEUP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret up one line extending selection to new caret position. (Scintilla feature 2303) + public void LineUpExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEUPEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret left one character. (Scintilla feature 2304) + public void CharLeft() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret left one character extending selection to new caret position. (Scintilla feature 2305) + public void CharLeftExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret right one character. (Scintilla feature 2306) + public void CharRight() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret right one character extending selection to new caret position. (Scintilla feature 2307) + public void CharRightExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret left one word. (Scintilla feature 2308) + public void WordLeft() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret left one word extending selection to new caret position. (Scintilla feature 2309) + public void WordLeftExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret right one word. (Scintilla feature 2310) + public void WordRight() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret right one word extending selection to new caret position. (Scintilla feature 2311) + public void WordRightExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to first position on line. (Scintilla feature 2312) + public void Home() + { + Win32.SendMessage(scintilla, SciMsg.SCI_HOME, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to first position on line extending selection to new caret position. (Scintilla feature 2313) + public void HomeExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_HOMEEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to last position on line. (Scintilla feature 2314) + public void LineEnd() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to last position on line extending selection to new caret position. (Scintilla feature 2315) + public void LineEndExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to first position in document. (Scintilla feature 2316) + public void DocumentStart() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTSTART, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to first position in document extending selection to new caret position. (Scintilla feature 2317) + public void DocumentStartExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTSTARTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to last position in document. (Scintilla feature 2318) + public void DocumentEnd() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to last position in document extending selection to new caret position. (Scintilla feature 2319) + public void DocumentEndExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTENDEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret one page up. (Scintilla feature 2320) + public void PageUp() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret one page up extending selection to new caret position. (Scintilla feature 2321) + public void PageUpExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUPEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret one page down. (Scintilla feature 2322) + public void PageDown() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret one page down extending selection to new caret position. (Scintilla feature 2323) + public void PageDownExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWNEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Switch from insert to overtype mode or the reverse. (Scintilla feature 2324) + public void EditToggleOvertype() + { + Win32.SendMessage(scintilla, SciMsg.SCI_EDITTOGGLEOVERTYPE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Cancel any modes such as call tip or auto-completion list display. (Scintilla feature 2325) + public void Cancel() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CANCEL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Delete the selection or if no selection, the character before the caret. (Scintilla feature 2326) + public void DeleteBack() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DELETEBACK, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// If selection is empty or all on one line replace the selection with a tab character. + /// If more than one line selected, indent the lines. + /// (Scintilla feature 2327) + /// + public void Tab() + { + Win32.SendMessage(scintilla, SciMsg.SCI_TAB, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Dedent the selected lines. (Scintilla feature 2328) + public void BackTab() + { + Win32.SendMessage(scintilla, SciMsg.SCI_BACKTAB, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Insert a new line, may use a CRLF, CR or LF depending on EOL mode. (Scintilla feature 2329) + public void NewLine() + { + Win32.SendMessage(scintilla, SciMsg.SCI_NEWLINE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Insert a Form Feed character. (Scintilla feature 2330) + public void FormFeed() + { + Win32.SendMessage(scintilla, SciMsg.SCI_FORMFEED, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Move caret to before first visible character on line. + /// If already there move to first character on line. + /// (Scintilla feature 2331) + /// + public void VCHome() + { + Win32.SendMessage(scintilla, SciMsg.SCI_VCHOME, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Like VCHome but extending selection to new caret position. (Scintilla feature 2332) + public void VCHomeExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Magnify the displayed text by increasing the sizes by 1 point. (Scintilla feature 2333) + public void ZoomIn() + { + Win32.SendMessage(scintilla, SciMsg.SCI_ZOOMIN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Make the displayed text smaller by decreasing the sizes by 1 point. (Scintilla feature 2334) + public void ZoomOut() + { + Win32.SendMessage(scintilla, SciMsg.SCI_ZOOMOUT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Delete the word to the left of the caret. (Scintilla feature 2335) + public void DelWordLeft() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDLEFT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Delete the word to the right of the caret. (Scintilla feature 2336) + public void DelWordRight() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDRIGHT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Delete the word to the right of the caret, but not the trailing non-word characters. (Scintilla feature 2518) + public void DelWordRightEnd() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDRIGHTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Cut the line containing the caret. (Scintilla feature 2337) + public void LineCut() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINECUT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Delete the line containing the caret. (Scintilla feature 2338) + public void LineDelete() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEDELETE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Switch the current line with the previous. (Scintilla feature 2339) + public void LineTranspose() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINETRANSPOSE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Reverse order of selected lines. (Scintilla feature 2354) + public void LineReverse() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEREVERSE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Duplicate the current line. (Scintilla feature 2404) + public void LineDuplicate() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEDUPLICATE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Transform the selection to lower case. (Scintilla feature 2340) + public void LowerCase() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LOWERCASE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Transform the selection to upper case. (Scintilla feature 2341) + public void UpperCase() + { + Win32.SendMessage(scintilla, SciMsg.SCI_UPPERCASE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Scroll the document down, keeping the caret visible. (Scintilla feature 2342) + public void LineScrollDown() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLLDOWN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Scroll the document up, keeping the caret visible. (Scintilla feature 2343) + public void LineScrollUp() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLLUP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Delete the selection or if no selection, the character before the caret. + /// Will not delete the character before at the start of a line. + /// (Scintilla feature 2344) + /// + public void DeleteBackNotLine() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DELETEBACKNOTLINE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to first position on display line. (Scintilla feature 2345) + public void HomeDisplay() + { + Win32.SendMessage(scintilla, SciMsg.SCI_HOMEDISPLAY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Move caret to first position on display line extending selection to + /// new caret position. + /// (Scintilla feature 2346) + /// + public void HomeDisplayExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_HOMEDISPLAYEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to last position on display line. (Scintilla feature 2347) + public void LineEndDisplay() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDDISPLAY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Move caret to last position on display line extending selection to new + /// caret position. + /// (Scintilla feature 2348) + /// + public void LineEndDisplayExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDDISPLAYEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Like Home but when word-wrap is enabled goes first to start of display line + /// HomeDisplay, then to start of document line Home. + /// (Scintilla feature 2349) + /// + public void HomeWrap() + { + Win32.SendMessage(scintilla, SciMsg.SCI_HOMEWRAP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Like HomeExtend but when word-wrap is enabled extends first to start of display line + /// HomeDisplayExtend, then to start of document line HomeExtend. + /// (Scintilla feature 2450) + /// + public void HomeWrapExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_HOMEWRAPEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Like LineEnd but when word-wrap is enabled goes first to end of display line + /// LineEndDisplay, then to start of document line LineEnd. + /// (Scintilla feature 2451) + /// + public void LineEndWrap() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDWRAP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Like LineEndExtend but when word-wrap is enabled extends first to end of display line + /// LineEndDisplayExtend, then to start of document line LineEndExtend. + /// (Scintilla feature 2452) + /// + public void LineEndWrapExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDWRAPEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Like VCHome but when word-wrap is enabled goes first to start of display line + /// VCHomeDisplay, then behaves like VCHome. + /// (Scintilla feature 2453) + /// + public void VCHomeWrap() + { + Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEWRAP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Like VCHomeExtend but when word-wrap is enabled extends first to start of display line + /// VCHomeDisplayExtend, then behaves like VCHomeExtend. + /// (Scintilla feature 2454) + /// + public void VCHomeWrapExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEWRAPEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Copy the line containing the caret. (Scintilla feature 2455) + public void LineCopy() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINECOPY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move the caret inside current view if it's not there already. (Scintilla feature 2401) + public void MoveCaretInsideView() + { + Win32.SendMessage(scintilla, SciMsg.SCI_MOVECARETINSIDEVIEW, (IntPtr) Unused, (IntPtr) Unused); + } + + /// How many characters are on a line, including end of line characters? (Scintilla feature 2350) + public int LineLength(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_LINELENGTH, (IntPtr) line, (IntPtr) Unused); + } + + /// Highlight the characters at two positions. (Scintilla feature 2351) + public void BraceHighlight(int posA, int posB) + { + Win32.SendMessage(scintilla, SciMsg.SCI_BRACEHIGHLIGHT, (IntPtr) posA, (IntPtr) posB); + } + + /// Use specified indicator to highlight matching braces instead of changing their style. (Scintilla feature 2498) + public void BraceHighlightIndicator(bool useSetting, int indicator) + { + Win32.SendMessage(scintilla, SciMsg.SCI_BRACEHIGHLIGHTINDICATOR, new IntPtr(useSetting ? 1 : 0), (IntPtr) indicator); + } + + /// Highlight the character at a position indicating there is no matching brace. (Scintilla feature 2352) + public void BraceBadLight(int pos) + { + Win32.SendMessage(scintilla, SciMsg.SCI_BRACEBADLIGHT, (IntPtr) pos, (IntPtr) Unused); + } + + /// Use specified indicator to highlight non matching brace instead of changing its style. (Scintilla feature 2499) + public void BraceBadLightIndicator(bool useSetting, int indicator) + { + Win32.SendMessage(scintilla, SciMsg.SCI_BRACEBADLIGHTINDICATOR, new IntPtr(useSetting ? 1 : 0), (IntPtr) indicator); + } + + /// + /// Find the position of a matching brace or INVALID_POSITION if no match. + /// The maxReStyle must be 0 for now. It may be defined in a future release. + /// (Scintilla feature 2353) + /// + public int BraceMatch(int pos, int maxReStyle) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_BRACEMATCH, (IntPtr) pos, (IntPtr) maxReStyle); + } + + /// Are the end of line characters visible? (Scintilla feature 2355) + public bool GetViewEOL() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETVIEWEOL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Make the end of line characters visible or invisible. (Scintilla feature 2356) + public void SetViewEOL(bool visible) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETVIEWEOL, new IntPtr(visible ? 1 : 0), (IntPtr) Unused); + } + + /// Retrieve a pointer to the document object. (Scintilla feature 2357) + public IntPtr GetDocPointer() + { + return Win32.SendMessage(scintilla, SciMsg.SCI_GETDOCPOINTER, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Change the document object used. (Scintilla feature 2358) + public void SetDocPointer(IntPtr doc) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETDOCPOINTER, (IntPtr) Unused, (IntPtr) doc); + } + + /// Set which document modification events are sent to the container. (Scintilla feature 2359) + public void SetModEventMask(ModificationFlags eventMask) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMODEVENTMASK, (IntPtr) eventMask, (IntPtr) Unused); + } + + /// Retrieve the column number which text should be kept within. (Scintilla feature 2360) + public int GetEdgeColumn() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGECOLUMN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set the column number of the edge. + /// If text goes past the edge then it is highlighted. + /// (Scintilla feature 2361) + /// + public void SetEdgeColumn(int column) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGECOLUMN, (IntPtr) column, (IntPtr) Unused); + } + + /// Retrieve the edge highlight mode. (Scintilla feature 2362) + public EdgeVisualStyle GetEdgeMode() + { + return (EdgeVisualStyle)Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGEMODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// The edge may be displayed by a line (EDGE_LINE/EDGE_MULTILINE) or by highlighting text that + /// goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). + /// (Scintilla feature 2363) + /// + public void SetEdgeMode(EdgeVisualStyle edgeMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGEMODE, (IntPtr) edgeMode, (IntPtr) Unused); + } + + /// Retrieve the colour used in edge indication. (Scintilla feature 2364) + public Colour GetEdgeColour() + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGECOLOUR, (IntPtr) Unused, (IntPtr) Unused)); + } + + /// Change the colour used in edge indication. (Scintilla feature 2365) + public void SetEdgeColour(Colour edgeColour) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGECOLOUR, edgeColour.Value, (IntPtr) Unused); + } + + /// Add a new vertical edge to the view. (Scintilla feature 2694) + public void MultiEdgeAddLine(int column, Colour edgeColour) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MULTIEDGEADDLINE, (IntPtr) column, edgeColour.Value); + } + + /// Clear all vertical edges. (Scintilla feature 2695) + public void MultiEdgeClearAll() + { + Win32.SendMessage(scintilla, SciMsg.SCI_MULTIEDGECLEARALL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the current caret position to be the search anchor. (Scintilla feature 2366) + public void SearchAnchor() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHANCHOR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Find some text starting at the search anchor. + /// Does not ensure the selection is visible. + /// (Scintilla feature 2367) + /// + public unsafe int SearchNext(FindOption searchFlags, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHNEXT, (IntPtr) searchFlags, (IntPtr) textPtr); + } + } + + /// + /// Find some text starting at the search anchor and moving backwards. + /// Does not ensure the selection is visible. + /// (Scintilla feature 2368) + /// + public unsafe int SearchPrev(FindOption searchFlags, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHPREV, (IntPtr) searchFlags, (IntPtr) textPtr); + } + } + + /// Retrieves the number of lines completely visible. (Scintilla feature 2370) + public int LinesOnScreen() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_LINESONSCREEN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set whether a pop up menu is displayed automatically when the user presses + /// the wrong mouse button on certain areas. + /// (Scintilla feature 2371) + /// + public void UsePopUp(PopUp popUpMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_USEPOPUP, (IntPtr) popUpMode, (IntPtr) Unused); + } + + /// Is the selection rectangular? The alternative is the more common stream selection. (Scintilla feature 2372) + public bool SelectionIsRectangle() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_SELECTIONISRECTANGLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set the zoom level. This number of points is added to the size of all fonts. + /// It may be positive to magnify or negative to reduce. + /// (Scintilla feature 2373) + /// + public void SetZoom(int zoomInPoints) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETZOOM, (IntPtr) zoomInPoints, (IntPtr) Unused); + } + + /// Retrieve the zoom level. (Scintilla feature 2374) + public int GetZoom() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETZOOM, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Create a new document object. + /// Starts with reference count of 1 and not selected into editor. + /// (Scintilla feature 2375) + /// + public IntPtr CreateDocument(int bytes, DocumentOption documentOptions) + { + return Win32.SendMessage(scintilla, SciMsg.SCI_CREATEDOCUMENT, (IntPtr) bytes, (IntPtr) documentOptions); + } + + /// Extend life of document. (Scintilla feature 2376) + public void AddRefDocument(IntPtr doc) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ADDREFDOCUMENT, (IntPtr) Unused, (IntPtr) doc); + } + + /// Release a reference to the document, deleting document if it fades to black. (Scintilla feature 2377) + public void ReleaseDocument(IntPtr doc) + { + Win32.SendMessage(scintilla, SciMsg.SCI_RELEASEDOCUMENT, (IntPtr) Unused, (IntPtr) doc); + } + + /// Get which document options are set. (Scintilla feature 2379) + public DocumentOption GetDocumentOptions() + { + return (DocumentOption)Win32.SendMessage(scintilla, SciMsg.SCI_GETDOCUMENTOPTIONS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get which document modification events are sent to the container. (Scintilla feature 2378) + public ModificationFlags GetModEventMask() + { + return (ModificationFlags)Win32.SendMessage(scintilla, SciMsg.SCI_GETMODEVENTMASK, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set whether command events are sent to the container. (Scintilla feature 2717) + public void SetCommandEvents(bool commandEvents) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCOMMANDEVENTS, new IntPtr(commandEvents ? 1 : 0), (IntPtr) Unused); + } + + /// Get whether command events are sent to the container. (Scintilla feature 2718) + public bool GetCommandEvents() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCOMMANDEVENTS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Change internal focus flag. (Scintilla feature 2380) + public void SetFocus(bool focus) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETFOCUS, new IntPtr(focus ? 1 : 0), (IntPtr) Unused); + } + + /// Get internal focus flag. (Scintilla feature 2381) + public bool GetFocus() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETFOCUS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Change error status - 0 = OK. (Scintilla feature 2382) + public void SetStatus(Status status) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSTATUS, (IntPtr) status, (IntPtr) Unused); + } + + /// Get error status. (Scintilla feature 2383) + public Status GetStatus() + { + return (Status)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTATUS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set whether the mouse is captured when its button is pressed. (Scintilla feature 2384) + public void SetMouseDownCaptures(bool captures) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSEDOWNCAPTURES, new IntPtr(captures ? 1 : 0), (IntPtr) Unused); + } + + /// Get whether mouse gets captured. (Scintilla feature 2385) + public bool GetMouseDownCaptures() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSEDOWNCAPTURES, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set whether the mouse wheel can be active outside the window. (Scintilla feature 2696) + public void SetMouseWheelCaptures(bool captures) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSEWHEELCAPTURES, new IntPtr(captures ? 1 : 0), (IntPtr) Unused); + } + + /// Get whether mouse wheel can be active outside the window. (Scintilla feature 2697) + public bool GetMouseWheelCaptures() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSEWHEELCAPTURES, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the cursor to one of the SC_CURSOR* values. (Scintilla feature 2386) + public void SetCursor(CursorShape cursorType) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCURSOR, (IntPtr) cursorType, (IntPtr) Unused); + } + + /// Get cursor type. (Scintilla feature 2387) + public CursorShape GetCursor() + { + return (CursorShape)Win32.SendMessage(scintilla, SciMsg.SCI_GETCURSOR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Change the way control characters are displayed: + /// If symbol is < 32, keep the drawn way, else, use the given character. + /// (Scintilla feature 2388) + /// + public void SetControlCharSymbol(int symbol) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCONTROLCHARSYMBOL, (IntPtr) symbol, (IntPtr) Unused); + } + + /// Get the way control characters are displayed. (Scintilla feature 2389) + public int GetControlCharSymbol() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCONTROLCHARSYMBOL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move to the previous change in capitalisation. (Scintilla feature 2390) + public void WordPartLeft() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTLEFT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Move to the previous change in capitalisation extending selection + /// to new caret position. + /// (Scintilla feature 2391) + /// + public void WordPartLeftExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTLEFTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move to the change next in capitalisation. (Scintilla feature 2392) + public void WordPartRight() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTRIGHT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Move to the next change in capitalisation extending selection + /// to new caret position. + /// (Scintilla feature 2393) + /// + public void WordPartRightExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTRIGHTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set the way the display area is determined when a particular line + /// is to be moved to by Find, FindNext, GotoLine, etc. + /// (Scintilla feature 2394) + /// + public void SetVisiblePolicy(VisiblePolicy visiblePolicy, int visibleSlop) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETVISIBLEPOLICY, (IntPtr) visiblePolicy, (IntPtr) visibleSlop); + } + + /// Delete back from the current position to the start of the line. (Scintilla feature 2395) + public void DelLineLeft() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DELLINELEFT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Delete forwards from the current position to the end of the line. (Scintilla feature 2396) + public void DelLineRight() + { + Win32.SendMessage(scintilla, SciMsg.SCI_DELLINERIGHT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the xOffset (ie, horizontal scroll position). (Scintilla feature 2397) + public void SetXOffset(int xOffset) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETXOFFSET, (IntPtr) xOffset, (IntPtr) Unused); + } + + /// Get the xOffset (ie, horizontal scroll position). (Scintilla feature 2398) + public int GetXOffset() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETXOFFSET, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the last x chosen value to be the caret x position. (Scintilla feature 2399) + public void ChooseCaretX() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CHOOSECARETX, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the focus to this Scintilla widget. (Scintilla feature 2400) + public void GrabFocus() + { + Win32.SendMessage(scintilla, SciMsg.SCI_GRABFOCUS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set the way the caret is kept visible when going sideways. + /// The exclusion zone is given in pixels. + /// (Scintilla feature 2402) + /// + public void SetXCaretPolicy(CaretPolicy caretPolicy, int caretSlop) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETXCARETPOLICY, (IntPtr) caretPolicy, (IntPtr) caretSlop); + } + + /// + /// Set the way the line the caret is on is kept visible. + /// The exclusion zone is given in lines. + /// (Scintilla feature 2403) + /// + public void SetYCaretPolicy(CaretPolicy caretPolicy, int caretSlop) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETYCARETPOLICY, (IntPtr) caretPolicy, (IntPtr) caretSlop); + } + + /// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). (Scintilla feature 2406) + public void SetPrintWrapMode(Wrap wrapMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTWRAPMODE, (IntPtr) wrapMode, (IntPtr) Unused); + } + + /// Is printing line wrapped? (Scintilla feature 2407) + public Wrap GetPrintWrapMode() + { + return (Wrap)Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTWRAPMODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set a fore colour for active hotspots. (Scintilla feature 2410) + public void SetHotspotActiveFore(bool useSetting, Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEFORE, new IntPtr(useSetting ? 1 : 0), fore.Value); + } + + /// Get the fore colour for active hotspots. (Scintilla feature 2494) + public Colour GetHotspotActiveFore() + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEFORE, (IntPtr) Unused, (IntPtr) Unused)); + } + + /// Set a back colour for active hotspots. (Scintilla feature 2411) + public void SetHotspotActiveBack(bool useSetting, Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEBACK, new IntPtr(useSetting ? 1 : 0), back.Value); + } + + /// Get the back colour for active hotspots. (Scintilla feature 2495) + public Colour GetHotspotActiveBack() + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEBACK, (IntPtr) Unused, (IntPtr) Unused)); + } + + /// Enable / Disable underlining active hotspots. (Scintilla feature 2412) + public void SetHotspotActiveUnderline(bool underline) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEUNDERLINE, new IntPtr(underline ? 1 : 0), (IntPtr) Unused); + } + + /// Get whether underlining for active hotspots. (Scintilla feature 2496) + public bool GetHotspotActiveUnderline() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEUNDERLINE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Limit hotspots to single line so hotspots on two lines don't merge. (Scintilla feature 2421) + public void SetHotspotSingleLine(bool singleLine) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTSINGLELINE, new IntPtr(singleLine ? 1 : 0), (IntPtr) Unused); + } + + /// Get the HotspotSingleLine property (Scintilla feature 2497) + public bool GetHotspotSingleLine() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTSINGLELINE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret down one paragraph (delimited by empty lines). (Scintilla feature 2413) + public void ParaDown() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PARADOWN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Extend selection down one paragraph (delimited by empty lines). (Scintilla feature 2414) + public void ParaDownExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PARADOWNEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret up one paragraph (delimited by empty lines). (Scintilla feature 2415) + public void ParaUp() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PARAUP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Extend selection up one paragraph (delimited by empty lines). (Scintilla feature 2416) + public void ParaUpExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PARAUPEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Given a valid document position, return the previous position taking code + /// page into account. Returns 0 if passed 0. + /// (Scintilla feature 2417) + /// + public int PositionBefore(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONBEFORE, (IntPtr) pos, (IntPtr) Unused); + } + + /// + /// Given a valid document position, return the next position taking code + /// page into account. Maximum value returned is the last position in the document. + /// (Scintilla feature 2418) + /// + public int PositionAfter(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONAFTER, (IntPtr) pos, (IntPtr) Unused); + } + + /// + /// Given a valid document position, return a position that differs in a number + /// of characters. Returned value is always between 0 and last position in document. + /// (Scintilla feature 2670) + /// + public int PositionRelative(int pos, int relative) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONRELATIVE, (IntPtr) pos, (IntPtr) relative); + } + + /// + /// Given a valid document position, return a position that differs in a number + /// of UTF-16 code units. Returned value is always between 0 and last position in document. + /// The result may point half way (2 bytes) inside a non-BMP character. + /// (Scintilla feature 2716) + /// + public int PositionRelativeCodeUnits(int pos, int relative) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONRELATIVECODEUNITS, (IntPtr) pos, (IntPtr) relative); + } + + /// Copy a range of text to the clipboard. Positions are clipped into the document. (Scintilla feature 2419) + public void CopyRange(int start, int end) + { + Win32.SendMessage(scintilla, SciMsg.SCI_COPYRANGE, (IntPtr) start, (IntPtr) end); + } + + /// Copy argument text to the clipboard. (Scintilla feature 2420) + public unsafe void CopyText(int length, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_COPYTEXT, (IntPtr) length, (IntPtr) textPtr); + } + } + + /// + /// Set the selection mode to stream (SC_SEL_STREAM) or rectangular (SC_SEL_RECTANGLE/SC_SEL_THIN) or + /// by lines (SC_SEL_LINES). + /// (Scintilla feature 2422) + /// + public void SetSelectionMode(SelectionMode selectionMode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONMODE, (IntPtr) selectionMode, (IntPtr) Unused); + } + + /// Get the mode of the current selection. (Scintilla feature 2423) + public SelectionMode GetSelectionMode() + { + return (SelectionMode)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONMODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get whether or not regular caret moves will extend or reduce the selection. (Scintilla feature 2706) + public bool GetMoveExtendsSelection() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOVEEXTENDSSELECTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2424) + public int GetLineSelStartPosition(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESELSTARTPOSITION, (IntPtr) line, (IntPtr) Unused); + } + + /// Retrieve the position of the end of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2425) + public int GetLineSelEndPosition(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESELENDPOSITION, (IntPtr) line, (IntPtr) Unused); + } + + /// Move caret down one line, extending rectangular selection to new caret position. (Scintilla feature 2426) + public void LineDownRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWNRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret up one line, extending rectangular selection to new caret position. (Scintilla feature 2427) + public void LineUpRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEUPRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret left one character, extending rectangular selection to new caret position. (Scintilla feature 2428) + public void CharLeftRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFTRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret right one character, extending rectangular selection to new caret position. (Scintilla feature 2429) + public void CharRightRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHTRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to first position on line, extending rectangular selection to new caret position. (Scintilla feature 2430) + public void HomeRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_HOMERECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Move caret to before first visible character on line. + /// If already there move to first character on line. + /// In either case, extend rectangular selection to new caret position. + /// (Scintilla feature 2431) + /// + public void VCHomeRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMERECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to last position on line, extending rectangular selection to new caret position. (Scintilla feature 2432) + public void LineEndRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret one page up, extending rectangular selection to new caret position. (Scintilla feature 2433) + public void PageUpRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUPRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret one page down, extending rectangular selection to new caret position. (Scintilla feature 2434) + public void PageDownRectExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWNRECTEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to top of page, or one page up if already at top of page. (Scintilla feature 2435) + public void StutteredPageUp() + { + Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEUP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to top of page, or one page up if already at top of page, extending selection to new caret position. (Scintilla feature 2436) + public void StutteredPageUpExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEUPEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to bottom of page, or one page down if already at bottom of page. (Scintilla feature 2437) + public void StutteredPageDown() + { + Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEDOWN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position. (Scintilla feature 2438) + public void StutteredPageDownExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEDOWNEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret left one word, position cursor at end of word. (Scintilla feature 2439) + public void WordLeftEnd() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret left one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2440) + public void WordLeftEndExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTENDEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret right one word, position cursor at end of word. (Scintilla feature 2441) + public void WordRightEnd() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move caret right one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2442) + public void WordRightEndExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTENDEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set the set of characters making up whitespace for when moving or selecting by word. + /// Should be called after SetWordChars. + /// (Scintilla feature 2443) + /// + public unsafe void SetWhitespaceChars(string characters) + { + fixed (byte* charactersPtr = Encoding.UTF8.GetBytes(characters)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACECHARS, (IntPtr) Unused, (IntPtr) charactersPtr); + } + } + + /// Get the set of characters making up whitespace for when moving or selecting by word. (Scintilla feature 2647) + public unsafe string GetWhitespaceChars() + { + byte[] charactersBuffer = new byte[10000]; + fixed (byte* charactersPtr = charactersBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETWHITESPACECHARS, (IntPtr) Unused, (IntPtr) charactersPtr); + return Encoding.UTF8.GetString(charactersBuffer).TrimEnd('\0'); + } + } + + /// + /// Set the set of characters making up punctuation characters + /// Should be called after SetWordChars. + /// (Scintilla feature 2648) + /// + public unsafe void SetPunctuationChars(string characters) + { + fixed (byte* charactersPtr = Encoding.UTF8.GetBytes(characters)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETPUNCTUATIONCHARS, (IntPtr) Unused, (IntPtr) charactersPtr); + } + } + + /// Get the set of characters making up punctuation characters (Scintilla feature 2649) + public unsafe string GetPunctuationChars() + { + byte[] charactersBuffer = new byte[10000]; + fixed (byte* charactersPtr = charactersBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETPUNCTUATIONCHARS, (IntPtr) Unused, (IntPtr) charactersPtr); + return Encoding.UTF8.GetString(charactersBuffer).TrimEnd('\0'); + } + } + + /// Reset the set of characters for whitespace and word characters to the defaults. (Scintilla feature 2444) + public void SetCharsDefault() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCHARSDEFAULT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get currently selected item position in the auto-completion list (Scintilla feature 2445) + public int AutoCGetCurrent() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCURRENT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Get currently selected item text in the auto-completion list + /// Returns the length of the item text + /// Result is NUL-terminated. + /// (Scintilla feature 2610) + /// + public unsafe string AutoCGetCurrentText() + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCURRENTTEXT, (IntPtr) Unused, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Set auto-completion case insensitive behaviour to either prefer case-sensitive matches or have no preference. (Scintilla feature 2634) + public void AutoCSetCaseInsensitiveBehaviour(CaseInsensitiveBehaviour behaviour) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR, (IntPtr) behaviour, (IntPtr) Unused); + } + + /// Get auto-completion case insensitive behaviour. (Scintilla feature 2635) + public CaseInsensitiveBehaviour AutoCGetCaseInsensitiveBehaviour() + { + return (CaseInsensitiveBehaviour)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Change the effect of autocompleting when there are multiple selections. (Scintilla feature 2636) + public void AutoCSetMulti(MultiAutoComplete multi) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMULTI, (IntPtr) multi, (IntPtr) Unused); + } + + /// Retrieve the effect of autocompleting when there are multiple selections. (Scintilla feature 2637) + public MultiAutoComplete AutoCGetMulti() + { + return (MultiAutoComplete)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMULTI, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the way autocompletion lists are ordered. (Scintilla feature 2660) + public void AutoCSetOrder(Ordering order) + { + Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETORDER, (IntPtr) order, (IntPtr) Unused); + } + + /// Get the way autocompletion lists are ordered. (Scintilla feature 2661) + public Ordering AutoCGetOrder() + { + return (Ordering)Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETORDER, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Enlarge the document to a particular size of text bytes. (Scintilla feature 2446) + public void Allocate(int bytes) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATE, (IntPtr) bytes, (IntPtr) Unused); + } + + /// + /// Returns the target converted to UTF8. + /// Return the length in bytes. + /// (Scintilla feature 2447) + /// + public unsafe string TargetAsUTF8() + { + byte[] sBuffer = new byte[10000]; + fixed (byte* sPtr = sBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_TARGETASUTF8, (IntPtr) Unused, (IntPtr) sPtr); + return Encoding.UTF8.GetString(sBuffer).TrimEnd('\0'); + } + } + + /// + /// Set the length of the utf8 argument for calling EncodedFromUTF8. + /// Set to -1 and the string will be measured to the first nul. + /// (Scintilla feature 2448) + /// + public void SetLengthForEncode(int bytes) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETLENGTHFORENCODE, (IntPtr) bytes, (IntPtr) Unused); + } + + /// + /// Translates a UTF8 string into the document encoding. + /// Return the length of the result in bytes. + /// On error return 0. + /// (Scintilla feature 2449) + /// + public unsafe string EncodedFromUTF8(string utf8) + { + fixed (byte* utf8Ptr = Encoding.UTF8.GetBytes(utf8)) + { + byte[] encodedBuffer = new byte[10000]; + fixed (byte* encodedPtr = encodedBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ENCODEDFROMUTF8, (IntPtr) utf8Ptr, (IntPtr) encodedPtr); + return Encoding.UTF8.GetString(encodedBuffer).TrimEnd('\0'); + } + } + } + + /// + /// Find the position of a column on a line taking into account tabs and + /// multi-byte characters. If beyond end of line, return line end position. + /// (Scintilla feature 2456) + /// + public int FindColumn(int line, int column) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_FINDCOLUMN, (IntPtr) line, (IntPtr) column); + } + + /// Can the caret preferred x position only be changed by explicit movement commands? (Scintilla feature 2457) + public CaretSticky GetCaretSticky() + { + return (CaretSticky)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETSTICKY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Stop the caret preferred x position changing when the user types. (Scintilla feature 2458) + public void SetCaretSticky(CaretSticky useCaretStickyBehaviour) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETSTICKY, (IntPtr) useCaretStickyBehaviour, (IntPtr) Unused); + } + + /// Switch between sticky and non-sticky: meant to be bound to a key. (Scintilla feature 2459) + public void ToggleCaretSticky() + { + Win32.SendMessage(scintilla, SciMsg.SCI_TOGGLECARETSTICKY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Enable/Disable convert-on-paste for line endings (Scintilla feature 2467) + public void SetPasteConvertEndings(bool convert) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETPASTECONVERTENDINGS, new IntPtr(convert ? 1 : 0), (IntPtr) Unused); + } + + /// Get convert-on-paste setting (Scintilla feature 2468) + public bool GetPasteConvertEndings() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPASTECONVERTENDINGS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Duplicate the selection. If selection empty duplicate the line containing the caret. (Scintilla feature 2469) + public void SelectionDuplicate() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SELECTIONDUPLICATE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set background alpha of the caret line. (Scintilla feature 2470) + public void SetCaretLineBackAlpha(Alpha alpha) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEBACKALPHA, (IntPtr) alpha, (IntPtr) Unused); + } + + /// Get the background alpha of the caret line. (Scintilla feature 2471) + public Alpha GetCaretLineBackAlpha() + { + return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEBACKALPHA, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the style of the caret to be drawn. (Scintilla feature 2512) + public void SetCaretStyle(CaretStyle caretStyle) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETSTYLE, (IntPtr) caretStyle, (IntPtr) Unused); + } + + /// Returns the current style of the caret. (Scintilla feature 2513) + public CaretStyle GetCaretStyle() + { + return (CaretStyle)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETSTYLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the indicator used for IndicatorFillRange and IndicatorClearRange (Scintilla feature 2500) + public void SetIndicatorCurrent(int indicator) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETINDICATORCURRENT, (IntPtr) indicator, (IntPtr) Unused); + } + + /// Get the current indicator (Scintilla feature 2501) + public int GetIndicatorCurrent() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETINDICATORCURRENT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the value used for IndicatorFillRange (Scintilla feature 2502) + public void SetIndicatorValue(int value) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETINDICATORVALUE, (IntPtr) value, (IntPtr) Unused); + } + + /// Get the current indicator value (Scintilla feature 2503) + public int GetIndicatorValue() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETINDICATORVALUE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Turn a indicator on over a range. (Scintilla feature 2504) + public void IndicatorFillRange(int start, int lengthFill) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORFILLRANGE, (IntPtr) start, (IntPtr) lengthFill); + } + + /// Turn a indicator off over a range. (Scintilla feature 2505) + public void IndicatorClearRange(int start, int lengthClear) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORCLEARRANGE, (IntPtr) start, (IntPtr) lengthClear); + } + + /// Are any indicators present at pos? (Scintilla feature 2506) + public int IndicatorAllOnFor(int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORALLONFOR, (IntPtr) pos, (IntPtr) Unused); + } + + /// What value does a particular indicator have at a position? (Scintilla feature 2507) + public int IndicatorValueAt(int indicator, int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORVALUEAT, (IntPtr) indicator, (IntPtr) pos); + } + + /// Where does a particular indicator start? (Scintilla feature 2508) + public int IndicatorStart(int indicator, int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORSTART, (IntPtr) indicator, (IntPtr) pos); + } + + /// Where does a particular indicator end? (Scintilla feature 2509) + public int IndicatorEnd(int indicator, int pos) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDICATOREND, (IntPtr) indicator, (IntPtr) pos); + } + + /// Set number of entries in position cache (Scintilla feature 2514) + public void SetPositionCache(int size) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETPOSITIONCACHE, (IntPtr) size, (IntPtr) Unused); + } + + /// How many entries are allocated to the position cache? (Scintilla feature 2515) + public int GetPositionCache() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPOSITIONCACHE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Copy the selection, if selection empty copy the line with the caret (Scintilla feature 2519) + public void CopyAllowLine() + { + Win32.SendMessage(scintilla, SciMsg.SCI_COPYALLOWLINE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Compact the document buffer and return a read-only pointer to the + /// characters in the document. + /// (Scintilla feature 2520) + /// + public IntPtr GetCharacterPointer() + { + return Win32.SendMessage(scintilla, SciMsg.SCI_GETCHARACTERPOINTER, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Return a read-only pointer to a range of characters in the document. + /// May move the gap so that the range is contiguous, but will only move up + /// to lengthRange bytes. + /// (Scintilla feature 2643) + /// + public IntPtr GetRangePointer(int start, int lengthRange) + { + return Win32.SendMessage(scintilla, SciMsg.SCI_GETRANGEPOINTER, (IntPtr) start, (IntPtr) lengthRange); + } + + /// + /// Return a position which, to avoid performance costs, should not be within + /// the range of a call to GetRangePointer. + /// (Scintilla feature 2644) + /// + public int GetGapPosition() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETGAPPOSITION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the alpha fill colour of the given indicator. (Scintilla feature 2523) + public void IndicSetAlpha(int indicator, Alpha alpha) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETALPHA, (IntPtr) indicator, (IntPtr) alpha); + } + + /// Get the alpha fill colour of the given indicator. (Scintilla feature 2524) + public Alpha IndicGetAlpha(int indicator) + { + return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETALPHA, (IntPtr) indicator, (IntPtr) Unused); + } + + /// Set the alpha outline colour of the given indicator. (Scintilla feature 2558) + public void IndicSetOutlineAlpha(int indicator, Alpha alpha) + { + Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETOUTLINEALPHA, (IntPtr) indicator, (IntPtr) alpha); + } + + /// Get the alpha outline colour of the given indicator. (Scintilla feature 2559) + public Alpha IndicGetOutlineAlpha(int indicator) + { + return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETOUTLINEALPHA, (IntPtr) indicator, (IntPtr) Unused); + } + + /// Set extra ascent for each line (Scintilla feature 2525) + public void SetExtraAscent(int extraAscent) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETEXTRAASCENT, (IntPtr) extraAscent, (IntPtr) Unused); + } + + /// Get extra ascent for each line (Scintilla feature 2526) + public int GetExtraAscent() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETEXTRAASCENT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set extra descent for each line (Scintilla feature 2527) + public void SetExtraDescent(int extraDescent) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETEXTRADESCENT, (IntPtr) extraDescent, (IntPtr) Unused); + } + + /// Get extra descent for each line (Scintilla feature 2528) + public int GetExtraDescent() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETEXTRADESCENT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Which symbol was defined for markerNumber with MarkerDefine (Scintilla feature 2529) + public int MarkerSymbolDefined(int markerNumber) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSYMBOLDEFINED, (IntPtr) markerNumber, (IntPtr) Unused); + } + + /// Set the text in the text margin for a line (Scintilla feature 2530) + public unsafe void MarginSetText(int line, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETTEXT, (IntPtr) line, (IntPtr) textPtr); + } + } + + /// Get the text in the text margin for a line (Scintilla feature 2531) + public unsafe string MarginGetText(int line) + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETTEXT, (IntPtr) line, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Set the style number for the text margin for a line (Scintilla feature 2532) + public void MarginSetStyle(int line, int style) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLE, (IntPtr) line, (IntPtr) style); + } + + /// Get the style number for the text margin for a line (Scintilla feature 2533) + public int MarginGetStyle(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLE, (IntPtr) line, (IntPtr) Unused); + } + + /// Set the style in the text margin for a line (Scintilla feature 2534) + public unsafe void MarginSetStyles(int line, string styles) + { + fixed (byte* stylesPtr = Encoding.UTF8.GetBytes(styles)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLES, (IntPtr) line, (IntPtr) stylesPtr); + } + } + + /// Get the styles in the text margin for a line (Scintilla feature 2535) + public unsafe string MarginGetStyles(int line) + { + byte[] stylesBuffer = new byte[10000]; + fixed (byte* stylesPtr = stylesBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLES, (IntPtr) line, (IntPtr) stylesPtr); + return Encoding.UTF8.GetString(stylesBuffer).TrimEnd('\0'); + } + } + + /// Clear the margin text on all lines (Scintilla feature 2536) + public void MarginTextClearAll() + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARGINTEXTCLEARALL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get the start of the range of style numbers used for margin text (Scintilla feature 2537) + public void MarginSetStyleOffset(int style) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLEOFFSET, (IntPtr) style, (IntPtr) Unused); + } + + /// Get the start of the range of style numbers used for margin text (Scintilla feature 2538) + public int MarginGetStyleOffset() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLEOFFSET, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the margin options. (Scintilla feature 2539) + public void SetMarginOptions(MarginOption marginOptions) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINOPTIONS, (IntPtr) marginOptions, (IntPtr) Unused); + } + + /// Get the margin options. (Scintilla feature 2557) + public MarginOption GetMarginOptions() + { + return (MarginOption)Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINOPTIONS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the annotation text for a line (Scintilla feature 2540) + public unsafe void AnnotationSetText(int line, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETTEXT, (IntPtr) line, (IntPtr) textPtr); + } + } + + /// Get the annotation text for a line (Scintilla feature 2541) + public unsafe string AnnotationGetText(int line) + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETTEXT, (IntPtr) line, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Set the style number for the annotations for a line (Scintilla feature 2542) + public void AnnotationSetStyle(int line, int style) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLE, (IntPtr) line, (IntPtr) style); + } + + /// Get the style number for the annotations for a line (Scintilla feature 2543) + public int AnnotationGetStyle(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLE, (IntPtr) line, (IntPtr) Unused); + } + + /// Set the annotation styles for a line (Scintilla feature 2544) + public unsafe void AnnotationSetStyles(int line, string styles) + { + fixed (byte* stylesPtr = Encoding.UTF8.GetBytes(styles)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLES, (IntPtr) line, (IntPtr) stylesPtr); + } + } + + /// Get the annotation styles for a line (Scintilla feature 2545) + public unsafe string AnnotationGetStyles(int line) + { + byte[] stylesBuffer = new byte[10000]; + fixed (byte* stylesPtr = stylesBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLES, (IntPtr) line, (IntPtr) stylesPtr); + return Encoding.UTF8.GetString(stylesBuffer).TrimEnd('\0'); + } + } + + /// Get the number of annotation lines for a line (Scintilla feature 2546) + public int AnnotationGetLines(int line) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETLINES, (IntPtr) line, (IntPtr) Unused); + } + + /// Clear the annotations from all lines (Scintilla feature 2547) + public void AnnotationClearAll() + { + Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONCLEARALL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the visibility for the annotations for a view (Scintilla feature 2548) + public void AnnotationSetVisible(AnnotationVisible visible) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETVISIBLE, (IntPtr) visible, (IntPtr) Unused); + } + + /// Get the visibility for the annotations for a view (Scintilla feature 2549) + public AnnotationVisible AnnotationGetVisible() + { + return (AnnotationVisible)Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETVISIBLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get the start of the range of style numbers used for annotations (Scintilla feature 2550) + public void AnnotationSetStyleOffset(int style) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLEOFFSET, (IntPtr) style, (IntPtr) Unused); + } + + /// Get the start of the range of style numbers used for annotations (Scintilla feature 2551) + public int AnnotationGetStyleOffset() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLEOFFSET, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Release all extended (>255) style numbers (Scintilla feature 2552) + public void ReleaseAllExtendedStyles() + { + Win32.SendMessage(scintilla, SciMsg.SCI_RELEASEALLEXTENDEDSTYLES, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Allocate some extended (>255) style numbers and return the start of the range (Scintilla feature 2553) + public int AllocateExtendedStyles(int numberStyles) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATEEXTENDEDSTYLES, (IntPtr) numberStyles, (IntPtr) Unused); + } + + /// Add a container action to the undo stack (Scintilla feature 2560) + public void AddUndoAction(int token, UndoFlags flags) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ADDUNDOACTION, (IntPtr) token, (IntPtr) flags); + } + + /// Find the position of a character from a point within the window. (Scintilla feature 2561) + public int CharPositionFromPoint(int x, int y) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CHARPOSITIONFROMPOINT, (IntPtr) x, (IntPtr) y); + } + + /// + /// Find the position of a character from a point within the window. + /// Return INVALID_POSITION if not close to text. + /// (Scintilla feature 2562) + /// + public int CharPositionFromPointClose(int x, int y) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CHARPOSITIONFROMPOINTCLOSE, (IntPtr) x, (IntPtr) y); + } + + /// Set whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2668) + public void SetMouseSelectionRectangularSwitch(bool mouseSelectionRectangularSwitch) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSESELECTIONRECTANGULARSWITCH, new IntPtr(mouseSelectionRectangularSwitch ? 1 : 0), (IntPtr) Unused); + } + + /// Whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2669) + public bool GetMouseSelectionRectangularSwitch() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSESELECTIONRECTANGULARSWITCH, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set whether multiple selections can be made (Scintilla feature 2563) + public void SetMultipleSelection(bool multipleSelection) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMULTIPLESELECTION, new IntPtr(multipleSelection ? 1 : 0), (IntPtr) Unused); + } + + /// Whether multiple selections can be made (Scintilla feature 2564) + public bool GetMultipleSelection() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMULTIPLESELECTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set whether typing can be performed into multiple selections (Scintilla feature 2565) + public void SetAdditionalSelectionTyping(bool additionalSelectionTyping) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELECTIONTYPING, new IntPtr(additionalSelectionTyping ? 1 : 0), (IntPtr) Unused); + } + + /// Whether typing can be performed into multiple selections (Scintilla feature 2566) + public bool GetAdditionalSelectionTyping() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALSELECTIONTYPING, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set whether additional carets will blink (Scintilla feature 2567) + public void SetAdditionalCaretsBlink(bool additionalCaretsBlink) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETSBLINK, new IntPtr(additionalCaretsBlink ? 1 : 0), (IntPtr) Unused); + } + + /// Whether additional carets will blink (Scintilla feature 2568) + public bool GetAdditionalCaretsBlink() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETSBLINK, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set whether additional carets are visible (Scintilla feature 2608) + public void SetAdditionalCaretsVisible(bool additionalCaretsVisible) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETSVISIBLE, new IntPtr(additionalCaretsVisible ? 1 : 0), (IntPtr) Unused); + } + + /// Whether additional carets are visible (Scintilla feature 2609) + public bool GetAdditionalCaretsVisible() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETSVISIBLE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// How many selections are there? (Scintilla feature 2570) + public int GetSelections() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Is every selected range empty? (Scintilla feature 2650) + public bool GetSelectionEmpty() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONEMPTY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Clear selections to a single empty stream selection (Scintilla feature 2571) + public void ClearSelections() + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEARSELECTIONS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set a simple selection (Scintilla feature 2572) + public void SetSelection(int caret, int anchor) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTION, (IntPtr) caret, (IntPtr) anchor); + } + + /// Add a selection (Scintilla feature 2573) + public void AddSelection(int caret, int anchor) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ADDSELECTION, (IntPtr) caret, (IntPtr) anchor); + } + + /// Drop one selection (Scintilla feature 2671) + public void DropSelectionN(int selection) + { + Win32.SendMessage(scintilla, SciMsg.SCI_DROPSELECTIONN, (IntPtr) selection, (IntPtr) Unused); + } + + /// Set the main selection (Scintilla feature 2574) + public void SetMainSelection(int selection) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETMAINSELECTION, (IntPtr) selection, (IntPtr) Unused); + } + + /// Which selection is the main selection (Scintilla feature 2575) + public int GetMainSelection() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETMAINSELECTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the caret position of the nth selection. (Scintilla feature 2576) + public void SetSelectionNCaret(int selection, int caret) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNCARET, (IntPtr) selection, (IntPtr) caret); + } + + /// Return the caret position of the nth selection. (Scintilla feature 2577) + public int GetSelectionNCaret(int selection) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNCARET, (IntPtr) selection, (IntPtr) Unused); + } + + /// Set the anchor position of the nth selection. (Scintilla feature 2578) + public void SetSelectionNAnchor(int selection, int anchor) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNANCHOR, (IntPtr) selection, (IntPtr) anchor); + } + + /// Return the anchor position of the nth selection. (Scintilla feature 2579) + public int GetSelectionNAnchor(int selection) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNANCHOR, (IntPtr) selection, (IntPtr) Unused); + } + + /// Set the virtual space of the caret of the nth selection. (Scintilla feature 2580) + public void SetSelectionNCaretVirtualSpace(int selection, int space) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNCARETVIRTUALSPACE, (IntPtr) selection, (IntPtr) space); + } + + /// Return the virtual space of the caret of the nth selection. (Scintilla feature 2581) + public int GetSelectionNCaretVirtualSpace(int selection) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNCARETVIRTUALSPACE, (IntPtr) selection, (IntPtr) Unused); + } + + /// Set the virtual space of the anchor of the nth selection. (Scintilla feature 2582) + public void SetSelectionNAnchorVirtualSpace(int selection, int space) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNANCHORVIRTUALSPACE, (IntPtr) selection, (IntPtr) space); + } + + /// Return the virtual space of the anchor of the nth selection. (Scintilla feature 2583) + public int GetSelectionNAnchorVirtualSpace(int selection) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNANCHORVIRTUALSPACE, (IntPtr) selection, (IntPtr) Unused); + } + + /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2584) + public void SetSelectionNStart(int selection, int anchor) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNSTART, (IntPtr) selection, (IntPtr) anchor); + } + + /// Returns the position at the start of the selection. (Scintilla feature 2585) + public int GetSelectionNStart(int selection) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNSTART, (IntPtr) selection, (IntPtr) Unused); + } + + /// Sets the position that ends the selection - this becomes the currentPosition. (Scintilla feature 2586) + public void SetSelectionNEnd(int selection, int caret) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNEND, (IntPtr) selection, (IntPtr) caret); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2587) + public int GetSelectionNEnd(int selection) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNEND, (IntPtr) selection, (IntPtr) Unused); + } + + /// Set the caret position of the rectangular selection. (Scintilla feature 2588) + public void SetRectangularSelectionCaret(int caret) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONCARET, (IntPtr) caret, (IntPtr) Unused); + } + + /// Return the caret position of the rectangular selection. (Scintilla feature 2589) + public int GetRectangularSelectionCaret() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONCARET, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the anchor position of the rectangular selection. (Scintilla feature 2590) + public void SetRectangularSelectionAnchor(int anchor) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONANCHOR, (IntPtr) anchor, (IntPtr) Unused); + } + + /// Return the anchor position of the rectangular selection. (Scintilla feature 2591) + public int GetRectangularSelectionAnchor() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONANCHOR, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the virtual space of the caret of the rectangular selection. (Scintilla feature 2592) + public void SetRectangularSelectionCaretVirtualSpace(int space) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (IntPtr) space, (IntPtr) Unused); + } + + /// Return the virtual space of the caret of the rectangular selection. (Scintilla feature 2593) + public int GetRectangularSelectionCaretVirtualSpace() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the virtual space of the anchor of the rectangular selection. (Scintilla feature 2594) + public void SetRectangularSelectionAnchorVirtualSpace(int space) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (IntPtr) space, (IntPtr) Unused); + } + + /// Return the virtual space of the anchor of the rectangular selection. (Scintilla feature 2595) + public int GetRectangularSelectionAnchorVirtualSpace() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set options for virtual space behaviour. (Scintilla feature 2596) + public void SetVirtualSpaceOptions(VirtualSpace virtualSpaceOptions) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETVIRTUALSPACEOPTIONS, (IntPtr) virtualSpaceOptions, (IntPtr) Unused); + } + + /// Return options for virtual space behaviour. (Scintilla feature 2597) + public VirtualSpace GetVirtualSpaceOptions() + { + return (VirtualSpace)Win32.SendMessage(scintilla, SciMsg.SCI_GETVIRTUALSPACEOPTIONS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// On GTK, allow selecting the modifier key to use for mouse-based + /// rectangular selection. Often the window manager requires Alt+Mouse Drag + /// for moving windows. + /// Valid values are SCMOD_CTRL(default), SCMOD_ALT, or SCMOD_SUPER. + /// (Scintilla feature 2598) + /// + public void SetRectangularSelectionModifier(int modifier) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONMODIFIER, (IntPtr) modifier, (IntPtr) Unused); + } + + /// Get the modifier key used for rectangular selection. (Scintilla feature 2599) + public int GetRectangularSelectionModifier() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONMODIFIER, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Set the foreground colour of additional selections. + /// Must have previously called SetSelFore with non-zero first argument for this to have an effect. + /// (Scintilla feature 2600) + /// + public void SetAdditionalSelFore(Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELFORE, fore.Value, (IntPtr) Unused); + } + + /// + /// Set the background colour of additional selections. + /// Must have previously called SetSelBack with non-zero first argument for this to have an effect. + /// (Scintilla feature 2601) + /// + public void SetAdditionalSelBack(Colour back) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELBACK, back.Value, (IntPtr) Unused); + } + + /// Set the alpha of the selection. (Scintilla feature 2602) + public void SetAdditionalSelAlpha(Alpha alpha) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELALPHA, (IntPtr) alpha, (IntPtr) Unused); + } + + /// Get the alpha of the selection. (Scintilla feature 2603) + public Alpha GetAdditionalSelAlpha() + { + return (Alpha)Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALSELALPHA, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the foreground colour of additional carets. (Scintilla feature 2604) + public void SetAdditionalCaretFore(Colour fore) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETFORE, fore.Value, (IntPtr) Unused); + } + + /// Get the foreground colour of additional carets. (Scintilla feature 2605) + public Colour GetAdditionalCaretFore() + { + return new Colour((int) Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETFORE, (IntPtr) Unused, (IntPtr) Unused)); + } + + /// Set the main selection to the next selection. (Scintilla feature 2606) + public void RotateSelection() + { + Win32.SendMessage(scintilla, SciMsg.SCI_ROTATESELECTION, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Swap that caret and anchor of the main selection. (Scintilla feature 2607) + public void SwapMainAnchorCaret() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SWAPMAINANCHORCARET, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Add the next occurrence of the main selection to the set of selections as main. + /// If the current selection is empty then select word around caret. + /// (Scintilla feature 2688) + /// + public void MultipleSelectAddNext() + { + Win32.SendMessage(scintilla, SciMsg.SCI_MULTIPLESELECTADDNEXT, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Add each occurrence of the main selection in the target to the set of selections. + /// If the current selection is empty then select word around caret. + /// (Scintilla feature 2689) + /// + public void MultipleSelectAddEach() + { + Win32.SendMessage(scintilla, SciMsg.SCI_MULTIPLESELECTADDEACH, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Indicate that the internal state of a lexer has changed over a range and therefore + /// there may be a need to redraw. + /// (Scintilla feature 2617) + /// + public int ChangeLexerState(int start, int end) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CHANGELEXERSTATE, (IntPtr) start, (IntPtr) end); + } + + /// + /// Find the next line at or after lineStart that is a contracted fold header line. + /// Return -1 when no more lines. + /// (Scintilla feature 2618) + /// + public int ContractedFoldNext(int lineStart) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_CONTRACTEDFOLDNEXT, (IntPtr) lineStart, (IntPtr) Unused); + } + + /// Centre current line in window. (Scintilla feature 2619) + public void VerticalCentreCaret() + { + Win32.SendMessage(scintilla, SciMsg.SCI_VERTICALCENTRECARET, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move the selected lines up one line, shifting the line above after the selection (Scintilla feature 2620) + public void MoveSelectedLinesUp() + { + Win32.SendMessage(scintilla, SciMsg.SCI_MOVESELECTEDLINESUP, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Move the selected lines down one line, shifting the line below before the selection (Scintilla feature 2621) + public void MoveSelectedLinesDown() + { + Win32.SendMessage(scintilla, SciMsg.SCI_MOVESELECTEDLINESDOWN, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the identifier reported as idFrom in notification messages. (Scintilla feature 2622) + public void SetIdentifier(int identifier) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETIDENTIFIER, (IntPtr) identifier, (IntPtr) Unused); + } + + /// Get the identifier. (Scintilla feature 2623) + public int GetIdentifier() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETIDENTIFIER, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the width for future RGBA image data. (Scintilla feature 2624) + public void RGBAImageSetWidth(int width) + { + Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETWIDTH, (IntPtr) width, (IntPtr) Unused); + } + + /// Set the height for future RGBA image data. (Scintilla feature 2625) + public void RGBAImageSetHeight(int height) + { + Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETHEIGHT, (IntPtr) height, (IntPtr) Unused); + } + + /// Set the scale factor in percent for future RGBA image data. (Scintilla feature 2651) + public void RGBAImageSetScale(int scalePercent) + { + Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETSCALE, (IntPtr) scalePercent, (IntPtr) Unused); + } + + /// + /// Define a marker from RGBA data. + /// It has the width and height from RGBAImageSetWidth/Height + /// (Scintilla feature 2626) + /// + public unsafe void MarkerDefineRGBAImage(int markerNumber, string pixels) + { + fixed (byte* pixelsPtr = Encoding.UTF8.GetBytes(pixels)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINERGBAIMAGE, (IntPtr) markerNumber, (IntPtr) pixelsPtr); + } + } + + /// + /// Register an RGBA image for use in autocompletion lists. + /// It has the width and height from RGBAImageSetWidth/Height + /// (Scintilla feature 2627) + /// + public unsafe void RegisterRGBAImage(int type, string pixels) + { + fixed (byte* pixelsPtr = Encoding.UTF8.GetBytes(pixels)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_REGISTERRGBAIMAGE, (IntPtr) type, (IntPtr) pixelsPtr); + } + } + + /// Scroll to start of document. (Scintilla feature 2628) + public void ScrollToStart() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLTOSTART, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Scroll to end of document. (Scintilla feature 2629) + public void ScrollToEnd() + { + Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLTOEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the technology used. (Scintilla feature 2630) + public void SetTechnology(Technology technology) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTECHNOLOGY, (IntPtr) technology, (IntPtr) Unused); + } + + /// Get the tech. (Scintilla feature 2631) + public Technology GetTechnology() + { + return (Technology)Win32.SendMessage(scintilla, SciMsg.SCI_GETTECHNOLOGY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Create an ILoader*. (Scintilla feature 2632) + public IntPtr CreateLoader(int bytes, DocumentOption documentOptions) + { + return Win32.SendMessage(scintilla, SciMsg.SCI_CREATELOADER, (IntPtr) bytes, (IntPtr) documentOptions); + } + + /// On OS X, show a find indicator. (Scintilla feature 2640) + public void FindIndicatorShow(int start, int end) + { + Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORSHOW, (IntPtr) start, (IntPtr) end); + } + + /// On OS X, flash a find indicator, then fade out. (Scintilla feature 2641) + public void FindIndicatorFlash(int start, int end) + { + Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORFLASH, (IntPtr) start, (IntPtr) end); + } + + /// On OS X, hide the find indicator. (Scintilla feature 2642) + public void FindIndicatorHide() + { + Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORHIDE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Move caret to before first visible character on display line. + /// If already there move to first character on display line. + /// (Scintilla feature 2652) + /// + public void VCHomeDisplay() + { + Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEDISPLAY, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Like VCHomeDisplay but extending selection to new caret position. (Scintilla feature 2653) + public void VCHomeDisplayExtend() + { + Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEDISPLAYEXTEND, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Is the caret line always visible? (Scintilla feature 2654) + public bool GetCaretLineVisibleAlways() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEVISIBLEALWAYS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Sets the caret line to always visible. (Scintilla feature 2655) + public void SetCaretLineVisibleAlways(bool alwaysVisible) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEVISIBLEALWAYS, new IntPtr(alwaysVisible ? 1 : 0), (IntPtr) Unused); + } + + /// Set the line end types that the application wants to use. May not be used if incompatible with lexer or encoding. (Scintilla feature 2656) + public void SetLineEndTypesAllowed(LineEndType lineEndBitSet) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETLINEENDTYPESALLOWED, (IntPtr) lineEndBitSet, (IntPtr) Unused); + } + + /// Get the line end types currently allowed. (Scintilla feature 2657) + public LineEndType GetLineEndTypesAllowed() + { + return (LineEndType)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESALLOWED, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation. (Scintilla feature 2658) + public LineEndType GetLineEndTypesActive() + { + return (LineEndType)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESACTIVE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the way a character is drawn. (Scintilla feature 2665) + public unsafe void SetRepresentation(string encodedCharacter, string representation) + { + fixed (byte* encodedCharacterPtr = Encoding.UTF8.GetBytes(encodedCharacter)) + { + fixed (byte* representationPtr = Encoding.UTF8.GetBytes(representation)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETREPRESENTATION, (IntPtr) encodedCharacterPtr, (IntPtr) representationPtr); + } + } + } + + /// + /// Set the way a character is drawn. + /// Result is NUL-terminated. + /// (Scintilla feature 2666) + /// + public unsafe string GetRepresentation(string encodedCharacter) + { + fixed (byte* encodedCharacterPtr = Encoding.UTF8.GetBytes(encodedCharacter)) + { + byte[] representationBuffer = new byte[10000]; + fixed (byte* representationPtr = representationBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETREPRESENTATION, (IntPtr) encodedCharacterPtr, (IntPtr) representationPtr); + return Encoding.UTF8.GetString(representationBuffer).TrimEnd('\0'); + } + } + } + + /// Remove a character representation. (Scintilla feature 2667) + public unsafe void ClearRepresentation(string encodedCharacter) + { + fixed (byte* encodedCharacterPtr = Encoding.UTF8.GetBytes(encodedCharacter)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_CLEARREPRESENTATION, (IntPtr) encodedCharacterPtr, (IntPtr) Unused); + } + } + + /// Start notifying the container of all key presses and commands. (Scintilla feature 3001) + public void StartRecord() + { + Win32.SendMessage(scintilla, SciMsg.SCI_STARTRECORD, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Stop notifying the container of all key presses and commands. (Scintilla feature 3002) + public void StopRecord() + { + Win32.SendMessage(scintilla, SciMsg.SCI_STOPRECORD, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the lexing language of the document. (Scintilla feature 4001) + public void SetLexer(int lexer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETLEXER, (IntPtr) lexer, (IntPtr) Unused); + } + + /// Retrieve the lexing language of the document. (Scintilla feature 4002) + public int GetLexer() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLEXER, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Colourise a segment of the document using the current lexing language. (Scintilla feature 4003) + public void Colourise(int start, int end) + { + Win32.SendMessage(scintilla, SciMsg.SCI_COLOURISE, (IntPtr) start, (IntPtr) end); + } + + /// Set up a value that may be used by a lexer for some optional feature. (Scintilla feature 4004) + public unsafe void SetProperty(string key, string value) + { + fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) + { + fixed (byte* valuePtr = Encoding.UTF8.GetBytes(value)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETPROPERTY, (IntPtr) keyPtr, (IntPtr) valuePtr); + } + } + } + + /// Set up the key words used by the lexer. (Scintilla feature 4005) + public unsafe void SetKeyWords(int keyWordSet, string keyWords) + { + fixed (byte* keyWordsPtr = Encoding.UTF8.GetBytes(keyWords)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETKEYWORDS, (IntPtr) keyWordSet, (IntPtr) keyWordsPtr); + } + } + + /// Set the lexing language of the document based on string name. (Scintilla feature 4006) + public unsafe void SetLexerLanguage(string language) + { + fixed (byte* languagePtr = Encoding.UTF8.GetBytes(language)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETLEXERLANGUAGE, (IntPtr) Unused, (IntPtr) languagePtr); + } + } + + /// Load a lexer library (dll / so). (Scintilla feature 4007) + public unsafe void LoadLexerLibrary(string path) + { + fixed (byte* pathPtr = Encoding.UTF8.GetBytes(path)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_LOADLEXERLIBRARY, (IntPtr) Unused, (IntPtr) pathPtr); + } + } + + /// + /// Retrieve a "property" value previously set with SetProperty. + /// Result is NUL-terminated. + /// (Scintilla feature 4008) + /// + public unsafe string GetProperty(string key) + { + fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) + { + byte[] valueBuffer = new byte[10000]; + fixed (byte* valuePtr = valueBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTY, (IntPtr) keyPtr, (IntPtr) valuePtr); + return Encoding.UTF8.GetString(valueBuffer).TrimEnd('\0'); + } + } + } + + /// + /// Retrieve a "property" value previously set with SetProperty, + /// with "$()" variable replacement on returned buffer. + /// Result is NUL-terminated. + /// (Scintilla feature 4009) + /// + public unsafe string GetPropertyExpanded(string key) + { + fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) + { + byte[] valueBuffer = new byte[10000]; + fixed (byte* valuePtr = valueBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTYEXPANDED, (IntPtr) keyPtr, (IntPtr) valuePtr); + return Encoding.UTF8.GetString(valueBuffer).TrimEnd('\0'); + } + } + } + + /// + /// Retrieve a "property" value previously set with SetProperty, + /// interpreted as an int AFTER any "$()" variable replacement. + /// (Scintilla feature 4010) + /// + public unsafe int GetPropertyInt(string key, int defaultValue) + { + fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTYINT, (IntPtr) keyPtr, (IntPtr) defaultValue); + } + } + + /// + /// Retrieve the name of the lexer. + /// Return the length of the text. + /// Result is NUL-terminated. + /// (Scintilla feature 4012) + /// + public unsafe string GetLexerLanguage() + { + byte[] languageBuffer = new byte[10000]; + fixed (byte* languagePtr = languageBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETLEXERLANGUAGE, (IntPtr) Unused, (IntPtr) languagePtr); + return Encoding.UTF8.GetString(languageBuffer).TrimEnd('\0'); + } + } + + /// For private communication between an application and a known lexer. (Scintilla feature 4013) + public IntPtr PrivateLexerCall(int operation, IntPtr pointer) + { + return Win32.SendMessage(scintilla, SciMsg.SCI_PRIVATELEXERCALL, (IntPtr) operation, (IntPtr) pointer); + } + + /// + /// Retrieve a '\n' separated list of properties understood by the current lexer. + /// Result is NUL-terminated. + /// (Scintilla feature 4014) + /// + public unsafe string PropertyNames() + { + byte[] namesBuffer = new byte[10000]; + fixed (byte* namesPtr = namesBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_PROPERTYNAMES, (IntPtr) Unused, (IntPtr) namesPtr); + return Encoding.UTF8.GetString(namesBuffer).TrimEnd('\0'); + } + } + + /// Retrieve the type of a property. (Scintilla feature 4015) + public unsafe TypeProperty PropertyType(string name) + { + fixed (byte* namePtr = Encoding.UTF8.GetBytes(name)) + { + return (TypeProperty)Win32.SendMessage(scintilla, SciMsg.SCI_PROPERTYTYPE, (IntPtr) namePtr, (IntPtr) Unused); + } + } + + /// + /// Describe a property. + /// Result is NUL-terminated. + /// (Scintilla feature 4016) + /// + public unsafe string DescribeProperty(string name) + { + fixed (byte* namePtr = Encoding.UTF8.GetBytes(name)) + { + byte[] descriptionBuffer = new byte[10000]; + fixed (byte* descriptionPtr = descriptionBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_DESCRIBEPROPERTY, (IntPtr) namePtr, (IntPtr) descriptionPtr); + return Encoding.UTF8.GetString(descriptionBuffer).TrimEnd('\0'); + } + } + } + + /// + /// Retrieve a '\n' separated list of descriptions of the keyword sets understood by the current lexer. + /// Result is NUL-terminated. + /// (Scintilla feature 4017) + /// + public unsafe string DescribeKeyWordSets() + { + byte[] descriptionsBuffer = new byte[10000]; + fixed (byte* descriptionsPtr = descriptionsBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_DESCRIBEKEYWORDSETS, (IntPtr) Unused, (IntPtr) descriptionsPtr); + return Encoding.UTF8.GetString(descriptionsBuffer).TrimEnd('\0'); + } + } + + /// + /// Bit set of LineEndType enumertion for which line ends beyond the standard + /// LF, CR, and CRLF are supported by the lexer. + /// (Scintilla feature 4018) + /// + public int GetLineEndTypesSupported() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESSUPPORTED, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Allocate a set of sub styles for a particular base style, returning start of range (Scintilla feature 4020) + public int AllocateSubStyles(int styleBase, int numberStyles) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATESUBSTYLES, (IntPtr) styleBase, (IntPtr) numberStyles); + } + + /// The starting style number for the sub styles associated with a base style (Scintilla feature 4021) + public int GetSubStylesStart(int styleBase) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLESSTART, (IntPtr) styleBase, (IntPtr) Unused); + } + + /// The number of sub styles associated with a base style (Scintilla feature 4022) + public int GetSubStylesLength(int styleBase) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLESLENGTH, (IntPtr) styleBase, (IntPtr) Unused); + } + + /// For a sub style, return the base style, else return the argument. (Scintilla feature 4027) + public int GetStyleFromSubStyle(int subStyle) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEFROMSUBSTYLE, (IntPtr) subStyle, (IntPtr) Unused); + } + + /// For a secondary style, return the primary style, else return the argument. (Scintilla feature 4028) + public int GetPrimaryStyleFromStyle(int style) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETPRIMARYSTYLEFROMSTYLE, (IntPtr) style, (IntPtr) Unused); + } + + /// Free allocated sub styles (Scintilla feature 4023) + public void FreeSubStyles() + { + Win32.SendMessage(scintilla, SciMsg.SCI_FREESUBSTYLES, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set the identifiers that are shown in a particular style (Scintilla feature 4024) + public unsafe void SetIdentifiers(int style, string identifiers) + { + fixed (byte* identifiersPtr = Encoding.UTF8.GetBytes(identifiers)) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETIDENTIFIERS, (IntPtr) style, (IntPtr) identifiersPtr); + } + } + + /// + /// Where styles are duplicated by a feature such as active/inactive code + /// return the distance between the two types. + /// (Scintilla feature 4025) + /// + public int DistanceToSecondaryStyles() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_DISTANCETOSECONDARYSTYLES, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Get the set of base styles that can be extended with sub styles + /// Result is NUL-terminated. + /// (Scintilla feature 4026) + /// + public unsafe string GetSubStyleBases() + { + byte[] stylesBuffer = new byte[10000]; + fixed (byte* stylesPtr = stylesBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLEBASES, (IntPtr) Unused, (IntPtr) stylesPtr); + return Encoding.UTF8.GetString(stylesBuffer).TrimEnd('\0'); + } + } + + /// Retrieve the number of named styles for the lexer. (Scintilla feature 4029) + public int GetNamedStyles() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETNAMEDSTYLES, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Retrieve the name of a style. + /// Result is NUL-terminated. + /// (Scintilla feature 4030) + /// + public unsafe string NameOfStyle(int style) + { + byte[] nameBuffer = new byte[10000]; + fixed (byte* namePtr = nameBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_NAMEOFSTYLE, (IntPtr) style, (IntPtr) namePtr); + return Encoding.UTF8.GetString(nameBuffer).TrimEnd('\0'); + } + } + + /// + /// Retrieve a ' ' separated list of style tags like "literal quoted string". + /// Result is NUL-terminated. + /// (Scintilla feature 4031) + /// + public unsafe string TagsOfStyle(int style) + { + byte[] tagsBuffer = new byte[10000]; + fixed (byte* tagsPtr = tagsBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_TAGSOFSTYLE, (IntPtr) style, (IntPtr) tagsPtr); + return Encoding.UTF8.GetString(tagsBuffer).TrimEnd('\0'); + } + } + + /// + /// Retrieve a description of a style. + /// Result is NUL-terminated. + /// (Scintilla feature 4032) + /// + public unsafe string DescriptionOfStyle(int style) + { + byte[] descriptionBuffer = new byte[10000]; + fixed (byte* descriptionPtr = descriptionBuffer) + { + Win32.SendMessage(scintilla, SciMsg.SCI_DESCRIPTIONOFSTYLE, (IntPtr) style, (IntPtr) descriptionPtr); + return Encoding.UTF8.GetString(descriptionBuffer).TrimEnd('\0'); + } + } + + /// Retrieve bidirectional text display state. (Scintilla feature 2708) + public Bidirectional GetBidirectional() + { + return (Bidirectional)Win32.SendMessage(scintilla, SciMsg.SCI_GETBIDIRECTIONAL, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Set bidirectional text display state. (Scintilla feature 2709) + public void SetBidirectional(Bidirectional bidirectional) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETBIDIRECTIONAL, (IntPtr) bidirectional, (IntPtr) Unused); + } + + /// Retrieve line character index state. (Scintilla feature 2710) + public LineCharacterIndexType GetLineCharacterIndex() + { + return (LineCharacterIndexType)Win32.SendMessage(scintilla, SciMsg.SCI_GETLINECHARACTERINDEX, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Request line character index be created or its use count increased. (Scintilla feature 2711) + public void AllocateLineCharacterIndex(LineCharacterIndexType lineCharacterIndex) + { + Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATELINECHARACTERINDEX, (IntPtr) lineCharacterIndex, (IntPtr) Unused); + } + + /// Decrease use count of line character index and remove if 0. (Scintilla feature 2712) + public void ReleaseLineCharacterIndex(LineCharacterIndexType lineCharacterIndex) + { + Win32.SendMessage(scintilla, SciMsg.SCI_RELEASELINECHARACTERINDEX, (IntPtr) lineCharacterIndex, (IntPtr) Unused); + } + + /// Retrieve the document line containing a position measured in index units. (Scintilla feature 2713) + public int LineFromIndexPosition(int pos, LineCharacterIndexType lineCharacterIndex) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_LINEFROMINDEXPOSITION, (IntPtr) pos, (IntPtr) lineCharacterIndex); + } + + /// Retrieve the position measured in index units at the start of a document line. (Scintilla feature 2714) + public int IndexPositionFromLine(int line, LineCharacterIndexType lineCharacterIndex) + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_INDEXPOSITIONFROMLINE, (IntPtr) line, (IntPtr) lineCharacterIndex); + } + + /// + /// Divide each styling byte into lexical class bits (default: 5) and indicator + /// bits (default: 3). If a lexer requires more than 32 lexical states, then this + /// is used to expand the possible states. + /// (Scintilla feature 2090) + /// + public void SetStyleBits(int bits) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLEBITS, (IntPtr) bits, (IntPtr) Unused); + } + + /// Retrieve number of bits in style bytes used to hold the lexical state. (Scintilla feature 2091) + public int GetStyleBits() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEBITS, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Retrieve the number of bits the current lexer needs for styling. (Scintilla feature 4011) + public int GetStyleBitsNeeded() + { + return (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEBITSNEEDED, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// Deprecated in 3.5.5 + /// Always interpret keyboard input as Unicode + /// (Scintilla feature 2521) + /// + public void SetKeysUnicode(bool keysUnicode) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETKEYSUNICODE, new IntPtr(keysUnicode ? 1 : 0), (IntPtr) Unused); + } + + /// Are keys always interpreted as Unicode? (Scintilla feature 2522) + public bool GetKeysUnicode() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETKEYSUNICODE, (IntPtr) Unused, (IntPtr) Unused); + } + + /// Is drawing done in two phases with backgrounds drawn before foregrounds? (Scintilla feature 2283) + public bool GetTwoPhaseDraw() + { + return 1 == (int)Win32.SendMessage(scintilla, SciMsg.SCI_GETTWOPHASEDRAW, (IntPtr) Unused, (IntPtr) Unused); + } + + /// + /// In twoPhaseDraw mode, drawing is performed in two phases, first the background + /// and then the foreground. This avoids chopping off characters that overlap the next run. + /// (Scintilla feature 2284) + /// + public void SetTwoPhaseDraw(bool twoPhase) + { + Win32.SendMessage(scintilla, SciMsg.SCI_SETTWOPHASEDRAW, new IntPtr(twoPhase ? 1 : 0), (IntPtr) Unused); + } + + /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ + } +} diff --git a/WakaTime/PluginInfrastructure/Scintilla_iface.cs b/WakaTime/PluginInfrastructure/Scintilla_iface.cs index 945c0cf..607c7c3 100644 --- a/WakaTime/PluginInfrastructure/Scintilla_iface.cs +++ b/WakaTime/PluginInfrastructure/Scintilla_iface.cs @@ -1,3286 +1,3286 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -// -// This file should stay in sync with the CPP project file -// "notepad-plus-plus/scintilla/include/Scintilla.iface" -// found at -// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/scintilla/include/Scintilla.iface - -using System; -using System.Runtime.InteropServices; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - /// - /// Compatible with Windows NMHDR. - /// hwndFrom is really an environment specific window handle or pointer - /// but most clients of Scintilla.h do not have this type visible. - /// - [StructLayout(LayoutKind.Sequential)] - public struct ScNotificationHeader - { - /// - /// environment specific window handle/pointer - /// - public IntPtr hwndFrom; - - /// - /// CtrlID of the window issuing the notification - /// - public IntPtr IdFrom; - - /// - /// The SCN_* notification Code - /// - public uint Code; - } - - [StructLayout(LayoutKind.Sequential)] - public struct ScNotification - { - public ScNotificationHeader Header; - private int position; /* SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION */ - public int character; /* SCN_CHARADDED, SCN_KEY, SCN_AUTOCCOMPLETE, SCN_AUTOCSELECTION, SCN_USERLISTSELECTION */ - public int Mmodifiers; /* SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE */ - public int ModificationType; /* SCN_MODIFIED - modification types are name "SC_MOD_*" */ - public IntPtr TextPointer; /* SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION, SCN_URIDROPPED */ - public int Length; /* SCN_MODIFIED */ - public int LinesAdded; /* SCN_MODIFIED */ - public int Message; /* SCN_MACRORECORD */ - public IntPtr wParam; /* SCN_MACRORECORD */ - public IntPtr lParam; /* SCN_MACRORECORD */ - - /// - /// 0-based index - /// - public int LineNumber; /* SCN_MODIFIED */ - public int FoldLevelNow; /* SCN_MODIFIED */ - public int FoldLevelPrev; /* SCN_MODIFIED */ - public int Margin; /* SCN_MARGINCLICK */ - public int ListType; /* SCN_USERLISTSELECTION */ - public int X; /* SCN_DWELLSTART, SCN_DWELLEND */ - public int Y; /* SCN_DWELLSTART, SCN_DWELLEND */ - public int Token; /* SCN_MODIFIED with SC_MOD_CONTAINER */ - public int AnnotationLinesAdded; /* SC_MOD_CHANGEANNOTATION */ - public int Updated; /* SCN_UPDATEUI */ - public int ListCompletionMethod; /* SCN_AUTOCSELECTION, SCN_AUTOCCOMPLETED, SCN_USERLISTSELECTION */ - - /// - /// SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION - /// - public Position Position { get { return new Position(position); } } - - /// - /// Character of the notification - eg keydown - /// SCN_CHARADDED, SCN_KEY, SCN_AUTOCCOMPLETE, SCN_AUTOCSELECTION, SCN_USERLISTSELECTION - /// - public char Character { get { return (char) character; } } - } - - [Flags] - public enum SciMsg : uint - { - /* ++Autogenerated -- start of section automatically generated from Scintilla.iface */ - INVALID_POSITION = 0xFFFFFFFF, - - SCI_START = 2000, - - SCI_OPTIONAL_START = 3000, - - SCI_LEXER_START = 4000, - - /// Add text to the document at current position. - SCI_ADDTEXT = 2001, - - /// Add array of cells to document. - SCI_ADDSTYLEDTEXT = 2002, - - /// Insert string at a position. - SCI_INSERTTEXT = 2003, - - /// Change the text that is being inserted in response to SC_MOD_INSERTCHECK - SCI_CHANGEINSERTION = 2672, - - /// Delete all text in the document. - SCI_CLEARALL = 2004, - - /// Delete a range of text in the document. - SCI_DELETERANGE = 2645, - - /// Set all style bytes to 0, remove all folding information. - SCI_CLEARDOCUMENTSTYLE = 2005, - - /// Returns the number of bytes in the document. - SCI_GETLENGTH = 2006, - - /// Returns the character byte at the position. - SCI_GETCHARAT = 2007, - - /// Returns the position of the caret. - SCI_GETCURRENTPOS = 2008, - - /// Returns the position of the opposite end of the selection to the caret. - SCI_GETANCHOR = 2009, - - /// Returns the style byte at the position. - SCI_GETSTYLEAT = 2010, - - /// Redoes the next action on the undo history. - SCI_REDO = 2011, - - /// Choose between collecting actions into the undo - /// history and discarding them. - SCI_SETUNDOCOLLECTION = 2012, - - /// Select all the text in the document. - SCI_SELECTALL = 2013, - - /// Remember the current position in the undo history as the position - /// at which the document was saved. - SCI_SETSAVEPOINT = 2014, - - /// Retrieve a buffer of cells. - /// Returns the number of bytes in the buffer not including terminating NULs. - SCI_GETSTYLEDTEXT = 2015, - - /// Are there any redoable actions in the undo history? - SCI_CANREDO = 2016, - - /// Retrieve the line number at which a particular marker is located. - SCI_MARKERLINEFROMHANDLE = 2017, - - /// Delete a marker. - SCI_MARKERDELETEHANDLE = 2018, - - /// Is undo history being collected? - SCI_GETUNDOCOLLECTION = 2019, - - SCWS_INVISIBLE = 0, - - SCWS_VISIBLEALWAYS = 1, - - SCWS_VISIBLEAFTERINDENT = 2, - - SCWS_VISIBLEONLYININDENT = 3, - - /// Are white space characters currently visible? - /// Returns one of SCWS_* constants. - SCI_GETVIEWWS = 2020, - - /// Make white space characters invisible, always visible or visible outside indentation. - SCI_SETVIEWWS = 2021, - - SCTD_LONGARROW = 0, - - SCTD_STRIKEOUT = 1, - - /// Retrieve the current tab draw mode. - /// Returns one of SCTD_* constants. - SCI_GETTABDRAWMODE = 2698, - - /// Set how tabs are drawn when visible. - SCI_SETTABDRAWMODE = 2699, - - /// Find the position from a point within the window. - SCI_POSITIONFROMPOINT = 2022, - - /// Find the position from a point within the window but return - /// INVALID_POSITION if not close to text. - SCI_POSITIONFROMPOINTCLOSE = 2023, - - /// Set caret to start of a line and ensure it is visible. - SCI_GOTOLINE = 2024, - - /// Set caret to a position and ensure it is visible. - SCI_GOTOPOS = 2025, - - /// Set the selection anchor to a position. The anchor is the opposite - /// end of the selection from the caret. - SCI_SETANCHOR = 2026, - - /// Retrieve the text of the line containing the caret. - /// Returns the index of the caret on the line. - /// Result is NUL-terminated. - SCI_GETCURLINE = 2027, - - /// Retrieve the position of the last correctly styled character. - SCI_GETENDSTYLED = 2028, - - SC_EOL_CRLF = 0, - - SC_EOL_CR = 1, - - SC_EOL_LF = 2, - - /// Convert all line endings in the document to one mode. - SCI_CONVERTEOLS = 2029, - - /// Retrieve the current end of line mode - one of CRLF, CR, or LF. - SCI_GETEOLMODE = 2030, - - /// Set the current end of line mode. - SCI_SETEOLMODE = 2031, - - /// Set the current styling position to start. - /// The unused parameter is no longer used and should be set to 0. - SCI_STARTSTYLING = 2032, - - /// Change style from current styling position for length characters to a style - /// and move the current styling position to after this newly styled segment. - SCI_SETSTYLING = 2033, - - /// Is drawing done first into a buffer or direct to the screen? - SCI_GETBUFFEREDDRAW = 2034, - - /// If drawing is buffered then each line of text is drawn into a bitmap buffer - /// before drawing it to the screen to avoid flicker. - SCI_SETBUFFEREDDRAW = 2035, - - /// Change the visible size of a tab to be a multiple of the width of a space character. - SCI_SETTABWIDTH = 2036, - - /// Retrieve the visible size of a tab. - SCI_GETTABWIDTH = 2121, - - /// Clear explicit tabstops on a line. - SCI_CLEARTABSTOPS = 2675, - - /// Add an explicit tab stop for a line. - SCI_ADDTABSTOP = 2676, - - /// Find the next explicit tab stop position on a line after a position. - SCI_GETNEXTTABSTOP = 2677, - - SC_CP_UTF8 = 65001, - - /// Set the code page used to interpret the bytes of the document as characters. - /// The SC_CP_UTF8 value can be used to enter Unicode mode. - SCI_SETCODEPAGE = 2037, - - SC_IME_WINDOWED = 0, - - SC_IME_INLINE = 1, - - /// Is the IME displayed in a window or inline? - SCI_GETIMEINTERACTION = 2678, - - /// Choose to display the the IME in a winow or inline. - SCI_SETIMEINTERACTION = 2679, - - MARKER_MAX = 31, - - SC_MARK_CIRCLE = 0, - - SC_MARK_ROUNDRECT = 1, - - SC_MARK_ARROW = 2, - - SC_MARK_SMALLRECT = 3, - - SC_MARK_SHORTARROW = 4, - - SC_MARK_EMPTY = 5, - - SC_MARK_ARROWDOWN = 6, - - SC_MARK_MINUS = 7, - - SC_MARK_PLUS = 8, - - SC_MARK_VLINE = 9, - - SC_MARK_LCORNER = 10, - - SC_MARK_TCORNER = 11, - - SC_MARK_BOXPLUS = 12, - - SC_MARK_BOXPLUSCONNECTED = 13, - - SC_MARK_BOXMINUS = 14, - - SC_MARK_BOXMINUSCONNECTED = 15, - - SC_MARK_LCORNERCURVE = 16, - - SC_MARK_TCORNERCURVE = 17, - - SC_MARK_CIRCLEPLUS = 18, - - SC_MARK_CIRCLEPLUSCONNECTED = 19, - - SC_MARK_CIRCLEMINUS = 20, - - SC_MARK_CIRCLEMINUSCONNECTED = 21, - - SC_MARK_BACKGROUND = 22, - - SC_MARK_DOTDOTDOT = 23, - - SC_MARK_ARROWS = 24, - - SC_MARK_PIXMAP = 25, - - SC_MARK_FULLRECT = 26, - - SC_MARK_LEFTRECT = 27, - - SC_MARK_AVAILABLE = 28, - - SC_MARK_UNDERLINE = 29, - - SC_MARK_RGBAIMAGE = 30, - - SC_MARK_BOOKMARK = 31, - - SC_MARK_VERTICALBOOKMARK = 32, - - SC_MARK_CHARACTER = 10000, - - SC_MARKNUM_FOLDEREND = 25, - - SC_MARKNUM_FOLDEROPENMID = 26, - - SC_MARKNUM_FOLDERMIDTAIL = 27, - - SC_MARKNUM_FOLDERTAIL = 28, - - SC_MARKNUM_FOLDERSUB = 29, - - SC_MARKNUM_FOLDER = 30, - - SC_MARKNUM_FOLDEROPEN = 31, - - SC_MASK_FOLDERS = 0xFE000000, - - /// Set the symbol used for a particular marker number. - SCI_MARKERDEFINE = 2040, - - /// Set the foreground colour used for a particular marker number. - SCI_MARKERSETFORE = 2041, - - /// Set the background colour used for a particular marker number. - SCI_MARKERSETBACK = 2042, - - /// Set the background colour used for a particular marker number when its folding block is selected. - SCI_MARKERSETBACKSELECTED = 2292, - - /// Enable/disable highlight for current folding bloc (smallest one that contains the caret) - SCI_MARKERENABLEHIGHLIGHT = 2293, - - /// Add a marker to a line, returning an ID which can be used to find or delete the marker. - SCI_MARKERADD = 2043, - - /// Delete a marker from a line. - SCI_MARKERDELETE = 2044, - - /// Delete all markers with a particular number from all lines. - SCI_MARKERDELETEALL = 2045, - - /// Get a bit mask of all the markers set on a line. - SCI_MARKERGET = 2046, - - /// Find the next line at or after lineStart that includes a marker in mask. - /// Return -1 when no more lines. - SCI_MARKERNEXT = 2047, - - /// Find the previous line before lineStart that includes a marker in mask. - SCI_MARKERPREVIOUS = 2048, - - /// Define a marker from a pixmap. - SCI_MARKERDEFINEPIXMAP = 2049, - - /// Add a set of markers to a line. - SCI_MARKERADDSET = 2466, - - /// Set the alpha used for a marker that is drawn in the text area, not the margin. - SCI_MARKERSETALPHA = 2476, - - SC_MAX_MARGIN = 4, - - SC_MARGIN_SYMBOL = 0, - - SC_MARGIN_NUMBER = 1, - - SC_MARGIN_BACK = 2, - - SC_MARGIN_FORE = 3, - - SC_MARGIN_TEXT = 4, - - SC_MARGIN_RTEXT = 5, - - SC_MARGIN_COLOUR = 6, - - /// Set a margin to be either numeric or symbolic. - SCI_SETMARGINTYPEN = 2240, - - /// Retrieve the type of a margin. - SCI_GETMARGINTYPEN = 2241, - - /// Set the width of a margin to a width expressed in pixels. - SCI_SETMARGINWIDTHN = 2242, - - /// Retrieve the width of a margin in pixels. - SCI_GETMARGINWIDTHN = 2243, - - /// Set a mask that determines which markers are displayed in a margin. - SCI_SETMARGINMASKN = 2244, - - /// Retrieve the marker mask of a margin. - SCI_GETMARGINMASKN = 2245, - - /// Make a margin sensitive or insensitive to mouse clicks. - SCI_SETMARGINSENSITIVEN = 2246, - - /// Retrieve the mouse click sensitivity of a margin. - SCI_GETMARGINSENSITIVEN = 2247, - - /// Set the cursor shown when the mouse is inside a margin. - SCI_SETMARGINCURSORN = 2248, - - /// Retrieve the cursor shown in a margin. - SCI_GETMARGINCURSORN = 2249, - - /// Set the background colour of a margin. Only visible for SC_MARGIN_COLOUR. - SCI_SETMARGINBACKN = 2250, - - /// Retrieve the background colour of a margin - SCI_GETMARGINBACKN = 2251, - - /// Allocate a non-standard number of margins. - SCI_SETMARGINS = 2252, - - /// How many margins are there?. - SCI_GETMARGINS = 2253, - - STYLE_DEFAULT = 32, - - STYLE_LINENUMBER = 33, - - STYLE_BRACELIGHT = 34, - - STYLE_BRACEBAD = 35, - - STYLE_CONTROLCHAR = 36, - - STYLE_INDENTGUIDE = 37, - - STYLE_CALLTIP = 38, - - STYLE_FOLDDISPLAYTEXT = 39, - - STYLE_LASTPREDEFINED = 39, - - STYLE_MAX = 255, - - SC_CHARSET_ANSI = 0, - - SC_CHARSET_DEFAULT = 1, - - SC_CHARSET_BALTIC = 186, - - SC_CHARSET_CHINESEBIG5 = 136, - - SC_CHARSET_EASTEUROPE = 238, - - SC_CHARSET_GB2312 = 134, - - SC_CHARSET_GREEK = 161, - - SC_CHARSET_HANGUL = 129, - - SC_CHARSET_MAC = 77, - - SC_CHARSET_OEM = 255, - - SC_CHARSET_RUSSIAN = 204, - - SC_CHARSET_OEM866 = 866, - - SC_CHARSET_CYRILLIC = 1251, - - SC_CHARSET_SHIFTJIS = 128, - - SC_CHARSET_SYMBOL = 2, - - SC_CHARSET_TURKISH = 162, - - SC_CHARSET_JOHAB = 130, - - SC_CHARSET_HEBREW = 177, - - SC_CHARSET_ARABIC = 178, - - SC_CHARSET_VIETNAMESE = 163, - - SC_CHARSET_THAI = 222, - - SC_CHARSET_8859_15 = 1000, - - /// Clear all the styles and make equivalent to the global default style. - SCI_STYLECLEARALL = 2050, - - /// Set the foreground colour of a style. - SCI_STYLESETFORE = 2051, - - /// Set the background colour of a style. - SCI_STYLESETBACK = 2052, - - /// Set a style to be bold or not. - SCI_STYLESETBOLD = 2053, - - /// Set a style to be italic or not. - SCI_STYLESETITALIC = 2054, - - /// Set the size of characters of a style. - SCI_STYLESETSIZE = 2055, - - /// Set the font of a style. - SCI_STYLESETFONT = 2056, - - /// Set a style to have its end of line filled or not. - SCI_STYLESETEOLFILLED = 2057, - - /// Reset the default style to its state at startup - SCI_STYLERESETDEFAULT = 2058, - - /// Set a style to be underlined or not. - SCI_STYLESETUNDERLINE = 2059, - - SC_CASE_MIXED = 0, - - SC_CASE_UPPER = 1, - - SC_CASE_LOWER = 2, - - SC_CASE_CAMEL = 3, - - /// Get the foreground colour of a style. - SCI_STYLEGETFORE = 2481, - - /// Get the background colour of a style. - SCI_STYLEGETBACK = 2482, - - /// Get is a style bold or not. - SCI_STYLEGETBOLD = 2483, - - /// Get is a style italic or not. - SCI_STYLEGETITALIC = 2484, - - /// Get the size of characters of a style. - SCI_STYLEGETSIZE = 2485, - - /// Get the font of a style. - /// Returns the length of the fontName - /// Result is NUL-terminated. - SCI_STYLEGETFONT = 2486, - - /// Get is a style to have its end of line filled or not. - SCI_STYLEGETEOLFILLED = 2487, - - /// Get is a style underlined or not. - SCI_STYLEGETUNDERLINE = 2488, - - /// Get is a style mixed case, or to force upper or lower case. - SCI_STYLEGETCASE = 2489, - - /// Get the character get of the font in a style. - SCI_STYLEGETCHARACTERSET = 2490, - - /// Get is a style visible or not. - SCI_STYLEGETVISIBLE = 2491, - - /// Get is a style changeable or not (read only). - /// Experimental feature, currently buggy. - SCI_STYLEGETCHANGEABLE = 2492, - - /// Get is a style a hotspot or not. - SCI_STYLEGETHOTSPOT = 2493, - - /// Set a style to be mixed case, or to force upper or lower case. - SCI_STYLESETCASE = 2060, - - SC_FONT_SIZE_MULTIPLIER = 100, - - /// Set the size of characters of a style. Size is in points multiplied by 100. - SCI_STYLESETSIZEFRACTIONAL = 2061, - - /// Get the size of characters of a style in points multiplied by 100 - SCI_STYLEGETSIZEFRACTIONAL = 2062, - - SC_WEIGHT_NORMAL = 400, - - SC_WEIGHT_SEMIBOLD = 600, - - SC_WEIGHT_BOLD = 700, - - /// Set the weight of characters of a style. - SCI_STYLESETWEIGHT = 2063, - - /// Get the weight of characters of a style. - SCI_STYLEGETWEIGHT = 2064, - - /// Set the character set of the font in a style. - SCI_STYLESETCHARACTERSET = 2066, - - /// Set a style to be a hotspot or not. - SCI_STYLESETHOTSPOT = 2409, - - /// Set the foreground colour of the main and additional selections and whether to use this setting. - SCI_SETSELFORE = 2067, - - /// Set the background colour of the main and additional selections and whether to use this setting. - SCI_SETSELBACK = 2068, - - /// Get the alpha of the selection. - SCI_GETSELALPHA = 2477, - - /// Set the alpha of the selection. - SCI_SETSELALPHA = 2478, - - /// Is the selection end of line filled? - SCI_GETSELEOLFILLED = 2479, - - /// Set the selection to have its end of line filled or not. - SCI_SETSELEOLFILLED = 2480, - - /// Set the foreground colour of the caret. - SCI_SETCARETFORE = 2069, - - /// When key+modifier combination keyDefinition is pressed perform sciCommand. - SCI_ASSIGNCMDKEY = 2070, - - /// When key+modifier combination keyDefinition is pressed do nothing. - SCI_CLEARCMDKEY = 2071, - - /// Drop all key mappings. - SCI_CLEARALLCMDKEYS = 2072, - - /// Set the styles for a segment of the document. - SCI_SETSTYLINGEX = 2073, - - /// Set a style to be visible or not. - SCI_STYLESETVISIBLE = 2074, - - /// Get the time in milliseconds that the caret is on and off. - SCI_GETCARETPERIOD = 2075, - - /// Get the time in milliseconds that the caret is on and off. 0 = steady on. - SCI_SETCARETPERIOD = 2076, - - /// Set the set of characters making up words for when moving or selecting by word. - /// First sets defaults like SetCharsDefault. - SCI_SETWORDCHARS = 2077, - - /// Get the set of characters making up words for when moving or selecting by word. - /// Returns the number of characters - SCI_GETWORDCHARS = 2646, - - /// Set the number of characters to have directly indexed categories - SCI_SETCHARACTERCATEGORYOPTIMIZATION = 2720, - - /// Get the number of characters to have directly indexed categories - SCI_GETCHARACTERCATEGORYOPTIMIZATION = 2721, - - /// Start a sequence of actions that is undone and redone as a unit. - /// May be nested. - SCI_BEGINUNDOACTION = 2078, - - /// End a sequence of actions that is undone and redone as a unit. - SCI_ENDUNDOACTION = 2079, - - INDIC_PLAIN = 0, - - INDIC_SQUIGGLE = 1, - - INDIC_TT = 2, - - INDIC_DIAGONAL = 3, - - INDIC_STRIKE = 4, - - INDIC_HIDDEN = 5, - - INDIC_BOX = 6, - - INDIC_ROUNDBOX = 7, - - INDIC_STRAIGHTBOX = 8, - - INDIC_DASH = 9, - - INDIC_DOTS = 10, - - INDIC_SQUIGGLELOW = 11, - - INDIC_DOTBOX = 12, - - INDIC_SQUIGGLEPIXMAP = 13, - - INDIC_COMPOSITIONTHICK = 14, - - INDIC_COMPOSITIONTHIN = 15, - - INDIC_FULLBOX = 16, - - INDIC_TEXTFORE = 17, - - INDIC_POINT = 18, - - INDIC_POINTCHARACTER = 19, - - INDIC_GRADIENT = 20, - - INDIC_GRADIENTCENTRE = 21, - - INDIC_CONTAINER = 8, - - INDIC_IME = 32, - - INDIC_IME_MAX = 35, - - INDIC_MAX = 35, - - INDICATOR_CONTAINER = 8, - - INDICATOR_IME = 32, - - INDICATOR_IME_MAX = 35, - - INDICATOR_MAX = 35, - - /// Set an indicator to plain, squiggle or TT. - SCI_INDICSETSTYLE = 2080, - - /// Retrieve the style of an indicator. - SCI_INDICGETSTYLE = 2081, - - /// Set the foreground colour of an indicator. - SCI_INDICSETFORE = 2082, - - /// Retrieve the foreground colour of an indicator. - SCI_INDICGETFORE = 2083, - - /// Set an indicator to draw under text or over(default). - SCI_INDICSETUNDER = 2510, - - /// Retrieve whether indicator drawn under or over text. - SCI_INDICGETUNDER = 2511, - - /// Set a hover indicator to plain, squiggle or TT. - SCI_INDICSETHOVERSTYLE = 2680, - - /// Retrieve the hover style of an indicator. - SCI_INDICGETHOVERSTYLE = 2681, - - /// Set the foreground hover colour of an indicator. - SCI_INDICSETHOVERFORE = 2682, - - /// Retrieve the foreground hover colour of an indicator. - SCI_INDICGETHOVERFORE = 2683, - - SC_INDICVALUEBIT = 0x1000000, - - SC_INDICVALUEMASK = 0xFFFFFF, - - SC_INDICFLAG_VALUEFORE = 1, - - /// Set the attributes of an indicator. - SCI_INDICSETFLAGS = 2684, - - /// Retrieve the attributes of an indicator. - SCI_INDICGETFLAGS = 2685, - - /// Set the foreground colour of all whitespace and whether to use this setting. - SCI_SETWHITESPACEFORE = 2084, - - /// Set the background colour of all whitespace and whether to use this setting. - SCI_SETWHITESPACEBACK = 2085, - - /// Set the size of the dots used to mark space characters. - SCI_SETWHITESPACESIZE = 2086, - - /// Get the size of the dots used to mark space characters. - SCI_GETWHITESPACESIZE = 2087, - - /// Used to hold extra styling information for each line. - SCI_SETLINESTATE = 2092, - - /// Retrieve the extra styling information for a line. - SCI_GETLINESTATE = 2093, - - /// Retrieve the last line number that has line state. - SCI_GETMAXLINESTATE = 2094, - - /// Is the background of the line containing the caret in a different colour? - SCI_GETCARETLINEVISIBLE = 2095, - - /// Display the background of the line containing the caret in a different colour. - SCI_SETCARETLINEVISIBLE = 2096, - - /// Get the colour of the background of the line containing the caret. - SCI_GETCARETLINEBACK = 2097, - - /// Set the colour of the background of the line containing the caret. - SCI_SETCARETLINEBACK = 2098, - - /// Retrieve the caret line frame width. - /// Width = 0 means this option is disabled. - SCI_GETCARETLINEFRAME = 2704, - - /// Display the caret line framed. - /// Set width != 0 to enable this option and width = 0 to disable it. - SCI_SETCARETLINEFRAME = 2705, - - /// Set a style to be changeable or not (read only). - /// Experimental feature, currently buggy. - SCI_STYLESETCHANGEABLE = 2099, - - /// Display a auto-completion list. - /// The lengthEntered parameter indicates how many characters before - /// the caret should be used to provide context. - SCI_AUTOCSHOW = 2100, - - /// Remove the auto-completion list from the screen. - SCI_AUTOCCANCEL = 2101, - - /// Is there an auto-completion list visible? - SCI_AUTOCACTIVE = 2102, - - /// Retrieve the position of the caret when the auto-completion list was displayed. - SCI_AUTOCPOSSTART = 2103, - - /// User has selected an item so remove the list and insert the selection. - SCI_AUTOCCOMPLETE = 2104, - - /// Define a set of character that when typed cancel the auto-completion list. - SCI_AUTOCSTOPS = 2105, - - /// Change the separator character in the string setting up an auto-completion list. - /// Default is space but can be changed if items contain space. - SCI_AUTOCSETSEPARATOR = 2106, - - /// Retrieve the auto-completion list separator character. - SCI_AUTOCGETSEPARATOR = 2107, - - /// Select the item in the auto-completion list that starts with a string. - SCI_AUTOCSELECT = 2108, - - /// Should the auto-completion list be cancelled if the user backspaces to a - /// position before where the box was created. - SCI_AUTOCSETCANCELATSTART = 2110, - - /// Retrieve whether auto-completion cancelled by backspacing before start. - SCI_AUTOCGETCANCELATSTART = 2111, - - /// Define a set of characters that when typed will cause the autocompletion to - /// choose the selected item. - SCI_AUTOCSETFILLUPS = 2112, - - /// Should a single item auto-completion list automatically choose the item. - SCI_AUTOCSETCHOOSESINGLE = 2113, - - /// Retrieve whether a single item auto-completion list automatically choose the item. - SCI_AUTOCGETCHOOSESINGLE = 2114, - - /// Set whether case is significant when performing auto-completion searches. - SCI_AUTOCSETIGNORECASE = 2115, - - /// Retrieve state of ignore case flag. - SCI_AUTOCGETIGNORECASE = 2116, - - /// Display a list of strings and send notification when user chooses one. - SCI_USERLISTSHOW = 2117, - - /// Set whether or not autocompletion is hidden automatically when nothing matches. - SCI_AUTOCSETAUTOHIDE = 2118, - - /// Retrieve whether or not autocompletion is hidden automatically when nothing matches. - SCI_AUTOCGETAUTOHIDE = 2119, - - /// Set whether or not autocompletion deletes any word characters - /// after the inserted text upon completion. - SCI_AUTOCSETDROPRESTOFWORD = 2270, - - /// Retrieve whether or not autocompletion deletes any word characters - /// after the inserted text upon completion. - SCI_AUTOCGETDROPRESTOFWORD = 2271, - - /// Register an XPM image for use in autocompletion lists. - SCI_REGISTERIMAGE = 2405, - - /// Clear all the registered XPM images. - SCI_CLEARREGISTEREDIMAGES = 2408, - - /// Retrieve the auto-completion list type-separator character. - SCI_AUTOCGETTYPESEPARATOR = 2285, - - /// Change the type-separator character in the string setting up an auto-completion list. - /// Default is '?' but can be changed if items contain '?'. - SCI_AUTOCSETTYPESEPARATOR = 2286, - - /// Set the maximum width, in characters, of auto-completion and user lists. - /// Set to 0 to autosize to fit longest item, which is the default. - SCI_AUTOCSETMAXWIDTH = 2208, - - /// Get the maximum width, in characters, of auto-completion and user lists. - SCI_AUTOCGETMAXWIDTH = 2209, - - /// Set the maximum height, in rows, of auto-completion and user lists. - /// The default is 5 rows. - SCI_AUTOCSETMAXHEIGHT = 2210, - - /// Set the maximum height, in rows, of auto-completion and user lists. - SCI_AUTOCGETMAXHEIGHT = 2211, - - /// Set the number of spaces used for one level of indentation. - SCI_SETINDENT = 2122, - - /// Retrieve indentation size. - SCI_GETINDENT = 2123, - - /// Indentation will only use space characters if useTabs is false, otherwise - /// it will use a combination of tabs and spaces. - SCI_SETUSETABS = 2124, - - /// Retrieve whether tabs will be used in indentation. - SCI_GETUSETABS = 2125, - - /// Change the indentation of a line to a number of columns. - SCI_SETLINEINDENTATION = 2126, - - /// Retrieve the number of columns that a line is indented. - SCI_GETLINEINDENTATION = 2127, - - /// Retrieve the position before the first non indentation character on a line. - SCI_GETLINEINDENTPOSITION = 2128, - - /// Retrieve the column number of a position, taking tab width into account. - SCI_GETCOLUMN = 2129, - - /// Count characters between two positions. - SCI_COUNTCHARACTERS = 2633, - - /// Count code units between two positions. - SCI_COUNTCODEUNITS = 2715, - - /// Show or hide the horizontal scroll bar. - SCI_SETHSCROLLBAR = 2130, - - /// Is the horizontal scroll bar visible? - SCI_GETHSCROLLBAR = 2131, - - SC_IV_NONE = 0, - - SC_IV_REAL = 1, - - SC_IV_LOOKFORWARD = 2, - - SC_IV_LOOKBOTH = 3, - - /// Show or hide indentation guides. - SCI_SETINDENTATIONGUIDES = 2132, - - /// Are the indentation guides visible? - SCI_GETINDENTATIONGUIDES = 2133, - - /// Set the highlighted indentation guide column. - /// 0 = no highlighted guide. - SCI_SETHIGHLIGHTGUIDE = 2134, - - /// Get the highlighted indentation guide column. - SCI_GETHIGHLIGHTGUIDE = 2135, - - /// Get the position after the last visible characters on a line. - SCI_GETLINEENDPOSITION = 2136, - - /// Get the code page used to interpret the bytes of the document as characters. - SCI_GETCODEPAGE = 2137, - - /// Get the foreground colour of the caret. - SCI_GETCARETFORE = 2138, - - /// In read-only mode? - SCI_GETREADONLY = 2140, - - /// Sets the position of the caret. - SCI_SETCURRENTPOS = 2141, - - /// Sets the position that starts the selection - this becomes the anchor. - SCI_SETSELECTIONSTART = 2142, - - /// Returns the position at the start of the selection. - SCI_GETSELECTIONSTART = 2143, - - /// Sets the position that ends the selection - this becomes the caret. - SCI_SETSELECTIONEND = 2144, - - /// Returns the position at the end of the selection. - SCI_GETSELECTIONEND = 2145, - - /// Set caret to a position, while removing any existing selection. - SCI_SETEMPTYSELECTION = 2556, - - /// Sets the print magnification added to the point size of each style for printing. - SCI_SETPRINTMAGNIFICATION = 2146, - - /// Returns the print magnification. - SCI_GETPRINTMAGNIFICATION = 2147, - - SC_PRINT_NORMAL = 0, - - SC_PRINT_INVERTLIGHT = 1, - - SC_PRINT_BLACKONWHITE = 2, - - SC_PRINT_COLOURONWHITE = 3, - - SC_PRINT_COLOURONWHITEDEFAULTBG = 4, - - SC_PRINT_SCREENCOLOURS = 5, - - /// Modify colours when printing for clearer printed text. - SCI_SETPRINTCOLOURMODE = 2148, - - /// Returns the print colour mode. - SCI_GETPRINTCOLOURMODE = 2149, - - SCFIND_NONE = 0x0, - - SCFIND_WHOLEWORD = 0x2, - - SCFIND_MATCHCASE = 0x4, - - SCFIND_WORDSTART = 0x00100000, - - SCFIND_REGEXP = 0x00200000, - - SCFIND_POSIX = 0x00400000, - - SCFIND_CXX11REGEX = 0x00800000, - - /// Find some text in the document. - SCI_FINDTEXT = 2150, - - /// On Windows, will draw the document into a display context such as a printer. - SCI_FORMATRANGE = 2151, - - /// Retrieve the display line at the top of the display. - SCI_GETFIRSTVISIBLELINE = 2152, - - /// Retrieve the contents of a line. - /// Returns the length of the line. - SCI_GETLINE = 2153, - - /// Returns the number of lines in the document. There is always at least one. - SCI_GETLINECOUNT = 2154, - - /// Sets the size in pixels of the left margin. - SCI_SETMARGINLEFT = 2155, - - /// Returns the size in pixels of the left margin. - SCI_GETMARGINLEFT = 2156, - - /// Sets the size in pixels of the right margin. - SCI_SETMARGINRIGHT = 2157, - - /// Returns the size in pixels of the right margin. - SCI_GETMARGINRIGHT = 2158, - - /// Is the document different from when it was last saved? - SCI_GETMODIFY = 2159, - - /// Select a range of text. - SCI_SETSEL = 2160, - - /// Retrieve the selected text. - /// Return the length of the text. - /// Result is NUL-terminated. - SCI_GETSELTEXT = 2161, - - /// Retrieve a range of text. - /// Return the length of the text. - SCI_GETTEXTRANGE = 2162, - - /// Draw the selection either highlighted or in normal (non-highlighted) style. - SCI_HIDESELECTION = 2163, - - /// Retrieve the x value of the point in the window where a position is displayed. - SCI_POINTXFROMPOSITION = 2164, - - /// Retrieve the y value of the point in the window where a position is displayed. - SCI_POINTYFROMPOSITION = 2165, - - /// Retrieve the line containing a position. - SCI_LINEFROMPOSITION = 2166, - - /// Retrieve the position at the start of a line. - SCI_POSITIONFROMLINE = 2167, - - /// Scroll horizontally and vertically. - SCI_LINESCROLL = 2168, - - /// Ensure the caret is visible. - SCI_SCROLLCARET = 2169, - - /// Scroll the argument positions and the range between them into view giving - /// priority to the primary position then the secondary position. - /// This may be used to make a search match visible. - SCI_SCROLLRANGE = 2569, - - /// Replace the selected text with the argument text. - SCI_REPLACESEL = 2170, - - /// Set to read only or read write. - SCI_SETREADONLY = 2171, - - /// Null operation. - SCI_NULL = 2172, - - /// Will a paste succeed? - SCI_CANPASTE = 2173, - - /// Are there any undoable actions in the undo history? - SCI_CANUNDO = 2174, - - /// Delete the undo history. - SCI_EMPTYUNDOBUFFER = 2175, - - /// Undo one action in the undo history. - SCI_UNDO = 2176, - - /// Cut the selection to the clipboard. - SCI_CUT = 2177, - - /// Copy the selection to the clipboard. - SCI_COPY = 2178, - - /// Paste the contents of the clipboard into the document replacing the selection. - SCI_PASTE = 2179, - - /// Clear the selection. - SCI_CLEAR = 2180, - - /// Replace the contents of the document with the argument text. - SCI_SETTEXT = 2181, - - /// Retrieve all the text in the document. - /// Returns number of characters retrieved. - /// Result is NUL-terminated. - SCI_GETTEXT = 2182, - - /// Retrieve the number of characters in the document. - SCI_GETTEXTLENGTH = 2183, - - /// Retrieve a pointer to a function that processes messages for this Scintilla. - SCI_GETDIRECTFUNCTION = 2184, - - /// Retrieve a pointer value to use as the first argument when calling - /// the function returned by GetDirectFunction. - SCI_GETDIRECTPOINTER = 2185, - - /// Set to overtype (true) or insert mode. - SCI_SETOVERTYPE = 2186, - - /// Returns true if overtype mode is active otherwise false is returned. - SCI_GETOVERTYPE = 2187, - - /// Set the width of the insert mode caret. - SCI_SETCARETWIDTH = 2188, - - /// Returns the width of the insert mode caret. - SCI_GETCARETWIDTH = 2189, - - /// Sets the position that starts the target which is used for updating the - /// document without affecting the scroll position. - SCI_SETTARGETSTART = 2190, - - /// Get the position that starts the target. - SCI_GETTARGETSTART = 2191, - - /// Sets the position that ends the target which is used for updating the - /// document without affecting the scroll position. - SCI_SETTARGETEND = 2192, - - /// Get the position that ends the target. - SCI_GETTARGETEND = 2193, - - /// Sets both the start and end of the target in one call. - SCI_SETTARGETRANGE = 2686, - - /// Retrieve the text in the target. - SCI_GETTARGETTEXT = 2687, - - /// Make the target range start and end be the same as the selection range start and end. - SCI_TARGETFROMSELECTION = 2287, - - /// Sets the target to the whole document. - SCI_TARGETWHOLEDOCUMENT = 2690, - - /// Replace the target text with the argument text. - /// Text is counted so it can contain NULs. - /// Returns the length of the replacement text. - SCI_REPLACETARGET = 2194, - - /// Replace the target text with the argument text after \d processing. - /// Text is counted so it can contain NULs. - /// Looks for \d where d is between 1 and 9 and replaces these with the strings - /// matched in the last search operation which were surrounded by \( and \). - /// Returns the length of the replacement text including any change - /// caused by processing the \d patterns. - SCI_REPLACETARGETRE = 2195, - - /// Search for a counted string in the target and set the target to the found - /// range. Text is counted so it can contain NULs. - /// Returns start of found range or -1 for failure in which case target is not moved. - SCI_SEARCHINTARGET = 2197, - - /// Set the search flags used by SearchInTarget. - SCI_SETSEARCHFLAGS = 2198, - - /// Get the search flags used by SearchInTarget. - SCI_GETSEARCHFLAGS = 2199, - - /// Show a call tip containing a definition near position pos. - SCI_CALLTIPSHOW = 2200, - - /// Remove the call tip from the screen. - SCI_CALLTIPCANCEL = 2201, - - /// Is there an active call tip? - SCI_CALLTIPACTIVE = 2202, - - /// Retrieve the position where the caret was before displaying the call tip. - SCI_CALLTIPPOSSTART = 2203, - - /// Set the start position in order to change when backspacing removes the calltip. - SCI_CALLTIPSETPOSSTART = 2214, - - /// Highlight a segment of the definition. - SCI_CALLTIPSETHLT = 2204, - - /// Set the background colour for the call tip. - SCI_CALLTIPSETBACK = 2205, - - /// Set the foreground colour for the call tip. - SCI_CALLTIPSETFORE = 2206, - - /// Set the foreground colour for the highlighted part of the call tip. - SCI_CALLTIPSETFOREHLT = 2207, - - /// Enable use of STYLE_CALLTIP and set call tip tab size in pixels. - SCI_CALLTIPUSESTYLE = 2212, - - /// Set position of calltip, above or below text. - SCI_CALLTIPSETPOSITION = 2213, - - /// Find the display line of a document line taking hidden lines into account. - SCI_VISIBLEFROMDOCLINE = 2220, - - /// Find the document line of a display line taking hidden lines into account. - SCI_DOCLINEFROMVISIBLE = 2221, - - /// The number of display lines needed to wrap a document line - SCI_WRAPCOUNT = 2235, - - SC_FOLDLEVELBASE = 0x400, - - SC_FOLDLEVELWHITEFLAG = 0x1000, - - SC_FOLDLEVELHEADERFLAG = 0x2000, - - SC_FOLDLEVELNUMBERMASK = 0x0FFF, - - /// Set the fold level of a line. - /// This encodes an integer level along with flags indicating whether the - /// line is a header and whether it is effectively white space. - SCI_SETFOLDLEVEL = 2222, - - /// Retrieve the fold level of a line. - SCI_GETFOLDLEVEL = 2223, - - /// Find the last child line of a header line. - SCI_GETLASTCHILD = 2224, - - /// Find the parent line of a child line. - SCI_GETFOLDPARENT = 2225, - - /// Make a range of lines visible. - SCI_SHOWLINES = 2226, - - /// Make a range of lines invisible. - SCI_HIDELINES = 2227, - - /// Is a line visible? - SCI_GETLINEVISIBLE = 2228, - - /// Are all lines visible? - SCI_GETALLLINESVISIBLE = 2236, - - /// Show the children of a header line. - SCI_SETFOLDEXPANDED = 2229, - - /// Is a header line expanded? - SCI_GETFOLDEXPANDED = 2230, - - /// Switch a header line between expanded and contracted. - SCI_TOGGLEFOLD = 2231, - - /// Switch a header line between expanded and contracted and show some text after the line. - SCI_TOGGLEFOLDSHOWTEXT = 2700, - - SC_FOLDDISPLAYTEXT_HIDDEN = 0, - - SC_FOLDDISPLAYTEXT_STANDARD = 1, - - SC_FOLDDISPLAYTEXT_BOXED = 2, - - /// Set the style of fold display text. - SCI_FOLDDISPLAYTEXTSETSTYLE = 2701, - - /// Get the style of fold display text. - SCI_FOLDDISPLAYTEXTGETSTYLE = 2707, - - /// Set the default fold display text. - SCI_SETDEFAULTFOLDDISPLAYTEXT = 2722, - - /// Get the default fold display text. - SCI_GETDEFAULTFOLDDISPLAYTEXT = 2723, - - SC_FOLDACTION_CONTRACT = 0, - - SC_FOLDACTION_EXPAND = 1, - - SC_FOLDACTION_TOGGLE = 2, - - /// Expand or contract a fold header. - SCI_FOLDLINE = 2237, - - /// Expand or contract a fold header and its children. - SCI_FOLDCHILDREN = 2238, - - /// Expand a fold header and all children. Use the level argument instead of the line's current level. - SCI_EXPANDCHILDREN = 2239, - - /// Expand or contract all fold headers. - SCI_FOLDALL = 2662, - - /// Ensure a particular line is visible by expanding any header line hiding it. - SCI_ENSUREVISIBLE = 2232, - - SC_AUTOMATICFOLD_SHOW = 0x0001, - - SC_AUTOMATICFOLD_CLICK = 0x0002, - - SC_AUTOMATICFOLD_CHANGE = 0x0004, - - /// Set automatic folding behaviours. - SCI_SETAUTOMATICFOLD = 2663, - - /// Get automatic folding behaviours. - SCI_GETAUTOMATICFOLD = 2664, - - SC_FOLDFLAG_LINEBEFORE_EXPANDED = 0x0002, - - SC_FOLDFLAG_LINEBEFORE_CONTRACTED = 0x0004, - - SC_FOLDFLAG_LINEAFTER_EXPANDED = 0x0008, - - SC_FOLDFLAG_LINEAFTER_CONTRACTED = 0x0010, - - SC_FOLDFLAG_LEVELNUMBERS = 0x0040, - - SC_FOLDFLAG_LINESTATE = 0x0080, - - /// Set some style options for folding. - SCI_SETFOLDFLAGS = 2233, - - /// Ensure a particular line is visible by expanding any header line hiding it. - /// Use the currently set visibility policy to determine which range to display. - SCI_ENSUREVISIBLEENFORCEPOLICY = 2234, - - /// Sets whether a tab pressed when caret is within indentation indents. - SCI_SETTABINDENTS = 2260, - - /// Does a tab pressed when caret is within indentation indent? - SCI_GETTABINDENTS = 2261, - - /// Sets whether a backspace pressed when caret is within indentation unindents. - SCI_SETBACKSPACEUNINDENTS = 2262, - - /// Does a backspace pressed when caret is within indentation unindent? - SCI_GETBACKSPACEUNINDENTS = 2263, - - SC_TIME_FOREVER = 10000000, - - /// Sets the time the mouse must sit still to generate a mouse dwell event. - SCI_SETMOUSEDWELLTIME = 2264, - - /// Retrieve the time the mouse must sit still to generate a mouse dwell event. - SCI_GETMOUSEDWELLTIME = 2265, - - /// Get position of start of word. - SCI_WORDSTARTPOSITION = 2266, - - /// Get position of end of word. - SCI_WORDENDPOSITION = 2267, - - /// Is the range start..end considered a word? - SCI_ISRANGEWORD = 2691, - - SC_IDLESTYLING_NONE = 0, - - SC_IDLESTYLING_TOVISIBLE = 1, - - SC_IDLESTYLING_AFTERVISIBLE = 2, - - SC_IDLESTYLING_ALL = 3, - - /// Sets limits to idle styling. - SCI_SETIDLESTYLING = 2692, - - /// Retrieve the limits to idle styling. - SCI_GETIDLESTYLING = 2693, - - SC_WRAP_NONE = 0, - - SC_WRAP_WORD = 1, - - SC_WRAP_CHAR = 2, - - SC_WRAP_WHITESPACE = 3, - - /// Sets whether text is word wrapped. - SCI_SETWRAPMODE = 2268, - - /// Retrieve whether text is word wrapped. - SCI_GETWRAPMODE = 2269, - - SC_WRAPVISUALFLAG_NONE = 0x0000, - - SC_WRAPVISUALFLAG_END = 0x0001, - - SC_WRAPVISUALFLAG_START = 0x0002, - - SC_WRAPVISUALFLAG_MARGIN = 0x0004, - - /// Set the display mode of visual flags for wrapped lines. - SCI_SETWRAPVISUALFLAGS = 2460, - - /// Retrive the display mode of visual flags for wrapped lines. - SCI_GETWRAPVISUALFLAGS = 2461, - - SC_WRAPVISUALFLAGLOC_DEFAULT = 0x0000, - - SC_WRAPVISUALFLAGLOC_END_BY_TEXT = 0x0001, - - SC_WRAPVISUALFLAGLOC_START_BY_TEXT = 0x0002, - - /// Set the location of visual flags for wrapped lines. - SCI_SETWRAPVISUALFLAGSLOCATION = 2462, - - /// Retrive the location of visual flags for wrapped lines. - SCI_GETWRAPVISUALFLAGSLOCATION = 2463, - - /// Set the start indent for wrapped lines. - SCI_SETWRAPSTARTINDENT = 2464, - - /// Retrive the start indent for wrapped lines. - SCI_GETWRAPSTARTINDENT = 2465, - - SC_WRAPINDENT_FIXED = 0, - - SC_WRAPINDENT_SAME = 1, - - SC_WRAPINDENT_INDENT = 2, - - SC_WRAPINDENT_DEEPINDENT = 3, - - /// Sets how wrapped sublines are placed. Default is fixed. - SCI_SETWRAPINDENTMODE = 2472, - - /// Retrieve how wrapped sublines are placed. Default is fixed. - SCI_GETWRAPINDENTMODE = 2473, - - SC_CACHE_NONE = 0, - - SC_CACHE_CARET = 1, - - SC_CACHE_PAGE = 2, - - SC_CACHE_DOCUMENT = 3, - - /// Sets the degree of caching of layout information. - SCI_SETLAYOUTCACHE = 2272, - - /// Retrieve the degree of caching of layout information. - SCI_GETLAYOUTCACHE = 2273, - - /// Sets the document width assumed for scrolling. - SCI_SETSCROLLWIDTH = 2274, - - /// Retrieve the document width assumed for scrolling. - SCI_GETSCROLLWIDTH = 2275, - - /// Sets whether the maximum width line displayed is used to set scroll width. - SCI_SETSCROLLWIDTHTRACKING = 2516, - - /// Retrieve whether the scroll width tracks wide lines. - SCI_GETSCROLLWIDTHTRACKING = 2517, - - /// Measure the pixel width of some text in a particular style. - /// NUL terminated text argument. - /// Does not handle tab or control characters. - SCI_TEXTWIDTH = 2276, - - /// Sets the scroll range so that maximum scroll position has - /// the last line at the bottom of the view (default). - /// Setting this to false allows scrolling one page below the last line. - SCI_SETENDATLASTLINE = 2277, - - /// Retrieve whether the maximum scroll position has the last - /// line at the bottom of the view. - SCI_GETENDATLASTLINE = 2278, - - /// Retrieve the height of a particular line of text in pixels. - SCI_TEXTHEIGHT = 2279, - - /// Show or hide the vertical scroll bar. - SCI_SETVSCROLLBAR = 2280, - - /// Is the vertical scroll bar visible? - SCI_GETVSCROLLBAR = 2281, - - /// Append a string to the end of the document without changing the selection. - SCI_APPENDTEXT = 2282, - - SC_PHASES_ONE = 0, - - SC_PHASES_TWO = 1, - - SC_PHASES_MULTIPLE = 2, - - /// How many phases is drawing done in? - SCI_GETPHASESDRAW = 2673, - - /// In one phase draw, text is drawn in a series of rectangular blocks with no overlap. - /// In two phase draw, text is drawn in a series of lines allowing runs to overlap horizontally. - /// In multiple phase draw, each element is drawn over the whole drawing area, allowing text - /// to overlap from one line to the next. - SCI_SETPHASESDRAW = 2674, - - SC_EFF_QUALITY_MASK = 0xF, - - SC_EFF_QUALITY_DEFAULT = 0, - - SC_EFF_QUALITY_NON_ANTIALIASED = 1, - - SC_EFF_QUALITY_ANTIALIASED = 2, - - SC_EFF_QUALITY_LCD_OPTIMIZED = 3, - - /// Choose the quality level for text from the FontQuality enumeration. - SCI_SETFONTQUALITY = 2611, - - /// Retrieve the quality level for text. - SCI_GETFONTQUALITY = 2612, - - /// Scroll so that a display line is at the top of the display. - SCI_SETFIRSTVISIBLELINE = 2613, - - SC_MULTIPASTE_ONCE = 0, - - SC_MULTIPASTE_EACH = 1, - - /// Change the effect of pasting when there are multiple selections. - SCI_SETMULTIPASTE = 2614, - - /// Retrieve the effect of pasting when there are multiple selections. - SCI_GETMULTIPASTE = 2615, - - /// Retrieve the value of a tag from a regular expression search. - /// Result is NUL-terminated. - SCI_GETTAG = 2616, - - /// Join the lines in the target. - SCI_LINESJOIN = 2288, - - /// Split the lines in the target into lines that are less wide than pixelWidth - /// where possible. - SCI_LINESSPLIT = 2289, - - /// Set one of the colours used as a chequerboard pattern in the fold margin - SCI_SETFOLDMARGINCOLOUR = 2290, - - /// Set the other colour used as a chequerboard pattern in the fold margin - SCI_SETFOLDMARGINHICOLOUR = 2291, - - SC_ACCESSIBILITY_DISABLED = 0, - - SC_ACCESSIBILITY_ENABLED = 1, - - /// Enable or disable accessibility. - SCI_SETACCESSIBILITY = 2702, - - /// Report accessibility status. - SCI_GETACCESSIBILITY = 2703, - - /// Move caret down one line. - SCI_LINEDOWN = 2300, - - /// Move caret down one line extending selection to new caret position. - SCI_LINEDOWNEXTEND = 2301, - - /// Move caret up one line. - SCI_LINEUP = 2302, - - /// Move caret up one line extending selection to new caret position. - SCI_LINEUPEXTEND = 2303, - - /// Move caret left one character. - SCI_CHARLEFT = 2304, - - /// Move caret left one character extending selection to new caret position. - SCI_CHARLEFTEXTEND = 2305, - - /// Move caret right one character. - SCI_CHARRIGHT = 2306, - - /// Move caret right one character extending selection to new caret position. - SCI_CHARRIGHTEXTEND = 2307, - - /// Move caret left one word. - SCI_WORDLEFT = 2308, - - /// Move caret left one word extending selection to new caret position. - SCI_WORDLEFTEXTEND = 2309, - - /// Move caret right one word. - SCI_WORDRIGHT = 2310, - - /// Move caret right one word extending selection to new caret position. - SCI_WORDRIGHTEXTEND = 2311, - - /// Move caret to first position on line. - SCI_HOME = 2312, - - /// Move caret to first position on line extending selection to new caret position. - SCI_HOMEEXTEND = 2313, - - /// Move caret to last position on line. - SCI_LINEEND = 2314, - - /// Move caret to last position on line extending selection to new caret position. - SCI_LINEENDEXTEND = 2315, - - /// Move caret to first position in document. - SCI_DOCUMENTSTART = 2316, - - /// Move caret to first position in document extending selection to new caret position. - SCI_DOCUMENTSTARTEXTEND = 2317, - - /// Move caret to last position in document. - SCI_DOCUMENTEND = 2318, - - /// Move caret to last position in document extending selection to new caret position. - SCI_DOCUMENTENDEXTEND = 2319, - - /// Move caret one page up. - SCI_PAGEUP = 2320, - - /// Move caret one page up extending selection to new caret position. - SCI_PAGEUPEXTEND = 2321, - - /// Move caret one page down. - SCI_PAGEDOWN = 2322, - - /// Move caret one page down extending selection to new caret position. - SCI_PAGEDOWNEXTEND = 2323, - - /// Switch from insert to overtype mode or the reverse. - SCI_EDITTOGGLEOVERTYPE = 2324, - - /// Cancel any modes such as call tip or auto-completion list display. - SCI_CANCEL = 2325, - - /// Delete the selection or if no selection, the character before the caret. - SCI_DELETEBACK = 2326, - - /// If selection is empty or all on one line replace the selection with a tab character. - /// If more than one line selected, indent the lines. - SCI_TAB = 2327, - - /// Dedent the selected lines. - SCI_BACKTAB = 2328, - - /// Insert a new line, may use a CRLF, CR or LF depending on EOL mode. - SCI_NEWLINE = 2329, - - /// Insert a Form Feed character. - SCI_FORMFEED = 2330, - - /// Move caret to before first visible character on line. - /// If already there move to first character on line. - SCI_VCHOME = 2331, - - /// Like VCHome but extending selection to new caret position. - SCI_VCHOMEEXTEND = 2332, - - /// Magnify the displayed text by increasing the sizes by 1 point. - SCI_ZOOMIN = 2333, - - /// Make the displayed text smaller by decreasing the sizes by 1 point. - SCI_ZOOMOUT = 2334, - - /// Delete the word to the left of the caret. - SCI_DELWORDLEFT = 2335, - - /// Delete the word to the right of the caret. - SCI_DELWORDRIGHT = 2336, - - /// Delete the word to the right of the caret, but not the trailing non-word characters. - SCI_DELWORDRIGHTEND = 2518, - - /// Cut the line containing the caret. - SCI_LINECUT = 2337, - - /// Delete the line containing the caret. - SCI_LINEDELETE = 2338, - - /// Switch the current line with the previous. - SCI_LINETRANSPOSE = 2339, - - /// Reverse order of selected lines. - SCI_LINEREVERSE = 2354, - - /// Duplicate the current line. - SCI_LINEDUPLICATE = 2404, - - /// Transform the selection to lower case. - SCI_LOWERCASE = 2340, - - /// Transform the selection to upper case. - SCI_UPPERCASE = 2341, - - /// Scroll the document down, keeping the caret visible. - SCI_LINESCROLLDOWN = 2342, - - /// Scroll the document up, keeping the caret visible. - SCI_LINESCROLLUP = 2343, - - /// Delete the selection or if no selection, the character before the caret. - /// Will not delete the character before at the start of a line. - SCI_DELETEBACKNOTLINE = 2344, - - /// Move caret to first position on display line. - SCI_HOMEDISPLAY = 2345, - - /// Move caret to first position on display line extending selection to - /// new caret position. - SCI_HOMEDISPLAYEXTEND = 2346, - - /// Move caret to last position on display line. - SCI_LINEENDDISPLAY = 2347, - - /// Move caret to last position on display line extending selection to new - /// caret position. - SCI_LINEENDDISPLAYEXTEND = 2348, - - /// Like Home but when word-wrap is enabled goes first to start of display line - /// HomeDisplay, then to start of document line Home. - SCI_HOMEWRAP = 2349, - - /// Like HomeExtend but when word-wrap is enabled extends first to start of display line - /// HomeDisplayExtend, then to start of document line HomeExtend. - SCI_HOMEWRAPEXTEND = 2450, - - /// Like LineEnd but when word-wrap is enabled goes first to end of display line - /// LineEndDisplay, then to start of document line LineEnd. - SCI_LINEENDWRAP = 2451, - - /// Like LineEndExtend but when word-wrap is enabled extends first to end of display line - /// LineEndDisplayExtend, then to start of document line LineEndExtend. - SCI_LINEENDWRAPEXTEND = 2452, - - /// Like VCHome but when word-wrap is enabled goes first to start of display line - /// VCHomeDisplay, then behaves like VCHome. - SCI_VCHOMEWRAP = 2453, - - /// Like VCHomeExtend but when word-wrap is enabled extends first to start of display line - /// VCHomeDisplayExtend, then behaves like VCHomeExtend. - SCI_VCHOMEWRAPEXTEND = 2454, - - /// Copy the line containing the caret. - SCI_LINECOPY = 2455, - - /// Move the caret inside current view if it's not there already. - SCI_MOVECARETINSIDEVIEW = 2401, - - /// How many characters are on a line, including end of line characters? - SCI_LINELENGTH = 2350, - - /// Highlight the characters at two positions. - SCI_BRACEHIGHLIGHT = 2351, - - /// Use specified indicator to highlight matching braces instead of changing their style. - SCI_BRACEHIGHLIGHTINDICATOR = 2498, - - /// Highlight the character at a position indicating there is no matching brace. - SCI_BRACEBADLIGHT = 2352, - - /// Use specified indicator to highlight non matching brace instead of changing its style. - SCI_BRACEBADLIGHTINDICATOR = 2499, - - /// Find the position of a matching brace or INVALID_POSITION if no match. - /// The maxReStyle must be 0 for now. It may be defined in a future release. - SCI_BRACEMATCH = 2353, - - /// Are the end of line characters visible? - SCI_GETVIEWEOL = 2355, - - /// Make the end of line characters visible or invisible. - SCI_SETVIEWEOL = 2356, - - /// Retrieve a pointer to the document object. - SCI_GETDOCPOINTER = 2357, - - /// Change the document object used. - SCI_SETDOCPOINTER = 2358, - - /// Set which document modification events are sent to the container. - SCI_SETMODEVENTMASK = 2359, - - EDGE_NONE = 0, - - EDGE_LINE = 1, - - EDGE_BACKGROUND = 2, - - EDGE_MULTILINE = 3, - - /// Retrieve the column number which text should be kept within. - SCI_GETEDGECOLUMN = 2360, - - /// Set the column number of the edge. - /// If text goes past the edge then it is highlighted. - SCI_SETEDGECOLUMN = 2361, - - /// Retrieve the edge highlight mode. - SCI_GETEDGEMODE = 2362, - - /// The edge may be displayed by a line (EDGE_LINE/EDGE_MULTILINE) or by highlighting text that - /// goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). - SCI_SETEDGEMODE = 2363, - - /// Retrieve the colour used in edge indication. - SCI_GETEDGECOLOUR = 2364, - - /// Change the colour used in edge indication. - SCI_SETEDGECOLOUR = 2365, - - /// Add a new vertical edge to the view. - SCI_MULTIEDGEADDLINE = 2694, - - /// Clear all vertical edges. - SCI_MULTIEDGECLEARALL = 2695, - - /// Sets the current caret position to be the search anchor. - SCI_SEARCHANCHOR = 2366, - - /// Find some text starting at the search anchor. - /// Does not ensure the selection is visible. - SCI_SEARCHNEXT = 2367, - - /// Find some text starting at the search anchor and moving backwards. - /// Does not ensure the selection is visible. - SCI_SEARCHPREV = 2368, - - /// Retrieves the number of lines completely visible. - SCI_LINESONSCREEN = 2370, - - SC_POPUP_NEVER = 0, - - SC_POPUP_ALL = 1, - - SC_POPUP_TEXT = 2, - - /// Set whether a pop up menu is displayed automatically when the user presses - /// the wrong mouse button on certain areas. - SCI_USEPOPUP = 2371, - - /// Is the selection rectangular? The alternative is the more common stream selection. - SCI_SELECTIONISRECTANGLE = 2372, - - /// Set the zoom level. This number of points is added to the size of all fonts. - /// It may be positive to magnify or negative to reduce. - SCI_SETZOOM = 2373, - - /// Retrieve the zoom level. - SCI_GETZOOM = 2374, - - SC_DOCUMENTOPTION_DEFAULT = 0, - - SC_DOCUMENTOPTION_STYLES_NONE = 0x1, - - SC_DOCUMENTOPTION_TEXT_LARGE = 0x100, - - /// Create a new document object. - /// Starts with reference count of 1 and not selected into editor. - SCI_CREATEDOCUMENT = 2375, - - /// Extend life of document. - SCI_ADDREFDOCUMENT = 2376, - - /// Release a reference to the document, deleting document if it fades to black. - SCI_RELEASEDOCUMENT = 2377, - - /// Get which document options are set. - SCI_GETDOCUMENTOPTIONS = 2379, - - /// Get which document modification events are sent to the container. - SCI_GETMODEVENTMASK = 2378, - - /// Set whether command events are sent to the container. - SCI_SETCOMMANDEVENTS = 2717, - - /// Get whether command events are sent to the container. - SCI_GETCOMMANDEVENTS = 2718, - - /// Change internal focus flag. - SCI_SETFOCUS = 2380, - - /// Get internal focus flag. - SCI_GETFOCUS = 2381, - - SC_STATUS_OK = 0, - - SC_STATUS_FAILURE = 1, - - SC_STATUS_BADALLOC = 2, - - SC_STATUS_WARN_START = 1000, - - SC_STATUS_WARN_REGEX = 1001, - - /// Change error status - 0 = OK. - SCI_SETSTATUS = 2382, - - /// Get error status. - SCI_GETSTATUS = 2383, - - /// Set whether the mouse is captured when its button is pressed. - SCI_SETMOUSEDOWNCAPTURES = 2384, - - /// Get whether mouse gets captured. - SCI_GETMOUSEDOWNCAPTURES = 2385, - - /// Set whether the mouse wheel can be active outside the window. - SCI_SETMOUSEWHEELCAPTURES = 2696, - - /// Get whether mouse wheel can be active outside the window. - SCI_GETMOUSEWHEELCAPTURES = 2697, - - SC_CURSORNORMAL = 0xFFFFFFFF, - - SC_CURSORARROW = 2, - - SC_CURSORWAIT = 4, - - SC_CURSORREVERSEARROW = 7, - - /// Sets the cursor to one of the SC_CURSOR* values. - SCI_SETCURSOR = 2386, - - /// Get cursor type. - SCI_GETCURSOR = 2387, - - /// Change the way control characters are displayed: - /// If symbol is < 32, keep the drawn way, else, use the given character. - SCI_SETCONTROLCHARSYMBOL = 2388, - - /// Get the way control characters are displayed. - SCI_GETCONTROLCHARSYMBOL = 2389, - - /// Move to the previous change in capitalisation. - SCI_WORDPARTLEFT = 2390, - - /// Move to the previous change in capitalisation extending selection - /// to new caret position. - SCI_WORDPARTLEFTEXTEND = 2391, - - /// Move to the change next in capitalisation. - SCI_WORDPARTRIGHT = 2392, - - /// Move to the next change in capitalisation extending selection - /// to new caret position. - SCI_WORDPARTRIGHTEXTEND = 2393, - - VISIBLE_SLOP = 0x01, - - VISIBLE_STRICT = 0x04, - - /// Set the way the display area is determined when a particular line - /// is to be moved to by Find, FindNext, GotoLine, etc. - SCI_SETVISIBLEPOLICY = 2394, - - /// Delete back from the current position to the start of the line. - SCI_DELLINELEFT = 2395, - - /// Delete forwards from the current position to the end of the line. - SCI_DELLINERIGHT = 2396, - - /// Set the xOffset (ie, horizontal scroll position). - SCI_SETXOFFSET = 2397, - - /// Get the xOffset (ie, horizontal scroll position). - SCI_GETXOFFSET = 2398, - - /// Set the last x chosen value to be the caret x position. - SCI_CHOOSECARETX = 2399, - - /// Set the focus to this Scintilla widget. - SCI_GRABFOCUS = 2400, - - CARET_SLOP = 0x01, - - CARET_STRICT = 0x04, - - CARET_JUMPS = 0x10, - - CARET_EVEN = 0x08, - - /// Set the way the caret is kept visible when going sideways. - /// The exclusion zone is given in pixels. - SCI_SETXCARETPOLICY = 2402, - - /// Set the way the line the caret is on is kept visible. - /// The exclusion zone is given in lines. - SCI_SETYCARETPOLICY = 2403, - - /// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). - SCI_SETPRINTWRAPMODE = 2406, - - /// Is printing line wrapped? - SCI_GETPRINTWRAPMODE = 2407, - - /// Set a fore colour for active hotspots. - SCI_SETHOTSPOTACTIVEFORE = 2410, - - /// Get the fore colour for active hotspots. - SCI_GETHOTSPOTACTIVEFORE = 2494, - - /// Set a back colour for active hotspots. - SCI_SETHOTSPOTACTIVEBACK = 2411, - - /// Get the back colour for active hotspots. - SCI_GETHOTSPOTACTIVEBACK = 2495, - - /// Enable / Disable underlining active hotspots. - SCI_SETHOTSPOTACTIVEUNDERLINE = 2412, - - /// Get whether underlining for active hotspots. - SCI_GETHOTSPOTACTIVEUNDERLINE = 2496, - - /// Limit hotspots to single line so hotspots on two lines don't merge. - SCI_SETHOTSPOTSINGLELINE = 2421, - - /// Get the HotspotSingleLine property - SCI_GETHOTSPOTSINGLELINE = 2497, - - /// Move caret down one paragraph (delimited by empty lines). - SCI_PARADOWN = 2413, - - /// Extend selection down one paragraph (delimited by empty lines). - SCI_PARADOWNEXTEND = 2414, - - /// Move caret up one paragraph (delimited by empty lines). - SCI_PARAUP = 2415, - - /// Extend selection up one paragraph (delimited by empty lines). - SCI_PARAUPEXTEND = 2416, - - /// Given a valid document position, return the previous position taking code - /// page into account. Returns 0 if passed 0. - SCI_POSITIONBEFORE = 2417, - - /// Given a valid document position, return the next position taking code - /// page into account. Maximum value returned is the last position in the document. - SCI_POSITIONAFTER = 2418, - - /// Given a valid document position, return a position that differs in a number - /// of characters. Returned value is always between 0 and last position in document. - SCI_POSITIONRELATIVE = 2670, - - /// Given a valid document position, return a position that differs in a number - /// of UTF-16 code units. Returned value is always between 0 and last position in document. - /// The result may point half way (2 bytes) inside a non-BMP character. - SCI_POSITIONRELATIVECODEUNITS = 2716, - - /// Copy a range of text to the clipboard. Positions are clipped into the document. - SCI_COPYRANGE = 2419, - - /// Copy argument text to the clipboard. - SCI_COPYTEXT = 2420, - - SC_SEL_STREAM = 0, - - SC_SEL_RECTANGLE = 1, - - SC_SEL_LINES = 2, - - SC_SEL_THIN = 3, - - /// Set the selection mode to stream (SC_SEL_STREAM) or rectangular (SC_SEL_RECTANGLE/SC_SEL_THIN) or - /// by lines (SC_SEL_LINES). - SCI_SETSELECTIONMODE = 2422, - - /// Get the mode of the current selection. - SCI_GETSELECTIONMODE = 2423, - - /// Get whether or not regular caret moves will extend or reduce the selection. - SCI_GETMOVEEXTENDSSELECTION = 2706, - - /// Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line). - SCI_GETLINESELSTARTPOSITION = 2424, - - /// Retrieve the position of the end of the selection at the given line (INVALID_POSITION if no selection on this line). - SCI_GETLINESELENDPOSITION = 2425, - - /// Move caret down one line, extending rectangular selection to new caret position. - SCI_LINEDOWNRECTEXTEND = 2426, - - /// Move caret up one line, extending rectangular selection to new caret position. - SCI_LINEUPRECTEXTEND = 2427, - - /// Move caret left one character, extending rectangular selection to new caret position. - SCI_CHARLEFTRECTEXTEND = 2428, - - /// Move caret right one character, extending rectangular selection to new caret position. - SCI_CHARRIGHTRECTEXTEND = 2429, - - /// Move caret to first position on line, extending rectangular selection to new caret position. - SCI_HOMERECTEXTEND = 2430, - - /// Move caret to before first visible character on line. - /// If already there move to first character on line. - /// In either case, extend rectangular selection to new caret position. - SCI_VCHOMERECTEXTEND = 2431, - - /// Move caret to last position on line, extending rectangular selection to new caret position. - SCI_LINEENDRECTEXTEND = 2432, - - /// Move caret one page up, extending rectangular selection to new caret position. - SCI_PAGEUPRECTEXTEND = 2433, - - /// Move caret one page down, extending rectangular selection to new caret position. - SCI_PAGEDOWNRECTEXTEND = 2434, - - /// Move caret to top of page, or one page up if already at top of page. - SCI_STUTTEREDPAGEUP = 2435, - - /// Move caret to top of page, or one page up if already at top of page, extending selection to new caret position. - SCI_STUTTEREDPAGEUPEXTEND = 2436, - - /// Move caret to bottom of page, or one page down if already at bottom of page. - SCI_STUTTEREDPAGEDOWN = 2437, - - /// Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position. - SCI_STUTTEREDPAGEDOWNEXTEND = 2438, - - /// Move caret left one word, position cursor at end of word. - SCI_WORDLEFTEND = 2439, - - /// Move caret left one word, position cursor at end of word, extending selection to new caret position. - SCI_WORDLEFTENDEXTEND = 2440, - - /// Move caret right one word, position cursor at end of word. - SCI_WORDRIGHTEND = 2441, - - /// Move caret right one word, position cursor at end of word, extending selection to new caret position. - SCI_WORDRIGHTENDEXTEND = 2442, - - /// Set the set of characters making up whitespace for when moving or selecting by word. - /// Should be called after SetWordChars. - SCI_SETWHITESPACECHARS = 2443, - - /// Get the set of characters making up whitespace for when moving or selecting by word. - SCI_GETWHITESPACECHARS = 2647, - - /// Set the set of characters making up punctuation characters - /// Should be called after SetWordChars. - SCI_SETPUNCTUATIONCHARS = 2648, - - /// Get the set of characters making up punctuation characters - SCI_GETPUNCTUATIONCHARS = 2649, - - /// Reset the set of characters for whitespace and word characters to the defaults. - SCI_SETCHARSDEFAULT = 2444, - - /// Get currently selected item position in the auto-completion list - SCI_AUTOCGETCURRENT = 2445, - - /// Get currently selected item text in the auto-completion list - /// Returns the length of the item text - /// Result is NUL-terminated. - SCI_AUTOCGETCURRENTTEXT = 2610, - - SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE = 0, - - SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE = 1, - - /// Set auto-completion case insensitive behaviour to either prefer case-sensitive matches or have no preference. - SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR = 2634, - - /// Get auto-completion case insensitive behaviour. - SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR = 2635, - - SC_MULTIAUTOC_ONCE = 0, - - SC_MULTIAUTOC_EACH = 1, - - /// Change the effect of autocompleting when there are multiple selections. - SCI_AUTOCSETMULTI = 2636, - - /// Retrieve the effect of autocompleting when there are multiple selections. - SCI_AUTOCGETMULTI = 2637, - - SC_ORDER_PRESORTED = 0, - - SC_ORDER_PERFORMSORT = 1, - - SC_ORDER_CUSTOM = 2, - - /// Set the way autocompletion lists are ordered. - SCI_AUTOCSETORDER = 2660, - - /// Get the way autocompletion lists are ordered. - SCI_AUTOCGETORDER = 2661, - - /// Enlarge the document to a particular size of text bytes. - SCI_ALLOCATE = 2446, - - /// Returns the target converted to UTF8. - /// Return the length in bytes. - SCI_TARGETASUTF8 = 2447, - - /// Set the length of the utf8 argument for calling EncodedFromUTF8. - /// Set to -1 and the string will be measured to the first nul. - SCI_SETLENGTHFORENCODE = 2448, - - /// Translates a UTF8 string into the document encoding. - /// Return the length of the result in bytes. - /// On error return 0. - SCI_ENCODEDFROMUTF8 = 2449, - - /// Find the position of a column on a line taking into account tabs and - /// multi-byte characters. If beyond end of line, return line end position. - SCI_FINDCOLUMN = 2456, - - /// Can the caret preferred x position only be changed by explicit movement commands? - SCI_GETCARETSTICKY = 2457, - - /// Stop the caret preferred x position changing when the user types. - SCI_SETCARETSTICKY = 2458, - - SC_CARETSTICKY_OFF = 0, - - SC_CARETSTICKY_ON = 1, - - SC_CARETSTICKY_WHITESPACE = 2, - - /// Switch between sticky and non-sticky: meant to be bound to a key. - SCI_TOGGLECARETSTICKY = 2459, - - /// Enable/Disable convert-on-paste for line endings - SCI_SETPASTECONVERTENDINGS = 2467, - - /// Get convert-on-paste setting - SCI_GETPASTECONVERTENDINGS = 2468, - - /// Duplicate the selection. If selection empty duplicate the line containing the caret. - SCI_SELECTIONDUPLICATE = 2469, - - SC_ALPHA_TRANSPARENT = 0, - - SC_ALPHA_OPAQUE = 255, - - SC_ALPHA_NOALPHA = 256, - - /// Set background alpha of the caret line. - SCI_SETCARETLINEBACKALPHA = 2470, - - /// Get the background alpha of the caret line. - SCI_GETCARETLINEBACKALPHA = 2471, - - CARETSTYLE_INVISIBLE = 0, - - CARETSTYLE_LINE = 1, - - CARETSTYLE_BLOCK = 2, - - CARETSTYLE_OVERSTRIKE_BAR = 0, - - CARETSTYLE_OVERSTRIKE_BLOCK = 0x10, - - CARETSTYLE_INS_MASK = 0xF, - - CARETSTYLE_BLOCK_AFTER = 0x100, - - /// Set the style of the caret to be drawn. - SCI_SETCARETSTYLE = 2512, - - /// Returns the current style of the caret. - SCI_GETCARETSTYLE = 2513, - - /// Set the indicator used for IndicatorFillRange and IndicatorClearRange - SCI_SETINDICATORCURRENT = 2500, - - /// Get the current indicator - SCI_GETINDICATORCURRENT = 2501, - - /// Set the value used for IndicatorFillRange - SCI_SETINDICATORVALUE = 2502, - - /// Get the current indicator value - SCI_GETINDICATORVALUE = 2503, - - /// Turn a indicator on over a range. - SCI_INDICATORFILLRANGE = 2504, - - /// Turn a indicator off over a range. - SCI_INDICATORCLEARRANGE = 2505, - - /// Are any indicators present at pos? - SCI_INDICATORALLONFOR = 2506, - - /// What value does a particular indicator have at a position? - SCI_INDICATORVALUEAT = 2507, - - /// Where does a particular indicator start? - SCI_INDICATORSTART = 2508, - - /// Where does a particular indicator end? - SCI_INDICATOREND = 2509, - - /// Set number of entries in position cache - SCI_SETPOSITIONCACHE = 2514, - - /// How many entries are allocated to the position cache? - SCI_GETPOSITIONCACHE = 2515, - - /// Copy the selection, if selection empty copy the line with the caret - SCI_COPYALLOWLINE = 2519, - - /// Compact the document buffer and return a read-only pointer to the - /// characters in the document. - SCI_GETCHARACTERPOINTER = 2520, - - /// Return a read-only pointer to a range of characters in the document. - /// May move the gap so that the range is contiguous, but will only move up - /// to lengthRange bytes. - SCI_GETRANGEPOINTER = 2643, - - /// Return a position which, to avoid performance costs, should not be within - /// the range of a call to GetRangePointer. - SCI_GETGAPPOSITION = 2644, - - /// Set the alpha fill colour of the given indicator. - SCI_INDICSETALPHA = 2523, - - /// Get the alpha fill colour of the given indicator. - SCI_INDICGETALPHA = 2524, - - /// Set the alpha outline colour of the given indicator. - SCI_INDICSETOUTLINEALPHA = 2558, - - /// Get the alpha outline colour of the given indicator. - SCI_INDICGETOUTLINEALPHA = 2559, - - /// Set extra ascent for each line - SCI_SETEXTRAASCENT = 2525, - - /// Get extra ascent for each line - SCI_GETEXTRAASCENT = 2526, - - /// Set extra descent for each line - SCI_SETEXTRADESCENT = 2527, - - /// Get extra descent for each line - SCI_GETEXTRADESCENT = 2528, - - /// Which symbol was defined for markerNumber with MarkerDefine - SCI_MARKERSYMBOLDEFINED = 2529, - - /// Set the text in the text margin for a line - SCI_MARGINSETTEXT = 2530, - - /// Get the text in the text margin for a line - SCI_MARGINGETTEXT = 2531, - - /// Set the style number for the text margin for a line - SCI_MARGINSETSTYLE = 2532, - - /// Get the style number for the text margin for a line - SCI_MARGINGETSTYLE = 2533, - - /// Set the style in the text margin for a line - SCI_MARGINSETSTYLES = 2534, - - /// Get the styles in the text margin for a line - SCI_MARGINGETSTYLES = 2535, - - /// Clear the margin text on all lines - SCI_MARGINTEXTCLEARALL = 2536, - - /// Get the start of the range of style numbers used for margin text - SCI_MARGINSETSTYLEOFFSET = 2537, - - /// Get the start of the range of style numbers used for margin text - SCI_MARGINGETSTYLEOFFSET = 2538, - - SC_MARGINOPTION_NONE = 0, - - SC_MARGINOPTION_SUBLINESELECT = 1, - - /// Set the margin options. - SCI_SETMARGINOPTIONS = 2539, - - /// Get the margin options. - SCI_GETMARGINOPTIONS = 2557, - - /// Set the annotation text for a line - SCI_ANNOTATIONSETTEXT = 2540, - - /// Get the annotation text for a line - SCI_ANNOTATIONGETTEXT = 2541, - - /// Set the style number for the annotations for a line - SCI_ANNOTATIONSETSTYLE = 2542, - - /// Get the style number for the annotations for a line - SCI_ANNOTATIONGETSTYLE = 2543, - - /// Set the annotation styles for a line - SCI_ANNOTATIONSETSTYLES = 2544, - - /// Get the annotation styles for a line - SCI_ANNOTATIONGETSTYLES = 2545, - - /// Get the number of annotation lines for a line - SCI_ANNOTATIONGETLINES = 2546, - - /// Clear the annotations from all lines - SCI_ANNOTATIONCLEARALL = 2547, - - ANNOTATION_HIDDEN = 0, - - ANNOTATION_STANDARD = 1, - - ANNOTATION_BOXED = 2, - - ANNOTATION_INDENTED = 3, - - /// Set the visibility for the annotations for a view - SCI_ANNOTATIONSETVISIBLE = 2548, - - /// Get the visibility for the annotations for a view - SCI_ANNOTATIONGETVISIBLE = 2549, - - /// Get the start of the range of style numbers used for annotations - SCI_ANNOTATIONSETSTYLEOFFSET = 2550, - - /// Get the start of the range of style numbers used for annotations - SCI_ANNOTATIONGETSTYLEOFFSET = 2551, - - /// Release all extended (>255) style numbers - SCI_RELEASEALLEXTENDEDSTYLES = 2552, - - /// Allocate some extended (>255) style numbers and return the start of the range - SCI_ALLOCATEEXTENDEDSTYLES = 2553, - - UNDO_NONE = 0, - - UNDO_MAY_COALESCE = 1, - - /// Add a container action to the undo stack - SCI_ADDUNDOACTION = 2560, - - /// Find the position of a character from a point within the window. - SCI_CHARPOSITIONFROMPOINT = 2561, - - /// Find the position of a character from a point within the window. - /// Return INVALID_POSITION if not close to text. - SCI_CHARPOSITIONFROMPOINTCLOSE = 2562, - - /// Set whether switching to rectangular mode while selecting with the mouse is allowed. - SCI_SETMOUSESELECTIONRECTANGULARSWITCH = 2668, - - /// Whether switching to rectangular mode while selecting with the mouse is allowed. - SCI_GETMOUSESELECTIONRECTANGULARSWITCH = 2669, - - /// Set whether multiple selections can be made - SCI_SETMULTIPLESELECTION = 2563, - - /// Whether multiple selections can be made - SCI_GETMULTIPLESELECTION = 2564, - - /// Set whether typing can be performed into multiple selections - SCI_SETADDITIONALSELECTIONTYPING = 2565, - - /// Whether typing can be performed into multiple selections - SCI_GETADDITIONALSELECTIONTYPING = 2566, - - /// Set whether additional carets will blink - SCI_SETADDITIONALCARETSBLINK = 2567, - - /// Whether additional carets will blink - SCI_GETADDITIONALCARETSBLINK = 2568, - - /// Set whether additional carets are visible - SCI_SETADDITIONALCARETSVISIBLE = 2608, - - /// Whether additional carets are visible - SCI_GETADDITIONALCARETSVISIBLE = 2609, - - /// How many selections are there? - SCI_GETSELECTIONS = 2570, - - /// Is every selected range empty? - SCI_GETSELECTIONEMPTY = 2650, - - /// Clear selections to a single empty stream selection - SCI_CLEARSELECTIONS = 2571, - - /// Set a simple selection - SCI_SETSELECTION = 2572, - - /// Add a selection - SCI_ADDSELECTION = 2573, - - /// Drop one selection - SCI_DROPSELECTIONN = 2671, - - /// Set the main selection - SCI_SETMAINSELECTION = 2574, - - /// Which selection is the main selection - SCI_GETMAINSELECTION = 2575, - - /// Set the caret position of the nth selection. - SCI_SETSELECTIONNCARET = 2576, - - /// Return the caret position of the nth selection. - SCI_GETSELECTIONNCARET = 2577, - - /// Set the anchor position of the nth selection. - SCI_SETSELECTIONNANCHOR = 2578, - - /// Return the anchor position of the nth selection. - SCI_GETSELECTIONNANCHOR = 2579, - - /// Set the virtual space of the caret of the nth selection. - SCI_SETSELECTIONNCARETVIRTUALSPACE = 2580, - - /// Return the virtual space of the caret of the nth selection. - SCI_GETSELECTIONNCARETVIRTUALSPACE = 2581, - - /// Set the virtual space of the anchor of the nth selection. - SCI_SETSELECTIONNANCHORVIRTUALSPACE = 2582, - - /// Return the virtual space of the anchor of the nth selection. - SCI_GETSELECTIONNANCHORVIRTUALSPACE = 2583, - - /// Sets the position that starts the selection - this becomes the anchor. - SCI_SETSELECTIONNSTART = 2584, - - /// Returns the position at the start of the selection. - SCI_GETSELECTIONNSTART = 2585, - - /// Sets the position that ends the selection - this becomes the currentPosition. - SCI_SETSELECTIONNEND = 2586, - - /// Returns the position at the end of the selection. - SCI_GETSELECTIONNEND = 2587, - - /// Set the caret position of the rectangular selection. - SCI_SETRECTANGULARSELECTIONCARET = 2588, - - /// Return the caret position of the rectangular selection. - SCI_GETRECTANGULARSELECTIONCARET = 2589, - - /// Set the anchor position of the rectangular selection. - SCI_SETRECTANGULARSELECTIONANCHOR = 2590, - - /// Return the anchor position of the rectangular selection. - SCI_GETRECTANGULARSELECTIONANCHOR = 2591, - - /// Set the virtual space of the caret of the rectangular selection. - SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE = 2592, - - /// Return the virtual space of the caret of the rectangular selection. - SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE = 2593, - - /// Set the virtual space of the anchor of the rectangular selection. - SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE = 2594, - - /// Return the virtual space of the anchor of the rectangular selection. - SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE = 2595, - - SCVS_NONE = 0, - - SCVS_RECTANGULARSELECTION = 1, - - SCVS_USERACCESSIBLE = 2, - - SCVS_NOWRAPLINESTART = 4, - - /// Set options for virtual space behaviour. - SCI_SETVIRTUALSPACEOPTIONS = 2596, - - /// Return options for virtual space behaviour. - SCI_GETVIRTUALSPACEOPTIONS = 2597, - - /// On GTK, allow selecting the modifier key to use for mouse-based - /// rectangular selection. Often the window manager requires Alt+Mouse Drag - /// for moving windows. - /// Valid values are SCMOD_CTRL(default), SCMOD_ALT, or SCMOD_SUPER. - SCI_SETRECTANGULARSELECTIONMODIFIER = 2598, - - /// Get the modifier key used for rectangular selection. - SCI_GETRECTANGULARSELECTIONMODIFIER = 2599, - - /// Set the foreground colour of additional selections. - /// Must have previously called SetSelFore with non-zero first argument for this to have an effect. - SCI_SETADDITIONALSELFORE = 2600, - - /// Set the background colour of additional selections. - /// Must have previously called SetSelBack with non-zero first argument for this to have an effect. - SCI_SETADDITIONALSELBACK = 2601, - - /// Set the alpha of the selection. - SCI_SETADDITIONALSELALPHA = 2602, - - /// Get the alpha of the selection. - SCI_GETADDITIONALSELALPHA = 2603, - - /// Set the foreground colour of additional carets. - SCI_SETADDITIONALCARETFORE = 2604, - - /// Get the foreground colour of additional carets. - SCI_GETADDITIONALCARETFORE = 2605, - - /// Set the main selection to the next selection. - SCI_ROTATESELECTION = 2606, - - /// Swap that caret and anchor of the main selection. - SCI_SWAPMAINANCHORCARET = 2607, - - /// Add the next occurrence of the main selection to the set of selections as main. - /// If the current selection is empty then select word around caret. - SCI_MULTIPLESELECTADDNEXT = 2688, - - /// Add each occurrence of the main selection in the target to the set of selections. - /// If the current selection is empty then select word around caret. - SCI_MULTIPLESELECTADDEACH = 2689, - - /// Indicate that the internal state of a lexer has changed over a range and therefore - /// there may be a need to redraw. - SCI_CHANGELEXERSTATE = 2617, - - /// Find the next line at or after lineStart that is a contracted fold header line. - /// Return -1 when no more lines. - SCI_CONTRACTEDFOLDNEXT = 2618, - - /// Centre current line in window. - SCI_VERTICALCENTRECARET = 2619, - - /// Move the selected lines up one line, shifting the line above after the selection - SCI_MOVESELECTEDLINESUP = 2620, - - /// Move the selected lines down one line, shifting the line below before the selection - SCI_MOVESELECTEDLINESDOWN = 2621, - - /// Set the identifier reported as idFrom in notification messages. - SCI_SETIDENTIFIER = 2622, - - /// Get the identifier. - SCI_GETIDENTIFIER = 2623, - - /// Set the width for future RGBA image data. - SCI_RGBAIMAGESETWIDTH = 2624, - - /// Set the height for future RGBA image data. - SCI_RGBAIMAGESETHEIGHT = 2625, - - /// Set the scale factor in percent for future RGBA image data. - SCI_RGBAIMAGESETSCALE = 2651, - - /// Define a marker from RGBA data. - /// It has the width and height from RGBAImageSetWidth/Height - SCI_MARKERDEFINERGBAIMAGE = 2626, - - /// Register an RGBA image for use in autocompletion lists. - /// It has the width and height from RGBAImageSetWidth/Height - SCI_REGISTERRGBAIMAGE = 2627, - - /// Scroll to start of document. - SCI_SCROLLTOSTART = 2628, - - /// Scroll to end of document. - SCI_SCROLLTOEND = 2629, - - SC_TECHNOLOGY_DEFAULT = 0, - - SC_TECHNOLOGY_DIRECTWRITE = 1, - - SC_TECHNOLOGY_DIRECTWRITERETAIN = 2, - - SC_TECHNOLOGY_DIRECTWRITEDC = 3, - - /// Set the technology used. - SCI_SETTECHNOLOGY = 2630, - - /// Get the tech. - SCI_GETTECHNOLOGY = 2631, - - /// Create an ILoader*. - SCI_CREATELOADER = 2632, - - /// On OS X, show a find indicator. - SCI_FINDINDICATORSHOW = 2640, - - /// On OS X, flash a find indicator, then fade out. - SCI_FINDINDICATORFLASH = 2641, - - /// On OS X, hide the find indicator. - SCI_FINDINDICATORHIDE = 2642, - - /// Move caret to before first visible character on display line. - /// If already there move to first character on display line. - SCI_VCHOMEDISPLAY = 2652, - - /// Like VCHomeDisplay but extending selection to new caret position. - SCI_VCHOMEDISPLAYEXTEND = 2653, - - /// Is the caret line always visible? - SCI_GETCARETLINEVISIBLEALWAYS = 2654, - - /// Sets the caret line to always visible. - SCI_SETCARETLINEVISIBLEALWAYS = 2655, - - SC_LINE_END_TYPE_DEFAULT = 0, - - SC_LINE_END_TYPE_UNICODE = 1, - - /// Set the line end types that the application wants to use. May not be used if incompatible with lexer or encoding. - SCI_SETLINEENDTYPESALLOWED = 2656, - - /// Get the line end types currently allowed. - SCI_GETLINEENDTYPESALLOWED = 2657, - - /// Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation. - SCI_GETLINEENDTYPESACTIVE = 2658, - - /// Set the way a character is drawn. - SCI_SETREPRESENTATION = 2665, - - /// Set the way a character is drawn. - /// Result is NUL-terminated. - SCI_GETREPRESENTATION = 2666, - - /// Remove a character representation. - SCI_CLEARREPRESENTATION = 2667, - - /// Start notifying the container of all key presses and commands. - SCI_STARTRECORD = 3001, - - /// Stop notifying the container of all key presses and commands. - SCI_STOPRECORD = 3002, - - /// Set the lexing language of the document. - SCI_SETLEXER = 4001, - - /// Retrieve the lexing language of the document. - SCI_GETLEXER = 4002, - - /// Colourise a segment of the document using the current lexing language. - SCI_COLOURISE = 4003, - - /// Set up a value that may be used by a lexer for some optional feature. - SCI_SETPROPERTY = 4004, - - KEYWORDSET_MAX = 8, - - /// Set up the key words used by the lexer. - SCI_SETKEYWORDS = 4005, - - /// Set the lexing language of the document based on string name. - SCI_SETLEXERLANGUAGE = 4006, - - /// Load a lexer library (dll / so). - SCI_LOADLEXERLIBRARY = 4007, - - /// Retrieve a "property" value previously set with SetProperty. - /// Result is NUL-terminated. - SCI_GETPROPERTY = 4008, - - /// Retrieve a "property" value previously set with SetProperty, - /// with "$()" variable replacement on returned buffer. - /// Result is NUL-terminated. - SCI_GETPROPERTYEXPANDED = 4009, - - /// Retrieve a "property" value previously set with SetProperty, - /// interpreted as an int AFTER any "$()" variable replacement. - SCI_GETPROPERTYINT = 4010, - - /// Retrieve the name of the lexer. - /// Return the length of the text. - /// Result is NUL-terminated. - SCI_GETLEXERLANGUAGE = 4012, - - /// For private communication between an application and a known lexer. - SCI_PRIVATELEXERCALL = 4013, - - /// Retrieve a '\n' separated list of properties understood by the current lexer. - /// Result is NUL-terminated. - SCI_PROPERTYNAMES = 4014, - - SC_TYPE_BOOLEAN = 0, - - SC_TYPE_INTEGER = 1, - - SC_TYPE_STRING = 2, - - /// Retrieve the type of a property. - SCI_PROPERTYTYPE = 4015, - - /// Describe a property. - /// Result is NUL-terminated. - SCI_DESCRIBEPROPERTY = 4016, - - /// Retrieve a '\n' separated list of descriptions of the keyword sets understood by the current lexer. - /// Result is NUL-terminated. - SCI_DESCRIBEKEYWORDSETS = 4017, - - /// Bit set of LineEndType enumertion for which line ends beyond the standard - /// LF, CR, and CRLF are supported by the lexer. - SCI_GETLINEENDTYPESSUPPORTED = 4018, - - /// Allocate a set of sub styles for a particular base style, returning start of range - SCI_ALLOCATESUBSTYLES = 4020, - - /// The starting style number for the sub styles associated with a base style - SCI_GETSUBSTYLESSTART = 4021, - - /// The number of sub styles associated with a base style - SCI_GETSUBSTYLESLENGTH = 4022, - - /// For a sub style, return the base style, else return the argument. - SCI_GETSTYLEFROMSUBSTYLE = 4027, - - /// For a secondary style, return the primary style, else return the argument. - SCI_GETPRIMARYSTYLEFROMSTYLE = 4028, - - /// Free allocated sub styles - SCI_FREESUBSTYLES = 4023, - - /// Set the identifiers that are shown in a particular style - SCI_SETIDENTIFIERS = 4024, - - /// Where styles are duplicated by a feature such as active/inactive code - /// return the distance between the two types. - SCI_DISTANCETOSECONDARYSTYLES = 4025, - - /// Get the set of base styles that can be extended with sub styles - /// Result is NUL-terminated. - SCI_GETSUBSTYLEBASES = 4026, - - /// Retrieve the number of named styles for the lexer. - SCI_GETNAMEDSTYLES = 4029, - - /// Retrieve the name of a style. - /// Result is NUL-terminated. - SCI_NAMEOFSTYLE = 4030, - - /// Retrieve a ' ' separated list of style tags like "literal quoted string". - /// Result is NUL-terminated. - SCI_TAGSOFSTYLE = 4031, - - /// Retrieve a description of a style. - /// Result is NUL-terminated. - SCI_DESCRIPTIONOFSTYLE = 4032, - - SC_MOD_NONE = 0x0, - - SC_MOD_INSERTTEXT = 0x1, - - SC_MOD_DELETETEXT = 0x2, - - SC_MOD_CHANGESTYLE = 0x4, - - SC_MOD_CHANGEFOLD = 0x8, - - SC_PERFORMED_USER = 0x10, - - SC_PERFORMED_UNDO = 0x20, - - SC_PERFORMED_REDO = 0x40, - - SC_MULTISTEPUNDOREDO = 0x80, - - SC_LASTSTEPINUNDOREDO = 0x100, - - SC_MOD_CHANGEMARKER = 0x200, - - SC_MOD_BEFOREINSERT = 0x400, - - SC_MOD_BEFOREDELETE = 0x800, - - SC_MULTILINEUNDOREDO = 0x1000, - - SC_STARTACTION = 0x2000, - - SC_MOD_CHANGEINDICATOR = 0x4000, - - SC_MOD_CHANGELINESTATE = 0x8000, - - SC_MOD_CHANGEMARGIN = 0x10000, - - SC_MOD_CHANGEANNOTATION = 0x20000, - - SC_MOD_CONTAINER = 0x40000, - - SC_MOD_LEXERSTATE = 0x80000, - - SC_MOD_INSERTCHECK = 0x100000, - - SC_MOD_CHANGETABSTOPS = 0x200000, - - SC_MODEVENTMASKALL = 0x3FFFFF, - - SC_UPDATE_CONTENT = 0x1, - - SC_UPDATE_SELECTION = 0x2, - - SC_UPDATE_V_SCROLL = 0x4, - - SC_UPDATE_H_SCROLL = 0x8, - - SCEN_CHANGE = 768, - - SCEN_SETFOCUS = 512, - - SCEN_KILLFOCUS = 256, - - SCK_DOWN = 300, - - SCK_UP = 301, - - SCK_LEFT = 302, - - SCK_RIGHT = 303, - - SCK_HOME = 304, - - SCK_END = 305, - - SCK_PRIOR = 306, - - SCK_NEXT = 307, - - SCK_DELETE = 308, - - SCK_INSERT = 309, - - SCK_ESCAPE = 7, - - SCK_BACK = 8, - - SCK_TAB = 9, - - SCK_RETURN = 13, - - SCK_ADD = 310, - - SCK_SUBTRACT = 311, - - SCK_DIVIDE = 312, - - SCK_WIN = 313, - - SCK_RWIN = 314, - - SCK_MENU = 315, - - SCMOD_NORM = 0, - - SCMOD_SHIFT = 1, - - SCMOD_CTRL = 2, - - SCMOD_ALT = 4, - - SCMOD_SUPER = 8, - - SCMOD_META = 16, - - SC_AC_FILLUP = 1, - - SC_AC_DOUBLECLICK = 2, - - SC_AC_TAB = 3, - - SC_AC_NEWLINE = 4, - - SC_AC_COMMAND = 5, - - SC_CHARACTERSOURCE_DIRECT_INPUT = 0, - - SC_CHARACTERSOURCE_TENTATIVE_INPUT = 1, - - SC_CHARACTERSOURCE_IME_RESULT = 2, - - /// Events - SCN_STYLENEEDED = 2000, - - /// Events - SCN_CHARADDED = 2001, - - /// Events - SCN_SAVEPOINTREACHED = 2002, - - /// Events - SCN_SAVEPOINTLEFT = 2003, - - /// Events - SCN_MODIFYATTEMPTRO = 2004, - - /// GTK Specific to work around focus and accelerator problems: - SCN_KEY = 2005, - - /// GTK Specific to work around focus and accelerator problems: - SCN_DOUBLECLICK = 2006, - - /// GTK Specific to work around focus and accelerator problems: - SCN_UPDATEUI = 2007, - - /// GTK Specific to work around focus and accelerator problems: - SCN_MODIFIED = 2008, - - /// GTK Specific to work around focus and accelerator problems: - SCN_MACRORECORD = 2009, - - /// GTK Specific to work around focus and accelerator problems: - SCN_MARGINCLICK = 2010, - - /// GTK Specific to work around focus and accelerator problems: - SCN_NEEDSHOWN = 2011, - - /// GTK Specific to work around focus and accelerator problems: - SCN_PAINTED = 2013, - - /// GTK Specific to work around focus and accelerator problems: - SCN_USERLISTSELECTION = 2014, - - /// GTK Specific to work around focus and accelerator problems: - SCN_URIDROPPED = 2015, - - /// GTK Specific to work around focus and accelerator problems: - SCN_DWELLSTART = 2016, - - /// GTK Specific to work around focus and accelerator problems: - SCN_DWELLEND = 2017, - - /// GTK Specific to work around focus and accelerator problems: - SCN_ZOOM = 2018, - - /// GTK Specific to work around focus and accelerator problems: - SCN_HOTSPOTCLICK = 2019, - - /// GTK Specific to work around focus and accelerator problems: - SCN_HOTSPOTDOUBLECLICK = 2020, - - /// GTK Specific to work around focus and accelerator problems: - SCN_CALLTIPCLICK = 2021, - - /// GTK Specific to work around focus and accelerator problems: - SCN_AUTOCSELECTION = 2022, - - /// GTK Specific to work around focus and accelerator problems: - SCN_INDICATORCLICK = 2023, - - /// GTK Specific to work around focus and accelerator problems: - SCN_INDICATORRELEASE = 2024, - - /// GTK Specific to work around focus and accelerator problems: - SCN_AUTOCCANCELLED = 2025, - - /// GTK Specific to work around focus and accelerator problems: - SCN_AUTOCCHARDELETED = 2026, - - /// GTK Specific to work around focus and accelerator problems: - SCN_HOTSPOTRELEASECLICK = 2027, - - /// GTK Specific to work around focus and accelerator problems: - SCN_FOCUSIN = 2028, - - /// GTK Specific to work around focus and accelerator problems: - SCN_FOCUSOUT = 2029, - - /// GTK Specific to work around focus and accelerator problems: - SCN_AUTOCCOMPLETED = 2030, - - /// GTK Specific to work around focus and accelerator problems: - SCN_MARGINRIGHTCLICK = 2031, - - /// GTK Specific to work around focus and accelerator problems: - SCN_AUTOCSELECTIONCHANGE = 2032, - - SC_BIDIRECTIONAL_DISABLED = 0, - - SC_BIDIRECTIONAL_L2R = 1, - - SC_BIDIRECTIONAL_R2L = 2, - - /// Retrieve bidirectional text display state. - SCI_GETBIDIRECTIONAL = 2708, - - /// Set bidirectional text display state. - SCI_SETBIDIRECTIONAL = 2709, - - SC_LINECHARACTERINDEX_NONE = 0, - - SC_LINECHARACTERINDEX_UTF32 = 1, - - SC_LINECHARACTERINDEX_UTF16 = 2, - - /// Retrieve line character index state. - SCI_GETLINECHARACTERINDEX = 2710, - - /// Request line character index be created or its use count increased. - SCI_ALLOCATELINECHARACTERINDEX = 2711, - - /// Decrease use count of line character index and remove if 0. - SCI_RELEASELINECHARACTERINDEX = 2712, - - /// Retrieve the document line containing a position measured in index units. - SCI_LINEFROMINDEXPOSITION = 2713, - - /// Retrieve the position measured in index units at the start of a document line. - SCI_INDEXPOSITIONFROMLINE = 2714, - - /// Divide each styling byte into lexical class bits (default: 5) and indicator - /// bits (default: 3). If a lexer requires more than 32 lexical states, then this - /// is used to expand the possible states. - SCI_SETSTYLEBITS = 2090, - - /// Retrieve number of bits in style bytes used to hold the lexical state. - SCI_GETSTYLEBITS = 2091, - - /// Retrieve the number of bits the current lexer needs for styling. - SCI_GETSTYLEBITSNEEDED = 4011, - - /// Deprecated in 3.5.5 - /// Always interpret keyboard input as Unicode - SCI_SETKEYSUNICODE = 2521, - - /// Are keys always interpreted as Unicode? - SCI_GETKEYSUNICODE = 2522, - - /// Is drawing done in two phases with backgrounds drawn before foregrounds? - SCI_GETTWOPHASEDRAW = 2283, - - /// In twoPhaseDraw mode, drawing is performed in two phases, first the background - /// and then the foreground. This avoids chopping off characters that overlap the next run. - SCI_SETTWOPHASEDRAW = 2284, - - INDIC0_MASK = 0x20, - - INDIC1_MASK = 0x40, - - INDIC2_MASK = 0x80, - - INDICS_MASK = 0xE0, - - /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ - - SC_SEARCHRESULT_LINEBUFFERMAXLENGTH = 1024 - } - - public class TextToFind : IDisposable - { - Sci_TextToFind _sciTextToFind; - IntPtr _ptrSciTextToFind; - bool _disposed = false; - - /// - /// text to find - /// - /// range to search - /// the search pattern - public TextToFind(CharacterRange chrRange, string searchText) - { - _sciTextToFind.chrg = chrRange; - _sciTextToFind.lpstrText = Marshal.StringToHGlobalAnsi(searchText); - } - - /// - /// text to find - /// - /// range to search - /// range to search - /// the search pattern - public TextToFind(int cpmin, int cpmax, string searchText) - { - _sciTextToFind.chrg.cpMin = cpmin; - _sciTextToFind.chrg.cpMax = cpmax; - _sciTextToFind.lpstrText = Marshal.StringToHGlobalAnsi(searchText); - } - - [StructLayout(LayoutKind.Sequential)] - struct Sci_TextToFind - { - public CharacterRange chrg; - public IntPtr lpstrText; - public CharacterRange chrgText; - } - - public IntPtr NativePointer { get { _initNativeStruct(); return _ptrSciTextToFind; } } - public string lpstrText { set { _freeNativeString(); _sciTextToFind.lpstrText = Marshal.StringToHGlobalAnsi(value); } } - public CharacterRange chrg { get { _readNativeStruct(); return _sciTextToFind.chrg; } set { _sciTextToFind.chrg = value; _initNativeStruct(); } } - public CharacterRange chrgText { get { _readNativeStruct(); return _sciTextToFind.chrgText; } } - - void _initNativeStruct() - { - if (_ptrSciTextToFind == IntPtr.Zero) - _ptrSciTextToFind = Marshal.AllocHGlobal(Marshal.SizeOf(_sciTextToFind)); - Marshal.StructureToPtr(_sciTextToFind, _ptrSciTextToFind, false); - } - - void _readNativeStruct() - { - if (_ptrSciTextToFind != IntPtr.Zero) - _sciTextToFind = (Sci_TextToFind)Marshal.PtrToStructure(_ptrSciTextToFind, typeof(Sci_TextToFind)); - } - - void _freeNativeString() - { - if (_sciTextToFind.lpstrText != IntPtr.Zero) Marshal.FreeHGlobal(_sciTextToFind.lpstrText); - } - - public void Dispose() - { - if (!_disposed) - { - _freeNativeString(); - if (_ptrSciTextToFind != IntPtr.Zero) Marshal.FreeHGlobal(_ptrSciTextToFind); - _disposed = true; - } - } - - ~TextToFind() - { - Dispose(); - } - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +// +// This file should stay in sync with the CPP project file +// "notepad-plus-plus/scintilla/include/Scintilla.iface" +// found at +// https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/scintilla/include/Scintilla.iface + +using System; +using System.Runtime.InteropServices; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + /// + /// Compatible with Windows NMHDR. + /// hwndFrom is really an environment specific window handle or pointer + /// but most clients of Scintilla.h do not have this type visible. + /// + [StructLayout(LayoutKind.Sequential)] + public struct ScNotificationHeader + { + /// + /// environment specific window handle/pointer + /// + public IntPtr hwndFrom; + + /// + /// CtrlID of the window issuing the notification + /// + public IntPtr IdFrom; + + /// + /// The SCN_* notification Code + /// + public uint Code; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ScNotification + { + public ScNotificationHeader Header; + private int position; /* SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION */ + public int character; /* SCN_CHARADDED, SCN_KEY, SCN_AUTOCCOMPLETE, SCN_AUTOCSELECTION, SCN_USERLISTSELECTION */ + public int Mmodifiers; /* SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE */ + public int ModificationType; /* SCN_MODIFIED - modification types are name "SC_MOD_*" */ + public IntPtr TextPointer; /* SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION, SCN_URIDROPPED */ + public int Length; /* SCN_MODIFIED */ + public int LinesAdded; /* SCN_MODIFIED */ + public int Message; /* SCN_MACRORECORD */ + public IntPtr wParam; /* SCN_MACRORECORD */ + public IntPtr lParam; /* SCN_MACRORECORD */ + + /// + /// 0-based index + /// + public int LineNumber; /* SCN_MODIFIED */ + public int FoldLevelNow; /* SCN_MODIFIED */ + public int FoldLevelPrev; /* SCN_MODIFIED */ + public int Margin; /* SCN_MARGINCLICK */ + public int ListType; /* SCN_USERLISTSELECTION */ + public int X; /* SCN_DWELLSTART, SCN_DWELLEND */ + public int Y; /* SCN_DWELLSTART, SCN_DWELLEND */ + public int Token; /* SCN_MODIFIED with SC_MOD_CONTAINER */ + public int AnnotationLinesAdded; /* SC_MOD_CHANGEANNOTATION */ + public int Updated; /* SCN_UPDATEUI */ + public int ListCompletionMethod; /* SCN_AUTOCSELECTION, SCN_AUTOCCOMPLETED, SCN_USERLISTSELECTION */ + + /// + /// SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION + /// + public Position Position { get { return new Position(position); } } + + /// + /// Character of the notification - eg keydown + /// SCN_CHARADDED, SCN_KEY, SCN_AUTOCCOMPLETE, SCN_AUTOCSELECTION, SCN_USERLISTSELECTION + /// + public char Character { get { return (char) character; } } + } + + [Flags] + public enum SciMsg : uint + { + /* ++Autogenerated -- start of section automatically generated from Scintilla.iface */ + INVALID_POSITION = 0xFFFFFFFF, + + SCI_START = 2000, + + SCI_OPTIONAL_START = 3000, + + SCI_LEXER_START = 4000, + + /// Add text to the document at current position. + SCI_ADDTEXT = 2001, + + /// Add array of cells to document. + SCI_ADDSTYLEDTEXT = 2002, + + /// Insert string at a position. + SCI_INSERTTEXT = 2003, + + /// Change the text that is being inserted in response to SC_MOD_INSERTCHECK + SCI_CHANGEINSERTION = 2672, + + /// Delete all text in the document. + SCI_CLEARALL = 2004, + + /// Delete a range of text in the document. + SCI_DELETERANGE = 2645, + + /// Set all style bytes to 0, remove all folding information. + SCI_CLEARDOCUMENTSTYLE = 2005, + + /// Returns the number of bytes in the document. + SCI_GETLENGTH = 2006, + + /// Returns the character byte at the position. + SCI_GETCHARAT = 2007, + + /// Returns the position of the caret. + SCI_GETCURRENTPOS = 2008, + + /// Returns the position of the opposite end of the selection to the caret. + SCI_GETANCHOR = 2009, + + /// Returns the style byte at the position. + SCI_GETSTYLEAT = 2010, + + /// Redoes the next action on the undo history. + SCI_REDO = 2011, + + /// Choose between collecting actions into the undo + /// history and discarding them. + SCI_SETUNDOCOLLECTION = 2012, + + /// Select all the text in the document. + SCI_SELECTALL = 2013, + + /// Remember the current position in the undo history as the position + /// at which the document was saved. + SCI_SETSAVEPOINT = 2014, + + /// Retrieve a buffer of cells. + /// Returns the number of bytes in the buffer not including terminating NULs. + SCI_GETSTYLEDTEXT = 2015, + + /// Are there any redoable actions in the undo history? + SCI_CANREDO = 2016, + + /// Retrieve the line number at which a particular marker is located. + SCI_MARKERLINEFROMHANDLE = 2017, + + /// Delete a marker. + SCI_MARKERDELETEHANDLE = 2018, + + /// Is undo history being collected? + SCI_GETUNDOCOLLECTION = 2019, + + SCWS_INVISIBLE = 0, + + SCWS_VISIBLEALWAYS = 1, + + SCWS_VISIBLEAFTERINDENT = 2, + + SCWS_VISIBLEONLYININDENT = 3, + + /// Are white space characters currently visible? + /// Returns one of SCWS_* constants. + SCI_GETVIEWWS = 2020, + + /// Make white space characters invisible, always visible or visible outside indentation. + SCI_SETVIEWWS = 2021, + + SCTD_LONGARROW = 0, + + SCTD_STRIKEOUT = 1, + + /// Retrieve the current tab draw mode. + /// Returns one of SCTD_* constants. + SCI_GETTABDRAWMODE = 2698, + + /// Set how tabs are drawn when visible. + SCI_SETTABDRAWMODE = 2699, + + /// Find the position from a point within the window. + SCI_POSITIONFROMPOINT = 2022, + + /// Find the position from a point within the window but return + /// INVALID_POSITION if not close to text. + SCI_POSITIONFROMPOINTCLOSE = 2023, + + /// Set caret to start of a line and ensure it is visible. + SCI_GOTOLINE = 2024, + + /// Set caret to a position and ensure it is visible. + SCI_GOTOPOS = 2025, + + /// Set the selection anchor to a position. The anchor is the opposite + /// end of the selection from the caret. + SCI_SETANCHOR = 2026, + + /// Retrieve the text of the line containing the caret. + /// Returns the index of the caret on the line. + /// Result is NUL-terminated. + SCI_GETCURLINE = 2027, + + /// Retrieve the position of the last correctly styled character. + SCI_GETENDSTYLED = 2028, + + SC_EOL_CRLF = 0, + + SC_EOL_CR = 1, + + SC_EOL_LF = 2, + + /// Convert all line endings in the document to one mode. + SCI_CONVERTEOLS = 2029, + + /// Retrieve the current end of line mode - one of CRLF, CR, or LF. + SCI_GETEOLMODE = 2030, + + /// Set the current end of line mode. + SCI_SETEOLMODE = 2031, + + /// Set the current styling position to start. + /// The unused parameter is no longer used and should be set to 0. + SCI_STARTSTYLING = 2032, + + /// Change style from current styling position for length characters to a style + /// and move the current styling position to after this newly styled segment. + SCI_SETSTYLING = 2033, + + /// Is drawing done first into a buffer or direct to the screen? + SCI_GETBUFFEREDDRAW = 2034, + + /// If drawing is buffered then each line of text is drawn into a bitmap buffer + /// before drawing it to the screen to avoid flicker. + SCI_SETBUFFEREDDRAW = 2035, + + /// Change the visible size of a tab to be a multiple of the width of a space character. + SCI_SETTABWIDTH = 2036, + + /// Retrieve the visible size of a tab. + SCI_GETTABWIDTH = 2121, + + /// Clear explicit tabstops on a line. + SCI_CLEARTABSTOPS = 2675, + + /// Add an explicit tab stop for a line. + SCI_ADDTABSTOP = 2676, + + /// Find the next explicit tab stop position on a line after a position. + SCI_GETNEXTTABSTOP = 2677, + + SC_CP_UTF8 = 65001, + + /// Set the code page used to interpret the bytes of the document as characters. + /// The SC_CP_UTF8 value can be used to enter Unicode mode. + SCI_SETCODEPAGE = 2037, + + SC_IME_WINDOWED = 0, + + SC_IME_INLINE = 1, + + /// Is the IME displayed in a window or inline? + SCI_GETIMEINTERACTION = 2678, + + /// Choose to display the the IME in a winow or inline. + SCI_SETIMEINTERACTION = 2679, + + MARKER_MAX = 31, + + SC_MARK_CIRCLE = 0, + + SC_MARK_ROUNDRECT = 1, + + SC_MARK_ARROW = 2, + + SC_MARK_SMALLRECT = 3, + + SC_MARK_SHORTARROW = 4, + + SC_MARK_EMPTY = 5, + + SC_MARK_ARROWDOWN = 6, + + SC_MARK_MINUS = 7, + + SC_MARK_PLUS = 8, + + SC_MARK_VLINE = 9, + + SC_MARK_LCORNER = 10, + + SC_MARK_TCORNER = 11, + + SC_MARK_BOXPLUS = 12, + + SC_MARK_BOXPLUSCONNECTED = 13, + + SC_MARK_BOXMINUS = 14, + + SC_MARK_BOXMINUSCONNECTED = 15, + + SC_MARK_LCORNERCURVE = 16, + + SC_MARK_TCORNERCURVE = 17, + + SC_MARK_CIRCLEPLUS = 18, + + SC_MARK_CIRCLEPLUSCONNECTED = 19, + + SC_MARK_CIRCLEMINUS = 20, + + SC_MARK_CIRCLEMINUSCONNECTED = 21, + + SC_MARK_BACKGROUND = 22, + + SC_MARK_DOTDOTDOT = 23, + + SC_MARK_ARROWS = 24, + + SC_MARK_PIXMAP = 25, + + SC_MARK_FULLRECT = 26, + + SC_MARK_LEFTRECT = 27, + + SC_MARK_AVAILABLE = 28, + + SC_MARK_UNDERLINE = 29, + + SC_MARK_RGBAIMAGE = 30, + + SC_MARK_BOOKMARK = 31, + + SC_MARK_VERTICALBOOKMARK = 32, + + SC_MARK_CHARACTER = 10000, + + SC_MARKNUM_FOLDEREND = 25, + + SC_MARKNUM_FOLDEROPENMID = 26, + + SC_MARKNUM_FOLDERMIDTAIL = 27, + + SC_MARKNUM_FOLDERTAIL = 28, + + SC_MARKNUM_FOLDERSUB = 29, + + SC_MARKNUM_FOLDER = 30, + + SC_MARKNUM_FOLDEROPEN = 31, + + SC_MASK_FOLDERS = 0xFE000000, + + /// Set the symbol used for a particular marker number. + SCI_MARKERDEFINE = 2040, + + /// Set the foreground colour used for a particular marker number. + SCI_MARKERSETFORE = 2041, + + /// Set the background colour used for a particular marker number. + SCI_MARKERSETBACK = 2042, + + /// Set the background colour used for a particular marker number when its folding block is selected. + SCI_MARKERSETBACKSELECTED = 2292, + + /// Enable/disable highlight for current folding bloc (smallest one that contains the caret) + SCI_MARKERENABLEHIGHLIGHT = 2293, + + /// Add a marker to a line, returning an ID which can be used to find or delete the marker. + SCI_MARKERADD = 2043, + + /// Delete a marker from a line. + SCI_MARKERDELETE = 2044, + + /// Delete all markers with a particular number from all lines. + SCI_MARKERDELETEALL = 2045, + + /// Get a bit mask of all the markers set on a line. + SCI_MARKERGET = 2046, + + /// Find the next line at or after lineStart that includes a marker in mask. + /// Return -1 when no more lines. + SCI_MARKERNEXT = 2047, + + /// Find the previous line before lineStart that includes a marker in mask. + SCI_MARKERPREVIOUS = 2048, + + /// Define a marker from a pixmap. + SCI_MARKERDEFINEPIXMAP = 2049, + + /// Add a set of markers to a line. + SCI_MARKERADDSET = 2466, + + /// Set the alpha used for a marker that is drawn in the text area, not the margin. + SCI_MARKERSETALPHA = 2476, + + SC_MAX_MARGIN = 4, + + SC_MARGIN_SYMBOL = 0, + + SC_MARGIN_NUMBER = 1, + + SC_MARGIN_BACK = 2, + + SC_MARGIN_FORE = 3, + + SC_MARGIN_TEXT = 4, + + SC_MARGIN_RTEXT = 5, + + SC_MARGIN_COLOUR = 6, + + /// Set a margin to be either numeric or symbolic. + SCI_SETMARGINTYPEN = 2240, + + /// Retrieve the type of a margin. + SCI_GETMARGINTYPEN = 2241, + + /// Set the width of a margin to a width expressed in pixels. + SCI_SETMARGINWIDTHN = 2242, + + /// Retrieve the width of a margin in pixels. + SCI_GETMARGINWIDTHN = 2243, + + /// Set a mask that determines which markers are displayed in a margin. + SCI_SETMARGINMASKN = 2244, + + /// Retrieve the marker mask of a margin. + SCI_GETMARGINMASKN = 2245, + + /// Make a margin sensitive or insensitive to mouse clicks. + SCI_SETMARGINSENSITIVEN = 2246, + + /// Retrieve the mouse click sensitivity of a margin. + SCI_GETMARGINSENSITIVEN = 2247, + + /// Set the cursor shown when the mouse is inside a margin. + SCI_SETMARGINCURSORN = 2248, + + /// Retrieve the cursor shown in a margin. + SCI_GETMARGINCURSORN = 2249, + + /// Set the background colour of a margin. Only visible for SC_MARGIN_COLOUR. + SCI_SETMARGINBACKN = 2250, + + /// Retrieve the background colour of a margin + SCI_GETMARGINBACKN = 2251, + + /// Allocate a non-standard number of margins. + SCI_SETMARGINS = 2252, + + /// How many margins are there?. + SCI_GETMARGINS = 2253, + + STYLE_DEFAULT = 32, + + STYLE_LINENUMBER = 33, + + STYLE_BRACELIGHT = 34, + + STYLE_BRACEBAD = 35, + + STYLE_CONTROLCHAR = 36, + + STYLE_INDENTGUIDE = 37, + + STYLE_CALLTIP = 38, + + STYLE_FOLDDISPLAYTEXT = 39, + + STYLE_LASTPREDEFINED = 39, + + STYLE_MAX = 255, + + SC_CHARSET_ANSI = 0, + + SC_CHARSET_DEFAULT = 1, + + SC_CHARSET_BALTIC = 186, + + SC_CHARSET_CHINESEBIG5 = 136, + + SC_CHARSET_EASTEUROPE = 238, + + SC_CHARSET_GB2312 = 134, + + SC_CHARSET_GREEK = 161, + + SC_CHARSET_HANGUL = 129, + + SC_CHARSET_MAC = 77, + + SC_CHARSET_OEM = 255, + + SC_CHARSET_RUSSIAN = 204, + + SC_CHARSET_OEM866 = 866, + + SC_CHARSET_CYRILLIC = 1251, + + SC_CHARSET_SHIFTJIS = 128, + + SC_CHARSET_SYMBOL = 2, + + SC_CHARSET_TURKISH = 162, + + SC_CHARSET_JOHAB = 130, + + SC_CHARSET_HEBREW = 177, + + SC_CHARSET_ARABIC = 178, + + SC_CHARSET_VIETNAMESE = 163, + + SC_CHARSET_THAI = 222, + + SC_CHARSET_8859_15 = 1000, + + /// Clear all the styles and make equivalent to the global default style. + SCI_STYLECLEARALL = 2050, + + /// Set the foreground colour of a style. + SCI_STYLESETFORE = 2051, + + /// Set the background colour of a style. + SCI_STYLESETBACK = 2052, + + /// Set a style to be bold or not. + SCI_STYLESETBOLD = 2053, + + /// Set a style to be italic or not. + SCI_STYLESETITALIC = 2054, + + /// Set the size of characters of a style. + SCI_STYLESETSIZE = 2055, + + /// Set the font of a style. + SCI_STYLESETFONT = 2056, + + /// Set a style to have its end of line filled or not. + SCI_STYLESETEOLFILLED = 2057, + + /// Reset the default style to its state at startup + SCI_STYLERESETDEFAULT = 2058, + + /// Set a style to be underlined or not. + SCI_STYLESETUNDERLINE = 2059, + + SC_CASE_MIXED = 0, + + SC_CASE_UPPER = 1, + + SC_CASE_LOWER = 2, + + SC_CASE_CAMEL = 3, + + /// Get the foreground colour of a style. + SCI_STYLEGETFORE = 2481, + + /// Get the background colour of a style. + SCI_STYLEGETBACK = 2482, + + /// Get is a style bold or not. + SCI_STYLEGETBOLD = 2483, + + /// Get is a style italic or not. + SCI_STYLEGETITALIC = 2484, + + /// Get the size of characters of a style. + SCI_STYLEGETSIZE = 2485, + + /// Get the font of a style. + /// Returns the length of the fontName + /// Result is NUL-terminated. + SCI_STYLEGETFONT = 2486, + + /// Get is a style to have its end of line filled or not. + SCI_STYLEGETEOLFILLED = 2487, + + /// Get is a style underlined or not. + SCI_STYLEGETUNDERLINE = 2488, + + /// Get is a style mixed case, or to force upper or lower case. + SCI_STYLEGETCASE = 2489, + + /// Get the character get of the font in a style. + SCI_STYLEGETCHARACTERSET = 2490, + + /// Get is a style visible or not. + SCI_STYLEGETVISIBLE = 2491, + + /// Get is a style changeable or not (read only). + /// Experimental feature, currently buggy. + SCI_STYLEGETCHANGEABLE = 2492, + + /// Get is a style a hotspot or not. + SCI_STYLEGETHOTSPOT = 2493, + + /// Set a style to be mixed case, or to force upper or lower case. + SCI_STYLESETCASE = 2060, + + SC_FONT_SIZE_MULTIPLIER = 100, + + /// Set the size of characters of a style. Size is in points multiplied by 100. + SCI_STYLESETSIZEFRACTIONAL = 2061, + + /// Get the size of characters of a style in points multiplied by 100 + SCI_STYLEGETSIZEFRACTIONAL = 2062, + + SC_WEIGHT_NORMAL = 400, + + SC_WEIGHT_SEMIBOLD = 600, + + SC_WEIGHT_BOLD = 700, + + /// Set the weight of characters of a style. + SCI_STYLESETWEIGHT = 2063, + + /// Get the weight of characters of a style. + SCI_STYLEGETWEIGHT = 2064, + + /// Set the character set of the font in a style. + SCI_STYLESETCHARACTERSET = 2066, + + /// Set a style to be a hotspot or not. + SCI_STYLESETHOTSPOT = 2409, + + /// Set the foreground colour of the main and additional selections and whether to use this setting. + SCI_SETSELFORE = 2067, + + /// Set the background colour of the main and additional selections and whether to use this setting. + SCI_SETSELBACK = 2068, + + /// Get the alpha of the selection. + SCI_GETSELALPHA = 2477, + + /// Set the alpha of the selection. + SCI_SETSELALPHA = 2478, + + /// Is the selection end of line filled? + SCI_GETSELEOLFILLED = 2479, + + /// Set the selection to have its end of line filled or not. + SCI_SETSELEOLFILLED = 2480, + + /// Set the foreground colour of the caret. + SCI_SETCARETFORE = 2069, + + /// When key+modifier combination keyDefinition is pressed perform sciCommand. + SCI_ASSIGNCMDKEY = 2070, + + /// When key+modifier combination keyDefinition is pressed do nothing. + SCI_CLEARCMDKEY = 2071, + + /// Drop all key mappings. + SCI_CLEARALLCMDKEYS = 2072, + + /// Set the styles for a segment of the document. + SCI_SETSTYLINGEX = 2073, + + /// Set a style to be visible or not. + SCI_STYLESETVISIBLE = 2074, + + /// Get the time in milliseconds that the caret is on and off. + SCI_GETCARETPERIOD = 2075, + + /// Get the time in milliseconds that the caret is on and off. 0 = steady on. + SCI_SETCARETPERIOD = 2076, + + /// Set the set of characters making up words for when moving or selecting by word. + /// First sets defaults like SetCharsDefault. + SCI_SETWORDCHARS = 2077, + + /// Get the set of characters making up words for when moving or selecting by word. + /// Returns the number of characters + SCI_GETWORDCHARS = 2646, + + /// Set the number of characters to have directly indexed categories + SCI_SETCHARACTERCATEGORYOPTIMIZATION = 2720, + + /// Get the number of characters to have directly indexed categories + SCI_GETCHARACTERCATEGORYOPTIMIZATION = 2721, + + /// Start a sequence of actions that is undone and redone as a unit. + /// May be nested. + SCI_BEGINUNDOACTION = 2078, + + /// End a sequence of actions that is undone and redone as a unit. + SCI_ENDUNDOACTION = 2079, + + INDIC_PLAIN = 0, + + INDIC_SQUIGGLE = 1, + + INDIC_TT = 2, + + INDIC_DIAGONAL = 3, + + INDIC_STRIKE = 4, + + INDIC_HIDDEN = 5, + + INDIC_BOX = 6, + + INDIC_ROUNDBOX = 7, + + INDIC_STRAIGHTBOX = 8, + + INDIC_DASH = 9, + + INDIC_DOTS = 10, + + INDIC_SQUIGGLELOW = 11, + + INDIC_DOTBOX = 12, + + INDIC_SQUIGGLEPIXMAP = 13, + + INDIC_COMPOSITIONTHICK = 14, + + INDIC_COMPOSITIONTHIN = 15, + + INDIC_FULLBOX = 16, + + INDIC_TEXTFORE = 17, + + INDIC_POINT = 18, + + INDIC_POINTCHARACTER = 19, + + INDIC_GRADIENT = 20, + + INDIC_GRADIENTCENTRE = 21, + + INDIC_CONTAINER = 8, + + INDIC_IME = 32, + + INDIC_IME_MAX = 35, + + INDIC_MAX = 35, + + INDICATOR_CONTAINER = 8, + + INDICATOR_IME = 32, + + INDICATOR_IME_MAX = 35, + + INDICATOR_MAX = 35, + + /// Set an indicator to plain, squiggle or TT. + SCI_INDICSETSTYLE = 2080, + + /// Retrieve the style of an indicator. + SCI_INDICGETSTYLE = 2081, + + /// Set the foreground colour of an indicator. + SCI_INDICSETFORE = 2082, + + /// Retrieve the foreground colour of an indicator. + SCI_INDICGETFORE = 2083, + + /// Set an indicator to draw under text or over(default). + SCI_INDICSETUNDER = 2510, + + /// Retrieve whether indicator drawn under or over text. + SCI_INDICGETUNDER = 2511, + + /// Set a hover indicator to plain, squiggle or TT. + SCI_INDICSETHOVERSTYLE = 2680, + + /// Retrieve the hover style of an indicator. + SCI_INDICGETHOVERSTYLE = 2681, + + /// Set the foreground hover colour of an indicator. + SCI_INDICSETHOVERFORE = 2682, + + /// Retrieve the foreground hover colour of an indicator. + SCI_INDICGETHOVERFORE = 2683, + + SC_INDICVALUEBIT = 0x1000000, + + SC_INDICVALUEMASK = 0xFFFFFF, + + SC_INDICFLAG_VALUEFORE = 1, + + /// Set the attributes of an indicator. + SCI_INDICSETFLAGS = 2684, + + /// Retrieve the attributes of an indicator. + SCI_INDICGETFLAGS = 2685, + + /// Set the foreground colour of all whitespace and whether to use this setting. + SCI_SETWHITESPACEFORE = 2084, + + /// Set the background colour of all whitespace and whether to use this setting. + SCI_SETWHITESPACEBACK = 2085, + + /// Set the size of the dots used to mark space characters. + SCI_SETWHITESPACESIZE = 2086, + + /// Get the size of the dots used to mark space characters. + SCI_GETWHITESPACESIZE = 2087, + + /// Used to hold extra styling information for each line. + SCI_SETLINESTATE = 2092, + + /// Retrieve the extra styling information for a line. + SCI_GETLINESTATE = 2093, + + /// Retrieve the last line number that has line state. + SCI_GETMAXLINESTATE = 2094, + + /// Is the background of the line containing the caret in a different colour? + SCI_GETCARETLINEVISIBLE = 2095, + + /// Display the background of the line containing the caret in a different colour. + SCI_SETCARETLINEVISIBLE = 2096, + + /// Get the colour of the background of the line containing the caret. + SCI_GETCARETLINEBACK = 2097, + + /// Set the colour of the background of the line containing the caret. + SCI_SETCARETLINEBACK = 2098, + + /// Retrieve the caret line frame width. + /// Width = 0 means this option is disabled. + SCI_GETCARETLINEFRAME = 2704, + + /// Display the caret line framed. + /// Set width != 0 to enable this option and width = 0 to disable it. + SCI_SETCARETLINEFRAME = 2705, + + /// Set a style to be changeable or not (read only). + /// Experimental feature, currently buggy. + SCI_STYLESETCHANGEABLE = 2099, + + /// Display a auto-completion list. + /// The lengthEntered parameter indicates how many characters before + /// the caret should be used to provide context. + SCI_AUTOCSHOW = 2100, + + /// Remove the auto-completion list from the screen. + SCI_AUTOCCANCEL = 2101, + + /// Is there an auto-completion list visible? + SCI_AUTOCACTIVE = 2102, + + /// Retrieve the position of the caret when the auto-completion list was displayed. + SCI_AUTOCPOSSTART = 2103, + + /// User has selected an item so remove the list and insert the selection. + SCI_AUTOCCOMPLETE = 2104, + + /// Define a set of character that when typed cancel the auto-completion list. + SCI_AUTOCSTOPS = 2105, + + /// Change the separator character in the string setting up an auto-completion list. + /// Default is space but can be changed if items contain space. + SCI_AUTOCSETSEPARATOR = 2106, + + /// Retrieve the auto-completion list separator character. + SCI_AUTOCGETSEPARATOR = 2107, + + /// Select the item in the auto-completion list that starts with a string. + SCI_AUTOCSELECT = 2108, + + /// Should the auto-completion list be cancelled if the user backspaces to a + /// position before where the box was created. + SCI_AUTOCSETCANCELATSTART = 2110, + + /// Retrieve whether auto-completion cancelled by backspacing before start. + SCI_AUTOCGETCANCELATSTART = 2111, + + /// Define a set of characters that when typed will cause the autocompletion to + /// choose the selected item. + SCI_AUTOCSETFILLUPS = 2112, + + /// Should a single item auto-completion list automatically choose the item. + SCI_AUTOCSETCHOOSESINGLE = 2113, + + /// Retrieve whether a single item auto-completion list automatically choose the item. + SCI_AUTOCGETCHOOSESINGLE = 2114, + + /// Set whether case is significant when performing auto-completion searches. + SCI_AUTOCSETIGNORECASE = 2115, + + /// Retrieve state of ignore case flag. + SCI_AUTOCGETIGNORECASE = 2116, + + /// Display a list of strings and send notification when user chooses one. + SCI_USERLISTSHOW = 2117, + + /// Set whether or not autocompletion is hidden automatically when nothing matches. + SCI_AUTOCSETAUTOHIDE = 2118, + + /// Retrieve whether or not autocompletion is hidden automatically when nothing matches. + SCI_AUTOCGETAUTOHIDE = 2119, + + /// Set whether or not autocompletion deletes any word characters + /// after the inserted text upon completion. + SCI_AUTOCSETDROPRESTOFWORD = 2270, + + /// Retrieve whether or not autocompletion deletes any word characters + /// after the inserted text upon completion. + SCI_AUTOCGETDROPRESTOFWORD = 2271, + + /// Register an XPM image for use in autocompletion lists. + SCI_REGISTERIMAGE = 2405, + + /// Clear all the registered XPM images. + SCI_CLEARREGISTEREDIMAGES = 2408, + + /// Retrieve the auto-completion list type-separator character. + SCI_AUTOCGETTYPESEPARATOR = 2285, + + /// Change the type-separator character in the string setting up an auto-completion list. + /// Default is '?' but can be changed if items contain '?'. + SCI_AUTOCSETTYPESEPARATOR = 2286, + + /// Set the maximum width, in characters, of auto-completion and user lists. + /// Set to 0 to autosize to fit longest item, which is the default. + SCI_AUTOCSETMAXWIDTH = 2208, + + /// Get the maximum width, in characters, of auto-completion and user lists. + SCI_AUTOCGETMAXWIDTH = 2209, + + /// Set the maximum height, in rows, of auto-completion and user lists. + /// The default is 5 rows. + SCI_AUTOCSETMAXHEIGHT = 2210, + + /// Set the maximum height, in rows, of auto-completion and user lists. + SCI_AUTOCGETMAXHEIGHT = 2211, + + /// Set the number of spaces used for one level of indentation. + SCI_SETINDENT = 2122, + + /// Retrieve indentation size. + SCI_GETINDENT = 2123, + + /// Indentation will only use space characters if useTabs is false, otherwise + /// it will use a combination of tabs and spaces. + SCI_SETUSETABS = 2124, + + /// Retrieve whether tabs will be used in indentation. + SCI_GETUSETABS = 2125, + + /// Change the indentation of a line to a number of columns. + SCI_SETLINEINDENTATION = 2126, + + /// Retrieve the number of columns that a line is indented. + SCI_GETLINEINDENTATION = 2127, + + /// Retrieve the position before the first non indentation character on a line. + SCI_GETLINEINDENTPOSITION = 2128, + + /// Retrieve the column number of a position, taking tab width into account. + SCI_GETCOLUMN = 2129, + + /// Count characters between two positions. + SCI_COUNTCHARACTERS = 2633, + + /// Count code units between two positions. + SCI_COUNTCODEUNITS = 2715, + + /// Show or hide the horizontal scroll bar. + SCI_SETHSCROLLBAR = 2130, + + /// Is the horizontal scroll bar visible? + SCI_GETHSCROLLBAR = 2131, + + SC_IV_NONE = 0, + + SC_IV_REAL = 1, + + SC_IV_LOOKFORWARD = 2, + + SC_IV_LOOKBOTH = 3, + + /// Show or hide indentation guides. + SCI_SETINDENTATIONGUIDES = 2132, + + /// Are the indentation guides visible? + SCI_GETINDENTATIONGUIDES = 2133, + + /// Set the highlighted indentation guide column. + /// 0 = no highlighted guide. + SCI_SETHIGHLIGHTGUIDE = 2134, + + /// Get the highlighted indentation guide column. + SCI_GETHIGHLIGHTGUIDE = 2135, + + /// Get the position after the last visible characters on a line. + SCI_GETLINEENDPOSITION = 2136, + + /// Get the code page used to interpret the bytes of the document as characters. + SCI_GETCODEPAGE = 2137, + + /// Get the foreground colour of the caret. + SCI_GETCARETFORE = 2138, + + /// In read-only mode? + SCI_GETREADONLY = 2140, + + /// Sets the position of the caret. + SCI_SETCURRENTPOS = 2141, + + /// Sets the position that starts the selection - this becomes the anchor. + SCI_SETSELECTIONSTART = 2142, + + /// Returns the position at the start of the selection. + SCI_GETSELECTIONSTART = 2143, + + /// Sets the position that ends the selection - this becomes the caret. + SCI_SETSELECTIONEND = 2144, + + /// Returns the position at the end of the selection. + SCI_GETSELECTIONEND = 2145, + + /// Set caret to a position, while removing any existing selection. + SCI_SETEMPTYSELECTION = 2556, + + /// Sets the print magnification added to the point size of each style for printing. + SCI_SETPRINTMAGNIFICATION = 2146, + + /// Returns the print magnification. + SCI_GETPRINTMAGNIFICATION = 2147, + + SC_PRINT_NORMAL = 0, + + SC_PRINT_INVERTLIGHT = 1, + + SC_PRINT_BLACKONWHITE = 2, + + SC_PRINT_COLOURONWHITE = 3, + + SC_PRINT_COLOURONWHITEDEFAULTBG = 4, + + SC_PRINT_SCREENCOLOURS = 5, + + /// Modify colours when printing for clearer printed text. + SCI_SETPRINTCOLOURMODE = 2148, + + /// Returns the print colour mode. + SCI_GETPRINTCOLOURMODE = 2149, + + SCFIND_NONE = 0x0, + + SCFIND_WHOLEWORD = 0x2, + + SCFIND_MATCHCASE = 0x4, + + SCFIND_WORDSTART = 0x00100000, + + SCFIND_REGEXP = 0x00200000, + + SCFIND_POSIX = 0x00400000, + + SCFIND_CXX11REGEX = 0x00800000, + + /// Find some text in the document. + SCI_FINDTEXT = 2150, + + /// On Windows, will draw the document into a display context such as a printer. + SCI_FORMATRANGE = 2151, + + /// Retrieve the display line at the top of the display. + SCI_GETFIRSTVISIBLELINE = 2152, + + /// Retrieve the contents of a line. + /// Returns the length of the line. + SCI_GETLINE = 2153, + + /// Returns the number of lines in the document. There is always at least one. + SCI_GETLINECOUNT = 2154, + + /// Sets the size in pixels of the left margin. + SCI_SETMARGINLEFT = 2155, + + /// Returns the size in pixels of the left margin. + SCI_GETMARGINLEFT = 2156, + + /// Sets the size in pixels of the right margin. + SCI_SETMARGINRIGHT = 2157, + + /// Returns the size in pixels of the right margin. + SCI_GETMARGINRIGHT = 2158, + + /// Is the document different from when it was last saved? + SCI_GETMODIFY = 2159, + + /// Select a range of text. + SCI_SETSEL = 2160, + + /// Retrieve the selected text. + /// Return the length of the text. + /// Result is NUL-terminated. + SCI_GETSELTEXT = 2161, + + /// Retrieve a range of text. + /// Return the length of the text. + SCI_GETTEXTRANGE = 2162, + + /// Draw the selection either highlighted or in normal (non-highlighted) style. + SCI_HIDESELECTION = 2163, + + /// Retrieve the x value of the point in the window where a position is displayed. + SCI_POINTXFROMPOSITION = 2164, + + /// Retrieve the y value of the point in the window where a position is displayed. + SCI_POINTYFROMPOSITION = 2165, + + /// Retrieve the line containing a position. + SCI_LINEFROMPOSITION = 2166, + + /// Retrieve the position at the start of a line. + SCI_POSITIONFROMLINE = 2167, + + /// Scroll horizontally and vertically. + SCI_LINESCROLL = 2168, + + /// Ensure the caret is visible. + SCI_SCROLLCARET = 2169, + + /// Scroll the argument positions and the range between them into view giving + /// priority to the primary position then the secondary position. + /// This may be used to make a search match visible. + SCI_SCROLLRANGE = 2569, + + /// Replace the selected text with the argument text. + SCI_REPLACESEL = 2170, + + /// Set to read only or read write. + SCI_SETREADONLY = 2171, + + /// Null operation. + SCI_NULL = 2172, + + /// Will a paste succeed? + SCI_CANPASTE = 2173, + + /// Are there any undoable actions in the undo history? + SCI_CANUNDO = 2174, + + /// Delete the undo history. + SCI_EMPTYUNDOBUFFER = 2175, + + /// Undo one action in the undo history. + SCI_UNDO = 2176, + + /// Cut the selection to the clipboard. + SCI_CUT = 2177, + + /// Copy the selection to the clipboard. + SCI_COPY = 2178, + + /// Paste the contents of the clipboard into the document replacing the selection. + SCI_PASTE = 2179, + + /// Clear the selection. + SCI_CLEAR = 2180, + + /// Replace the contents of the document with the argument text. + SCI_SETTEXT = 2181, + + /// Retrieve all the text in the document. + /// Returns number of characters retrieved. + /// Result is NUL-terminated. + SCI_GETTEXT = 2182, + + /// Retrieve the number of characters in the document. + SCI_GETTEXTLENGTH = 2183, + + /// Retrieve a pointer to a function that processes messages for this Scintilla. + SCI_GETDIRECTFUNCTION = 2184, + + /// Retrieve a pointer value to use as the first argument when calling + /// the function returned by GetDirectFunction. + SCI_GETDIRECTPOINTER = 2185, + + /// Set to overtype (true) or insert mode. + SCI_SETOVERTYPE = 2186, + + /// Returns true if overtype mode is active otherwise false is returned. + SCI_GETOVERTYPE = 2187, + + /// Set the width of the insert mode caret. + SCI_SETCARETWIDTH = 2188, + + /// Returns the width of the insert mode caret. + SCI_GETCARETWIDTH = 2189, + + /// Sets the position that starts the target which is used for updating the + /// document without affecting the scroll position. + SCI_SETTARGETSTART = 2190, + + /// Get the position that starts the target. + SCI_GETTARGETSTART = 2191, + + /// Sets the position that ends the target which is used for updating the + /// document without affecting the scroll position. + SCI_SETTARGETEND = 2192, + + /// Get the position that ends the target. + SCI_GETTARGETEND = 2193, + + /// Sets both the start and end of the target in one call. + SCI_SETTARGETRANGE = 2686, + + /// Retrieve the text in the target. + SCI_GETTARGETTEXT = 2687, + + /// Make the target range start and end be the same as the selection range start and end. + SCI_TARGETFROMSELECTION = 2287, + + /// Sets the target to the whole document. + SCI_TARGETWHOLEDOCUMENT = 2690, + + /// Replace the target text with the argument text. + /// Text is counted so it can contain NULs. + /// Returns the length of the replacement text. + SCI_REPLACETARGET = 2194, + + /// Replace the target text with the argument text after \d processing. + /// Text is counted so it can contain NULs. + /// Looks for \d where d is between 1 and 9 and replaces these with the strings + /// matched in the last search operation which were surrounded by \( and \). + /// Returns the length of the replacement text including any change + /// caused by processing the \d patterns. + SCI_REPLACETARGETRE = 2195, + + /// Search for a counted string in the target and set the target to the found + /// range. Text is counted so it can contain NULs. + /// Returns start of found range or -1 for failure in which case target is not moved. + SCI_SEARCHINTARGET = 2197, + + /// Set the search flags used by SearchInTarget. + SCI_SETSEARCHFLAGS = 2198, + + /// Get the search flags used by SearchInTarget. + SCI_GETSEARCHFLAGS = 2199, + + /// Show a call tip containing a definition near position pos. + SCI_CALLTIPSHOW = 2200, + + /// Remove the call tip from the screen. + SCI_CALLTIPCANCEL = 2201, + + /// Is there an active call tip? + SCI_CALLTIPACTIVE = 2202, + + /// Retrieve the position where the caret was before displaying the call tip. + SCI_CALLTIPPOSSTART = 2203, + + /// Set the start position in order to change when backspacing removes the calltip. + SCI_CALLTIPSETPOSSTART = 2214, + + /// Highlight a segment of the definition. + SCI_CALLTIPSETHLT = 2204, + + /// Set the background colour for the call tip. + SCI_CALLTIPSETBACK = 2205, + + /// Set the foreground colour for the call tip. + SCI_CALLTIPSETFORE = 2206, + + /// Set the foreground colour for the highlighted part of the call tip. + SCI_CALLTIPSETFOREHLT = 2207, + + /// Enable use of STYLE_CALLTIP and set call tip tab size in pixels. + SCI_CALLTIPUSESTYLE = 2212, + + /// Set position of calltip, above or below text. + SCI_CALLTIPSETPOSITION = 2213, + + /// Find the display line of a document line taking hidden lines into account. + SCI_VISIBLEFROMDOCLINE = 2220, + + /// Find the document line of a display line taking hidden lines into account. + SCI_DOCLINEFROMVISIBLE = 2221, + + /// The number of display lines needed to wrap a document line + SCI_WRAPCOUNT = 2235, + + SC_FOLDLEVELBASE = 0x400, + + SC_FOLDLEVELWHITEFLAG = 0x1000, + + SC_FOLDLEVELHEADERFLAG = 0x2000, + + SC_FOLDLEVELNUMBERMASK = 0x0FFF, + + /// Set the fold level of a line. + /// This encodes an integer level along with flags indicating whether the + /// line is a header and whether it is effectively white space. + SCI_SETFOLDLEVEL = 2222, + + /// Retrieve the fold level of a line. + SCI_GETFOLDLEVEL = 2223, + + /// Find the last child line of a header line. + SCI_GETLASTCHILD = 2224, + + /// Find the parent line of a child line. + SCI_GETFOLDPARENT = 2225, + + /// Make a range of lines visible. + SCI_SHOWLINES = 2226, + + /// Make a range of lines invisible. + SCI_HIDELINES = 2227, + + /// Is a line visible? + SCI_GETLINEVISIBLE = 2228, + + /// Are all lines visible? + SCI_GETALLLINESVISIBLE = 2236, + + /// Show the children of a header line. + SCI_SETFOLDEXPANDED = 2229, + + /// Is a header line expanded? + SCI_GETFOLDEXPANDED = 2230, + + /// Switch a header line between expanded and contracted. + SCI_TOGGLEFOLD = 2231, + + /// Switch a header line between expanded and contracted and show some text after the line. + SCI_TOGGLEFOLDSHOWTEXT = 2700, + + SC_FOLDDISPLAYTEXT_HIDDEN = 0, + + SC_FOLDDISPLAYTEXT_STANDARD = 1, + + SC_FOLDDISPLAYTEXT_BOXED = 2, + + /// Set the style of fold display text. + SCI_FOLDDISPLAYTEXTSETSTYLE = 2701, + + /// Get the style of fold display text. + SCI_FOLDDISPLAYTEXTGETSTYLE = 2707, + + /// Set the default fold display text. + SCI_SETDEFAULTFOLDDISPLAYTEXT = 2722, + + /// Get the default fold display text. + SCI_GETDEFAULTFOLDDISPLAYTEXT = 2723, + + SC_FOLDACTION_CONTRACT = 0, + + SC_FOLDACTION_EXPAND = 1, + + SC_FOLDACTION_TOGGLE = 2, + + /// Expand or contract a fold header. + SCI_FOLDLINE = 2237, + + /// Expand or contract a fold header and its children. + SCI_FOLDCHILDREN = 2238, + + /// Expand a fold header and all children. Use the level argument instead of the line's current level. + SCI_EXPANDCHILDREN = 2239, + + /// Expand or contract all fold headers. + SCI_FOLDALL = 2662, + + /// Ensure a particular line is visible by expanding any header line hiding it. + SCI_ENSUREVISIBLE = 2232, + + SC_AUTOMATICFOLD_SHOW = 0x0001, + + SC_AUTOMATICFOLD_CLICK = 0x0002, + + SC_AUTOMATICFOLD_CHANGE = 0x0004, + + /// Set automatic folding behaviours. + SCI_SETAUTOMATICFOLD = 2663, + + /// Get automatic folding behaviours. + SCI_GETAUTOMATICFOLD = 2664, + + SC_FOLDFLAG_LINEBEFORE_EXPANDED = 0x0002, + + SC_FOLDFLAG_LINEBEFORE_CONTRACTED = 0x0004, + + SC_FOLDFLAG_LINEAFTER_EXPANDED = 0x0008, + + SC_FOLDFLAG_LINEAFTER_CONTRACTED = 0x0010, + + SC_FOLDFLAG_LEVELNUMBERS = 0x0040, + + SC_FOLDFLAG_LINESTATE = 0x0080, + + /// Set some style options for folding. + SCI_SETFOLDFLAGS = 2233, + + /// Ensure a particular line is visible by expanding any header line hiding it. + /// Use the currently set visibility policy to determine which range to display. + SCI_ENSUREVISIBLEENFORCEPOLICY = 2234, + + /// Sets whether a tab pressed when caret is within indentation indents. + SCI_SETTABINDENTS = 2260, + + /// Does a tab pressed when caret is within indentation indent? + SCI_GETTABINDENTS = 2261, + + /// Sets whether a backspace pressed when caret is within indentation unindents. + SCI_SETBACKSPACEUNINDENTS = 2262, + + /// Does a backspace pressed when caret is within indentation unindent? + SCI_GETBACKSPACEUNINDENTS = 2263, + + SC_TIME_FOREVER = 10000000, + + /// Sets the time the mouse must sit still to generate a mouse dwell event. + SCI_SETMOUSEDWELLTIME = 2264, + + /// Retrieve the time the mouse must sit still to generate a mouse dwell event. + SCI_GETMOUSEDWELLTIME = 2265, + + /// Get position of start of word. + SCI_WORDSTARTPOSITION = 2266, + + /// Get position of end of word. + SCI_WORDENDPOSITION = 2267, + + /// Is the range start..end considered a word? + SCI_ISRANGEWORD = 2691, + + SC_IDLESTYLING_NONE = 0, + + SC_IDLESTYLING_TOVISIBLE = 1, + + SC_IDLESTYLING_AFTERVISIBLE = 2, + + SC_IDLESTYLING_ALL = 3, + + /// Sets limits to idle styling. + SCI_SETIDLESTYLING = 2692, + + /// Retrieve the limits to idle styling. + SCI_GETIDLESTYLING = 2693, + + SC_WRAP_NONE = 0, + + SC_WRAP_WORD = 1, + + SC_WRAP_CHAR = 2, + + SC_WRAP_WHITESPACE = 3, + + /// Sets whether text is word wrapped. + SCI_SETWRAPMODE = 2268, + + /// Retrieve whether text is word wrapped. + SCI_GETWRAPMODE = 2269, + + SC_WRAPVISUALFLAG_NONE = 0x0000, + + SC_WRAPVISUALFLAG_END = 0x0001, + + SC_WRAPVISUALFLAG_START = 0x0002, + + SC_WRAPVISUALFLAG_MARGIN = 0x0004, + + /// Set the display mode of visual flags for wrapped lines. + SCI_SETWRAPVISUALFLAGS = 2460, + + /// Retrive the display mode of visual flags for wrapped lines. + SCI_GETWRAPVISUALFLAGS = 2461, + + SC_WRAPVISUALFLAGLOC_DEFAULT = 0x0000, + + SC_WRAPVISUALFLAGLOC_END_BY_TEXT = 0x0001, + + SC_WRAPVISUALFLAGLOC_START_BY_TEXT = 0x0002, + + /// Set the location of visual flags for wrapped lines. + SCI_SETWRAPVISUALFLAGSLOCATION = 2462, + + /// Retrive the location of visual flags for wrapped lines. + SCI_GETWRAPVISUALFLAGSLOCATION = 2463, + + /// Set the start indent for wrapped lines. + SCI_SETWRAPSTARTINDENT = 2464, + + /// Retrive the start indent for wrapped lines. + SCI_GETWRAPSTARTINDENT = 2465, + + SC_WRAPINDENT_FIXED = 0, + + SC_WRAPINDENT_SAME = 1, + + SC_WRAPINDENT_INDENT = 2, + + SC_WRAPINDENT_DEEPINDENT = 3, + + /// Sets how wrapped sublines are placed. Default is fixed. + SCI_SETWRAPINDENTMODE = 2472, + + /// Retrieve how wrapped sublines are placed. Default is fixed. + SCI_GETWRAPINDENTMODE = 2473, + + SC_CACHE_NONE = 0, + + SC_CACHE_CARET = 1, + + SC_CACHE_PAGE = 2, + + SC_CACHE_DOCUMENT = 3, + + /// Sets the degree of caching of layout information. + SCI_SETLAYOUTCACHE = 2272, + + /// Retrieve the degree of caching of layout information. + SCI_GETLAYOUTCACHE = 2273, + + /// Sets the document width assumed for scrolling. + SCI_SETSCROLLWIDTH = 2274, + + /// Retrieve the document width assumed for scrolling. + SCI_GETSCROLLWIDTH = 2275, + + /// Sets whether the maximum width line displayed is used to set scroll width. + SCI_SETSCROLLWIDTHTRACKING = 2516, + + /// Retrieve whether the scroll width tracks wide lines. + SCI_GETSCROLLWIDTHTRACKING = 2517, + + /// Measure the pixel width of some text in a particular style. + /// NUL terminated text argument. + /// Does not handle tab or control characters. + SCI_TEXTWIDTH = 2276, + + /// Sets the scroll range so that maximum scroll position has + /// the last line at the bottom of the view (default). + /// Setting this to false allows scrolling one page below the last line. + SCI_SETENDATLASTLINE = 2277, + + /// Retrieve whether the maximum scroll position has the last + /// line at the bottom of the view. + SCI_GETENDATLASTLINE = 2278, + + /// Retrieve the height of a particular line of text in pixels. + SCI_TEXTHEIGHT = 2279, + + /// Show or hide the vertical scroll bar. + SCI_SETVSCROLLBAR = 2280, + + /// Is the vertical scroll bar visible? + SCI_GETVSCROLLBAR = 2281, + + /// Append a string to the end of the document without changing the selection. + SCI_APPENDTEXT = 2282, + + SC_PHASES_ONE = 0, + + SC_PHASES_TWO = 1, + + SC_PHASES_MULTIPLE = 2, + + /// How many phases is drawing done in? + SCI_GETPHASESDRAW = 2673, + + /// In one phase draw, text is drawn in a series of rectangular blocks with no overlap. + /// In two phase draw, text is drawn in a series of lines allowing runs to overlap horizontally. + /// In multiple phase draw, each element is drawn over the whole drawing area, allowing text + /// to overlap from one line to the next. + SCI_SETPHASESDRAW = 2674, + + SC_EFF_QUALITY_MASK = 0xF, + + SC_EFF_QUALITY_DEFAULT = 0, + + SC_EFF_QUALITY_NON_ANTIALIASED = 1, + + SC_EFF_QUALITY_ANTIALIASED = 2, + + SC_EFF_QUALITY_LCD_OPTIMIZED = 3, + + /// Choose the quality level for text from the FontQuality enumeration. + SCI_SETFONTQUALITY = 2611, + + /// Retrieve the quality level for text. + SCI_GETFONTQUALITY = 2612, + + /// Scroll so that a display line is at the top of the display. + SCI_SETFIRSTVISIBLELINE = 2613, + + SC_MULTIPASTE_ONCE = 0, + + SC_MULTIPASTE_EACH = 1, + + /// Change the effect of pasting when there are multiple selections. + SCI_SETMULTIPASTE = 2614, + + /// Retrieve the effect of pasting when there are multiple selections. + SCI_GETMULTIPASTE = 2615, + + /// Retrieve the value of a tag from a regular expression search. + /// Result is NUL-terminated. + SCI_GETTAG = 2616, + + /// Join the lines in the target. + SCI_LINESJOIN = 2288, + + /// Split the lines in the target into lines that are less wide than pixelWidth + /// where possible. + SCI_LINESSPLIT = 2289, + + /// Set one of the colours used as a chequerboard pattern in the fold margin + SCI_SETFOLDMARGINCOLOUR = 2290, + + /// Set the other colour used as a chequerboard pattern in the fold margin + SCI_SETFOLDMARGINHICOLOUR = 2291, + + SC_ACCESSIBILITY_DISABLED = 0, + + SC_ACCESSIBILITY_ENABLED = 1, + + /// Enable or disable accessibility. + SCI_SETACCESSIBILITY = 2702, + + /// Report accessibility status. + SCI_GETACCESSIBILITY = 2703, + + /// Move caret down one line. + SCI_LINEDOWN = 2300, + + /// Move caret down one line extending selection to new caret position. + SCI_LINEDOWNEXTEND = 2301, + + /// Move caret up one line. + SCI_LINEUP = 2302, + + /// Move caret up one line extending selection to new caret position. + SCI_LINEUPEXTEND = 2303, + + /// Move caret left one character. + SCI_CHARLEFT = 2304, + + /// Move caret left one character extending selection to new caret position. + SCI_CHARLEFTEXTEND = 2305, + + /// Move caret right one character. + SCI_CHARRIGHT = 2306, + + /// Move caret right one character extending selection to new caret position. + SCI_CHARRIGHTEXTEND = 2307, + + /// Move caret left one word. + SCI_WORDLEFT = 2308, + + /// Move caret left one word extending selection to new caret position. + SCI_WORDLEFTEXTEND = 2309, + + /// Move caret right one word. + SCI_WORDRIGHT = 2310, + + /// Move caret right one word extending selection to new caret position. + SCI_WORDRIGHTEXTEND = 2311, + + /// Move caret to first position on line. + SCI_HOME = 2312, + + /// Move caret to first position on line extending selection to new caret position. + SCI_HOMEEXTEND = 2313, + + /// Move caret to last position on line. + SCI_LINEEND = 2314, + + /// Move caret to last position on line extending selection to new caret position. + SCI_LINEENDEXTEND = 2315, + + /// Move caret to first position in document. + SCI_DOCUMENTSTART = 2316, + + /// Move caret to first position in document extending selection to new caret position. + SCI_DOCUMENTSTARTEXTEND = 2317, + + /// Move caret to last position in document. + SCI_DOCUMENTEND = 2318, + + /// Move caret to last position in document extending selection to new caret position. + SCI_DOCUMENTENDEXTEND = 2319, + + /// Move caret one page up. + SCI_PAGEUP = 2320, + + /// Move caret one page up extending selection to new caret position. + SCI_PAGEUPEXTEND = 2321, + + /// Move caret one page down. + SCI_PAGEDOWN = 2322, + + /// Move caret one page down extending selection to new caret position. + SCI_PAGEDOWNEXTEND = 2323, + + /// Switch from insert to overtype mode or the reverse. + SCI_EDITTOGGLEOVERTYPE = 2324, + + /// Cancel any modes such as call tip or auto-completion list display. + SCI_CANCEL = 2325, + + /// Delete the selection or if no selection, the character before the caret. + SCI_DELETEBACK = 2326, + + /// If selection is empty or all on one line replace the selection with a tab character. + /// If more than one line selected, indent the lines. + SCI_TAB = 2327, + + /// Dedent the selected lines. + SCI_BACKTAB = 2328, + + /// Insert a new line, may use a CRLF, CR or LF depending on EOL mode. + SCI_NEWLINE = 2329, + + /// Insert a Form Feed character. + SCI_FORMFEED = 2330, + + /// Move caret to before first visible character on line. + /// If already there move to first character on line. + SCI_VCHOME = 2331, + + /// Like VCHome but extending selection to new caret position. + SCI_VCHOMEEXTEND = 2332, + + /// Magnify the displayed text by increasing the sizes by 1 point. + SCI_ZOOMIN = 2333, + + /// Make the displayed text smaller by decreasing the sizes by 1 point. + SCI_ZOOMOUT = 2334, + + /// Delete the word to the left of the caret. + SCI_DELWORDLEFT = 2335, + + /// Delete the word to the right of the caret. + SCI_DELWORDRIGHT = 2336, + + /// Delete the word to the right of the caret, but not the trailing non-word characters. + SCI_DELWORDRIGHTEND = 2518, + + /// Cut the line containing the caret. + SCI_LINECUT = 2337, + + /// Delete the line containing the caret. + SCI_LINEDELETE = 2338, + + /// Switch the current line with the previous. + SCI_LINETRANSPOSE = 2339, + + /// Reverse order of selected lines. + SCI_LINEREVERSE = 2354, + + /// Duplicate the current line. + SCI_LINEDUPLICATE = 2404, + + /// Transform the selection to lower case. + SCI_LOWERCASE = 2340, + + /// Transform the selection to upper case. + SCI_UPPERCASE = 2341, + + /// Scroll the document down, keeping the caret visible. + SCI_LINESCROLLDOWN = 2342, + + /// Scroll the document up, keeping the caret visible. + SCI_LINESCROLLUP = 2343, + + /// Delete the selection or if no selection, the character before the caret. + /// Will not delete the character before at the start of a line. + SCI_DELETEBACKNOTLINE = 2344, + + /// Move caret to first position on display line. + SCI_HOMEDISPLAY = 2345, + + /// Move caret to first position on display line extending selection to + /// new caret position. + SCI_HOMEDISPLAYEXTEND = 2346, + + /// Move caret to last position on display line. + SCI_LINEENDDISPLAY = 2347, + + /// Move caret to last position on display line extending selection to new + /// caret position. + SCI_LINEENDDISPLAYEXTEND = 2348, + + /// Like Home but when word-wrap is enabled goes first to start of display line + /// HomeDisplay, then to start of document line Home. + SCI_HOMEWRAP = 2349, + + /// Like HomeExtend but when word-wrap is enabled extends first to start of display line + /// HomeDisplayExtend, then to start of document line HomeExtend. + SCI_HOMEWRAPEXTEND = 2450, + + /// Like LineEnd but when word-wrap is enabled goes first to end of display line + /// LineEndDisplay, then to start of document line LineEnd. + SCI_LINEENDWRAP = 2451, + + /// Like LineEndExtend but when word-wrap is enabled extends first to end of display line + /// LineEndDisplayExtend, then to start of document line LineEndExtend. + SCI_LINEENDWRAPEXTEND = 2452, + + /// Like VCHome but when word-wrap is enabled goes first to start of display line + /// VCHomeDisplay, then behaves like VCHome. + SCI_VCHOMEWRAP = 2453, + + /// Like VCHomeExtend but when word-wrap is enabled extends first to start of display line + /// VCHomeDisplayExtend, then behaves like VCHomeExtend. + SCI_VCHOMEWRAPEXTEND = 2454, + + /// Copy the line containing the caret. + SCI_LINECOPY = 2455, + + /// Move the caret inside current view if it's not there already. + SCI_MOVECARETINSIDEVIEW = 2401, + + /// How many characters are on a line, including end of line characters? + SCI_LINELENGTH = 2350, + + /// Highlight the characters at two positions. + SCI_BRACEHIGHLIGHT = 2351, + + /// Use specified indicator to highlight matching braces instead of changing their style. + SCI_BRACEHIGHLIGHTINDICATOR = 2498, + + /// Highlight the character at a position indicating there is no matching brace. + SCI_BRACEBADLIGHT = 2352, + + /// Use specified indicator to highlight non matching brace instead of changing its style. + SCI_BRACEBADLIGHTINDICATOR = 2499, + + /// Find the position of a matching brace or INVALID_POSITION if no match. + /// The maxReStyle must be 0 for now. It may be defined in a future release. + SCI_BRACEMATCH = 2353, + + /// Are the end of line characters visible? + SCI_GETVIEWEOL = 2355, + + /// Make the end of line characters visible or invisible. + SCI_SETVIEWEOL = 2356, + + /// Retrieve a pointer to the document object. + SCI_GETDOCPOINTER = 2357, + + /// Change the document object used. + SCI_SETDOCPOINTER = 2358, + + /// Set which document modification events are sent to the container. + SCI_SETMODEVENTMASK = 2359, + + EDGE_NONE = 0, + + EDGE_LINE = 1, + + EDGE_BACKGROUND = 2, + + EDGE_MULTILINE = 3, + + /// Retrieve the column number which text should be kept within. + SCI_GETEDGECOLUMN = 2360, + + /// Set the column number of the edge. + /// If text goes past the edge then it is highlighted. + SCI_SETEDGECOLUMN = 2361, + + /// Retrieve the edge highlight mode. + SCI_GETEDGEMODE = 2362, + + /// The edge may be displayed by a line (EDGE_LINE/EDGE_MULTILINE) or by highlighting text that + /// goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). + SCI_SETEDGEMODE = 2363, + + /// Retrieve the colour used in edge indication. + SCI_GETEDGECOLOUR = 2364, + + /// Change the colour used in edge indication. + SCI_SETEDGECOLOUR = 2365, + + /// Add a new vertical edge to the view. + SCI_MULTIEDGEADDLINE = 2694, + + /// Clear all vertical edges. + SCI_MULTIEDGECLEARALL = 2695, + + /// Sets the current caret position to be the search anchor. + SCI_SEARCHANCHOR = 2366, + + /// Find some text starting at the search anchor. + /// Does not ensure the selection is visible. + SCI_SEARCHNEXT = 2367, + + /// Find some text starting at the search anchor and moving backwards. + /// Does not ensure the selection is visible. + SCI_SEARCHPREV = 2368, + + /// Retrieves the number of lines completely visible. + SCI_LINESONSCREEN = 2370, + + SC_POPUP_NEVER = 0, + + SC_POPUP_ALL = 1, + + SC_POPUP_TEXT = 2, + + /// Set whether a pop up menu is displayed automatically when the user presses + /// the wrong mouse button on certain areas. + SCI_USEPOPUP = 2371, + + /// Is the selection rectangular? The alternative is the more common stream selection. + SCI_SELECTIONISRECTANGLE = 2372, + + /// Set the zoom level. This number of points is added to the size of all fonts. + /// It may be positive to magnify or negative to reduce. + SCI_SETZOOM = 2373, + + /// Retrieve the zoom level. + SCI_GETZOOM = 2374, + + SC_DOCUMENTOPTION_DEFAULT = 0, + + SC_DOCUMENTOPTION_STYLES_NONE = 0x1, + + SC_DOCUMENTOPTION_TEXT_LARGE = 0x100, + + /// Create a new document object. + /// Starts with reference count of 1 and not selected into editor. + SCI_CREATEDOCUMENT = 2375, + + /// Extend life of document. + SCI_ADDREFDOCUMENT = 2376, + + /// Release a reference to the document, deleting document if it fades to black. + SCI_RELEASEDOCUMENT = 2377, + + /// Get which document options are set. + SCI_GETDOCUMENTOPTIONS = 2379, + + /// Get which document modification events are sent to the container. + SCI_GETMODEVENTMASK = 2378, + + /// Set whether command events are sent to the container. + SCI_SETCOMMANDEVENTS = 2717, + + /// Get whether command events are sent to the container. + SCI_GETCOMMANDEVENTS = 2718, + + /// Change internal focus flag. + SCI_SETFOCUS = 2380, + + /// Get internal focus flag. + SCI_GETFOCUS = 2381, + + SC_STATUS_OK = 0, + + SC_STATUS_FAILURE = 1, + + SC_STATUS_BADALLOC = 2, + + SC_STATUS_WARN_START = 1000, + + SC_STATUS_WARN_REGEX = 1001, + + /// Change error status - 0 = OK. + SCI_SETSTATUS = 2382, + + /// Get error status. + SCI_GETSTATUS = 2383, + + /// Set whether the mouse is captured when its button is pressed. + SCI_SETMOUSEDOWNCAPTURES = 2384, + + /// Get whether mouse gets captured. + SCI_GETMOUSEDOWNCAPTURES = 2385, + + /// Set whether the mouse wheel can be active outside the window. + SCI_SETMOUSEWHEELCAPTURES = 2696, + + /// Get whether mouse wheel can be active outside the window. + SCI_GETMOUSEWHEELCAPTURES = 2697, + + SC_CURSORNORMAL = 0xFFFFFFFF, + + SC_CURSORARROW = 2, + + SC_CURSORWAIT = 4, + + SC_CURSORREVERSEARROW = 7, + + /// Sets the cursor to one of the SC_CURSOR* values. + SCI_SETCURSOR = 2386, + + /// Get cursor type. + SCI_GETCURSOR = 2387, + + /// Change the way control characters are displayed: + /// If symbol is < 32, keep the drawn way, else, use the given character. + SCI_SETCONTROLCHARSYMBOL = 2388, + + /// Get the way control characters are displayed. + SCI_GETCONTROLCHARSYMBOL = 2389, + + /// Move to the previous change in capitalisation. + SCI_WORDPARTLEFT = 2390, + + /// Move to the previous change in capitalisation extending selection + /// to new caret position. + SCI_WORDPARTLEFTEXTEND = 2391, + + /// Move to the change next in capitalisation. + SCI_WORDPARTRIGHT = 2392, + + /// Move to the next change in capitalisation extending selection + /// to new caret position. + SCI_WORDPARTRIGHTEXTEND = 2393, + + VISIBLE_SLOP = 0x01, + + VISIBLE_STRICT = 0x04, + + /// Set the way the display area is determined when a particular line + /// is to be moved to by Find, FindNext, GotoLine, etc. + SCI_SETVISIBLEPOLICY = 2394, + + /// Delete back from the current position to the start of the line. + SCI_DELLINELEFT = 2395, + + /// Delete forwards from the current position to the end of the line. + SCI_DELLINERIGHT = 2396, + + /// Set the xOffset (ie, horizontal scroll position). + SCI_SETXOFFSET = 2397, + + /// Get the xOffset (ie, horizontal scroll position). + SCI_GETXOFFSET = 2398, + + /// Set the last x chosen value to be the caret x position. + SCI_CHOOSECARETX = 2399, + + /// Set the focus to this Scintilla widget. + SCI_GRABFOCUS = 2400, + + CARET_SLOP = 0x01, + + CARET_STRICT = 0x04, + + CARET_JUMPS = 0x10, + + CARET_EVEN = 0x08, + + /// Set the way the caret is kept visible when going sideways. + /// The exclusion zone is given in pixels. + SCI_SETXCARETPOLICY = 2402, + + /// Set the way the line the caret is on is kept visible. + /// The exclusion zone is given in lines. + SCI_SETYCARETPOLICY = 2403, + + /// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). + SCI_SETPRINTWRAPMODE = 2406, + + /// Is printing line wrapped? + SCI_GETPRINTWRAPMODE = 2407, + + /// Set a fore colour for active hotspots. + SCI_SETHOTSPOTACTIVEFORE = 2410, + + /// Get the fore colour for active hotspots. + SCI_GETHOTSPOTACTIVEFORE = 2494, + + /// Set a back colour for active hotspots. + SCI_SETHOTSPOTACTIVEBACK = 2411, + + /// Get the back colour for active hotspots. + SCI_GETHOTSPOTACTIVEBACK = 2495, + + /// Enable / Disable underlining active hotspots. + SCI_SETHOTSPOTACTIVEUNDERLINE = 2412, + + /// Get whether underlining for active hotspots. + SCI_GETHOTSPOTACTIVEUNDERLINE = 2496, + + /// Limit hotspots to single line so hotspots on two lines don't merge. + SCI_SETHOTSPOTSINGLELINE = 2421, + + /// Get the HotspotSingleLine property + SCI_GETHOTSPOTSINGLELINE = 2497, + + /// Move caret down one paragraph (delimited by empty lines). + SCI_PARADOWN = 2413, + + /// Extend selection down one paragraph (delimited by empty lines). + SCI_PARADOWNEXTEND = 2414, + + /// Move caret up one paragraph (delimited by empty lines). + SCI_PARAUP = 2415, + + /// Extend selection up one paragraph (delimited by empty lines). + SCI_PARAUPEXTEND = 2416, + + /// Given a valid document position, return the previous position taking code + /// page into account. Returns 0 if passed 0. + SCI_POSITIONBEFORE = 2417, + + /// Given a valid document position, return the next position taking code + /// page into account. Maximum value returned is the last position in the document. + SCI_POSITIONAFTER = 2418, + + /// Given a valid document position, return a position that differs in a number + /// of characters. Returned value is always between 0 and last position in document. + SCI_POSITIONRELATIVE = 2670, + + /// Given a valid document position, return a position that differs in a number + /// of UTF-16 code units. Returned value is always between 0 and last position in document. + /// The result may point half way (2 bytes) inside a non-BMP character. + SCI_POSITIONRELATIVECODEUNITS = 2716, + + /// Copy a range of text to the clipboard. Positions are clipped into the document. + SCI_COPYRANGE = 2419, + + /// Copy argument text to the clipboard. + SCI_COPYTEXT = 2420, + + SC_SEL_STREAM = 0, + + SC_SEL_RECTANGLE = 1, + + SC_SEL_LINES = 2, + + SC_SEL_THIN = 3, + + /// Set the selection mode to stream (SC_SEL_STREAM) or rectangular (SC_SEL_RECTANGLE/SC_SEL_THIN) or + /// by lines (SC_SEL_LINES). + SCI_SETSELECTIONMODE = 2422, + + /// Get the mode of the current selection. + SCI_GETSELECTIONMODE = 2423, + + /// Get whether or not regular caret moves will extend or reduce the selection. + SCI_GETMOVEEXTENDSSELECTION = 2706, + + /// Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line). + SCI_GETLINESELSTARTPOSITION = 2424, + + /// Retrieve the position of the end of the selection at the given line (INVALID_POSITION if no selection on this line). + SCI_GETLINESELENDPOSITION = 2425, + + /// Move caret down one line, extending rectangular selection to new caret position. + SCI_LINEDOWNRECTEXTEND = 2426, + + /// Move caret up one line, extending rectangular selection to new caret position. + SCI_LINEUPRECTEXTEND = 2427, + + /// Move caret left one character, extending rectangular selection to new caret position. + SCI_CHARLEFTRECTEXTEND = 2428, + + /// Move caret right one character, extending rectangular selection to new caret position. + SCI_CHARRIGHTRECTEXTEND = 2429, + + /// Move caret to first position on line, extending rectangular selection to new caret position. + SCI_HOMERECTEXTEND = 2430, + + /// Move caret to before first visible character on line. + /// If already there move to first character on line. + /// In either case, extend rectangular selection to new caret position. + SCI_VCHOMERECTEXTEND = 2431, + + /// Move caret to last position on line, extending rectangular selection to new caret position. + SCI_LINEENDRECTEXTEND = 2432, + + /// Move caret one page up, extending rectangular selection to new caret position. + SCI_PAGEUPRECTEXTEND = 2433, + + /// Move caret one page down, extending rectangular selection to new caret position. + SCI_PAGEDOWNRECTEXTEND = 2434, + + /// Move caret to top of page, or one page up if already at top of page. + SCI_STUTTEREDPAGEUP = 2435, + + /// Move caret to top of page, or one page up if already at top of page, extending selection to new caret position. + SCI_STUTTEREDPAGEUPEXTEND = 2436, + + /// Move caret to bottom of page, or one page down if already at bottom of page. + SCI_STUTTEREDPAGEDOWN = 2437, + + /// Move caret to bottom of page, or one page down if already at bottom of page, extending selection to new caret position. + SCI_STUTTEREDPAGEDOWNEXTEND = 2438, + + /// Move caret left one word, position cursor at end of word. + SCI_WORDLEFTEND = 2439, + + /// Move caret left one word, position cursor at end of word, extending selection to new caret position. + SCI_WORDLEFTENDEXTEND = 2440, + + /// Move caret right one word, position cursor at end of word. + SCI_WORDRIGHTEND = 2441, + + /// Move caret right one word, position cursor at end of word, extending selection to new caret position. + SCI_WORDRIGHTENDEXTEND = 2442, + + /// Set the set of characters making up whitespace for when moving or selecting by word. + /// Should be called after SetWordChars. + SCI_SETWHITESPACECHARS = 2443, + + /// Get the set of characters making up whitespace for when moving or selecting by word. + SCI_GETWHITESPACECHARS = 2647, + + /// Set the set of characters making up punctuation characters + /// Should be called after SetWordChars. + SCI_SETPUNCTUATIONCHARS = 2648, + + /// Get the set of characters making up punctuation characters + SCI_GETPUNCTUATIONCHARS = 2649, + + /// Reset the set of characters for whitespace and word characters to the defaults. + SCI_SETCHARSDEFAULT = 2444, + + /// Get currently selected item position in the auto-completion list + SCI_AUTOCGETCURRENT = 2445, + + /// Get currently selected item text in the auto-completion list + /// Returns the length of the item text + /// Result is NUL-terminated. + SCI_AUTOCGETCURRENTTEXT = 2610, + + SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE = 0, + + SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE = 1, + + /// Set auto-completion case insensitive behaviour to either prefer case-sensitive matches or have no preference. + SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR = 2634, + + /// Get auto-completion case insensitive behaviour. + SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR = 2635, + + SC_MULTIAUTOC_ONCE = 0, + + SC_MULTIAUTOC_EACH = 1, + + /// Change the effect of autocompleting when there are multiple selections. + SCI_AUTOCSETMULTI = 2636, + + /// Retrieve the effect of autocompleting when there are multiple selections. + SCI_AUTOCGETMULTI = 2637, + + SC_ORDER_PRESORTED = 0, + + SC_ORDER_PERFORMSORT = 1, + + SC_ORDER_CUSTOM = 2, + + /// Set the way autocompletion lists are ordered. + SCI_AUTOCSETORDER = 2660, + + /// Get the way autocompletion lists are ordered. + SCI_AUTOCGETORDER = 2661, + + /// Enlarge the document to a particular size of text bytes. + SCI_ALLOCATE = 2446, + + /// Returns the target converted to UTF8. + /// Return the length in bytes. + SCI_TARGETASUTF8 = 2447, + + /// Set the length of the utf8 argument for calling EncodedFromUTF8. + /// Set to -1 and the string will be measured to the first nul. + SCI_SETLENGTHFORENCODE = 2448, + + /// Translates a UTF8 string into the document encoding. + /// Return the length of the result in bytes. + /// On error return 0. + SCI_ENCODEDFROMUTF8 = 2449, + + /// Find the position of a column on a line taking into account tabs and + /// multi-byte characters. If beyond end of line, return line end position. + SCI_FINDCOLUMN = 2456, + + /// Can the caret preferred x position only be changed by explicit movement commands? + SCI_GETCARETSTICKY = 2457, + + /// Stop the caret preferred x position changing when the user types. + SCI_SETCARETSTICKY = 2458, + + SC_CARETSTICKY_OFF = 0, + + SC_CARETSTICKY_ON = 1, + + SC_CARETSTICKY_WHITESPACE = 2, + + /// Switch between sticky and non-sticky: meant to be bound to a key. + SCI_TOGGLECARETSTICKY = 2459, + + /// Enable/Disable convert-on-paste for line endings + SCI_SETPASTECONVERTENDINGS = 2467, + + /// Get convert-on-paste setting + SCI_GETPASTECONVERTENDINGS = 2468, + + /// Duplicate the selection. If selection empty duplicate the line containing the caret. + SCI_SELECTIONDUPLICATE = 2469, + + SC_ALPHA_TRANSPARENT = 0, + + SC_ALPHA_OPAQUE = 255, + + SC_ALPHA_NOALPHA = 256, + + /// Set background alpha of the caret line. + SCI_SETCARETLINEBACKALPHA = 2470, + + /// Get the background alpha of the caret line. + SCI_GETCARETLINEBACKALPHA = 2471, + + CARETSTYLE_INVISIBLE = 0, + + CARETSTYLE_LINE = 1, + + CARETSTYLE_BLOCK = 2, + + CARETSTYLE_OVERSTRIKE_BAR = 0, + + CARETSTYLE_OVERSTRIKE_BLOCK = 0x10, + + CARETSTYLE_INS_MASK = 0xF, + + CARETSTYLE_BLOCK_AFTER = 0x100, + + /// Set the style of the caret to be drawn. + SCI_SETCARETSTYLE = 2512, + + /// Returns the current style of the caret. + SCI_GETCARETSTYLE = 2513, + + /// Set the indicator used for IndicatorFillRange and IndicatorClearRange + SCI_SETINDICATORCURRENT = 2500, + + /// Get the current indicator + SCI_GETINDICATORCURRENT = 2501, + + /// Set the value used for IndicatorFillRange + SCI_SETINDICATORVALUE = 2502, + + /// Get the current indicator value + SCI_GETINDICATORVALUE = 2503, + + /// Turn a indicator on over a range. + SCI_INDICATORFILLRANGE = 2504, + + /// Turn a indicator off over a range. + SCI_INDICATORCLEARRANGE = 2505, + + /// Are any indicators present at pos? + SCI_INDICATORALLONFOR = 2506, + + /// What value does a particular indicator have at a position? + SCI_INDICATORVALUEAT = 2507, + + /// Where does a particular indicator start? + SCI_INDICATORSTART = 2508, + + /// Where does a particular indicator end? + SCI_INDICATOREND = 2509, + + /// Set number of entries in position cache + SCI_SETPOSITIONCACHE = 2514, + + /// How many entries are allocated to the position cache? + SCI_GETPOSITIONCACHE = 2515, + + /// Copy the selection, if selection empty copy the line with the caret + SCI_COPYALLOWLINE = 2519, + + /// Compact the document buffer and return a read-only pointer to the + /// characters in the document. + SCI_GETCHARACTERPOINTER = 2520, + + /// Return a read-only pointer to a range of characters in the document. + /// May move the gap so that the range is contiguous, but will only move up + /// to lengthRange bytes. + SCI_GETRANGEPOINTER = 2643, + + /// Return a position which, to avoid performance costs, should not be within + /// the range of a call to GetRangePointer. + SCI_GETGAPPOSITION = 2644, + + /// Set the alpha fill colour of the given indicator. + SCI_INDICSETALPHA = 2523, + + /// Get the alpha fill colour of the given indicator. + SCI_INDICGETALPHA = 2524, + + /// Set the alpha outline colour of the given indicator. + SCI_INDICSETOUTLINEALPHA = 2558, + + /// Get the alpha outline colour of the given indicator. + SCI_INDICGETOUTLINEALPHA = 2559, + + /// Set extra ascent for each line + SCI_SETEXTRAASCENT = 2525, + + /// Get extra ascent for each line + SCI_GETEXTRAASCENT = 2526, + + /// Set extra descent for each line + SCI_SETEXTRADESCENT = 2527, + + /// Get extra descent for each line + SCI_GETEXTRADESCENT = 2528, + + /// Which symbol was defined for markerNumber with MarkerDefine + SCI_MARKERSYMBOLDEFINED = 2529, + + /// Set the text in the text margin for a line + SCI_MARGINSETTEXT = 2530, + + /// Get the text in the text margin for a line + SCI_MARGINGETTEXT = 2531, + + /// Set the style number for the text margin for a line + SCI_MARGINSETSTYLE = 2532, + + /// Get the style number for the text margin for a line + SCI_MARGINGETSTYLE = 2533, + + /// Set the style in the text margin for a line + SCI_MARGINSETSTYLES = 2534, + + /// Get the styles in the text margin for a line + SCI_MARGINGETSTYLES = 2535, + + /// Clear the margin text on all lines + SCI_MARGINTEXTCLEARALL = 2536, + + /// Get the start of the range of style numbers used for margin text + SCI_MARGINSETSTYLEOFFSET = 2537, + + /// Get the start of the range of style numbers used for margin text + SCI_MARGINGETSTYLEOFFSET = 2538, + + SC_MARGINOPTION_NONE = 0, + + SC_MARGINOPTION_SUBLINESELECT = 1, + + /// Set the margin options. + SCI_SETMARGINOPTIONS = 2539, + + /// Get the margin options. + SCI_GETMARGINOPTIONS = 2557, + + /// Set the annotation text for a line + SCI_ANNOTATIONSETTEXT = 2540, + + /// Get the annotation text for a line + SCI_ANNOTATIONGETTEXT = 2541, + + /// Set the style number for the annotations for a line + SCI_ANNOTATIONSETSTYLE = 2542, + + /// Get the style number for the annotations for a line + SCI_ANNOTATIONGETSTYLE = 2543, + + /// Set the annotation styles for a line + SCI_ANNOTATIONSETSTYLES = 2544, + + /// Get the annotation styles for a line + SCI_ANNOTATIONGETSTYLES = 2545, + + /// Get the number of annotation lines for a line + SCI_ANNOTATIONGETLINES = 2546, + + /// Clear the annotations from all lines + SCI_ANNOTATIONCLEARALL = 2547, + + ANNOTATION_HIDDEN = 0, + + ANNOTATION_STANDARD = 1, + + ANNOTATION_BOXED = 2, + + ANNOTATION_INDENTED = 3, + + /// Set the visibility for the annotations for a view + SCI_ANNOTATIONSETVISIBLE = 2548, + + /// Get the visibility for the annotations for a view + SCI_ANNOTATIONGETVISIBLE = 2549, + + /// Get the start of the range of style numbers used for annotations + SCI_ANNOTATIONSETSTYLEOFFSET = 2550, + + /// Get the start of the range of style numbers used for annotations + SCI_ANNOTATIONGETSTYLEOFFSET = 2551, + + /// Release all extended (>255) style numbers + SCI_RELEASEALLEXTENDEDSTYLES = 2552, + + /// Allocate some extended (>255) style numbers and return the start of the range + SCI_ALLOCATEEXTENDEDSTYLES = 2553, + + UNDO_NONE = 0, + + UNDO_MAY_COALESCE = 1, + + /// Add a container action to the undo stack + SCI_ADDUNDOACTION = 2560, + + /// Find the position of a character from a point within the window. + SCI_CHARPOSITIONFROMPOINT = 2561, + + /// Find the position of a character from a point within the window. + /// Return INVALID_POSITION if not close to text. + SCI_CHARPOSITIONFROMPOINTCLOSE = 2562, + + /// Set whether switching to rectangular mode while selecting with the mouse is allowed. + SCI_SETMOUSESELECTIONRECTANGULARSWITCH = 2668, + + /// Whether switching to rectangular mode while selecting with the mouse is allowed. + SCI_GETMOUSESELECTIONRECTANGULARSWITCH = 2669, + + /// Set whether multiple selections can be made + SCI_SETMULTIPLESELECTION = 2563, + + /// Whether multiple selections can be made + SCI_GETMULTIPLESELECTION = 2564, + + /// Set whether typing can be performed into multiple selections + SCI_SETADDITIONALSELECTIONTYPING = 2565, + + /// Whether typing can be performed into multiple selections + SCI_GETADDITIONALSELECTIONTYPING = 2566, + + /// Set whether additional carets will blink + SCI_SETADDITIONALCARETSBLINK = 2567, + + /// Whether additional carets will blink + SCI_GETADDITIONALCARETSBLINK = 2568, + + /// Set whether additional carets are visible + SCI_SETADDITIONALCARETSVISIBLE = 2608, + + /// Whether additional carets are visible + SCI_GETADDITIONALCARETSVISIBLE = 2609, + + /// How many selections are there? + SCI_GETSELECTIONS = 2570, + + /// Is every selected range empty? + SCI_GETSELECTIONEMPTY = 2650, + + /// Clear selections to a single empty stream selection + SCI_CLEARSELECTIONS = 2571, + + /// Set a simple selection + SCI_SETSELECTION = 2572, + + /// Add a selection + SCI_ADDSELECTION = 2573, + + /// Drop one selection + SCI_DROPSELECTIONN = 2671, + + /// Set the main selection + SCI_SETMAINSELECTION = 2574, + + /// Which selection is the main selection + SCI_GETMAINSELECTION = 2575, + + /// Set the caret position of the nth selection. + SCI_SETSELECTIONNCARET = 2576, + + /// Return the caret position of the nth selection. + SCI_GETSELECTIONNCARET = 2577, + + /// Set the anchor position of the nth selection. + SCI_SETSELECTIONNANCHOR = 2578, + + /// Return the anchor position of the nth selection. + SCI_GETSELECTIONNANCHOR = 2579, + + /// Set the virtual space of the caret of the nth selection. + SCI_SETSELECTIONNCARETVIRTUALSPACE = 2580, + + /// Return the virtual space of the caret of the nth selection. + SCI_GETSELECTIONNCARETVIRTUALSPACE = 2581, + + /// Set the virtual space of the anchor of the nth selection. + SCI_SETSELECTIONNANCHORVIRTUALSPACE = 2582, + + /// Return the virtual space of the anchor of the nth selection. + SCI_GETSELECTIONNANCHORVIRTUALSPACE = 2583, + + /// Sets the position that starts the selection - this becomes the anchor. + SCI_SETSELECTIONNSTART = 2584, + + /// Returns the position at the start of the selection. + SCI_GETSELECTIONNSTART = 2585, + + /// Sets the position that ends the selection - this becomes the currentPosition. + SCI_SETSELECTIONNEND = 2586, + + /// Returns the position at the end of the selection. + SCI_GETSELECTIONNEND = 2587, + + /// Set the caret position of the rectangular selection. + SCI_SETRECTANGULARSELECTIONCARET = 2588, + + /// Return the caret position of the rectangular selection. + SCI_GETRECTANGULARSELECTIONCARET = 2589, + + /// Set the anchor position of the rectangular selection. + SCI_SETRECTANGULARSELECTIONANCHOR = 2590, + + /// Return the anchor position of the rectangular selection. + SCI_GETRECTANGULARSELECTIONANCHOR = 2591, + + /// Set the virtual space of the caret of the rectangular selection. + SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE = 2592, + + /// Return the virtual space of the caret of the rectangular selection. + SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE = 2593, + + /// Set the virtual space of the anchor of the rectangular selection. + SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE = 2594, + + /// Return the virtual space of the anchor of the rectangular selection. + SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE = 2595, + + SCVS_NONE = 0, + + SCVS_RECTANGULARSELECTION = 1, + + SCVS_USERACCESSIBLE = 2, + + SCVS_NOWRAPLINESTART = 4, + + /// Set options for virtual space behaviour. + SCI_SETVIRTUALSPACEOPTIONS = 2596, + + /// Return options for virtual space behaviour. + SCI_GETVIRTUALSPACEOPTIONS = 2597, + + /// On GTK, allow selecting the modifier key to use for mouse-based + /// rectangular selection. Often the window manager requires Alt+Mouse Drag + /// for moving windows. + /// Valid values are SCMOD_CTRL(default), SCMOD_ALT, or SCMOD_SUPER. + SCI_SETRECTANGULARSELECTIONMODIFIER = 2598, + + /// Get the modifier key used for rectangular selection. + SCI_GETRECTANGULARSELECTIONMODIFIER = 2599, + + /// Set the foreground colour of additional selections. + /// Must have previously called SetSelFore with non-zero first argument for this to have an effect. + SCI_SETADDITIONALSELFORE = 2600, + + /// Set the background colour of additional selections. + /// Must have previously called SetSelBack with non-zero first argument for this to have an effect. + SCI_SETADDITIONALSELBACK = 2601, + + /// Set the alpha of the selection. + SCI_SETADDITIONALSELALPHA = 2602, + + /// Get the alpha of the selection. + SCI_GETADDITIONALSELALPHA = 2603, + + /// Set the foreground colour of additional carets. + SCI_SETADDITIONALCARETFORE = 2604, + + /// Get the foreground colour of additional carets. + SCI_GETADDITIONALCARETFORE = 2605, + + /// Set the main selection to the next selection. + SCI_ROTATESELECTION = 2606, + + /// Swap that caret and anchor of the main selection. + SCI_SWAPMAINANCHORCARET = 2607, + + /// Add the next occurrence of the main selection to the set of selections as main. + /// If the current selection is empty then select word around caret. + SCI_MULTIPLESELECTADDNEXT = 2688, + + /// Add each occurrence of the main selection in the target to the set of selections. + /// If the current selection is empty then select word around caret. + SCI_MULTIPLESELECTADDEACH = 2689, + + /// Indicate that the internal state of a lexer has changed over a range and therefore + /// there may be a need to redraw. + SCI_CHANGELEXERSTATE = 2617, + + /// Find the next line at or after lineStart that is a contracted fold header line. + /// Return -1 when no more lines. + SCI_CONTRACTEDFOLDNEXT = 2618, + + /// Centre current line in window. + SCI_VERTICALCENTRECARET = 2619, + + /// Move the selected lines up one line, shifting the line above after the selection + SCI_MOVESELECTEDLINESUP = 2620, + + /// Move the selected lines down one line, shifting the line below before the selection + SCI_MOVESELECTEDLINESDOWN = 2621, + + /// Set the identifier reported as idFrom in notification messages. + SCI_SETIDENTIFIER = 2622, + + /// Get the identifier. + SCI_GETIDENTIFIER = 2623, + + /// Set the width for future RGBA image data. + SCI_RGBAIMAGESETWIDTH = 2624, + + /// Set the height for future RGBA image data. + SCI_RGBAIMAGESETHEIGHT = 2625, + + /// Set the scale factor in percent for future RGBA image data. + SCI_RGBAIMAGESETSCALE = 2651, + + /// Define a marker from RGBA data. + /// It has the width and height from RGBAImageSetWidth/Height + SCI_MARKERDEFINERGBAIMAGE = 2626, + + /// Register an RGBA image for use in autocompletion lists. + /// It has the width and height from RGBAImageSetWidth/Height + SCI_REGISTERRGBAIMAGE = 2627, + + /// Scroll to start of document. + SCI_SCROLLTOSTART = 2628, + + /// Scroll to end of document. + SCI_SCROLLTOEND = 2629, + + SC_TECHNOLOGY_DEFAULT = 0, + + SC_TECHNOLOGY_DIRECTWRITE = 1, + + SC_TECHNOLOGY_DIRECTWRITERETAIN = 2, + + SC_TECHNOLOGY_DIRECTWRITEDC = 3, + + /// Set the technology used. + SCI_SETTECHNOLOGY = 2630, + + /// Get the tech. + SCI_GETTECHNOLOGY = 2631, + + /// Create an ILoader*. + SCI_CREATELOADER = 2632, + + /// On OS X, show a find indicator. + SCI_FINDINDICATORSHOW = 2640, + + /// On OS X, flash a find indicator, then fade out. + SCI_FINDINDICATORFLASH = 2641, + + /// On OS X, hide the find indicator. + SCI_FINDINDICATORHIDE = 2642, + + /// Move caret to before first visible character on display line. + /// If already there move to first character on display line. + SCI_VCHOMEDISPLAY = 2652, + + /// Like VCHomeDisplay but extending selection to new caret position. + SCI_VCHOMEDISPLAYEXTEND = 2653, + + /// Is the caret line always visible? + SCI_GETCARETLINEVISIBLEALWAYS = 2654, + + /// Sets the caret line to always visible. + SCI_SETCARETLINEVISIBLEALWAYS = 2655, + + SC_LINE_END_TYPE_DEFAULT = 0, + + SC_LINE_END_TYPE_UNICODE = 1, + + /// Set the line end types that the application wants to use. May not be used if incompatible with lexer or encoding. + SCI_SETLINEENDTYPESALLOWED = 2656, + + /// Get the line end types currently allowed. + SCI_GETLINEENDTYPESALLOWED = 2657, + + /// Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation. + SCI_GETLINEENDTYPESACTIVE = 2658, + + /// Set the way a character is drawn. + SCI_SETREPRESENTATION = 2665, + + /// Set the way a character is drawn. + /// Result is NUL-terminated. + SCI_GETREPRESENTATION = 2666, + + /// Remove a character representation. + SCI_CLEARREPRESENTATION = 2667, + + /// Start notifying the container of all key presses and commands. + SCI_STARTRECORD = 3001, + + /// Stop notifying the container of all key presses and commands. + SCI_STOPRECORD = 3002, + + /// Set the lexing language of the document. + SCI_SETLEXER = 4001, + + /// Retrieve the lexing language of the document. + SCI_GETLEXER = 4002, + + /// Colourise a segment of the document using the current lexing language. + SCI_COLOURISE = 4003, + + /// Set up a value that may be used by a lexer for some optional feature. + SCI_SETPROPERTY = 4004, + + KEYWORDSET_MAX = 8, + + /// Set up the key words used by the lexer. + SCI_SETKEYWORDS = 4005, + + /// Set the lexing language of the document based on string name. + SCI_SETLEXERLANGUAGE = 4006, + + /// Load a lexer library (dll / so). + SCI_LOADLEXERLIBRARY = 4007, + + /// Retrieve a "property" value previously set with SetProperty. + /// Result is NUL-terminated. + SCI_GETPROPERTY = 4008, + + /// Retrieve a "property" value previously set with SetProperty, + /// with "$()" variable replacement on returned buffer. + /// Result is NUL-terminated. + SCI_GETPROPERTYEXPANDED = 4009, + + /// Retrieve a "property" value previously set with SetProperty, + /// interpreted as an int AFTER any "$()" variable replacement. + SCI_GETPROPERTYINT = 4010, + + /// Retrieve the name of the lexer. + /// Return the length of the text. + /// Result is NUL-terminated. + SCI_GETLEXERLANGUAGE = 4012, + + /// For private communication between an application and a known lexer. + SCI_PRIVATELEXERCALL = 4013, + + /// Retrieve a '\n' separated list of properties understood by the current lexer. + /// Result is NUL-terminated. + SCI_PROPERTYNAMES = 4014, + + SC_TYPE_BOOLEAN = 0, + + SC_TYPE_INTEGER = 1, + + SC_TYPE_STRING = 2, + + /// Retrieve the type of a property. + SCI_PROPERTYTYPE = 4015, + + /// Describe a property. + /// Result is NUL-terminated. + SCI_DESCRIBEPROPERTY = 4016, + + /// Retrieve a '\n' separated list of descriptions of the keyword sets understood by the current lexer. + /// Result is NUL-terminated. + SCI_DESCRIBEKEYWORDSETS = 4017, + + /// Bit set of LineEndType enumertion for which line ends beyond the standard + /// LF, CR, and CRLF are supported by the lexer. + SCI_GETLINEENDTYPESSUPPORTED = 4018, + + /// Allocate a set of sub styles for a particular base style, returning start of range + SCI_ALLOCATESUBSTYLES = 4020, + + /// The starting style number for the sub styles associated with a base style + SCI_GETSUBSTYLESSTART = 4021, + + /// The number of sub styles associated with a base style + SCI_GETSUBSTYLESLENGTH = 4022, + + /// For a sub style, return the base style, else return the argument. + SCI_GETSTYLEFROMSUBSTYLE = 4027, + + /// For a secondary style, return the primary style, else return the argument. + SCI_GETPRIMARYSTYLEFROMSTYLE = 4028, + + /// Free allocated sub styles + SCI_FREESUBSTYLES = 4023, + + /// Set the identifiers that are shown in a particular style + SCI_SETIDENTIFIERS = 4024, + + /// Where styles are duplicated by a feature such as active/inactive code + /// return the distance between the two types. + SCI_DISTANCETOSECONDARYSTYLES = 4025, + + /// Get the set of base styles that can be extended with sub styles + /// Result is NUL-terminated. + SCI_GETSUBSTYLEBASES = 4026, + + /// Retrieve the number of named styles for the lexer. + SCI_GETNAMEDSTYLES = 4029, + + /// Retrieve the name of a style. + /// Result is NUL-terminated. + SCI_NAMEOFSTYLE = 4030, + + /// Retrieve a ' ' separated list of style tags like "literal quoted string". + /// Result is NUL-terminated. + SCI_TAGSOFSTYLE = 4031, + + /// Retrieve a description of a style. + /// Result is NUL-terminated. + SCI_DESCRIPTIONOFSTYLE = 4032, + + SC_MOD_NONE = 0x0, + + SC_MOD_INSERTTEXT = 0x1, + + SC_MOD_DELETETEXT = 0x2, + + SC_MOD_CHANGESTYLE = 0x4, + + SC_MOD_CHANGEFOLD = 0x8, + + SC_PERFORMED_USER = 0x10, + + SC_PERFORMED_UNDO = 0x20, + + SC_PERFORMED_REDO = 0x40, + + SC_MULTISTEPUNDOREDO = 0x80, + + SC_LASTSTEPINUNDOREDO = 0x100, + + SC_MOD_CHANGEMARKER = 0x200, + + SC_MOD_BEFOREINSERT = 0x400, + + SC_MOD_BEFOREDELETE = 0x800, + + SC_MULTILINEUNDOREDO = 0x1000, + + SC_STARTACTION = 0x2000, + + SC_MOD_CHANGEINDICATOR = 0x4000, + + SC_MOD_CHANGELINESTATE = 0x8000, + + SC_MOD_CHANGEMARGIN = 0x10000, + + SC_MOD_CHANGEANNOTATION = 0x20000, + + SC_MOD_CONTAINER = 0x40000, + + SC_MOD_LEXERSTATE = 0x80000, + + SC_MOD_INSERTCHECK = 0x100000, + + SC_MOD_CHANGETABSTOPS = 0x200000, + + SC_MODEVENTMASKALL = 0x3FFFFF, + + SC_UPDATE_CONTENT = 0x1, + + SC_UPDATE_SELECTION = 0x2, + + SC_UPDATE_V_SCROLL = 0x4, + + SC_UPDATE_H_SCROLL = 0x8, + + SCEN_CHANGE = 768, + + SCEN_SETFOCUS = 512, + + SCEN_KILLFOCUS = 256, + + SCK_DOWN = 300, + + SCK_UP = 301, + + SCK_LEFT = 302, + + SCK_RIGHT = 303, + + SCK_HOME = 304, + + SCK_END = 305, + + SCK_PRIOR = 306, + + SCK_NEXT = 307, + + SCK_DELETE = 308, + + SCK_INSERT = 309, + + SCK_ESCAPE = 7, + + SCK_BACK = 8, + + SCK_TAB = 9, + + SCK_RETURN = 13, + + SCK_ADD = 310, + + SCK_SUBTRACT = 311, + + SCK_DIVIDE = 312, + + SCK_WIN = 313, + + SCK_RWIN = 314, + + SCK_MENU = 315, + + SCMOD_NORM = 0, + + SCMOD_SHIFT = 1, + + SCMOD_CTRL = 2, + + SCMOD_ALT = 4, + + SCMOD_SUPER = 8, + + SCMOD_META = 16, + + SC_AC_FILLUP = 1, + + SC_AC_DOUBLECLICK = 2, + + SC_AC_TAB = 3, + + SC_AC_NEWLINE = 4, + + SC_AC_COMMAND = 5, + + SC_CHARACTERSOURCE_DIRECT_INPUT = 0, + + SC_CHARACTERSOURCE_TENTATIVE_INPUT = 1, + + SC_CHARACTERSOURCE_IME_RESULT = 2, + + /// Events + SCN_STYLENEEDED = 2000, + + /// Events + SCN_CHARADDED = 2001, + + /// Events + SCN_SAVEPOINTREACHED = 2002, + + /// Events + SCN_SAVEPOINTLEFT = 2003, + + /// Events + SCN_MODIFYATTEMPTRO = 2004, + + /// GTK Specific to work around focus and accelerator problems: + SCN_KEY = 2005, + + /// GTK Specific to work around focus and accelerator problems: + SCN_DOUBLECLICK = 2006, + + /// GTK Specific to work around focus and accelerator problems: + SCN_UPDATEUI = 2007, + + /// GTK Specific to work around focus and accelerator problems: + SCN_MODIFIED = 2008, + + /// GTK Specific to work around focus and accelerator problems: + SCN_MACRORECORD = 2009, + + /// GTK Specific to work around focus and accelerator problems: + SCN_MARGINCLICK = 2010, + + /// GTK Specific to work around focus and accelerator problems: + SCN_NEEDSHOWN = 2011, + + /// GTK Specific to work around focus and accelerator problems: + SCN_PAINTED = 2013, + + /// GTK Specific to work around focus and accelerator problems: + SCN_USERLISTSELECTION = 2014, + + /// GTK Specific to work around focus and accelerator problems: + SCN_URIDROPPED = 2015, + + /// GTK Specific to work around focus and accelerator problems: + SCN_DWELLSTART = 2016, + + /// GTK Specific to work around focus and accelerator problems: + SCN_DWELLEND = 2017, + + /// GTK Specific to work around focus and accelerator problems: + SCN_ZOOM = 2018, + + /// GTK Specific to work around focus and accelerator problems: + SCN_HOTSPOTCLICK = 2019, + + /// GTK Specific to work around focus and accelerator problems: + SCN_HOTSPOTDOUBLECLICK = 2020, + + /// GTK Specific to work around focus and accelerator problems: + SCN_CALLTIPCLICK = 2021, + + /// GTK Specific to work around focus and accelerator problems: + SCN_AUTOCSELECTION = 2022, + + /// GTK Specific to work around focus and accelerator problems: + SCN_INDICATORCLICK = 2023, + + /// GTK Specific to work around focus and accelerator problems: + SCN_INDICATORRELEASE = 2024, + + /// GTK Specific to work around focus and accelerator problems: + SCN_AUTOCCANCELLED = 2025, + + /// GTK Specific to work around focus and accelerator problems: + SCN_AUTOCCHARDELETED = 2026, + + /// GTK Specific to work around focus and accelerator problems: + SCN_HOTSPOTRELEASECLICK = 2027, + + /// GTK Specific to work around focus and accelerator problems: + SCN_FOCUSIN = 2028, + + /// GTK Specific to work around focus and accelerator problems: + SCN_FOCUSOUT = 2029, + + /// GTK Specific to work around focus and accelerator problems: + SCN_AUTOCCOMPLETED = 2030, + + /// GTK Specific to work around focus and accelerator problems: + SCN_MARGINRIGHTCLICK = 2031, + + /// GTK Specific to work around focus and accelerator problems: + SCN_AUTOCSELECTIONCHANGE = 2032, + + SC_BIDIRECTIONAL_DISABLED = 0, + + SC_BIDIRECTIONAL_L2R = 1, + + SC_BIDIRECTIONAL_R2L = 2, + + /// Retrieve bidirectional text display state. + SCI_GETBIDIRECTIONAL = 2708, + + /// Set bidirectional text display state. + SCI_SETBIDIRECTIONAL = 2709, + + SC_LINECHARACTERINDEX_NONE = 0, + + SC_LINECHARACTERINDEX_UTF32 = 1, + + SC_LINECHARACTERINDEX_UTF16 = 2, + + /// Retrieve line character index state. + SCI_GETLINECHARACTERINDEX = 2710, + + /// Request line character index be created or its use count increased. + SCI_ALLOCATELINECHARACTERINDEX = 2711, + + /// Decrease use count of line character index and remove if 0. + SCI_RELEASELINECHARACTERINDEX = 2712, + + /// Retrieve the document line containing a position measured in index units. + SCI_LINEFROMINDEXPOSITION = 2713, + + /// Retrieve the position measured in index units at the start of a document line. + SCI_INDEXPOSITIONFROMLINE = 2714, + + /// Divide each styling byte into lexical class bits (default: 5) and indicator + /// bits (default: 3). If a lexer requires more than 32 lexical states, then this + /// is used to expand the possible states. + SCI_SETSTYLEBITS = 2090, + + /// Retrieve number of bits in style bytes used to hold the lexical state. + SCI_GETSTYLEBITS = 2091, + + /// Retrieve the number of bits the current lexer needs for styling. + SCI_GETSTYLEBITSNEEDED = 4011, + + /// Deprecated in 3.5.5 + /// Always interpret keyboard input as Unicode + SCI_SETKEYSUNICODE = 2521, + + /// Are keys always interpreted as Unicode? + SCI_GETKEYSUNICODE = 2522, + + /// Is drawing done in two phases with backgrounds drawn before foregrounds? + SCI_GETTWOPHASEDRAW = 2283, + + /// In twoPhaseDraw mode, drawing is performed in two phases, first the background + /// and then the foreground. This avoids chopping off characters that overlap the next run. + SCI_SETTWOPHASEDRAW = 2284, + + INDIC0_MASK = 0x20, + + INDIC1_MASK = 0x40, + + INDIC2_MASK = 0x80, + + INDICS_MASK = 0xE0, + + /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ + + SC_SEARCHRESULT_LINEBUFFERMAXLENGTH = 1024 + } + + public class TextToFind : IDisposable + { + Sci_TextToFind _sciTextToFind; + IntPtr _ptrSciTextToFind; + bool _disposed = false; + + /// + /// text to find + /// + /// range to search + /// the search pattern + public TextToFind(CharacterRange chrRange, string searchText) + { + _sciTextToFind.chrg = chrRange; + _sciTextToFind.lpstrText = Marshal.StringToHGlobalAnsi(searchText); + } + + /// + /// text to find + /// + /// range to search + /// range to search + /// the search pattern + public TextToFind(int cpmin, int cpmax, string searchText) + { + _sciTextToFind.chrg.cpMin = cpmin; + _sciTextToFind.chrg.cpMax = cpmax; + _sciTextToFind.lpstrText = Marshal.StringToHGlobalAnsi(searchText); + } + + [StructLayout(LayoutKind.Sequential)] + struct Sci_TextToFind + { + public CharacterRange chrg; + public IntPtr lpstrText; + public CharacterRange chrgText; + } + + public IntPtr NativePointer { get { _initNativeStruct(); return _ptrSciTextToFind; } } + public string lpstrText { set { _freeNativeString(); _sciTextToFind.lpstrText = Marshal.StringToHGlobalAnsi(value); } } + public CharacterRange chrg { get { _readNativeStruct(); return _sciTextToFind.chrg; } set { _sciTextToFind.chrg = value; _initNativeStruct(); } } + public CharacterRange chrgText { get { _readNativeStruct(); return _sciTextToFind.chrgText; } } + + void _initNativeStruct() + { + if (_ptrSciTextToFind == IntPtr.Zero) + _ptrSciTextToFind = Marshal.AllocHGlobal(Marshal.SizeOf(_sciTextToFind)); + Marshal.StructureToPtr(_sciTextToFind, _ptrSciTextToFind, false); + } + + void _readNativeStruct() + { + if (_ptrSciTextToFind != IntPtr.Zero) + _sciTextToFind = (Sci_TextToFind)Marshal.PtrToStructure(_ptrSciTextToFind, typeof(Sci_TextToFind)); + } + + void _freeNativeString() + { + if (_sciTextToFind.lpstrText != IntPtr.Zero) Marshal.FreeHGlobal(_sciTextToFind.lpstrText); + } + + public void Dispose() + { + if (!_disposed) + { + _freeNativeString(); + if (_ptrSciTextToFind != IntPtr.Zero) Marshal.FreeHGlobal(_ptrSciTextToFind); + _disposed = true; + } + } + + ~TextToFind() + { + Dispose(); + } + } +} diff --git a/WakaTime/PluginInfrastructure/UnmanagedExports.cs b/WakaTime/PluginInfrastructure/UnmanagedExports.cs index 480ee74..01c344c 100644 --- a/WakaTime/PluginInfrastructure/UnmanagedExports.cs +++ b/WakaTime/PluginInfrastructure/UnmanagedExports.cs @@ -1,67 +1,54 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using System.Runtime.InteropServices; -using Kbg.NppPluginNET.PluginInfrastructure; -using NppPlugin.DllExport; -using WakaTime; - -namespace Kbg.NppPluginNET -{ - class UnmanagedExports - { - [DllExport(CallingConvention=CallingConvention.Cdecl)] - static bool isUnicode() - { - return true; - } - - [DllExport(CallingConvention = CallingConvention.Cdecl)] - static void setInfo(NppData notepadPlusData) - { - PluginBase.nppData = notepadPlusData; - WakaTimePackage.CommandMenuInit(); - } - - [DllExport(CallingConvention = CallingConvention.Cdecl)] - static IntPtr getFuncsArray(ref int nbF) - { - nbF = PluginBase._funcItems.Items.Count; - return PluginBase._funcItems.NativePointer; - } - - [DllExport(CallingConvention = CallingConvention.Cdecl)] - static uint messageProc(uint Message, IntPtr wParam, IntPtr lParam) - { - return 1; - } - - static IntPtr _ptrPluginName = IntPtr.Zero; - [DllExport(CallingConvention = CallingConvention.Cdecl)] - static IntPtr getName() - { - if (_ptrPluginName == IntPtr.Zero) - _ptrPluginName = Marshal.StringToHGlobalUni(WakaTimePackage.PluginName); - return _ptrPluginName; - } - - [DllExport(CallingConvention = CallingConvention.Cdecl)] - static void beNotified(IntPtr notifyCode) - { - ScNotification notification = (ScNotification)Marshal.PtrToStructure(notifyCode, typeof(ScNotification)); - if (notification.Header.Code == (uint)NppMsg.NPPN_TBMODIFICATION) - { - PluginBase._funcItems.RefreshItems(); - WakaTimePackage.SetToolBarIcon(); - } - else if (notification.Header.Code == (uint)NppMsg.NPPN_SHUTDOWN) - { - WakaTimePackage.PluginCleanUp(); - Marshal.FreeHGlobal(_ptrPluginName); - } - else - { - WakaTimePackage.OnNotification(notification); - } - } - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; +using System.Runtime.InteropServices; +using Kbg.NppPluginNET.PluginInfrastructure; +using WakaTime; + +namespace Kbg.NppPluginNET +{ + class UnmanagedExports + { + [DllExport(CallingConvention=CallingConvention.Cdecl)] + static bool isUnicode() + { + return true; + } + + [DllExport(CallingConvention = CallingConvention.Cdecl)] + static void setInfo(NppData notepadPlusData) + { + PluginBase.nppData = notepadPlusData; + //WakaTimePackage.CommandMenuInit(); + } + + [DllExport(CallingConvention = CallingConvention.Cdecl)] + static IntPtr getFuncsArray(ref int nbF) + { + WakaTimePackage.CommandMenuInit(); + nbF = PluginBase._funcItems.Items.Count; + return PluginBase._funcItems.NativePointer; + } + + [DllExport(CallingConvention = CallingConvention.Cdecl)] + static uint messageProc(uint Message, IntPtr wParam, IntPtr lParam) + { + return 1; + } + + static IntPtr _ptrPluginName = IntPtr.Zero; + [DllExport(CallingConvention = CallingConvention.Cdecl)] + static IntPtr getName() + { + if (_ptrPluginName == IntPtr.Zero) + _ptrPluginName = Marshal.StringToHGlobalUni("WakaTime"); + return _ptrPluginName; + } + + [DllExport(CallingConvention = CallingConvention.Cdecl)] + static void beNotified(IntPtr notifyCode) + { + var notification = (ScNotification)Marshal.PtrToStructure(notifyCode, typeof(ScNotification)); + WakaTimePackage.OnNppNotification(notification, _ptrPluginName); + } + } +} diff --git a/WakaTime/PluginInfrastructure/Win32.cs b/WakaTime/PluginInfrastructure/Win32.cs index d1a8c74..5a4bbd7 100644 --- a/WakaTime/PluginInfrastructure/Win32.cs +++ b/WakaTime/PluginInfrastructure/Win32.cs @@ -1,313 +1,313 @@ -// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. -using System; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Text; - -namespace Kbg.NppPluginNET.PluginInfrastructure -{ - public class Win32 - { - /// - /// Get the scroll information of a scroll bar or window with scroll bar - /// @see https://msdn.microsoft.com/en-us/library/windows/desktop/bb787537(v=vs.85).aspx - /// - [StructLayout(LayoutKind.Sequential)] - public struct ScrollInfo - { - /// - /// Specifies the size, in bytes, of this structure. The caller must set this to sizeof(SCROLLINFO). - /// - public uint cbSize; - /// - /// Specifies the scroll bar parameters to set or retrieve. - /// @see ScrollInfoMask - /// - public uint fMask; - /// - /// Specifies the minimum scrolling position. - /// - public int nMin; - /// - /// Specifies the maximum scrolling position. - /// - public int nMax; - /// - /// Specifies the page size, in device units. A scroll bar uses this value to determine the appropriate size of the proportional scroll box. - /// - public uint nPage; - /// - /// Specifies the position of the scroll box. - /// - public int nPos; - /// - /// Specifies the immediate position of a scroll box that the user is dragging. - /// An application can retrieve this value while processing the SB_THUMBTRACK request code. - /// An application cannot set the immediate scroll position; the SetScrollInfo function ignores this member. - /// - public int nTrackPos; - } - - /// - /// Used for the ScrollInfo fMask - /// SIF_ALL => Combination of SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS. - /// SIF_DISABLENOSCROLL => This value is used only when setting a scroll bar's parameters. If the scroll bar's new parameters make the scroll bar unnecessary, disable the scroll bar instead of removing it. - /// SIF_PAGE => The nPage member contains the page size for a proportional scroll bar. - /// SIF_POS => The nPos member contains the scroll box position, which is not updated while the user drags the scroll box. - /// SIF_RANGE => The nMin and nMax members contain the minimum and maximum values for the scrolling range. - /// SIF_TRACKPOS => The nTrackPos member contains the current position of the scroll box while the user is dragging it. - /// - public enum ScrollInfoMask - { - SIF_RANGE = 0x1, - SIF_PAGE = 0x2, - SIF_POS = 0x4, - SIF_DISABLENOSCROLL = 0x8, - SIF_TRACKPOS = 0x10, - SIF_ALL = SIF_RANGE + SIF_PAGE + SIF_POS + SIF_TRACKPOS - } - - /// - /// Used for the GetScrollInfo() nBar parameter - /// - public enum ScrollInfoBar - { - SB_HORZ = 0, - SB_VERT = 1, - SB_CTL = 2, - SB_BOTH = 3 - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - [DllImport("user32")] - public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - [DllImport("user32")] - public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lParam); - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - [DllImport("user32")] - public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - [DllImport("user32")] - public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, out IntPtr lParam); - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, NppMenuCmd lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr((uint)lParam)); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr(lParam)); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, out int lParam) - { - IntPtr outVal; - IntPtr retval = SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), out outVal); - lParam = outVal.ToInt32(); - return retval; - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, int lParam) - { - return SendMessage(hWnd, (UInt32)Msg, wParam, new IntPtr(lParam)); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, IntPtr wParam, int lParam) - { - return SendMessage(hWnd, (UInt32)Msg, wParam, new IntPtr(lParam)); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, IntPtr lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, string lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] StringBuilder lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, int lParam) - { - return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr(lParam)); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, IntPtr wParam, IntPtr lParam) - { - return SendMessage(hWnd, (UInt32)Msg, wParam, lParam); - } - - /// - /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as - /// or . - /// If gateways are missing or incomplete, please help extend them and send your code to the project - /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net - /// - public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, ref LangType lParam) - { - IntPtr outVal; - IntPtr retval = SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), out outVal); - lParam = (LangType)outVal; - return retval; - } - - public const int MAX_PATH = 260; - - [DllImport("kernel32")] - public static extern int GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName); - - [DllImport("kernel32")] - public static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName); - - public const int MF_BYCOMMAND = 0; - public const int MF_CHECKED = 8; - public const int MF_UNCHECKED = 0; - - [DllImport("user32")] - public static extern IntPtr GetMenu(IntPtr hWnd); - - [DllImport("user32")] - public static extern int CheckMenuItem(IntPtr hmenu, int uIDCheckItem, int uCheck); - - public const int WM_CREATE = 1; - - [DllImport("user32")] - public static extern bool ClientToScreen(IntPtr hWnd, ref Point lpPoint); - - [DllImport("kernel32")] - public static extern void OutputDebugString(string lpOutputString); - - /// - /// @see https://msdn.microsoft.com/en-us/library/windows/desktop/bb787583(v=vs.85).aspx - /// - /// - /// - /// - /// - [DllImport("user32")] - public static extern int GetScrollInfo(IntPtr hwnd, int nBar, ref ScrollInfo scrollInfo); - } -} +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Text; + +namespace Kbg.NppPluginNET.PluginInfrastructure +{ + public class Win32 + { + /// + /// Get the scroll information of a scroll bar or window with scroll bar + /// @see https://msdn.microsoft.com/en-us/library/windows/desktop/bb787537(v=vs.85).aspx + /// + [StructLayout(LayoutKind.Sequential)] + public struct ScrollInfo + { + /// + /// Specifies the size, in bytes, of this structure. The caller must set this to sizeof(SCROLLINFO). + /// + public uint cbSize; + /// + /// Specifies the scroll bar parameters to set or retrieve. + /// @see ScrollInfoMask + /// + public uint fMask; + /// + /// Specifies the minimum scrolling position. + /// + public int nMin; + /// + /// Specifies the maximum scrolling position. + /// + public int nMax; + /// + /// Specifies the page size, in device units. A scroll bar uses this value to determine the appropriate size of the proportional scroll box. + /// + public uint nPage; + /// + /// Specifies the position of the scroll box. + /// + public int nPos; + /// + /// Specifies the immediate position of a scroll box that the user is dragging. + /// An application can retrieve this value while processing the SB_THUMBTRACK request code. + /// An application cannot set the immediate scroll position; the SetScrollInfo function ignores this member. + /// + public int nTrackPos; + } + + /// + /// Used for the ScrollInfo fMask + /// SIF_ALL => Combination of SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS. + /// SIF_DISABLENOSCROLL => This value is used only when setting a scroll bar's parameters. If the scroll bar's new parameters make the scroll bar unnecessary, disable the scroll bar instead of removing it. + /// SIF_PAGE => The nPage member contains the page size for a proportional scroll bar. + /// SIF_POS => The nPos member contains the scroll box position, which is not updated while the user drags the scroll box. + /// SIF_RANGE => The nMin and nMax members contain the minimum and maximum values for the scrolling range. + /// SIF_TRACKPOS => The nTrackPos member contains the current position of the scroll box while the user is dragging it. + /// + public enum ScrollInfoMask + { + SIF_RANGE = 0x1, + SIF_PAGE = 0x2, + SIF_POS = 0x4, + SIF_DISABLENOSCROLL = 0x8, + SIF_TRACKPOS = 0x10, + SIF_ALL = SIF_RANGE + SIF_PAGE + SIF_POS + SIF_TRACKPOS + } + + /// + /// Used for the GetScrollInfo() nBar parameter + /// + public enum ScrollInfoBar + { + SB_HORZ = 0, + SB_VERT = 1, + SB_CTL = 2, + SB_BOTH = 3 + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + [DllImport("user32")] + public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + [DllImport("user32")] + public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lParam); + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + [DllImport("user32")] + public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + [DllImport("user32")] + public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, out IntPtr lParam); + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, NppMenuCmd lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr((uint)lParam)); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr(lParam)); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, out int lParam) + { + IntPtr outVal; + IntPtr retval = SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), out outVal); + lParam = outVal.ToInt32(); + return retval; + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, int lParam) + { + return SendMessage(hWnd, (UInt32)Msg, wParam, new IntPtr(lParam)); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, IntPtr wParam, int lParam) + { + return SendMessage(hWnd, (UInt32)Msg, wParam, new IntPtr(lParam)); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, IntPtr lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, string lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] StringBuilder lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), lParam); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, int wParam, int lParam) + { + return SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), new IntPtr(lParam)); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, SciMsg Msg, IntPtr wParam, IntPtr lParam) + { + return SendMessage(hWnd, (UInt32)Msg, wParam, lParam); + } + + /// + /// You should try to avoid calling this method in your plugin code. Rather use one of the gateways such as + /// or . + /// If gateways are missing or incomplete, please help extend them and send your code to the project + /// at https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net + /// + public static IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, ref LangType lParam) + { + IntPtr outVal; + IntPtr retval = SendMessage(hWnd, (UInt32)Msg, new IntPtr(wParam), out outVal); + lParam = (LangType)outVal; + return retval; + } + + public const int MAX_PATH = 260; + + [DllImport("kernel32")] + public static extern int GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName); + + [DllImport("kernel32")] + public static extern bool WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName); + + public const int MF_BYCOMMAND = 0; + public const int MF_CHECKED = 8; + public const int MF_UNCHECKED = 0; + + [DllImport("user32")] + public static extern IntPtr GetMenu(IntPtr hWnd); + + [DllImport("user32")] + public static extern int CheckMenuItem(IntPtr hmenu, int uIDCheckItem, int uCheck); + + public const int WM_CREATE = 1; + + [DllImport("user32")] + public static extern bool ClientToScreen(IntPtr hWnd, ref Point lpPoint); + + [DllImport("kernel32")] + public static extern void OutputDebugString(string lpOutputString); + + /// + /// @see https://msdn.microsoft.com/en-us/library/windows/desktop/bb787583(v=vs.85).aspx + /// + /// + /// + /// + /// + [DllImport("user32")] + public static extern int GetScrollInfo(IntPtr hwnd, int nBar, ref ScrollInfo scrollInfo); + } +} diff --git a/WakaTime/ProcessorArchitectureHelper.cs b/WakaTime/ProcessorArchitectureHelper.cs index cf19ccd..a214c32 100644 --- a/WakaTime/ProcessorArchitectureHelper.cs +++ b/WakaTime/ProcessorArchitectureHelper.cs @@ -1,22 +1,20 @@ -using System; -using System.Diagnostics; - -namespace WakaTime -{ - internal static class ProcessorArchitectureHelper - { - private static readonly bool Is64BitProcess = IntPtr.Size == 8; - internal static bool Is64BitOperatingSystem = Is64BitProcess || InternalCheckIsWow64(); - - public static bool InternalCheckIsWow64() - { - if ((Environment.OSVersion.Version.Major != 5 || Environment.OSVersion.Version.Minor < 1) && - Environment.OSVersion.Version.Major < 6) return false; - - using (var p = Process.GetCurrentProcess()) - { - return NativeMethods.IsWow64Process(p.Handle, out var retVal) && retVal; - } - } - } -} \ No newline at end of file +using System; +using System.Diagnostics; + +namespace WakaTime +{ + internal static class ProcessorArchitectureHelper + { + private static readonly bool Is64BitProcess = IntPtr.Size == 8; + internal static bool Is64BitOperatingSystem = Is64BitProcess || InternalCheckIsWow64(); + + public static bool InternalCheckIsWow64() + { + if ((Environment.OSVersion.Version.Major != 5 || Environment.OSVersion.Version.Minor < 1) && + Environment.OSVersion.Version.Major < 6) return false; + + using (var p = Process.GetCurrentProcess()) + return NativeMethods.IsWow64Process(p.Handle, out var retVal) && retVal; + } + } +} diff --git a/WakaTime/Properties/AssemblyInfo.cs b/WakaTime/Properties/AssemblyInfo.cs index 34aade0..8790ce7 100644 --- a/WakaTime/Properties/AssemblyInfo.cs +++ b/WakaTime/Properties/AssemblyInfo.cs @@ -1,36 +1,35 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("WakaTime")] -[assembly: AssemblyDescription("WakaTime is a productivity & time tracking tool for programmers. Once the WakaTime plugin is installed, you get a dashboard with reports about your programming by time, language, project, and branch.")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("WakaTime")] -[assembly: AssemblyProduct("WakaTime")] -[assembly: AssemblyCopyright("Copyright © WakaTime 2016")] -[assembly: AssemblyTrademark("WakaTime ®")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("31492674-6fe0-485c-91f0-2e17244588ff")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("4.3.0")] -[assembly: AssemblyFileVersion("4.3.0")] +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WakaTime")] +[assembly: AssemblyDescription("WakaTime is a productivity & time tracking tool for programmers. Once the WakaTime plugin is installed, you get a dashboard with reports about your programming by time, language, project, and branch.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("WakaTime")] +[assembly: AssemblyProduct("WakaTime")] +[assembly: AssemblyCopyright("Copyright © WakaTime 2022")] +[assembly: AssemblyTrademark("WakaTime ®")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("0f9f9ac7-1922-42ec-8bb5-a1598f3d2650")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("4.3.0")] +[assembly: AssemblyFileVersion("4.3.0")] diff --git a/WakaTime/Properties/star.png b/WakaTime/Properties/star.png deleted file mode 100644 index 164d16b0ad506b2cc1b511af11d52a56310c603e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 811 zcmV+`1JwM9P)QSNfkQsrihkPj%lEk?}jWqw%hHf;4Y7t{0ke3EbQ?dHW%A}gKSbJNh{ z5eU=Bl4J*@iYicVEx4Wz9v_*yU^B=>my3T4K3K^_mpt0XN&FAgTLlbN>JmtOu-ATDyNx!boYRXBe|?X4seu=bSo$&#zQQIAJ*kxLqyp}1A- zJ##)sKKpDOzk>ll+r*!*v)BqvfTlIDQdgtQId|_)Td6*Pnp^z^X`CJv&TG8@fZ6UY zXcpiEhsBtia%Sd;8^HkPySoYucJb~;7d|`>z}R_tZZc4A=y4)Da-_`b0HRL@3dD0m z16X<)z(EDrCj){IaAw4*nf$pRRaDu?<&Dh+1}=|^{c=_e00wnHGV}!srMQQBYi;Br zw+aB5>A#D)p==tbSB0MU>r+I6VeuZ?G&mOKdOAqGb-AJzn!v~@6*B{VMDAb5SgQ(c zJ(}x%TT&nx3wA8(VIqXU>_dOC@&3(YX0jwE7Wr>2cC1PtC zUVk;hGPY%!YCk;6x#*&|+@Iz$*ILdt|20i13M`1ZsNRB*6&4lLQ;!)$ zZ^7sxCbCBFQ zsJshM`xws$s9YK5HRl;IhZ4J zu=Om#+%*GhBm+m^XE@`_utg?e4Znc1{}WvCc?8eq5gJ)U=Y>^7N7oQdtRR*sp!ebm zPG4QcnQPy0F13#H*EcXSwuaH0MI^>In6F6QD&q2;Ov-#hc&HX~@$6u7b|55&#Bv+%=+;CvO61jQY zCOwg^wr-EI@!E-Ysfbis<6d6)T8K`xR%@CEc9W5x2oTYb=!=UTTB16s&Bi_`xCW|- zYWE$fVegkcUcHla^2Rg<~PK>k?okPyQ?F+b@Yhn;+YnuKu4 z(`1oC@}$9&YI(RNDR@v0e!tx99)7`2Wg%;eSNVWo$Y~&|u?2jJa_cx63AZ0o4EP6R C>V&EQ diff --git a/WakaTime/Proxy.cs b/WakaTime/Proxy.cs new file mode 100644 index 0000000..67edd08 --- /dev/null +++ b/WakaTime/Proxy.cs @@ -0,0 +1,70 @@ +using System; +using System.Net; +using System.Text.RegularExpressions; + +namespace WakaTime +{ + public class Proxy + { + private readonly ConfigFile _config; + private readonly Logger _logger; + + public Proxy(Logger logger, string configFilepath) + { + _logger = logger; + _config = new ConfigFile(configFilepath); + } + + public WebProxy Get() + { + WebProxy proxy = null; + + try + { + var proxyStr = _config.GetSetting("proxy"); + if (string.IsNullOrEmpty(proxyStr)) + { + _logger.Debug("No proxy will be used. It's not set."); + + return null; + } + + var proxyRegex = new Regex(@"\s*((?https?|socks5):\/\/)?(([^\s:]+):([^\s:]+)@)?([^\s:]+):(\d+)\s*"); + var match = proxyRegex.Match(proxyStr); + + if (match.Success) + { + var protocol = match.Groups["protocol"].Success ? match.Groups["protocol"].Value : null; + var address = match.Groups[5].Value; + var port = match.Groups[6].Value; + + proxy = new WebProxy( + protocol != null ? $"{protocol}://{address}:{port}" : $"{address}:{port}", + true, null); + + if (match.Groups["3"].Success) + { + var username = match.Groups[3].Value; + var password = match.Groups[4].Value; + + proxy.Credentials = new NetworkCredential(username, password); + } + + _logger.Debug("A proxy with authentication will be used."); + + return proxy; + } + + _logger.Debug("No proxy will be used. It's either not set or badly formatted."); + } + catch (Exception ex) + { + _logger.Error( + "Exception while parsing the proxy string from WakaTime config file. No proxy will be used.", + ex); + } + + return proxy; + } + } +} diff --git a/WakaTime/Resources/wakatime-120.png b/WakaTime/Resources/wakatime-120.png deleted file mode 100644 index 0cee47f1ac5dab6feb9691a84d7c8154a6333a9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1306 zcmbu9>pv3;0EU1*y@D2f>=!`& z#Wrtzs#=tLU;x#7(f=m`c-F?nJ@iNrB^Y31Kf9f3Jk&(5EPyx*vWV}}x*f+G9s&Rc zseWD_)Yw7M-htHWHD=zUyfwgug_;=6P~J>7e&YDlA^cMZJl??iO@3GR4ij

RH-- zhfCLDn$3FL5t1Qxqk^+aukv)8o;Im5O0)}gKwp>|e=wVSx=Ur{!$@j}=t`fP3X1aQ z>k?er8|0xP#9AH++}m3@3?+Dz&SqRW2}_z2Dl>cH+D2fpGOID6Ss79h6Anz^=Z5yI zf`5Udl6irD#_fF8NrA<|{lON<39(sWFmwlt(yv_Jg@`Y|McXUw1J!#Lk~zs&cS~!T z{?NPS7q|RtS-TsMlK9SODkp6cOcp3c5|rJ(RsB=WzMt|p`K5Ib@nl?0ef20Rh)J@; z`qkfNhavSY1@3!&o)$LyIulVxJ))(4B(ui!!obcR!E4CP2%8gDI!6}u)3@)Q?KlSA z%}yF-e(-X`PF_tSv5o2EK5l~+@uQ? zmzqc|uM8qv&lwV-!gdT-FZ8p&A-BwOCzjDlLST!0CQ8DsCI>*xol9|2R!;8n$J5DV z5oWfh__zusE#LQB_)*j_u?is{+J&LETqv;y#&$*YKz2aNKC~+ z{$oOpCGMowr?l3_+=kKrPOzU3@YW zCbf<-1?|Rueh)gxRx)1mcVKU8obE#OoO%IG<>4L@9IMj#?(ZS~G+tLTYQF$TGvPd9I~SSorHV7pMqJ-LA0)ncOY^hm{4$Q64g=T05gUmDNA z#VFykce9zNLKICvww?Hdf{zGwHBDqCf{7JIqZm9vAU4M1_TelBcpE=x(b{|nhahf^Sp0hy{%1ge}udZPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0X0cPK~y+Tm6AP51VIo+M?nxp@ffm!24bY4 z!FmAi;Q_qB3L2Pbv?2z20CPd(1;Gml8tf6)UH{&jnQCTmd(jUbRCQNXS9e!2MeA?^ zPcVXac!o3Bgsc|e6h7cP!xvn@BD7@k9T?<^=dcTFHQFY+XUqdEL6R-IF@!A_GIGxt zWBV>B?`+#vpOqZihB18Bb~@d*XK5Y|Dzl7DUHIBM-c!v%w=!Egg2T!zW6gQd@vC%v ztk4zggT-VIZfaW@YmV1QFWW4z4EJye7W36tAk-@0km$q}LLE4UUTrrOS9sHL!gT!S zzsgv1u5~uR3H#4CPQaYhbyRdn%D>IXy%?lh7edbVBe>y^ Exception == null; - - internal Exception Exception { get; private set; } - - internal void Run() - { - try - { - var procInfo = new ProcessStartInfo - { - UseShellExecute = false, - RedirectStandardError = _captureOutput, - RedirectStandardOutput = _captureOutput, - RedirectStandardInput = _stdin != null, - FileName = _program, - CreateNoWindow = true, - Arguments = GetArgumentString() - }; - - using (var process = Process.Start(procInfo)) - { - - if (_stdin != null) - { - process?.StandardInput.WriteLine($"{_stdin}\n"); - } - - if (_captureOutput) - { - var stdOut = new StringBuilder(); - var stdErr = new StringBuilder(); - - while (process != null && !process.HasExited) - { - stdOut.Append(process.StandardOutput.ReadToEnd()); - stdErr.Append(process.StandardError.ReadToEnd()); - } - - if (process != null) - { - stdOut.Append(process.StandardOutput.ReadToEnd()); - stdErr.Append(process.StandardError.ReadToEnd()); - } - - Output = stdOut.ToString().Trim(Environment.NewLine.ToCharArray()).Trim('\r', '\n'); - Error = stdErr.ToString().Trim(Environment.NewLine.ToCharArray()).Trim('\r', '\n'); - } - - Exception = null; - } - } - catch (Exception ex) - { - Output = null; - Error = ex.Message; - Exception = ex; - } - } - - private string GetArgumentString() - { - var args = _arguments.Aggregate(string.Empty, (current, arg) => current + "\"" + arg + "\" "); - return args.TrimEnd(' '); - } - } -} +using System; +using System.Diagnostics; +using System.Linq; +using System.Text; + +namespace WakaTime +{ + internal class RunProcess + { + private readonly string _program; + private readonly string _arguments; + private string _stdin; + private bool _captureOutput; + + internal RunProcess(string program, params string[] arguments) + { + _program = program; + _arguments = arguments + .Aggregate(string.Empty, (current, arg) => current + "\"" + arg + "\" ") + .TrimEnd(' '); + _captureOutput = true; + } + + internal void RunInBackground() + { + _captureOutput = false; + Run(); + } + + internal void RunInBackground(string stdin) + { + _captureOutput = false; + _stdin = stdin; + Run(); + } + + internal void Run(string stdin) + { + _stdin = stdin; + Run(); + } + + internal string Output { get; private set; } + + internal string Error { get; private set; } + + internal bool Success => Exception == null; + + private Exception Exception { get; set; } + + internal void Run() + { + try + { + var procInfo = new ProcessStartInfo + { + UseShellExecute = false, + RedirectStandardError = _captureOutput, + RedirectStandardOutput = _captureOutput, + RedirectStandardInput = _stdin != null, + FileName = _program, + CreateNoWindow = true, + Arguments = _arguments, + }; + + using (var process = Process.Start(procInfo)) + { + // run background process at lower priority to prevent lagging GUI + try + { + if (process != null) process.PriorityClass = ProcessPriorityClass.BelowNormal; + } + catch (Exception) { /* Might fail if not Admin */ } + + if (_stdin != null) + { + process?.StandardInput.WriteLine($"{_stdin}\n"); + } + + if (_captureOutput) + { + var stdOut = new StringBuilder(); + var stdErr = new StringBuilder(); + + if (process != null) + { + process.OutputDataReceived += (s, e) => stdOut.Append(e.Data); + process.ErrorDataReceived += (s, e) => stdErr.Append(e.Data); + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + process.WaitForExit(1000 * 60 * 10); // 10 minutes + } + + Output = stdOut.ToString().Trim(Environment.NewLine.ToCharArray()).Trim('\r', '\n'); + Error = stdErr.ToString().Trim(Environment.NewLine.ToCharArray()).Trim('\r', '\n'); + } + + Exception = null; + } + } + catch (Exception ex) + { + Output = null; + Error = ex.Message; + Exception = ex; + } + } + } +} diff --git a/WakaTime/WakaTime.cs b/WakaTime/WakaTime.cs new file mode 100644 index 0000000..49fa9b3 --- /dev/null +++ b/WakaTime/WakaTime.cs @@ -0,0 +1,207 @@ +using Kbg.NppPluginNET.PluginInfrastructure; +using System; +using System.Collections.Concurrent; +using System.Collections.ObjectModel; +using System.Net; +using System.Threading.Tasks; +using System.Timers; + +namespace WakaTime +{ + public class WakaTime : IDisposable + { + private readonly Metadata _metadata; + private readonly CliParameters _cliParameters; + private readonly Dependencies _dependencies; + private readonly Timer _timer; + private readonly ConcurrentQueue HeartbeatQueue; + + private string _lastFile; + private DateTime _lastHeartbeat; + private IScintillaGateway ScintillaGateway; + + internal readonly ConfigFile Config; + + public Logger Logger { get; } + + public WakaTime(Metadata metadata, Logger logger) + { + if (metadata is null) + throw new ArgumentNullException("metadata"); + + if (logger is null) + throw new ArgumentNullException("logger"); + + Logger = logger; + Config = new ConfigFile(Dependencies.GetConfigFilePath()); + HeartbeatQueue = new ConcurrentQueue(); + + _metadata = metadata; + _cliParameters = new CliParameters + { + Key = Config.GetSetting("api_key"), + Plugin = + $"{_metadata.EditorName}/{_metadata.EditorVersion} {_metadata.PluginName}/{_metadata.PluginVersion}" + }; + _dependencies = new Dependencies(logger, Config); + _timer = new Timer(10000); + _lastHeartbeat = DateTime.UtcNow.AddMinutes(-3); + } + + public void Initialize() + { + Logger.Info($"Initializing WakaTime v{_metadata.PluginVersion}"); + + try + { + _dependencies.CheckAndInstallCli(); + + ScintillaGateway = new ScintillaGateway(PluginBase.GetCurrentScintilla()); + + _timer.Elapsed += new ElapsedEventHandler(ProcessHeartbeats); + _timer.Start(); + + Logger.Info($"Finished initializing WakaTime v{_metadata.PluginVersion}"); + } + catch (WebException ex) + { + Logger.Error($"Are you behind a proxy? Try setting a proxy in WakaTime Settings with format https://user:pass@host:port", ex); + } + catch (Exception ex) + { + Logger.Error($"Error installing dependencies", ex); + } + } + + public void HandleActivity(string currentFile, bool isWrite) + { + if (currentFile == null) + return; + + var now = DateTime.UtcNow; + + if (!isWrite && _lastFile != null && !EnoughTimePassed(now) && currentFile.Equals(_lastFile)) + return; + + _lastFile = currentFile; + _lastHeartbeat = now; + + AppendHeartbeat(currentFile, isWrite, now); + } + + private void AppendHeartbeat(string fileName, bool isWrite, DateTime time) + { + var h = new Heartbeat + { + Entity = fileName, + LineNumber = ScintillaGateway.GetCurrentLineNumber(), + Lines = ScintillaGateway.GetLineCount(), + Timestamp = ToUnixEpoch(time), + IsWrite = isWrite + }; + + HeartbeatQueue.Enqueue(h); + } + + private bool EnoughTimePassed(DateTime now) + { + return _lastHeartbeat < now.AddMinutes(Constants.HeartbeatFrequency * -1); + } + + private static string ToUnixEpoch(DateTime date) + { + var epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + var timestamp = date - epoch; + var seconds = Convert.ToInt64(Math.Floor(timestamp.TotalSeconds)); + var milliseconds = timestamp.ToString("ffffff"); + return $"{seconds}.{milliseconds}"; + } + + private void ProcessHeartbeats(object sender, ElapsedEventArgs e) + { + _ = Task.Run(() => + { + // ReSharper disable once ConvertClosureToMethodGroup + ProcessHeartbeats(); + }); + } + + private void ProcessHeartbeats() + { + try + { + var binary = Dependencies.GetCliLocation(); + + // get first heartbeat from queue + var gotOne = HeartbeatQueue.TryDequeue(out var heartbeat); + if (!gotOne) + return; + + // pop all extra heartbeats from queue + var extraHeartbeats = new Collection(); + while (HeartbeatQueue.TryDequeue(out var h)) + extraHeartbeats.Add(h); + + var hasExtraHeartbeats = extraHeartbeats.Count > 0; + + _cliParameters.File = heartbeat.Entity; + _cliParameters.Lines = heartbeat.Lines.ToString(); + _cliParameters.LineNumber = heartbeat.LineNumber.ToString(); + _cliParameters.Time = heartbeat.Timestamp; + _cliParameters.IsWrite = heartbeat.IsWrite; + _cliParameters.HasExtraHeartbeats = hasExtraHeartbeats; + + string extraHeartbeatsString = null; + if (hasExtraHeartbeats) + extraHeartbeatsString = JSONSerializer.SerializeArrayHeartbeat(extraHeartbeats); + + var process = new RunProcess(binary, _cliParameters.ToArray()); + + if (Config.GetSettingAsBoolean("debug")) + { + Logger.Debug( + $"[\"{binary}\", \"{string.Join("\", \"", _cliParameters.ToArray(true))}\"]"); + + process.Run(extraHeartbeatsString); + + if (!string.IsNullOrEmpty(process.Output)) + Logger.Debug(process.Output); + + if (!string.IsNullOrEmpty(process.Error)) + Logger.Debug(process.Error); + } + else + process.RunInBackground(extraHeartbeatsString); + + if (process.Success) return; + + Logger.Error("Could not send heartbeat."); + + if (!string.IsNullOrEmpty(process.Output)) + Logger.Error(process.Output); + + if (!string.IsNullOrEmpty(process.Error)) + Logger.Error(process.Error); + } + catch (Exception ex) + { + Logger.Error("Error processing heartbeat(s).", ex); + } + } + + public void Dispose() + { + if (_timer != null) + { + _timer.Stop(); + _timer.Elapsed -= ProcessHeartbeats; + _timer.Dispose(); + } + + Logger?.Close(); + + // make sure the queue is empty + ProcessHeartbeats(); + } + } +} diff --git a/WakaTime/WakaTime.csproj b/WakaTime/WakaTime.csproj index 711498e..79b8688 100644 --- a/WakaTime/WakaTime.csproj +++ b/WakaTime/WakaTime.csproj @@ -1,225 +1,245 @@ - - - - - - Debug - x86 - 2.0 - {E56F6E12-089C-40ED-BCFD-923E5FA121A1} - Library - Properties - WakaTime - WakaTime - bin\Debug\ - v4.5 - - - - - 3.5 - - - - - - true - DEBUG;TRACE - full - prompt - false - bin\Debug - AnyCPU - true - false - - - - - true - bin\Release - none - prompt - AnyCPU - true - false - false - true - On - - - true - bin\x64\Debug\ - DEBUG;TRACE - true - full - x64 - prompt - MinimumRecommendedRules.ruleset - - - bin\x64\Release\ - - - true - true - none - x64 - prompt - MinimumRecommendedRules.ruleset - false - - - true - bin\x86\Debug\ - DEBUG;TRACE - true - full - x86 - prompt - MinimumRecommendedRules.ruleset - - - bin\x86\Release\ - true - true - x86 - prompt - MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - ApiKeyForm.cs - - - Form - - - SettingsForm.cs - - - True - True - Resources.resx - - - - - - - - ApiKeyForm.cs - - - SettingsForm.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - $([System.IO.File]::ReadAllText('Properties\AssemblyInfo.cs')) - ^\s*\[assembly: AssemblyVersion\(\D*(\d+)\.(\d+)\.(\d+) - $([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern), System.Text.RegularExpressions.RegexOptions.Multiline).Groups[1].Value) - $([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern), System.Text.RegularExpressions.RegexOptions.Multiline).Groups[2].Value) - $([System.Text.RegularExpressions.Regex]::Match($(In), $(Pattern), System.Text.RegularExpressions.RegexOptions.Multiline).Groups[3].Value) - - - - - - - - - - %(ParentFolder.Fullpath) - $(AssemblyName)-$(AssemblyVersionMajor).$(AssemblyVersionMinor).$(AssemblyVersionBuild)-$(Platform).zip - %(OutputDirectory.Fullpath) - - - - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - + + + + Debug + x86 + {0F9F9AC7-1922-42EC-8BB5-A1598F3D2650} + Library + Properties + WakaTime + WakaTime + v4.8 + 512 + true + + + + CC6D86D3-EE13-465B-A98B-CB7E1E7972AA + DllExport.dll + WakaTime + true + false + Auto + 1 + false + false + false + false + 30000 + 2 + 0 + 0 + 0 + + + true + full + false + bin\x86\Debug\ + DEBUG;TRACE + prompt + 4 + true + x86 + + + pdbonly + true + bin\x86\Release\ + TRACE + prompt + 4 + true + x86 + + + true + bin\x64\Debug\ + DEBUG;TRACE + true + full + x64 + 7.3 + prompt + + + bin\x64\Release\ + TRACE + true + true + pdbonly + x64 + 7.3 + prompt + + + + + + + + + + + + + + + + + + + + + + + + + Form + + + ApiKeyForm.cs + + + Form + + + SettingsForm.cs + + + + + True + True + ImageResources.resx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ApiKeyForm.cs + + + SettingsForm.cs + + + ResXFileCodeGenerator + ImageResources.Designer.cs + + + + + 1.7.4 + false + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)WakaTime\packages\DllExport.1.7.4\gcache\$(DllExportMetaXBase)\$(DllExportNamespace)\$(DllExportMetaLibName) + False + False + + + + + + \ No newline at end of file diff --git a/WakaTime/WakaTimePackage.cs b/WakaTime/WakaTimePackage.cs index 5be6801..c993486 100644 --- a/WakaTime/WakaTimePackage.cs +++ b/WakaTime/WakaTimePackage.cs @@ -1,356 +1,140 @@ -using System; -using System.Drawing; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Text; -using System.Text.RegularExpressions; -using System.Windows.Forms; -using System.Net; -using Task = System.Threading.Tasks.Task; -using System.Collections.Concurrent; -using System.Collections; -using System.Timers; -using System.Web.Script.Serialization; -using Kbg.NppPluginNET.PluginInfrastructure; - -namespace WakaTime -{ - internal class WakaTimePackage - { - #region Properties - internal const string PluginName = Constants.PluginName; - - private static int _idMyDlg = -1; - private static readonly Bitmap TbBmp = Properties.Resources.wakatime; - - private static readonly PythonCliParameters PythonCliParameters = new PythonCliParameters(); - internal static ConfigFile Config; - private static Forms.SettingsForm _settingsForm; - private static string _lastFile; - private static DateTime _lastHeartbeat = DateTime.UtcNow.AddMinutes(-3); - private const int HeartbeatFrequency = 2; // minutes - - private static readonly ConcurrentQueue HeartbeatQueue = new ConcurrentQueue(); - private static System.Timers.Timer _timer = new System.Timers.Timer(); - #endregion - - internal static void CommandMenuInit() - { - // must add menu item in foreground thread - PluginBase.SetCommand(0, "Wakatime Settings", SettingsPopup, new ShortcutKey(false, false, false, Keys.None)); - _idMyDlg = 0; - - // finish initializing in background thread - Task.Run(() => - { - InitializeAsync(); - }); - } - - private static void InitializeAsync() - { - try - { - Logger.Info($"Initializing WakaTime v{Constants.PluginVersion}"); - - // Settings Form - _settingsForm = new Forms.SettingsForm(); - _settingsForm.ConfigSaved += SettingsFormOnConfigSaved; - - // Load config file - Config = new ConfigFile(); - - // Prompt for api key if not already set - if (string.IsNullOrEmpty(Config.ApiKey)) - PromptApiKey(); - - try - { - // Make sure python is installed - if (!Dependencies.IsPythonInstalled()) - { - Dependencies.DownloadAndInstallPython(); - } - - if (!Dependencies.DoesCliExist() || !Dependencies.IsCliUpToDate()) - { - Dependencies.DownloadAndInstallCli(); - } - } - catch (WebException ex) - { - Logger.Error("Are you behind a proxy? Try setting a proxy in WakaTime Settings with format https://user:pass@host:port. Exception Traceback:", ex); - } - catch (Exception ex) - { - Logger.Error("Error detecting dependencies. Exception Traceback:", ex); - } - - // setup timer to process queued heartbeats after 10 second delay - _timer.Interval = 10 * 1000; - _timer.AutoReset = false; - _timer.Elapsed += ProcessHeartbeats; - - Logger.Info($"Finished initializing WakaTime v{Constants.PluginVersion}"); - } - catch (Exception ex) - { - Logger.Error("Error Initializing WakaTime", ex); - } - } - - internal static void SetToolBarIcon() - { - var tbIcons = new toolbarIcons { hToolbarBmp = TbBmp.GetHbitmap() }; - var pTbIcons = Marshal.AllocHGlobal(Marshal.SizeOf(tbIcons)); - Marshal.StructureToPtr(tbIcons, pTbIcons, false); - Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_ADDTOOLBARICON, - PluginBase._funcItems.Items[_idMyDlg]._cmdID, pTbIcons); - Marshal.FreeHGlobal(pTbIcons); - } - - public static void OnNotification(ScNotification notification) - { - switch (notification.Header.Code) - { - case (uint)NppMsg.NPPN_FILESAVED: - HandleActivity(GetCurrentFile(), true); - break; - case (uint)SciMsg.SCN_MODIFIED when (notification.ModificationType & (int)SciMsg.SC_MOD_INSERTTEXT) == (int)SciMsg.SC_MOD_INSERTTEXT: - HandleActivity(GetCurrentFile(), false); - break; - } - } - - public static void HandleActivity(string currentFile, bool isWrite) - { - try - { - if (currentFile == null) - return; - - var now = DateTime.UtcNow; - - if (!isWrite && _lastFile != null && !EnoughTimePassed(now) && currentFile.Equals(_lastFile)) - return; - - _lastFile = currentFile; - _lastHeartbeat = now; - - AppendHeartbeat(currentFile, isWrite, now); - } - catch (Exception ex) - { - Logger.Error("Error appending heartbeat", ex); - } - } - - private static void AppendHeartbeat(string fileName, bool isWrite, DateTime time) - { - Task.Run(() => - { - try - { - var h = new Heartbeat - { - entity = fileName, - timestamp = ToUnixEpoch(time), - is_write = isWrite - }; - HeartbeatQueue.Enqueue(h); - } - catch (Exception ex) - { - Logger.Error("Error appending heartbeat", ex); - } - if (_timer != null) - _timer.Start(); // process heartbeats after 10 second delay - }); - } - - private static void ProcessHeartbeats(object sender, ElapsedEventArgs e) - { - Task.Run(() => - { - try - { - ProcessHeartbeats(); - } - catch (Exception ex) - { - Logger.Error("Error processing heartbeats", ex); - } - }); - } - - private static void ProcessHeartbeats() - { - var pythonBinary = Dependencies.GetPython(); - Heartbeat h; - if (pythonBinary != null) - { - // get first heartbeat from queue - var gotOne = HeartbeatQueue.TryDequeue(out var heartbeat); - if (!gotOne) - return; - - // remove all extra heartbeats from queue - var extraHeartbeats = new ArrayList(); - while (HeartbeatQueue.TryDequeue(out h)) - extraHeartbeats.Add(new Heartbeat(h)); - var hasExtraHeartbeats = extraHeartbeats.Count > 0; - - PythonCliParameters.Key = Config.ApiKey; - PythonCliParameters.Plugin = - $"{Constants.EditorName}/{Constants.EditorVersion} {Constants.PluginKey}/{Constants.PluginVersion}"; - PythonCliParameters.File = heartbeat.entity; - PythonCliParameters.Time = heartbeat.timestamp; - PythonCliParameters.IsWrite = heartbeat.is_write; - PythonCliParameters.HasExtraHeartbeats = hasExtraHeartbeats; - - string extraHeartbeatsJson = null; - if (hasExtraHeartbeats) - extraHeartbeatsJson = new JavaScriptSerializer().Serialize(extraHeartbeats); - - var process = new RunProcess(pythonBinary, PythonCliParameters.ToArray()); - if (Config.Debug) - { - Logger.Debug( - $"[\"{pythonBinary}\", \"{string.Join("\", \"", PythonCliParameters.ToArray(true))}\"]"); - process.Run(extraHeartbeatsJson); - - if (!string.IsNullOrEmpty(process.Output)) - Logger.Debug(process.Output); - - if (!string.IsNullOrEmpty(process.Error)) - Logger.Debug(process.Error); - } - else - process.RunInBackground(extraHeartbeatsJson); - - if (!process.Success) - { - Logger.Error("Could not send heartbeat."); - if (!string.IsNullOrEmpty(process.Output)) - Logger.Error(process.Output); - - if (!string.IsNullOrEmpty(process.Error)) - Logger.Error(process.Error); - } - } - else - Logger.Error("Could not send heartbeat because python is not installed"); - } - - public static string GetCurrentFile() - { - var currentFile = new StringBuilder(Win32.MAX_PATH); - return - (int)Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_GETFULLCURRENTPATH, 0, currentFile) != -1 - ? currentFile.ToString() - : null; - } - - public static bool EnoughTimePassed(DateTime now) - { - return _lastHeartbeat < now.AddMinutes(-1 * HeartbeatFrequency); - } - - private static void SettingsFormOnConfigSaved(object sender, EventArgs eventArgs) - { - Config.Read(); - } - - private static void PromptApiKey() - { - Logger.Info("Please input your api key into the wakatime window."); - var form = new Forms.ApiKeyForm(); - form.ShowDialog(); - } - - private static void SettingsPopup() - { - _settingsForm.ShowDialog(); - } - - private static string ToUnixEpoch(DateTime date) - { - var epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); - var timestamp = date - epoch; - var seconds = Convert.ToInt64(Math.Floor(timestamp.TotalSeconds)); - var milliseconds = timestamp.ToString("ffffff"); - return $"{seconds}.{milliseconds}"; - } - - public static WebProxy GetProxy() - { - WebProxy proxy = null; - - try - { - var proxyStr = Config.Proxy; - - // Regex that matches proxy address with authentication - var regProxyWithAuth = new Regex(@"\s*(https?:\/\/)?([^\s:]+):([^\s:]+)@([^\s:]+):(\d+)\s*"); - var match = regProxyWithAuth.Match(proxyStr); - - if (match.Success) - { - var username = match.Groups[2].Value; - var password = match.Groups[3].Value; - var address = match.Groups[4].Value; - var port = match.Groups[5].Value; - - var credentials = new NetworkCredential(username, password); - proxy = new WebProxy(string.Join(":", new string[] { address, port }), true, null, credentials); - - Logger.Debug("A proxy with authentication will be used."); - return proxy; - } - - // Regex that matches proxy address and port(no authentication) - var regProxy = new Regex(@"\s*(https?:\/\/)?([^\s@]+):(\d+)\s*"); - match = regProxy.Match(proxyStr); - - if (match.Success) - { - var address = match.Groups[2].Value; - var port = int.Parse(match.Groups[3].Value); - - proxy = new WebProxy(address, port); - - Logger.Debug("A proxy will be used."); - return proxy; - } - - Logger.Debug("No proxy will be used. It's either not set or badly formatted."); - } - catch (Exception ex) - { - Logger.Error("Exception while parsing the proxy string from WakaTime config file. No proxy will be used.", ex); - } - - return proxy; - } - - internal static class CoreAssembly - { - private static readonly Assembly Reference = typeof(CoreAssembly).Assembly; - public static readonly Version Version = Reference.GetName().Version; - } - - internal static void PluginCleanUp() - { - if (_timer != null) - { - _timer.Stop(); - _timer.Elapsed -= ProcessHeartbeats; - _timer.Dispose(); - _timer = null; - - // make sure the queue is empty - ProcessHeartbeats(); - } - } - } -} +using Kbg.NppPluginNET.PluginInfrastructure; +using System; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; +using WakaTime.Forms; + +namespace WakaTime +{ + internal class WakaTimePackage + { + private static WakaTime _wakaTime; + private static SettingsForm _settingsForm; + + private static void Initialize() + { + var metadata = new Metadata + { + EditorName = "notepadpp", + PluginName = "notepadpp-wakatime", + EditorVersion = EditorVersion, + PluginVersion = PluginVersion + }; + + _wakaTime = new WakaTime(metadata, new Logger(Dependencies.GetConfigFilePath())); + _wakaTime.Initialize(); + + _settingsForm = new SettingsForm(_wakaTime.Config, _wakaTime.Logger); + + if (string.IsNullOrEmpty(_wakaTime.Config.GetSetting("api_key"))) + PromptApiKey(); + } + + internal static void CommandMenuInit() + { + PluginBase.SetCommand(0, "Settings", SettingsPopup, new ShortcutKey(false, false, false, Keys.None)); + } + + private static void SettingsPopup() + { + _settingsForm.ShowDialog(); + } + + private static void PromptApiKey() + { + var form = new ApiKeyForm(_wakaTime.Config, _wakaTime.Logger); + form.ShowDialog(); + } + + private static string GetCurrentFile() + { + var currentFile = new StringBuilder(Win32.MAX_PATH); + return + (int)Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_GETFULLCURRENTPATH, 0, currentFile) != -1 + ? currentFile.ToString() + : null; + } + + public static void OnNppNotification(ScNotification nc, IntPtr ptrPluginName) + { + switch (nc.Header.Code) + { + case (uint)NppMsg.NPPN_TBMODIFICATION: + PluginBase._funcItems.RefreshItems(); + SetToolBarIcon(); + return; + case (uint)NppMsg.NPPN_READY: + Initialize(); + return; + case (uint)NppMsg.NPPN_FILESAVED: + _wakaTime.HandleActivity(GetCurrentFile(), true); + return; + case (uint)SciMsg.SCN_MODIFIED when (nc.ModificationType & (int)SciMsg.SC_MOD_INSERTTEXT) == (int)SciMsg.SC_MOD_INSERTTEXT: + _wakaTime.HandleActivity(GetCurrentFile(), false); + return; + case (uint)NppMsg.NPPN_SHUTDOWN: + ShutDown(); + Marshal.FreeHGlobal(ptrPluginName); + return; + } + } + + internal static void SetToolBarIcon() + { + var tbIcons = new toolbarIcons { hToolbarBmp = ImageResources.WakaTime.GetHbitmap() }; + var pTbIcons = Marshal.AllocHGlobal(Marshal.SizeOf(tbIcons)); + Marshal.StructureToPtr(tbIcons, pTbIcons, false); + Win32.SendMessage( + PluginBase.nppData._nppHandle, + (uint)NppMsg.NPPM_ADDTOOLBARICON, + PluginBase._funcItems.Items[0]._cmdID, + pTbIcons); + Marshal.FreeHGlobal(pTbIcons); + } + + private static string EditorVersion + { + get + { + var msgPtr = Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_GETNPPVERSION, 0, 0); + + try + { + var num = Convert.ToInt32(msgPtr.ToString()); + var high = num >> 16; + var low = num & 0xFFFF; + + return $"{high}.{string.Join(".", low.ToString().ToCharArray())}"; + } + catch + { + return "0"; + } + } + } + + private static void ShutDown() + { + _wakaTime?.Dispose(); + } + + private static string PluginVersion + { + get + { + var version = CoreAssembly.Version; + + return $"{version.Major}.{version.Minor}.{version.Build}"; + } + } + + + internal static class CoreAssembly + { + private static readonly Assembly Reference = typeof(CoreAssembly).Assembly; + public static readonly Version Version = Reference.GetName().Version; + } + } +} diff --git a/WakaTime/packages.config b/WakaTime/packages.config deleted file mode 100644 index 4d994f1..0000000 --- a/WakaTime/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/WakaTime/packages/DllExport.1.7.4/.gitattributes b/WakaTime/packages/DllExport.1.7.4/.gitattributes new file mode 100644 index 0000000..ae6dae6 --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/.gitattributes @@ -0,0 +1,7 @@ + +# Our batch files requires CRLF for correct work. +# https://github.com/3F/hMSBuild/issues/2 + +*.bat text eol=crlf +*.cmd text eol=crlf +*.tpl text eol=crlf \ No newline at end of file diff --git a/WakaTime/packages/DllExport.1.7.4/3rd-party.txt b/WakaTime/packages/DllExport.1.7.4/3rd-party.txt new file mode 100644 index 0000000..6d83cb7 --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/3rd-party.txt @@ -0,0 +1,59 @@ +DllExport - https://github.com/3F/DllExport +- - - - - - - - - - - - - - - - - - - - - - + +# Third-party software components + + ## DllExport project includes: + + ### CoreCLR ILAsm & ILDasm + + * https://github.com/3F/coreclr + + ### Mono.Cecil + + * https://github.com/jbevain/cecil + + ### MvSln + + * https://github.com/3F/MvsSln + + ### Conari + + * https://github.com/3F/Conari + + ### GetNuTool + hMSBuild + + As the main core for new manager + and helpers for modern SDK-based projects. + + * https://github.com/3F/GetNuTool + * https://github.com/3F/hMSBuild + + + ## Dev Dependencies includes the following tools for src: + + * vsSolutionBuildEvent + https://github.com/3F/vsSolutionBuildEvent + + * MSTest Framework + https://github.com/microsoft/testfx + + * hMSBuild + https://github.com/3F/hMSBuild + + * GetNuTool + https://github.com/3F/GetNuTool + + + ## Graphics + + ### The Visual Studio image library + + (Visual Studio 2017; 28 November 2017) + Over 1,000 images can be used to create applications that look visually consistent with Microsoft software: + https://docs.microsoft.com/en-us/visualstudio/designers/the-visual-studio-image-library?view=vs-2017 + + License Terms: + + * ./Resources/vsico/Visual Studio 2017 Image Library EULA.RTF + https://download.microsoft.com/download/0/6/0/0607D8EA-9BB7-440B-A36A-A24EB8C9C67E/Visual%20Studio%202017%20Image%20Library%20EULA.RTF diff --git a/WakaTime/packages/DllExport.1.7.4/DllExport.bat b/WakaTime/packages/DllExport.1.7.4/DllExport.bat new file mode 100644 index 0000000..c62293f --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/DllExport.bat @@ -0,0 +1,509 @@ +@echo off +:: Copyright (c) 2016-2021 Denis Kuzmin [x-3F@outlook.com] github/3F +:: https://github.com/3F/DllExport +if "%~1"=="/?" goto bq +set "aa=%~dpnx0" +set ab=%* +set ac=%* +if defined ab ( +if defined __p_call ( +set ac=%ac:^^=^% +) else ( +set ab=%ab:^=^^% +) +) +set wMgrArgs=%ac% +set ad=%ab:!=^!% +setlocal enableDelayedExpansion +set "ae=^" +set "ad=!ad:%%=%%%%!" +set "ad=!ad:&=%%ae%%&!" +set "af=1.7.4" +set "wAction=Configure" +set "ag=DllExport" +set "ah=tools/net.r_eg.DllExport.Wizard.targets" +set "ai=packages" +set "aj=https://www.nuget.org/api/v2/package/" +set "ak=build_info.txt" +set "al=!aa!" +set "wRootPath=!cd!" +set /a wDxpOpt=0 +set "am=" +set "an=" +set "ao=" +set "ap=" +set "aq=" +set "ar=" +set "as=" +set "at=" +set "au=" +set "av=" +set /a aw=0 +if not defined ab ( +if defined wAction goto br +goto bq +) +call :bs bk !ad! bl +goto bt +:bq +echo. +@echo .NET DllExport v1.7.4.29858+c1cc52f +@echo Copyright (c) 2009-2015 Robert Giesecke +@echo Copyright (c) 2016-2021 Denis Kuzmin ^ github/3F +echo. +echo MIT License +@echo https://github.com/3F/DllExport +echo Based on hMSBuild, MvsSln, +GetNuTool: https://github.com/3F +echo. +@echo. +@echo Usage: DllExport [args to DllExport] [args to GetNuTool] [args to hMSBuild] +echo ------ +echo. +echo Arguments +echo --------- +echo -action {type} - Specified action for Wizard. Where {type}: +echo * Configure - To configure DllExport for specific projects. +echo * Update - To update pkg reference for already configured projects. +echo * Restore - To restore configured DllExport. +echo * Export - To export configured projects data. +echo * Recover - To re-configure projects via predefined/exported data. +echo * Unset - To unset all data from specified projects. +echo * Upgrade - Aggregates an Update action with additions for upgrading. +echo. +echo -sln-dir {path} - Path to directory with .sln files to be processed. +echo -sln-file {path} - Optional predefined .sln file to be processed. +echo -metalib {path} - Relative path to meta library. +echo -metacor {path} - Relative path to meta core library. +echo -dxp-target {path} - Relative path to entrypoint wrapper of the main core. +echo -dxp-version {num} - Specific version of DllExport. Where {num}: +echo * Versions: 1.7.3 ... +echo * Keywords: +echo `actual` - Unspecified local/latest remote version; +echo ( Only if you know what you are doing ) +echo. +echo -msb {path} - Full path to specific msbuild. +echo -hMSBuild {args} - Access to hMSBuild tool (packed) https://github.com/3F/hMSBuild +echo -packages {path} - A common directory for packages. +echo -server {url} - Url for searching remote packages. +echo -proxy {cfg} - To use proxy. The format: [usr[:pwd]@]host[:port] +echo -pkg-link {uri} - Direct link to package from the source via specified URI. +echo -force - Aggressive behavior, e.g. like removing pkg when updating. +echo -no-mgr - Do not use %~nx0 for automatic restore the remote package. +echo -mgr-up - Updates %~nx0 to version from '-dxp-version'. +echo -wz-target {path} - Relative path to entrypoint wrapper of the main wizard. +echo -pe-exp-list {module} - To list all available exports from PE32/PE32+ module. +echo -eng - Try to use english language for all build messages. +echo -GetNuTool {args} - Access to GetNuTool (integrated) https://github.com/3F/GetNuTool +echo -debug - To show additional information. +echo -version - Displays version for which (together with) it was compiled. +echo -build-info - Displays actual build information from selected DllExport. +echo -help - Displays this help. Aliases: -help -h +echo. +echo Flags +echo ----- +echo __p_call - To use the call-type logic when invoking %~nx0 +echo. +echo Samples +echo ------- +echo DllExport -action Configure -force -pkg-link http://host/v1.7.3.nupkg +echo DllExport -action Restore -sln-file "Conari.sln" +echo DllExport -proxy guest:1234@10.0.2.15:7428 -action Configure +echo. +echo DllExport -mgr-up -dxp-version 1.7.3 +echo DllExport -action Upgrade -dxp-version 1.7.3 +echo. +echo DllExport -GetNuTool /p:ngpackages="Conari;regXwild" +echo DllExport -pe-exp-list bin\Debug\regXwild.dll +goto bu +:bt +set /a ax=0 +:bv +set ay=!bk[%ax%]! +if [!ay!]==[-help] ( goto bq ) else if [!ay!]==[-h] ( goto bq ) else if [!ay!]==[-?] ( goto bq ) +if [!ay!]==[-debug] ( +set am=1 +goto bw +) else if [!ay!]==[-action] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wAction=!v! +for %%g in (Restore, Configure, Update, Export, Recover, Unset, Upgrade, Default) do ( +if "!v!"=="%%g" goto bw +) +echo Unknown -action !v! +exit/B 1 +) else if [!ay!]==[-sln-dir] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wSlnDir=!v! +goto bw +) else if [!ay!]==[-sln-file] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wSlnFile=!v! +goto bw +) else if [!ay!]==[-metalib] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wMetaLib=!v! +goto bw +) else if [!ay!]==[-metacor] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wMetaCor=!v! +goto bw +) else if [!ay!]==[-dxp-target] ( set /a "ax+=1" & call :bx bk[!ax!] v +set wDxpTarget=!v! +goto bw +) else if [!ay!]==[-dxp-version] ( set /a "ax+=1" & call :bx bk[!ax!] v +set af=!v! +goto bw +) else if [!ay!]==[-msb] ( set /a "ax+=1" & call :bx bk[!ax!] v +set ao=!v! +goto bw +) else if [!ay!]==[-packages] ( set /a "ax+=1" & call :bx bk[!ax!] v +set ai=!v! +goto bw +) else if [!ay!]==[-server] ( set /a "ax+=1" & call :bx bk[!ax!] v +set aj=!v! +goto bw +) else if [!ay!]==[-proxy] ( set /a "ax+=1" & call :bx bk[!ax!] v +set at=!v! +set wProxy=!v! +goto bw +) else if [!ay!]==[-pkg-link] ( set /a "ax+=1" & call :bx bk[!ax!] v +set ap=!v! +set af=!ay! +goto bw +) else if [!ay!]==[-force] ( +set ar=1 +goto bw +) else if [!ay!]==[-no-mgr] ( +set /a wDxpOpt^|=1 +goto bw +) else if [!ay!]==[-mgr-up] ( +set as=1 +goto bw +) else if [!ay!]==[-wz-target] ( set /a "ax+=1" & call :bx bk[!ax!] v +set ah=!v! +goto bw +) else if [!ay!]==[-pe-exp-list] ( set /a "ax+=1" & call :bx bk[!ax!] v +set aq=!v! +goto bw +) else if [!ay!]==[-eng] ( +chcp 437 >nul +goto bw +) else if [!ay!]==[-GetNuTool] ( +call :by -GetNuTool 10 +set /a aw=!ERRORLEVEL! & goto bu +) else if [!ay!]==[-hMSBuild] ( +set av=1 & goto br +) else if [!ay!]==[-version] ( +@echo v1.7.4.29858+c1cc52f %__dxp_pv% +goto bu +) else if [!ay!]==[-build-info] ( +set an=1 +goto bw +) else if [!ay!]==[-tests] ( set /a "ax+=1" & call :bx bk[!ax!] v +set au=!v! +goto bw +) else ( +echo Incorrect key: !ay! +set /a aw=1 +goto bu +) +:bw +set /a "ax+=1" & if %ax% LSS !bl! goto bv +:br +call :bz "dxpName = " ag +call :bz "dxpVersion = " af +call :bz "-sln-dir = " wSlnDir +call :bz "-sln-file = " wSlnFile +call :bz "-metalib = " wMetaLib +call :bz "-metacor = " wMetaCor +call :bz "-dxp-target = " wDxpTarget +call :bz "-wz-target = " ah +call :bz "#opt " wDxpOpt +if defined af ( +if "!af!"=="actual" ( +set "af=" +) +) +set wPkgVer=!af! +if z%wAction%==zUpgrade ( +call :bz "Upgrade is on" +set as=1 +set ar=1 +) +call :b0 ai +set "ai=!ai!\\" +set "az=!ag!" +set "wPkgPath=!ai!!ag!" +if defined af ( +set "az=!az!/!af!" +set "wPkgPath=!wPkgPath!.!af!" +) +if defined ar ( +if exist "!wPkgPath!" ( +call :bz "Removing old version before continue. '-force' key rule. " wPkgPath +rmdir /S/Q "!wPkgPath!" +) +) +set a0="!wPkgPath!\\!ah!" +call :bz "wPkgPath = " wPkgPath +if not exist !a0! ( +if exist "!wPkgPath!" ( +call :bz "Trying to replace obsolete version ... " wPkgPath +rmdir /S/Q "!wPkgPath!" +) +call :bz "-pkg-link = " ap +call :bz "-server = " aj +if defined ap ( +set aj=!ap! +if "!aj::=!"=="!aj!" ( +set aj=!cd!/!aj! +) +if "!wPkgPath::=!"=="!wPkgPath!" ( +set "a1=../" +) +set "az=:!a1!!wPkgPath!|" +) +if defined ao ( +set a2=-msbuild "!ao!" +) +set a3=!a2! /p:ngserver="!aj!" /p:ngpackages="!az!" /p:ngpath="!ai!" /p:proxycfg="!at! " +call :bz "GetNuTool call: " a3 +if defined am ( +call :b1 !a3! +) else ( +call :b1 !a3! >nul +) +) +if defined av ( +call :by -hMSBuild 9 +set /a aw=!ERRORLEVEL! & goto bu +) +if defined aq ( +"!wPkgPath!\\tools\\PeViewer.exe" -list -pemodule "!aq!" +set /a aw=%ERRORLEVEL% +goto bu +) +if defined an ( +call :bz "buildInfo = " wPkgPath ak +if not exist "!wPkgPath!\\!ak!" ( +echo information about build is not available. +set /a aw=2 +goto bu +) +type "!wPkgPath!\\!ak!" +goto bu +) +if not exist !a0! ( +echo Something went wrong. Try to use another keys. +set /a aw=2 +goto bu +) +call :bz "wRootPath = " wRootPath +call :bz "wAction = " wAction +call :bz "wMgrArgs = " wMgrArgs +if defined ao ( +call :bz "Use specific MSBuild tools: " ao +set a4="!ao!" +goto b2 +) +call :b3 bm & set a4="!bm!" +if "!ERRORLEVEL!"=="0" goto b2 +echo MSBuild tools was not found. Try with `-msb` key. +set /a aw=2 +goto bu +:b2 +if not defined a4 ( +echo Something went wrong. Use `-debug` key for details. +set /a aw=2 +goto bu +) +if not defined au ( +if not defined ao if defined wPkgPath ( +set a4="!wPkgPath!\\hMSBuild" +for /f "tokens=*" %%i in ('!a4! -version') do set a5=%%i +call :b4 !a5! bn +call :bz "hMSBuild -v" a5 bn +if !bn! GEQ 230 ( +call :bz "2.3+" +set a4=!a4! -vsw-as "-requiresAny -requires Microsoft.NetCore.Component.SDK Microsoft.Net.Core.Component.SDK -products * -latest -prerelease" +) +) +call :bz "Target: " a4 a0 +call !a4! /nologo /v:m /m:4 !a0! +) +:bu +if defined au ( +echo Running Tests ... "!au!" +call :b3 bo +"!bo!" /nologo /v:m /m:4 "!au!" +exit/B 0 +) +if defined as ( +(copy /B/Y "!wPkgPath!\\DllExport.bat" "!al!" > nul) && ( echo Manager has been updated. & exit/B 0 ) || ( (echo -mgr-up failed:!aw! 1>&2) & exit/B 1 ) +) +exit/B !aw! +:b4 +set a6=%~1 +for /f "tokens=1,2 delims=." %%a in ("!a6!") do ( +set _=%%b & set /a _*=10 & set /a %2=%%a!_! +) +exit/B 0 +:by +set ay=%~1 +set /a a7=%~2 +call :bz "accessing to !ay! ..." +for /L %%p IN (0,1,8181) DO ( +if "!ad:~%%p,%a7%!"=="!ay!" ( +set a8=!ad:~%%p! +set a9=!a8:~%a7%! +if defined av ( +call "!wPkgPath!\\hMSBuild" !a9! +) else ( +call :b1 !a9! +) +exit/B !ERRORLEVEL! +) +) +call :bz "!ay! is corrupted: " ad +exit/B 1 +:b3 +call :bz "Searching from .NET Framework - .NET 4.0, ..." +for %%v in (4.0, 3.5, 2.0) do ( +call :b5 %%v Y & if defined Y ( +set %1=!Y! +exit/B 0 +) +) +call :bz "msb -netfx: not found" +set "%1=" +exit/B 2 +:b5 +call :bz "check %1" +for /F "usebackq tokens=2* skip=2" %%a in ( +`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\%1" /v MSBuildToolsPath 2^> nul` +) do if exist %%b ( +set a_=%%~b +call :bz ":msbfound " a_ +call :b6 a_ bp +set %2=!bp! +exit/B 0 +) +set "%2=" +exit/B 0 +:b6 +set %2=!%~1!\MSBuild.exe +exit/B 0 +:bz +if defined am ( +set ba=%1 +set ba=!ba:~0,-1! +set ba=!ba:~1! +echo.[%TIME% ] !ba! !%2! !%3! +) +exit/B 0 +:b0 +call :b7 %1 +call :b8 %1 +exit/B 0 +:b7 +call :b9 %1 "-=1" +exit/B 0 +:b8 +call :b9 %1 "+=1" +exit/B 0 +:b9 +set bb=z!%1!z +if "%~2"=="-=1" (set "bc=1") else (set "bc=") +if defined bc ( +set /a "i=-2" +) else ( +set /a "i=1" +) +:b_ +if "!bb:~%i%,1!"==" " ( +set /a "i%~2" +goto b_ +) +if defined bc set /a "i+=1" +if defined bc ( +set "%1=!bb:~1,%i%!" +) else ( +set "%1=!bb:~%i%,-1!" +) +exit/B 0 +:bs +set "bd=%~1" +set /a ax=-1 +:ca +set /a ax+=1 +set %bd%[!ax!]=%~2 +shift & if not "%~3"=="" goto ca +set /a ax-=1 +set %1=!ax! +exit/B 0 +:bx +set %2=!%1! +exit/B 0 +:b1 +setlocal disableDelayedExpansion +@echo off +:: GetNuTool - Executable version +:: Copyright (c) 2015-2018,2020 Denis Kuzmin [ x-3F@outlook.com ] +:: https://github.com/3F/GetNuTool +set be=gnt.core +set bf="%temp%\%random%%random%%be%" +if "%~1"=="-unpack" goto cb +set bg=%* +if defined __p_call if defined bg set bg=%bg:^^=^% +set bh=%__p_msb% +if defined bh goto cc +if "%~1"=="-msbuild" goto cd +for %%v in (4.0, 14.0, 12.0, 3.5, 2.0) do ( +for /F "usebackq tokens=2* skip=2" %%a in ( +`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\%%v" /v MSBuildToolsPath 2^> nul` +) do if exist %%b ( +set bh="%%~b\MSBuild.exe" +goto cc +) +) +echo MSBuild was not found. Try -msbuild "fullpath" args 1>&2 +exit/B 2 +:cd +shift +set bh=%1 +shift +set bi=%bg:!= #__b_ECL## % +setlocal enableDelayedExpansion +set bi=!bi:%%=%%%%! +:ce +for /F "tokens=1* delims==" %%a in ("!bi!") do ( +if "%%~b"=="" ( +call :cf !bi! +exit/B %ERRORLEVEL% +) +set bi=%%a #__b_EQ## %%b +) +goto ce +:cf +shift & shift +set "bg=" +:cg +set bg=!bg! %1 +shift & if not "%~2"=="" goto cg +set bg=!bg: #__b_EQ## ==! +setlocal disableDelayedExpansion +set bg=%bg: #__b_ECL## =!% +:cc +call :ch +call %bh% %bf% /nologo /p:wpath="%cd%/" /v:m /m:4 %bg% +set "bh=" +set bj=%ERRORLEVEL% +del /Q/F %bf% +exit/B %bj% +:cb +set bf="%cd%\%be%" +echo Generating minified version in %bf% ... +:ch +%bf% +set a=PropertyGroup&set b=Condition&set c=ngpackages&set d=Target&set e=DependsOnTargets&set f=TaskCoreDllPath&set g=MSBuildToolsPath&set h=UsingTask&set i=CodeTaskFactory&set j=ParameterGroup&set k=Reference&set l=Include&set m=System&set n=Using&set o=Namespace&set p=IsNullOrEmpty&set q=return&set r=string&set s=delegate&set t=foreach&set u=WriteLine&set v=Combine&set w=Console.WriteLine&set x=Directory&set y=GetNuTool&set z=StringComparison&set _=EXT_NUSPEC +^ + + + ``` + https://github.com/3F/DllExport/pull/148#issuecomment-622115091 + + * NEW: Optional copying of intermediate files + x86+x64 directories into output + for projects that dependent on projects where used DllExport. Issue #144. + + Including sequential referencing through other projects: + https://github.com/3F/DllExport/pull/148#issuecomment-625193408 + + * FIXED: Fixed #140 ... failed to create safe SSL/TLS context. + + * FIXED: Pack of fixes for .net.dllexport.targets. PR #147. + + * Fixed "Cannot modify an evaluated object originating in an imported file". + * Fixed possible duplication in .net.dllexport.targets when configuring. + * Adds removing TargetsFile if not used. + * Fixed possible loss of settings in .targets when configuring. + + * FIXED: Fixed #143 'Microsoft.NET.Sdk' specified could not be found. + + * FIXED: A multiple empty `` in project files during new configuration. + + * CHANGED: Wizard. Dropped support for ssl3 + tls1.0 + tls1.1 + + * CHANGED: Wizard. Simplified notification for stable versions. + + * CHANGED: Manager. Access to hMSBuild tool (packed) via `-hMSBuild` key. + https://github.com/3F/hMSBuild + Since it uses packed version (while GetNuTool is integrated inside), + you need use -dxp-version to control specific version. + + * CHANGED: Updated Cecil 0.11.2 + https://github.com/jbevain/cecil/releases/tag/0.11.2 + + * CHANGED: Updated MvsSln 2.5.2 + https://github.com/3F/MvsSln/releases/tag/2.5.2 + + +[v1.7] 2020.01.31 + + * NEW: .NET Core based projects support. + Issues: #90, #67 + PR: #123 + + * NEW: .NET Standard 1.1 and above targeting support. + + * NEW: Implemented "Single + Double Inf/-Inf token patching" option. + Related Issue #128. + + * NEW: Implemented "Rebase System Object" option for our assembler. + + Helps to avoid possible "Invalid memory access" (JNA/Java). Issue #125. + For C/C++ such as "Unhandled exception at ... (KernelBase)" + + https://twitter.com/GitHub3F/status/1201904821093187585 + Part of PR #123 + + * NEW: Implemented updater for wizard. Issue #109. + + * NEW: Textual export of affected data to diag. + + * CHANGED: Updated CoreCLR 3.1.0 LTS \ IL Assembler 4.700.2. + https://github.com/3F/coreclr/releases/tag/ILAsm.4.700.2 + + Includes an implemented `/REBASE` feature for related issue #125. + + * CHANGED: New installation behavior through official NuGet. + init.ps1 also adds optional copying of package data for our manager. + + Please note: This is not nuget support! + It just replaces known info-form that was in 1.6.x. + + * CHANGED: New wizard layout for 1.7. + + * CHANGED: Local scope when invoking .\DllExport manager in project files. + + * CHANGED: Updated logic for an offline versions + with optional converting to online if needed. + + * CHANGED: Updated MvsSln 2.5.1 + https://github.com/3F/MvsSln/releases/tag/2.5.1 + + * CHANGED: Updated hMSBuild 2.3 + https://github.com/3F/hMSBuild/releases/tag/v2.3 + + * KNOWN: You can finally get another System.Object in modified assembly: + https://github.com/3F/DllExport/issues/90#issuecomment-546637702 + + * NOTE: You need an updated/modern manager to avoid problem + when "Possible incorrect Sdk-based project types": PR #123 + https://github.com/3F/MvsSln/issues/23 + + Use it from official 1.7 release: + https://github.com/3F/DllExport/releases/tag/v1.7 + https://www.nuget.org/packages/DllExport/1.7.0 + + Otherwise you need provide manually msbuild instance + that can process modern Sdk-types due to modern VS/dotnet sdk + dependencies for netcore-based projects. + + For example, through hMSBuild https://github.com/3F/hMSBuild + ``` + DllExport ... -msb hMSBuild + ``` + + * NOTE: For command-line mode, To upgrade configured version to 1.7: + ``` + DllExport -action Upgrade -dxp-version 1.7.0 + ``` + + +[v1.7-RC] 2020.01.27 + + * NOTE: Release Candidate includes all actual fixes from + [ 1.7 beta-1 to beta-4 ] releases. And also adds the following: + + * NEW: Implemented updater for wizard. Issue #109. + + * NEW: Textual export of affected data to diag. + + * CHANGED: Updated logic for an offline versions + with optional converting to online if needed. + + * CHANGED: `.gitattributes` now will be distributed with packages. + Use this to avoid related problems: + `a7, a8, a9 - is not recognized as an internal or external command` + https://github.com/3F/hMSBuild/issues/2 + + +[v1.7-beta4] 2020.01.21 + + * NEW: Allowed .NET Standard 1.1 and above targeting. + + * FIXED: Fixed "Sdk.WindowsDesktop" problem for .NET Core / SDK-based projects. + Details in PR #123. + + * FIXED: Fixed beta3 incorrect layout (Thanks @Genteure, PR #131). + + Related problem with `Inf/-Inf token patching` option: + https://github.com/3F/DllExport/issues/128#issuecomment-566360606 + + * FIXED: DllExport crashing with proxy authentication error. Issue #133. + + * FIXED: Fixed actions for `-mgr-up` key. + Including `-action Upgrade` ( Update + mgr-up + force keys ) + + * FIXED: Fixes possible MSB1006 for proxycfg property. + "MSB1006: Property is not valid. Switch: proxycfg" + + * CHANGED: UI. VS project icons under Visual Studio 2017 Image Library EULA.RTF license. + + * CHANGED: init.ps1 adds optional copying of package data for our manager. + Part of the "new installation behavior through official NuGet." (beta2) + + Please note: This is not nuget support! + It just replaces known info-form that was in 1.6.x. + + * CHANGED: Local scope when invoking .\DllExport manager in project files. + + * CHANGED: Updated GetNuTool 1.8 + https://github.com/3F/GetNuTool/releases/tag/1.8 + + * NOTE: Please don't use beta releases in production! + + * NOTE: Please report about something here: https://github.com/3F/DllExport/issues + + +[v1.6.6] 2020.01.16 + + * NOTE: Please don't forget to test latest 1.7 BETA releases (not for production) + with .NET Core support! + https://github.com/3F/DllExport + + * FIXED: Fixed possible duplication of `PlatformTarget` during setup. + + * FIXED: Fixed error when switching between .sln in UI. Wizard. + + * FIXED: DllExport crashing with proxy authentication error. Issue #133. + + * FIXED: Fixed actions for `-mgr-up` key. + Including `-action Upgrade` ( Update + mgr-up + force keys ) + + * FIXED: Fixes possible MSB1006 for proxycfg property. + "MSB1006: Property is not valid. Switch: proxycfg" + + * CHANGED: Updated MvsSln 2.5 + https://github.com/3F/MvsSln/releases/tag/2.5 + + * CHANGED: Updated Mono Cecil 0.11.1 + https://github.com/jbevain/cecil/releases/tag/0.11.1 + + * CHANGED: Updated GetNuTool 1.8 + https://github.com/3F/GetNuTool/releases/tag/1.8 + + * CHANGED: Updated Conari 1.4 + https://github.com/3F/Conari/releases/tag/1.4 + + +[v1.7-beta3] 2019.12.15 + + * FIXED: Mismatch of the name of the exported function with the specified value. + Issue #129. + + * FIXED: Unchangeable cdecl convention. Part of Issue #129. + + * FIXED: Fixed possible duplication of `DllExportSysObjRebase` during setup. + + * NEW: Implemented "Single + Double Inf/-Inf token patching" option. + Related Issue #128. + + * KNOWN: You can finally get another System.Object in modified assembly: + https://github.com/3F/DllExport/issues/90#issuecomment-546637702 + + * NOTE: Please don't use beta releases in production! + + * NOTE: Please report about something here: https://github.com/3F/DllExport/issues + + +[v1.7-beta2] 2019.12.14 + + * FIXED: Fixed possible "Invalid memory access" (JNA/Java). Issue #125. + For C/C++ such as "Unhandled exception at ... (KernelBase)" + + https://twitter.com/GitHub3F/status/1201904821093187585 + + * FIXED: Fixed 'Failed to resolve assembly...' when .NET Standard. Issue #127. + + * FIXED: Fixed error when switching between .sln in UI. Wizard. + + * FIXED: Fixed possible duplication of `PlatformTarget` during setup. + + * NEW: Implemented "Rebase System Object" option for our assembler. + + * CHANGED: New installation behavior through official NuGet. + + * CHANGED: New wizard layout for 1.7. + + * CHANGED: Updated CoreCLR 3.1.0 RTM \ IL Assembler 4.700.2. + https://github.com/3F/coreclr/releases/tag/ILAsm.4.700.2 + + Includes an implemented `/REBASE` feature for related issue #125. + + * CHANGED: Updated Mono Cecil 0.11.1 + https://github.com/jbevain/cecil/releases/tag/0.11.1 + + * CHANGED: Updated Conari 1.4 + https://github.com/3F/Conari/releases/tag/1.4 + + * KNOWN: Possible syntax error at token 'inf'. Issue #128. + https://github.com/3F/DllExport/issues/128 + + * KNOWN: You can finally get another System.Object in modified assembly: + https://github.com/3F/DllExport/issues/90#issuecomment-546637702 + + * NOTE: Please don't use beta releases in production! + + * NOTE: Please report about something here: https://github.com/3F/DllExport/issues + + +[v1.7-beta] 2019.11.04 + + * NEW: Basic support for the netcore-based projects. + Issues: #90, #67 + PR: #123 + + * CHANGED: Updated CoreCLR 3.0 IL Assembler 4.700.1 + https://github.com/3F/coreclr + + * CHANGED: Updated Mono Cecil 0.11 + + * CHANGED: Updated MvsSln 2.5 + + * NOTE: You also need an updated manager to avoid problem + when "Possible incorrect Sdk-based project types": PR #123 + https://github.com/3F/MvsSln/issues/23 + + Use it from official 1.7-beta release: + https://github.com/3F/DllExport/releases/tag/v1.7-beta + https://www.nuget.org/packages/DllExport/1.7.0-beta + + Otherwise you need provide manually msbuild instance + that can process modern Sdk-types due to modern VS/dotnet sdk + dependencies for netcore-based projects. + + For example, through hMSBuild https://github.com/3F/hMSBuild + ``` + DllExport ... -msb hMSBuild + ``` + + * NOTE: To upgrade configured version to 1.7 beta: + ``` + DllExport -action Upgrade -dxp-version 1.7.0-beta + ``` + + * NOTE: Please don't use beta releases in production! + + * NOTE: Please report about something here: https://github.com/3F/DllExport/issues + + * KNOWN: You can finally get another System.Object in modified assembly: + https://github.com/3F/DllExport/issues/90#issuecomment-546637702 + + +[v1.6.5] 2019.08.10 + + * FIXED: Possible "The format ... of configuration is not supported." + Issue #114. + + * FIXED: XML meta comments for DllExport Metadata. + + * CHANGED: Updated MvsSln 2.4 + Release notes: + https://github.com/3F/MvsSln/releases/tag/v2.4 + + * NOTE: To upgrade configured version to v1.6.5: + ``` + DllExport -action Upgrade -dxp-version 1.6.5 + ``` + +[v1.6.4] 2019.07.04 + + * FIXED: Possible "The process cannot access the file because it is being used by another process" + Issue #106 + + * CHANGED: Updated Mono.Cecil 0.10.4 + https://github.com/jbevain/cecil/commits/0.10.4 + + * CHANGED: Updated MvsSln 2.3 + Release notes: + https://github.com/3F/MvsSln/releases/tag/v2.3 + + * NOTE: To upgrade configured version to v1.6.4: + ``` + DllExport -action Upgrade -dxp-version 1.6.4 + ``` + +[v1.6.3] 2019.05.30 + + * NEW: Support of unicode characters in namespaces. Issue #80 + + * NEW: Integrated `-action Configure` command by default. Issue #96 + Configure everything in one click. + https://github.com/3F/DllExport/wiki/Quick-start + + * CHANGED: Updated Mono.Cecil 0.10.3 + https://github.com/jbevain/cecil/commits/0.10.3 + + * CHANGED: Updated MvsSln 2.2 + Release notes: + https://github.com/3F/MvsSln/releases/tag/v2.2 + + * NOTE: To upgrade configured version to v1.6.3: + ``` + DllExport -action Upgrade -dxp-version 1.6.3 + ``` + +[v1.6.2] 2018.12.27 + + * NEW: Added option 'auto' into panel of platforms as an automatic configuring platform from user settings. + An easy configuring between different configurations, like from BasicExport example: + https://github.com/3F/Examples/tree/master/DllExport/BasicExport + + * FIXED: MSB3073 for paths with `%` and `;`. + * FIXED: Inactive `-packages` key. (broken in 1.6.1) + * FIXED: Problems with relative paths for `-pkg-link`. (incomplete logic from 1.6.0) + * FIXED: Fixed problems with special symbols in path. Related Issue #88. + ``` + ' &!~`@#$^(+)_=%-;[.]{,} + ``` + + * FIXED: Fixes possible Null Exception for empty project collection when applying filter. + * FIXED: Build problem when project is configured from arguments ending with `"` (double quote mark). + For example: `-action Configure -sln-dir "path"` + + * CHANGED: Removed obsolete Configurator (old PowerShell way) from NuGet package. + * CHANGED: Updated hMSBuild 2.0 & GetNuTool 1.7. + Release notes: + * https://github.com/3F/GetNuTool/releases/tag/v1.7 + * https://github.com/3F/hMSBuild/releases/tag/v2.0 + + * NOTE: To upgrade configured version on v1.6.2: + ``` + DllExport -action Upgrade -dxp-version 1.6.2 + ``` + +[v1.6.1] 2018.08.05 + + * FIXED: Fixed bug when some methods cannot be exported. Issue #59. + * FIXED: Bug 'The node is not parented by this object' when Configuring projects. Issue: #77. + * FIXED: Fixed GDI objects leak in Wizard. + * FIXED: `-msb` key cannot affect for GetNuTool section. Issue #74. + * FIXED: Bug when automatic restoring still uses default keys from manager after configuring with custom `-server`. + * FIXED: Problem with double quotes for `-packages` key. + * FIXED: Possible incorrect repetition of the relative path for `-packages` key. + * FIXED: Possible problem 'The request was aborted: Could not create SSL/TLS secure channel.'. Issue: #77. + * FIXED: Possible problem with path when `-msb` key contains round brackets, + e.g.: `D:\C\Program Files (x86)\Microsoft Visual Studio\`... + + * NEW: Implemented features for additional automation. Issue #76. + New actions: + * `-action Export` + * `-action Recover` + * `-action Unset` + + Documentation: https://github.com/3F/DllExport/wiki/DllExport-Manager#automation + + * NEW: Added proxy support for manager. + The common format: `[usr[:pwd]@]host[:port]` + + Documentation: https://github.com/3F/DllExport/wiki/DllExport-Manager#proxy + + * NEW: Wizard. Added sorting an projects in main window by its installing status and by availability. + * NEW: Wizard. Added filter for list of projects in main wizard window. + * NEW: New 'Offline' versions from our packages. See GitHub Releases page. + * NEW: Added key to force update `Reference` without PublicKeyToken. Issue #65. + * NEW: Added `-force` key for manager to use aggressive behavior, e.g. like removing pkg when updating. + Wiki: https://github.com/3F/DllExport/wiki/DllExport-Manager#receiving-new-package-version + + * NEW: New action `-action Upgrade`. + Aggregates an Update action with additions for upgrading. + + Today's an Upgrade action: + ``` + DllExport -action Upgrade ... + ``` + + is equal to: + ``` + DllExport -action Update -mgr-up -force ... + ``` + + Wiki: https://github.com/3F/DllExport/wiki/DllExport-Manager#updating + + * CHANGED: Case sensitivity for the Action names. + * CHANGED: `-action Default` for nothing. + * CHANGED: UI layout fixes for -Info form (Thanks @Genteure, Issue #61). + * CHANGED: Allows absolute path for `-packages` key. + * CHANGED: `-sln-file` key now can affect to `-action Configure` + * CHANGED: hMSBuild tool now is also distributed inside root directory of the packages zip & nupkg. + Use this for EXP0014 problem: "RunIlAsm. The library manager still cannot be found." + Example: https://www.youtube.com/watch?v=zUejJ4vUPGw + + * CHANGED: Updated GetNuTool v1.6.2 + * CHANGED: Updated MvsSln v2.1.0 + * OTHER: Some other fixes and changes with manager and wizard. + * NOTE: To upgrade configured version: `DllExport -action Upgrade ...` + * NOTE: Configuring projects: `DllExport -action Configure ...` + * NOTE: Screencasts: + * Quick start: https://www.youtube.com/watch?v=sBWt-KdQtoc + * Basic examples for C++ and C#: https://www.youtube.com/watch?v=9Hyg3_WE9Ks + * Complex types and Strings: https://www.youtube.com/watch?v=QXMj9-8XJnY + + * NOTE: Our actual wiki - https://github.com/3F/DllExport/wiki + * Documentation for manager: https://github.com/3F/DllExport/wiki/DllExport-Manager + +[v1.6] 2017.12.29 + + * NEW: The new embeddable lightweight manager for distribution via MvsSln & GetNuTool projects. Issue #38. + Based on hMSBuild logic and includes GetNuTool core v1.6.1. + + Now you shouldn't use standard nuget clients anymore: + https://www.youtube.com/watch?v=9bYgywZ9pPE + + Quick start: https://www.youtube.com/watch?v=sBWt-KdQtoc + ============================== + DllExport -action Configure + ============================== + + Package from nuget.org already contains manager, but you can also get it directly. + Latest manager: https://3F.github.io/DllExport/releases/latest/manager/ + ~18 Kb text-based embeddable batch-script that does not require powershell and dotnet-cli. + + Automatic restoring still is available but you can also use: `DllExport -action Restore` + All available features: `DllExport -h` + + Direct links to remote package (without nuget server) via `-pkg-link {uri}` key. Issue #53. + NuGet Server by default: nuget.org. + + * NEW: The new Wizard (configurator via MvsSln). To easy configure your projects in any place. Part of Issue #38. + MvsSln v2.0: https://github.com/3F/MvsSln + + * NEW: Added support of empty/global namespaces - Issue #47. + Use `Direct-Mod` if Cecil will not process this correctly. + + * NEW: Implemented another storage for configuration: '.net.dllexport.targets'. Issue #49. + + * NEW: New settings for configurator (Wizard): + * Path to custom ILAsm. + * Flag to keep intermediate Files (IL Code, Resources, ...). + * Timeout of execution in milliseconds. + + * NEW: Implemented automatic checking existence of a correct exported proc via Conari. Issue #55. + Wizard controls it via `$(DllExportPeCheck)`: + * 0x01 bit - Will check count of all planned exports from final PE32/PE32+ module. + * 0x02 bit - Will check existence of all planned exports (IL code) in actual PE32/PE32+ module. + + * NEW: Implemented PE32/PE32+ Viewer to check manually available exports from final modules. Issue #55. + New key for manager: + ``` + -pe-exp-list {module} - To list all available exports from PE32/PE32+ module. + ``` + + Sample: + ``` + DllExport -pe-exp-list bin\Debug\regXwild.dll + ``` + + * FIXED: Fixed target platform detection. Issue #34. + Details: https://github.com/3F/DllExport/issues/34#issuecomment-306171060 + + * FIXED: Fixed problem when the Post-Build event is triggered before our tool. Issue #35. + Use this if still is needed: + ``` + + ... + + ``` + + * FIXED: Fixed generation of exp + .lib via MS Library Manager for VS2017. Issue #37. + Now it also includes processing through VsDevCmd & VcVarsAll initializer scripts. + Use the folowing msbuild properties to override values by default: + * $(DllExportVcVarsAll); $(DllExportVsDevCmd) + + * FIXED: Fixes possible problem with multiple properties that contains *Undefined* word, + e.g.: *Undefined*\path1;C:\path2 ... + + * CHANGED: Added information about finding lib tool. Issue #44. + + * CHANGED: UI. Selected platform now affects to all configurations of project instead of active as before. + + * CHANGED: Now nuget package does not contain library in `lib/.../` Details in #36. + + * CHANGED: Now we also distribute .zip package for work through our manager etc. + https://github.com/3F/DllExport/releases + + * NOTE: How to avoid EXP0014: RunIlAsm. The library manager still cannot be found. + https://www.youtube.com/watch?v=zUejJ4vUPGw + Related Issue #44 + + * NOTE: Quick start (Configuring, Automatic restoring, Pe-Viewer): + https://www.youtube.com/watch?v=sBWt-KdQtoc + + * NOTE: The latest text-based manager: + https://3F.github.io/DllExport/releases/latest/manager/ + + Other versions you can find from GitHub Releases: + * https://github.com/3F/DllExport/releases + + Or get it from nuget packages starting with v1.6+ + + * NOTE: PE-features via Conari v1.3.0 https://github.com/3F/Conari + + * KNOWN: Bug when - "Build successful but methods are not exported." Issue #59 + For today, anyone else may also try to use https://github.com/3F/Conari to avoid similar @Genteure's problem. + + * DIFF(v1.6-RC): + + * FIXED: Wizard. Fixed incorrect layout for zh_CN Simplified Chinese (Thanks @Genteure). Issue #61 + * FIXED: Fixes automatic restoring the package via msbuild. Issue #62 + + +[v1.6-RC] 2017.11.26 + + * FIXED: Avoids crashes when project cannot be loaded for some reasons. Issue #56 + * FIXED: Fixed usage of manager outside the Solution directory. + * FIXED: Fixed restoring package when using `-pe-exp-list` command. + * NEW: Added `-mgr-up` key. Will update manager to version from '-dxp-version'. + * NOTE: Thanks for your feedback. Now we're ready for release v1.6, soon. + Please check release-candidate as carefully as possible. + + Start with: + ============================== + DllExport -action Configure + ============================== + https://3F.github.io/DllExport/releases/latest/manager/ + https://www.youtube.com/watch?v=okPThdWDZMM&t=46s + + +[v1.6-beta3] 2017.10.27 + + * NEW: Implemented another storage for configuration: '.net.dllexport.targets'. Issue #49. + * NEW: Implemented automatic checking existence of a correct exported proc via Conari. Issue #55. + Wizard controls it via `$(DllExportPeCheck)`: + * 0x01 bit - Will check count of all planned exports from final PE32/PE32+ module. + * 0x02 bit - Will check existence of all planned exports (IL code) in actual PE32/PE32+ module. + + * NEW: Implemented PE32/PE32+ Viewer to check manually available exports from final modules. Issue #55. + New key for manager: + ``` + -pe-exp-list {module} - To list all available exports from PE32/PE32+ module. + ``` + + Sample: + ``` + DllExport -pe-exp-list bin\Debug\regXwild.dll + ``` + + * NEW: Implemented `-pkg-link {uri}` key for DllExport manager. Issue #53. + * NEW: New settings for Wizard: + * Path to custom ILAsm. + * Flag to keep intermediate Files (IL Code, Resources, ...). + * Timeout of execution in milliseconds. + + * CHANGED: Updated MvsSln v2.0. Full changelog: https://github.com/3F/MvsSln/blob/master/changelog.txt + * NOTE: PE-features via Conari v1.3.0 https://github.com/3F/Conari + + +[v1.6-beta2] 2017.08.19 + + * NOTE: This release contains trivial fixes only for our manager because of problems with nuget.org. Issue #38. + Please read all changes in previous beta release and please note again - you shouldn't use standard nuget clients anymore: + https://www.youtube.com/watch?v=okPThdWDZMM + + Test and comment anything about this in Issue #38 if you need. + + * FIXED: Updated GetNuTool v1.6.1 to fix problems with possible incorrect CRC & Compressed size info from nuget.org. + + Changelog here: + https://github.com/3F/GetNuTool/blob/master/changelog.txt + + Related issues: + * https://github.com/3F/GetNuTool/issues/3 + * https://github.com/3F/DllExport/issues/38#issuecomment-322250229 + + * CHANGED: Changed url to get latest manager directly. Please use this if you need: + * https://3F.github.io/DllExport/releases/latest/manager/ + + Other versions you can find from GitHub Releases: + * https://github.com/3F/DllExport/releases + + Or get it from nuget packages starting with v1.6+ + +[v1.6-beta] 2017.08.12 + + * NEW: The new lightweight manager & distribution via MvsSln & GetNuTool projects. Issue #38. + Based on hMSBuild logic and includes GetNuTool core. + + Now you shouldn't use standard nuget clients anymore: + https://www.youtube.com/watch?v=okPThdWDZMM + + Package from nuget.org already contains this, but you can also get it directly. + Latest version: https://raw.githubusercontent.com/3F/DllExport/latest/manager/DllExport.bat + ~18 Kb text-based embeddable batch-scripts that does not require powershell and dotnet-cli. + + To install/uninstall or to reconfigure your projects: `DllExport -action Configure` + To manually restore package: `DllExport -action Restore` + All available features: `DllExport -h` + + Server by default - nuget.org + + * NEW: The new Wizard (configurator via MvsSln). To easy configure your projects in any place. Issue #38. + MvsSln v1.0.1.43422: https://github.com/3F/MvsSln + + * NEW: Added support of global namespaces - Issue #47. + Use `Direct-Mod` if Cecil will not process this correctly. + + * FIXED: Fixed target platform detection. Issue #34. + Details: https://github.com/3F/DllExport/issues/34#issuecomment-306171060 + + * FIXED: Fixed problem when the Post-Build event is triggered before our tool. Issue #35. + Use this if still is needed: + ``` + + ... + + ``` + + * FIXED: Fixed generation of exp + .lib via MS Library Manager for VS2017. Issue #37. + Now it also includes processing through VsDevCmd & VcVarsAll initializer scripts. + Use the folowing msbuild properties to override values by default: + * $(DllExportVcVarsAll); $(DllExportVsDevCmd) + + * FIXED: Fixes possible problem with multiple properties that contains *Undefined* word, + e.g.: *Undefined*\path1;C:\path2 ... + + * CHANGED: Added information about finding lib tool. Issue #44. + * CHANGED: UI. Selected platform now affects to all configurations of project instead of active as before. + * CHANGED: Now, nuget package does not contain library in `lib/.../` Details in #36. + * CHANGED: Now, we also distribute .zip package for work through our manager etc. + https://github.com/3F/DllExport/releases + + The latest text-based manager you can find here: + https://raw.githubusercontent.com/3F/DllExport/latest/manager/DllExport.bat + Illustration here: https://www.youtube.com/watch?v=okPThdWDZMM + + +[v1.5.2] 2017.03.13 + + * FIXED: Failing to compile in VS2017. Issue #29 + `Error The "DllExportAppDomainIsolatedTask" task failed unexpectedly. System.ArgumentException: Requested value 'Version46' was not found.` + + * FIXED: Possible error `Could not load file or assembly Microsoft.Build.Utilities or one of its dependencies.` + * CHANGED: Updated script for loading of the Configurator to avoid problem with old assemblies. Issue #22 + +[v1.5.1] 2016.11.12 + + * FIXED: Error : Invalid Option: /CVRES= Issue #20 + * NOTE: Our coreclr version was compiled with MSVC 14.0. Related Issue #21 + +[v1.5] 2016.11.04 + + * FIXED: Fixed problem with white-space chars in path: `Cannot find path '' because it does not exist ...` + * FIXED: Fixed typo with fullseq (ddNS) - incorrect `0x30 0x30` ~0x007A7-0x007A8 /details in #14 + * FIXED: Possible problem with NullReferenceException when removing package. + * FIXED: Fixed problem with old NS data when we try to install package for project A, then for project B + * NEW: Implemented 'Generate .exp + .lib via MS Library Manager' #9 + GUI Configurator + MSBuild property: `DllExportGenExpLib` + + * NEW: Added support of unmanaged-export for Executable Modules (.exe) #18 + * NEW: Cecil variant for ddNS features /#14, #2 + * NEW: Added our custom IL Assembler as option to fix incorrect 0x13 / 0x11 opcodes. #17 + GUI Configurator + MSBuild property: `DllExportOurILAsm` + It should help for users of Fody projects, etc. + https://github.com/Fody/Fody/issues/271 + + IlAsm 4.5.1 https://github.com/3F/coreclr + based on 4.5.22220.0 / coreclr 1.0.4 + changelog of our coreclr for this release: https://github.com/3F/coreclr/blob/master/changelog.txt + + * CHANGED: Updated scripts of installing/removing package for more correct loading of our assemblies. + +[v1.4] 2016.10.05 + + * FIXED: Fixed bug - `An item with the same key has already been added`. Issue #10 + * FIXED: Bug with Meta library: Incorrect default values. Issue #16 + please note, the __cdecl is the default calling convention for our library + as and for C and C++ programs. + + * FIXED?: Probably fixed bug - `Script errors on package install` Issue #6 + * FIXED?: Probably fixed bug - `non-English system language - syntax error` Issue #7 + * NEW: GUI Configurator with updated ddNS features. + * NEW: Implemented feature 'Export for platform': [ x86 / x64 / x86 + x64 ] Issue #9 + * NEW: Implemented feature 'Base for ordinals'. Issue #11 + There is also alternative to configure this number - MSBuild property: DllExportOrdinalsBase + + * NEW: The one (1) now is used by default as Base for all ordinals. + `Mimic ordinal counter (start from 1 instead of 0)` Issue #8 + + * CHANGED: The ddNS features now as binary cmdlet `NSBin`. Use `nsbin.bat` if needed. + * CHANGED: `Set "Inherited = false" in AttributeUsage for DllExportAttribute`. Issue #15 + * OTHER: other possible changes and fixes. + +[v1.3] 2016.08.21 + + * FIXED: bug 'Incorrect library' when DllExport installed for 2+ projects. + * CHANGED: DllExport now uses `Cdecl` calling convention by default. + * CHANGED: Mono.Cecil v0.9.6.4 + +[v1.2] 2016.07.13 + + * CHANGED: dynamic definition of namespace for user scope. Issue #2 + +[v1.1] 2016.06.29 + + * CHANGED: DllExport now is part of System.Runtime.InteropServices as and DllImport. + * CHANGED: Mono.Cecil v0.9.6.1 + * NEW: 0x80070005 meaning... Issue #1 + * NEW: +DllExport(CallingConvention convention) signature + +[v1.0] 2016.06.25 + + * Initial the open release, based on v1.2.7.38850 + diff --git a/WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.dll b/WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.dll new file mode 100644 index 0000000000000000000000000000000000000000..a5391c7e7672af0294aa8da8da9e6552f2f2734b GIT binary patch literal 4608 zcmeHKYit}>6+U-%vwoy@<3dBCy2%(PsVQM>V?#(V>DpeqIE@qIbskMx+2h^o-H~T^ zmYG?{ZbY+@pa`jg@~Eu-h!m-`QhCWzD_WpbE-D3)1VThz0Y!vA@B=}mf}lhq;X8Ns zWp5G*flz;NllkVn?z!ijd+y%x=&{ErL_}dc*RB!0fH#k*!ka?@>gKKAZKmfMF0{QM z_Frh5NL!wsbDflHX7q%a%{sn5Ep<1a)vc@^I~dn9PEs08O^w@%uE&Om_KOhxYVat# zQ{yseZRWidhA-!R@UJugpi{XP;|8aOPBdk>o|^!t zVvB;{L^+_U5k>TdD{TjcN;L%~`$Fo~BT6(-%`<%#dGX-bG+IaDHqZ#1!>S&i)`<$$ zf*a6Vw37ls-u+%J^eII^fKUQ~BKByTlt$|S+j#d4{QNJ)1Mz(Wf)FhR*Ke-Z=rVe` zdb)SBBurDlB?R04FiMIZX~okX_gyQS^4MZ0dX!7ue(#}?7~Xy0Z(;iZ+nHtq49@k) z?PrCm>lM*M8(&c?-WKT8c5%OOyWfiEU3fSm%u`!lqKUe+Akqj$w7ps*J)|vZ5qg4t z27He80* zTqhwm(5oVaZc!ZVpl^U`r0>v}&X$kVPiZegam@haF7bX z`{)cXuIS_RHP8uq9ym)s0D1~f((59sy!9&_q&w*MG^OZ*LJb)acKmhV1M~)R6{wfM zJER`okuaa)0_R>=?i@k4qG!v$k(m7?<$!Bt+~pX3qfRn!%e~Y$G@o-^|A3j1duJyn z2h7AQnts@lc9QxAP1^=H=w#<)*0-E&jY&%SlNAr-t!9syv*v`AkrZF>e3>!E^Y8+; z-}7W<+FlryzL_+Av){*2o6h@^2AxdKvZZ^k%u3hvWwN3wQ-?e=CCePeWHIPPr4N6CH|Yaf=bhg55oBiR|p&6r#V)4rhe*&$kj@NmNY27|Ht5b#ig(&RGdrqb@a3Ss%0r5<%C)yj+!_AG}I>d^8#!c;qL$ z{%Y+jJpcI2cIU|u70%K&9HRo!SD=pY0RlfB@9*aG#y^mqe_5{k{8Zc4OK)HO>78Fb z_KVide;WMf=JOA~_3Yxa9V`F%-tH}@HvanlyUcyp7T?}=<;u{5j}GKo-&p?JsUI(X z=vZj^rB_c{%Rl_>x9^IcNj~)8HyiR>MpvGx`@?<5>;8D@_-jw^eDOCc9huMWSZTTQ z3xB?FT3lK=eerU5*~-a_C!c!i{O=aNTEBG9;>YEe-2* zA(R-b5X})?6U{9R;SQ)m9n`GUx9<=XMPeFFXifdL?VK3R+rE{vB?Jv4*|c;moJL{~ z_4T6o;j@L4pU^fQan0NTCp$EskU4IIiL~pS@PzWb9oE5b&W8nUHVzC;#Cn#N_$@htS*!Xek*n)dyix2Lo7hKr#-RipaT zE4`lRvEp|Yn|zCDovGSU`W~xjCI=lC@r{~RmNH(#aivt}j4iHhCp}s*{f{Z!qwukb zsIb}cKLQ*E&ExywH?IbF z6|WG+ofW+AQQF{s3L2y+z$=DFz^h3v{8(g@girjykfV&Y@yVkJXiZ2x=uPrr=YR{w zQaBB#0x|ipvLH`g$5Tw%bRqBHUoTB_4QLD%61dkL%HS5|H5QPO2@Y+Bk%C8`(v*ii z-}7wOiEn~oU<}dNsK-2JI#`?k2I#}LlPIqrgBK68IIi5PxUV<23x};T_b}$Vm|e-W z8xicn(~E~=@1thebG3YBn?>AqRrIxM7?e~ob45At{g{_hv$z5|TjKQcBuc4?!RAwe*uwL?3w@o literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.dll.ddNSi b/WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.dll.ddNSi new file mode 100644 index 0000000000000000000000000000000000000000..705dc662150ba114c60832cc20dda1fe55dae9f1 GIT binary patch literal 219 zcmW-bOAEp<5QMESiuxl8UQ56}v_14<>q#vIiymdItAxf>@(}&?n)t!)%wd_?e$U{T z`5LTRW_`1E^?;TM{+VN~bRwN=pn#76k<(eriFyp9|0Oos@zA)Ns@l$s#@+=9% zRS-l?3fC0Fcsa7sbB>CLGu}zT*yjE0gd+bEvIo(kC_ur`+>N;`;eit_t4>m7%3Utk g`gTL%z9{6_P-gR7*RhX|2iBjUg_=Il_&?6{2bYmKk^lez literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.xml b/WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.xml new file mode 100644 index 0000000..2bcc805 --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/gcache/metacor/WakaTime/DllExport.xml @@ -0,0 +1,49 @@ + + + + DllExport + + + +

+ To export this as __cdecl C-exported function. Named as current method where is used attribute. + [.NET DllExport] + + About our meta-information in user-code: + https://github.com/3F/DllExport/issues/16 + + + + + Specified calling convention. + + __cdecl is the default convention in .NET DllExport like for other C/C++ programs (Microsoft Specific). + __stdCall mostly used with winapi. + + https://msdn.microsoft.com/en-us/library/zkwh89ks.aspx + https://msdn.microsoft.com/en-us/library/56h2zst2.aspx + https://github.com/3F/Conari also uses __cdecl by default + + + + + Optional name for C-exported function. + + + + Optional name for C-exported function. + Specified calling convention. __cdecl is the default convention in .NET DllExport. + + + Optional name for C-exported function. + + + Specified calling convention. __cdecl is the default convention in .NET DllExport. + + + + To export this as __cdecl C-exported function. Named as current method where is used attribute. + + + + diff --git a/WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.dll b/WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.dll new file mode 100644 index 0000000000000000000000000000000000000000..5beeb690d0e9a90fb629e8c2f28ca2e7f14dd143 GIT binary patch literal 5120 zcmeHKZ)_CD6@RmLJ{uPfoJ5YP3@m{V2jayxcEHr7XWyN{iT~j{8w!n%z4LHhv3Gmj z-2)6F9BSICQk%4DB-9TPD21q1sTwJ5iU_S7DXFRkQiP~Kq-jgkR;`q#tx_qXNR9iO z**o9)59C9oN|7@5{^q?mZ{EE3X6EhQz`k#ikBIzuW@d;kq8BYB@$OK-aB$6~ApLmB z)wLH{|JAke3Byryww1Q^jGEH3S<6+ET($FA)yS%mp_rPn#<{j^S?&6w>ES3*Kl4%5 z#eXJBtKB4J?Wb4^(NahPp7i${(W@RUy%V(J`7NZvf7uE^$VKx}=*vVaEm3X>5&q}2 zXH}xY9LeHLkIi7f0n`={nt$VJoKh)c+tSt?s@JklR3Z5wov_Ra&<8erU_Y+`ysA^@JBpC zCOi}m=F4MI;)!lC&-(!VkpfD9>J@>1WddW$Y2bVGvXD#3pXF$V3CRtK8hc9FMAI-F zpl`6%kiQ^tOkxic7HWW4n3f5E9}JQev`qOxsgfK6_bPh}<3V^hRtV7rU{<0gaa`g) ziA>@H66+-n03W5C(#T?kUeK|^Zi($cM&F_DA;uG+hgGruw;E0;=OED~_m!GXPTaXil zIFON`8R$AXqMTt5123?Z5?g^cST~RiD+yenohnvwYfS!~}WQ6Mz~M30_2guC8raC4lx!n$dK3tQR4JnI@(c7aNoyNR*|a^|vo z^h0{w$Z#6d%{-4!<~W6|OwKU5y_09Tt-E}@+eLLr=3P!Z^F{?XD<5_AG@s=t!jt)Q zT2Go4G8i2*9Al2G+i`d%X->uscb+QN*F`WR+|-Xs$|;*KO&hkc4=H!yK-kJn+D3Y! zVklyoUJlCIBYEU2!$q`MA!(R~J6Rq*EYd-<)3kBZq}Zh6@=RGc#%%{q7UkLqKWOrl zaGMV1vmPOmzhH~x9xRlmX7`Y?`Am}Aq@`R-pzOTWwTPjovzFr;DQ9+JFA}XU>vG%5 z#khUgNbv>3rG1?p_x1^=2L~GJv%$x88-6>K<*sHYcv_oHgS-p(w~|I%@wDSc2d`zxv(l`+xJoBbR?S z-IV$2hUvOh&;0%BDRzDO)U})bDI>?P9Y25m$~%+iYJPg`3u7zWZ+=Y)1Z&HY)s_RR zFH0-q4W_6S1uBK$+vp%I&5%wG>IEm80&OU7E!3#dAVn#TdKkfb+XQ`-a%4fnC12p4 zB^wquy$Mz;ZGXC~Hh-wAJXGo2e6{UV>0UED7XJBF#)5dqGhd*t&ZiRdi!$g}sjjXH zLsAwDs0s_#)%lws^)*pYj;z|iCxma)3lBZk#|g_;_? zoS{p!T5Nb+so!Jkxj`!%J(}V>!U5vj<$|SXLEaJ@3!XlN84MQJ6l_No1>kPmey@; zt=&DX9Zcg+@VC+vf;vjZe+cR&AF@13tF_F`Ty~u zC_~kFo_GDT{paMU_g!0IR!Sp42CF)5aW5IT)f_fa^Kq|5TQ4db?z|0+EGmMD-i4k8 z&TB9F`(c#9Cl^`<j{5`iZ(y}F z&0|%!A|iqxcdp}b895QToI8JhM(>o*keu6%U38F_45BuX5fvv)yh+MCa;N!X{f})^ Tz2B2Jw|{IS_{8!5Ap`#fyL9vg literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.dll.ddNSi b/WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.dll.ddNSi new file mode 100644 index 0000000000000000000000000000000000000000..705dc662150ba114c60832cc20dda1fe55dae9f1 GIT binary patch literal 219 zcmW-bOAEp<5QMESiuxl8UQ56}v_14<>q#vIiymdItAxf>@(}&?n)t!)%wd_?e$U{T z`5LTRW_`1E^?;TM{+VN~bRwN=pn#76k<(eriFyp9|0Oos@zA)Ns@l$s#@+=9% zRS-l?3fC0Fcsa7sbB>CLGu}zT*yjE0gd+bEvIo(kC_ur`+>N;`;eit_t4>m7%3Utk g`gTL%z9{6_P-gR7*RhX|2iBjUg_=Il_&?6{2bYmKk^lez literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.xml b/WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.xml new file mode 100644 index 0000000..2bcc805 --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/gcache/metalib/WakaTime/DllExport.xml @@ -0,0 +1,49 @@ + + + + DllExport + + + + + To export this as __cdecl C-exported function. Named as current method where is used attribute. + [.NET DllExport] + + About our meta-information in user-code: + https://github.com/3F/DllExport/issues/16 + + + + + Specified calling convention. + + __cdecl is the default convention in .NET DllExport like for other C/C++ programs (Microsoft Specific). + __stdCall mostly used with winapi. + + https://msdn.microsoft.com/en-us/library/zkwh89ks.aspx + https://msdn.microsoft.com/en-us/library/56h2zst2.aspx + https://github.com/3F/Conari also uses __cdecl by default + + + + + Optional name for C-exported function. + + + + Optional name for C-exported function. + Specified calling convention. __cdecl is the default convention in .NET DllExport. + + + Optional name for C-exported function. + + + Specified calling convention. __cdecl is the default convention in .NET DllExport. + + + + To export this as __cdecl C-exported function. Named as current method where is used attribute. + + + + diff --git a/WakaTime/packages/DllExport.1.7.4/hMSBuild.bat b/WakaTime/packages/DllExport.1.7.4/hMSBuild.bat new file mode 100644 index 0000000..875d5f2 --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/hMSBuild.bat @@ -0,0 +1,522 @@ +@echo off +:: hMSBuild - 2.3.0.31675+78b6c77 +:: Copyright (c) 2017-2020 Denis Kuzmin [ x-3F@outlook.com ] GitHub/3F +:: Copyright (c) the hMSBuild contributors +set "aa=%~dp0" +set ab=%* +if not defined ab setlocal enableDelayedExpansion & goto bt +if not defined __p_call set ab=%ab:^=^^% +set ac=%ab:!= #__b_ECL## % +set ac=%ac:^= #__b_CRT## % +setlocal enableDelayedExpansion +set "ad=^" +set "ac=!ac:%%=%%%%!" +set "ac=!ac:&=%%ad%%&!" +:bt +set "ae=2.8.4" +set af=%temp%\hMSBuild_vswhere +set "ag=" +set "ah=" +set "ai=" +set "aj=" +set "ak=" +set "al=" +set "am=" +set "an=" +set "ao=" +set "ap=" +set "aq=" +set "ar=" +set "as=" +set /a at=0 +if not defined ab goto bu +set ac=!ac:/?=/h! +call :bv bo ac bp +goto bw +:bx +echo. +@echo hMSBuild 2.3.0.31675+78b6c77 +@echo Copyright (c) 2017-2020 Denis Kuzmin [ x-3F@outlook.com ] GitHub/3F +@echo Copyright (c) hMSBuild contributors +echo. +echo Licensed under the MIT License +@echo https://github.com/3F/hMSBuild +echo. +@echo. +@echo Usage: hMSBuild [args to hMSBuild] [args to msbuild.exe or GetNuTool core] +echo ------ +echo. +echo Arguments: +echo ---------- +echo -no-vs - Disable searching from Visual Studio. +echo -no-netfx - Disable searching from .NET Framework. +echo -no-vswhere - Do not search via vswhere. +echo. +echo -vsw-priority {IDs} - Non-strict components preference: C++ etc. +echo Separated by space: https://aka.ms/vs/workloads +echo. +echo -vsw-version {arg} - Specific version of vswhere. Where {arg}: +echo * 2.6.7 ... +echo * Keywords: +echo `latest` - To get latest remote version; +echo `local` - To use only local versions; +echo (.bat;.exe /or from +15.2.26418.1 VS-build) +echo. +echo -no-cache - Do not cache vswhere for this request. +echo -reset-cache - To reset all cached vswhere versions before processing. +echo -notamd64 - To use 32bit version of found msbuild.exe if it's possible. +echo -stable - It will ignore possible beta releases in last attempts. +echo -eng - Try to use english language for all build messages. +echo -GetNuTool {args} - Access to GetNuTool core. https://github.com/3F/GetNuTool +echo -only-path - Only display fullpath to found MSBuild. +echo -force - Aggressive behavior for -vsw-priority, -notamd64, etc. +echo -vsw-as "args..." - Reassign default commands to vswhere if used. +echo -debug - To show additional information from hMSBuild. +echo -version - Display version of hMSBuild. +echo -help - Display this help. Aliases: -help -h +echo. +echo. +echo ------ +echo Flags: +echo ------ +echo __p_call - Tries to eliminate the difference for the call-type invoking %~nx0 +echo. +echo -------- +echo Samples: +echo -------- +echo hMSBuild -notamd64 -vsw-version 2.6.7 "Conari.sln" /t:Rebuild +echo hMSBuild -vsw-version latest "Conari.sln" +echo. +echo hMSBuild -no-vswhere -no-vs -notamd64 "Conari.sln" +echo hMSBuild -no-vs "DllExport.sln" +echo hMSBuild vsSolutionBuildEvent.sln +echo. +echo hMSBuild -GetNuTool -unpack +echo hMSBuild -GetNuTool /p:ngpackages="Conari;regXwild" +echo. +echo hMSBuild -no-vs "DllExport.sln" ^|^| goto by +goto bz +:bw +set "au=" +set /a av=0 +:b0 +set aw=!bo[%av%]! +if [!aw!]==[-help] ( goto bx ) else if [!aw!]==[-h] ( goto bx ) else if [!aw!]==[-?] ( goto bx ) +if [!aw!]==[-nocachevswhere] ( +call :b1 -nocachevswhere -no-cache -reset-cache +set aw=-no-cache +) else if [!aw!]==[-novswhere] ( +call :b1 -novswhere -no-vswhere +set aw=-no-vswhere +) else if [!aw!]==[-novs] ( +call :b1 -novs -no-vs +set aw=-no-vs +) else if [!aw!]==[-nonet] ( +call :b1 -nonet -no-netfx +set aw=-no-netfx +) else if [!aw!]==[-vswhere-version] ( +call :b1 -vswhere-version -vsw-version +set aw=-vsw-version +) +if [!aw!]==[-debug] ( +set am=1 +goto b2 +) else if [!aw!]==[-GetNuTool] ( +call :b3 "accessing to GetNuTool ..." +for /L %%p IN (0,1,8181) DO ( +if "!escg:~%%p,10!"=="-GetNuTool" ( +set ax=!escg:~%%p! +call :b4 !ax:~10! +set /a at=%ERRORLEVEL% +goto bz +) +) +call :b3 "!aw! is corrupted: !escg!" +set /a at=1 +goto bz +) else if [!aw!]==[-no-vswhere] ( +set aj=1 +goto b2 +) else if [!aw!]==[-no-cache] ( +set ak=1 +goto b2 +) else if [!aw!]==[-reset-cache] ( +set al=1 +goto b2 +) else if [!aw!]==[-no-vs] ( +set ah=1 +goto b2 +) else if [!aw!]==[-no-netfx] ( +set ai=1 +goto b2 +) else if [!aw!]==[-notamd64] ( +set ag=1 +goto b2 +) else if [!aw!]==[-only-path] ( +set an=1 +goto b2 +) else if [!aw!]==[-eng] ( +chcp 437 >nul +goto b2 +) else if [!aw!]==[-vsw-version] ( set /a "av+=1" & call :b5 bo[!av!] v +set ae=!v! +call :b3 "selected vswhere version:" v +set ao=1 +goto b2 +) else if [!aw!]==[-version] ( +@echo 2.3.0.31675+78b6c77 +goto bz +) else if [!aw!]==[-vsw-priority] ( set /a "av+=1" & call :b5 bo[!av!] v +set ap=!v! +goto b2 +) else if [!aw!]==[-vsw-as] ( set /a "av+=1" & call :b5 bo[!av!] v +set aq=!v! +goto b2 +) else if [!aw!]==[-stable] ( +set ar=1 +goto b2 +) else if [!aw!]==[-force] ( +set as=1 +goto b2 +) else ( +call :b3 "non-handled key:" bo{%av%} +set au=!au! !bo{%av%}! +) +:b2 +set /a "av+=1" & if %av% LSS !bp! goto b0 +:bu +if defined al ( +call :b3 "resetting vswhere cache" +rmdir /S/Q "%af%" 2>nul +) +if not defined aj if not defined ah ( +call :b6 bq +if defined bq goto b7 +) +if not defined ah ( +call :b8 bq +if defined bq goto b7 +) +if not defined ai ( +call :b9 bq +if defined bq goto b7 +) +echo MSBuild tools was not found. Use `-debug` key for details. +set /a at=2 +goto bz +:b7 +if defined an ( +echo !bq! +goto bz +) +set ay="!bq!" +echo hMSBuild: !ay! +if not defined au goto b_ +set au=%au: #__b_CRT## =^% +set au=%au: #__b_ECL## =^!% +set au=!au: #__b_EQ## ==! +:b_ +call :b3 "Arguments: " au +!ay! !au! +set /a at=%ERRORLEVEL% +goto bz +:bz +exit/B !at! +:b6 +call :b3 "trying via vswhere..." +if defined ao if not "!ae!"=="local" ( +call :ca a5 az +call :cb a5 br az +set %1=!br! +exit/B 0 +) +call :cc a5 +set "az=" +if not defined a5 ( +if "!ae!"=="local" ( +set "%1=" & exit/B 2 +) +call :ca a5 az +) +call :cb a5 br az +set %1=!br! +exit/B 0 +:cc +set a0=!aa!vswhere +call :cd a0 bs +if defined bs set "%1=!a0!" & exit/B 0 +set a1=Microsoft Visual Studio\Installer +if exist "%ProgramFiles(x86)%\!a1!" set "%1=%ProgramFiles(x86)%\!a1!\vswhere" & exit/B 0 +if exist "%ProgramFiles%\!a1!" set "%1=%ProgramFiles%\!a1!\vswhere" & exit/B 0 +call :b3 "local vswhere is not found." +set "%1=" +exit/B 3 +:ca +if defined ak ( +set a2=!af!\_mta\%random%%random%vswhere +) else ( +set a2=!af! +if defined ae ( +set a2=!a2!\!ae! +) +) +call :b3 "tvswhere: " a2 +if "!ae!"=="latest" ( +set a3=vswhere +) else ( +set a3=vswhere/!ae! +) +set a4=/p:ngpackages="!a3!:vswhere" /p:ngpath="!a2!" +call :b3 "GetNuTool call: " a4 +setlocal +set __p_call=1 +if defined am ( +call :b4 !a4! +) else ( +call :b4 !a4! >nul +) +endlocal +set "%1=!a2!\vswhere\tools\vswhere" +set "%2=!a2!" +exit/B 0 +:cb +set "a5=!%1!" +set "a6=!%3!" +call :cd a5 a5 +if not defined a5 ( +call :b3 "vswhere tool does not exist" +set "%2=" & exit/B 1 +) +call :b3 "vswbin: " a5 +set "a7=" +set "a8=" +set a9=!ap! +if not defined aq set aq=-products * -latest +call :b3 "assign command: " aq +:ce +call :b3 "attempts with filter: " a9 a7 +set "a_=" & set "ba=" +for /F "usebackq tokens=1* delims=: " %%a in (`"!a5!" -nologo !a7! -requires !a9! Microsoft.Component.MSBuild !aq!`) do ( +if /I "%%~a"=="installationPath" set a_=%%~b +if /I "%%~a"=="installationVersion" set ba=%%~b +if defined a_ if defined ba ( +call :cf a_ ba a8 +if defined a8 goto cg +set "a_=" & set "ba=" +) +) +if not defined ar if not defined a7 ( +set a7=-prerelease +goto ce +) +if defined a9 ( +set bb=Tools was not found for: !a9! +if defined as ( +call :b3 "Ignored via -force. !bb!" +set "a8=" & goto cg +) +call :ch "!bb!" +set "a9=" & set "a7=" +goto ce +) +:cg +if defined a6 if defined ak ( +call :b3 "reset vswhere " a6 +rmdir /S/Q "!a6!" +) +set %2=!a8! +exit/B 0 +:cf +set a_=!%1! +set ba=!%2! +call :b3 "vspath: " a_ +call :b3 "vsver: " ba +if not defined ba ( +call :b3 "nothing to see via vswhere" +set "%3=" & exit/B 3 +) +for /F "tokens=1,2 delims=." %%a in ("!ba!") do ( +set ba=%%~a.0 +) +if !ba! geq 16 set ba=Current +if not exist "!a_!\MSBuild\!ba!\Bin" set "%3=" & exit/B 3 +set bc=!a_!\MSBuild\!ba!\Bin +call :b3 "found path via vswhere: " bc +if exist "!bc!\amd64" ( +call :b3 "found /amd64" +set bc=!bc!\amd64 +) +call :ci bc bc +set %3=!bc! +exit/B 0 +:b8 +call :b3 "Searching from Visual Studio - 2015, 2013, ..." +for %%v in (14.0, 12.0) do ( +call :cj %%v Y & if defined Y ( +set %1=!Y! +exit/B 0 +) +) +call :b3 "-vs: not found" +set "%1=" +exit/B 0 +:b9 +call :b3 "Searching from .NET Framework - .NET 4.0, ..." +for %%v in (4.0, 3.5, 2.0) do ( +call :cj %%v Y & if defined Y ( +set %1=!Y! +exit/B 0 +) +) +call :b3 "-netfx: not found" +set "%1=" +exit/B 0 +:cj +call :b3 "check %1" +for /F "usebackq tokens=2* skip=2" %%a in ( +`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\%1" /v MSBuildToolsPath 2^> nul` +) do if exist %%b ( +set bc=%%~b +call :b3 ":msbfound " bc +call :ci bc br +set %2=!br! +exit/B 0 +) +set "%2=" +exit/B 0 +:ci +set bc=!%~1!\MSBuild.exe +set %2=!bc! +if not defined ag ( +exit/B 0 +) +set bd=!bc:Framework64=Framework! +set bd=!bd:\amd64=! +if exist "!bd!" ( +call :b3 "Return 32bit version because of -notamd64 key." +set %2=!bd! +exit/B 0 +) +if defined as ( +call :b3 "Ignored via -force. Only 64bit version was found for -notamd64" +set "%2=" & exit/B 0 +) +call :ch "Return 64bit version. Found only this." +exit/B 0 +:cd +call :b3 "bat/exe: " %1 +if exist "!%1!.bat" set %2="!%1!.bat" & exit/B 0 +if exist "!%1!.exe" set %2="!%1!.exe" & exit/B 0 +set "%2=" +exit/B 0 +:b1 +call :ch "'%~1' is obsolete. Use alternative: %~2 %~3" +exit/B 0 +:ch +echo [*] WARN: %~1 +exit/B 0 +:b3 +if defined am ( +set be=%1 +set be=!be:~0,-1! +set be=!be:~1! +echo.[%TIME% ] !be! !%2! !%3! +) +exit/B 0 +:bv +set bf=!%2! +:ck +for /F "tokens=1* delims==" %%a in ("!bf!") do ( +if "%%~b"=="" ( +call :cl %1 !bf! %3 +exit/B 0 +) +set bf=%%a #__b_EQ## %%b +) +goto ck +:cl +set "bg=%~1" +set /a av=-1 +:cm +set /a av+=1 +set %bg%[!av!]=%~2 +set %bg%{!av!}=%2 +shift & if not "%~3"=="" goto cm +set /a av-=1 +set %1=!av! +exit/B 0 +:b5 +set bh=!%1! +set "bh=%bh: #__b_CRT## =^%" +set "bh=%bh: #__b_ECL## =^!%" +set bh=!bh: #__b_EQ## ==! +set %2=!bh! +exit/B 0 +:b4 +setlocal disableDelayedExpansion +@echo off +:: GetNuTool - Executable version +:: Copyright (c) 2015-2018,2020 Denis Kuzmin [ x-3F@outlook.com ] +:: https://github.com/3F/GetNuTool +set bi=gnt.core +set bj="%temp%\%random%%random%%bi%" +if "%~1"=="-unpack" goto cn +set bk=%* +if defined __p_call if defined bk set bk=%bk:^^=^% +set bl=%__p_msb% +if defined bl goto co +if "%~1"=="-msbuild" goto cp +for %%v in (4.0, 14.0, 12.0, 3.5, 2.0) do ( +for /F "usebackq tokens=2* skip=2" %%a in ( +`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\%%v" /v MSBuildToolsPath 2^> nul` +) do if exist %%b ( +set bl="%%~b\MSBuild.exe" +goto co +) +) +echo MSBuild was not found. Try -msbuild "fullpath" args 1>&2 +exit/B 2 +:cp +shift +set bl=%1 +shift +set bm=%bk:!= #__b_ECL## % +setlocal enableDelayedExpansion +set bm=!bm:%%=%%%%! +:cq +for /F "tokens=1* delims==" %%a in ("!bm!") do ( +if "%%~b"=="" ( +call :cr !bm! +exit/B %ERRORLEVEL% +) +set bm=%%a #__b_EQ## %%b +) +goto cq +:cr +shift & shift +set "bk=" +:cs +set bk=!bk! %1 +shift & if not "%~2"=="" goto cs +set bk=!bk: #__b_EQ## ==! +setlocal disableDelayedExpansion +set bk=%bk: #__b_ECL## =!% +:co +call :ct +call %bl% %bj% /nologo /p:wpath="%cd%/" /v:m /m:4 %bk% +set "bl=" +set bn=%ERRORLEVEL% +del /Q/F %bj% +exit/B %bn% +:cn +set bj="%cd%\%bi%" +echo Generating minified version in %bj% ... +:ct +%bj% +set a=PropertyGroup&set b=Condition&set c=ngpackages&set d=Target&set e=DependsOnTargets&set f=TaskCoreDllPath&set g=MSBuildToolsPath&set h=UsingTask&set i=CodeTaskFactory&set j=ParameterGroup&set k=Reference&set l=Include&set m=System&set n=Using&set o=Namespace&set p=IsNullOrEmpty&set q=return&set r=string&set s=delegate&set t=foreach&set u=WriteLine&set v=Combine&set w=Console.WriteLine&set x=Directory&set y=GetNuTool&set z=StringComparison&set _=EXT_NUSPEC +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 XarYm2!Y4z!ALTi4(g|!Oxm^DTgMf(P literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/tools/Mono.Cecil.dll b/WakaTime/packages/DllExport.1.7.4/tools/Mono.Cecil.dll new file mode 100644 index 0000000000000000000000000000000000000000..bdb99dfcf51049b7329b8c1641064e4115430e97 GIT binary patch literal 345088 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

E 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

Sqg^6Qjf9tL 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 + + + MvsSln + + + +

+ Common context - any type or type by default + + + + + 'build' action + + + + + 'rebuild' action + + + + + 'clean' action + + + + + 'build' action for selection + + + + + 'rebuild' action for selection + + + + + 'clean' action for selection + + + + + 'build' action for project + + + + + 'rebuild' action for project + + + + + 'clean' action for project + + + + + 'build' action for project + + + + + 'rebuild' action for project + + + + + 'clean' action for project + + + + + Basic item of configuration and platform. + + + + + The custom rule of the Configuration and Platform names. + + + + + To use an `Sensitivity` logic when comparing {IConfPlatform} + together with `==` , `!=`. + + + + + {ConfigurationByRule} with optional case insensitive logic. + Uses {SensitivityComparing} flag. + + + + + {PlatformByRule} with optional case insensitive logic. + Uses {SensitivityComparing} flag. + + + + + Checking an config/platform by using {Rule} instance. + + Configuration name. + Platform name. + Case insensitive flag. + + + + + Compatible format: 'configname'|'platformname' + http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.shell.interop.ivscfg.get_displayname.aspx + + + + + Project Configuration + + + + + Project Guid. + + + + + Existence of `.Build.0` to activate project for build: + {A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.CI_Release|Any CPU.Build.0 = Release|Any CPU + + + + + Existence of `.Deploy.0` to activate project for deployment: + {A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.CI_Release|Any CPU.Deploy.0 = Release|Any CPU + + + + + Link to solution configuration. + + + + + Solution Configuration + + + + + Solution Folder. + + + + + .csproj + + + + + .dbproj + + + + + .fsproj + + + + + .vbproj + + + + + .vcxproj + + + + + .vjsproj + + + + + .wdproj + + + + + + + + + + .deployproj + + + + + .sfproj + + + + + .fsproj SDK based type. + https://github.com/dotnet/project-system/blob/master/docs/opening-with-new-project-system.md + + + + + .vbproj SDK based type. + https://github.com/dotnet/project-system/blob/master/docs/opening-with-new-project-system.md + + + + + .csproj SDK based type. + https://github.com/dotnet/project-system/blob/master/docs/opening-with-new-project-system.md + + + + + Reserved domain for MvsSln purposes. + + + + + Evaluate project type via Guid. + + Project type Guid. + + + + + Evaluate Guid via ProjectType enum. + + + + + + + The custom rule of the Configuration and Platform names. + + + + + To use an `Sensitivity` logic when comparing {IConfPlatform} + together with `==` , `!=`. + + + + + {ConfigurationByRule} with optional case insensitive logic. + Uses {SensitivityComparing} flag. + + + + + {PlatformByRule} with optional case insensitive logic. + Uses {SensitivityComparing} flag. + + + + + Checking an config/platform by using {Rule} instance. + + Configuration name. + Platform name. + Case insensitive flag. + + + + + Project Guid. + + + + + Existence of `.Build.0` to activate project for build: + {A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.CI_Release|Any CPU.Build.0 = Release|Any CPU + + + + + Existence of `.Deploy.0` to activate project for deployment: + {A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.CI_Release|Any CPU.Deploy.0 = Release|Any CPU + + + + + Link to solution configuration. + + + + + Gets unique id of listener. + + + + + Rules of platform names. + details: https://github.com/3F/vsSolutionBuildEvent/issues/14 + + MS Connect Issue #503935 + + Platform name. + + + + + Rules of configuration names. + + Configuration name. + + + + + Contains handler which is ready to process this section, or already processes. + + + + + Known line number to this section. + + + + + Raw data from stream. + + + + + To ignore this from other sections. + + + + + User's mixed object for anything. + + + + + To update handler which is ready to process this section. + + New handler. + + + + Clone data from this section into new ISection instance. + + + + + + Available solution handlers. + + + + + Dictionary of raw xml projects by Guid. + Will be used if projects cannot be accessed from filesystem. + + + + + To reset and register all default handlers. + + + + + Parse of selected .sln file. + + Solution file + Allowed type of operations. + + + + + To parse data from used stream. + + + Allowed type of operations. + + + + + Get first project from defined list. + + + + + Get last project from defined list. + + + + + Get first project in Project Build Order. + + + + + + + Get last project in Project Build Order. + + + + + + + Get project by Guid string. + + Identifier of project. + + + + + List of project Guids. + In direct order of definitions with considering of ProjectDependencies. + + + + + List of projects by Guid. + + + + + Projects and their dependencies. + + + + + Full path to root solution directory. + + + + + Full path to an solution file. + + + + + Processed type for result. + + + + + Header information. + + + + + Solution configurations with platforms. + + + + + Project configurations with platforms. + + + + + Alias of the relation of solution configuration to project configurations. + + + + + All found projects in solution. + + + + + Alias for ProjectItems and its configurations. + + + + + List of solution folders. + + + + + Default Configuration and Platform for current solution. + + + + + All available global properties for solution. + Use optional {PropertyNames} to access to popular properties. + + + + + Solution Project Dependencies. + + + + + Optional Key[-Value] records like `SolutionGuid` and so on + that can be presented inside an ExtensibilityGlobals section. + + ie. Flags/Key-only records are possible too (values will contain null). + + + + + Environment for current data. + + + + + Contains map of all found (known/unknown) solution data. + This value is never null. + + + + + Solution configurations with platforms. + + + + + Project configurations with platforms. + + + + + All found projects in solution. + + + + + List of solution folders. + + + + + Updates instance of the Solution Project Dependencies. + + + + + + Updates header info. + + + + + + Isolated environment. + + + + Prepared data from solution parser. + Specified sln properties. + Optional dictionary of raw xml projects by Guid. + + + Prepared data from solution parser. + Optional dictionary of raw xml projects by Guid. + + + + Number of elements contained in the thread-safe collection. + + + + + Gets the object used to synchronize access to the thread-safe collection. + + + + + Adds an listener to thread-safe collection. + + + + + + + Removes specified listener from the collection. + + + + + + + Reset all collection. + + + + + Determines whether the collection contains an listener. + + + + + + + Checks existence of listener by Guid. + + + + + + + Get listener by specific id. + + + null if not found. + + + + Access to project instance of Microsoft.Build.Evaluation. + + + + + ProjectItem and its configurations. + + + + + Access to solution data if this was initialized with its context. + + + + + Provides unique identifier for project (not instance). + + + + + The Guid of this project. + + + + + The ProjectName of this project. + + + + + Gets the root directory for this project. + + + + + Gets the full path to the project source file. + + + + + Access to global properties of project. + + + + + Saves the project to the file system, if modified. + + + + + Saves the project to the file system, if modified or if the path to the project + source code changes, using the given character encoding. + + Destination path of the the project source code. + + + + + To add 'Import' element. + + Target project. + To check existence of target via 'Condition' attr. + Optional 'Label' attr. + true value if target has been added. + + + + To add 'import' element. + + Target project. + Use 'Condition' attr. Can be null to avoid this attr. + Optional 'Label' attr. + true value if target has been added. + + + + To add 'import' element. + + Specified 'Import' element to add. + true value if it has been added. + + + + To add 'import' elements inside ImportGroup. + Will stop the adding if some of this cannot be added. + + List of specified 'Import' elements to add. + Optional 'Condition' attr for group. + Optional 'Label' attr for group. + true value only if all 'import' elements has been successfully added. False if one of this is failed. + + + + To remove the first found 'Import' element. + + Target project. + true value if it has been found and removed. + + + + To remove 'Import' element. + + Specified 'Import' element to remove. + Holds empty group if it was inside. + true value if it has been removed. + + + + Retrieve the first found 'Import' element if it exists. + + Optional filter by the Project attribute. + + + + + Retrieve the first found 'Import' element if it exists. + + Filter by the Project attribute. Case-insensitive variant. Can be null to skip comparing. + Filter by the Label attribute. Case-insensitive variant. Can be null to skip comparing. + Equals() if true or EndsWith() function for comparing Project attribute. + + + + + Retrieve the all found 'Import' elements. + + Optional filter by the Project attribute. + + + + + Retrieve the all found 'Import' elements. + + Filter by the Project attribute. Case-insensitive variant. Can be null to skip comparing. + Filter by the Label attribute. Case-insensitive variant. Can be null to skip comparing. + Equals() if true or EndsWith() function for comparing Project attribute. + + + + + The property in this project that has the specified name. + + The name of the property. + If true, will return default value for any special and imported properties type. + null if no property of that name and scope exists. + + + + Sets or adds a property with the given name and unevaluated value to the project. + + The name of the property. + The new unevaluated value of the property. + + + + + Sets or adds a property with the given name and unevaluated value to the project. + + The name of the property. + The new unevaluated value of the property. + Use 'Condition' attr. + + + + + Sets or adds properties inside group. + To remove group, just delete all properties inside. + + List of properties name=unevaluatedValue. + Optional 'Condition' attr for group. + + + + Sets or adds properties inside group. + To remove group, just delete all properties inside. + + List of properties via PropertyItem. + Optional 'Condition' attr for group. + + + + Removes an property from the project. + + The name of the property. + if true, will reevaluate data of project after removing. + + + + + Removes an property from the project. + + + if true, will reevaluate data of project after removing. + + + + + All properties in this project. + + + + + + Reevaluates data of project if necessary. + For example, if project contains 2 or more same properties by name: + * After RemoveProperty(...) the second property still will be unavailable for GetProperty(...) + because its node does not contain this at all. Use this to update nodes. + + + + + Makes relative path from this project. + + + + + + + Makes full path using path to this project as the base. + + any path relative to the current project. + + + + + Adds 'Reference' item. + + Include attribute. + + + + + Adds 'Reference' item. + + Assembly for adding. + Meta 'Private' - i.e. Copy Local. + Meta 'EmbedInteropTypes'. + Meta 'SpecificVersion'. + + + + + Adds 'Reference' item. + + Full path to binary file. + Meta 'Private' - i.e. Copy Local. + Meta 'EmbedInteropTypes'. + Meta 'SpecificVersion'. + + + + + Adds 'Reference' item. + + Include attribute. + Meta 'HintPath'. + Meta 'Private' - i.e. Copy Local. + Meta 'EmbedInteropTypes'. + Meta 'SpecificVersion'. + + + + + Adds 'ProjectReference' item. + + Information about project. + + + + + Adds 'ProjectReference' item. + + Path to project file. + The Guid of project. + The name of project. + Make relative path. + + + + + Adds 'PackageReference' item. + + Package id: `MvsSln`; `Conari`; ... + Package version: 2.5; 1.6.0-beta3; ... + Optional metadata, eg. ExcludeAssets="runtime" etc. + + + + + Adds an item to the project. + + The item type. + The Include attribute of this item. + Optional metadata list. + true if item has been added. + + + + Retrieve all available items from projects. + + The item type or null value to get all. + The unevaluated value of the Include attribute or null value to get all. + + + + + Retrieve first item by type. + + The item type. + The unevaluated value of the Include attribute. + + + + + Get all available 'Reference' items. + + The Include attribute to be found or null value to get all. + + + + + Get all available 'ProjectReference' items. + + The Include attribute to be found or null value to get all. + + + + + Get first available 'Reference' item. + + The Include attribute to be found. + + + + + Get first available 'ProjectReference' item. + + The Include attribute to be found. + + + + + Get first available 'PackageReference' item. + + Package id: `MvsSln`; `Conari`; ... + + + + + Remove first item from project by type. + + The item type. + The unevaluated value of the Include attribute. + + + + + Remove selected item from project. + + + + + + + Remove 'Reference' item from project. + + The unevaluated value of the Include attribute. + + + + + Remove 'ProjectReference' item from project. + + The unevaluated value of the Include attribute. + + + + + Remove 'PackageReference' item from project. + + Package id: `MvsSln`; `Conari`; ... + + + + + Access to Solution data. + + + + + List of all evaluated projects at current time + with unique configuration for each instance. + + + + + List of evaluated projects that was filtered by Guid. + + + + + Access to global Microsoft.Build.Evaluation.ProjectCollection. + Only if you know what you're doing. + + + + + List of valid projects from {PrjCollection}. + Such as something except `.user`,`.metaproj` but contains FirstChild / LastChild XML node. + Only if you know what you're doing. + + + + + Find project by Guid. + + Guid of project. + Specific configuration. + + + + + Find project by Guid. + + Guid of project. + + + + + Find project by full path to file. + + Full path to file. + Specified configuration. + Try to load if not found in current project collection. + + + + + Find or load project by full path to file. + + Full path to file. + Specified configuration. + Optional properties when loading or null. + + + + + Find project by full path to file. + + Full path to file. + + + + + Find projects by name. + + ProjectName. + Specific configuration. + + + + + Find projects by name. + + ProjectName. + + + + + Get or load project using global collection. + Uses default configuration. + + Specific project. + + + + + Get or load project using global collection. + + Specified project. + Configuration of project to load. + + + + + Get or load project using global collection. + + Specified project. + + + + + + Get project properties from solution properties. + + + Solution properties. + + + + + Load available projects via configurations. + It will be added without unloading of previous. + + Specified list or null value to load all available. + Loaded projects. + + + + Load the only one configuration for each available project. + + Loaded projects. + + + + Assign an existing `Microsoft.Build.Evaluation.Project` instances for local collection. + + Will use {ValidProjects} if null. + + + + + Adds `Microsoft.Build.Evaluation.Project` instance into IXProject collection if it does not exist. + + + + + + + Prepares data from `Microsoft.Build.Evaluation.Project` instance. + + + + + + + Unloads all evaluated projects at current time. + Decreases `IXProjectEnv.Projects` collection. + + When true, may throw exception if some project cannot be unloaded by some reason. + + + + Unloads specified project. + Decreases `IXProjectEnv.Projects` collection. + + + False if project was not unloaded by some reason. Otherwise true. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Value cannot be null or empty.. + + + + + Unspecified value for handler. + + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + + Default indent. + + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + + Gets unique id of listener. + + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + Extensible Key[-Value] records like `SolutionGuid` and so on. + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + Information about folders. + + + Information about project items. + + + Information about folders. + Information about project items. + + + + All found projects in solution. + + + + + Solution Project Dependencies. + + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + List of projects in solution. + Solution Project Dependencies. + + + + Project configurations with platforms. + + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + Project configurations with platforms. + + + + List of solution folders. + + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + List of solution folders. + + + + Solution configurations with platforms. + + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + Solution configurations with platforms. + + + + Header information. + + + + + To extract prepared raw-data. + + Any object data which is ready for this IObjHandler. + Final part of sln data. + + + + Properties of project in solution file + + + + + Project GUID. + + + + + Project type GUID. + + + + + Project name. + + + + + Relative path to project. + + + + + Evaluated full path to project. + + + + + Contains parent item or null if it's a root element. + + + + + Evaluated project type. + + + + + Evaluate project type via GUID. + + Project type GUID. + + + + Project name. + Project type GUID. + Parent folder. + + + Project name. + Project type GUID. + + Parent folder. + To evaluate `fullPath` define path to solution directory. + + + Project GUID. + Project name. + Project type GUID. + Parent folder. + + + Project GUID. + Project name. + Project type GUID. + Relative path to project. + Parent folder. + To evaluate `fullPath` define path to solution directory. + + + Project GUID. + Project name. + Relative path to project. + Project type GUID. + To evaluate `fullPath` define path to solution directory. + + + Initialize data from other project. + + + Initialize data from raw line. + To evaluate `fullPath` define path to solution directory. + + + + We reserved raw type for future new Guids before our updates. + + + + + + Aggregates links to ProjectItem and its configurations. + + + + + Use it for additional work with project references and it's dependencies in ISlnPDManager manner. + + + + + List of ProjectReferences by project Guid. + + + + + Parent data of the solution ProjectDependencies that initialized this object. + + + + + Access to XProjects. + + + + + Get ProjectReferences by project Guid. + + Identifier of project. + All found ProjectReferences. + + + Parent data. + List of evaluated projects to consider of dependencies. + + + + Legacy Visual Basic. + + + + + Legacy C#. + + + + + Legacy F#. + + + + + Service Fabric project. + + + + + SDK based Visual Basic. + + + + + SDK based F#. + + + + + SDK based C#. + + + + + data without whitespace characters. + + + + + + + + + + + + Pattern of 'Project(' line - based on crackProjectLine from Microsoft.Build.BuildEngine.Shared.SolutionParser + + + + + Pattern of 'ProjectSection(ProjectDependencies)' lines - based on crackPropertyLine from Microsoft.Build.BuildEngine.Shared.SolutionParser + + + + + Rules of platform names. + details: https://github.com/3F/vsSolutionBuildEvent/issues/14 + + MS Connect Issue #503935 + + Platform name. + + + + + Rules of configuration names. + + Configuration name. + + + + + Contains handler which is ready to process this section, or already processes. + + + + + Known line number to this section. + + + + + Raw data from stream. + + + + + To ignore this from other sections. + + + + + User's mixed object for anything. + + + + + To update handler which is ready to process this section. + + New handler. + + + + Clone data from this section into new ISection instance. + + + + + + TODO: review + + + + + + + + Completeness of implementation. + Aggregates additional handlers that will process same line. + + + + + Action with incoming line. + + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + The logic before processing file. + + + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + The logic after processing file. + + + + + + Used encoding for all data. + + + + + Prepared solution data. + + + + + Unspecified storage of the user scope. + + + + + Reads a line of characters from stream. + + + + + + Reads a line of characters from stream with tracking. + + + + + + + Resets stream and its related data. + + + + + Tracking for line. + + + Specific handler if used, or null as an unspecified. + + + + Transact tracking for line. + + + Specific handler if used, or null as an unspecified. + + + + + Transact tracking for line. + + Provides requested section. + + Specific handler if used, or null as an unspecified. + + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + Completeness of implementation. + Aggregates additional handlers that will process same line. + + + + + Action with incoming line. + + + + + Gets unique id of listener. + + + + + The logic before processing file. + + + + + + The logic after processing file. + + + + + Initialize data from raw line. + Path to solution directory. + + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + Completeness of implementation. + Aggregates additional handlers that will process same line. + + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + + [Projects Guid] [Solution pair] [ltype] [Project pair] + {A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.CI_Release|Any CPU.ActiveCfg = Release|Any CPU - available configuration + {A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.CI_Release|Any CPU.Build.0 = Release|Any CPU - active Build (this line exists only when this flag is true) + {A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.CI_Release|Any CPU.Deploy.0 = Release|Any CPU - active Deployment (this line exists only when this flag is true) + + Possible symbols for Solution/Project pair includes `.` and `=`: + https://github.com/3F/MvsSln/issues/13 + + -_- awesome format as follow: + {A7BF1F9C-F18D-423E-9354-859DC3CFAFD4}.Debug.x64.x86|Any.CPU.etc.Build.0 = Debug.x64.x86|Any.CPU.etc + \___________________________________/ \___________/ \_________/ \_____/ ^ \___________/ \_________/ + + For `=` we will not support this due to errors by VS itself (VS bug from VS2010 to modern VS2019) + https://github.com/3F/MvsSln/issues/13#issuecomment-501346079 + + + + + + + + Project Build Order from .sln file. + + Please note: initially it was part of https://github.com/3F/vsSolutionBuildEvent + + + + + Direct order of identifiers. + + + + + Map of projects. + + + + + List of project Guids. + In direct order of definitions with considering of ProjectDependencies. + + + + + Projects and their dependencies. + + + + + List of projects by Guid. + + + + + Get first project from defined list. + + + + + Get last project from defined list. + + + + + Get first project in Project Build Order. + + + + + + + Get last project in Project Build Order. + + + + + + + Get project by Guid string. + + Identifier of project. + + + + + Action with incoming line. + + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + The logic before processing file. + + + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + The logic after processing file. + + + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + Checks the readiness to process data. + + + True value if it's ready at current time. + + + + Condition for line to continue processing. + + + true value to continue. + + + + New position in stream. + + + Received line. + true if it was processed by current handler, otherwise it means ignoring. + + + + Used encoding for all data. + + + + + Prepared solution data. + + + + + Unspecified storage of the user scope. + + + + + Reads a line of characters from stream. + + + + + + Reads a line of characters from stream with tracking. + + + + + + + Resets stream and its related data. + + + + + Non-Transact tracking for line. + + + Specific handler if used, or null as an unspecified. + + + + Transact tracking for line. + + + Specific handler if used, or null as an unspecified. + + + + + Transact tracking for line. + + Provides requested section. + + Specific handler if used, or null as an unspecified. + + + + + + + + + + + + ... Format Version 12.00 + + + + + # Visual Studio 15 + ... + # Visual Studio 2010 + ... + + + + + VisualStudioVersion = 15.0.26730.15 + + + + + MinimumVisualStudioVersion = 10.0.40219.1 + + + + + Parser for basic elements from .sln files. + + Please note: initially it was part of https://github.com/3F/vsSolutionBuildEvent + + + + + The name of file if used stream from memory. + + + + + To use specific Encoding by default for some operations with data. + + + + + Available solution handlers. + + + + + Dictionary of raw xml projects by Guid. + Will be used if projects cannot be accessed from filesystem. + + + + + To reset and register all default handlers. + + + + + Parse of selected .sln file. + + Solution file + Allowed type of operations. + + + + + To parse data from used stream. + + + Allowed type of operations. + + + + To register and activate all handlers by default if true. + + + + TODO: another way to manage aliases for data. + + + + + + Full path to root solution directory. + + + + + Full path to an solution file. + + + + + Processed type for result. + + + + + Header information. + + + + + Solution configurations with platforms. + + + + + Project configurations with platforms. + + + + + Alias of the relation of solution configuration to project configurations. + + + + + All found projects in solution. + + + + + Alias for ProjectItems and its configurations. + + + + + List of solution folders. + + + + + Default Configuration and Platform for current solution. + + + + + All available global properties for solution. + Use optional {PropertyNames} to access to popular properties. + + + + + Solution Project Dependencies. + See also `ProjectReferences` class if you need additional work with project references. + + + + + Optional Key[-Value] records like `SolutionGuid` and so on + that can be presented inside an ExtensibilityGlobals section. + + ie. Flags/Key-only records are possible too (values will contain null). + + + + + Environment for current data. + + + + + Contains map of all found (known/unknown) solution data. + This value is never null. + + + + + Solution configurations with platforms. + + + + + Project configurations with platforms. + + + + + All found projects in solution. + + + + + List of solution folders. + + + + + Updates instance of the Solution Project Dependencies. + + + + + + Updates header info. + + + + + + Available writers to process sections. + + + + + To write all not ignored sections with rules from handlers. + + + + + + To write a single section with rules from handlers. + + + + + Destination file. + Should contain writers by specific types of readers. + + + Destination file. + Should contain writers by specific types of readers. + Use specific encoding. + + + + Should contain writers by specific types of readers. + + + + Information about folder section. + + + + + Available items for this folder. + + + + + Elements will not compared. + + + + + + Not null Folder GUID. + Not null Solution folder name. + Optional items inside. + + + + Not null Folder GUID. + Not null Solution folder name. + + + + Not null Folder GUID. + Not null Solution folder name. + Parent folder. + Optional items inside. + + + + Not null Folder GUID. + Not null Solution folder name. + Parent folder. + Optional items inside. + + + + Not null Solution folder name. + Optional items inside. + + + + Not null Solution folder name. + Optional items inside. + + + + Not null Solution folder name. + Parent folder. + Optional items inside. + + + + Not null Solution folder name. + Parent folder. + Optional items inside. + + + + Information about folder. + List of items for this folder. + + + Information about folder. + List of items for this folder. + + + Initialize data from other folder. + + + + Thread-safe container of listeners. + + IListener based type. + + + + justification: A common using of SynchSubscribers should be as an only sequential accessing to all elements at once - that is O(1). + And most important - it's contiguous storage in order of adding of elements, because we need to save priority by listeners. + But for any single accessing it should be O(n), thus we also use O(1) accessor below to improve performance of the List type. + + + + + A shallow copy of listeners which has O(1) for any single accessing to elements. + This is not an ordered, thread-safe container, and unfortunately we can't use this as primarily container (read justification above). + + + + + Number of elements contained in the thread-safe collection. + + + + + Gets the object used to synchronize access to the thread-safe collection. + + + + + Adds an listener to thread-safe collection. + + + + + + + Removes specified listener from the collection. + + + + + + + Reset all collection. + + + + + Determines whether the collection contains an listener. + + + + + + + Checks existence of listener by Guid. + + + + + + + Get listener by specific id. + + + null if not found. + + + + Access to project instance of Microsoft.Build.Evaluation. + + + + + ProjectItem and its configurations. + + + + + Access to solution data if this was initialized with its context. + + + + + Provides unique identifier for project (not instance). + + + + + The Guid of this project. + + + + + The ProjectName of this project. + + + + + Gets the root directory for this project. + + + + + Gets the full path to the project source file. + + + + + Access to global properties of project. + + + + + The base path for MakeRelativePath() functions etc. + + + + + Saves the project to the file system, if modified. + //TODO: ~"... has been modified outside the environment." + + + + + Saves the project to the file system, if modified or if the path to the project + source code changes, using the given character encoding. + + Destination path of the the project source code. + + + + + To add 'Import' element. + + Target project. + To check existence of target via 'Condition' attr. + Optional 'Label' attr. + true value if target has been added. + + + + To add 'import' element. + + Target project. + Use 'Condition' attr. Can be null to avoid this attr. + Optional 'Label' attr. + true value if target has been added. + + + + To add 'import' element. + + Specified 'Import' element to add. + true value if it has been added. + + + + To add 'import' elements inside ImportGroup. + Will stop the adding if some of this cannot be added. + + List of specified 'Import' elements to add. + Optional 'Condition' attr for group. + Optional 'Label' attr for group. + true value only if all 'import' elements has been successfully added. False if one of this is failed. + + + + To remove the first found 'Import' element. + + Target project. + true value if it has been found and removed. + + + + To remove 'Import' element. + + Specified 'Import' element to remove. + Holds empty group if it was inside. + true value if it has been removed. + + + + Retrieve the first found 'Import' element if it exists. + + Optional filter by the Project attribute. + + + + + Retrieve the first found 'Import' element if it exists. + + Filter by the Project attribute. Case-insensitive variant. Can be null to skip comparing. + Filter by the Label attribute. Case-insensitive variant. Can be null to skip comparing. + Equals() if true or EndsWith() function for comparing Project attribute. + + + + + Retrieve the all found 'Import' elements. + + Optional filter by the Project attribute. + + + + + Retrieve the all found 'Import' elements. + + Filter by the Project attribute. Case-insensitive variant. Can be null to skip comparing. + Filter by the Label attribute. Case-insensitive variant. Can be null to skip comparing. + Equals() if true or EndsWith() function for comparing Project attribute. + + + + + The property in this project that has the specified name. + + The name of the property. + If true, will return default value for any special and imported properties type. + null if no property of that name and scope exists. + + + + Sets or adds a property with the given name and unevaluated value to the project. + + The name of the property. + The new unevaluated value of the property. + + + + + Sets or adds a property with the given name and unevaluated value to the project. + + The name of the property. + The new unevaluated value of the property. + Use 'Condition' attr. + + + + + Sets or adds properties inside group. + To remove group, just delete all properties inside. + + List of properties name=unevaluatedValue. + Optional 'Condition' attr for group. + + + + Sets or adds properties inside group. + To remove group, just delete all properties inside. + + List of properties via PropertyItem. + Optional 'Condition' attr for group. + + + + Removes an property from the project. Local Scope only. + + The name of the property. + if true, will reevaluate data of project after removing. + + + + + Removes an property from the project. + + + if true, will reevaluate data of project after removing + + + + + All properties in this project. + + + + + + Reevaluates data of project if necessary. + For example, if project contains 2 or more same properties by name: + * After RemoveProperty(...) the second property still will be unavailable for GetProperty(...) + because its node does not contain this at all. Use this to update nodes. + + + + + Makes relative path from this project. + + + + + + + Makes full path using path to this project as the base. + + any not null path relative to the current project. + + + + + Adds 'Reference' item. + + Include attribute. + + + + + Adds 'Reference' item. + + Assembly for adding. + Meta 'Private' - i.e. Copy Local. + Meta 'EmbedInteropTypes'. + Meta 'SpecificVersion'. + + + + + Adds 'Reference' item. + + Full path to binary file. + Meta 'Private' - i.e. Copy Local. + Meta 'EmbedInteropTypes'. + Meta 'SpecificVersion'. + + + + + Adds 'Reference' item. + + Include attribute. + Meta 'HintPath'. + Meta 'Private' - i.e. Copy Local. + Meta 'EmbedInteropTypes'. + Meta 'SpecificVersion'. + + + + + Adds 'ProjectReference' item. + + Information about project. + + + + + Adds 'ProjectReference' item. + + Path to project file. + The Guid of project. + The name of project. + Make relative path. + + + + + Adds 'PackageReference' item. + + Package id: `MvsSln`; `Conari`; ... + Package version: 2.5; 1.6.0-beta3; ... + Optional metadata, eg. ExcludeAssets="runtime" etc. + + + + + Adds an item to the project. + + The item type. + The Include attribute of this item. + Optional metadata list. + true if item has been added. + + + + Retrieve all available items from projects. + + The item type or null value to get all. + The unevaluated value of the Include attribute or null value to get all. + + + + + Retrieve first item by type. + + The item type. + The unevaluated value of the Include attribute. + + + + + Get all available 'Reference' items. + + The Include attribute to be found or null value to get all. + + + + + Get all available 'ProjectReference' items. + + The Include attribute to be found or null value to get all. + + + + + Get first available 'Reference' item. + + The Include attribute to be found. + + + + + Get first available 'ProjectReference' item. + + The Include attribute to be found. + + + + + Get first available 'PackageReference' item. + + Package id: `MvsSln`; `Conari`; ... + + + + + Remove first item from project by type. + + The item type. + The unevaluated value of the Include attribute. + + + + + Remove selected item from project. + + + + + + + Remove 'Reference' item from project. + + The unevaluated value of the Include attribute. + + + + + Remove 'ProjectReference' item from project. + + The unevaluated value of the Include attribute. + + + + + Remove 'PackageReference' item from project. + + Package id: `MvsSln`; `Conari`; ... + + + + + An XProject Environment. + + Please note: initially it was part of https://github.com/3F/vsSolutionBuildEvent + + + + + Solution properties. + + + + + Dictionary of raw xml projects by Guid. + Will be used if projects cannot be accessed from filesystem. + + + + + Access to Solution data. + + + + + List of all evaluated projects at current time + with unique configuration for each instance. + + + + + List of evaluated projects that was filtered by Guid. + + + + + Access to global Microsoft.Build.Evaluation.ProjectCollection. + Only if you know what you're doing. + + + + + List of valid projects from {PrjCollection}. + Such as something except `.user`,`.metaproj` but contains FirstChild / LastChild XML node. + Only if you know what you're doing. + + + + + Find project by Guid. + + Guid of project. + Specific configuration. + + + + + Find project by Guid. + + Guid of project. + + + + + Find project by full path to file. + + Full path to file. + Specified configuration. + Try to load if not found in current project collection. + + + + + Find or load project by full path to file. + + Full path to file. + Specified configuration. + Optional properties when loading or null. + + + + + Find project by full path to file. + + Full path to file. + + + + + Find projects by name. + + ProjectName. + Specific configuration. + + + + + Find projects by name. + + ProjectName. + + + + + Get or load project using global collection. + Uses default configuration. + + Specific project. + + + + + Get or load project using global collection. + + Specified project. + Configuration of project to load. + + + + + Get or load project using global collection. + + Specified project. + + + + + + Get project properties from solution properties. + + + Solution properties. + + + + + Load available projects via configurations. + It will be added without unloading of previous. + + Specified list or null value to load all available. + Loaded projects. + + + + Load the only one configuration for each available project. + + Loaded projects. + + + + Assign an existing `Microsoft.Build.Evaluation.Project` instances for local collection. + + Will use {ValidProjects} if null. + + + + + Adds `Microsoft.Build.Evaluation.Project` instance into IXProject collection if it does not exist. + + + + + + + Prepares data from `Microsoft.Build.Evaluation.Project` instance. + + + + + + + Unloads all evaluated projects at current time. + Decreases `IXProjectEnv.Projects` collection. + + When true, may throw exception if some project cannot be unloaded by some reason. + + + + Unloads specified project. + Decreases `IXProjectEnv.Projects` collection. + + + False if project was not unloaded by some reason. Otherwise true. + + + Prepared data from solution parser. + Specified sln properties. + Optional dictionary of raw xml projects by Guid. + + + Prepared data from solution parser. + Optional dictionary of raw xml projects by Guid. + + + + List of loaded. + + + + Defines required properties for project via IConfPlatform. + + Specific configuration. + Common properties. + + + + + Wrapper of dynamic EnvDTE.Project. + + + + + Gets the full path and name of the EnvDTE.Project object's file. + + + + + The references in the project. + + + + + Dynamic access to EnvDTE.Project. + + + + + To check existence of references by name and PublicKeyToken. + https://msdn.microsoft.com/en-us/library/vslangproj.reference.aspx + + + + + + + + Saves the project or project item. + + Optional name in which to save the project or project item. + + + + + + + Helper for access to EnvDTE.Project without direct reference. + + + + + Environment with initialized xprojects. + + + + + EnvDTE.Project + + + + + EnvDTE.Projects wrapped by DProject. + https://msdn.microsoft.com/en-us/library/envdte.projects.aspx + + + + + Access to each IXProject and saving data via EnvDTE. + + Optional meta-library file name without extension to filter. + PublicKeyToken of meta-library if used. + + + + To update property value for all available projects. + + The name of the property. + Value of the property. + Optional meta-library file name without extension to filter. + PublicKeyToken of meta-library if used. + + + + + + + + Foreach in Linq manner. + + + + The action that should be executed for each item. + + + + Foreach in Linq manner. + + + + The action that should be executed for each item. + + + + Adds/Updates data in source via data from `items`. + + Any duplicates will be just updated: + ie. similar to `Concat()` except internal restriction for `Insert()`. + + + + Updated source. + + + + Returns either value from dictionary or configured default value. + + + + + + Use this if key is not found. + + + + + Removes element from list by using specific comparer. + + + + + + + + + + Our optimal polynom for hash functions. + + initial vector + new value + + + + + Calculate final Hash Code from specified vector and pushed values. + + initial vector + List of individual Hash Code values. + + + + + Execute action on value in the chain separately from result. + + + + + Input value. + + + + Execute action on value in the chain separately from result. + + + + + Input value. + + + + UUID using SHA-1 or MD5 hashing for string. + + Any string data for calculation. + + + + Sln format of GUID: + 32 uppercase digits separated by hyphens, enclosed in braces: + ie. {100FD7F2-3278-49C7-B9D4-A91F1C65BED3} + + + + + + + Returns string GUID formated via `GuidSlnFormat` + + + + + + + Return null when string is empty. + + + + + Gets part of string before specific symbols. + + + Separators. + Left part of string before symbols, or null value if no any symbols are found. + + + + Extracts file properties: + SLN_DIR; SLN_EXT; SLN_FNAME; SLN_NAME; SLN_PATH + + Path to Solution file. + Use {PropertyNames} for accessing to extracted data. + + + + Get position of first non-WhiteSpace character from string. + + + Initial position. + Moving from right to left if true. Otherwise from left to right if false. + + + + File path; null is possible. + + + + + Formatting of the path to directory. + + + + + + + Check if this is a directory. + + + + + + + Makes relative path from absolute. + + + + + + + + Gets stream from string. + + + Specific encoding or null value to use UTF8 by default. + + + + + Checking of equality by limited project attributes like full path and its configuration. + IXProject does not override Equals() and GetHashCode() + And this can help to compare projects by minimal information for Unload() methods etc. + + + + + + + + When message has been received. + + + + + To send new message. + + + + + + + To send new message. + + + + + + + To send new message. + + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + + A simple retranslator. + Use the NLog etc. + + + + + When message has been received. + + + + + Static alias to Received. + + + + + Static alias to `send(object sender, Message msg)` + + + + + + + Static alias to `send(object sender, string msg)` + + + + + + + Static alias to `send(object sender, string msg, Message.Level type)` + + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + + To send new message. + + + + + + + To send new message. + + + + + + + To send new message. + + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + To send new message with default sender as typeof(T). + It useful for static methods etc. + + + + + + + + Thread-safe getting the instance of the Sender class + + + + + The Project attribute. + + + + + The Condition attribute. + + + + + The Label value. + + + + + Access to parent element. + + + + + Link to parent container. + + + + + + + + The item type. + + + + + The unevaluated value of the Include attribute. + + + + + The evaluated value of the Include attribute. + + + + + True if this item originates from an imported file. + + + + + All the metadata for this item by name. + + + + + The name of the metadata. + + + + + The evaluated metadata value. + + + + + The unevaluated metadata value. + + + + + Link to parent Microsoft.Build.Evaluation.ProjectItem. + + + + + Link to parent container. + + + + + Try to extract assembly information, e.g.: + Include="DllExport, Version=1.5.1.35977, Culture=neutral, PublicKeyToken=8337224c9ad9e356, processorArchitecture=MSIL" + Include="System.Core" + ... + + + + + + + + The name of the property. + + + + + The evaluated property value. + + + + + The unevaluated property value. + + + + + 'Condition' attr if defined. + + + + + True if the property originated from an environment variable. + + + + + True if the property is a global property. + + + + + True if the property is a reserved property, for example 'MSBuildProjectFile'. + + + + + True if the property originates from an imported file + and not from an environment variable, a global property, or a reserved property. + + + + + True if the property has been defined locally by user via available constructor. + + + + + Link to Microsoft.Build.Evaluation.ProjectProperty. + + + + + Link to parent container. + + + + The name of property. + Unevaluated value. + Optional 'Condition' attr. + + + + + + + Regular MSBuild Properties and related. + + + + + Any undefined properties. + + + + + Platform Target for binaries. + + + + + Used namespace for project. + + + + + Default for VS env. + __VSSPROPID Enumeration (Microsoft.VisualStudio.Shell.Interop) + + + + + Default for VS env: + "true" (can be changed in other components) in Microsoft.VisualStudio.Project.ProjectNode + :: DoMSBuildSubmission + SetupProjectGlobalPropertiesThatAllProjectSystemsMustSet + + + + + Default for VS env: + "false" in Microsoft.VisualStudio.Package.GlobalPropertyHandler + + + + + Wrapper of the default solution parser. + + + + + Parsed solution data. + + + + Solution file + Allowed type of operations. + + + + Allowed type of operations. + + + Allowed type of operations. + Raw data inside string. + Encoding of raw data. + + + Allowed type of operations. + Raw data inside string. + + + Allowed type of operations. + Solution raw data. + Dictionary of raw xml projects by Guid. + + + + All supported data. + + + + + All found projects from solution. + + + + + Solution configurations with platforms. + + + + + Project configurations with platforms. + + + + + Project Build Order from .sln file. + + + + + To prepare environment without loading projects. + + + + + To load all possible default data. + + + + + To load only minimal default data. + For example, the only one configuration for each project. + + + + + To prepare environment with loaded projects by default. + + + + + To prepare environment with minimal loaded projects. + The only one configuration for each project. + + + + + Creates map when processing sln data. + + + + + ProjectSection - SolutionItems + +NestedProjects dependencies + + + + + Header information. + + + + + Includes ExtensibilityGlobals + + + + + Covers ProjectDependencies (SLN) logic using data from project files (XML). + Helps eliminate miscellaneous units between VS and msbuild world: + https://github.com/3F/MvsSln/issues/25#issuecomment-617956253 + + Requires Env with loaded projects (LoadMinimalDefaultData or LoadDefaultData). + + + + + Evaluate project type via its file. + + File name with extension. + + + + + Evaluate project type via its file extension. + + File extension. + + + + + Evaluate file extension via ProjectType enum. + + + + + + diff --git a/WakaTime/packages/DllExport.1.7.4/tools/NSBin.dll b/WakaTime/packages/DllExport.1.7.4/tools/NSBin.dll new file mode 100644 index 0000000000000000000000000000000000000000..25c3d34bcbbb90e48ef0a502f97d3c406ff34078 GIT binary patch literal 12800 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 literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/tools/PeViewer.exe b/WakaTime/packages/DllExport.1.7.4/tools/PeViewer.exe new file mode 100644 index 0000000000000000000000000000000000000000..c1b9b6fdbf7ea0a77f04b780c22a7d98bb27fdf2 GIT binary patch literal 15360 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 Ga&eg79ggdQg4qyemxO5+ zCgfm`(;VTN-L~vY`+og}D~|o-%~uc9U3Dj^VMWm~9L0}9D8y)xfdEbT7gi21idSo( zwLtrnpdKbBSD`6Y?$MZ5S%Jp@9%TzF<6>cGPy|D@!XFk&?V{=mMKI5Dv~powEGJQ7 zC>~#Nn_x|aaJiLY?&XSMj8CH5YJ#)g`zCWnayXw5$H0=Cx4;&<5JlDczai5=>c@5Lsh*z;1_yjnL8e- zOgJEsP^}j5p{jxvj06Js?L}pU&dvtg`__&J8E&5k(-oJNo`{@trSA9M9 zYR^v=E}y>_hjOIO6Y*~eGywp7*AU+4RcM31wXd8A+&NNT_tbCCet+3V-}9r|#V_{! ze(~c+e*Mth4@I7S?Q5Ht-%|aPYuCiz{pQ`j-T3tyZ86Ti9TJ9n>tkMG1c zzCD{d@z~G4yr%1u$(!GMf63JH!KaT0esR@xfft^-?w|jn`O%*~9hvxp)lY|(edMJl zjw(+*ee}uG>WS2(`Q+@M|M}x*Wywc#S26*f&7=i-+HVX2dIqa56>}9 zs@ghg!>MC!3U_l6yF@n&oz?8#uM>>>&Tf$E{6%Eh}voci6xkLozG^yZnFj$ItwG8pj zdU~k@%DRGBq7U?nAj@BdIS35%%TGWsf0)LwvJ6v42@2UirWSh5r3Vy)Uc9RjDC&!l z2t+(J`6<=ZU5cy@f~8jHgGIiUa|G`e)%$Rugma7hn-$(Nt(zPLd>rw_KZXp(w)gE0 z=idg1Y89#(OJ&EWMq}8LuWjpJTU6;+xEX%+xN_9ol-ShLvOXH$kk}AyZ%wvDHz!A1 zq8morM>mcpTU$16Jb+(2D71t-$iJvJd+)Pb__r9)F}NUK#U~5txICt)kV@ri!tMC% zi>v4Ln?|4c*>8GpJaYeYA0Pf|@Oxi2kA87@)5xJ)ofnV(=Z1eAxqipzudmT&-&o&! zeAQ1M)jmD4cE`g%f9|&H>TZ7ZyYIW*|F^2YFVyqvj@4T}dE&A)-+1irA8gw4!IwAO zl}T>6z40rbTKbpw?ReB$_n~9jv0qLs9e?rC!1xPi9=M|UOCM~me*fVOpWDYe(-}Z$^etq}sKxv$n?zwC~{tpGeBslw%IIfcKBGJ_J zx{cQU+$-dMYxIWwIF&Htj+rOMCX=Jw;r|EMiJgT({Fuw(0$yCo{r?4*Hr!*`ebc5q zvXG~LrWu0;W#yZzDBM-t^nc42Sb)DTNK?<_XG{dM&!5Y}IRaljE<$I%c?RcPF8}xi zRV)Q_06F}w5u#tYnMKlmCGb;f!Z9ul1NPzT!w|NSJFpN9%X)0W z_lSa=y>iLUy)SY7#n)B-??B~f$0K%^d45|;!=^YXhYa>Nj&`AkDc>w`9)r@ftYNF* z8zsID;S^W4;X5cPxBdAReJgu*$+q3_BEMr!$QP0sB&v7X{*DCE^X^n& zRp{lfeY4~8>4|jskbB6wrJ*&}(hxQ?2`h>B|1AxBcK1g&HH2|&o=L{jR>s`YFk?Cm zmv@#Mha}wj`MBIr^q!PB}SO>CEEYO$5or&0?)`l=nZ&L?M zCwElq_6K3%a9-E|PQ!&+BD)}C^* z1DONXJJe@ggKUSs9UOSzTf>ZpgJPREPC-vTHc1`A(cPHoyhEvNIjLb>1vywG_)x{l zY%>p;>2R9imWH@9kU3->H0_4)RH_>vZ5){K08aNzZ%|Um+KXtDQ+@3@x_7M28vzU* cYjYmLFK+*zxsc@f_Xxk@1ogky|2PZ$UtV>+%K!iX literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/tools/RGiesecke.DllExport.MSBuild.dll b/WakaTime/packages/DllExport.1.7.4/tools/RGiesecke.DllExport.MSBuild.dll new file mode 100644 index 0000000000000000000000000000000000000000..81f0c1c10cd9f189713dd9a1f1f7d1212df1f806 GIT binary patch literal 73216 zcmdqK33yah7B0H>K2@hGl}gAwLgs`b6J!8I8D&ru6=YISLLgD1KtTcu#6S>4QB=@4 zPk?bo+bG)N1UMm%IJb%jj;&xTt=-Oe|FzDpqzdW2-uvGB-gj?(sdd)B*4o2adpvvZ zQ#o<+8nTGUh41gb6FrJ6e})MC@1zy#*zCt*X;aiIxsR&RujG!O+0c|Tw=sBDW9{sm z8MSlf1n1{Wug_^*Fej&BPR{U?$K}ip*43BC#P|wK)MG{vjaC+UAN{r_l-eH3%ZXNf zh*A`h?MPqj3qA+@5L}7kgx5~KS-|<1Pb>70SItqluOSz*DgSj{4Row&A>uumdBnSh z9dYPqnj$}BL#h>ZKUDYMa1N0-Oz#CgE)18?uU|MHcxN*53!U66@*V!kA(~d+*wi=! zLdhHQC^wphYuIN9vRB?%KPw1B&MP6$>;vll2fJff9sb$Ke#M9LrpZn1bwu;G5k-lV zD6L4*T`@#ks}!{w*?+ra>EzmVS!i3u=hvhU_0ozlJxGST<$}n+PK7&8iAv@-cU78l}`V(~FJk+Pm)l5Qm%p1FOE#8hv zunOnJvK^C<9rMO6LyPwlT?wwjdB}0*Y9=8==8a*dmf}csC%6mep(n^(%_L;Vyki(R z68FRPw!gU^#n*|Q^^?V@pCWb2^k|f)CG{^JvG{CM4yW?5sV(t1l`qv)J`QU)GnLAR z%JD|dHE&P-J)%Bv;KS4h2_^MG%4|B)My*GgJ%ut$>nt-4{b$OIqx+wgS*J&EqvDwX zeC_fGi{TNGavf)XxWyj{k^W#qyP0XEKRBe_%(TlNKPKLPTZBI(*dN=6ggTr*Y!&Vg z4*h5R!O{I`e++~%*OWng?eYhU;SZ69{DI*M{ZnG3KiJT2W*X@a4rxoQUHBK^UJb~DpR ze{e`!V(s$B!lX0riKrhE?2rE7u!r@>_YwZ!(0|4s9NnMx$50rvKaSyRmp@nxe~2{X z56lrzKawN;!G?A-(@1}CNLym<^2e#CKh-C~9}?`3{@}2O^+%%)Z!aAB&-jC*`_ujy z24nWeaK3i=gT?TNNJIX>yaWD7iS!2>+RaQO{lOt^iM7igPrX_ zo(O+%=s)8Rj_yzUV+4%ZA0zqNKY6G~6F7hCf6a@&{%fs2^#O{$NA9 znQ5dyIHWDHcKPGfH|~v(@P`EZqdz$8Vg0clr3W?1k?dZa(t&~9cL=?@NRORQb~=v$uVj_`*B`=dWN>|y=!&j^2T=s)8Rj_%L- zXpb09%1UgYV<*c6q>(aIYOaGbEL~+O*EZXO-pXX2@KDYZTe3X5QTR6hdwYo`pau z#X7(-lm(34)vycAuN}L>)W(m+ekSZwi*=*zrnv!t|4E=?m~99;fh;E#3917qOgo4g zV;5I8PKA{YG$3k#mEmAh7eHNe(-TV8GU9d9*|2U2;I7QmimR~9U(~n<_D$zNwYY`v z*b?F2JB6v2p*--Qmwoij!CA2K*_St@^-d0~!woln3$ws%NSo$x1a`^|!62AuJJn(Q z+LKe`C2E=rX$zOG*4_Zh-wvQQ+uBYGAa^B8j)$hOEVXC}ItJH4`(ec0)QBL3t*i-X zwn5Vlw|RtZur>l4)&wlr1key{-H6qoxs5p>0hBNBag1kn;WdmO>B65f_Ig70+HraS z_iZm39hvH1yK=^w0IHR(Ljh3f>?P=G!n65kR{+*T20*Q~m!RJX53so_0Ba;baVF~e zv#6W#+-E!n3+^+}AE6|rcApDB1kVFOzwH}1(!s7O0@@-HPS4Y0=>Uvq&J9X z4qr@Ea4{~yW{^TW@}`s&+0E$Lkgc>L8&RSP*-huOHqq6>ig;JRjmS&gQHk!|y}iK% z=*k}4?emt}-XJpR+ZDJKVeDqkV`DYDb_t|SOFoN< zfI{7Zdf_UxTF|)AheP~=BSs&^;%OoA>y8)=fW>GnE>vF1#PcPbO2|)q)B7;-*}4U_ z)@8d|P)%Ky+<0_JMbigR`n`4ws;kTE5jV7;4#T17T5az^dlw9vT9My?jXN#!IQO`H zx6e~*dz^bLCg(mfY2c~OeegO7<}~urmMeg+!Y(`7sZW+GDR=?mD=pE@+z74Uav-Ps zNDEwxC;XzyKT1v4OH|~^$hfbTuLo3lW z#&b!*s}L&SK`G)MP{wxC)hs}_R8mxYl(7n416dIdJH3%b8Fqw$pif93j9q-tLOkbk zJl7&j@H!Bdp!wNN*R$jX5FMDu8BbshTx~bq$eNo#iq8!#79HCCmUBX{>Sn$+jzptz z1#d=x)lIlLSMV0FuHdbpfps7$GAIStgFPh728c|U+ra)Y3=d$%mpkdCHO`WRBwn

>{h!@Y!S3Mt?4=Q0p!ir#cOhh9M(}RFG~L5gH?v{W0>oA5 zF0;}~R7w!_&<@@UZEz!qD|jEX_k*Nho`HBW(N0kl2;E@3t4tNUf`5S$_0dtqc??kBH4OjgwLiJv_>ir1S2jQw+5vmWv zRl6fpABC&-M5y+Lt3HlUeG;zvG(z=Rxa#u=)feHazelLP3|D;>q1qR&+8?3%I$ZUS z2-P>?s&6Ay2f|hVj8J_SuKGSg^{;T%zavyXFv8OcHv>%2O{4lT!se%t4O&5$&Cd}w zzc2~~|20DO8>5UsD+fMF2Mz*i-Sj&yEohFe;!}`1wz?vP6L}t@4wZ%y&`=bQG%eWW zj&%hsmP`$k#JXecSWgh!KVA89hXX97cWFEfI$OJ!QI-xw8519_!DwT`zzX`qRWT8& zSVkCtyYZDD1ciYhE+h~J_agDeM+8n_6jCKdsFK1}*jbefJGsGLa#yI-2o<(dyHx2B zs*G?|W`wGHxT;5lDl1%-9ihqzSLH^i^1@a55vqc4Rbhk*`?Fn{?-`-O6Ihq3SA?oK zTvZaGDh*eaMX1WdRlOrreZo~05vs~?6}FMX3I&_$T{*-~beO7Nxax=q)sf+<{t>F9 z!c|8{s0M_q21cj`g{uZfsD>~?#T?34uBpO6a7;)b33!T8IcjLfDHFlikL(sV3y$AKj6jKUmtCkE-v!12KIM`8Yzdf8H$g(dA|Bol?e z2~chbj0R1)>;jhh5H1i65ngXuy0bX=Ow z00~Y7;U0t&uw>;9lXM5UWRb3TPzbt%Cv%tBr5?{POpUo~SX?z6bC>ZnhUlDPkSX+m zk`qh%z*^Se5sULC64M7xXL+bknGp`^81TH(qQ5Adhrpakr?k{Vssm?&_P-udr=QY+ zvmgk}1PO8vhgBREF0>%&5ZCBl{IQG@%AZxM7cyC)~Q52uZH2Ny&CA5_g8t@EtJp3(7mZh>ewoWu1t*uwhasA3w5 zc7)nbHXN6UE4p3hoQ$dW0bJ1s5^6u42>v8Aq)a@UoC7|c=g6foIIXNjW3~@S*uqeaN~E}+Ls_x&T^ks?1XnUO+zkxwyS9|uEEnmqQjpdJfU@m zG1RRlwC)g1e?z`9_<1I{lrzx^f+wG4p$wII9Z-_tI4aRjuuToR05-wpAknVi3S1IB z37)`(V9KIWQkqtRDPhS)VEnG&#sA$R#uZ$}7A_|rDHYYO;3W_w1ug|GEpkwBHG}jp z&}c=`T&ycyCV{Ie#$B(4#0isHHTnf3i4JH?g$FZvZO>QgM~q^< zPQtI}@J>E#!t*_!gF~Ab6yBp$gm*#(&P}7^3-8FMQgIZ^y+OBg=x)4f}SXFLBnQywv*$r+q%ybSGQy9LPiUXuhuiYKw0^Q6rBmx*~uwols)VMT+IxTuO zuJgg-0a(QBb{8eZ?53!sKnDl*M@i`5g8-fOSR2H;=0gxQ)<@G^QMPOX^jO(xNokj1 zNWaUu;fXQmZw;9(B8s=tst_7Omrm0j39S6>5EbS;j?V^*)~}C z>?Kd*()cEBCnfj{*p_EO>}IBAo}}mxF(X2+Q0T|R#~YgXv^>W)f#*S+wu2Nlo&bID z1+YbhjjKBOmK|(|9KFbvFM+hY%o2$`_zJTJ?N?d%8b}}(gU6Dc;AETQbub6*H(2{7 z%UW3zz+IFqd5bY`g*Y~Ev&}nV!u#DmunTUp>;qy3( z3mppw&%hS}<-_|?n6gn0%18%3-J%R5bLL^SFc*yh)y$9+k+PEe21v5IG zg=Uz7#x@cm1OEaMha7Hth<@4$FUy4y!NqT7=DxMuBHYHe&)Ws)LZ?f^&p!9&!qn`E zHwV!H_+*>i@tK?Yc82XLPj-0Y7gB2fMoc>J1E?ucQ))j#l3Kh(O9d$9l9a8(#@`Ss zE%+0(X00}~r;-nUTAdlQmi+8Q>6DIb{D#8PVyOw!#z|l!(@6_p^z2N>iNQ%sCrL=$ox?O1 zBHqAnoE+wmc43)a6gUXv_e%2pFGUL8@WjgocpLk37_QF|iu`cJ;KP}eMwyJ49Pz)E z>(t`TiU1$|&Y6~avA~F?830R(xX(N7(5~pDp!Os%CWKMbLSq)yYnXC+J2D z!b$_`3g-86Ft3yUsG!Yxz88Vhr3#h~iVAu-xBZ+O<7|}{W3tJ2S(*z*0{pcrK#Wn! z-Qz@s)302MJQpF)=pafGbmMl|H@*TA#IWOwBS#X%!?&+&ug1V>+T77MN2mI2k2mOp zCMG4(RWdp%-gQHw8xJuuEjuFKooL6~PH*OPCAKS``yyCGBT%9z-t={yS`TYosi*S2 zL|xucc^`T|-sizGE%ihmQ$mxjTrO}4$c7+CR8kuriywE<>5y`#|7m<3zH_FbWq2I_V}s<0TUUDwPe7iIWx~vL zsSmO&{Yp~|k_p6uV6!IYa8ZVCl{;Nt1K>oPx*-6s`wZvhR|xqUjAJ1dFc?_Dct#;r zLWC-j(PR^fRpHw&D3inOzi^~o`!5oMNhxgqMZ}>rlOobgW)xDTM5t23RcR5b^l(*1 zgeo&!)jdMhBV3ggp~?L>TvZgI>KU%WS(32A=@qUjj!>0^ zt4bqOW#Ovw2vzTJ6$&sct%`6}WrV6KTvZ*R>Km@=7oj>LTy@< zs)6CEK@qCK;i@4Ks-fYkVl*#9Uq}Off4V&G^6Qv z*6`60HYbK`mW11!6k&5Rqfi4G6QLT*2pcb_;EF}eak%iYWM|`L{GmeGc$sjhw4V+P zMB-*)GnCFmnDI7@bQ!V)If*4x!z5-2@>G_Gf}Iu)CWnJ546wF&y15o`uXX>D5y)*> zR^xl|v!# z4=cUAw#vtxh;x zytf=yIx6XKwrdY7-4ZE1UN_gEq^#gHPP z@G{iOu7g0ui#vA?#zCtC^#~k16QpGV=L}_NV7vHg6D(2E*xP5ZwIeH_T{Wn@GQ>cWL9PWCc%%qn4@ZDQE(=dcu_6TfU6T% z^C^%QmgV6zNml{~?Wd5UbEFZ+?AQb|-xNG;mk#op6wl=p&jUepXCpd30BZAeurw13 z+b!7saN+0{=ReiAyH6-HCLdS@@EtYt_uqea+@zBv$0YT zfuDv;3;RUM4y$0{WmgAzc-fr^d}!IR%^_unHL(9wcHiMXv5tZI#^F$QXd9vSy%9PT z-y68V1CsXnXG5)XiclyjJXD*3D%2}e4a>k;hl(Tq=3CejUE-mawDQ7H3+Qo0^ z<{$*kvp@_x8>|(aC4Jx==2L>R0h;G*!el0_XL|b@O;)UV8W|# zj(y_gI_acSjs+~R%~ zCZ<45=d-5KT5<}cRnXbTq95 zSG>{+Uc};ynXCdSi?M>2;EGK*(Bf1cs=F|+ho%)zJ~WUc#`w>ch%;O-8C?x|;4+Y= z%h_ToEUp04wVBYghUNXN;96Xh0#`D+zzSZ4Yp{(;S1vmvEUvVISF?_9xA+poDd?~_ zdkvc)gV*vE$y|r4Nd{6zQa3DK*W+jV_?>?Ah_YSb3S1BM?Tj%9-vHjSgEw*r-m^#5 zpd4ujycL1N);B@p<82dc6r1)16N-y-_8KsU!i>ph1#ad@o3KLa>>+J|O@+jRvE0{K zgBoOYtwLFctU?8EkyMh3bhDT@!`#R)ci=4$mn}JoF6n8fo{D^PqPDY)bt}U1(p99P zr}Q1RJ?+ogdQF{v)l=$oSdP)`FZ2DDms1i3cIUJG8(4>o&BtJ&qCJidE4}1t+{~?MJ#>EW^_ip$p*;6_9bouY-(p& zD{BJScPi1%w~J94&W;?k?_i5NS&-;%VFlK@@Gw)d4>y>kZm3k8`cDRu+77fHji}KuqKej zHjhTyY-XFsSk}s#KsMVv5oz-z+dL&UtO?|>&6Y@;t!%SRY*-V>Wt*oXZJuG9XT^p! zfjqW(F4E?Cw%IN=tO;PTtb~7xqa-G(%#DKIofReBVOJjjS=f2!c$ds6Q9B4bV3Z6d zA73AM{!F)YGw-8WPAB*Rr?vy6_#`NJBhGR<#ur(3E@ZsLW(8jY48F|d6_BP^Sxd)^ zJN_6&s8aZ#nbWz|<$cPl`czf)XNj9I7Ev1}p!rL{U`n~}2=L?PH#W>U3k?_;Pa`iR zLpEU?&AiR|{g?b>CyW{n-9q4BQKtFF%nD9tV|;KMYSKp=qN7ko^s}ns!{nTLJHDm( zB05qqs)rEnC*+dfOQBcr1uM2_PaKTy!#5LlsD6auRCH11%3-ST0ra*T2ebN|V@TCH|{Cj{<>&>^%CpAJaDy znBHE-^nIZhf@aYo|Ehv4`n~6>f+Ffuw!6xvZ~L-;+R8XTx2H_X&!eL<60$RBXg25P zSloq8$K}6=w4TX$52=)9CuA3qH+Oec5lu^FnhR=ET;SK@B03|$lE3FOJ-u{yRUY+B zPsp~>(Q!N<7fi~JrRKhmA+`W=9!oD~4bLs2b-g%-r3Kq^is*6VDvwqm|28ESPLD34 zsfaU{KIqP&&V!9j@AbXFok8u$VJuBge-^JOEs~P@v7id^|DN_vb}T)Y{tjYz7Jfsi zb>~oTqSS18*DV8_8 z*z%s-y7DY~B4JfQ3f%zSrm?XsKhTpy-CMFf75SI4xLN2XP@ArFZ_CM|jR=)R-xM=l z+MDUk6-+5{Re?>lxtznf0j6h2ircH0ADqTzv;sNz(T=gYP+mlz zl(4Tddp}klOCO?s7SVnwolVHOO#={r9_>xx5*$*^KEF*;SzMfo`u|ZH+bk^Ow7%-e zbZ~&_?four+tk#Hwa>tBKAPqlQ)p91*7RtbTuDp=m8^B4ylh&~kEypem*xW~*(^$` zY(qSgVp6-O&?eO0Sb8LjTToRY=d&T7=@DsMzWK-@x9z-WrqZ9`A?_}81_L|M38+p3 zG0}$!bhUz__-qi+d4i&OMgw%2pcp>a0(6_8ZoK0Gv{_I*uZaM?CMc0GqXzm+P%`iB z0{tQ=6~El#1**yWXVr-~@ivrNftHr-Lwux%S&_3N(gAVSt2DGjl z+l=kTHoIb(-z~f?@)w0aSNLR!XPxlBhZqXIPK7Ww9ofY8pc2RE9j4U3+P5S^BX-( zr+EJg`wx>`HhL~=JNT@MD3?uls4ck1q;yWVs*3OWh#2M_ZMxX}RQ5V-jmzPJ?X>&cBzA&-~oU%U^1_KE71kU~#Ir6i_MKi?5aDRjT@ zBhcsEPa>Y@JU@fZ_s;O8(Cnze(JAyx)NSas2j{Ht+O#V*Bg&?-)W3u8p4$iff-IKo z=sON{XX!l9^HAY%jQ#h-Z;Ju2vVvdUA_Jye%V_&iVFCrrd^1C-~Wh253% zQXIN?&dVFgrTBfpG=uI*9_jW{j)M^A6$p2vASX^AEj5VajHXQnah%bV#}iP*`MbXq zBTunGKV*+|M^mMPB+h6$PLLC43|(Om#~Dk{8pLtNQe~kN=fU_=JRclo(3{;yx?|}W z2T7caFsGw`&KN@p9ixz9*{!GlQ-(;kYh!$6VTph2!i&d}<{WXAg|qj8=NjaF=2pafv~z;m;m) zrGq5S9(0!p$8lz3j_1U}apq7#iGw(wIdr9p7Y&+_5J)eeuR2j>dJ*}{IF@Tj z_Zyhri$-^%6VprRQiE1iO-(PS>kN7!ry;#J-C@w&?n~Vj^pHUxRV?&Z(pH0>2dbi1 z40^b#A-$SDFvxerLVrK{yFo9-H>4jy|2F9CoVn@!(axQm#U62sKAPeT%F0=sK9G*= zM321kfrjMgWgC5IzIQ=+UENGec z>8!_qmKzR8f^y>|hv!4#6{Dq4X1JArOCXadk^ zy2qe?Kqu0pf>xrWKTbc1S}Qo*GAy8dl|F{1@uM-&H@&}2A4}&M^i0XO>8H@;2JMD! z9NlHm*CoHEkEZ}XDkI#*Ia4vWTx`%?IVZSJrL_j_&3eHrq)ECNA2&|7bx06>d^v)->--<=JSsg;sYNu@pz6Fh zJR6*B(Ec2y7Srhl{ge|&i|K4ZE4}kmm1?H*3~Eh{qh`9$po)GT~3+Y0G;^4Cj=_-RhL7XdTok8Cr&Xsh(L2ID9 zh#oiSHs~&*9R`g-J};(s44RI7UQC}F^bfp&yowGO^gE7atfJoyI*_Q;CFDQKx%b}^ zPp1?9JzjxlI9%5OD|G3Zx}GMCXA26>Us%jg_~rlw8Q zm(xOnf@yBLoK_lir$2|TpsNge*q;ov-k?jelv+dg8+2n<9Dc3$34^Xl%b~Tj!=O9S zYpkVr4eH)ksVnJIg9516SJFQXy27v2RrI?-H~QnyZ^j($c;f7m8{BP_VbHlH>wp3V zaofC_Dh&EL>rVGIG{_)3`#zx2264N+mL?dq5B|K4rW@o#y}pj-8Z--a{(5RL=nCkr zr%MGn?fnM2QV{ncif*7gI?*Qg4fJ>?dfa^@z3w0y8+gWjGwn9$v%WikzU@SBxYv_+ zfZVN`RJz}N7bP3C7Y7gSqC7#*)4MQky|m-#I`x3;H~Y z+w^^Ok3rm~@1sWz;x>IhJ!cTN>HFzTgSbuqh4vW4ZTc_t4}-W(KR~}2#BKTkiW=zD z32xIJlwuIK=?*F|h}-moRACUe=?7`BLENSvqR|F%n|_EU8^mpT6P;xcx9Lr^z#wkZ z57Pw(ahraa))>TX`VqR>Aa2u-(7gt6oBk_3Y7n>SztZytahraW-ZY5Y^rN)bAa2u} z=^qAho8C;n8pLh-F^U@Gc!JyXW0YzTx9P{Jz#wkZk5i>V+@_zP!3J@geu7Rkh}-m& zG}$0-(@)Y&gSbsUMGFk#HvJSWH;CKx7FuHvx9Kf(i$UC`x6-`^ahu*sn+@VNy^WqX zh}-lwddnbg#ZS{-gSZtxP2U*A?e-b^)gW%S&ya7h;|XrJ&r+&E+-{$xLP0CNJT^W@ zWd`xs_#E{!h{wj~X^=rYHa>64VWpSH#_gsYR(g4C+-}N!rI*LX7fiXY^zzvF0v&5& z;jwWCooo<~jXUU6LCd@+X65-`qAz2W|l{6h(!&!w08lrY5>#J$v~6cDshdZ|w-O(xu!xB6#zKBaXAeU=yJ`J7ga z;BaecS;8%zzf-%QWprX$4t+_bBU!hMwv;9V?J?-gtOWZj8gi@?t|Vuay^rP!T1Izg zC)oR`{W#XGpr!pD^?psq9nWYPE$)#+UsJn5clTM6@il#FP-<4W{{WSq;8@PhJH`Jm z+GWrexo7)-q_okFE(x*xNT&%}OG`7S=^yEQqr0uj=lzLx8f0bV(9d-7NgQr1ZOppG z|1%9Znb9>A$T}WqkDz5#nVdtv(OY9!w+yS}=XidjxUmkphW6VBsfUBS_xHR!<98|) zb6s1-h#3PVTU2hPNKt6S+K|BIQt4#*+ z2o$ZJHi$Bz31jJOU-DhYjKpC|Nyi5RX8~YNtUw0;Q-A4dM|fMeQ?)N1#;oqd`0Z zr7C;8;|U&t(o~{BJOZVuT!VN7N>}9u@d%Wz1{lO6P=*?15RX6^YLY=b0%fW?gLnkW zRE-Al2-ICIHHb%`?&>mwcm(R9ZZL>PpdRWjgLqb%r8*4a@hDq8We|@?+3ID3cvhLC z-ZqFwr(E^1K|DI;s&5VA(J4>;W)P1~c`AHXnXjTJu$P=!WxmSpM4R0Cs=5K-DD8=-j(WZLCzerQavKbnN?P* zrvxpR`EI3pUeHxuf8eT&O7%~Jx}{wY^pioEX}1EYiF`*_d1G9+_^VW^K|3u*Wd`kz zVKmI3y_(T!1`Y8u3L12lSYBw*#%R{vXi$z=b{JI9gLT^t(xUs&puAqJ`_7+kqN_D1Dv5RH8T7uya#=_xmbV$SPSWGlcxB-c%-O3{ z2=V;73-SEA3-P?Xy3>+-=q|)Pbl*-L_t1S!i8*ztpV};`FQ@)GL-&i&9jRUp(;cZk z66DN7j*756O6@b2&*MG+qttf>Y3l|5(dwWh~;wn1uKG)x{<2h=)w{gY)v0w3`nRv5+YB|&p!wDnQFZDNvs%_{F2>eqZ3&2Zuc(9jj1ddhn>Grs2>oUrnKBH z3E!HgQ>wcpTMAfG6mH{Y$(pcu&h;D`>Y1J#15-_lkdtuUqU`i8NfPccq-8#&oq$~e zMTN+TrW4>3hyNq}qc&Wk$y*r;8_E9=-z5*{CsuUH9sa~Z&clqVxHyXzl(N<-1&6j3 zv*e|eLupN44)v7y|HCBKW=YK9bcdAqHP}s4v|37MpZ`$aiP^E77|YtZVv~zpDN|C9 zW-%Y0tB=IzPU@dXDIAcR^Pl)X-lG#X2fK&(4{j(0iUjOHM>d1jBb@kAPe^C<7( zO!Q2A`8omLG5G$5GbQigdm6qI@OzXq@qG_p=EvY{$b0xspd6eb&%v604*Ihk#L2rE zxsc^TmJ3-fWVw*#LzWL&K4kfjc(kM=5czk*oSkQvy0=XztEvVM+qGZ znvDD~trbaw(0QN=`+>8IGq85Z{OdxM?8Tp^cuw!9o>irEni`KMmeW*E%+`~rrg$JV zs2V&QyskLZ0niiitjGLj(5bXd`1e5TaC)B4Iu^)T#{xO)SRiK|3*@Y0ft+<*Bp^N0) z&X@Z6K1tZimEng-+Y5B6)tjC?k(KdQ2ahJLqXJkHA9mFf^Outv3 ziXT3elZT(m({n9+n5S7A(ECNZU$py0%kmNWdzw=3>`rM+E#4^g_{C}w@S3C&$^L;k!^~fPhc4Ac^9yVKau2opLU3Ukc2fnD{GhJZ# zwW-loFO}4HkX2zl(R;X6YUIl+CRzt*PoJRG-}vYuN zQmVDa#*T3vpuVw6HCXreo8;=Ht}3Z@EwU~sIm=b2&dX`ir%U}mK%>i-xpJ)yeJ^*- zlGG2-)j9XNmLWfRdYSqm=0Vpg!$-w#cC9shdhAx$Ds^tpiF%dVmw^3U)f>L$d)e+v zSM}Ym)oVq&RucdYw$$=eR=t;|W-{o0MS z!}lPGqc+7SN7@vx?YAjj6>3ww8noA1h!a+Ot)p_M>6?)H0jo{%x=@?q^`JJz>p*Ra z*MHg+?`gFuUXgE8yoc4Mcm=*q@ydIf;uZHc#VhTI0W0iniuZ)u6tAeaDPBo$Q@nzX z7$hgWV&0~BrMyk?3VEC2mGL&kE8=a6SHjyAuYe=Zk_TS#Zd1I{-KKbjyG`-RcAMfA z?KZ_L*=>qfu-g=`T(>D+v2IhmQr)I_g&O%68(xuaQ@j%0rg#OqP4UWeo8lGcHpMH= zZHiZz+Z3-Xw<%sxZd1IH+@^R1xlQrPF|=4QZd1Hc+@^SixJ~iOFl?|Q+@|Dwfs%6t zir0GE6tD5NDPGNmH^f)GdW%rt-;;7je&B!RH@TTU4tw6?Z&SSP%JdCTUT1AnyuR9o z(?^^W?qS|jyzbYo_!M-9ly!%cb%&Hfhm=CQ;&ajMiqA!NNQrbviF8PbbSN&74k?ii zDUl8-kq#-54k?iiDG|hs66sJ}A{|m99a174QX(BvA{|m99a174QX(BvA{|m99a174 zQX(CSOQb_eq(e%iLrSDWN~A+dq(e%iLrSDWN~A+d1bIe@bV!LnixTOO66uf<>5vkE z4N9a#N~A+dq(e%iLrSDWN(A0ODRd|<5rhKYuK3(|yW(@>?TXKww=3Q+-wl*gFQ-jzlo(|%D zSf*8;T+MZc=^LmITxU9@&a^8&A>XceU$k9XcPzO0pA_(*`}*w z3(oP((*x04wkzJB+@#Lw$y#nli}VZqChB&@JGhH9_Y6O&f27>*8S9EeP8R83^6&M$ zEII6jw6g7&C7+A*%aAY9-1jch)zw=(r@0>M_Z;ZQN!%N6>GK-2+&{ksUwwuYdA!)< zjD~t=%0%5uU(jnJ#=-jT|3VJm>Gdz%1@}MgiuYmLrOvlYoo|;q->!H^wq5Z)aJ%At z+;-_3ztmQFH`sG;*{*mmw!yWg*HG^+wI*{CHGUp)F}Nyyf5lY>!ifQs9zPIy8l)23f-@Y&)fg1czwpzayRY~8HLn5=H#Yo!L4oG=%h5){?-~?nUc(%3LM^ZG``e|*_)-@qOhX;xu?DRG z=Oo${@7cFIy`1a4lw0&>*Mohgf&SKaIOM!DkA4;V?Cml#wkzJ%Z&$pVzn-2(&FPLA zSJ2<#dN5@nBwMpvpye^8UGX`LcIn5sZd~a9QfD2({Rxj^?b2s%b4^HG2pitjZ#;C4i}H(uS>4h)5}P4ht%yIu3P%xbc4=Icp5QJDSrWUa>Xmi$-6xk zf|*J&R2>okx1b((8( zo#t`BPV=~5r+M73(>(6iX&(3MG>`jrnp-_$K&!9QJnq+N9{1}skNb6+$9=>g>GCL3 zC#}0q^SEE9xh(25kNb6++g+XJaUVI9Jn$$}r`cn5n#cV*&EtNZW-rxg9{1}skNb7f zFV$%t_vDv+^^F-?$>D^_vNNLPb(+WhI?dxgY%t2yX&(3MG>`jrn#cV*&EtNZ=5Zh15MS{q zgHYf*P$CMUxLlau9F7LPuI)3fA62A z`E928n&lTZ9Pe4-38G0Kpev8KC*~*DM7(LWO>vL91Fb%eb_kzqO)1|TvsoRVrj&BCT)Fqb ztDDs)IWKun*ZgkLTI5jC>6&*}3WV=)y@Z;16Zk81yXH4uZqoer%vk+F_xEEqihQHy z_f(?XSM<)I>-CV{-^awe&&&BaCfz+cQ>jg2vq|$?C>u4u-_ox6U71aq-$YqYkM(Oo z{QQ2-X7x65@`Ttwq4}MXXN7-O^ZO9nVELr?S

WJfZphlb1EW&+(Snyrua)j9p@x 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%0Ax}_Bh$qRV#)iW1eFPTi1?_xrszf5uv@eu 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 DW|Vg3 literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/tools/coreclr/.version.txt b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/.version.txt new file mode 100644 index 0000000..96383bc --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/.version.txt @@ -0,0 +1 @@ +4.700.2.0+4fde65a5695d8d4c2f73959e71fb38357ae02a28: https://github.com/3F/coreclr diff --git a/WakaTime/packages/DllExport.1.7.4/tools/coreclr/LICENSE.TXT b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/LICENSE.TXT new file mode 100644 index 0000000..c94fb87 --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/LICENSE.TXT @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors +Copyright (c) 2016-2019 Denis Kuzmin < x-3F@outlook.com > GitHub/3F + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/WakaTime/packages/DllExport.1.7.4/tools/coreclr/PATENTS.TXT b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/PATENTS.TXT new file mode 100644 index 0000000..4b61bfa --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/PATENTS.TXT @@ -0,0 +1,47 @@ +Microsoft Patent Promise for .NET Libraries and Runtime Components + +Microsoft Corporation and its affiliates ("Microsoft") promise not to assert +any .NET Patents against you for making, using, selling, offering for sale, +importing, or distributing Covered Code, as part of either a .NET Runtime or +as part of any application designed to run on a .NET Runtime. + +If you file, maintain, or voluntarily participate in any claim in a lawsuit +alleging direct or contributory patent infringement by any Covered Code, or +inducement of patent infringement by any Covered Code, then your rights under +this promise will automatically terminate. + +This promise is not an assurance that (i) any .NET Patents are valid or +enforceable, or (ii) Covered Code does not infringe patents or other +intellectual property rights of any third party. No rights except those +expressly stated in this promise are granted, waived, or received by +Microsoft, whether by implication, exhaustion, estoppel, or otherwise. +This is a personal promise directly from Microsoft to you, and you agree as a +condition of benefiting from it that no Microsoft rights are received from +suppliers, distributors, or otherwise from any other person in connection with +this promise. + +Definitions: + +"Covered Code" means those Microsoft .NET libraries and runtime components as +made available by Microsoft at https://github.com/dotnet/coreclr, +https://github.com/dotnet/corefx and https://github.com/dotnet/corert. + +".NET Patents" are those patent claims, both currently owned by Microsoft and +acquired in the future, that are necessarily infringed by Covered Code. .NET +Patents do not include any patent claims that are infringed by any Enabling +Technology, that are infringed only as a consequence of modification of +Covered Code, or that are infringed only by the combination of Covered Code +with third party code. + +".NET Runtime" means any compliant implementation in software of (a) all of +the required parts of the mandatory provisions of Standard ECMA-335 – Common +Language Infrastructure (CLI); and (b) if implemented, any additional +functionality in Microsoft's .NET Framework, as described in Microsoft's API +documentation on its MSDN website. For example, .NET Runtimes include +Microsoft's .NET Framework and those portions of the Mono Project compliant +with (a) and (b). + +"Enabling Technology" means underlying or enabling technology that may be +used, combined, or distributed in connection with Microsoft's .NET Framework +or other .NET Runtimes, such as hardware, operating systems, and applications +that run on .NET Framework or other .NET Runtimes. \ No newline at end of file diff --git a/WakaTime/packages/DllExport.1.7.4/tools/coreclr/README.md b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/README.md new file mode 100644 index 0000000..70ce03e --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/README.md @@ -0,0 +1,58 @@ +.NET Core CLR (CoreCLR) +=========================== + +Contains the complete runtime implementation for .NET Core. It includes RyuJIT, the .NET GC, native interop and many other components. + +**Modified** and has been prepared specialy for [https://github.com/3F/DllExport](https://github.com/3F/DllExport) by [GitHub/3F](https://github.com/3F) developer. + +✓ License +------- + +.NET Core (including the coreclr repo) is licensed under the [MIT License (MIT)](https://github.com/3F/coreclr/blob/master/LICENSE.TXT). + +``` +Copyright (c) .NET Foundation and Contributors +Copyright (c) 2016-2019 Denis Kuzmin < x-3F@outlook.com > GitHub/3F +``` + +## CoreCLR IL Assembler + +ILAsm & ILDasm | CI +--------------------| ---------------- +Win.x86-x64.Release | [![Build status](https://ci.appveyor.com/api/projects/status/asb0nbj8tly2rp7p/branch/master?svg=true)](https://ci.appveyor.com/project/3Fs/coreclr-62ql7/branch/master) + +[![release](https://img.shields.io/github/release/3F/coreclr.svg)](https://github.com/3F/coreclr/releases/latest) +[![License](https://img.shields.io/badge/License-MIT-74A5C2.svg)](https://github.com/3F/coreclr/blob/master/LICENSE.TXT) +[![NuGet package](https://img.shields.io/nuget/v/ILAsm.svg)](https://www.nuget.org/packages/ILAsm/) + +**Download:** [/releases](https://github.com/3F/coreclr/releases) [ **[latest](https://github.com/3F/coreclr/releases/latest)** ] + + +IL Assembler (ILAsm) + IL Disassembler (ILDasm) + +Custom version on .NET Core CLR (CoreCLR) 3.0: https://github.com/3F/coreclr + +Specially for: https://github.com/3F/DllExport + +! To provide compatible converter of resources to obj COFF-format when assembling with ILAsm, use /CVRES (/CVR) key. + +``` +~... /CVR=cvtres.exe +``` + +Related issue: https://github.com/3F/coreclr/issues/2 + +### NuGet Packages + +Custom use via [GetNuTool](https://github.com/3F/GetNuTool) + +[`gnt`](https://3f.github.io/GetNuTool/releases/latest/gnt/)` /p:ngpackages="ILAsm"` [[?](https://github.com/3F/GetNuTool)] + +**PDB** files (240 MB+) are available through GitHub Releases: +https://github.com/3F/coreclr/releases + +Additional **MSBuild Properties**: + +* `$(ILAsm_RootPkg)` - path to root folder of this package after install. +* `$(ILAsm_PathToBin)` - path to `\bin` folder., eg.: *$(ILAsm_PathToBin)Win.x64\ilasm.exe* + diff --git a/WakaTime/packages/DllExport.1.7.4/tools/coreclr/changelog.txt b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/changelog.txt new file mode 100644 index 0000000..090b2b6 --- /dev/null +++ b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/changelog.txt @@ -0,0 +1,64 @@ +coreclr \ ILAsm - https://github.com/3F/coreclr +- - - - - - - - - + +[v4.700.2] + + * NEW: Implemented new `/REBASE` key feature for IL Assembler. Issue #7. + It will try to rebase system object: `netstandard` } `System.Runtime` } `mscorlib` + + Full explanation in related issue: + https://github.com/3F/DllExport/issues/125#issuecomment-561245575 + + * CHANGED: Removed any use of the cvtres via CLR system directory. + + * CHANGED: Updated coreclr 3.1.0 RTM + + +[v4.700.1] + + * FIXED: ILDAsm. Fixed dasm.rc to correctly display list of available commands in console. + + * FIXED: ILAsm /CVRES key & trailing spaces from double quotes. Issue #5. + + * CHANGED: Updated coreclr 3.0.0 + + * CHANGED: ILDAsm. Added /NOBAR key (disassembly progress) to eliminate the difference between other versions. + Helpful for projects like .NET DllExport that can use various versions. + + * CHANGED: Added the following tools to nupkg packages for related build processes. + + https://nuget.org/packages/ILAsm + * tools\gnt.bat - https://github.com/3F/GetNuTool + * tools\hMSBuild.bat - https://github.com/3F/hMSBuild + + * CHANGED: Updated original fixes for ILAsm & ILDAsm that points to coreclr 3 release. + + * NOTE: Don't forget to provide compatible converter of resources to obj COFF-format when using ILAsm. + Use /CVRES (/CVR) key. Related issue: https://github.com/3F/coreclr/issues/2 + + * NOTE: MSBuild Properties for nupkg packages: + ``` + * $(ILAsm_RootPkg) - path to root folder of this package after install. + * $(ILAsm_PathToBin) - path to `\bin` folder., eg.: $(ILAsm_PathToBin)Win.x64\ilasm.exe + ``` + + * NOTE: PDB files (240 MB+) are available through GitHub Releases: + https://github.com/3F/coreclr/releases + + +[v4.5.1] + + * FIXED: Fixed using of cvtres (.res -> obj COFF-format) in mscorpe. + Possible crash: https://github.com/3F/coreclr/issues/2 + Related Issue: https://github.com/3F/DllExport/issues/17 + + * NEW: Implemented additional searching of the converters of resources: + Environment PATH, local directory, and other additional from user path. + Now it also can be wrapped like ` mytool.cmd -> cvtres.exe %* ` etc. + + * NEW: Added new /CVRES (/CVR) key to ilasm.exe + `/CVRES= Set path to cvtres tool: /CVR=cvtres.exe /CVR=tool\cvtres.cmd /CVR=D:\tool\` + + * NOTE: based on 4.5.22220.0 / coreclr 1.0.4 + + diff --git a/WakaTime/packages/DllExport.1.7.4/tools/coreclr/clrgc.dll b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/clrgc.dll new file mode 100644 index 0000000000000000000000000000000000000000..1b398e091a1ae2444632dbb59b9be53642a21a7f GIT binary patch literal 287744 zcmeFae|!|xxj#OeolO?9VHQm^DwH76qH8U1ta{b^&jb zm@o-sI1J*&wt6pZ$;IB<;;neK^2=&AvDpL^60rOb>WyC1iJR&Ixg_9T_WOR$%!UNi z-uwOb_4Mvjq=s60CwCi1;6k3c@bj=`V|4zy6}*^_U5J z#t5&DdS~J;%ba&6&R_n6so&26|{|&$2%O`S>mLT*vL}C7ylsTCs3aQASfqT~Q_ki;;1GM3}L(jMSmag_8b@nf2 zzo@S!+_6Gwg7EO|l}or6gPD3vB{Z8CJ#C_Ob7N*7RMloU2Y`mC)itM-*8YF16EJrXa zOi#hAe!3~W7XN>?z5RA+8OwY~7M=5oSOVKohd1m%H080=Rwp|cJyKELHnKp&*A!Tu zWfz@POVgEwN?4yax;(Ad>Ri%{w?biYX<4&(ywhHXD>erQ}eS%gJR+feZy&@WoGEZ2I zSC&SEpr?;k7HijccUgtDJ>NjTcP{|Y`nikI=$-`tXZI3HenQEG^wvkoW0bs(k`0vX z1J<0$zeCAU!W21>q8NsW@%Q}S&})>3jjB~McF$CO-1V1z08 zFeM+Pw-HJfQE~z$?W2&)q2y#rrc!b~C8tm_osu3(uBNJ{QSweoE~jKJCBI3@6_lJ$ z$y7=@>Dz}WIf{~nlw3~93;&Je3`+Va8KPt%ecM3ElazdzlFv}`9ZIHA;pZv&1|PBRcD&b(lvrQ<=wJ`shHiy0H#$s6T6< z>)Iw=imk$<9m&?Do)xI$ zaZxR@2eTd6rv&v0r+%W;DpZs&ZnX>g`}2ks>}|yh)T5jlRQi&O*p1A z#cFPPs(!A-D%AZXNqF;J)a#93=oJ@8o&ZXu;KVZH`$Y7W7Pi|RwDa|00cCE z!%kFV1A1z#;%8{p4I?WJEq*IjGCo?|>NF9-sgPHQ`t2-Xd0n#LWGm8!e?$G}V-O=q zQNP0*#}YueR@g5uXuwg*{0?@!j9nVGLS)8d2X z!!;b)fQ(myI_zbo`rJk6a%Ka16z7juYDK|+ok6Au1hyjmasUiSjc*@7&0q8FHCV8XmZD<%ck?N zU6NjJ{rcC>U-=q{#qPN3((YJv#onkEgoBp1tfEsXh(wJcAGQ&8#)kiGZ`^{RXBq%h zJ>aoNqmtlHs;>camnBq+236xjh4(z$B3$2cvE}m7sdmnSGW>wTM`BV%!Sc0`JpvPIm%I9|ZLRC1F@`N;ST-uqSJsCkJ7@f1yOMZI=raxA-h_(38 zE zJhf7n8GJx=3QT;3&9?h&EIT!1W!X-4Z?dZ+a6Zo3ohJ`ezqhD@wT`GQHhzElo8y;i zGpE*OuvBMLWxk9)Fk8U345)by3|ajWFqmqdlhvO@ z2h_Y|mMvB=JfyPv7L-==(pddl{9zoce+c4}nm3u%Kg=J}n>S&9QS+uWKf~|0ML8^t zUzNeEaw)e}<%t-u=y~(Am>s|{2UE%13Sb3QeCGw!AiZYWf@G8U&a0IAX^WEiJiSK7 zi?NIs%#44FWxQx+{63bk!_0Uomhq~Yu_KnT%glH=meFEn{5xg5W_uk;wE2hF>tp8Y zSB%$h8LwY6Qe8%Br;&QsNbQP!deZ##bt40{{?RDdV-(ztl)IDTBnudmas%54Kf~~4 z%+F$WytK?6Rjt}9br`6i5)7wPVCRH#Y=on*O2(z{jwBa(W@cO^M8*g;Vbdv zZZU?RMzisp^h}E;Hr5e@Vk#kEHFX;-zEXz*LjZ6(gz+tE#un>@fU68zq=xk<;_lod zR*BBA^z!J&7O9a&wRscDP{N5s3^$AIOfkkjQvIFSaNqgWXu(*6E5~e=K+G;1ZLjTqq@|Mm!*U;Cbm_2HkX1J#)^=%@Wn=q*et zz6^H0U<`R8R&8wB{LgE)5?-#XnXgb&Siy*y^<%Wy@#=eGP*49_sH5IEs@uEdGO#a^ zj2MA%w=hO4ys;B=Naa+9H87esm{G&0-&-!u(`UC}fN0(|}{nKbz@?_NS9X62=2 z)!DJ0&G?`6Y1&%S4&p%)&*QAh38) zns{R#68Zhy;_ov`^6nBng*bN_g0x*L7ng0?L%_LPu+**w3v!?KGpY<*LCyErX!*P^ zK1*p8L!Y}31;G>uLPn{*_G-3aEftc_`|W2p<;bP>>c6rEBWuwAQZ%I+!xZ|B`w$f# z!>oWOR_+W>Z7_>8sP|Nq8})KNlLJWfK64B9AOTSN?V$Qx1}iQDw9Jf5!&KL$gwQxF;unwSYxMul9E{m2E?+`d3Mt|Ph^76 zZjQ-lui&*sQ=Ucp4JUlx7+QjtOT9#v+M208h!@abbG~!ZS4b zSLii}=NJT|SseBEv%8}HaMa(&R+2`^uM=l=>Jq}-ome^hf{2A7k|*%+PC;aA6rWs z7f{XClHF7F^su$B@`sabEiEC{bBwKhkw3i4*1o_Wy4c$1`NP|6?N?Az#^1S2`ccbS>Eo7wKH-eCK>X7V z2ib`p>_C2i=lAmbcg%d0E$;|frLs;`L)-pWeBX6ea@r=NuCvlZ0hHN~x;g`)31_8+ zt!T&b7qh<3v(kcq{@Xo}xIsy`Orq}QycIN>Hi#9XI|^FG7T8xmpow=q z=W6X9Wb@nXa`(zHpysv=N88F&ZACORDq~KYbJca)YKwfa_RpNvZIgblv*b3G+a`uY zTpiHJkCtaUD{b;@dnK#}L+qU)KRUqj99Ihl%h(fkmXr&f#sh~#Y(OoEu#_!W!G}Ks zel_u*)y4f<@)|at@-*?ax#}E6RPVF1{p!qmSUE=B=VXW3;{I9coHY*l{Z$jSSr*q> zO;qwUaSco+v_93sK`kp;o!v)t_{?RK6KI5fifU)w1{^@d1vbxq`1AV?f2xUZ=4;aw zP5j6Ez&3C!<|-oHm1Ry#FwbsgaRkd3R^194iR-8)uFC-kG5K`JewiH1>f_&jYVm)1 z2_N99CYmT~R0#KgTg#4B9Y<`myIG*3+VEb6B^1;P) z=+pOMZH$p0cUF#)AGcT0B)E&tjfHQ-|&JnsZqw;v{}5i_-Cw_MgQpLg8^NJ2~At)8fCH-t+HA znOVN@u&Kt|GwK`9W+&HuV68iE@n2=sm^hT<`)p`(;tRe%IkzqX5u;gJV`pdBaj*lR z$o~F4G#Z-toq-RR?>c97N}B=$#}hk>bm0kDEZ(wjd*Oa!2Bd~xV>8_LA`+UoYugUo zS^GejI{sBWsnd7SHS={`gSHl2`Ka378hWC^p+yt4(eTh)xlLL#4^NDfNz+;-2p(asHjJLFnstVdV&p!5H2dNF(R7So%px;k#yRcwuo9P4j0^4T*hI~QFIVioOQzF(cOsJvO9s%`op$_c`(tx=G`uDFApb+%O8^pUgs|c8M ze8bwV&b8NN(o%z37m8emKVI8NpQw51&>**0sB^_&9<;yMNb<<}2e)y?Z8F_RhUe=w z%`~xKtA_|fqX(llOPWuFHsETPgH=~q52`%vIv^jE)?9@Fakp?;a)vE;HF^vyZ^I#} zVLPg=%PdBYAT`z_p?P`=mp_w8GbEY<#~{AG=>_xj5aZ-I1zt<@=!M=i(_I2XOH(5V7+Y3()w!xBxIgZJ74 zQESJ*F|W8>m?ET2>L?092N_BZ^rU#jBtltX83CA%qKh!k?$R7HKnBtVy5*#XDWY@b zHI__5OGP<0I`=#J(Z>xX{>bS8?Mp$V!u?LUzSDe<{R#*rUj|yraowLac9u!GJmXDd zh>~ZpnM62cP+S?;{kbw|r&}}0VN77D^J%?3Df#%o#<%GyMe>(R^Y_r1&2=enY1ch;tQ+TGo7P;fpH&iVR?| zv0(04TZeI0L(I|{X`yWw6cqZM{|>4T9Y9aSMkW(gp*Fc_q724K4f8O^fETIZUOY6D zKn_~bIFoWSN!*F^i|%uwcg!$7fLb`qhn?KC*^}dPna+uc}l|U0+D87^JQqvU&MXa_TT;P zcWnQ_(*DxuE7XbZPv@2C^>fJb=9|Mj5$zQcGwRz&2w_J|=|l1yc6Vkp5lU%t)JZ=L zNZUKqHE$td_Ru#?$s|$D>L0@}DA2Kc`g(80-ey)&A$iV1b^3Pj<5Vootrf6@UTQ6p4V! z|EanVl^b#idpvo#`oM&D*KM$A?Vb%%w1@ZD)4|#Xj@{6LSs-n11>9<~1t3|~S!q~l zZCpJuVzwIk2PIR-T7<}P+&2oA4q~zGPW z>$oPe18ik#<2k<`^07SPpKK}&oVIOL0n2laq?w$UjwGDsZ1hV^AuAo}-5d9!86r^Z z2(X(2nUiMgzaq1lYQ;pb!YZe781FcQJx#d~je_1nX_!u`{k_iuD=_M8#SK~^sCMyy zDJ_`Yi@rj7Zgv#oso#NzFv#2!#%>6_$pNy&q|mO%x5Q$(wN%RQD%1ZP5)ay*Xc8*2 zK^i+5Cuf||H_!)^9M+|NtR3DZmh>#<9V@lN38x4<(25g~6v?1%mi9O<)o8#E7SsWeYB?qk-(hOPNGG)wRS%z3TpvL8nbhIA z6|Bl`!dC1W!I2oNV|e3u=Jb!`n=@VuIto@ne-5r)v^1oKI%<)x2doTQ6IE#@tYwgf z2+;qb2H!%kLS7%dY+Vc~J4U*dzuM z;l%5kG2-PLkKuohiv#a+{VbOUIt_Us6d)aG+$C+6iI3#w2FzLaA-*H@u>uDf54BgE z*bUUh;j$pjOX1CvARC~#hK3Ug@M|&Sn~2wIrZ?^rl>9d&XF)7H*OnkPyo2vdg`d>e zf`q9bl-9n01e?w+gNGW=)n3PIXlz;SG>en*C`Ue0{YmUaUhGBYB@~WOldcChK#Fwe zKfg+$2uakePEr?usPYcEJJDBk1^`N`8@WVv3mj}QSe3pE8{uVTe9%G|fH;9QvzKN| zSI|a%M)9ax(if`(a=6rV6h(KPAq_UPYuT8_&egD_ zab@X{C9Rii6|3)!VIu4Q6DFves7_KV(1+n2P;-!hz7MTlQ^Ou0X_afK|9(2)M`mCX zgAQ0~cw|KFBb2(m`FLjnaWBF4cLw79yJA4-UjxM3c!xcz)g*{R>vI_s3$_+saseRv zRxIrt-vW+@>_(b+1I+K4q%xC~-{R_B?FPQfmM_PawoGj*ECOeASDjUWazY*dFf!pt z8ni9J1Ez!^hil7d84uahrJW8B)h+ED=XnG7W%7RC&Fr+avujztwDaIHHQ7&9s?*+~ zy4ZeL$dOkt4|#Z<6&2s1s^#|T*QA}IpVyGTOwF8+%!*~|G!GRt2&aDCa;sp_%W-v? zf5Ji#q{asT6gUu17y}Vq28zhl(%|GN4ehjSdzFCGzKL?h>&F*?BQGtJc81+ilYX(J z!pB9dQfX&U@+8g2dx&t#f1#_agWJ~Ni3pEG@A~eyANQJKo*tJ`}R= zj)HxZb{=H`wWL4L6Q9^B?QDTonMy1Jp$=VZ_~$r550*g>Wx&Bo`s*_1p-RD*4&U9T zk_+$*A8hx0LDJq76g7%rgT7-oMYf=(h_tg?+BvPnz~0Of!Ypfd1)*-f|5{@=}#HSQZs9_2f%$eOz z@V;I_Z(qV~P2ViqT@94!Q;cM)S18?0Hdy`XzeJ-T_6eN*FK=VhsTiUsHw(oEcAKzv2Y2Q?6kv!od%@baRjk-`R zIEO*G5KUQ*(ZZlL;ARSFcLF)o8gk8-O?b(Lw{rbD^JT1mrv{6N_kec{@mSH6Iuxb3 zPvfQRr98nKl^TDCdo$rQ=96Mj9ysJ(=GSU4?IO&E=Bo9NQ8MS#g7JMrkN*i+U}CQH ziKw`l#v*2$4=vDpYl&a;zfW3{Eht1>RR;Ims~u;^GfCv0#~d%~{NQkPj8P;)zp-=<%^ z#u5`sY92G$U*997g$MkSGbxpBV{PQ#h0GZ|#aT#Xk~IjKvyr(>syZ$ri_AgDTEMev zljZ;xL>FiH5$D+i#fIlpU;dfE^(+V^}k)KQe|RXro<{ zaKHy=YZp{NUPtN)lAOs_Hj;_Yi}?hj1&k75Lbue3ph9iuib%)>q#wcMBMwahujB zQK5!TKel^rnCu(kND^KP>Ov6Hw9vG%zWRg7|Rn=0i!YmBY(0mWjKsMB?e;e z1c1g@;iU`hS26htN`H2S1S)6*d?m|YzznvZpGhs)n zAqrxUUpe3(OZpp(ZE3NgstH|NI4oxzn!T)+viUM!JIW$5-q3d!TwU&x1+;RKWd=Vw4Tb?G< zV6=V^Kp}k-%M)Gk&)t$|zpm7AOMMnPcHPstxCWsg!8MQf6bvVs7l+}R9yvUA?m==b z%Mx7yrNvRGWk;Z+)rD1LMsSSq(KX5|GX!5!kSd2sjn^J4g!eQSyI151;7kk>vTG|6 zP-vn~b{AVo=G9>lY9q&o*YBV&xr%Lt7@b14X*+w3YgjJ(l81OGeOM9pAtw*6b<+y^ zi?emZkmN$jfifoL$I^Fkx>%4C+9|_f> z<@dwQL5ZeTPAV(X=FY&f(x=}E)k5vV6(*t$taHy8OYM>`$yH~ke@U(}Fx3ANJ~se? zT6)`vA(RWrj#X%{oCm+;p+pYLn~c?w!i7@FFelj!fppoXp;F_F7oYP|y+-0gQ*3HRY z@8E76cZ>`|p#Icv!4#3}pT*U8!=qhuSpD;OBymrSlP#5YIa{o<0;@C=sQtcV@-lte zi9%2$z>E^16{S5#8Op~K%Ai(Q+<$l}ycZxz20pi`HDM658<@DK(G!sx-$7w%dsr3s z49QsFswhUZYg{wnde2N{# zm|G8-1Ez@@kS(YsI=qp5_Q2=%z$bACTa3ET)n$6PY<44Tk*w_|goH;;1Ca}=n8A9O zM7|>gKD#FHah$as>KUaq?S5;QSJZN>uqeP4r}-GB1i-MivBjqbx+euD?RUWhO5O{H zbylD&fiz953-rXfTCHS@I%#dU2Cbe!YX{~r3`5*3q!yeiEQ(o%pa{p--atAn2z9QY zxxK?^;>+VZe7h$K@nMKR!W^*%Ocp5~?<}E2OA_%$oK+geAd$|)4_EwtR?}y4D}`kS zivyJ3o58s(->t*A2vmJb60s_`@Ct|3g*cs>K68{&2hD((l@gYLuo6sz*amA}zD~Bc ze3%q;Ye0RV4`u-1OU(}l^Lx-iL9IBY6-CVnIdJG+);h^XgKIT$IH{Ge*k_`!!&=Z| zj;WeN{tv#17$j>j5OP=vvsfcmkFMtTyS^AQMc|#g1zC7EEO*%2rbo;#cMH}~hK-!L zYHy*{%uE@mK1Q82ewb?fP7A)9`a*))Wut7jHh+!n_#ZU7ip_w@41eFsM3NAT|=l^yhRh;%>RN`ls0$x zqTD*PDBGF;d0Lc8d)lOeS1&EhOG|RA>e*mzqb0e+iWUE2Y)KX(de2xJs^=MC->%IT zdl%WTs|>{W?R;}J?j61wholuO#l5r?IfH-YQrru*RsyPHo@Zi`14hG;9QoCxzg zZ*5g8PpLV5=zF1>6V`8j3{xbN7O3fIRPu~g5gjh~cWr4(G<>ZbB}WurB(iYil^hJER5yAF&R6!yccE z&u)l)cGa>?#)qSZK0KEP$1@w7>kP$#cdAWeKPN5>6le|KHs2&Z4Axi>t94s29pv*; z{y|o=gSah3DE_AaMY7x_<+RoZ5kf53IHRV+ZEIcqC-lzsMQn}de(4$yUfOQ?8qfUl z?UvSf8aibz@UmivMX@z5HLRfSF5ZEzF?6|PL+@u~2v{>8Ynk?cvR!kj#KvY*H#_L$ zfS<*>NxfpP@or|><*>AlQ8!OZ`JAJi$&7yRJ`VM68axW%Hg>lDW8TLhI+n@%_|-a> zub^R2ZsY;}81*U});XV-6>QDMWQn-|({UP6|EpN_v}+YSTdc4Bf_Jk~kD$~3hTR~A zeD6AAdiGu~OGzdkoMLt`Vg=Wo-=(9dFpwc&*`Ifui?(99-v zQZKE*7@NTPPbc{)V^1FkW*K4{R92}lviNe?&q#b=ZLT18I6cvI#@d37uF$oQwL_%9 zrc(fqwCqAiTddBGlA5@pP=8NB2MX+Teg}-U9tSbTjwXZ76%3;DkF)H4@O&9h=#|Sd z7M@!5-HbPA@GBQ){E~)!RT1zFM`@bqN97>f4?{dW#*viU*cq7T1E1Lq2<(9m;)>7| zCO^RfC$)M57Lq_9t`+KY0Sf^F0GoJM>O{Pv-TR>?z%~fEGGjqRYJgu5_N#H=>@sHQ z(wZJhR-KXuq;-GhZz9BYJKWL0XK+Jx9bmi~Z5m?*>GqQ;(LsiQRXKwE{C3Bv}4S24ifI@#%fK`qaZzN6snC1(l1n zET>Q9HTfhquOD;Fpv_&_G!M~W{hY?t5LsAO*wwDC;~IiYQjkM85B?v`DFN8K#s+$A zMTPJZ`Nikh8;J9L17dLEbD%Y?10OSZ>5}(X;=l*)PU{)@K&5AuJ;O#0YL)VgB+j3? zGm@xUzl*KoU>?MVt+bFSt&nkG(MX|w52_Dx1wBZfz;@Ce0Rq2-&Bf+v!6_{P?kGH& zC^r9UC6qT#nO9kLm(m%h&P@)kdmel@eIL4s#oLII-9%)p5G9R=A_OWRlEEJ-)^V6b z)bPF8!gj8}E``<}`RdlPFST~(6|JRzMQh~Z6k!L8^`0+cjr{^E2;zq3cvjyI(2U8# zt!#XLKpr^mK17~x{kzGI4`K!vfUzLYm!{UB6ox%uMd`6z=FW1B@9zCGObFXYo z{1d5|3w7`PAcTYP%O-!f*DzK=_&R|m9;m_e0pFhaOg2SJ|yGL7P(WdRxrtOH? z>rsUf?0}&tjvoG$b26w~9$Ym_8Dqhj1<9fJup7wF5pi8P4g)9i11GA+D)%MF1?ywf zf`G|!x)5si5D1kBDq1}==Jw?t8k-$7c*7O&h(V9z5nyoq8sTGDQO?aDmu!2cww$yd zS7Z+D5ytvAX*;%w<3t2}8Q7KCW+I#!V{z<>lrxqw>JE1=r}IA65Sgq0fGm9`jf3%R zMTlHy_@Xl?2rap$chG^aq93$x57Cd)NDR@Blhkc~RstM={?DQxd_v*CsMR9QhJhGL z%Q1y7$6Ty4@f+rPw8z%tW^{$G!(ZTm)**4k#ySjb8XD-!qg=^~`~M=0G!1-~u?X+L z*j%c8_pi4Y7ESR9^3bu^yxBigD6yBjfIaqI{}Nz{9AXi~=AtIiwpD8pHEutEfY zqRO-KzA8IIIIVgINCtdm@Cc$cTfGCpV1=s3uFs`0tm!8p)tbm9I5qOuGg&?y_%qi6 zfC|Fh&?5JNox>he`5=X`+#k^#^>6@U8LTVjFX^}nW|7e>mqlceRavt6(_mGin!7my zlSx6}%9F%y7Yxo;dPTK*GgQeDRDn9Hc406X+@jB0Rz9K?M~FHmuLt`J2h58sQMIb0 zxow77yFUjnDPO3(W!Wa}%i7EEgsVoI4IZTS!jzZ`k0jtq`Qe}imHK}>)W6u+(cPd| zEKo{p>y920GU`r}YynC0H4L74ev|tUERw`G;!LNTXL6s)+}zwS>p2VSil z#Xr1G$_XeJEUS9qu}=M4Pw=BL1HvjCokBP_!0#=h$%}xHMddi23FYvO%27{_Nq7N^ zBz-+|2bG99ePMj-`%=-XOZsX$VbXm<{o^3<&g*!u))`}W7q}+ytr;m?H(tWlHK3!~ z%tpek3BRFlb8KSugcmj~!Dy9<2{3mhtFQhd0)9ko_(cRGtbCDGW0{pB^XjVq#Ecf7 zqDooHv!IO4%b^{UUfQQsMxn7(8^eGItbw|Yrj5!$Q+E<*8Z~a+r)pfcF)AZFvPxvYU8 zd{tsb!m0$EIw7C0{4e$g!nno(fI_yhj{w+6_-C(CCz;cA8q=KxU9F%@fx$SrUCIeV z(^@*ONPngZz0s%wlHY&I8{~rzW7Qw1CIfrMgi!C1@2;Gn-5<@+sFyWYv4&p^(zwLa z17HR%Jq}z-PyLnpYK#j&XF!yd&$H*uCFs}!*ZMEzD*PCDsWeAmDU8FRoDfC)0eby}?yLsrXu>CzuN z=)A83(S{Z&_keuAv-(yjL0oX1hvoTRC@Vz7wZZcv8K2pMx$h5Rgavi}`;q9JCJ}V* zlA{NwZxDq^BvV=vQ85ol@*7@_p@dzS^1|UBv%!665FrCBjF?)4I2N3SZSW^{c0?Yi zxsIA%iD{~|*x~-+AC;2_R}m089HOEnuMB(`N0i$U$8zKB?nB(2AJ)CvxvaWdRAzQV z1>|7)qHi3VpadMQV=@#p4k$uE1Oxu@PzdCUAvdc?rOw*qnrZyqEoY?M;vnSRyMHarB#&o)K{h)&pXL9l)rC zc#JS%uJXA9g3@u>-}mHha%hKpK@D~~#B9%t&av1Lppg5tJr;Olx;epdgUwIp&Kozv zlcQ?9{4||8SDAt{2|2$lKTWKvG^@QF_BK8`-0l{ePx!u+`O@w33TNdl@(O!Zy1S)5 zK<@1(KQIy|fJoZybz7j#}_`~AAcJkqmIG1iJ2jP7Ie2L7SUM{@jnjNn%$&J;p@>} z-%3))q;5DRRfyUeLI%v>ly!QykQFbu-skd(e7tfx)I)L5y0ZXah6U3a#ta}c;J)Y% zBImB-fb6jT9pF)2C1$L0thB1D9KcDZ0R-5?8hi9*PWe|kS(#|GW9X;r+sWkUIs(Wq z9=ogpGP)|emp~yT_#dLV^E8P~kgHy%S+ZAv2DvO)Pwz1Ugg2vvBLRBZAoQ}6+FY%n z@vNS7amqe;lP9mpqbdZlT)Ft^g#kSgVZ0{+XdC%eJoO?f0{?tNDUSVHfH6lb5WNgRYJOCrcC*{g-sF1)9_9Qo7cPHEvBJ34I)g?8kcnP11R8TnwnOK6y_6H^|!IzZ>tNhi?~9W zS6T)?qb11KX0BlhiK@s{Yjkbe8f`623b3bKGzEX|3A+xGPeuWp7K*fj2wcqyM5ht* zI-8riB6MO(KO~g7Ow{Nl8!%de0=r;P$`9N4n4iJ6f;mPyY@2Hz4gw`@B~+EvpEK`K zxBD^CU|;B$J1YNxm=f=jh49?D9^P@}wd@Jk2dN%9g5;vKhHPjE805jcg#d%PPv@_~ zEDtlk!xCSA5Bg_cd7XYU)(!MU2Cw>vJ*c`<8JstXQ4iyd1;>C&u1TrjG^+*kCEeyR9Cs4}q@`p{xL#7`ZcK z--f+Y9jg}6k=|;NLoITuMagQ>G&Os&nmt7=dQ2^PSS|9YMTKh7e6{EywP=Z2v|KH! zR*P1vMGKU`41G(IAdvS`GdcGb+W@RkdJ{$>iue^c{zKvm^rmKvSsAB}aUWXGiR}Om z56fYLaPS?Y?W7MtD)2#QETmxUcYcwb3E8}H<%d6Rrf6tPv~*tf=e+EPylmoZl=Pw0 zgNHwq&q(=4*cl#jNd4nyVx4DaAO*Tl=)b$oDoC$!MK_uS&*9nE#8Ws8>Z%#z>0o`| z=%y43Okdv`id*0IFXSGEQ&K?Hq?dw08%5Cbi8!8==G!RHJ!3re)|Y4+nzAqnV4I1s zBW3#JKT==?B1u8BO!tRLENE)r<@YMD8PdKZQirteMB75~>UesFy?i`v0W)j_1NZz_ z$G?sYFih(B7Cflq=}6L`tqWH${=zm2`PHrOVqeXlu>%ViQu)?cc{Tte^2Z_-Zy#3t zhbYeL+x8;9ad&#LYRU&b9;&W@s#{V>ueAKQKu-crL>~Cq)IgZWdfb9C@Fm#x5Q=4t zr+R#IGse?LzC6r;94vwH@9>zFyJn21NF4vw%j*DF@pAI|)~7=M42CuEiA~L<&_ErL z(oh!fwq+q$I`=qhgTwO}A)(HsnmmTxeQ0+b7AS%M&4%%+Rm45j|UylOYNDv}4 zzJ(?-##0I7v<`h72-7ywBGFq4|1I9V;&B>d;t_P~R0`pd8Z`c56JF@yDLksD)@ak+ z@+O5Cs^b@+0k5ST9tch2HI&<~j(;9VQKyr;HyjUa&!X7&?afm#{)x6}wD%EJ+eY5v z&Gb7A+vwZ^z3nqXnJ?`OqAgZCXf}FBFMM+jzCA;c8L08>cJ_YgRyLiW1mltzJGf36 zgQx|9@Ul$KAGUeLU16N@tjGTd;==`YoDcl+ER2x;_8oL?Gxi*!!Dt)gLSF*c5Eh0V z>>M2@jv9UHFYB;nxjXmLK`_C!O-Rrmw{;a`G7g)HAEH8aEs3u*b$uDU44e(UqSBH! zyx?wLkc4Vp5UyMY^vPI@_z1I?TvzldKg17l6qo9MZjMIRAH(?pQ;l#R#P=YOjskvS z0Vb@D00bw^5Do-VHpMuH7Phxo80MeW@7HTy#%w`YG|pN$t(T(%e(s+ zhJE5QV@hz!R;+}4&gI{0e*IoSjI=_a|sJfZBMRoIX-e5m+Xfbnzx~fnJkom}ilQ)xbLEXH9Uw!;a zUK>rD8|Z6W9hSssRA8KiEN;#nH6$FdIP^_FyuAO^_OBI-_E+{9r*`-S7nb2q%f*@T&v*_E%Ae z8)0w|W)hKa;@is8uwb<0`e;rMYlY=GW_M->apE&I3e&Pej4{j6RnG0f@Eqv9Mm3m1 zs2#{k9WzlYWLNfG3x3ONf&106-1>f3kb7_`+`~Z00;y!RPWaX00WL34o`#FcN|ly6 z*z^VfC;5vy)YSXGMUojU=`W&BzRwoxT7HDgNl811B;BLRID1B|67?vEAH&f{I^m!J z$QyOEQ4`Ddfl4A(n)b^5!KrK0``5_bc zXi73(1wHT9q3GFPgSxz}?Il95mb7U8U24f&nnKP>YDq`XvkO86%Dzrh^X#vgUoQ$O z9e4?N1PFJfh5G(;fHTjjF>Ynaq?i?@1&6Lfhv^m3mj{_eQ@JquuqdcA$noH>7$QW^ zDnt}ir2|!A7*MIc@M;Su=|4rn-SP&JGgXZdEPl=9*V+6!hhLL%Wy);`ML_(} z%~W41a`b*oHDimOg&G-aKqeMoAWl_iu{6_W`eq&44}6dS5B(8~YA;_@$xWyb->REm z;46R*nAd+XRBay+YgDT$&(Z=@p1~E?Swc8p(GY{wy;~?V%dRQ{TEz)viTc=o1J*b^ z`p195BR8KepNU_?@j~sKusl51f*(wwJx*FxxRl&)*MBZ^&)BANynU1J z0g4mUf)HEgP1VZoNX$I2a+P9&kkOfShQ2Nrry-j5uKpY*f)quMA;Xdv|fgYQpr{Q!zb*wiF zta*KaUM^6_YWIq;cl*y}ltA~OulOxzhUU5tX>2w+1K5ky%~^O-H|OFSO(Cw7vB@wr zgRNBhFr!s|T!*SO@sZrXuPbQi+Eun1cfRZ0z04{Y$`n>&98LwLi?uxt-kJ`u#D=`c z9@;@+xta&E1j}DsZh5chN!`t^k0oAusHDK!jJ@tkW2po96*i^MH~EM0P~q z8N}||0cPB4S%tu~hEDLh1PC}aQ(%L9$B$}Zr6S^nAnC`bB=qR+p z)$MysxsX~}hGVGmrYVD|Rkte_(kp4tQ@$(0bc&U$TA+hd@|M8eKm&2iMg%~=CGTNe z3q#2$7z>0#G#U<7EPZ$$g+b}$KM(?^#4DgkHF~!Mw5)a-1So5;0zbU~>5~6i5QFXy zM;7~SP$h;ESyu9+op95EZ@(D;H0-_e()-BJduVScBJ8-ngXBKH6Uv1W2ke6m;IM=Gj9wx+i3miGC<(3{5FN*%?13ka5q-am3+V*aDpj zJD{WqdLh1~%^_dD2hlQyU|56!C}mS|oTAT>QR1jfupY{i+bjDE^&1Hq*txsPmG9bd z;v|n+qVt>mu;hgt%4+B>tPIEG&bF)fA=rtlr`T85cjzMOE3ua|6t@R+jOu37>4r9B z%@$QSz@Qt2v8oUUSGWqy5~U(5}$k!r)nte&oT2U=Rw}0&5W0e1s*^@jAY{p$Bz&B8WCr${oTj zaX8uwj(y65vFQ`9!JRKp{DCLE35ybSSvI8dlS~Wj>X^{=N=>?e`p3kk3Xi9=+(QkL zO4t=d^h6$TjB+>uUYZkRHRD_zmbvx?WAhxA(STuWjtDJMJj-_=A^$|g1V}{0Vn)8B z3T;Q!dr>3Y6IG}q8T4?UbT~)G-LtC#gPBGt2zm%Xq1xcHgAlf7BYAp;w71JLiD@s)E zt{UUohY*)}dH|*X$XkHW_YKlWk-0vjCS7WL1`qYnhC=?4)~rK9*-PA*P`irV3Ckz< zjBuR~e4dEFf}TWIc$cLP`tH*p6LZ4SPN?CuYzq#gfV4Hci*YUny1muZX+|uKjkJJP zkK-oN4!Sr)13jNs6sINsgXYKvgx7%KU8cqk=Zh05|g zD@fK>&@2gC{j^}mobx!GSXb+aZ6pE&kn-CzJaFjnI3Mkv&oZOHyQ@Pr zvPd19Y}D+)ZvoLyEBMpcdfKhKdzC#DX(ITqQuYv|h_klKB~Lp7Z{SW^=}_+jC!y_m z2*jCrlGPj-Gg8%@WaD>Ta>lVWJY*#&jjiEPD>>8&E??dsVmx5{Hz@q_#XgYa_ z=96Q*aTPdEaL)N`<$PT2N6HsC)J?uv4aG|zYZ%LG^bFz8N{ZEe4`$3aH1B#(|3$uMV;3HC4rk|XQDO?jqa3>C$^JgoWq=gZD zS2dF!CQBKNN0c6T`Z)j1G3T}M8J>vWq5mtd%`aiEhyM#Gz!4o&*O-TPf#VZqiJSEq zi!AuT4OB)_Bgt^hBwfc2323(w;w^2Q9V%s0ls5>Qf*(4VQ06@S!AKlQtd2}#UwpI+ zm$zLi5*NB21Ufmxwh1!4&pwggLw};fJG|Bfoa7fNHEG7y2;DL03WZFSX;1V+|Lhs3 zB1m{Mu_(cYH4SK${(QGGPr6nVu^!1NbX1LJHR&4sJwcvEvnL&{i};x1rWJ z6%HJUg@FfLt#Bf-D8$w-7^@Ipd(M;W3@Rjy5p_}XBK|RDg{ZDj|6T?sFN`xtrF!wN zX!oJxQ#=tY{t9fs;Ay7f3pJkhUYH{I(pLJ$VHr^vB&pWt;+iJSgLWOD zT7LEdz%YQ(XMo6}WGLS9vlo$zYHwLfuj!Z?a8-j*UurRh&lbXK7r(Vfu6AYmzrv&u zy3T7YLefdGyp(U}uiR9hCv2G|x=+mF%Arn!YvKckqZO5caFpWhlr*>nU@neBICRP2 zKsP*)C|*+X)Ht*}5ZOsx@E^sv!YaEDr{aLnXvr4I(@l2Ql2b4Q!OgRz-&*3Nu;`LO zIiYf#D?#@3!4!$=Q?a@UIQ_HpfF~T9&9dz-&nY=UT9b$Y<0YjvU}SN4#IVvWR2mLK zVa)@Fz6oea6Q{zc0Vk=1sDB*5PcEf-Is+#C zQ0}=l9z>Z;eVr{LHYZE8dSF)p%kD{r(JX+J6$ilEQ3<}LDjZY=kicvCCkVO3!jI+A zrK7+@1*!Xx9QeLDj&`@AA9(DX>j9R>71J+NA$~i9ZE^OXAnf&zV!ToZW+l^y{wYQH z(X?dNuFZ9z4eYWA9(1?@2IB4fS6o4wz6m0eF~griHtPNQ4}T3@(J_;0Xdv_l4g@9} zSZ~@a^Be<5+|fzxmTWP<9C4vo^9ER)?$VksqhUCK54;e9VY$-n@Qoo`rfo(MbgpY! z@Jf2k<3JD>5HW3SeLFFf!FVD*`ig-#Xc!GwOnw&IKT>HdU7Q;g^1(_KITuLqeK&T1 z+Jcx4Eq|B}?HaB&gP;JCjoz8cv`=~NZL!=*dZR}AM8l~OYQbf{zz8OpK8`j$NHZoL zv;4)YXKqi^G5eM{DVyJ1A%)}u36 z>O>hyi>M6;MO}^lV67MjF1t8vqy<^q@t#!*rZqo?Gp~# zCwj2GfI>s70hl?p@5}IZ>d1`A*4hIi}4gSz;z6&h$t_SR8^QcCQjs9P!k>>|5 z*a!WH-wrZ^h3e3={tInEeGt~f>j*}??s8!AYFmqZmk3?LeBw&yt z`i}@soV*4Gw*Wr~k&1pK$G}A!PSjsmtZzmscQhZE#>Q3w>}0Zy#Ktz0eE{M&5YpXS z#4VRa(Mo&t4*eSrsOWGCx<8(6Bqa$>CgMLQWrd~v8=y4QfmDOgpo!>8{3wN8PrLwN z26=3^xrmj%DP#e_7}N16=b`$)m>@m%DX=0nyo@U;ZvF-L+E0{=ani<%z_M~t^et8{ z#{1t@mL9`V&x6X+K^$@bw(S@YX0{28+V$75Az>~wLW?BKSVvNzFTv~VB|4?l3<|I` z`s^Tn5V%53u#*$X>8-{HC`{a}geV z9!fQaz)nu|=o3AC_XpyqC2SA+? z=<7H5*FL*9zPxuc>eVor2ys1^)uNylHr+T)**6*y;VUe?bl9R&b4u`Cho60cMpy8O zUMaNGK!wzsi`UHGV`8RvI+cEtv#fAsKxorKJr1*&j^;+xO`+GOXOrj?=H)*YmG-#a zIQnGiNt8GV%zNVjFZm8J|4F0Lgx((D&i@VefEaz;9-WE-iBPAiF?WOOh~8lojPqwZ zA>7cuz}~3CcFQ*UaD8+wX~afr$r%uRx!S56#_+(vYoq`JA751f&%S#hI0X3*cziwq zkDYWL^?%dvgz(=E=|$dyEy#1kev1UZ9a4_pC|PKG24(c6_>pFHZ8ho({fahF7;mPN z^1D8e2C3M3fVX$fwGS$>ywiq0jVseQLynEipUlNm2YeQEIQ?Kx#Lq()>l=TEM=Uj; zWcd{tEtH@8a1}z>ty6=fc;$<)q8$1&XwJAms`RDO#t8PcOkYKlGj8F)2dJ(UCzwEC zlChR*ST(QGp7Benv1+#AlL|v3tcIRG$SrWRF6e`KD9v=U6<@J7QPHb6(Wmsou6^We z2416U)#yr5-d_dIJcNVAv-nQM{ZoqYi@`XhjTSdHtcfzw<)Z+XZ&>-*tgtCNOKr1k z*tw0Zx!&BAPvA!uhHn{7=BA7-`SIA6{BUgZDa+u$aJ4eu*tKBQ`ubgK*p7U*am23m zE_nZ8JMwfSiGb4%rVa;3z=`K^SD=ROa^blT}`+$FBLzK<30iE!A{Qt0V&gq z&+^54M-*BDkjHUDOP4f%`ahDrfw-WFEQv3@PT#c_K7m7$DPsEKEpIendT|bVvB3tB zf{cwPdoY~sun9tT$#|Kx*Z$GLdb(o`!A}_D(AYwXq7sUak{aGcuJjtb>}cVXd869Q zdZ?!^*n$bPiZGRwmiR)w__IsnAYu5LC`^O6hy$TYj6?rdu|@{_aD)#;!WBpK68k{8 z!v@0JFk&F?e`dr$yttVLqMtsx#2OJiY85RL@=`?L6OP-7RAg{eth%+RaHw|_F+0y2 zr&}@4jMs=W^EiS+JUW9ZdoGWRvz>4f!g?kD4rpDca=DwOP;9X)h2q1@nD8bclhqL& zK>$=v(1i_owA@}H{UZeHJMfnq>mdao_0m? ze>IAa6TFUczy;2M*pCM#&zar@SOoZb%Fx%-uK0R6zQ!T?=ai5C8~)$DFQFg!B5ml4 z^eeu&(`YYE@Ftdfr4jAX8MI!py!StG=d>JEr3-3qdUC9{lM9QAX>U%437V* zouv@vqZui8doAkx^wbBX{4-e8hjJQQv}u1Jp3WEWudg=!9DOt>{YoG{OoV=EjP-darj5A2 znFMyw`Ig#Lcpu?skghlu|5Kj(?bxR`>*pZr3{yuOg#?ci9ENpuI_1EUgxa2Hh!Jpt zN#!oD{yuNQ0Q>H(M z67+iq2e3Qe3Xi$iIgBDo+zHhpM8$z)#rWxu9udFiqvv4m;|=&G2-S9Cp-3u2J+DA+ zhQ708Fm(MD@0OG5k!)cI$?}(CF2Rw7d@i(X2OTZ7dm5gtvqYB_AoL7J9t&sRC=|Jv5+pg9!0C1nui{7R7Z-c$z4fV7rQipc1fL{;7XorM zR9ewed*bA_K~orPE_wcIpEDsKw!QEBystmW%$&17*Is+=wbv&$<+ZCAP@b(nI?wxx zYU!&~(I~Ta1x3SYM~cQ8Mx$!R zeB0M-uI%EiVQrF%E5(9@5cK~3IPns;Tz*R!bD*c~>3le`9JC8@gc~7ph!0uqub33f z+6oz+%nLu0!VWVoOxJ;^zeKLv_@DHu$7QAx)vuz9wOO9}@Gl^Jo5U?UCF`H{1 z!1v_IquO82Wyr!E%D<-H>WzSv5a-6un=M zL;&bA-#4Ze?!yU`g2oNoxD^$4=b7)*p>f0e>I)*pt7tg9Qh-0O6M2T**qccb2LUSyu2sSeD}ZBeZh zju+U4dq^OlvjQM@12@WaXnSo2yXR9MxYfmi_}&xw*0!1w^_d%j&s#s`f7t7$#P3`u zkfc~MdV8})FT`%D<*8$|U~XHs&8+Dr-60z+++*&qF&0)hKDAAudfC6{)7X=)1j(Hh zX;~@}NV^mB>|>7z;)p_5Meppkkwh4B);R5>yi91xC24+bhCtz|3 zq=Yz7PB98_&MF}2UoWP4HF2!X8S#h9Ugrbb|6y_?j@JxUAF6olS$*niZw2lFI30=s zKzb6P0CzciIk;uJ=J{h|`_~U;DlNS4i~~F(M~;ni3P2&Dr)`|hm9w1nqKaq}741eE zBX8cL$QeAV3#)6qmZPD`v$pxH-(w$eP>e?^Rna6CEHo77Ji=}v=hK?H;gP#t;}T+H5CmqA6D;hg9vUqW|B6TlN1E^`^Y4e|BbyRs zn^Dj8Dv7G-1Q0jMz`;H2Fzm7epk-NiC=Gk0!O>~yd=Hi#sLtkH4vyAh9`kh>UE89I zBYVSXY-is#v+zLZT-E|9STd@c(6S2A$c89!lom1C9?*si-xm-K$mYu{kRr}v!~}w%O=YBl5A)5 zZ{PuoW-|c+tX-Vl`6OQn>nq;tx}UP15DYA>H>C%s1*%I`Wgusd25FXFa28|HSwJ;c z*1I?m8WOw2e7E`{StA)H!%Gz_F&0cALf?kquF`pZzsBCl-rRB-1Z%xY$;82|u}l7;;&CfuNG>75l6lb##ofCyroQ+{aGj&I*FLIVo3XpoG2D^1H*s*=nk7mgBzzuod>!{z;TyRxJ6xk44OIlOGGu%L$J)V}f~8 zc6bOqj<>6`W8>6@C!pi#OpXu?cZHZ?s`g-3C{S!QmYT=IpJ5(#LNsP|Wz$%0qbK;T z$xQ6nE~L^-G`-c$5*iF=V-1C_q;PC#WUy8ewuR2%YGsR6qtinq!On|h-&IclLRevi zd#h5+qHIh}cCqD$f{vHdT0r77`K*?7Y`St(9BsX9njnFjQjn79irnU)3o6)&V4&I`%%~3Ffm>=G4gZ$_yOox> zR8M9EM4=|S>cPm7rQejg6^`00FkaYF>T3;RoX^S2}Y8=JO4j9_>0V^=`hQOj_s^*Y7 zjGZG@#dMh!5)}gUXcmfRhfd8hr<#xyj$L->5;W0_0+P0d9`q(XWLV-uD0RZfZ5@E! z6uMu!D(lKaZf;4}J$Cq@vSn7H&N^hmkwirICl{dnY&*p+m?)7k?#)(d_*63nNCRV# z&1)X6K40Q_>xI2kwk~U_drOs_+Y%b(X>`XX1?L{Bw(ZO9>WN@vELE>1_(x0X^3ViK zEea-vQm@hb>q4sr@kII@NN{L`L{!_I6R=8?vmvPmFt9R`IY@}u5CY;jZ>0cT8KZ1I zI|YSvEQ&x(EV%Zlk_qN@ek7Y@ug;GCSoWGMDNs*FQDx^(6x_`xl9*>KX?2Z7LMI~e zfYs=$Bv!N7ZDru~#a<Oh6*$8YLpGnt1KBN0qc=0mSj`r22ybr z9vsR#!4P6N*sYmJhfV{y-}$Y=E+oQTgv&DOcGH3+Fpy9qY!%8F^)K=4qzwo6T6k#D zs3U0nT|+vM(FeB99VC+_@TZ6ZAomr|h#ZRbw>WSIdaLiVwj`YLhQN1)JPwfVhpb=I+nA+m2o{hPWQ~#VR z|9KGY2rVNLp{uH-oA5TRpUDC1uCGzAlYfN|-PNYe77DwP>w~Y#TJCoKnVM99qc@^D zm3CQI|8k2LQ10H&G--&Xj0M1i?y8Q8<&)^yNk zwk$Gp8wtC=efgzct!|b6MwQQ*h7#P@?FArS7NY`(yE_7*23-mw%F%*?kdRg)aV-lNQ{ylPw`7kZ?98(42~%hx!@dfaf+c>5&6IA3vL~WV zoSI#t|IX&&joFzz&EnrA{^jv+G7VhHzwBUPrV;tIz_BiqnMAdvsIN{I+OEsu4y)=k zDC-22_}|oJawokN7o2NvwDUJey7bQ#qma`^#(}(cNNT^rLI03c9^KeV6*+3moi!I)uiu6&>HL~=gJF@6-}9QhV9FU7=-OG< zH2+v$pscHtV)KCjLg^g>4uUdpJ#qdEM1Z^hZjdUlp2bKB>C|e=@Nk@_CTrL;D2xEZ z*LY^VvVNgJaKl&t79Kwnrm@YLg2+$c0|$0C@5c@kl&66#iB#g3H-Ll2#xw7+oS-$| zV3L`tW0scY527|ThpU}>vB9uqpSZOI6k_gEkr`x7k?`%6nHp0Cu30ASE%!6gymhhz zp&ql`RGfQ@GJ%whLn(QH_LAjR`YFE!~u%ZME133W47 z?FPZmha34z-=kQpw9iR*Ha^{-5u3^NsKnPCnu<9=vuf711eZ-PM?sv?2u|ag}Ia^Tr%KLV;21vZs?6{G*#x+q$vx?PG#n_;%3$D-$u? z(~U|y%=J=d?nhreNo|cWXV4@7?F_q8R~-fC!G6p=Vs zbeTc**V)4pt7UJG=UIj>nMO$=PNlH`WwRJUsgxB^oQIhZUxCLYc0g+FG=CEKq4AmV z;(qU%#JB``4sBd&XAPO=*98Q1g{}l&mSZn;l@MoWscU6=j@U#^EVgdZTwlN|fYt6WyYlj&_x zlYb?3)e70DzLk3Std!x&KExRzFKNkCb(YSVxI_70R+(OLKWB`uPEtbU)XCW)qjZa( zl}M`im>!NyaI8D*a1qeTmLOQA*|UM{EyjyYnf8yLV(Il5nqJT2E8+Nuq;Aem6@Fs_ zWGG1)h^~FKZ>Nde=Q>%gM2;k!xlWVn@f=TNNtVZ}hJPu`qic-NMSvKgxpI}dLQ+NQ z(51K`c8AA1W6$XCU61578JI!3^%h2F%|F+lG_=L`pNp39{b3AVo8&u(e}LjrTEZz~ zed%gj0<4SQBeUxGeRnJ+@gdBK{osRu1 zb$2?`5P`+U=vXn;*Ci2jLUIaErY&GFa6E}}9 z|5y(X3xpI`T48=BVJwdsr5O2lksjfphXAe$cP(rkNd6_5{-k%}}oUdh%E&%`V6n#^1ffQju;dA;&_8Fdn`pXh>NszFd^?J*=J8_h zN_@j}884cXZe?Xd8kNf6udgX|B_|Xna-TFdb&ioEFJU_O_m8@SqmD7Y$w|8mzYuqo zUYiV>zCM<%!!+m?;M5d>3TkILER*wV48fyCzPonG0NuNtShi+n`5ry@DIlYLFwEA_ znbtMJh$V$!;%~Gc&AOZA@Or?kz&gp%x!=V(cW>_Yf}j$+#?U;y4b0~7(CIS(^ndI? z09-6mheFTCCp0;z9ihV$`#pQa%}0a{f<`cR>%~8(-v{V6Ub=2STtgE$8NNoTI5tAa zesh(jnNrdjA3glK82+g?H&)45-k*q7Vl}2(2jjLS{%j2Ft?wZda5J}(qxE)jjWBaD z;56#51Rma;-5<`!^SB?MyLAQTV#L**iK61*9c;B>nPC{W?ICi$GxCJP5^rbRb)xZe zss_(-CelEEA(;`zYf^`sq!%2cN(MC&TWoI_p{e~t5X%qOV;om;b8lIR$ZV+ zB||D>NbB^7IEwlGAB4{H+6XPe0MJF@&63tMkwce^JT@>6tz^^-(Zi@y9|6#+QemxT zLkifo%^=2+=)`37+L#<5YY%^ST?r9$gow;JdbrA`+Au*SLeCM@u+e*b>*b~OiNvT4 zUL%HY;Y;0KF>({@Z$^Qpq$JsS{`Xqj4UP>(dn}&a(!PDgGB{&x01&=HS+7z<9h1Oc z@pX6WUXLEd9b+1fHV~AfM;X5H(qUiAdU+YWC)N7IRVp*-#^n8F6U7^v5{iEE+GSufaC-=&xZ0O zR=%*=PM<)jCx1n$ik@+gHOhuuEk3WovMxOqV_I2PG1QUOdGJ1wq|9~HXVx_@&>v>h z>MV)UV||el9$u9kIdZE}_`awUM1~%F;_dCQFn{!QeIGJe-2-l z$kRN>c{spXdWGC;-0ac6w?Rj_(dW65qa=vNiJZ~4F1cRc_@|{NC&jXePj|_5K^Tv1 zKsER;^1#ge9rPLXqQ59rbel=4Rx4 zjz|L;>3QvN*>W?lnB(#0`%BIvGV(dD zi8VJ0_`7VmQt&x8cBRIbC)p{@*lELo9i5*&-nWMvdosZzJ~QSGS|N9wr!V1-<943~ zFDh5MblS)?chmTXUv7MqZhXk*&nEBw92w0h%8oU;;}|QihU!$OnW5}VVWYc2@Y)GKgZL;4lFOY%yNPamtj)2gX?IA+Oh5)z2pT!%;k*2=JoPZ zwG5@F(6wAJuaLl01o1t3R9`t!vgyy|-&iMDhq}PmZhhR#G{+lL_~Y%N4Mp~vUO7i~ z;bom_+t8-achoj}bh$J)TJ8;y&(GCvjFvBsmZw@D$Gxhn^6fQALL0P%kFf3mcwgsx z$U3zhf}533#Gcbtt(1#CyaJ4xsYZ%HHm-8Qh}|zKj`Pjd>eT3zJ~9JdG>ePR9XHbi zx)bg+h;K>2OX%6=C1;bu0)5J#(Xsmaip%J?Qit;iN>Zs|2kR01)Sb?%v^yqSrcE5FY9RLhD=W#1uyU%lCl&l5`7T^;Vtmy7uukGwH; z61+k{5SpfY9hDfEQ^FZV7xUfDq@zQ+#Knmc#54s26v-%e*0_bQI#GDP8YZ0z)epzR zDMXOk9+vPRhVuYrWlT5f*Dh6-W%V))yY)O*r8Zl)g3(m?EmZAq#9rp6b-1#xVH6AF zRLr5J?J6D|rjNwS34YL5e|fsB*|C)H;J$_c#98UG`F8!~QpbMta=9g$y2kQdx6Yf> zZ~csAJeNL&Q_fvD2ww8)SB!I0qJ-7?FOJSSNmCg&CxApw>_X(=;=ZIAJF$Y7#xiEpI6@mb1}hMUx~ zLO*g#=bJm0y{osOb&cSa1nNDEBVDrd2dwRLKUnpQ6ea+rR3=m|4ODttljJ{swN=(0 zYNSTwG(!MK%#8Z4M#;3x`R7ftBM8vaAPpo}jhp4N89x9GJsukLz7~ME&p){Z&DCh> z#)w=5OsNw(~ z-JpGj~WZ^Jle{#EbPA?krFxX%5t!~oGEA*R<&(@0WPwm06b*xx6{`%li3K-(Q< zxZKqV!Os=Bz@Ges^_Gk*C7kV%+}~`6{JamzeG+?S@`5o~D8Mkc;uLfLvKG;JCDz4- z!|ymYTyQ6aM}wDcoiimkz-)J(i4osgb&)s5k%=+RyP5Vcc0T9yO0;1(ld0A^NC=3) z%+K(D60KgHJHOjJG7sD5x@}ydg&o{e@dkWxV=)sAv*WY z8Ze~Sz%%!5hyrA89M6;0F9QV^nI^7UCxHRQLZ+dga9;kf9*LicEA5-&bi=euNDK~) z&}B#SwU@rSFDrCzZsQ~!4qKE=vK`M}4+j1yD@GOpn4rG!ySX2D3N*sEG`zt0!5nuiWussU9a{&V$q0y+BAkB$I>uqpCrj{8uhT z+;pq37xJL|nzE$?x5qLOKhe`T3hId>FCY^vCQ#1^4CNN>b|L4-UaVxV5IR>H<}Vq(QS7Om(ZP(x52GcEfpc@?^Y2P0Y4{F=z4Rwlb` zp~oc?+GiYO8pj-me1yyu*E3|!1WRFn`1xs>DE>?+ngaZ#=p6h`NYH*t0@I!V^5fz50Cl*?Q6YCT?(^dHjS_`_sQ8Q#!-lM9$?i2W+1@ zISgF2{E;Gi^izfGmMd<9Jb{JmrtQl^-cDK*d`3d&g$iUJ{CcIv^a)Cz>2T(@PSaVS z8g65#wocONwkn3sdzQViPMVB)G+S+3FFzrMnRyzl>t))xjVqHoJHZ5THhh&<_kZ zKU0`fw-l&u^Zn(Yh-tEJ6Cp{QOqm!@_li{UcwhJ%dIaT(5!g>`=%*<%o+n=Ar*{GW zAa;oxjQT7Ap7SX80^3E)m6|PVOmU?LBaR9OAZ3z}F)m@@TvW)d(8mk_NeV5GZj!U3 zw)IXeQr3m5uAHOMAav*Eq!mIK#n1q2-<1;t)X$1S!d^L*zs@&t6{$M=4VQA`_XJ@{ zoVk}eKcV}ov*&CTw0cW0?DL;FpFKuPJDp$MsF5)yu3Mjea^g6U-{X(=N7J9BK68q0 z)91c$)d5oX1|$lWR-<4kDqOO)bv`3W!il8F?A5b%Cf%2Can;I8@SobjW zpWLd)I-3O6syssx=QHK#9w?&qk>A?x!^8dCxVE>8vE1d>C$Pmu3AT8MvFUu{rJIB) z{(y0iJH2Tf7D&zdvLELn-)*Qu)XCbexq z6z5U*x8bbp9#bmsC~i{&Egz>a_OD5pYeW)7)1h6XX;W42l4Qn)YnX|fgYV9s&v%`~Ek^h0T%n~CR-V{9r(F*YTk zu8O8NNZ>4guGMm)Gb~L1%e7bKqT)9;F-XUzfflj7X~cd_hXV*y|J1s@M9T)^?pyk9j0fGI!OvuXkM6jVoz@2Fe8 z-J8>f*lTV)N5{P)G6>Z7TH@~J1Dz8fY{fpA^@3M|Hp3IaolN~U*2mpeC)nAIr@-^E zWoky8D3y1+-TEH`ZV&j@FW}n;an$7xpWz=7r#^&t9 zMI?_evO#>J91B=6e`k)oiUaaAjsg|zb{wA#JPJ5(y!cnO;%NU*xrFTO<`wa3=T z*0UnApDT!E!Hl@bOF&GFsjF|1-Q_klKngGjdnsw8+_|=hgFuoB_D1~{yA$C>GvmPAZ-!IJI5Yj4RNG{Iq37%xGk>08wFxN;^iJ-Mlda~uUEhkDM<;X zX^O;(+ZpPr*m!rch3~9$0nxrrAb@4PP8Ex7y#^BiVvipwl0A1`fCg{qjn3*JDmO$2 zo8?ud0$Xh9d^wQiH9GNLANzF+rU)AIOxIH12DrPPqQy-vm~wqRsl0E!t+jXIR_0gLb|l8;lq8;u0UW)rZSwBl3Og zIe88Z`b_Py!~2f@hJfnErXsAd-!wK2W`o#;o8>NdruneOt$_KkM$>Wu>el}OP~)cs zYV~ptR~G}!ZflnS^KyXcqUyN=b5AZ2VCtNBUqV%YIrwB?!dHQ>05j|&?6*z^CZfew zq<)}k*=8WBTFw1N-B|*_iZ@kwpRwsTAe(PL0I|N`fjxl{ae$#&)+m9#Ku`Qd>sooD zIy%3{EuR$eN1DN5bZ$ZmKKza}M3g|i2@C{ZmRyIW@$`H^d%K6HI!mTm zr>VeDdxE8Z`_=iU!&3x~{dfv%0>d;+$ef3*A43tm?LWabW0!!Lv5UzDk|1}Q1ccvl zsi2MHu15g(36KnZARoyS8ZeR}bJWEyXLZ;W$Ywc6ObtcrkNh~`QImHxD3yVqVgi^a zi+sOyYDDo2;|5XoCP^2ql^plh9WUUI<8RID1wcvGwm?k|s!6(J+J!1sCw9UDk;AkI^tjmvRtdOo5hlfj9;{3pKxW z%5u+^<^E9CD|`Uj6n;l&)9Dx7rA=L@ZX<8ae=2QwYpzX!2ClhlGW7p&-P?pdwP`L{ zFS@2uZ9=8=y1N@|aN-!q&?L(G{=sA+Qxn8vMf=7JnbL5mlT4K=3{imxf!o1=!LT+9 zg=!Z7fjaMspH|u1THpx^DvHbd>@+I7N1A*MvnK?oX_de*hCIb?a=)uN#TA+ znh77~P%jEuTOrjd+R?j(8|{kC#-;*D+N;JU;(1%NC4*@*8b(pd>=1XhE@R408;KLX z8gcVi-j@88-jaHaI{pW1^d(Z~tX3^_thtj|mh>^6Ojw8=5@g)C16%Y(;tqni7w@VSt?O&>rGD>mPN_z@mI zyuoKl+p6$|R=_OF5odFAQw&pHh9b5D3bMCl7zHCzwXD(N_y?`65NCa+939{d>)u#P`q zL~8^uDYVPFqYL92%}Y;SrQWwb_HpOI2825(;VFh#U-*p3H>9v0ojbLr6gP_p`H%&o zXo3oRxbJ(-ObtM#9hbWnv0gG62$1bv0_(ka4DCsH_?{}iTBAE{_3fEMV39P{ma{un zT14!WQsK%|eche<%wUWa4(fB8_;21Y0}$a*4rc5GZSAQ_@fxDbX8(!C%ABM7&qEhl z(H$FsB(x<+KEOi65iRULByFJrFZ09B8I{gcpMxZ)nIF4$;wlvTN=6!-h{vj|Sfl?M zyzCtH< z5jdw~EP!(w_d?gx<7?u133aRe;*Wd@O~SIVztPXvxIl3GH4le>%A~}fE*v)pi3NiZ zxdX+HtLh^TLvQS3onlqXWOP3F!?{Fmx+%EzIS?uQP1PVNPja^({rKdZY-?MQt~5v) z$&rHL)mAOVZqR?{YWIkH1W8v*b#wLe6f{=;oWEFyVc=33t>E5Fwnzyk*zMfkm_mfP zGyNc=_Rm$XE({WFXjU=pI3Sq(U;h za%cJ%DWZaMe>&l}ksslosmBfhv-JegUQl)pq7iobgLJ4FszI{3 zkVK)ws1u@%6zFPmwD2?4mztx6omrHPfe$wtwGGy+Ez>tlu5{+PE_ZgVT+XiLa)$O~ zd*X6NepJy6&vZ7%z$Z*9q(hY==cX#*R?umX043GfG|71Bek>PIL<=zSsMBLXfW|L7 zb5&o1Jl1h_W;z&qy8@O#l9xbNuP?rTJ5KoulzDDY4z#!LD7jyY4D-7C_49s1hF*-|MotBRiFQ7I~Tipa~TKg_V4-{7u~ z2vOgEtIu>Vx0s)dR6DKh$s`Q9O)e14lr+!Mfc?68mImyFE?`}bcaR3_KXT{&k#~<+ zL=W5G8|;*$?;hEf9J=kK*$%kviui4TDjqP~G5yj|LQlB-Ewb{SWWRCB<$?HEs6S@R za1IcuNQ7O0IoL1Xds0+&$n`3@$b$R_gliN*R6@2#>wfzL7F7+UlKtWG9@Q=f)#)DP(M2*1bhIoqFdis(ODSQ2hdz?BCj5Z`;LiV2j=V` z;iW8z;ENKoqU-2>Vvo6O-674^trQdbQ(>pEto;P+F7se_vA2D{0(LI1{Utt5i&u=g z71Ew7Vp)1J2=DqIgU}HWIs-unF#Z+@?-UJlSzITbH|lgCB4lnAUB;$3teWqb#8AS1 zM70``-vLFl@F4e0fNRu=D*D!&=Xp7siB9D@=Ze+RLG}0(NQ2bMr}%3>E*ZYGJn@h{ z_kcL8FA4B+n*~!}xX*|jhmIjgJ^Uqo0+;Y9nqFWPEoS!mu1f z#ena()eO>C|3G;8Tn@~Wn;Ha0$vp>aTD7a(dE#=W{E$1ST70RssIvMpwemR`^Ul7N z_wZ?M6Up7m=k-_nA$esKci7L$gU(GTPCzqH`+;2Es22-Iv_iQPXuI3o)JQQd+?(F! zbJ0k(tH}v8brL*K9AG{gQvhT2?#HSv_M`smxxU_V99(hIap2w5-M#pCF6+{zQTG!; zrVY}qVXfvnOkIoHvx6Pe82T@ep5-RIG94I3GLyr13E1>6UsLxGN%`~9ac(pNq@74a z5Sz-iJ%M1{sW4j|Ch1h6-yASLf(`i7PPx7rYNf!LYlr^y4-kqk5<$`Q-srsqr|7aP z_Cb|aEfF9}o&_OpZOD}6#6k9QB~o!{U$^fwti$EXt>Zj!uT{AosIxs#6CV64=G*N8 z`%{6>|L?%={(HdgJuR@iWjA+&=iFCL0e1I40BqRgZ5Y2Ab^j?m=iCEY+SG##%lZ>O z-(5r*wVn~m=(u}HU8`kz+aQjFRcq_4kk$AdBD}c{M~|^-im=?s8KeGMxtDy)1AV{+ zef9iPaQQM1mlL${D{$GRjlExzL%8US!nYrtC2WNYNA){)RE(U{V74Ij?**wNnZEFy zCop;22~0jP0JyLr=Nd1~6MFE0rer6>b=#M~iYXChv?rr6d_9pSqRIb z1--WJO-&Gc)S;bM$ujsfW0z0^8ucSwa`Sf1KS*x&X>zkfmgwF8n>(PPe|;7$|H`em z?*#VGIk7+kNX@vOs_}8R^O3&E&Uto@6)t>vE{O&M^3Eh|7g?o ze8r|)-@mAaB^&S`S=b-`4;J=-khKFE@lRdY17F&Ip|eg|XxUYvThX|&-}D9~D~(at zA{!7ui=4^P^vxlQyMLd;VbUfVGvtQGbV^ z4qy!i5Y&PD^<;wjrLFp9f_nM|MR15XuM56TPA1sPZoQzKRuI(#qOSWC+kiIcYDLfW z5Y@Q{%(?BxLqbI*Yz~{S%`AM!unc(+b~?p)o%QIvl25IEc2nG_CJFtd-V@#SE{xDP z`Ihel5lngsvcKv#f@WO?8DB9##@+RgK!}U1v{sN$Zyrj9~Af z#O;?8V1~UNOa9^J!qG4$GB_RlaS&NqKld!LaWf=_oJ15Y>diP3Yw+s*ko`V z@O@PTb=+C|*XOn*XJFub)eJkuH5Q~9GQKwD;8xrs$1#$CRC}5~mQJFS{+_A=F;WCi z$7eZF387_K?`&UOH3)NR#;ffC1_}fSkhMkR5xOQ=kg>!x3j&LB&6Mgvz$f-CLS5p5 zZ$A7gHN(TzuU?cETJSGwiD}4I<7BaODN{+MvQb=+kx1ieb<^?p^38N!rmv^TVTcdcr@J>4#EOlR3$-MsU)aH5tar0ADCXcsTOJj8kRr zR65sRMiZ`1&KxA^ZV5x`CB5s7Ws{5SB-aWy*s0bTy;X!6-Q|2AL7NEI-WO;Q3rN#n z*df)1s4M;7#C*W0-^9zl!b4)4kb~az=NHm<8PI&rtkoMK)2!7Sfo*w^#VmI|6$5Nh z&WX)H=trpKw7tLq?;IDwBbahRIk!*bRw=#@#kh?!X2+td#T*h1-%#@*-NiZPL%Iut zBxu^MZKZTk*sdAz>JF5_3UITQoi6 z=-zQS)_0SK4@;dI9rSGli{s?q!fkY(EEDu>aol$_TGHzyrs?yjdcz_GscAp@q2x5L zq2Gh_w$2>TsT^>%o2$J+aHgT zeaWgN{1UUE2ea_`>L;0&8&NYH@4Ny*3{wf1E}En}S4_gZvk+ZPcs?{4M)wY0d-#ti z0QuwFau4q&8C|1l?+d@#7vAiQ!>pA#OBh#?3W2VAtNd7k=Q^)k#Q@Q>rGuYkJ;8jo z+I<}P`HpzPSEZ3Q3AgQ1{h@SG z(U`@}-HT?Z)|{q2oiIBk3DJ4$mqh2gUJ}u{m{T@}F6jHUkZxz@{}Ks#e2(29Kkcnr z^rH!^J7Qo-L^eV>>3LcIsv&CWAAObOc;fAH-UI9O93{eKrbzP&do^Wtlm5(PO^6fT z8`K(!##UFjQ>UNe9lhz0F_WFJY0VQdlC^DAqbOV*S z?tfbTEGDH@rRp)!rf`%Cq}3<_Le7m>z9ta2wu-q{k^sDmFN|#?Kb5u(^}rsTd>+!o zf@A%F9;qWypA6{fX6sD?2 z@oZI{Z}WK09QzqjWZ7HAfKD~Y;M8gvnf0%FpqBp8Cn+?EW$#?YU@?d7L^6fzhD=iJ zajnYc#+mM|Dl^4=H#9Wo-5FJbZgRf<3GWMg#b8fE-Rhc({xf$wzSjai!0$#6N7Rh6 z9rkqf3!EaAch%@jj&{wP?rUFDYhj0A^pi)A>jS8@aG#tuN_3iy>cLb|fII({%a91@ zMvT_-4B}W%Fp8J5i@8d5o5vAhCk__Uyb#9*x^C3JOrsnc#-=$b>Rq)BQyD~S*2l>& z5M5TdsHZ5ppeaV$#?Wa_6CF0XUdBP(;8AqWbTIllU_Roh=pWH4dOSZvw|Jb_C7y`) zg42q4|DNsK*`8pR(7#>eA0w2A^8&`=980dnRpRh5>fe)5c?S>|NiFAREwr4!TbqWw z!|B7>v(uL*!t4Epr42J`5JYsTGi4Hwdy{xvPojcJ-1axvM+^Wx8NWLTR}gdX)H|UT zQdghj&BGv-F;TP2osa(@vp6W{+WzVl3UeI%cZgSuC|L}}95ECt6^sMIVM#hV@Syih zV%@{O^K+T`;TJ8>ozqPC zyZ^T)e6Ba)5qja?ktzQfrz)AU9EwKW{hB^8qHZ7Q(BfhM+rmHz=WIl7katV~FciLR z)Pd#v?CI23nz_B5A}sREPZ9q3+9a7Nl6GQF97hDt!G+PR@Str@FPl~y3LBB%a6}Q4 zJ2Xy5caSjZ-(cz1 zNj(mNVe6z2UxXJ%+P*%-&(=ZmmQqBAkk|5UoxI=xyPs6(;jrg9dc+M1K}vdxaop-R>(bgy1?LAHG&9x# zKa_h!&$Wno9ELj-0=d)q40#X3W|lHmZ*-w+s|Lw*uO8DsU6||L&g+_~On0W}5%f+F%)ip_Opt*a=-$k&8Y@(bHXNVXI>29hF;vS4A zRefQL1d`z2B!V7HUO?E#3CT&k%ai~SB4hdmfFxo=W^`pYPCC(t4)B}zSri|olBJ~f zTjuB30m8KrY#<^iWQrnI$`HGb$Y5ml!Jp76B@GWR$4W3VtJx>!(K`s(@lkJ%1W3!u z$sbQJsj1l+_H=)qJw0GgPq(M@BU6G(Nz?{<_F_{>A$}pLUwx0@K44xc{wBm@NhMW< zd{sL8gscDkXfUG~WoIT^59tHeeq8MO?Z+int^K&HEFcR1Q`8LutV8HUehv(i?*8jEplQb2*;MC&+^>H&ws&>bgz3cxv@?$gQ@a)E??gnePZc@ zErVup{3SVK&*|%1f18B2VMu2<^N|(3h9lcxv+X?MoeSP;2c`9QQpAa}SKOY|Sx=zm zUw2?SrW7yjsKRV))olBr4vpTS!PiAIA4a{u$9`PQC+&w0>gPrz&Z6Q>OH)ZkLyR9Q zmXQ>u%0HWcNTkLAD>C-6NeMxj&1#P2cc!q@&d=|FdsvoDG*TXq+AL+rNhv^90hOMH zT|zF3d|9*fRs6WHa@MS>dh#8Xj*ph&jp+=KcSaY?SZN2o0tOA==}D#r!I8W;7a9BcKuT6&-vgy55_Dbdl3B* zq{yjY)5&nud*#z#lfgKjq1^Q#=`t^LLXhX&y*W&<+zEZDBQ-HO5vBDU-4t2UHVN~i zC+Cd$Gwn?akb7ak!=gQj;d&fWexuAZTD z?3K^+cKb$a4Vqb%>TQ&>N1oUyRhSTQ&9^R+5z;-5 zsxLCef$p93rC|nd`ULQjnSX7atUESlp;7Doi`Xcu_}MyW4S%Vebg~=hRqRVaI=!su zb8mwbR|UMW{P^4xWAU&lRmz`4ZYl{*;ZJ7$H8KGH@y^e7Ge|vjs9`$8zUP*c#$2Pv z48_G%Lnouy6bAxBJTLgnFZcQ|3#mu=egZl24aTv{**uSmX)ORyg4H@Ts ziW0?44ooA$$Oyf{*2_>kB7I9|MH?=~cNRGksIQXpjhC7NeL)v}aY~)c^sgYeY{CAd{ieNbFQS(FSjzQiB=_F`fS$mrz;AUzgXEqR{j=Vs~5-R3`F z^8=8TxALKHU#{7QzLfaW?1sA`gVfHv#Gf`#g5h`~+_LnU(fqzh6QN0olT?_Ivu%Mr zCEmGG`kI>|(jW4cWD-a^r)_~<@+)s=TcsImZHR+)VcO6XvfpT6E zBQ76DShrD%igj1y2)2I4rgm6>l6GZDXpjYV=F(VN;(Pj1^@!AoPD>`Oud2z&`RoRS zt;GEP(@@+A!|@V=g&=F;OuR0)kC40_JSyijcL=TxI`7~&j z^(=03yOK`6X!`R|FTJ*&7d#9CjmmQVt0K zRsqrhXOM2dT$&vk&={9hH|}_s#3Mb7L<0yZ9nVDsHR6gGH?`-cQJ)J=s)kaKH>W`Y zbTQ=9g*sLZ<7p!&h1kjM1Ku0scl7Tr$=OVr<~HM|rUk}jgYwcj+Z*-?7B-a7{D4}g zR%thGA}I4^gGzLjbyOjvwD2tp_ml=lU2RwrfEGls8}vlduO^4gljmh|BCYT#f-ICb*%?JVFxsTBXy)e1wRHT*iO3%~v=QZky*UBI?IND2P z&ZE-6C36m!liuo~`fEVGE>UChJP1K8ut=Di=2zEGKwscII!++bgM`p0OCKi+bFey- z6d}${@}|wcegYv}ZC~sok;Njy^{3^u+RM`NBnyi)Q`kew0^4U}iZ*a;k@>)a{H-L& z=5)Bq_3&_hD2O_gz&}KDs6mv&yuxFxt=TLnQxhb!8*YK;4G-Qadk70vsp{;?C#a#@czZnw1gDRcS(k2XW!I(@whei$EqQ z=BRMVeK@;H#3Z~odwuQZ+11+TrIP5BMNZi|4p70 zqk;=hU<+`YWoXzf7YCMH1YSeeC}cH_B}!WpC|K!?CulQB5ulD;oE@uh$Ea@2GTmX0 z*GMbF1ZmCGMLgFlmoYHSNc9l*gMLmM2t3cRpOIinYD$JXRJ%dO7CWiVx24W5XTNME zlmHrXjMW7lAoRj9^#H$>+t>(9B|0U;*LJJDS_UBEO_!SxgvtG&GWd)PGJJ`a!rr-I zG)vw2gxIRfW07+k^*dOG)&^Pe`9NviiV4Jxe5RhCRcUi1>NN$9j^-{#y zem=c#4atN$h>!6BF_^B)u&>KjGqTVMe13{#O!f$|#VTcwNNh1e?n+d#IOdN(%C@)4 z*zK(X4i`qINsPmrvqb9uv@G3^GCVP<*yVg_^PR5Yqs6@x9m`o!9?BF=+a@TGO!ot6 zuQe7B!Tb$?8Twcp_to^qlrFjx;r>#6%(+05 zRrl$I5EEdNF*!L<1iNT`rM=vHIDMWT-3V6X3eNVfOvQPm(V z+U2BJvi?;%M?x;JOF9woQ13&s8{*+3-g%GcAzn8g9hZ|K9pTL#7wr>(=>$YO2hMl6ff6uoYetXH?Q?`|#tmNaPHb{qfZCt2%do=N6a)$`S~Y_%lI zoR$&3(5!JnqmLA0hiRf5vx$LZy~tr<7iZaT$d}l~`sMkiv3Phizt=2IUp$ykyEvWX zNQOlBo_Z69J)X+MF6Rb!4{dt*S`(6#MbO)L3eb1jq)PtbHfy7 z>w`$H3U08hZCsH(DuBMBTcw^3k+57CfJpAHC&tdz)tL|rYKea180(|%M@bS_V{k~o z+fyFwWTdW$+&K~G;B?!a6~V2?jU|#M+x_}+R3C%g;gKogGCNUFXG(AMdMp9pnh8;1 ztRjrQ)YC5y3!Jz}6WP$Y>Q_B!|=FbUW+Bp(g}M zRR8+i(>vhp&cARjCH9xvgYMTg1gJtDtNvLZuR<|Sa({BkGr0&)*;Vc4IUJi3gwd$i zHu9AjF4Ov>FAeKk#!J;2qpg-y-@Vukr4wD;N33lLzJ+{^7G9iKJBvoJz; z^Iq&Hy3Oz-U)`p6zPHFcWlXy|zX!DX)9#|9L7tJjSM%*na=YS044xUz44y+cm==3h zPY!Hm5gGjKS@EMq`W#nA=w|3Pr6gnNU;=aTiv)|-I4^}4PjRTt_VRhn>I;vRyG&W{ zj9IOz>~l=@okxDn`bhrAN!Eg%Bx^xDskNwE0({3VruKPKM*`g~-3(K^*L%fa7(}a2 zH*t>Ecw{GWxYl+(!J~BnIHBDC&G7XlL_#a>w>M5^vdFcb&f_!BUOR~o5jk~-GqCn@ zw%*5JBJvPMNQtD}P5gmOd+qZelO65iZ);>MB_^gy*{OVsZq_%czs|O|9OAXvU2`SL z4Md!7iD-Sv_(bHvF}d3}mvg%2d$%4tDvcV2y1gOkS*mzEe8&{Bx&hbC0&=u z;;)LxgsX%VdR z_eK5pQT_J`{r8~$dw{=aKcjyE9n52@HTs6Yo3Mng2m#s)r@BS@i%y%QzGX*swT)5@ zAK59Wfx`HMd{8@ zY1A%iH)r}uGDAjOpDKFCE_%)`dfqPD=OqmObMk$^KrgpNumg9Qs$|gxSxU|Xu}9esy)l8uV^y=5@7Y#1KkP@wqcw0o{qN&_YRhJ+zflkw!e&SA zmY=OEDp+eCuU?=w3eJ~TPVd{Ok$$H=*vZ5Nl})-UfzM_kX|bPn;u-7RV< zszx;dc3s^<*My?8b!YB2v2{PO#{kpXcKWf`zN7z&=G>0H%HJcY$@Z3jjIRFogi4ui zul4i8Ub|11yHtOFP=9}cztOewWXAMpRF~Q!hd4iUbCC@c;D_|Uhjcf+Tr%6#e!-M? zo5$4_T`4O2*WS{>dt!aCq_8*pk!$TOsNWHqrDpc3<|bz}&TM9Dm>_VWA+;Y<;X`|7 zFO=VYS_W+o9iW4CZ+J5~RS1dhNWO&(pH|)qYyK_K;r>V^LcDh|pm2 zaU6-I<{km&Ed}&A6C1T_tqYE;5iX1dFlC0)hO{3&1vY6LXu#R|m>+GRxQ_;HP77F+xywM7V# z+L2>ileB^dRYa$RIVI=mqFdD#SptTQcree7$RfqQK5Ld|gnY&Z>gk7W|5z03U%8F8 zu15`x77_f1QuhRXrz~Cd^EZrLTJnTHVROj?oXwTF1S`o*%8^0N*A>w8GN_bN>{OT zr9YK^rlJDFg=ksnjx1}vzE4}&n zk;Iggh6z72^P$J=`z6lGNR`*4c4H4BMB}<{ zvnfozirGWsyj4+Y0Nx}LkcHeL)!(BV&TWC8^kXm~GX6aoIs0rm3KqQHg`QI^NmL zhntuS|0qBzCqV9H&uxk?XW#XYU>2bL^7fPLr;{eZkinTX2rWy6i zWKV1nszf{yPhVXB9McrJtBy@0%7W|RfMi`v%%tmtLYw)4MK%4KcS9Y`w%Ji3R(4cK zS?reF#%XzGJba1_&8j+^M_bXrEA>PDr^qs?mJy2#gB*Kq+uZL53zkhJjKHKY4M zTvjUxF97DkqZgLVrhf-3?+&NW&}jHG_=eoQwSSg|h`@T^>uw2_4`wbOA*Pp?$%uR* z@OndhIpC!h`JFphU9$yu6eUR^a@3`)S*)0F$7{z6%!+u;{+(d9FtL*CoRSQk0ce_j z9PV^WVO!A1YfHCKgs7Ym>U)NYpIk%~mfzhkc>VdfB9+P&37S8dCZhVvRz8C>U}vShu~f$T z%6#zBx$TEY|5Mys>TLU!M%kHhBk~hE3|{eqAkvlK*IFV>1KU}-dpDOdgM!y4Fl{g6 zqrUZuDVIMhkVMSiN2HBdPVkj_KJlTk-sF?Y=UU$oZ9;N5qpGyrxoU+r1Aj$c26eaL z%Ut6Xo!)N#NtP=+oy8BZN_r~rjhH#g$dq0k`;{A|{q3RQ))tu;sVzZWc*{oOWv*?k z8amT8)w0Sd=6v(W@kDHFqyE=m8fA00Lng+l!$ECqx%^zuN`%~@`vHF=Ji45w)KxmxS&VKlH%t4=2iy8nKP4bl`i9xT zT6q!9cV-Y8qknF8t$;0ed!o84dkC(Qr{QyEI`y~FftE**#>ZYIP2_G*j7PcS;VyVA zFQ@^#Y=os(hak3ngX$#=P`rP%%fFL=flkU`*7<2HGz9Og=WwmU0Je|ZiEhG`4fd*g zWQVK@@i)<1le_S)!OedkJVu z@uWd53@G%SNrNQsedwxwDnz0H35ZS#z(M$uc=_ETdzEfS?xf_u*35`rWA}oP9KIm2 z`gkU|omfAUj+3yME!0)%K;+zErU_n7P?pBf#?V=Co^m$H=`-_I;HzH*k>LccEks`IADkt@|dyBP=dgPsUU}Parsmk z&iWawH-0;za{v?@Fe7+fZ;14{y(MY}jt1c_DZZRS#r6bLT+QyHx_wP|4$-B%A*qcR z4|B5H25!o}jT7n7T^iBgG>(!Tpe5a5az1OruMoR1j}7Z*#afuWu0h!$7jo^D-mAI) zQpAied!Q=a-KeAi?BAlH$q6JnzWf5=QndZnOqKqc^TT|`ZR(W9%N%#)E`l8Ri--VZ zXC&ys1?=&tIw(7)9kGI)AD6$$QCpu<AWbC zo2BdUiQ!3t&AX*POK2VE;@W#yIeYC={kNXKt&vsy6}J&P65`ted+jnlf@kS7IxBdV z04$spjYvhY&|lnnyf1dP`#h9!;`xO<=dg~XGcj$|W8u&zMBmcyP|NbA?@R~GU zsE&JS9J5>kNTR;ioF72q`U#**`abGroUa^UNpKW@MSMA(BwXiEjodmf_djlSzKf2@ z^NDj!sc_(c@xMo%C0jbWS`u5j8j5K8L(yl)@)O%NvagXv`fTeh;TKUNsQh#_#A@uZ zM{qp#E$WR<0o|enF(z*nT0uni_Z~HUiVLKMZ_yqoi!q78Mf+@UM>DRi>Q+ z)#JCwAnJn}xE<=jpm5~>hq<=_kE%TLxMwmGGC<%A5-?&AC}^=m6^&M=BNhUaAQBD4 zB%lWD*19&fTTNyHT7n5D1dfk`v|40$U6o>6yR}_g+y$-0Ot2(;EQF6m6spv+^~7N{ zKnfAF%=^2aGm`|hwte4yud7~{Wai8{&v`!X=YH{u?`F$~Zs5hrl9e zh-(cD-?YFT1&fbW50Zo_V}(md2{7KbYNMfWS2PscB)eYSJkkEV%wUP%DxWm3JT^NU z;@zX!wE1^lmz80!6CiK!C4Ucn&;YNoNAQGfU_#jS?Z?33kZ?Pv*8r>B`@kNxNiU~hh4nLT zgE&dp0Tqz@8Me1sS=u3(q7A?H0ZJ6K}rz7lwY}VwP&klg2l)gdiMiMBFMO z?U;gmloi{9hbDQQeKGE54&NARwFJoK#!9-JaY0_5>MV0Bfz7Cp;Z8`(Eej6X>7&WT zzImng7+D<2V~-5u2T!L&g%c>#F_nh(5OqwML^R{<`gSQ}^yeRDfz=cBJc-meQtfXz z=NgMOJlp*X;c(6`!O>DDD>@|BAS)8;j!2?3K}%;dsDU9dDn8<6#_^MRF1PxEa$0mR zz7q#qsl9F%r=!Qc_%4w6(x4q6Sm-HMZ^$I0E4+@R)%7)gs~!=PTt6{Sdj~%gbIgLN&=-^o%;-lk4z;CM| zcz@PeZbGf{#1rq=4&yt}!O@eUZMC`zYpa??S)AJ8r{feOC2DAP;zg{So>^=Q{>Hpl zB`!8!6~!Fn52kW4YA|JrKvhhBmzb)@_G)D)j)}r*bKnL2tOedNXLg6Jg;u)5sCn8#i^8WTIM{ic50AO ziKF_!D=;AQrM%Re4*JD$fkode_jUKhsqA8J{jJBT2%HHaXq_@F+sBxJJ}}3zgF7AVn~GyTcylOZ~Qqkd#8FBOJLSY0t$CX%e|`H0b&-#V_5Jul}+jqC}Es$Xsd zT+6LvY0`*u5giA5i7YP>WbDGOP&nII-o%BEV}SZKuOJG2xIoxOWK4FXx3=V9QB3R33iX=Z$y-7ftvFWDsiJ1Z?g$^;-cs-rOM}V0E z=ufjI=WQbKguyy|k<&nj!P_b~SnP}BlprTOE{ikL+$!r=m4iAl?RuhUOW^Ew+P(f;l3a;p=iE z5r10)gmN*}I^`@@-U$*+=uHRtS(P27$X4u{<>mHz@iLDLJ)!9(JM=^zbYqyuptiK$ z(kO}XSRlUq7v;2bD0~JOfxN{qg_SzNUB>dYd`>JWwJ(x>3{UmL=k%j5w5<03udusE z(}L-z#N085;bVlBVT)xRLzPF2<^Lw!kjT-pc99B1j1gAGw3?FU&~Z>NdbhewBUo-D z`ZU}oOR`0-mvs_dM|G*^KmImXi?vBD z7{vZFeR?s?hdgf*;BVH_{;|qnARm_6;Ow|LMu9`M)LY z38|>bJoOo*E%B0-j9TmbmAf=WgZF)0$CDnHcv8}nk{uF>M;Ixfgr0-YGDsH?`blO$ z?d2STn2&HcIcQD*P-N(`O0V^eyYTei+PGEtH5oeWnJUDreH+M8#-=wQ3lB=$5vd=d zwi+v(b7&WMSX2?Xe$|F%qA80`-PaWr;8zE0j}qpyOxcCQI#tN`ElyGgkPR z%+oU{DKLmsQ1KOoq9w6BRjj%~SS{Q!@FT%Kxzw zrFTlc{eL+npG$4J&sb42-07V`$!}x17}&I!t}{`zjB6-VM>pFQ)<~mPj z;^BU}1=VOoz5KXwC2$gRNy@NdSG;#FY5w?0xj<5|9ATwE!A zRVziIQx}Ob=D1oZTHQ^0wa10Kv0sQ$MGJ7JYG<)*BgynDNnWM)%(H)`SvZA%5%25) zypYb`ZvQWK_C8ZckGkJa)184sbnYf?4(Up~n6`s>@1y+XrLkh01f%%x27B5>Pu7Nz zS&k*7US1)HLOq3v-}IjXzbu``QmlxSAWz0fL@D(lRhr+yU=!|%toep z`4EFNACwQOJMlS{5xY-HvBs)>u_gM0{OXfmNpAA6$dV?ht-llqFYlsejrN7=Fz*^{ z1AGg&l*GI@0JA_ca;k21@}MTDFH0Ys4uKl|v2Hv#Hj(qm*FWf^f4p7~F`YE-DDZoQ z=EOXbB0FQ9+M&trb)l8AuKew6&f*?YU_!stq?aqCx5FX5e-_yX4oPK=BA-y-C2Cus zurrW_@kHovJM_1Gdd1ulY$DGx*ACTLi@ZX3K3W&rThV{w^T?C>hAtE?1{TD8or$hq zyhvMu97nsRMEk(Ikl=Rq*xQ+F?$8CqtlD*rF?(@b+9!PBLo-x3q7c|cC8Fr@zH|nXOex5^T=Eli5=?d?-H&}6zyejuScV5dAZ+)IuI-fDujQARg&IoghW5CI>@7MvO z&$Mk^#=7uIsl7o|pmN*`R^5@nM@Wc^0;gT2;MQcOP{!UIc6-%W1YCotSx_@7#`&IrF+{bZ(H~V%J1h4JnYLo1g zd*7Pld0Lorp{U6>&7ztl=^gqf3yYiVAVzmGqT(w)s$woCoTb+*q9~3CGg?nqNL}eeC{8!Wti#6pPxz5z(;g zauQ<{8RlKF`!%<`FDLeZ{;(t`@rLvegWMoF{<>SkUF-yxWPeLAT~+pcYf%1net@eM zcbzWiaz_Tnylq-ZVDCk)S5w7xqIOd10gnjzW`I%!`RbG^r~C0hxH~`o6G6&|3@w!m zzTNhLvFwpD-{}lD!2v_00rP9!F6*YQ^ntRcj+CxYSCYl$+;?|N<`<*=fh@g5r zl;?_Eql(6gF)1D$JdbV`jKRtr?iQ!_Vm`7*gW>MF3sMnfk5A5Js+boTg)Y^uZh;4M zqmQNwx3fSppV~*uDObci%bev){o28ob8EQUxff@KF^B&*@v~$FZt+1J{JO+F?QY9^ zi%@~{2Bw)dB;cO4$41dT%R}J07*Rv<$O7FiZi}bx;PFr;ZSw!7ohuHfT@7$S@e1n# z@^~94Hec3FW$6pdooo+z=iOG`tm&a0)hCp0L+yyaGkCT`dDfzA>lT0H%c>$*h!3(m z?{L&K_u!=dhht9aY<@7up~U`&qvJqG31qL{d{&$X7_-#PU07=&Bc^FEr=)Q3U9hM8 z?c*@wgJ|+e>1>IZg*ZQpa#e+wGiHo)LbgaJ`=5}+rE6pcb^&K8lWP@GzP;00EK;15 zxQq6&L5{8O%61Ow;^dLaa@A6CZ}S|FE>a#WnMsV{2yrcQ#4ecusZBr*w&Nh)40$XGe1+nFk ztHjl2hmS(cKav(mLN~WK$1x5-FJ=0CDNqTYwOSv;yX|4uV0LPbTnI|p>SrL++stvU zzIcz5lKOzZy13h+mHh2DVa=P4c!wg_DsO`DIk?MkzWJoAcRS$WQ4c7D+J~p%e=lIt zLpOWzz*i-8?tHj2?Ziz%1C{QVhz)D4p2@Ysy1}K|Z5Ow&VBzdgxI69E+b3fx26nzD z^il01gqjOu;dbPNV-owxA+p=Hg}bxQcGwHw)?&i9?J_>7c0AE~XNYf!79RAgQGsrR z)ep3=8Z15@c|KGwoit{$?s(Sz#UXU0hb4#(pNkc@W7_MLU3FU`y8=mdtCmg<6m{Ii zY)~DVeo+?usA_Sxr}*~ToL~;k>(E~3pvcGZ4C-AgiMcO|X;p9vveV8OK;uOp=}V@o zpZXfHS%7RsebEaXXjl6z4sq3Pk0;Q^K6DGH7W(LlANASw-{;$I+v1lr{JgZsL7`!< zBu44_v^0xecMu>Et6^pq(!J>6@Zy07{uGat5)m{T%VKg+qjMMSrM+Mj59}K^l~@7*I;*-XDlm6)2q|$L_X&-f~U@Q%dkg$9n$J`udo(b z5Agie2|*wrA#IVLaQ3&=T3K6ss-gYH@-?#mR?DJ8#4DHcjpYUsb}-1u)A$x@sm|e@auvN1Y6oY$phX-B-S+ML2EQqV;LxpR4q3{X9$f8}J%6QkrE=2Hs4-KQ zZKAx>`#uuboFJXh^Z*Oc~WPCra;+pKWlooqh2MpXa(f-n5CK{xL z=&0CA!FPZP8o`}G$;f%(LpG6QYZm#9KtsAX|pa+6F6 z`?Uf-!5rLf-kdWnF$)!jm~H)AsNI;+Zj0%HpRaGYIj5c%B`!-nSS|q1ps2}@V*vDN zYYZyIZ`Q3O;&l9ta2M)>Q#vk zkEdpA*jJ0dCfEIMF$%y+OV6n7+v3b)Oy<?czB~rFB1s)W%J3&9ahX1F5Za0ztCvTfMVTv0%&6;KDd)7{N+ z84In)WUCVS@YoA-%VPq{ZapSEOC99hz;Q(;5zrx3i~8 z!x8RB95$EA(`LQ?w~>GCo2g%AZqQ{iUX}d{8VHwpU)AtZ;>m^4{wI-E=}mow{qOA8 z4R`B=l1?)8teRRs<4&Q1?_I7|5#9(tLm7-Pg__efs@M&n9a|ApJ0zn4Y@ zyF33hlXubF-Y8~!x}X-yFNLAbrSIyW^PFGN0^N!j?yCpFyV7?YgS9m;ySSH^wbo0g zWd%bHKl|_2%tHjJbHQbwlxf;ytDST$VxNGgrn4@*U_2xyo)TTPh;DA#5G7Dc5B)e~aq=346G|M1a%=T#;mM_yrX z>wCq6N(bTQ?;CgPgo);EG9s6e7dv61GsjpNodc(x4VOA_I*p>v8KJkA{#H6J;or-? z;NTl8P>|Q0f7ZNk-dU3#C|&sDc0H;a_K1~6_6jj?Rc_n;G>pUfZtuawV}DUPJwiI2 z->=g->l;&4xWu8qAJLroE7`m*V};=B3ex}$VGJN!{V>wk+x8Z-M4Y_j0&y8riw=70o&3vJ=ynmR%qSukyrC`#mA! z3UF8HT)J6)kKUGVff~`jCv@&v+!$2@<>7z$*u(Eb)ae1eq#u9kCB`&J?k(td?=U?m zyMXcV%VwU+-xpJo4`n?jQy<&-B)OZAvtQkaap?R?z(b5pMB!+-?OYAFoeSH@p*Z5LS$!0N$#jTwbrr#;(}s*rVU5sLGlTV!6PbRe}%Ljp~&r@tV4f47M@_DjqXI zMME9bFMjo~@Y)H=mFePOAOr0p~~oZK#54AKSwBIZ<(Q6yx6)Dm#GW6sCIn9 zCVGCMA^e3P6%}`l4^I z0f;3<_JGTC2Isb}G1O8!n?iO41pU`c4@Hj~<}><<32JCEL$uz9MfR?~DD<$*d=2Fa zjxkGf(RPPC1{({vOSyv1>fcC6PZ_3*P95{q8QNO&gg{>b4pTf<57Lj0O3IyZn^xW+ zktfknfcmKJ5UwF^MOOh`vTUre{5zsggi#qJ5;xD9!WuWcD>9%pMa$h|37G1^V^|{Y z{=`!n5Gi!3b{M@0oB}dUZKEs|HS^xWo+1VFnDEymTH{_}yiwvVMfKEP4+5=-AsCyfhOz0e z=g@45$&_`4%Gw@UOO=M|rjFw>ENCTsR3^k|Ov?A-v5bYO8BeHCNQZihHnIYCOvKdj zD))S&hydE|j?Mbv?v5Aui{@k=zeccrQIE3`Y)?dnt~eY`6+D7hqA|&qC8m}wq{Etz z+3Pv01RRTaeF`WW-w&gN0K|J7AHrPJqQ<9r0Lqt!E_Eu0;aa5JR`f#igd59lxBXKD z(Q&Ag_)YLY9CI8F0$yi_b=y*xISg{@@x)J6h2Q-80bXra-9-h(p2@etsI;gD9~ z4Kq(D78OtH@kY}S`Ko_HAt_|U)S!ywh5+SlHD+#8xk}&1Jbz9dN?amCr%2i|Z%h|O zGQzDYx8e6fA?)%osEy_?>AU&iUB+_qgIuxVuDK5vCu2?R?3fbS}(_oJU!u~9a4x;)|iDrk{Y{AN74$&r1lf3rgrv~(r}SeX=qGMMXI`zr`f5l zv?hM$jlpem?V3VH>>!a|qgKmP@!w^DMY@Ym74|C+WVrVJNUm0SoojZ02jIHa7P%wA zA-UTwe_!kNTeZE2B`;T#B~teXLU@2>j&RBgPV=hkmw!g&Zf|+Pt5^|2%RXLSa8O8B z5v(o_{X(;z@W;vvmfNG)(E3FBf_hZcsL-R*^XefSqJNO>qA#kI(sApWRmqidkEn@h zWN2)ezWl=tt+NoI)u{@rt|vJnhvSSP1=mgEV)Vw~x|#BKYC75Oo;icO{^@hobtU&q zyT$ESwR8H5I>H0$dhq0~Xs&Ww4blW^$02n}SEi~+j<}xIIYBe+EA#@Yt=QkZ;^{n* zPuBBG* zajUvk+TvA%lV3`XxR2MGLzC)SY4H;mrQJ_ll-56fu@!@`HdW-GE{{EZr_9<;duXbE z4zlTdxDS>TNgsxpTx4yMIWM&I8nmvIC7!{IoP& z>L@2UFF4f%%^!$a#AW{AHTh$|31bI`fh8+Qk$9KZxANSNQc!|~2#=ozM z$Zvo3m&lsZRNrf+X3)v#&9N;)V648-mN|9TO{l2Rarw=};9E^XBUY0TnbVlnq#Nc% zX>vIndCI&znc z?S6qEnx>im;BZNa$>5j6J~{+{=Tp?FoIj;bO--p&$v>q|z5c1{)EDVRKXqy-C2snu zQ{P5?PODQnX?03ZHp*1~c2qwUbwjIDy=y2MqdjvWlsQ_oqnDmzAo=_9VV%pyIdtXS ztQvh%RKU{`YN;Mrq}oFtEj{KS)VJg#d7n8IE6Fn7>E@A?p6uORWIe8*;m<{TJ}AA3Zp>1l8g%sD$XLwGVm)!in_Qg3z8-{O^W8FnkdrO^iFQg z6tZG5lJ<{8F@PdEzK6|TAO6{?ARQQv6n6dv4H8ziS46}2GN+a9KdRn}Co*GBq+oCs zR#1+Z(EgeS$9bQK6}S~n=$=3~L*H6cVkW)SH&L$TWbB$3V%~K`JtH%PPGA{b>g(WeH{G~>kuF%va5yu_DC2A;#zu0>Ft;-5UUxH&4awwTsM_i5 zk4=}G)XBgJ(F_h*(F5_{XWim?i{h0h;vZxYbw{F_RmTsHp{!#d9XOUAl{KhtO38O z7vyP#IUbba@J*4?a(wTIcVwFHkO;Th_-VW4UCo2(J8ek>pacv-DZYnvx*TgH;R@{( zm?x4-zY#|wQlrYwS2=6N>4-=DcMnnPUGmNL1lptq*fDq!LY4<%gwDrixKRQmsHG>8 zY5cS$;W0M0utd{O$H!2?B5dOi7caT3ypwh8%Mqd$BNz04%%>kqxfz}tgVY?&wQ`!K zsZBD(ae#Z{pP~p{P7^O>YQA;M9bL{1&hM)35E(#k#ox*DlpTn_mlY~IT73o7h)SfX zQB;(*#7w=8FY7&E+nJlbNd=%qX0aGs3}kSlCte_H+s2%7qfDzwD%2kH-7!on7AWJV z-IiBrCBO-?JC3^?`6HSg*hb8n#0nJqso@NGexPp*8xY`G5MQslxZyxT8Z6qMUCY3g1swr^Ls;TvQCb(HxP7oY*(S zSCNjaIu|&Lo-K~tR&g2r>HP2h`PxfZC|!!B_u@dbtlFu&=$ZGFj#W2pu*zgK*?WEyw;Q(LpzpU znJOrvyt9l=&FfY)KQO@47TQrqI>^%D>YufX`genG^0ay0z}J@;sNPPTQEy8K!{ARS z>*N#)U>;_dY7f&PNUUW(^AA0qQ@Dd9hM|)reA#>Ur4lTX>B4dhZyc(2H~da6G{p6l zlg7#wLOCPVTc~rqwI5O*QI{E#V8ULK^7LIAb*QXMOfwpuuaio+fc27hqF)HId?be~ z_#r5uBkJKuehQNo6DO87U zZ%Xf4$=B^$?Gt^8pXpExS#1JJwC5;A636g*FztP65aSiX~tpGxY091#PN4g z_@=NWmeUlQJ{I1J*QtP@tJMjg`DIr$OU}6V>MqI?To2zS@@4TvMjbzz<=MuyJh8%% z43#M$Wn+gTD5bOTjj``thS-32ynE`anY@I;{j8n_9svWzmOyr zyO^?r)0j6M5d5#ACpJg!q(AyL)aXG8PvPDKVBQf9(QL5WTI1ar@uQif7P|StJU3Ph zG5(l$C8g1&3Y!|mhfMRMWaMQ2X`YJ`hm{j}oe{;~$@Co5!_pmgqDe7ka70HgTK^=g zNDY>#;Z$is&U%~`NDNASo#`Wi+hIg13?_c%Sj~&_lN{M% z#`>o`fo*Q;k*M%Bfx&J}L=;})E=)pJKKd6A@#KWic`sSgHciWCvMz4V~BOj@l&F z6cpb|Oz_zGYx$$v$ngB56Vj}nUc)P`@RRw?0(u*MO|29Ys1N} zEQh}enTVR$-V{Wg91I_CnaHxthXZ=T14K%vPSq70co7xb}YOOgT>=kbPa#j zSkcEZq3^Mx>+H>w=qE+7p=?3o4xOyMTB6dT7lD35;Z1BN+?sg?urlbjy2>~yg4@4Llm}$WDJtQ8mq4e z6?vnVtKwCJZ{FzOiKNz0&75*8t7;F><2uGF(g2lcm;V@Rj#;vh5I%LWPWVsY+_u>gCt?TH{z{)!#yHU78xzn%YI;r}jKg=7@;`|nEp8I~u;NfOI0 zZIKdVBYIPGFem`X`W@dE0t_Ez3G$mU1g}^i-=n^Ua}w$r{YFsJ_F`Y~X$jt6d~;~@ z8eC}ApAU_GoWC_=QV{uD_uKdO7W~ca!^h`Ey~y~jk>SC0vQrih4z82dYCXwtXOjH( z{}x8Q(=Ok@j==W!Tu@gUUVM2_R~oJz=Olq}b1eKE0Y6UIu#O=rd#*!jS&8T+CvQsh z`m~zLojIOspDgkELnG;3tq*yi)(iGgvktUK^>K3OOk{d+t?uJx!L_=Nm!$HZiV3@Y zjxLn+z8!NnU0vIQhnf+s6&J0Hs4H0Z%;Mp}vL}T!#TwXCJCv)ukWHp9nRUBdk;$^~ zjj})lSRWILZmAvQz?7?TP z6-yv^8eDaP)e~DkD=t~MR`H9f+N&<`oFdVyY_nu~wHr;Vxk>g|C+lrC$a*7lWQ90+ zo9dawzlO%j?JpAk#=f4SiXk!VrbgrYOo&J+M3SN_ku`hFFt3ugXetY0ac>%s?g3c3 z!mcP9Ary$VA|m`qC$-foek4T*<5PriG0|Wwfz*rYU4{K>q&8Ow2|U(E0#~JKI9%SZ zhQpy8&uC2o!ySv`?E>9!yO;MBKcYzi3w4@Yb3<=Oid0Kb7w%p>I;abG*N%|4qluRH zz8)eN&`{@-%@VmlwFga24nu;bCWlNGo{JEK4}#FtA^wu+E@SyBEzxlzzo;sYtFmWx zS?gy3BQa<5OUFFf{d$LLn)sgndYn+WaCdo$yyM^g(KGp!S53~5ZYjD4tcl`i9fR)<=FO@bI*-TTLBBb{n|TU^l;fc?xYJ&d%Q!clVQrz@j<|eB*boN? z+JV5CbiBYdEk=yuaa&@`h9_o@c-R@6g4~Udd(xJD~?Nqz+gPV9MzV#8F#kITi*a zVsy`^qkw<4I*%H&*j-Gr8rF8z}cbpx}Ql(sf^}XHi6!1 zDYGB$FuT(?>~fzHR8q?2lk3=aBHqgo4mSnFNZgW0VGe)fnfW{Q#CD)185 zHc~1T+|}k4LyS40%{4u=XX$Y@ikx|(00&qz$9Rba91yGZS~CqQgHfBOCzjm?zFu|~ zcafyS9a2do+|!VhR+sKTIw9tt-pueT%>kqnGkmGc2yP^~GZ~pW4nFMAZe^!r=DFoL=qP(|Nhv>DcQF;mz9!w+tB@pSY;YojnX`!}3Pt)^U( z&Lu`bWgCT0aOVQmeTsZpX=I3OAL{xBO?fCf$&6197H3}!#A-3%MB+^h7W?&Az{iXD z>eLzPxSo&76h}|~K2I}k5m$8PgnCTZwl4O0_IZl^I@UnxhAEJQ=p_g}BEtT!%oe2` z|HxkylO`ncxiM3y3*D;6cCoW9(@TGlX;yqsZjx{nCnOdo9m&i;UAX@b#;}qIIT<<``8)P-Og$%?cNhi_pWyGwo(*k#s3@9go^>ytmTcUpH==$kNwmDyq8sVg zM#dyfp>t)*whnbJ^Eu;AWF;F-*`?|+-M@WQ+Ej8QYG0mb`{p(oSzA>m(bn@Z-4#)y zMYu;|P^%J8)1tFk56r5a|**L|3AFT9ka<{_rBTxM^#KJ0cc z#6w3W+=uQ6nZ;2LHB3~C6F@dmGuZrn*tW&^-$n^Ju`9uGF_u|+7OcmFY^}$9{7bOB z*qM~j!QPHgTZLNYGYZ=RAF7)t5Wy1qkQ&QSL2t#8mqoyCaiCnQ(Eia-x^TOQNm!3y zUWveEP|xwskUr}4rrjYXx-83 zi-J>XMyTkq^-EAx89=bmTQd&pU-U?<+-)KzoOJrZ<2>kKkw#w?`=V|hskQhBG~M`$ ztfD(WP@pM8j-jfOgt>YMd8l+zeKW<6}Q?KJ}_zkCJiN>L|P zQaPxLCJ=2b)s8D{8$fDI5Y^-KW=)w{{Vc9{XMwpUFnU;rXpLswA+%uX5sZ+Ti4|lM z(so6QN#2y3}Gk>MoqSnYFMIDPpy!w@FKNkS)MczQs z1QFy!*!#47@$$5^92ZKg2bu3}1AwFUYOk?VLDt8uyXV1mDh8JM0{?hgOYF7OUQpq& z;-#LfR%!`#rDQ-l7Ad7uuAz64Znsiq0*KH&ceF~C<*BVneS1LSEUlTt@HwH!O9^%Y zOQ{w!i+hZj*qyu=5hh4EbL|}$=k`_TS&|earmxR}VC|0nF7ZvqrZk8CJA7Jz`URsC zB9u8L6W=`RpKlbR+~Q-coJcmb$Gj_d!Z{v**^VQMA^$KE?F?evCYH}FK_Qf6knW2a zZW)dl_QUM1@jC|tT{hM#An>ina%(AI!Y5%($e=aIq=oT{2^iD@NuNzd^ODhAjgaE6 zD6v~**8n3Cb_!tt{I7XVyY%v^?1k!J>`}pD6UU5!G7J$=nCgD7 zxJep1WXS^uA9zO`@(%V%3i(9PaHfNri1&h{p)+!YdQ_MshQ-Rx;6>^!)RJMCzYgN4ZqUSt$pr5xS+O-x^bH$li`7CHQ*C0XVA^ zsvpV`ZGPwh%VdMx(hJ=y^ACLf3H#KKX|UW&CZ^OrrnsgYGffkjb}cDS+weRs1*b}y zLS$%gizGHh2Utz=H#oJK-y(*+4dwpKp^KZxWy%E*nK0n_I5awZtnPYA^b0k4Sq+`s zyN4)MbE@>ut7ha@VL0eo5FJizziR5iJ|DQr52k0REiomyMX179@vzK!Q(A;Xcw8+) zgJ(N(Q(@csnRC5<&uZy!Aafd@L-C87&xq>lNZU8_k{lxR3Nw9ggFS~)c{xXY; zj!~gi(Nf!ULLYLMz(rb{9;b0;$Yrfv$0uvcGyK~DevZ`avu0$AuH7V5&JqUex}rf< z>c;@>DBW?bYxjtAxLtd91ABQX0>zwmV^a&Y7uNddsFOlG8%~T1mWUYfJ|StixnND7 z9Mi3v@42lhv3fCEJ#dO2$dhJoSPQ-O2J8sxP_V8$dI4MbI0n0@4YX6Ky$JepCLSmR zd~L%o~4)PtK4rP4`<(d2~)a;7eqgtL0zI z2zG^JIYW20S-^#qfy@_4@kzATQQBiwTlcQ#|=jBk%Nt-c&n`f}PsNzPW2Mi2SoC zjA`9B*0k%VMy?`j=Y2YrR-r2dRObYKg=Yv}t8(3Avwq2IcaeIXyta*h?JreixaNrl zzt^5V%{#FlA@cXE*khuK~tvEm#Uv3a)&1-9qP5^zsfWF9(ZUx% z@!opU@DI5MTbMENkWtZm%D8Ro-Nuz|wPnVYqsMZ&b`Cd;xKD1V*nZOZ!uEIv_Ov_N zxtDJ(acy18{!g*4^*6I|>jKPg3w9c}@o|3KJ|#nKQ}JGG+LYX;;xCEE42pWW@j@X3 z$kbQrX)iY)@VhDy$Au-&xwqIqkyCX-$A2=PYI=#9n|;dgkDka|)dLgxcux-hlrV_@ zCMDvOamPDsgava%YA!qeX%<59r;foK*lQ+~&i_V60mn(33Hv>G${1GM)pyTyF(tMc z6Mw_2wi**pFj7Xl@Mym$$P38meIV6hr}2nX6EG%jJ!MpGGp;;Jvthe-v@wykxVB&i z?d|3NIE}UQBXH6_W8#1D>03Rty-jV?CQVzLG@b6Y_6?*}ew3ab``C+z0e(DD+HA24 z%QHwyulWkoMficdv$#jM@DF_c18bU^2B*i1+PDv&&z14T9^Fa87HB|q%IJ(0;#C*n z{*2tk8HAc(6z#Tuf;c8u05)PQnR=C?K3+uv_qH+~zj+F5w@K1sV%~v_tCjzG(;u4Y zN&JH`d=jGZ{%?w^vh_%%NBqBCw{yyvUrgf*<93t=Lxj`fe5e1ReIJ%5PxkpvHYYUnC%>B z$Z_az84enY$_Dz!vtxL;8`b{9WUVN&XjOqTs{V0yAY4LfEEBL+uuZrNz4|EBTAL*o zc4M#GgMO#yYOX5Jwj1Oa?(UEeqVY)3M|X6#2^e@3O`$Wm zPFQknc5CJ<%ohafN{m`BA4%z*Fl&Q+N@S)l4Cmz7rtL9Ev4w{i@{Er}i!D1M1GTHN z7F2oW2T9EmM5N%Ez2oEQ%?za$`ZPn=u_qYIsnzXN!euGMq*s+q5w1r@9-#+f;J76Y zYSkkn5An5B-R8Cb3CnG0YjlX3Ir7#(qrNQ>Ox;kCPyIK3hpCSbZN;5OH7`G5rEPYj zz8ZaxUk0igj)u()^Utwb^jDvWwXL-Bwg6}`gTB0_;H za%p}twpt2uA|wv;oRz|G1Kew+${Awft$bZ3sC1XVa@8^JdHG3LoNCmct;VY)?s#*( zD2$E{YY>?c?!I^DMB;L;A7(zQ-$sm=o+I5g6HLFpzG0)k_oG`SegvHP!;t}mmcifU z!2OvcAF9W%(v>hDxk?t)v)6k3x?DLY+5$UX)?D|I>wJ8FNjPtBA9kq6uag1cbMfrH zcmG5}^{9fjgP1LHqAY4sG+r&ONv*ZUt9A2eJkxU=X)Gf;!u-hnkiWI@I+3*`*SSL~ zA5@WjWUOf5lY>37{&_?}Qt>G<eop?LsX`a9Zo<3XS>-7&wQ43>H97YC;(KF55>qz=RXU3T?-t^n$9lO@ zW~)ISwU&z*sT!m?Yq=yuTfbZ<|Gu;YVb`jeoT3nO>N5iJg7pmB)MFCpRL(v?`zY`R z3jAtbuBRIdC5F@cXo$K@`rM{YS02q3>#&L$j92K=JY2NUt|=~c| zHY|JpMsIM|#Aucp7ATpN$WyZ>+B2x{lF;SzoZ5k3<2xJrebtgu9FX4bt@GWAjqk-V zLVunY$H+?qFOJa* zl~fbDdLWhx-h*cE<4xRBkB8<$p;TLN#heEQF=-YR#N}HuS_>DF=)%UylbPVqEMN6l zEi8Y-k=ZL zr>l4h&DA^(dKf&GnXB^L4w(!ST{t_mlTiFZuUax8aY1TAB3^X^A%0w(!bA*ETbh|! zz-v~VWZnC;PDkfFbBbAtB_wXgA=W@>wE z&Bp3S&@_J4aCfjt@+}>MQBeDdYVXDiSBBG+B7F1ImS>qxwUCUxVCXyO(LL3Z_!jyO zA-Fv?<3d~H>FSG8w=E5N&3BtUuk+-9&_|=1&*5DmBV(N zkSmP24n5wa2-DeSHUu&O@R=3ZbN-5ll&!-yQ z>kQMgeeZjWGPIwQpm1xbZE+SKktKJCzBxB}pRdBcnj@{>K`5zQ*W@=N@8Hac`gD@} z%n7-Od*FfSefL;2=UvIqFe~@mD&nAblM|B+Vz+Jy{AU zrXeX8smO%f(8-$55g&eudQ_6W)xr3C)co)e60880-q>k*ze}3GU!x9+G!Y2BS@ZeO z9TRe@$ElqpEOd~tK*aKXTvAvLbQ`n~%l>ZXz^k-=Okx>?ui_%gX1Hqe%VVpC!(cS< z&iLKt)JM=PU6G5;7TeQ4{$Q2cf!%3yXShgq+#tVdhcLT2)NqFoz!jl}JNa94nG)3X z$YqjROOa6u*89|~o-=W#XDpTMe+N^28|4@hkgx@)p<8USlBNJ$kDNGm2c~4Tk>Xe! zilOVOhXM>L<-7k~$bB*DGO=Jb7FbRTqwxtYV&VL(ln)#r98eN+-|guPT~{+qx4^X6 z*Xu^2EpRchhowPE$qD@?34h75>_oluHb5}sZ7cqPzkkK6s^cB<3QdnX@|_?kozoOr zrPDovp;bEF<0`dIFY<@^`{Ez?SUbs9QZ3|kUGu9I+o+@}Q)w6*cU#x|ib|^cG!rDE zz9k*`0c{I_b4+7Lk?cd=-aXy=(ncls+G^NNv*g#DN-{Ps;x zAYMAA;|Knej{<&iA0HAy>BsQ?0213DpdaB}ym+CTsa6z<=0tK@rPpM7R=KR9f``7D zjA*8?(y=~r9IG009pA>7&akJu}9a*8lX8AcdGk${b}M+ z`!$`WQ$vE4UCTIbJ2Rz@C@v^MzL8BG1p^UFyRFIQWM+TpINY4Fj%XhT1A7U?axW#! zveRsSreq#*-}dJ3)5>K)Tzp}@;G1GdAL`0$&UEvw}dVLt#+5$ z<@&*$$z-{_=HK}67xz9C?Pi-v_oPve?qM{}K1~#e2d}fHP)EDIhi1!Jf5l(ZF1QoY zg0cLZR$j2)MhaAWYRn`0kNLI7=`mx;mG#1{=e1@{Ja6>a)?|qP1$r-XHBMMTbC~Y+ zxMy1f9P_{V{;j0uNg_-17}2KIm*t&!0jVLeQgj-kD<9Qb&PtIngHPKKZta&!nN0ip zpuLvH9+fMq(_YCp!~$t6(=cqkjzYzXdfZUhWUd}JxdoN zcprA#Pk#dxF~R*p&I-jrW*j149P|l$r_y?Z+x%+I2dH26VZQ6sjN?_qQyKAxzSEoC zoJKM%d+1y;WfaZ2db?c~0nGAp>DF$02vk@#HudPg^n3JLbLt&Pl-{Mo*5Acna3!Wu z&01ua47GK`GpME?Puu-qnMT2y(#RAL;#=7zb&?jzK~~opYZ72TR7c#dnQB39;u4}{ z!S|b%%R~=gn7+gb{>{Jxr|*>2ft9(VlS3L$JQ+QTPCHldN54q`wpn+K@G}v?cf)Is z;Q8)CM@s4!69JVfCuGJuhP}M6d^3^mZ*8DW4R*@Q=N&-JjXjRrH0JZineNSJVlzwu& zeMQZA>EDKVUi$Za%UMdYUTNxqRsH*8)xZUv&MTdGp7=a*BgtjMRFe=C6Q~iqUSIk_ z?}Y&=EW6YV(LHLvLwAE28h9IO_C&kh;(ZTJ!W;1QBSfnmWyTbm^*J^ZTflXP zyu)bR9$^ppjDNdD_Rw}U&1=T9)Wx2-`FD4@VzZ}+E{;r2Kx2=6mB5Wt2J5SLx;m1g z+<(U(syswQj%>=*CjCqHCT%&J(%GQ)zdp|dXu1f7JELB8F=xWv3`&;Qs5_ zCeFwhGlMf4TiKARH4r}LZW0u%ju&NvB6jSyU($~lD}E?@*z{*Yt)-|d*e8|-^R%%TIvU$zoT9j0dGnRn*7I7qM%{vDU-e{oviF4Wm&U%UcQQ*ndm<^6WnK2hCZ0x#gRO%Agll(z&Mx{G3E$jH z!idCihj=|y#I%-u0a9=23YsFl@3709x2*^;g@3N)78HfP zmaDgPP??dDbP2ndyFvs}t6*~apdOn#sC!Z*Fqs?FQ(AE$zt3iO65ZSmgwZJbTKP#X zN~~c!6$*l;w-|oF@?(jR7W1mz6E`c8rq=eW=^>ku*RKcfSN~=IUzW-)dyboW?jR zz+&4ly>!?7Ocftx-l&^}NJd?$O|vqLO^7%otRFkCgyT@f>;L9UID+(#;OzOxw7pWl zkwFdnaj)zPjr{7M0o%FV(R39e$j zh(LR~2l2(Kd|qGF39(#U>Ec~h_&N1ve)G7n9634)j_A!}{ZeD)EPBKuDK`8#8L|Y? zNQ&$u#FXu^|C!vEab($ujsG|~E}Y$f1q$=psbN4s8>qcfg4Lrrb0tOMt1mN4#W<`9 zm~n@9c?fCSEBsfInCLbfkX+gJ>bazD5^9r-zSu8ScCaANgL;%ZZZEuzDe(!4KpYU z`RB4?DR+lVWB#t&v(qYmHdG9dM4@<`>K<_c{wQg#=>*p=>U7t1g6p8fXcb;3Ij$oJ z3ui(u{6GeU?qD=#N+&*^;`-mLo(WD|I`?>CEWAqxAvLoG$N2vU{~zUlNpIcE|B~KH ziKys{$>^a{`Zv5FfY^TtxCMJUD3fEUy}{3zesXxnSAR_ZvEEBl3VAc zl3OoNCAW_IjO12Ip$jKy=FI=I39j88;zi=XkKO~BleYK5XC%13@UaBf7dpUo)(NgA zfB%XE*DOhJg;$-QyY^Y>tuK5cz4e7prnhzn%bs66Bv|$w3tQ{!xI_qw!?*4L_PrDx zO7u;N{GK(;q4KRSaaDGzB(C1ik@bufu9qWA;)!+Es!mybQiY$P?_h5b#On#SkqItE zNSeOOT~Z~eAgYTQEtj>_iK{I}Q$2I@*AP#+9eq`#4#`_3Mc0OJYuYgyr%SUs!#w<~ zLpX+c6MYVb4;W2@r3;cdD|xHLV8a!J&U*7!SIQ|#hIndyKbOi|CFx!A6HCrZ8y(rP zKDDs_*tf7(q|#O|>zB6Ln^!GCeSN9bYNXJgE?*fPUNSm=8#gdMkg_UF1SV~ zF%xpx==9;dE(}%S_P!*=y}?zoI4tfe;heQ3ufo7&xk+AqPLfyg=Jx3P)dR-z202TM zNpgNhpRdmd;LZ%LbzCg+jGmSb30zSRaGZ2`B&5Mla;lQJhZH{NITdb`V|1&NdkSuh znITU^UsILOXubfeqnzcY8N>!YX>9UvngWmtMrV`gv4rXu;Dk@5ramOgzZ?GWm++1X zFdX#qU-$9lukE+|hIx;CE5=;cB`@`*U;3%5f1%^0wu&25$)TT1C5MhmB@F}UCYEGE z-pYLH!j30XtN(c4>i;!K%NMHRMhM_=|CHsoJ|kuMytildt@@{=ECURtD#=>zxA0PZ z3hTvcz38GBC;%s-^~ef{N|kNN;sYSd2BQbiF{7`^nmt;mZ$%*L3^|#_%Rety&grA{ zS#>BBZZ?+RFOK-=D;-aZLt9cIUSl^U-sUf_NF2~-t0918dnn14u@PRQk5zrBA|ym# zvELJ$F=nrI1T)Oz0N2NdbA*@LZ+6hEB#r7Aw&GR&lSU7vl151u)k&lD3kib_rH^TZ zl8zyCN{sEsih7m^ndnzz*&alwjFvpms=GeT0W1tD9V2$WGkQKg;C4Z&O+{7Vm?nB^ zQak3OcJ-*Fl7{xyUBC@wm@XuyYr#&PX_}$pA5Sy|j}U^)-}ll1)I|qZe3)?2SLr1> z$li+e@`IGs>|g=G6PrO>8)9jZ`ymmCN(&sUrXCd44ql}&UwFHZm)EH9c$nH)${B)MfbBLl|2B$f!vM8n|h2hqQ_;#s#(OB zbqD)nqTk3>ghn{U_N}d%@-r87jSzfFUfK7Y-n$`aQJ5gQi= zXZekyS^m&LycnPvW8wuGX0kTVgTt*n}8|FP5U zTA~RV#Z0WL;B1h9PD~IRB)n5f;wTw*h0#cyvA zyZrhR@nDBDZ{^ws0j{^r4mV)72R3x$hPFoZ$iE=NRUWqsZxb6MwHOcJm#CVykj-$1 zmY~Xxl5b(p1!aZ~e_4^=bgm{p7(G^VMX>Hz_2vCQ*=By<2I{WJ;%}(#SnYqS%0u;` zN#r0Rf=4#ilPx^x)xl$j*LUQ~0Y3U3Iv6A8d#C;GyKc^%qgd#!Uj?MmbR6E*U9S$3 zTmJ`cE|LMYt`0}Cwq^c?LA%vdKhN4_7<-Y0M!bmSlsv(Kp|cV*y9f1li1xQ*^f6|( zkk?b7?d{tm-m9AvgX*VV%)>4c!+s#Oi4gWElVsZ$E!5VRAuz*%+cM=BcVfKr!F6>r zkSP;J(bnL-x0x!&dFiu#Vmil4|4G*#AGjh1yUsk*D8)Sdx> zZ5T`A>u1qHYs3UTBF$V7o0V1dwcCjCDB2NfF^XCel~sdoGm|;h#ncizTwPQ@RVd8W zpR{0TL!QZop?Ma38b?cqt_U{@pz#>D>`;5FzPf-6_(02s2>msiGedD}$bBWuTS43U zX>@3C=1l3L4ONMbXPRTlP0nxTt82p@ z3{!N5*O+38U9{Q%`kv5lbkM7r(_Hl(;^pPsI~}>rX)@csPFe%inEX8&$bg*2wr165 zc>R3yv}V2L(Vx7nS-F||QwFa}%B#5Z@9?$lu?M}(1}gH>lX){jZ&m*YbIVv0C&9Hs zp0%0w@A;CFu~fZ8QO9l1hEDp~nHJaQERj}cq{Qq_<})x7hps|eP0;O zxcczJTNB?2t`)P}SeS(6>o zVkJQ%qaqm(?|e9}Bd8cx`acPsDfa2YIRxsZMitG}k$cMPmUyf5t@^LrKSbOHfW^qU z=|oQT52qqRbwQZ;*M*tPgMcrfaZw&%gFN(!=45^uIc)mNp8>+y3p_o{k*CiGo=$0V zzIpcBL_~h<6;Au5P~T_2;!{L+M`2W3`%P?UjmX=i&#n=9yC!3!`{AwU&uD)0`7_4* zjsGC|s@P`}k|4(Y?>9@}M0!&B9q9lwi9~#sqoQ(_t9)FoVs_oezDa{~dzT|TMM)D4Yx$@3P8FywxCWkhOHd0-bx^Ha5%{}yGtlfOO$Rb!b%f(##LEP<1u6&+5 zQ}oKh(4m6f zL8@-OG4)8N=#e5TJ$JtZz}%MV*xjj)EfhC={=R_Tcn(q`Xq9&db4cCmj!r^+*i)j1 zcHdBmNEIh)fUyL~w98I2-5>)Ncb8UBY34?sy`Hcqk?oYO z=J)Xxp#Rc&Kqmkx<#~^F^H?Qf;rtZ8`9ey6|6D)){ZsgjhY(oO*weg5qUj@<;23~l z2t-7chizR_ZZFg>28qn-xBl=qu+l633%DOMmF~n(UH!vQd99SXN$e+ht|Rms~2<+XqR~&z&&ogik)r z;uFb5@brPk?b|;~vM_FolRnhGm~!=75!gkJPXCwYXJmv``pW@V48_$6@J3fOYf3R@ zow#@Rt(b}8MB2m9(lK+B%#XZA;}?;f02wh>Owb=PA|tAjRY`lw7B`o@#tL0?qPVAm zFOhGiywb*s)51BDL0vb?SS=A7!g2NM8sZXbtd&piW=~tD1Z|t=G6=}U_tI^jLcfKi z$3acVr33BXJKu#Ci$c1+rJJ?zBFTI^1&`(=p{VuQv|`LTM+@s$AsVeX%|MJBpJaFPGFs;SlR_s+ z%qZ&$j*wQl79EwIo}cJ>nEY!5aD8`T9kqiak1Zk+Q!`fCrOr-tDP4nY!%^7Z`gQyR z6N6#dT^rr$;D5qGG9Td$+qY``Pr?tu;>whFZYO5>h~}GFN$-kv`ieA-JAg#%!}h9c za3%;_3~C(pW#jcb2}{o2?D<7Avtp0holJTTr6=zwZ-$Qc6I{J7o)BrF4M`#Ax03NA z=|4yi#>5sbIk`V4$@GD)GE4Zm_KV!@IM2bsOKduz>ScIY^86c#0uHzPzHeMJ!ByHMq< zYG{#Y997`;q>@KH_`Jybn;zP^^pMg`6A(OAdY@rUy=E?Q`id7J>{O?X6+h-n{ZtXm zU6DIdk>V7K;Co5r@~T1h56ci{cLNkQqy!;9^k($~K*P6H*Q^>{F$bEs_F3*se7!2u zUfO%3T;j$OedBEFT6r*WZ8{45;?T9CIaCj{6L^ad?I-3Rb{b1ulKN?+-L8L%3`u4_ zi}JfIQ{LsaKm4WJrB_FIgr?L!x=byZbByF~htMQvKv!U+6cq<-U8icyk`2cmb1Wx= zkZwDkW&EEgcTn6dfiB-jhpXHf94$I{ZOLC%JMPN#xNGe^QG> z>vOPZCMPmNIA7L!VTDAhJN%A7agw>jPBemZ)2Z@zZ~Lvp0W@aFFy;6Z64rsG`(Bc@ z?`O~Zxvb^h(td;~3F$;&_57(a9RDw?8vdyGJjz^&nWP_C+Gw^ZvJ_9A^&O0FpDb!v z&ehx1Vz1hARJuLViIfRc_z6OD2gv)nF&BuXJ<*d@p4e((SBrFTWy}%>aiCqYi{Ezw zC;C5tta8%Hh;s6w0(<*teUWM*UE_R(lF4K(BoCz|&skLOs?ZuCmPj_~O2}N=jFj;L zs;J1My7p*4nqeV&i&anS<z zqNlLiUF!us;r#KXGi!7x2n;_190GNK3BBkPY%+g4j*@o0db2^|ulU z1$<37zCk|apRcU^KfJvQcvR(`_&<}GNhUC1f+i3ZG)Pc%tVKgA=@6TQTu=!l1QHMl zwpEM4ZZVkwY)K@XL^+<0(yraQ-TtLRFBR8~)%R0Cv5 zfav@`-}lVqf_8VGr~CYQ9wz7Vp7;KK?-yxrJ4a%Cdjg2$sp4yx-|R!V=_(QCY@y6! zCwY6J(WD&hnle}>{nu&y`c<*bf2wI+Paop8tgYL}+%S)AD}Y`*?A@*q&(#4{1CRY= z@6J`JXd5%)yGwgg>Lz%cm7>;Em20!4meCw9@ixSQYlr=U@ho@mk`9@BpZ}b=Atuk* zCEuIRe8GE!*-wkSd38D)jSg-sj6wV=UXVp8#iJ*$ADI zRGR=jZLHrkc9$DDcd`W}9*mhsQ6&L?c@d9JKO+KgqkB{|Z@!Y2V7qX8yc+M%A9*Rg zSxj%Rmk)}AM{dqCYVsEKV@S&d2!O=B5fIc0xnsk4F;Ta|a|B)H??0CIv)fhkE5D%q zBAO5i?SD(&1AT<34~w;3lA<6Rj)-rDxM;%|NZq9}`W_iJ2_c&&nuy zjnLys{ZU;^Psj1vvSsMs7IM|8SRqLAMGh=w1T0h<)5{?VtEv%=&oc794{cE?v?ZQz zqqHTQXtKyDdo>!oaW^i5^npCi`|SAU*qr3M+%ORX=HGKqUc3b3Z43u@aKrOtE`K4< z`-zrQn;2ElCz>Om$aInJ-cTFXAnLdGS9^&)odu<~e*>cIgAxDR8`2bH^!}>Lzh~pe zbwnN9XiD{PwG|?)J81fkuE9%U3o4zORe`B-Il8#3aGn<+&2y}4cWLcdd<^d%-SDzr zoZn@f4mDQ_uMme4epeOZ{b(Yv%xdrR4c3XSHat6oJO4c#PCTjC2Uf=KvB%RoFCMBO z8coz&Ofa0n;Xzrf{D5Z{80zKz8Ey#tvcFn7NM~woORLN}>K-rOV0^ozK@{8l$!-~C zm6aN8J4;8{n^Q+nmy~2kezf34F~2g*lO>JnjqNpEE-8j53vv&nAI?WnrzCD3(C*2E zF$tGsF^1?!?9FOOfzZk>)>2a zY}g^48MMRYB7uqdQlNd)+Qpe(h8NP>MTF?*;c3xyXsz+}{Gg}ORTf|pB9Z(ks4 z&iJ5{t4GG1$Qa*^4|ozc2P9G_YD!;h)S-&uz)It*%H}&}dO7iFd*J3;XRT`~`T)ga zm82Sr)4*(dB?V>hVt#%?Ksf|o#o`2@v(I&PV%7oqgXJO zP$RvBooM`}8gWv%RP8~vGBM|Ah^7WlZbRy2XRt6W5mU>C)IfEp#Qyib&VxhbNP_bU zl|~nlZQc7fcdvpiH%<%*Vq2=Aw z8r(ga%!r7?TA7J8V(xMjs=}p*8cq-^-&@>}Dn_noaybD&OhoLMCOeIlX~zAYNIGpV zt&Um2V2Dv`1GeApKVA3X=w=fqUgKD;<96S2kM_+>90Z26a}MvrebiJHx-FwRv|za9 zP{_HRxiy@Bi=m`2`N?AH(Ba)GoVDS$AUb;b3V`~K$K}~LxE@?@QJPT#zykHhqv5?G zfvio8d<{uaX#MaYwsSzRsX%cFcsFb!7mV)Y*a6NGBR57DWUA#HvuT~Ri2B$oR&i8O zIP_!6kbo*iQqdtuu{!O?xKmp~O@M?#Miv|CL&SJP%1(@_+y!aDWd8z>3SLMqH4;lB zaNQxqFY;a!#~E_n<;QrtHeu`nnOI!p-j)`ePZ*K&DI3v|@L@NW?mcHHB~0qmt1MlEBv)@-)FH+^WK1wH$izv=X3+c7xau+k_t? zni%D}LicBc(wbOwb;o88_ka$?_Ft+uCC|;}bHtZpbk2lg|jKyHan=Aj1!Mg%yy#TGB1?R=>9) zRhTg2m;~q{yuwj#a7t=SjU*YryFvn~WFM+^6k;2J;pq^ek%^KvgzdnF3@AlaE`s=X zqlAJ9+;99wY-5;zSrfLE)1&eq2c|-;a!O+cOPo`})a z#xi(l<{ku_jACV!!MOyFmguuj3tYZ7wF? zSHT$5da{a*INFJW%n+7tB#O(F(Ce|55rD?siy7rq%*e%*{b=1=AWN;+O^g10^*>ov zvqltN#s)!Hj=?W*b{X50nACMT!Z=ojg%gluLPIg5bS63Ed`N^}H;;DVD`UIxI3R~z zj#iH@^m~6xB!gi`KmEEzAcjo9kiV?&!C$E$r%L|OH!|O^F;g5(l2d+e&aY+8H|C*Z zSK;w6M@*HVXM4-zi+ornUIkJfop_;n$4)%+{@uS~-u*}GujXWrnf%Il>$2{DY4U$m zv+A#!e46~P=f7%PFMjYpoqx&ppyt0J&0ZCpEoTNiN;th#^H-#x)m~~BzBG_4FVxd4 zKfvr-PHBR~$&?c&WglC|(=?tsf|Ev{Zfu9l6z}J8)V1PgM(Ojbg+5QSq*}O+sY*S+ z7PQbxgs3=~{*L7}K5{;R^uQb=-)*c&H8!Og>phW60n6lKJMH~pJK+RI52NhE!MgW= zR&fpDc>X}~;B>kQ?m)DUFbMDC@)mFT_!z=GHV(d*g3D9Qhkj^>T^rS`jrMPODioTG z;>cs4E5i42;l(V9piTOy4fskfut0j#SxNW1Q%qD|c+QoyMHDuuKgaQe-L7llpOmSX zYS6kLl?cS;C7vyLs$kH8xZuW7ArtLCQtbY@Q0Xx~QtJ!guE31e1_-ii95as{M>X?` zClvg?alUrCiq(Hl*kQMY7kE}7HVH3q->&}LA!aM#1x^9|;RP9YsJmq%NeM4lAsM_u z5f(oMbq1+kNOVW1QRvnS2!`*Gm`;U+3rIBz(+K2b6lO^1fWm1K0;w=lFUT|svj{P1 z6wcNQW*ddq=>^vrg>#4xX%x=Y3+5Vy^YnswM&W$DV7^h9uNUMSg++Qnkx{r%FIZ?4 zF47AY8HMF~LAg=5OfOg_@l{}?YF)R7nuh2w4Bo2Nsulu3=LQQF??DSuY7jtc5xXBZ9o(ng{-RN%T`+US_Qk8tzUpq0>bO*&g_rmB< zoL9^b7$kqnIJSAV@&<-axT4xD&V?Ledks}p8eRjYX$-}uHn9_x%bn0j&e+GZTGw*N z$J44!Hy_8p9A^~BmnhQIXRttHK4^{UGkr0zrTv*MG@oKIyE2xI=6Tcxyc&6wB=>W@1H&XYh_9! zvrwr9Z`Lxy!1*g_@gMk94PGLHfvpzjk9Jj2M-2ScSHG~ccdAyUv*S{~lM&+!i{CI( ze4Jm$Un-t3QhZcNsKn3IeuwNFW=`DCWzR53VsU*}A?`{!VM{QTMZ3SE&1}RYfpjz1WVJy;QcU=#aQDqR_W;Ep}GT^>B|a&pV-)$!MvvDd4t*BYT@Sup$wJ_p9DYJw9G_DNA7RAqIj#wkhKFm*!`h6u>p z@{Fn;;tnBIcJ`sLNIz`3Rqntn&|dIf0cXlDN0cR&w7HpVp76ihm_bG zcJg)a75O$JfjXO;sG>l)-Lv_d|7_Km{bp{ByYVu7LBoa{>SuBx0wnER{^pZN;QTf2 z&Hs_T+k1u0NTLC$Lezr=IFU#dA6aenevM~{Z|K`35l03_`^BBN8AHEltYijP(2aWY zqe>>;Q`TW%NH*LGVMYzNU^=GH-03wlqX-fAJ+~eC#%5d|F?Y3bam21{`Y@JgI_9Rsbb7 za9oI6cL?0ULTi&iFIc~%if}QMs$>%}Wxb5`_Zj<;*2#6a_$_1zwh@$!_BGb1YHx0< z02oTe* z^!?_tIL0a(S&$u1(vz`k5+kpMAXf&2zUr6I=^N&dM9nU=mpM9BTAl)-J5zz&FRlk+ zd5ez5NC!h}r&^hO<=8JWOHEjIN%Eo{P#5HRc|~3H8(NRL7%(*PbP%6uO(dI`>>Jt+ zb@7&=J*zH`8rsw9;x$8iN?jZB_1UhwerhNnU^g(EzZ@&XY$kRfs|Mj9=QpgHgW`;`n!pumM(bKmp-53 zkt#yY><*MmOddYCC4-v~)U7Yx20nZ(Np3W57dQXL0W zPpyE=64-jIC44MSb1Z!N_~e9^38iZVLc|T8H8pBmEAsc=*M&7Q{`D?;Zfq^*H{_W^ zlYd3@(yez=%NLm}h=Uu>Br0~d#3QH7K4q8pG10kKD#JWwc1Jk^aueVE-3@->i zFw%!11EtXi+{Q7uvL!%ix?v0+jvW5jNRhW8=c)yvw5=iMhQ<1P)Fs2ox4NzG^hH|< zb+K^@j#<9bA?Jb;lF93CI9RdxJ2QF`ES!jvS*pW0S~Vd@gSerGKe_erMH;$oIxr@-|Hb~X<^8zd9TAASWwI!cH9bGPw)L!z;4o0~aXw#`YHl1^l(S#}azvOgzDFur6$ z@zsl+^d+d@D&W|Zpv5DvT)bjxcMDHm(+iy+RRdP|A@#|>0oe$P4Pv!iga`mKfNW#~ z#FF-kyKVMTL8IR0CqXl9*Kq^!(l&>`M)%+WefnIk^qhJ8hF$adRcOkU&y|cm>?#_$ z66#qfg0M^IXL;-I@@~C_Y9Co1tq#r4UKh2?1nf6Y@l199J47_sQ{+P&FR7?az6`q- z#@Z3N^=C9_L@l~!YsNE9mho*IGbzpp>meYzg&^5!|ij`OiD_g>KDwYDv^#_c2TKqk+K6(o~)EHSOBSjVmrCw=IiLS1Z&ReZZG)HGLV)E9p zlWlbcH<>em`HFrPy7pSXT4+PgsuTglW$bMDpV9ecCfR7=!65;d( zTPAa`&zwr|Jxp+2YlMDn^$7U!+)UP^#qKS6a*{AtNYzU`!Nky`@`YZKiK@1HjlS3! zE=gm4ZQ+s(>(4anPnP^qq_8@VnXT?QFiL-b;DDr-1!Mq5%66(IR7$r$Tz`>cKSzRl z-#-6-@79Z0o9uSQ*vxa42t|j5STp&(g}K?1S1AOQ6&PNkgRFggqKqe+ZexSUnm18O z;-_Fxs=^RR_>kI6GCol)wB?ZOL*LDmO2T{%HCg{1wvV zsKo)WvRQbUW_G)z8}?}WBHo9VL>)bYM{AvHZF6jyGkYo`*s?{^a2Kd`rpTO?<6RO> z&!XrmHpERK&ph^B=HNkp%1@b^4O8rSGA&@Kvf=DMn$?&%3&A^nlVJK?HoPYLk2U5^ zvG=dO3VavCA*OX6))ogpZrN=(yhZ8;kDaDyYKAQ}m^au>>RwxLLepock!^Jek&IBu zXS+U)evM3!mz`<)z-DW=HFe9oHKeSpSw(uq_AW(396k;gv_D2^?Tt#v=eHuA7H*MW zwZ32`5d`cy0cqcAWBUxg0r1UP2rGOU1{=l0T4zGowVt<3JmAyALd%u#hh#Zg<}29Y z=of@?vUSUM$f?x*MZ^VmkgildG~Yf23~zU0{$$&Ny3-|*F59FnMdf2}>ur`GPTCM2 zAP@?+R$>0w7A+FHL(3D^A>oCELh&iO&s#)1mLXFU>1&=)dIVuykYVg)nfzm^!Rsw* zkjGg>*vKU2j0)8_b!?dl@iM`;vd{R#-r{}6Spl>Xd|zTL3d~-*^O=A7mwy?&d${7@ zN9Hb@9c!8Zrg1{FE1KQNk?DECqTCN;?`}CG(qj&)z(`U=kiSz4YjHV#o} z4E2_PhSt=C)vHXtu)sza`;`pb=J#Q&R8k1pS8DELs~s}`fr<>$-Usf*lJo`;;aPjo zsoj>ADq#~AxXG`89@3IL!Z>VR5GUrp`j?4$5l9Q|j@RDs1wwFZ(PA9RYj7yL=CW`& zJ{w(wN7r1|&boS^=|*9B!x;POKDU;aA)BX?&$z zHe^60Zoo=cT_R>`U3C+UeM(gwG$Z$m)7kET3&B{#)h1sP8F@SqQ_wA3G8U4>c2IDV z62xKe=WY2Ftq8m@j+pnqE*4SVmY?#dRjOn`9pbsBdUxX?Jmk+1p;IzkgLUx^Djp_m z-1HNileRv7vfIP1z zEUw6cGsZq$W7NB29jf$=BLc=YI|7g_c=UqIWu^HtW*cg6H&~mQZOw*`bq@xg?67q1 z=6L6F{>v?Gm))!!QOE0bMm}0UPKM2@3yfQ1bdBq0YY%{@Due@3qN1|qoGDcNa3Gk>%oOXLswq;Vo9HQv-#lWkXt)TJMH382}FeRCjS%f!Pa zEbGStnmiFg6)|BpyLDSHPl3O!Qj&wilXjkLk2x23o1fq=CM+U*D>pIWl=qq~fn0+5BPr#nQOk2{Rn=gZi8t3|A6mrHEMSs?j3j#8P8C z5`IZ6O;t58jIQef`qY@m7{ht>OrDCRBVjB_Pvnw0+K?C)9j(oLO}55?uuFz7(}HPB z_U;#Dk}Ok75v8g*YL#c!1W9-m=BFR$i~n|h(q(=+-gC7aYP<}Ced-{U{A5eoC;peG zx99siH~)vKor(Kjo}Y&z%#SpR1;@zzSOXayo<2k7r+6TCexW@&)$t!WOELV;c~;QZ z=n$5bjJT&bHG$=8dtg~_d^4J!22s=c8t}oddvtpKb2K$A$)Acsj3PKu&GAq;SKRdW`C{`ku5bO zey$m5Mdb3M4QP3<3gk2nh6|l+A6vN4ZT<1cHVk6?{w&J`%7t8XDT)irufo)Dp+#30 zT6A@xg^dd5Sl{N$pBPdK7cP>TAP>TYv=wJ2P;Os<4AXMD)bh3yZm_YnQIzx8SQ z<129byEmrbznpB?+vG{)O36bWxKdg1`c66ScalA@WI!);QYgosBjTf|tDH^E{VWXf zeD=S;roeqkh36XA`t{D#OVR`UhNUaEaDf`?7g%S%`YJt90H9^}3+qd4sXL$Krex*RGMyJan!QI}a=5n4PC2Gr~&P`JJE&Nbl@Yxxpo zfHhtA#=9&DHCzg(mjJnCrAb-l_}V?Nd<7G3EK%mq};nJGjv;&JcFTWzn2vnBy{T) zP_6`L{gN?VzDoAI$o_U4dk%lFIC-u{s_OcgzHn&%i$)J1@$@q>D5zRcg=PkaljlkV zhH*Pc`bP#&B=_j!P6qDxr;A>7Z71 zC`Nxo{~}Z&?ykmkArq^JWf)pW%4^7*ek?_MJ;XQjo%i+Vt4|oOcYHL_aVR!~kTWFP zny94E_5tZ5O-huH>@!>PO4Y`>5^;^uH46@rd{v5pCU`~hP!k;G*K8dhPwDs|fmF_` z`?b!@+Z+c-3{WT@A1Dc0Ow3?t#y z-y+mwSWF}(KsSuDVw;I`T3!+7oKg4ynw$SGJ%+FMg=63uWlx|)LFn${C`|SUJ_7MO zI$|g(k$3jUM0<+hB88g9AS6+E1s8$}jfTD$!V$Yf3*iKB$yHb_aP1f@K-Jfz2)4OK zRXC=u2>Idr;uN%nPvWwiF31oqoQdHu(vDJ7WD})?Ml=atu!JZ$GGBUWf4KBG1GMRD zPJ}9=;ZoQ(w)3G|jLw-ZSzJ>7syUq5DYMuYo5CJP+40z#>PmhbfXx_kggYW0hs@Q`>QkJJ8$6{%IAUv0xZIe`3?@uApYgWZ zZcl)0h{@>ZggYo7?b2aIyb%@YXNlrd%xP^6kP^UpW>xPR$czJb^M2e_{$GoM-=y7&C07Wl;mdLcd9*HsO z@eTTVLTT#2$N`?{*sU*rDn99Dk8^xJc5@myKEyWAgFE!qKb<#S4pHDrWA)QUc$RgB zo)yUEJKEHx4p3wY(@#mG;ptF8rlV`g*faFx$QcS74bQ1Fw14yrjh>z-_2O-gE{Lo43!g+#oEja2iF}!^u}gWo&B5$t@NQMiKb8XWL2~hErqf`Ix3B9n7`6$;5`^{H=i$pC?j+k|P zLTjR=H0YXH{MQ@`c5q$EnsRy45&COS^m6P;A!pyFj3cmVAN|!5L zhNHV&TI?=28(*W9h8@}~8F2u+W*{)hD5V?Q9K}DSGhz^mPfO_uHk81=A$1z`h8;k* zmR7nyB4TKksEw_nnS3FYA1H&XjfH7j-gRt2LX%-3{PdA0fsgM|`hM2;=B9H`@PW4( zlwoUamkQ*b3bICu2QL{%UrZc%5%`$PGadPXMD5*|^@VB8yB{D)*Mq_#Eli`)$Uhpz z&+U>98J8h*(q(tO<%10n2_9!5(r}LZ6TK&T&6-H7z z7%qNNb@5E#iulJVF z|3QM_38tN9G`&w^-YBQOkdyRNmu#A*Fd|W+xVb~~A8z_kUi;3+cYe_q?)>m5E>Sx_ z?~8HCi-@K#XK1mlUtI|u8Am4G=3~-F&ie+kTs_(QXVGb`evUl@_^YfoXZ=9|zvj0o z1t#H5@l$%;{GJ!_#)=piUH+WX@w^X8GJ zVt7i?KOSMnRDdAysS}PrE$}s?!#M5B5ozGzpAhhsR4Sb+qqSz*@Qp1bhG#^uN#*?-V%w<#+- zf5*l`e-{}D|DTDzNL-~3l4MWCnuM~VwLR=M-+uAjp&BC}{n55^Me5;6R&Ey1HVrES zJtJj6&|U*swmrrjP2$X#yJpziJS4jZll$V~*!j)%at2 zJx%X&JhnXGx<%XFU%;eZgXa&yw^H3&IMth)c#k*I<4r9|^-gwsQx{?mpl&n0lL^C` zx-c_#KS%4%=TRn)=BP)L7tYbz^ZjQxKkq-+aFMUy_qyRpM1z^UP}yFeiVs|dXslA> zUNP)#NoPA+r1%9c3D){sbEX0v;xfo`$?QSWs)ZG!BRN3~K3cTxc%^a2HnS=;cbh(4 zOdzX`#uG-jv0u-V-9Z`Uco+lUZE6)t`r2fJ5czfS0D-|3P2=kUlJD;LXo{YqD0&ij zpYC`MT9$cl6Mmyr?0|r|>7gp@7dk$2b@Wa)FDLbgdeNlRJfZ zhg<^bW(kNZN8D{)REQx_*|7Pdi!M~1WA3|WedU%%z>?|3U3V9rnnK?K{iis9W zgmeA>Ea6e3&8)e6g%fz4>34)xGgLdqS#a3LpaX zud&r%ko&kSbAmj*l&83U5m-t{n8e%?XRro}MVYDSiOR+yl(z}xz2+d(n7amT@(7QoyVygulJvCJQN{98qtZIC-tI}Zlma= zlfRzD{!w}J{-KS@+9Z3a*6oSBL0kUm0$(;&GaYH?(ZS(xNS|WQy z9{xF%37WP9ECQANf7)0fSj+-!RKBgG7=p7ecx0Wg5iVvpkZq((?{X*8A8#QNYw5N! zfWWSu@Y_I=rgtU$HbJ-nC}!kiQhE~4ZMWL9*2$C|yX`#|{GRP&PG&m~M89Ai&HqNf zFy?3?KmY&xOqRSh{!EH~;qzxw^b2Y?kq&5+(^%++sgSL{iGhZkm&f+`aBQDX7_-Og ztUd1YpKd%7S!7I?Gvt50VLtZRY--(kkUt(atFzGfp40#O=HAGRSfRm&shk6foa7Hh zPC84Z$l&JQP$_v9o$4HB?*@Q^dx-NeOz@KAn64UAMpV|AYNP!e-3B7wYLi1d{?RCX zRY8CiF*9HvRFVAM=&(Xx1|7b_Ocl3sijgB~dtW!A;UwQa{Z=OlL&^UA`yO!u*oVuF zw`iaLw$#nnLK*o`D?37-Tfo9jtWi)rr}3FPT=e#kLR!n-9*!>B=8Pfx3*GaSy}=2D zCLXOXO>3V>8*IK{l9HT9l6C^@Y~;yRosG4>hxP>+^yoqC@FW;T2_$aU7iBT=Sp+X_tlDmDKIqiu zAB1T1kWw@--MB*Q@c51rrLxSUlYhD1NgCSA(V~|+Be}+!OnKWSFI0*8D@gHpnL&kx z{$*Jin}2QfTnRsW#bVyqfmzp*OnldweQQ9??c(?!6`gr$s=voL;4M4oJ3tS~5gqfO zO`=Bn>z1B2)=8YR(5-e7OM3{nz9?&&=A4SfhSW&Zg+)mNQp_L7n%3wuiYPPDs3f~A zOsd>qTebj`Mn>$GZtCUER`sE6vGxho8OQiARL{i`6eN`w_O6P|{-7bl$6sixDd+uI`BUp(j~W5__Y+7O?u6w{$;(9Zfv{i4FhI zR{6V6DSXLTUwV?P*hq2;j}kT_f+X?^GBthdLcH1$aUqU1dJcaGFkW)_y;}zl0nU*} zO;!~6#Mft}?I7W=oCZ!#vU)gU{*DrawrPMwk=pL{?L#Uw|6ie~2uDQVn}FLYmi9#K zOYF0h1<64X(_fE_zy2D(vKg+Mk-dATIOq6N>o0bRMQ%Z!*b;C4MD5%zqoYgh-7fXL z7*VcIt-IF0-d#T{`_Rt&C>h5$;%njbpR7+)wG`$J@UF2}eO%K;K(sCa#%~(uDl0AP zu9If&2^C;bG)y;*Gw!miy5>#)8+O74wq2NZ={0G3O@>}GO|Qw~G>W$g{W9KA$)2;J z8jPw`i>30VTcqn zGJ{FjAN-C-{8{|(KvXfI7%`ua>_vg=FR)p#DVv4go&PjyzW-bGVLBfg7%ug0en;{m zcExmvY^dNjDvdSHor0?@?6u35pC~~AW*$I>4K|zEPq>t=woJB>nECmS)m=~co&=-^ zMhBXy(oRP|f&^jd_V|t=b2x1FybrUy(V4r^v%#Tn^xz)eg@WoV#vmJ0jcTV=Ek;$+ zWVc8heMcDE566FnQ=E~qmQBxkPOb7jpT0uW;`e8mexl+Bj6pGAch>@RFS0EWLpM55g9HRt)!USiKRyFoSEQCac zmZzK^yv<@wKZbvWqGvaT<~E_JyGvdPWx+#o855Z!v{MliO7vp9qc;rr-X^h|anwro zHC(=S3#AEa(QOGZ7b5wva;Zra?S%%pB%QxkMfUl-jl(RROUqHE(P{5i5rLrCfWGRB zrkB%te8i$qHBQ+Rn{H-I?hTii-x~gujHI>L0!nZt!fus#hV&fI4=nzI&v@f7T%2Y<(0mn>hkeb z3d4Otl}*&5V#hr{W+KF6upNGZC{6`Q;6AyGdwSS*}`gktE%iwIj>fVo)?L|9Wp9O4XKSGpL2tqQ5TEsD~&nS?GzPe*S? z?xYO~`lRebk0`h|_?7HKg~kw;2$Mp;l@G)i(nfAq$SLqGsdZ09Buw4m4_d{*lAV{O z%KliD6&jboItwW&!R&57{2n;C^oVgv*-{B8#zmZr@#fJjcA`k9h&F)sAc%_hY*Tk6 z6TWEP^c8auFHG2$E~c)J5H#SCuAhsF5kCajd3LXCY{V5y5d(^mZ0>X!U|?cQoR-g~ zBgo_tto%MbpmG8ztLK>VValkiVN{q_mvlJ<7Vr9NH!si55S>Ec+a zPZx*DuuJ@^ki*;B#NyDL^$vjgDSC~|Grx9kiA(;r$s=>)yBOGf6L8liVi%@twvi%i zcgMRfeY!ZX=_z6zV@{>ImiAq)e5@Obju~ATKuDepc2}3OBHblGnK|q*CuYCt?+Cku z$`peL#qMIIoxPg~Ic?=k%iw$7?Hz;1CiYaAf2-SVZO!YQsS;q#+l)5JX5N$XS+q@v zYJ}s__%#FJ}&Wc-= zVN#abD&;5;vn1<}-^UVp$8I0!ic3kT?17JJ)^yd*+xfl(#9Y*Ax78*SKC+LcBYfn` zVq&>VO@Qqg{+ZQ8bCgxzFWRLPv05G-l{H+O`6$Q9a+UaJDOF8=gH+!^1X*W(&x`%$ z^{;Xalnfz7Nf<$G#eLwrXvuM8idCfEjSCcYMI#w85#>0!qETXY^iF9L+-Q{aj}t$N zATdBpAhg4({*T-+BSulvfDa&%-QFf-DOTYdfrWj-`k?Qxs0wXU>Y3Ng+r{b>m2)?t zUi$QH+d&0i64LV)ieVyE*IeV|f01Fqth8-#~HdfXWAnL79kaV2KUlu!STnEF& zN4M}2S5M-Br=I==iGN-RkrB1H=j8*c#H%QBMM@PeZihJJ&w(dc|I@!PaC1C@18>G$ z3;gU7JyCQ+s@Wik<3O1zVwBdNN)W+z0_{m0tR^9}n>u8u+MQ0Do{GW=Owss(xeWqE z*8ELwTg8-x{kZdt1Az1tGc89t0HyRd0U82DCmG3$C`OX{v24 zUnyU}HbHg@73w+7bjiqfw+YfSjaLx5+;11NaqqT^`LMbcX8r`5yoYwp>!nhoeV--l1%RtpfP56Fu(I%uFE>CfDW@ zZn&wVnJQN3lS8*SH50!za{=jZfq+HYtotfyl9uJq+Ie``N7Dtv87Ude9h?41nJ6)0 zZd=BLv>jl}w!I=#)Xm~hL{5fzH9WKgKoJyt79?CIe3PRaac8wV^pFsqFA5TW9l|p$LOPt0LfWYx1(dZ*RU~q?h zBivQEUCxTe&tt?}5dLH067^;lcQAx#Jsh_&Ip#na^6!eZOEiOr!tHIfc~nrwLEgTpAX zz-cFK=djV~>&AAbl)2X$ra8QeFn~z&p?EXxOOQMdOfL1JwFjP7gdm==Na=opyknFsXryFhwtR`^$!c4sE6_v|`wCjEZhj6_Lbw z!#tmbLZEkD)20c4yD4h-Jvz%cb z!g-^aIzG|Yv(vr>vC)1cU5m(@+JPp+o_~+-tSUr0?TT{T9T;MS*NJVqi&e;h;ogyIkU@so`tcERk zk(MV&nkcnIf8@CGMg+Pn$a+veP%|(K#6e-#M3eb zkg1(_z$$o)4zKH6rmQLnEy`(X6~y8#avi5zV(Io~a8|3J86!m|($|61B-2(881w1} z*c>w&hV&Hme&48R=Yx}K6V~8Bx9F@SVQl)b-iIWwaTQ6OCbY`^LIS{irDB&{nvZ+})FRMlgK5kG z;7ud@F+n#=oQTBr;vs*}hO2a(AvX|y2sdMZaB-iby+A5QYN9Hyd%8DSY6l^idBoi2 zU90jev*M(?npsuAqH3+0jM#*;{Vl%Ti~+04a5@kmW>OzfS^n1cw|Q5{$UG!%+s7>tktr#eM#y zx=VdYNV3w{F=7g{v>Zw00^tDqBZVS%l``I~qA!l__sBlN^SM6W(2+urw8LzryGMB4gfz zg~+|_LS|IT3CT5{m~$h<&6|O5aqv?I7o^Fj!Rsm{CYaG3S}d{baGmJ!9b~^RWm<2v zAlTKI_~gzDri-c2Uh^AK&W$)yX3|1rm+AuKzfEvI8g|d%k?iQqZhL{XA;7Cvrxb9k zeB=$GQ-!oX&L_2m&kdCgo9FL`UM(K>yN&}hyj!siv+WeJtohBC6j`=kaw+VIh7*MZ zG4HRDs2CP&O~?xGwjWWReQP9=&~qb-SCuv9uDB=GsyN$yt7Qj)b&zsbnj*2O#(8p; z`p<3tNIktS{_#w+{zDNfSWa6A50)Wi7~`Pjl3kL>bitLkjO~>EH*{6OdN5>d(v62! znrB3=oFl@O>^Ey&3$mk?X76W&tWuA>rIx|6gFh+L-Kebg3Oev}f4E6p!4eMa!8 zHLFQf+&ftg;pLVG8(1ZJzdL$EwfU;D1C*^rdzPEF1Os2^5`oABR3+Q^i(lPykPIQu zP5z#GCCpfj)~uv6jCbLc5s9qP#98S%W+6@QS}!iNl;`Ujv~JqKfSl-Ds#aN zaSZw9U&4?J{BL|7LslFgck*vU8ZZV!zW*zR4*4uuNgf)9A@7&@SuJ>?Cg!x9p!)&Z z@nF0lP64IF9+vY-nr~#VrRHe>DJNwPX`h6rvLf-u&VE$jII#zC3bM94Drb9+Y?p{P z#+(Ik(|wMmRmfqrMVn}S8Lc7-#5zN!77FE@zS@LVZ5V>TSw2t@F78**^Ne7jj$J~N zw8;mtIuV~hX?dHE$N@YH`&-n|&q&X?a8`wE(K-^tNwTBO-@>=WrvN#=cbfoap$kQ=&%ZqQ1Ta}-FJZ@FW{-3N$pTS3?bc=LJU$0gL z)HtBVDe7m*TPhQ?aYjXRd%3r$tiOT;wdVcoTkA#89ZnL5QPQ@aDN!oHSUhE|Z_X%= zTRvO@Ay6&bxE+WPb%{jNyxfAR)|j>eqYA83jr zTQz~=T+l1t4>44C#612isBVAlL?K~E;uEYi|G83jgBplM%&ILRro3zkM)lp1QHcY| z$f(YYjLQ4aJ6!)2Bm41NJKoOu{%~*G@PRE1ov_zSEpv5sZCg+eKyhi zn3sNfo8PBXg1p6AzwtvvVvo)OKY+Wv&5!a(`^**i21q>cRSyI+eHd2OV~KT%}x zsATW?lwh>INc6#?2y|8R=18$EswUG`JF%wLyRy~}DsO35gg^yf2q7>@_2GnkiL(_) zgYM(NX`V+}BRINtQcdkeD{EbmSA+uac$)`g;6eciZ=)`RX%SMOS~C%ot?;(I08TXa zn2%8fr)%)tT!ka*F5c+QbqUU>L&=wYCbW=X0Y(^tNwu53+dm{kN@;&+?!Ph1wwB%C z>vHMdczpfHpM`M@Eg#4yMcPU;ks(5+4<3cCy^QtKK5(vZ^!E~|nz=m=>OPK8shrd% z=6d>L1dk8CUF#L<0DwV)=Kjd7LV}DP{#y)x7>R(;4$PWyviF>-Ownm0lXQSmM<_)I zsf%PC258k{7kYn-kRdo#Os|&$e9V_W5~lz;jSOa#7=UoDsE};lAX;}dCJKobSGcso z{OL)QUT=DvpJE!~dsgv>;$UVSDS@*8tK8x8W8+THS9-@m*$y3uyp@fdrNd%@qmT$7as*f;gqb> zqN!LOe?KzVO>va+tvH^qiL=6G3hPJuk0J9B zh|9=i*=zgbk5X2@6jEWpDHb<578Ryly6!Ay(i55`PI0b`kdxxBswLE9A;pZiX7?p{Zh*h~yI4o40ua`{|&WTl`kt#86=r z##{x5tzZE*zVRu?|Aft$Cmt2Au#+(JV*_iQc%G5JN~EPorM`;7JCFi3n;cq#6ah)v zFb~PFMR)6};f8(7`{`nd>S8@{UxQzRw{~>-i;o9$078rB!OhqqcFU1YLgNjYKbtRH z^uRS$cM?Q=zxglN)M)ptu=ReAuKEwx@8z9*!YT#G5KmaEh7*y?>{WM3{H+s~_V137 zDkx<q6lvk~k^#=g5s_xt+?z&r1qRN=aR5%bRbC~q(WK-)A=U=30;{V8`mPb zz|)_QkX#YVnG6yWYh=wOPQNmU@V0oEIjn0NhEdPpJs+uL+`aSU5KqDIppy-Gsd3KN zI5*&Kib`CJ%@bMsTF*+&Z8s8CXC(tM(ZS|AIvibE;|dh-0hhgI85Z+3<@TDjA?M`S z5dqv8$6nfopd>q*+jt)$(8JhTwA_aO#m6G!Bw zy)cuAF4M&b!FU~+3-OSrD zb2Fw)6e(c9EiP*gPK^ItUA_;I4pC$}vJy!51Le`K9rth!@Y3gN3I;C^IWHy3UScHO zf4+__@Py-!LjDAJ3?4j*ZiFf~a=KI#obZ3~Ge30*z|O~@K|Zjy8ac4c*6Ads6b zGvRHX#OKybtTy2h*|E9qI%jT1ormc4i~On-T8-6x)}_T)65xK150e(N<hBvX-#G%*djon083wX zq(K&F^hgz%#w5LpnEm4q^ECD~0%{Au4%J_(+DcNVIFJ$(vu6@@Tr+4cgWt)J{h|043IAS0{Iy>Z9@riKn#C)YV&D(Mb*S<->b6(um~j|GnpzIUe~k8k)jG?UySaH9Hu9Houbhz zJ|Xc;D)P~Zsl5xsk)H{mHVx4{l$|i^_bGk>l#H^g`F?0_Yt6jPcXLgNn9=~v)K({I zK65J{FrnU1v3hUD)^*z^R?PQ1{G=}zyz$s@Gt2s@6;dA62S z&Aqj(6>k4>1P4QPb5IHR%1lu!lnuzL>U;wipV}p)C)3&!okius#nc1ZcWuE z>5Bz4fKhIL9_U>GX~=TbJqlS++|RZIk+XLMTUI&_n7?^LFlFFkK#Mi#_!f`67;lPp z6n~{o@0(*!Zx^vR5~_ zO9BiDf^I!WE+Z4dF3F`JxG4KgUU(nxS`e9pnm~PK721+_pF&Juk}7BW&tsmDC$`JZ z0Olo1s2jWtDq(u|n+qa!n$y>zo%|)t0;vX zF3}N_ixBI1FPTHloAHTNw{=VsK&(K(iyK=Lz=X`HN4k@mJ16KF+gW9#t8xelggPmzg93)R@bJhxsrgzdy4D`H3XE9GK%E~uV`miYk zDK5*J$A6DLRfi&5mX*bSH~%yEKZpOb5g6+DfYC#JbJlh0<8tjv8_rv)JkOL%=;&Z$ ztEgypiRp>MC2FoVx9Flq$KK|YEhdKlTF0`cvnq60ztNqXglk;fcQ}xUaq5AHmmqk2 zYb$ZWKz?Wv=}@W)A1IP?ep|&840+ z|G@{>VtyliHFm1}16xw*qN6k;ml7MkqI}=Bc+{h5xh}cbFav$d=5+NY&-!GDzWYm^ z^-1^&o%Aj`Rp>w1_|Lf8T}SuRtnMc!Covo&{fRl)7Z+uv3EJ?VY`9cAcX>m)^gL9Q zwU&>Ic&9CKX5wZiybWF{-lBt|meSRyu;~a*&2`H2I=BKK0{qbcH^z;XlC`|`>{eSavo*j#j1)z_aC9*?l_9oBR7;bONi@Y{co@4?c zQ6`Y5B4swJkw{6a%qbx9tB#((BDF?qGqw0!oA~{r5ZI!gK^xOyKL2+Z1}w@dG7dP> zrD3e^dN!soqWro^*ooOv>ypIF0ljAKqO5s!sT-YQ>ci;VGP(%Ik|mZIaQBM4i(D`T zEh3pz5^T(TWe>Ec64K=$po8GHF+Orj@RF%$+$2Gf3Em1N0&Te^$QTIH}HwBcZ^pESN0P z8)RiM{qr_@q^EUR{-Ug`y2}|fUu^WKvWZ3~qTxgsfJMMMriSuqm$m21IAurjl+{UU zTH+L&Y_%T+t@UC{JE7DE0Ox zeL^JLf70ksFvEW`ID_4>$Qu&cQOlD}XY)QL9xu|qTedthtGMDnpWK{-xer9ptki3Y#W=kw;e7yKv-U1se(`XRNzU6YruLa`#4p1 zOD8g8Q+YGvfYG^##VzOUGVik;X?lu@p2X;W;krt}#0kksJ6~nH#zbI-SK_))z*Jk< zT-;i$u!)Kh@K_W946l(R(cr5wzQW`%9ruOU*Q%ynQn9#MgM|{r276++Za0@QG3Hg^ zVi3IY9_|5Bw3Sm-c{fHbxwm^8vtw)#Cj{%cVo~x5Vy=X9ZQJ-DFxfo)eI)l!G*H{y z?VL%{H=57q*f2_WNnTd&*4`?2DRO82;xR0C8|_Aq|2&dfQnM{NEZpcWVK)k68LRNw zED&0QghT}%yIuQwnoaw9sx9USL3I7s5lA7vjtdEIS=YVnWkKyPZduAP-zEqUT56l5 z8Kn6{GO+6lhD(gnVcij0HQPvP3d_j!1#dM)1K^X*Z(xhodkqi;cInKfD_@omeM^Sf zdwb18d@b^?2bV4Izunl2bgR*xF9r+E;<#Pw@b|CsE_%m*{=vp|;n~oR_o})Tr2)?b zM%!<;0JCF#ePJ3ayK6Ju#EBn?j_#biGjnvYcgX-`rEp^5P1cw<&9OI$rJ?6l@12vi z&e;f*2`};w^uJX`Vx-*3ucJdjZuH&2t6r6P>5rlt2kQ3xB{(Jth9VAcHR+5jlUeWV z4m0BipdD+mUzp9t*wsUaK<9b_6VQ+sS}Yl1%&QolwO1fTjcw+Q^k7>bzsgvWjPz6E z`Nk%(Q2Mqzm|afOn+sx92VLe~f^f!#!j&o~n!hVJ5k34~^Zvt#_`W8r>sMn&wSgO2 z<0iD?l_e~%>_=GMHnE5uF}4-|F3Y|)K8T>-NRi0D{=IcKs4%aN-Q=A-`GP3u*^ztd zl6T5U1qCJf_W)fAJGJ&C?f6jJ)3SB14YAMvzz=cPmy5{g+wl!}mw9~$jwJRsa?{)| zMO50!*0*TBO_Ht!E@>5)J((S7)6MGz@D+Er$usjIHm>=1Kag&y)`JtwWw@r8Poc#& z*SKX%stghh8F9_Iw|2_PmxearASm?u>0gNaPDvb23~7DWX?b&H)W{ydX4heng685+ zoEb&2a@-&{+lnX=c8NhbGiuXw^0|jAngW|-G^G085qqrSw96#OLuv$Rm;_!R4);5J zoXUTX@|N@|_eh`e7v@T!NzVGXb1gyvX2hX5^YL+R>-HHLfj!l0PBw zHH~E`>?2_xK&JkE)c4uv>zk(POWt{E{{GVtkJBidDZwnf4}ZvD>L&OJ4dH!QC@4Ru z-TUxCdFn>j@o-q49f3A^d&4}o>_IdLlH^16;M?>-P&vssI;oKeG#0f=>7#Xt#!(P@ zD(^k?3Ilf%;T;5GJT|rlpVY7iLz89Dd3z8d(l5#m)j4^#r?s3phK$Y)WL<|?rcG{* zu8Fi1xHPoDp-&gzO9I(KV$AU_;HPbq$Wp@-I|7-Z(j+}^j(R`Twv)3HNdZ;To4LC3 z3W%pfPyzAO>IddVUGwDc6DA0mFwr6t5~Hs9l$K3Yp{%#z z2=l}^oBbj&(#aR%l6LEo@KW~o2eYay6XyLKC&P_42d0bwCaTQFO9{gStr|g=;Ak)5 zdorrGi@dL=;z3XQkHch$ycxhYaQKtd*kP1B#IF6mUK-zA^dPY^fmJ(P`1aiq(W zD)Y15AZdF`yRi?|(K)r?Ft#pOh2nF};Z%ltD=CtwR!^5zvV@pjxzlB71Gk#*BQ2rK zG$Tc3hx2%oG1;N!qssg_byL}__%<@$FjCa170+(nx_mP@1r5|i7&EDR*=)h#V1jXq z)d*qbnPk383z4lxXXK%ZsNyjR5b)x|%%dVppoxdTtJmU86WuyYpK$32vNeX7yjI~z z3-qn>M}I*uw|`$FSu$64RT^(qR3J*wUU4or);ab2vYetCw!G@A2~y;9`%`3s>fEfe z(j=KTLD`9)C(U`Aza_v)yiNTs37imcnNREh8qQLgF8KsMN8$9c54E++8f+ChM{i06 z&l>Zz4?nxdC{4Jh!^D;aa_wK`rT4c<-d~jrfsUYU+v>$YBBq$#y!Z#`>Cgs6|z1ww`7ZmDVT%8ufZmUgVl^t7< z;M!7$&n3YH=+I7yo}$;0szrU!$g`n}>d?Z+F)5$+GLup~Bm(PsjcI?-#gRyo)qT66fDbw4?ben=z+89YNS+Ph6%uBkD<%YwuknrN0V zIPw6}>?#T4u=XfZP-|N&Nmb2FYm|cyzU4wpWWV`R8c%E8aVK-}E=O;@*L>v{AoG&p z1;)c7OGAUPVYczG5Zp0Bx&%U6IVK;D`Pqs(&LS`D!Qw4>K0Lu}fn{(h!hx&c4Cb@{ zhxJln8q~vlD=>pNUSk2xv4pv`waNRM-pS|@NQW)8p#N7wP!H0NpUZ>41SW9(WeIFR zU)&K&AgMP0qs)pTO@g_w!~Y*??*kuIb>{!iWD*h};Ra0ZO~RjF2!B?BvPvzh zHx8=-QV5tbzxQ+QOcMOl?f!ngUXqzR_nv#sbDr~@=RAKtkIX}Gl=D-_laP2lF9znz zm3_`l{2og=OF?w&~#Tf`)LrIfjqXfUU32mk!;6(mqAV}QGE zR61oE={pc`9O_jq75l!xo6~!D#Q8JvpFQ`2Q}mep^q@=`@fg+wos?})*abNaU5wB9=SRdIVXXTF zl+w^Y0KU1*ma;__T|(M>m!^V2Pz$^t>TUyyDw)-jo7t=Uxa-uttcj-Lu29T1X)#2G5pVT-nkh zvfw46Za$;`JC?jI#d(^aV%btCV~fS-eJcFo<1@R4YW=x{OzdYEoPvza&KJe zLI=74j`A7ss5lyLw>1I&B!dtACpy@1uFC71o#U&Zt&19mKUZl~1&K>0`EZPQ7?&>c zo!`MsdCc}WN=!Q_G1KM}3Eu+|vv@K`gH`|!-U;5iC_{i5rp<_rSpn5%Ij=7PH)NXo z%^Agw)}Aa|J1kuYhiJc@lc#!4IzwLlOKg!wd6*`ewf0gHstgp;@+solo67{?YXM=e z)%p|ROxDTEb`p1nm#2jnx4-bh3%uNC_4D!tk7l4fygZAGExQd4P; zYQ#C^Z?`@Mmo-_DrB~uiidJZr|)dIq>Dr+^K8}kD>CQ$Td3ey+J50Z zX?z|Y(N1xJbsF1?l8o&hA{WBx>xlvgC+87v+WjW;Oyz&$CL~bKdW71I+uMC1JiJqg z6r~HbCSG%T!RuC@to$eI{vwZ@vt4{G>-1nZs)N+WMLOtZniXm1#9fNBonRKnp5|*; zx2nt5hh7P&=nIAHTNM|>%Z{ouzE35O8S0bC-OuY@KB>b5e4qL`Q^;&JPVwm&80#Vv zG*;$zrR0RhFRxbpROHI}!P;(ivGws2RgKS2k{OD{XGpH7NnPPbJJ7jtX%l4lLz$l@ zs|}0@=BLwFN4kx#-8YukmXh=Hx=up z3iN;Tl*aQW@v6h7A85VS$CN)(Z5rVGGokT_>L|v{IDW(4tcgM%*X|hYCEYL zhkeZ0J}HTS1US>!?hPlemrPSyBFQ$=M$wvND*|^k>Bh+{ZLfTv6mw%cu@&TK$}k$N zN4mT;75ZKLMG<`VmCy8^w7VCj=(R_FLG36`Y)UUd>dq4NkiCLcX$M{d+QGHAl*{&7 ze83JIRTpc-go^sXdbb0uHDY|FpEY~fnkBfR0q_%IUl<8Ec`U_8`y#nx$;P^e_#o@Z zCzhWy7DL-C`H6at>ukIlWWUzQGA%t}2X+|SCnl**Imu9*fenA<0TtL0G>q-kP{y-b zx=WRwkn_wg4;Y!gfI!(y!2IAbtW+_J1zr<4n!pYfXySMS5=LN0r75d3m3l*eyi5$^ zLNzIIP)b2SA}4EAX;X=F&(^=hpf?W~Ryd8Oh|noLp?lV|{N2i?XgkAy%aK1vMox0H z5W;K`QV4;lib2622xP343^|F4WLNZPR&DYk#gnW*GV_Ep`c_C>#G)-TPlNlKJM-4=Q7bB~z&+$W3zIS$K2F^nXkZeT}z7#tDf zBpqkG@>sIHau-DIO;T^lYqGT^{oXT>E+YM^OJK>Z!6EiFFktjrw|~0d?)#;m2#9N~ z_b;C>kOdcHOAC_%9yqBAn2oI{DjP>JNwU~ls1R&@#7v%G0--#`hajC?1#2eIVj}Oh zLU_Y!6QZqbS0MBny11%Y+G<#@%T+kUI_PEpTj|)hStog;s6j%_;8o_^P_7plqGMQ< zgmw@gVy-;3^lJNBmaR%6q?G~>n)Hr-q?^+H1-mtwygr2k-v6^VSImFcqswaEFEyNvBqlfZZ4+#epl)?V2}0Nqt) zX}huZC5WSm_sc7Y=Tc66Ipszo_L2Wf4b5|kI9r$NuA~>WyUS%WQHNsw`14ixP8e?G@5^$*tcf zd^J!rl|&c`Q@IPBMIEH5nTSmDc#XS6kDHOidJ`ywEpj!nprZwePb^ylzg%sy8kivA zXWQZ7I0Ht&v*>P%6}3EYT5%>oU)C4Cz`88vMbBo#Ts9y zRKC(7{VEk_4{UmVqO8^iwo5jwXtt;++A74l{f_lvmkoEOYX0x&&HqG3c8lXgM_2@b z9jx^5da)y!f!7SH$Zb~ktna_dAk}1;RPO=1togjqNzD+N~E!v*8YXX09~v{n$q$E zF!*m|ap3Z&*TA3XY?K(!WTeQ2@e2umJ7u@sM}@TPo(!yi8RQwz0sR#y=^)_=1+JHv7;J|f)x3X zKjBFP%@+A+Ox2%l{V$=$W&`1Z434Gz9o8@BkhaC7p=#$?99v%gXooxi!Y9yRX^>mMOB*9pTK8>JH@uMVOQt3A*WDb+k$63ygfZ4J3q`P08pWMp5fzEi>?Hsvh zi#$S@2Sz77p1qWJ$#@QR0E?GlUaah2vjQE6GKQU%cPbY{@}P4D%YvA&RHPDB~5JTqrdeGHzeP7HOhJ-ezZQjA>$&J6AKTxH8^rI^rj5;_J)QDAZ_0 zm1y1|yxTcJPWGxGQ z_3_0h`;sW8R0lf720u*jEcA;dg`3SQemMU+hFKyh!sYB6=%XC@jE#NivS^~6)+cDc z4wyIUdWvASqQLv+byDmG%f2P-r`ol`0tEgLGshjegaMg3?$CcOxA+nhb+z6;Ecrb# zN7u=~ukJnYdShyRuYm)VUH=6GzgEwY0I9S`4R=&+BM~c-n@Vqef%Z5N0NRHL%Y+C= zFnkXorz}ncl6M-C$#q>jNyHHh#W+b?`X~)Dpif(=Ty9I3xqBP~M3?Vf-(^DWr3!#J zBQS5ZTzDH+&x1I+(o z2I$kn00Q%VzuhXa=&X0hsK@|?j#@fDo zrOIo!Wn*;BI#z`?_`L|DOHtXQ;p7c+GMMlX%Ugo;ujZJej#%%L2T&m^G*2~i#_V;# zWU+aTS0=lM%-fR%*`{mFMfbQmPM$yo!G1wP8#^j)n}xFTey)`iY)9@f6>ON-YFLR< z#g!bl4S47CVkvv*sM?>OGhU=^L5BRv&soPBwDo6Ws{2L%+qOW?4h=%PZkv{|?ircA z{m%4%rtKC}L!?*!om*nJs!G>dP?spBCa}6vGFOe>fkX1h$?Aqsss7b?so5UALt9*~ z9Q`dK66yPST;n_CjHER200d2WR;Vf`(}mSVNkR8m=8~2jMc<|Juos;#6czPf#Y}Kl zSGY_s2^&P@;CdVn_Az8{Ogx9!3GuBGp zw>vz;S}VWi%ogjt)EJY)Uu%4r$rjcZccg*Sp*ifXm|jST7y z6W05VAkjn%dqS>br8{@wxE*RoEi$$jvS?2l+ezP9D~X%8x`mRBwK7~&*UzhZEI#Z8 z88#SaN562`cPEB@RE9l3j3~uNKR0Z$o%FDees0+AI%SIc+he=OtU@QyoXxk4wGYUM zrKc^TUTRBe9d<~d<=c(wF`69IOXI}M8XYV&_yy|*8BI>%AP&kR!d+&$R`o|(waHmm zX}Q>ozx5pNcmB_Fz4&`koWH;KSNS{exAXUvtlfKp6a3s?8!O#I*D=|c$dUZ(@*=!J zj#CiaM2uMj!KT2%do7B)1dZeKl@-D+q4A3=a_30pc(KKFNJO5y+2x9i*SyrTOipz# z6JP03yR?-$8|&q0L~Wcy#^e^QjBAq>JaocL5qFZY_BV1v%3@IfEU~tzF?!83!918H z60Eacg--QeG#IK+yLalP(_$w-C7N;Ql=8ClxwGeB$tK1E+wO5sxF(%u>26C!y)kg`3()l18$0Qtk&P zJG5koNMN6mvycBw;`9Um$pNU#*Q^3Z<@7@?^Z_v%Na`}{4hKD`+w)qD?Xp$E%Rb6% zFgAqGdP2HACfG%j5B03Uzn5!z4H{OpkkS=DiFKGD=3vW}J@ujcFdi8%?N_?yp*?tw z8UpJtRFe~i0rr{x#w+nPIQcVjr+WcjFQgjv8B!VRbk;ElQc$eLSX(9pBP)Ggs|p<@ zZ;DOR*uIyYYhLSJ*d;dV-k*it+Vb3>C<{uniFL6 z3}&!Q)eZK%qit{E_|<0-jL({X4&hR}1oz~Djg-dT!nUGDzs}AwRc|VFE zX(w1e_gg6gOXhQ|L}}2Gj@bCYhi_FjyXo|sXU=Ht)h>F%OwcEMD>%* z-P^Ui72g2BU~4{oexxrmG)xguuJ+IDZU8>(4Dz|NdSKmpd;K&!Jr*p7gyc6=K&mEm?_g7hbt zq*Bp$Es602HGIQ=@RwV@YOU-f0f$Yy%z5^gv^qe`V4~NEv?AqiezH}c9v!OpwJSF@ z6gT&jq~>r)g0JVDLd_hH>cAOd-EFe+-4l~|EEcLJ&VlLwDk_e9295b&6$w8R4kK-vsR44VwUI$HY+OwE#?pb@P8Zlu-x(%a z)a+r%7H8DK%dxf;J~63jraR>lcJk^=!Yc3w!Ax`W(ix# z&t@`2z;2!A?}bFVNRPk<3FIG~C@ksZ>GovXX{XWrsc`es%r=_@O2KRdOyt-sr&UJX z&c53gRzJJHz$Mo4k@40%vx%Tq)&5={uWt1+e3T?;LZDRLj& z=^-9`i`-NrO|e@|jck!8^J3ahPZlEi7`hLkjCdc6brO9>z=`}Qls_iq%aDT*alcvN z@qML|cjuzUX%jpgVwT*Z3z9n<*GXmp)eoFIR`aQ!uK`593uh{(5lKoy9v_L(&7z>E zuA?*)T;<52HZ!uMC}G}d{G55G5bG}06y`vwA+a&Chd2k&WadyQgU|K^-K8-ix_Cn- zIXA=r_K?LIp~q$E<4>$?h7%+#N{?CsEd{kT+Lsu&=zjg6z;a6YIX6e8MvNhXw?Oa$ zfc#pUD%a0i+QjA&YKh?u2WOp-Cr5m#aioUu_^(_^A-_wZg;s(>BOezE-8v9643Y;nf+IZ2o>>M5O#KFNvtMQpO&|tHdDkfQ8~~|*$9_Z^#vER#QEiEcZv4M*b_2sahni<3MY}VcX!L! zx%dXLh7dL*lChP@>;6O{m>Ig|EHgv5oG$2KPLZ^X->zO_<3X;HG7H+ma@ssr^}Fb@ zxR8yAkUff!{ec|o_DN)Q$Ax#q&o4e=oc!qBOw8g~G^=46TU$EXb8gvi*7 zyhfhs^j+k2;_h#xF)Qi~;W9mK298$#v&dL5^5%8@)h$iPry6|+yXCADUb_$Jin#>K zH1VDH{8~>WdtLR-T+a`jB1v@R0g|bK2z5ngMQU3bKlLaMAYq}+U6hnSik;I)=er)y zqV}wslT63z@qIkON$Ly*!Ay1V)_0sIk)kyJyLSlZBmRi({R1T+M#k@s#ILkC+oge~ zL<3$=D1ykJ#e+RBm6+?(qs4^nn@x$nDZ|H8i~io>AV$nLFN+}K3#kT;{29mpBNw{K zrjpzs#=w6NW}s51t`f;lStrF3aE_k`Dat5_`bGLgFV!GJvmt&>8X!gTUc^tcGvn`Q zh5K|WAy^mCcc1mgE+TS~eEvxz3vDlX5QFSF$+~=`JtxhclWxz+wC7}zeJ#ROUPv)z zB_fHg*GOO(l}`Hu?)8N7uN?k;T0+Cqz`NGv_Jx!)&R;wIxV+ zBqiH;+`KH66Qp3*?cww%Y;B*6_OY|YmTYB+%{b<|uYlqyyf+hz==d+}#^nUEjH{)SV zf0hq7mY0=Pc*z&`!Y)&@}SuAb$p5A|2@q}4h-+%Od^k4mqu3Z;ut6-ukcV| zH}tF67!g{!5SdeglCH(J&`#(`L&Hg*p0QI}b)J3#UR1-*Z+b33oOa^&}K{7Y;GS=l35H1kAf(b2P@sifOE z@^Xo^eVLc`4pC)4P1i%>Ek_uPZn3$%Oqe?LJ0VUmvx7F6a)au1TVfW1in<7zj2{GwKKZ>e4Q6il0dq@bD_QLQgorJ z+gVylfzv~WoMDljd3k{JQh9w?B=S+xutUC<9fkqX_6_5hpNy8f&-h&=(k8V7C=P$Q zj6C-K#+#Eb`C36a3jNvGe#F>*0U)I2g}ys4`Ohx2r}LJoOQ%hIR}iCbOPccS?1Z^T^V%=CP&2i*%!A1IJoQ$`B+7LIV15!!ljvW(H~k#cP^L0~tM| zz&x_#0Ifzo?jOfq)oL&jnn$$U@`hl!>scv0gBTYR1v-7jd?WJ21b+ zm|G`L6zM1aNfvCj1kEmLn3g{nYn&}th;eEFwg)V2TMt1c4^;OK#D&!9PemcHrwkP2 zym0aj>_pfG0PUHS?7a1V5DEvKH`j}7m`49O(@1jM&50D)uX3VtPV)1^#qFZ_d4DFD zJ^6w5mFaPuo@WK8N07TN7}eiLvzCq7Ri(3-Q>kc$`Xo^Q##4WiewL;~YIzlr)Iw@E z71!MOE0Pq9wQtBRk}Vy_g?gq|^_^(8KTh;i*X=gt9PnkO5%O>m)$!|0iK6b=#iZa; z&Z1HjW3V;h83d`PMkZ)W8X}JKWj`lN6q^CO8c*}Xdu1Hzsx=XbZg;-N0nVE6L#PP_ zG!O3x)Mzi9`m<`$S8C*568X2tUok0>BN`vzk4MS)#fJniik=`I zP4>E3LFS~)$`o@_TIEUt0UH;!14T9}yv%Fsm-@8g4qlL0Zke;w&dXw|?nj+mbscUv z;JuQ~ah2B)O)@*zS*(AvCyi3GGwti5@8Nfw*Xgf!`wtcq^XmidYW_r*(7H-2?yzcI zu9k8O{aoxF=W8q!>3*n-2&ocX!M$L2lL5vhcw#X+ptFw!HBz|3Mi5r#v42!dP3vJyE zI~~1rT(WZ$aqUzzl@N6&YBaiy@FvKt>;AaF_6()oEwnc~t#AMqq zWw~GuS(-~|3BeiCkv4G#5YI;rtY4g0wYel1Oif$*bt{tVBO{pl-57`d{A2h_zXGO6 z<96UBqh%x(Ny|$I#ruglRys)!!PYWUt8y_{4ekxBb(6(Xa39i*+0)Stg4y<%CTXWI zQ}Jf;1^5!mNX>jW~P$!M50CY}n3XxFz`2y#m3+!q|<1{$xF$qG5FS4gUl;OS0Z zyS+5m9wXy(r^t4>WGopUlK5w=)6ohPN_WrQ7$oG}edW^oqJ}RNc5!R2?6NIH7BxHD z++*9i|B`_=4{i9H+V-`ZV=J56%3*x=UE$(v8GxymMev8z z09xz?bIq6Ha&Z?JXlk7J9CVJfQ}mC}tqEMqWHZ0=D*z}uW%`Qkrclq|@FUGd|5F@5 zjs7~I;0SUfe6rVDLO*A_Mwk!cb}_e_M&WQ)ePv|M*4QDvO{Kkb<` z1U4tnmE?W2gElIz_3p4B1X^0RXJ#Vl;i-5mB&A%>nPY$Om)OvpPQDM#>C*p7XQ0ac z0JO>)nVuOMVy-+Lyzcx|O2>b@=Al`1vucn%br4D_pQ9u74>_i>WB~OP&8g{2bX`R- zD-9Urpi_Y^2x0*}yG##7t`i&OQA-kxAQ0kzeX{D{Fnd6_jQGgT3rWHZm@o)eEp>nr z&5-_r#<*zjv@M#BGF57tH+hXXtlw*ULAYdoXGNxuBJ-!_;2<&IHP-!@s~TC`#jv6aGwS*?-Ay`Sm)_yV4Vqiy|;+a(Vxy{=sG&XY(Pl<6Xi`h_*WpZ8JaK4^xdYeq`emdz|m)a$bf`o9GkfmMz zS($;si9NziYw8QD{1?MkH{e-3KUrcfzk z{r$_R?I@1EgZRC!j5NE|cx9=)^*ob?0%#w_C2AEl_|zc*fLx0C-~tZnaA{z3Fz-XH4F`86G4UPPCT z`Bt8U8f`i>56~`4?WMy?a*+1!Kz1F{(?@W_T#J>bkNq$E>=wXoCUueS@^ zi<`T#G!S0tR@h@1iq`XUWV=C**V~=t=B&YtJ zV7@diO*a;{ODcGDB#(ZD>R@HgyG;m-_^)&;egicm8>L33M1an#8|)Fc^qSMpaHS?~ z6gHkeAog$+)v7b)Y$)3XGrWoR=861~`l9Wj3|8p}3+Y0&TvHih+k5yeIndafpMhQM z@QeK0Sbds*Pmm^SZ<@k=;k9zqv8&Vg%rPzeD);Nu1T#epfW`(<@!~nrM)fAXD4iLD z_DcI!V^_t4cwl#rlUFu7SM9-Y12T8x(yT47C*abjL zyKb#Qyx%AH(jzsv7Ga6Umq@mQK6+1TUkU zx+=0r9#Fb(c37xMyvanp4aR%6sf(VmB}z?cXYLYO(zhvn z-F+}o;ZYFYsd_&t*<6)b88TO;RV{W~(#_Mxs4o|N*j=dpO|Jk6mwp{|J`VA&FBO&C zFTgfFtXP_Yl33Sh_sK6yt4zsXmANDZB^;#LX6IN~$gMPi<)rqH45v+E?d)n9E*2*} zNicG;`n@K`Uwh~BWOpJ2tK<^dC_ZhXPpAz;L6=AzmpE6%R&6b7Nw)8yueKSc~{BxhG7+0|KGnr(-Z z<-XmLZ)Ar{Scmh6scyW_D4bY0b!X0gz#{=vw9H!hAX|c zhPJQX%gG}w2S6~9>}~DRO7(cYD!phcGVE%MyIjkZr>gIh&zp1kcaA-~)1KXB4+>9A z7kgnlR!)2KbGjD?^uJB|U*Sf3^B(7-{<oearkO- z`q2{W=o5R>N!|+T--F@b-6sq9QuwY`r-gl1l{FD9N-_6jdw!ZdzssJVWzTQ7$^V`| z*q%Sgo}cc#K$~_UA+>^Y15n^Z0SYWUU>81b7yimFJnEJdKpR;88<#xRZeb4(84m(W zQDcv9Cu<)^}7S=T{S1wfBG|L}SVPWHva=VZ7F9O%moZx7=>~s-Mp<|1qf60r&Ori{2Fh!H}BB@cF4cs7WsGg%ly0U zT4UYgDHx5yn@00Kdv_84&YTeri(SpG4sr`$^i!MV5?|bgj=I0RCM|82M`w_wv00{# z^2?iR`RlxMK}KrtmJzFMy1{L&{7@BAoRbRH?F*Kvaw^+LoE&1;&4$nvY!-djywC0L z+2s`NKJ+MteF%q|S%g{V=0kv%x zUyN#SBI*|JL8oS1*Uc*=FT4Z`WOO`7wYOtH9ab-1Eeo(!4)%O77bSMp6 zHP_lL6W|H<$5drk3$dd&sj$2^@9-?yw_1189sPsS-EnUMaCMVBh&rREsanrmwe-{8 zCNmUGcOPJF?)gnPl!dgo5 zCtZKrBy!ZL5O&@qzbk!Rg){kVZ|V`oc355!y-Ml7O8=s?m|lc8Ni&>X{VQJT-Fk|Z z7pJjNE#{HfHX%UuVf9w%uGlsa?J6wd(s}Y(KDNuoBPS)3mKT|K6moV2)am^jdiF zQLC}t=DY8#Z$;7$wh&h~s<6<=J1uEP^lNbl5dCOO*Eq0)UK9qIL)I19{?0{0SyfnO z%Ebn$t3~t`8w}z4qt;DV86W88xQpr?-fkCq5LT zT2$${Fs69}TYDYh+0gA#70MXEFVRH7TM4$)h%s)7#Q;y*hq(jVn%E6>@L9Sq`n zHIdrmXlSzR?`WsANE&Ole>=ab@F{LXZKxK(30sJOo}@O(!%8#bOk3Zg4uOQ^6iDeH zeUH6O-=c@&ZVF0EV7419%4@5@#IbfiLn~xW2XED<1f>rZto_0H`AbttX#$P^&+bWs zi>WHV?cbzu)#bKd^GB;B!~EKSW0> zW8J>cx31K_dkh(_!2Qfq2b7io?u6Jn!^d6iuDYePU~p9_mlfI`l%8vUnY(8t+zl;hp3xV!2#HYDwVvO3{yVRmDR>x!z5J^tI? zBXNICj7N?)IGk`1wrCfj-k^Qjix_tok~nj#t8+T-YfuMfO7qCK6L zUz+SYM}c^3`=am1_X^N<{1N+(iS9dXn$pTEh$2#_0REd_L0g)TF3%CfA#TQN(9fMxXP$hgXvs(o%=p#!Ow)drN6F%%sE4U%b)+l zP`_DVwl+H}C^^-mYt>#sD0jb0(`prVcjR7TTRbjQn=pzyDl z$o}10@g4J^eBP#2-i#m0XML3PZ<;8R{ks$i@`>w)E>P|-<;w3fXHk4-t3EKdXz!l8IV@}N^GI?rRRff7YZ?C__Of{w+q7Klt z{&EDR){-}BE&0gfXvqUqn!iXqJx$J^_-;0aK4#;%O0NzM`h@aKoF;%c=hg1PbUVHk zi!vsAGTHI;%lX4xsM}6-3yLcfYHyPf5Jrwbyi>uo+S_<>Jk zNR^d!wV|SMDNE@>a3ZP4Q_W0Ro@s!cH66;x%;L(`U@c`7V?R*}TfdyQbu$r}HD zTxZ%l3EeWhY+Sw(yc4^gI=5tsROTzK_)CnxitykAEKd*dps?>G<~}q3j;4cb@a@uJ`UK=xJ{t|y2$KqH^l+j>>m z8%Hr-9U3@6B9K-%JeGI|Wkj?Y0SMdrk}_u%`%L0IxOtiI%;wel-zWLEvHEHLWr{Ee zuHe(g&Fl2P)%*+YalF^pg{$R3B4(VN2U*S_p6lTR2lV{VL}Y}jZkOA%mZrm}?3|JC zwi|Vbg}~OoyP{j|kO+?OMzIyRqI9>+sU4ms)Ej5-7WNjWh0dI)$NP+D&uz(e;qhJ~m0+>^Rh??q;Z8dw z{)w2UCZfH1$2_^AN(BVx-fZoU>3}9xk2@+6&!m@lcSuvgo#wI1x0UXQ(w)-7%3qAZ zRBWXAi_?ttPs)dFGSH=HUqY?CcOKRtyD375$x06!pzL9HxG=W*9@nx&l|-Lf_A6V{ ziCc~+*Wg4FMu}6$IoKsUE^N*?Kwnfh(0qKRjOzb_E^#(6*0u7bZ72VT9MzMuBa^Me zeNXh?IDF-tM)+{}l6kL4(n!Ly|5nC9CWq5#Ty4r_pjO>Dd$Y_A3(}Rpc+<4-65GIP z2ol~lo1g7%GLf@Ds=j6KU*xY?)Z{tG%Xg`8GZD=`Uq2cAw%oUIpHiI=Ufi`{e%}9ckMsLaJf6MvIyh(9JiiLv-PQO3&2EqdDdPtJTuy6FJMbgcPAnqa%uH!R<|;2u{v%~z9h zx4cMW{I$IRy6FQr(KU{#U$Dej($2$6VFyCis2&9zG`oVvOS}{B*=z|+Y%!+e zJtZH!6?<|DagR~bpB$aOsO?ZVzQ~`-JMS(>J9J8~NZ03?A2?mvj|#3yMzy$fa5)nI zy29EU%P&3=3b=`APTLaRUqTSUc$QN5j&wUsCv&(K_$0eB+4;w*P!arqea?HrEP)ex z0Cb-Q5%^6sAZy}Rj9235c1VNLt4@W@w=|2X5klfgt+*GMR)@n-Te?Py&#TU`j3 zwnjdXB&%@p0GyMz`k??t{51Hty`Z$P~RgR{<&~YocPnw69;@il0|A@MnPlz(&zP0C6`$!vZz;m53IUsxW6r z1vTEh3sligj&u)PS!7+K8kY2Zy`F=UG3^!)yEGQLzlf&;5aqDXCLeF|84_lW9RbEv_Ti&Jjg{P03PoyDz~g4;PzuZjrJT9SP}0)C`^%N@~I#C28F9tDtsu-04b z)O(^s<7z#^ui5$N)>sT6TQ3oygeEoEsnH~Rtc*>Q2Si`3^1yV#?>J@mV$233HUPke zPHhJF&W%a9G4ANU-gWeUQA9#KFpQQ6hCs~5+u6s85|#pvvT$4?fM_@lAW11ZfpTJr zk%3Sml@D5tvAvum(z>324Y2zsN$5naTAJ)@j{w{fa>DbaX1DJ+(LBVQyLqOGL?*<_ zX%d-2i9{wTZ>w{ej+4to*meg&4!29l#jVn>|8F4|r;%ck8y<3Wno}2=)IYTm^C=)Q z1RoLMaZ!?(It^>JTqKU7P9iEKl~o<@9Z|7?!IV2Mvh+yWbqW31h>8oJBQ>v;hzio6 zF2^G(NMP>pT_&P}lVw1sLH(TWnZ+k7En;`1vjQ^E19ZYl@XF}-OGxd!6UN##d`m1; z>-5AjiG{Btz#qT`lG%V)0?%z zuYC~Bn*fgE#LyVqXI(j=K5-T639Vv6@%M!wB)|n=RcJUh(zoc*cD)@rYDj+Is1COS z?gcRwp4CodVnr5+RfXf(0V{68Fg9D}^^^;7yIn$ofVQ1O{1d@C2P9ZWRweWhju3=f zP+Xyxx+j^i7!OQQCv(+G+2c?BE8B_iv})VQW6P#QE2zazQh4;5GAE^rxA%#r&2l~! z}&U}AQdCXHfz+^`4;j@Ped$DE@fO&Wdg0rUrkp7ntcLZ0c6 zjN~o?$0Q?J_f=zDl9miQOVgM1yI6Xw`#t%8-EYCNt524$x0144OjHe^yvHS_neDX8 zdgP>6)f?5)d5yCt(Ti;$jCok2dR5*eJ)hMTz7xJ@)(+r0e4Mk1I}vW+6jf^_mAesG z1z-({Y%yPd>`pSJ0^ zPY8TZ4}qJ6z}3PX5w%ZN=t&!7x}KP)Jv!#8c9zpe`jVLR&#utVhi3r~*gNKFkB)gd zsbij4b7V>q_4ISI7ziDLY!6hfksh<+-1xU{gzZ!g>T~7A5{D%ShXDT}Ep@nmX=__p zSdt9Wz)_=Gj$h{s!Il}8IKd|5^e3t6nDt?Iz^RU**efl7(@;aLV71&9~yc`6|NC?U2>b9v=ORFX_`{dSrb{Z|)&vHNMg5oJ`aJ zAb~m;qNk)AZ#Jo8K60{PTzNYIlPE3bn5WS|Ls{WcN;h;mt5e_(ewdmmx~#$GJcNzC ztlfG%-4p812`ts|Gk|DXY-y(R2D3%;m+Z0jf^>OD%Co-q=uk^cFqCxj7jI$ClZ!WDd` zp@9zcXiS{M?#(-8URW}N*sKw1pxQ6mV=UC+zrNwMSplItS|cVkpHfJ6!e_$`kg#-B%YbJ>}EDAwQO_ zg~(GEEwH$&FuJFQ0$HMdsXBqeK!_+%PYA~gPF8oOg;yeZ)2+Wt20gPYn57;aFAlHe z%^}8R-jb^DN7dAg!nHFBA zU;J47#WJ`$o!aH*{eCHr)ymXB?Or_ANqG=wua)F{}Yg z$rR}j43!trO-!HbbrXRKWVuf!$>Jdpk z%;7QCEiz*v6BrJhA_rA~bkM+@s=G)ImP}xT0H8Ui^baLY#tx3Ru_S7x9Nzi#&ZNu& zXIQSJ-p0TDv6NuX?8Ip!)w%w#mM=e_1>KIYeWi-hkt6xT{tMwHz{q2|MoZ??-Qh@-#2j`O4BOr!QU7qrt`_hS5Y$;-bsbe4mmtq_fnfPT?dz zwa89#on=~9_E{v3$?II+6;un?>XM7t4W+w!EetU~&G(*O`TP3}`2O)3ox;pCUoxF_aA>B@$bAD=vH`phfeh6fy#z2SIZ79`StO_|Lip^l6im=+h&JIhOW}^v;^)&w9 zj$KR6Sx5vD)OC(-pmU;BSc|5+N9+(ez@v+V{%BHx(?ve9gqw$g3v_$_R{wkEJlf*_ z?Ld{Cu6}2kp>m`lY2{AjT)drmrx)6Ti^6lf=G#@*seR$`v;F(Aq#bHI_tMpS7oK}5 zK9YUm1+mEc{e5o>-w@Vj-<27>O_&Dufr+lzIQ|B{5$1L`4(qf=*p!_Evya$(&|1}9 z9USSg!^rOK+I|j+s`6#q$bX1JDBH*&*+!-d!}aVVSy${Mr?u|bp?4e-rjqRiS-d3G z*WR`wAwm+0h<1A5PI`cFY&%=lTshFHVy9V=HpPQ$QCBh|4oa;^8y9{w3$fQ(Q2GJ|OAxT1ir^SLjH3;XA+ix=zBpW@o#YgonoK5U;to3@hfUPgH+((Z3RC z$?(79Sm2d}3(vN%kWSh>d|(wwsuB$-A;&esNkbWoU6zG_^4x`D`AmxC1K* z5W2xkGe_K4cpHoxqFXogTIKSR8*!KA$c*IwF9{x9vi1=3HB?_-AqoFGe5Qpsu3*l%NBW}t@j8D&r5pz%+DvVHetZUBRt@KCVPpGf0KZFjb=J{>q z197zE)$-0W_|=@XKLa$SB>|d}c9RQc5GH6**=6+-9abV&1gIFa%|DDdg{05udt%?Oxd`gCt z#mv{|vEVJRuIy*{qKQ(TGUn+3FK&o@oJJl~qeEd8l)*4kmDu?{;{5rZXvgx8im zu6BX3DWW3XHpKIk{DuZp|4!m0JtIvuxdU>ZgLC#$%2h%~&_-StXPk4Ky+<78p&@HN zl|(aR-9PYlS08&_E;!ru9p?+PCWfl`*BdNh3vn59!t7ZPs;P3YDoX>8VIT(1$9M_j zE3@v(ni!o7o)&hh?k<>@jDllMmU~Oyn!B=A^R8$PkKwkL$8I3AdtL4Flo5~f-D;X> z7iN)P-8PSJkV@=SqClW~Xq3i?7_hOX)&>`dO*QBvN0kq&RY_X#`h4w*FsAB1`PtG_ zqd@Teof}O@6jc~I?vRSrB#)~eU z1Ng|`k{MK!w=?dB3DprhqlMo9$Kf_oere0rm|}K@0I1m+f~)4Px_E7vW_ogq*BLd1 zV%lW7YrL2;XV}9`>Otqbc@%`)h)~R{-BL?iTV9hFzs4tLhyle%JkLk6Oa<@FW9JAY zqO+NmxMeY@Jv*PJ4@|=bZ_NsRutrExK2K~^EL*CC$Ff)O@4tJU^3uP=oGd(&d581% z7EE#u5}554`J=ELUN@%P;}it`660P!_gWLAaZg2`*-KWfUNQXZ9x!|cgS}=1T0rs1 zOyhQe+j;Y-^m05-Za`GBaOxN;Sx`A{<`@qBRr*E|i8E)-(g;4eaRi@|RY`*2GrGii zxDpBoY)?b7b$MiEt$I9}6UcUF2ZW+0HFs;|m%-`?dbm90Ts!$MF&7mQn<}M3Ijv)) zIXua^j1|KD)WIibsoTJPG+>R8Y2wF8&d(5w@vqL=4E)O_+?KcZ&C{cxTvM#w_;*9B zp_1g3w>P?SlJL^`NNTX6=1GbzV#>JRny?xv;-zS0b_Y|PcRuodO7-DY*VRZ9qJ<^y zOg;B>p?P-2hlw9fvOuB-bOUX8q`((2C^$~s*W^*1C>$f`x z?n2TJw||$Zg{Pb!VH@iGGkf>?g7~!WFL5?JOO!u`Dd#SlPuwTZeOruTJ+E`5Jz1yD zKTnhw?-YvI*-~fmjVA$35pkeweZUtdO0OEopmb>u3LGpbU3U+cyxx~?h8BRO@=XFx z_vIZHMe`b5r~t*#lwFo)m!>Q1XG1T5sq^ zARMOxgQ{yW6lJlWpG7I;q>iXFrW_Nf4bJ$4kZIUY@)D(pmfm`CON4SLGASYaoG`9Z zSDX8mq>D_=&0x%(Y)~c}Cz*h9Lp!A*I2MSbhGOm5U{0xeiXKTiFu@hU>DJ0Yp5W~& z<7JjuxpRLpy&bDD~ zKrHDC@lXGSbqyx8)LN))me+A|6BKjYb?xT4s?BQNAS{jgylr4E>aP)P8);Oc=t4l` zkk~F&2$+IEnz4437<&R)_P8}4iXtLYJWeZ>gXjezGc-pQS=+nPE6HyLYUw(`O+D*B zmjJ8wgH+w=dslD(@rl)H-;y@?KdMCzWOl*fTQoR4J`@>sKJi5bZ=3T@S3N7E?f=E2 zE&8=PS`B!3Scb}g=d}R6Z)|_Z*LpkHsvtS@9qM2km?Z z*ilT-MATc?2^&sLizBD67sT-VP^U391n2?Bd@&ewa_``p7ts$)9gT~iNL3mhT#C4~ zM{|i(;UEdz9CE4qma%I-5Efx&j|E3x+w8214;pL#nPEIp920~})$q{s2p)f3iAaJd zOA31dd$-Ta;rgA>Ois2S4DV&BlS+>bIICK22j$aztLkfFlX|O!f*H^P%xnHX$`(-E zqLX}P${9^;4=14O2@qTADMqK};jZh{o%n`KboNbiI3qr|rcQ*;90m(<+A`%ANU5g= zJ!uOYW!wK{re#VYeTCQAMUk7YB>=)w*D@i9$ewLC}g90=f-t zRh}RWP}c$y#O+zm10K+Ml4E1!TR8dKTjUPs-~slXJrtOgtLVA+v{jvr#d?K2z;`T2 zit)g0s0G4D=Gn@^c;$reXuxn@By@de10#|^*pcqx%*>EiRQ7kIqa(n*&N=C$v&+s3BN9;FxTAcr{G3^q*G&KcWvQe^?s7n`jdGvoZ*U1 z2PHymLy1DeVpfgcQh93r0x6@O_s&D(mPk-SNqVk zewc_#)Yw@M)gC|}STe1*x9QsghvgD8R z94I*$|1&1?Et>A;qQ0oFx%sJ~(>2nb=yb~%WQ~lPqzS&>o%q`Qn+z$T{8hwU60ShK z)#lz)o#ODrzwv1-I}Momyz^T;Ft44H%)f=s=zMe%Y2cyUyEuQx+n*qy1fin%ObU-! z6QsPkCv+VV=(gq;5J#DKb(zv#Dbix^X^#be?IioU^_T=kShVID-eiwC!ED)M+Ix-9 z9wRn)=fA25zH-k#|1=IcAiip?B8%(J*!VPGMO{xvT{qTAvRPc;HmX15Oa2&9+l}=t ze0DW=AVdB}&HaXi=6;PclsEU%+>?sLgF@`7+Y#PQS8P(sW517|DDw7lrsyYEOSr13 znV1{r&&8ZFYIUu14sUw+IWkmxOh>O-)6;9`2#FID*_a}&(_XBt9BJsD9NL!g$r+W( zMTs{M^6OLiMlDnSK^)BE zUqAN}Kq{Cmn+W?pa&l<$KSZyAX57i;_{IK#uA#}l*OFInyQ36%W1VmlabMvgv5uo> zphtB~rwoJ?L^>7uQ!4eW-;FrzSJGDGlhjBw)n3^u+GSG^RW_~2hqy`wW797=uWEn9 z0r%~Of+O!&XRXI@jPvRc1L2ZN{wXCw?Bt({UQw5Kn5PO@F@Y8tpp%k#p!BpCNz;EpEE0>OugdzVY}FuR z|M77_Up|O|(T~<~YBE?rs-D<@KzlI7c7OX!53kcwp0!$db(al^$`th{(df}7(N3BKkQ*V#vGOuRzO=%>-e7(_#;e@|(hr_}{> zWoP9RTGdS!Ogk|i!*~}ZU_drG|ECzJwQn?Gg6$RGj|tX)jy>=(48Y;(UY5t#t%I@G zb(m};$cNMFiA3QX-#0wj%WZc=lW}|8F=@KlT=_PyblqgQQiZ2G{rcT-`WWd0!MQYw z1GwCLH+UO|s&9uUgLbmQuO>*huqjWi-n+aHg#sH^60W%7Y7EQa<*|5pqX6?n`>IRP z3+j?MV?Un+NnC6kA&H0}xRESxg8lkiA5hl4-FIOUabm@eb|7`Ah7qC}q)3tz;X(sc z^O`@(1yTd$3QFY$!P<~IP<^PMOLZN*uz}B1ZY6^f%o4n|siMXL8mnlol!C8U zAmEYgjmzq^Suf?334(nKMePSjB^a105rUNTKXqljNG>_mXez2>{sGjzTn!eKxIN=w zZIn0gh`CDy*hQ$1BivZGTPQR(Jokpk$0^7Nj%dTxgw@O>(y0N(u}3;>2&EL7=PEzM z%?!HKy65FVEigsBOfe0FBS)!1Jcet-lX5xAfG%9nR3lPwOP%$CrQ8hN>bIw^8UMyNe)yxOEP7@8qrW9`DapQ8 z?6O0Yi;cx=|2~|&hS!YqkcCv6O!c@9ZL{55?~g<}lZbacDEq|>2|CeR0%RD+@|NJf z6vTl#NR*el=Ez5cB7ap1ZveYWdVZkGc|)}E+TeZ2Eqx1KuzpeB)I%Q$&@pE|LSOv# zydrWkh2y%HAFNm|=cYg!F?mRjOpe3UT5GRLp)y7AY+j7#LdOLl`CR03Qsjda-vxUV zgVC$qEs??LFgU2@6dUD4h%&&9*;lJiVZ@B4C%#D{K_Yxt1#)K*R#MtkW)I?Q7)U1~ zihXL3!eKzU7X#SsX4Zx(&QhuV1}{@yT^K2m z*K1CT-h$>Thf9$47s3^{g996Zllg%ssh^{h(7*zgHxnvCARy&z&)R{f!=+E#foJT% zv*EzA9Q~ewyd_d?o$6kpcIRJ5ik3sQU)UbCz%JfuHZRH3^<1teEWX*93EYM%-U_2c zyo5bOm;!Ew`ObI))DDCV-ImPIp2}(Az#gdot8gg=L~x>EGLVjh#L<`|@t2qV&5;jN zy~R!WyJfJ(RQ*RPcTzT)J@RBK$sh%UvmTJs^igZ&NlXnWshoDZ%zcECVyhJIU8)oV zJT6~=D0Nb?GJ_OTe88=$HxL}VE73P}scjvwJ2RPt-N1_!rpIhZn3Yr(JZ%=QtGqc5 zK=CzIx-k}d@{V|}N$EzlTA0-itaFCQh)_NP&(VTZvi}QFPu9w(J;5>7%4a;(vdMUo zwO;u(Yvr?^U_UcshkQ$oUTYQ&uDUAku(NN3Y_1d=k!UHx)2<9@Hr7eKPN8TkzJDjx z4!lO7dzMSZw<{^v$9qKVM5vYx)jFJK)x=8v1CFla3VU+$@->5(67$d1uT{h$=3xemRzHX zYr}!n+)@&c;3-8@TAd$wZfRP6;Q1xKn1nu@v{tryf;Y<`UlwZVslr*DW3D`4SU=MQ z>|(}BWkI(<`nH`(E-hrzFjt%}5WK<~E)p7I2VPbMU3Rr>Ks32g3@~EwV+LO)h*yd( zm%c1Dk?{6cO+iR*^nFcLX%)^l1$?C&WY2T`0U!x z(6d8j=9daZOI?cUs!w_VYro4Yq@IW5t-NeWrM{PC5nMu?v^@%8)XYv{<_`0c*b!UQ z1^?NE9g%0ml-NO8Mz`cQ>7GHFlX{a?*7 zXU;e!6J^xkOu9+bgHWgtTly_#VryDfEb{^?l6A*5d;>)SXd}#tZi|>O4&m+E+(TcFXBc#4R=A4@(%039;`hJ^RtS$X=Q(I zbIx_h^qn?K50HmM5y7>k@KxIrBDsoN+BiImuynbl?NP332|SoX1A9g3QRl!Jx$&q- zVSh7n*jv0yl_Gw9V!1_}u@!VWm3UV4R)QgLMqJvLApV^_H!{gHGF7$ShunRp4lD?7 zWs=@s)LFg5ursj3NZC}q!^r+XSJ}kc-WMm($|nhQ2;IBp($h@dk~<*Vmmu9YalP)G z@d4-B8w4}|KYC;4pEKrUJeQuFdCs^gvgKJ0%6sb@Q{?Z1tkAvn1SGiN?Z;JyM8=pG zgWqDtHNHjJq6^c^9=u64`|oP^8}SJ1 zYZmEfqG>Kz!ipq(1f9$mr4Hf& zJVL$TH09#aA0wsS5L@0;^Bl8J?BW%(2Fh5{k@t<=`zo$}L+JFT(C3S%Z%%yv z&b^>d3@ZE74BE^16%WMjsJJSxc8)JO{Iu{=9eQk=cX@l6YA0;H`ur;6>!bBAw!Rw! zd<%jwyOvQ}7s29*pp*}!}V9f3HJzGc>O6p zG!|rvTSQU>3UK1D$^wbZzPAbZGM{QBYG zXgBbVK!kae`pCbol8~N`d~a2nwLF<%&kzQ+`n&+2ZqpSYgaZSipsLw!9-hd-4Cv+}nUhRhZPOCTX60Wo0LkEPLeG0cFj1QRA;hRaa5YpreFuGzS)UF{aFr2#+42Tj69 zA%N8&tWu@+(n)oY6ar?M|L;BbPCfwpvH$1)Jb!)2%-nnKx#zs+J@0wHUr@+*RbYZp zD*Yod!l)a8>2f1dZfEyvWG$rJ{3C?@Yo)R!fvuqUJ!+b{ve5oT`dlI^cX#^sm@5M#*v16-aR~ z01`cH_@y*EptsEue@Th=1>Gx;3oSf z>~4Qzgl{qry7#Wm#PkLLIHDF?cQ$P!9bRWABLY7|V<7{wFGH9Ur4#8|Yc<`UOfOZfFbSJ%nRbiyvz(;B zEfm?ro<|uH`?9K$?m|bE+Q3txI%?O-uZxe3fkOk7WUDITkkwq#N~MywS*ff;8=4;* zcRlcXg5#!4V6O<`|OKUaMRg)Vexg$C&wZIw&pVUgSwwH@; z5j{viVI^WflLEdk{feWp{VN)i?{N>DxoXjod||*Z*2NTf=?Ix$(b23ct#_ zgs0|eIM>Q~(wpp`@)ZJG4D@(`2C9#t=haWZBFjM}Fx21W2dc(hsVGH_)4^FcLU=ZH z5Tj?2r%|sW{goceiLJUKXX>iaK~mKhhI3}wR!v0piZ8Oib)H0Mk{L+eDH-F9_>4{t zn5;;&UkN{knb3-Cn#I-XN|C-BWhU4yk!^Hjn|=xXnE@Ig25e{+9=tTHPTg4#?U`rz z^y2Tz_$=VHB0V_MwagQBaA9ALz3R@KDXToZAXs>!I9R9`n?3$f?OY-NrAJ24si^}U ze_lAgS?UEi6R2xOuN3FwxGg;qB2E=e*s65M7d|I|yRdisnMqht!S$*fu-8CJcWM7B zhuhO%b#sodA4@U3dkm~3+XD+~xd zCeoGG?n~1q2#kXH4qO$81V!_gt^g+5oML4megcAGQZrnO1De{(p={$5Li`nyu(}G; z!BIAJWX|C~INv-l1X-h4-fr$G#>_)EKcqIE^({dW2-Hr&q0|3)P$x%`sLWcntL@wp z-Nstm$(w|dv}+%@TC}rDThT3A8zlvcg+va@M45|wfo*l%Tz9vR62k}dJFkP0odU(l z6h(v4AWTv#Uzns;1tidPpfyFx>C;w|Wy$wH?r#~08I`PM+U-vB~Zrj&OuOa_z13jz4`GK_TNacM7) znUDOyc;vc)k#*&}Cp!IKVjxUQn4*8WR%RA@1J!< zAW@w9<-NJ0?nI5eKWel19=4u>fbDzk(>^_PpN2QYXd$IbIP7w&)4Y^*a8$)$Zz@w0Bes zg9^;*h3N>yC}m@s%8X!`NEOdc#DR0?vhy6oSCQde1sgEtnI6QibMDEANay+{dd-8rs@r63`vc__a4N&h zVn_$)#Divm>lC&YW%cNDpIx&?d%xwQQPD`Xl~8{yDK}DI95n9ZUl=^@3EGfX^*a|@ zJK@p=WhI5A(J7-UsBKdwinFVm6gN+tn}ZJE=Has}1N~^kQua%4`gkSL;}X@kd|6;- zI+|4nBrGS^IcuucbrOeH!!Jk)MX^h?_w?o4<#nRXG)-%S{^J`eF%)u4av}y2d)L50 z<%(ym*V*tqAm><^-O?!Ea&qlh3cODJo2Z!1c8_nqHcl?!A`YQQfFh-^9u4A!?pBI> zyc|9sEwnO?RyJ)u2VSo)NtX>Td0hsw{Av#g zaZCFjjhRW7nW6zzbG|KLRX+mxQxs+gvK2ZT$o!enZm+DE@|x6ZCCN@Wr@GHKhThm? z9Dsr&JJDO35JughduCJOSyJj5RRuIvV}LQESKLh{Ce~hnxzotKrwR@D_rywYK}W#I zSEfB`m-O7%QjS2S26=sG(+~ewnzjYR*~X~+)*i@}Y=4TZV6jBZxc4?zC)X>90TH)T zWVtCXaIXc+$ocKuavc1W+VdS&tfuaBC>cq7LT*fKQ2aRHKH{9S*PkoPXhD8PTNVpv zJF7+OY*-1}fg%a!ZxZ+8wdy`Xy#B1u&G-47*kF`u8dtDc?`WSjy*7YXTiddg{?P($N{8w6x1kr%#cuWsG z77jet6PVc?n7J!3b6?=GKI-1qo^!Bc*L5%78Z(d}#pGd{lGq8P-`KGdG%s<^?n0;J ze=LcVHn5ItwVCrCDzs-()iC4ae#WlNEYgY{r=3X?G9A44u}r?MNajybk~8!7+DhAL z=RF@{!&x%VMg6DJp3CW=1n3hfxj3MR8mQcej>0U(DEBDhh>}X5c-lFpFg)01CM6v2 z?sR7Unpd?sGf$ziLY=kj_>d=Xf{Yz_!0a*X+&m8A;>>J2?W|~b-h7;HJ^Jbi&P@8^ z+LAr=caVQAbk@a9d*rOTUj1Hqe110gz41MeCukeNyrk4C zZ&HwM`4nJ(yjuqHzoHf7i({aqCezui`Z?`fT-eKmsCgt4>efDocQ{#3k8-L7OONBq z6vV;Mf(Mi5xPIl2cq=OQ!sCt8gw`X{ND#KqUVF}h!{TZOoDvR}{x0OH-fwv9^)j)i z#5EiR>cO#|Uc}V%k=0gIgVde}+g)d=od6r#j>c$&`4#0*Ys;sx_#hN~PVti~2U{c{ zYt7jY54wjo2dKfQ;8m=ZIrMRxF5p{w60II+F^CdZFiSA%9+2RkZsvIy*ObiPGAXX( z9zw;@Hdbw5wZw=oSitS&owVY9`@l`P9$mp=@IXKIJGE?@THLVybl?K2TQU~(`Q}I_ zDc|)u6J+YE9UXBtpe5`{=;{Xf$|;jEw^6=@;-VMEiZ#8`N)A#ojTCe<{ru0FqE>oL zW~o;uETLF;4i3+r&Y&&l?7>Mb(cKKH7T6V0wOhV%P+-mpcBMKLDly!;RHY6P`WLjc zm1sZ6WK1Zp^xPZZkd^Z+T+L{0y;$E|>m@KCbZeQmH|vZ(o)%Ei>)joA$CJG_$$E+u zZP%--zCUtjl(tDdwLtE)i{qq0DalyZF5`IUokawUb6nT9c0r}Jnicd;$~|9JH09on zgq>#*)uFv23F58o5BmSR4@J^b$F;59pHSkT8ZM?O!Bx zK?}%&VW4=%E~L2AwI}+zEqx4chY;B9LR}^M{4+9Qq9hy-y_+dP6{Pmv!%u3gIaH4- zBqA^?NmEe~SUYGMn3-%aK(Ulsio`tO?AUmWUMz4as_084N+RF4a#EzEv$m()IV(}V z1-95^uN(|+5hxl~Sm}(puX!SP-;lq*tVDTDZGb*#qh=p^+5Ni4Sa% zd-{jKRYnxLGWy_Fc~H7ljhTX7+bB8T12faKjWSo4`7>QpEdm?gmb)8eOo3-CjF821 zZt&AFXsky_bi!@8eHk`f>j1H^~qHWn;JW z)=ZL{K3E1GXzb!bqqJ<0o&vS9oDI@>V0#^31GN%68F+;l8B1V#Kke`?_^IWI8{l-S@z;`V-)T< zIjfxo>LVvkAn2T>J{sk_LVFWcoE!d&LEt~4IO}GVP10g}Jv!oYt;FUUn-eEv(sJdr zXEVEU>)?MIM6>G-uO2V51tNziCe+ZK9@M|>jq3I}qFcpk@4sGtTC}bP>7!AeH?&VN zYZHW-`3$LXul@odbBYM;IKlfwfSPM_*_&pUNNdTf44d2R6<`XC!V{1{iG8{ifV~k8IUWBtbZHZ#HLK zn;f|6lpFdY;WId#xqebn^xq6MhC%nscN+{Y1m{d%P3~2&h?dtSJ@yXCj_ve>L0=y+ z>P0F|^;Q1s)fc?fcaytnc58=tziP%?|Go$)=6 zj3VAdHNr%?=h~~%oj1>QR9%hIyRBeonr}58j+`1^Tp(w*qV#zWH9NF%lm;%ht%k@e zP09MJlz4Nk(L!=t#|d^c2~@PtoU^+-tRh3prS{e18-&m2%yGKn-iF)eBot8)&(G$(0UM2kf2l!&DC4Ba^%dlqLfNn;J#>{e zU7|%oV@#+UKgkb$8yc+H)5YgJ#B0OV zlVb8i@yWpq32!Xg*f`NFIO|mO6IPKpQ4py*+@b@TN^=v(yB@B1@=|f zxD(|WYE)z1ro7niV3KH(;4Tbb-F%^$tN41LT{Tkg69R*^g`TQjBaDRZCgT4u3CbJi zEo5R3Gzf`0sG}b&XdzkaDlvx@aXa)ipy3dGc!DnZu0uC#DbiHi6SW75nwuD;-k|LY zX93YjEo)Fs^=d5#|Hz!@v;u?TBE-dS@o==Ps|q&GYKBMR6vA?qVTVJUo#9Y_llh&- zzjXd(P-C#Hy!KoViu$Ug?6@?xo%co~>OY@?mY~n- z?eX_91Wg+24j$-PYVFcbB!fl`^U72Dh5xs%y0vER+*b1&PKLrZu zUb|R4J_yXD+hG}k5)7OxghTv@!H(4Z>Ae@9#WYo-~UUV z%N&!F2f?OfZ$e02mEtE5*Y*J@j!g&W+Qracxdah39L$?AZTD_YQwWo zhd=?bGV+B5dC(5l&reQ|8k_+pS&UAV`zMhhFWK(H=1VC1aswDA1Mt}01xda{x6k1n+aZbKEum3VJCag_tC%DJmq07# z2E=`KK#oeD6Z25OIx7$#NHA*EwEAu(k3*7g3N~^0Q+Kf)AtCW;VOkR^V~lQ>itZ=D zU7S=kQj4dBb5>g*UUhG{uL=d3rdSV&e)iAHNRNmOw^4dg5y1JFAakBkLVBx?cx zsQR9f$!9A6()1@D#(|E_{<;noB^p2D9>^LOlC@R)z8Kell36?lZkL+U{njvn>-O3< zv|&-0B2FSUdA z>e)Y`r>{VEZ&cZs0#-@ilyCE&ORY+dfyNb=Fy|?1t;~V(hvqU)ELf}Nk^V(C|4YX0oBoc@ ztJ)b&y3vnw{bwRI0X%m%>G(Rye{?=(?N|kjg8~Dh)o=YV5J*$Y8%Q-i7H13thKL$~ zYW4v&(PVyRX!$m)wKgQYeFT{-5bOWrB3VwPs*KvtMKp5;F=0e_QyR27wNYd??1qVQ zt5HO@oZM`_uAcU~e3S#^$$AH=>&hty7uMh88)cWvF$VDB`LY{E&k5Mw>Y1v81|^qm z?eD>ME}qCH7hhIRA}ZN$q_flGujaW`B3$L8!tNG7AkVQ5k7xre?jyb%z8I*$-mD3# zR?Ppv35yC~3rtU2$j(`sCcehgWkX@fg&^4@W@Ot=nO|^0x4uPYu%HvynFR802j+wW zWTl=%#>wXcb6(INzKZQIr>j=Uy0sAzl-BJgY!l6hnoUPs-D*xE{xgDiN6Ltes*lv< zFbc!Q={Hp)Hb^E6YypJD#|IMShe0j%5xfGKAjbdoTdn@7*cC| zo7d@SAecY*o<~shuN~8HKcAdlc@`|7Mw*nydpLn#i5ZOF(woN!6~>Zn{vADwk%`^F=uKtn);qK)`IxcG1 zSCxm~35(ZRPNpQ4aA7u=2<7-%GGN9Y--BDmhR1~L&(G9vNCkuiQ;at{>#k%`^`5;K zB0F_X>60R3k`Ci>5||$Q8?#}^bC=DAVcwV=jj5ZY|Hd*brtZI!0QF!tjOF-4YK6xd zjOUyI@tj1luHx#j)H?$dMBvbuTpXe6agI2%E~!D58#s}HW0w1!wc+URcq35G{E16W zqDa67PK*-l@bn76^|Wy;uE9oh`5!ojU;J@cT@rR5zW}}`(DK2HE3nU(Y|T=EUAtNY z=j%m6$5TM$_=>PKyuFLxV7dP52PGYeV5lXu9G-;q1RN$p>&%_>pf)r1!J(Dd2a+bL zqPl7W4Q>~;f%KWTUx?IJtFilR+C(sEc^a?9qvzyH5bXi#_%e?6!u#ATi;lz2JNP_6 zHC^wD&+7sG@do09jBY5TK^Tuv)PEy8mm!h~Okbmg?SPdx-}^Oq?Y2IJuXf zimo3%qb9cDO}T&R!4c#9d4Z8lTcw$RWObhHn$&4MHOCxWbw7FZWpwPazD6NL`k%5v zJ2f`7I|=Uj?#X3zuP5w|k`=u-8B86c%}w*)n`Q~j%|J&OlcID5A(LzzqD5uwGHrij zry$nX5eD@4|F@saHi79vUG$bjLTpuVuu1kLXV3Cw9dUy0Aa=xL1IZX9xGJWjb@Ul! za#fZO^yGq?UyPH&#gp$=g;hqQ#(x+dzAoNSSpgbbj9NOw6?R|xG`Zf3@3&z3nTjZQy zA^Xd9SWo)*%P!Oy6>S!4o)<%S@4*v(-|6THuS~mY`J2==r>Yx$ndSeYUSYN4g?1>& z>R%o!nKacp88G+vqz?jp1b4OEU5sAbpTjcW7_H0QS9P^MT5icjtbTQ$%GP=;NgE?A zS_!IskMJVM0IM^Qvw8$T`>_CkCs#JE;UQNkt-0 zUlKzzbs)S^D%eVefDTg5;}3P5U8!mVNV5GC1GNEkm3jO`iN5*Yn9ARidHe)2FMg-) z_oX&~t}>7Js?6hnP4bREC!}*Rb5WRx(qTXl#8rTmMX|L$1Agq}Iml~NRIBZ&VX7+S zG~1ML9ta2CVI2k%Nk)s0L5h+%J#osG zUX4#S^#zUxsym6Apemplg@yg(QIX~go5bzu4edR6qiQ&^7Xri{d0q~BUJg|6)6U~B z@gjlN_~^etIuvo=t|miqm!8a)xmLmx@E1ElJ{P|zlL@$%_^hW1j<`id2VALwpI&VN zyoFC|EwpxZ#K4D;MCP0o4b2064E}AghE?~n7xKlOF5+trmiFpD>)@ekY-C^^4ZK&u zH=cDJX!%&hX8E4NRqZKbMD#i&D$8HpV{z6=RWcdX2|lq<8qrwq$`3|cL7kMaHi*&H?{ep#zq}4ACSX2w%Z zkc{SQ=HyJM2S-+aHR3rQx}71mp6$o-`23|2RmXy!=V>$$QFTnCm1nC&RJ~zFR8jrq zIZ8mu^zISXQ-RyF%juslzXZlc)rhakPy9)WdjqAf1w5ODKAiz;gg$j@gx*Wlh-bCC zZG=j7TMt`HpAM8hhgN>$>olTr+N}3wMgLpyOaO(2^Io88WQ*CSfc2LFHC2KYB!Yz~ z1l)>9PoPlcMWMI@WBviZa(vINo~>SpFdGfzx!MfmxdL7ifRsc-%#LZJatZ|=g$6u? zEL1$_Tray{V>-k+mAueE>w>^UyEK9hV( zIvd8{LK1aiGNpimFZz2uOBPK;UhHXVnvoir~wF|0{50Qo!ek2_9m_WDecdBS7jd)}NeCYI^R{&CYM9 zDhM7IpIlG9b3I&w>>{mV7p*F~+@5{T^|!-NoqSvzNvr!TzQka83`b-Bn>@(&DSeyJ zBOx)+I0;bt@hIb*ZDN1ShrY3cUKF~f&;5j+mtd5y3sgMiZX>ughTzsN$ST3DV{mjN zt)vt6R7ID>9-+=8@UdCQC8m}WCnHKws<9Y_%?U7kE1gY_>3M?05Rs(`>k4M^;Z~O~ zcK^UwPDUiE5*hvy*nlwEOm0Sj*5Xz{NYxX#JrA3yg_cLWcfK2{m#wLa6O;Ui!*Hr-ha}+^XGni!hH`$ zlNHW31f;A80o6!I*Qkd@i4WY@Ch7MX&5@VpxG${zaM;}&bdPa2UC%h(KQ#GCoRtNs z=no}8fOaDSn~#yetl#1c{u8UXLyghQT&R+u6mV7a4W3>J%97h$h=}fi%&6Lk+7?N& zDv5j`b7U;w9-dE=%$!PlR$qmAWDZzoXT!`o6=2OBDmq+TDwP7U($*9{NnZ5Nh}~B? zdMY#Zo$E=^qjix~DlGgmy5&)oBbVR;dH(cEJb1{Dxq&=^s3N%KBrNLGOBaBiSL_IJ zO`|OdHF`DOwGCu^s&q7s4)Ky8SC#j8%ENH&a1uuD#71$7f`B)Qi0QcZ3# zRwGNW@N}c3GHWP$L>=~vxY#HuYV_HUBWxdSv|xqG52V=mFkQXSxOlUlpU6YO!k$fs z|KnR60s1e`T!?H+l&@O2Zg*h1c#;K^Z*_X!@n(nzXH28c2^X3`%!ThaNG@UARrmMGEo@po@|)Qzym40e1&*l5uBS)dEebcT+i7fYuXyR zr*h=o{tL-f^VZnhpH~%RPY^H-g$`RX@p%VZ(t6n~X?U+J!zX2Oi>s547wpjvR(^d+ z<^79Yt&O^Xu{q9-&MXaBN%Dm}#xp8zwu~zAIMd%6VVk}y9ty@)1Lq3&D!Y-^D?N$-jRq=JH(tJ}JDsM?ZZN9HTTrS`{ zC7Z3f9z}TBor$7gk*IOpgbZu*P!qJc6?yCswYaBPAt88R2>!D2knxUaU-Bva720** zCl?~>ru>#cs$zT&@3Wkx>kcPYb|1o`@B%*CflBwbO+d_PB`g#{faxx(tb!Kav!2YD&v%;MndGBL>xTSQqewH#$DUd#faPf%!HCAGWijK>k<6-Rc$ z+w|>tG7A~i+6Tz<;Ce}M8}|h1zpR{Tt(q-)qw=M`nVj3#bFR3sqDWN_Ni};w|IS#r z1dOA9;yLW2T*V*YHYwHTo?~0n6&jayCNvf-Lg8J?PERV*=SN31P60fzM8@a2ZVPu@>%C=Rmsv}dyU|yI4oRaU$Irr2<7fiPj*7XMe=Qd~E zC!pY&wit@{@}=&GcPzexqxR@i{y{F=oEyaBk1yWa2GX3p!4V$n+zVk4L!2EiLXPg(1#vp?)ga)LtcY7pLb;Chz+~( z>mWH5T5N&+*fVWp`>!0iI5eU%fiX&f?xJ$NTLc8$^keUaL%YfS872W@fm5VwuKC7C zjnY3gX7b?Iqs>F#lU!Kep>l0=bUlh2B*}GSrknxC0TD>Sg6rS88~M%f9>Gcw7p806 zcqA1JmTST%;^bw!aWKh{GggJq-OKV&30GWDy5EgNR9RL?7>+}tRxTdsVlQ1Nht=FEyq~jZWWz3~JDPt_hk`_-{M1js7oGYq zshnyJ!&Xke2e`5G_G-$V&pIT-v9-%gY<$8zu>vVI^kVpb74)2(JRxj?f* z)eNPrJQkX2_IH&#S5Eh;5&Aep49?##8U2K=F>hR{UqDR*B}$CM>BY9B_Ba_wjDGzR zsjDDf41=uQzvnS+62Sg_$YWoWwVOp#+5OlmT2nt~mBF5mO|Ga*P*(CE<7a~Sd zLaB{nSU(ycRojD>~dmmukc?O;Z5}CieJA) zamFx0jpC?>Gb3EQ{{2tU0#A^{E&%AY%pmrx}~OPtLY7%@;% zYa{(^;~T7}zU_=Omai7?*zL0E_4}}?g;Moz-vBXvH=sN|_0=~rX0^{b%zyd{Rs{1I zoQdrE?yp25HMuTU8Kay2>a`pixsS5i*ug68OZ1842q%rcT=3_rJo&x^60o2DeLuO- z2ePI=4`X6(x1u@_hj71i7HJoDtp>p<@XRLfA;(W!oUsi{epzvFk({aXi$#h||SbF7sr8^U2yB z%{D2yCdH@2Sud*A5(5Da$nT(miT!`ke5alLTT@~VG2e{_ctcWRe%jkV)O`0mTiC=y z(V!{w-KBU~!kRACQl?<;HT=^I!>y}|SZgiD^jZy5UiCBWN#&{hq)NE148E>#ZA9XA z)|n}nhdzOU_A{IxvjD&H$aS3>Tu|}FldZjP-`1ER%p||X#c0U#@q5_Med@p&a*6dL zby}i`K!~m)5s^{sCxo;&2w@`b;WJ_?B>v(OJp!jhTs68e^DGfr{xl)+c zAXIxQHRmx358V=J5GNcd;^L&t#P3J0WQ&!WbXEBr~+go7gCiiY`MwqX)jT zVH&#`|2$7iqkNNSc2)Ss1aia6Q!aiVd!bRTM&*MBak*{mV_V1_FP{xw7=);!K*LiI zp6CzY)OZ{Uur;PVZp$O=*rBq5yiz^tzg~JF=dLszD3>wNk=Wt3#uz{l{;$-&U0$ev z<*G;bi7tX5P&l?UfRle++ZHyZdm`JwN+H-a6=(T^M zoRn=0l*?jzC&u^^kfO!BKNN%LuZH-O2GM;8AI`eUZJbz&V2aAhafnOTayN74mI#MM zAl)E`B?8LSL!k<4jZFAQmZy_2JR3Ug*xWcvvZZQNWn9*w>u7@9?hIcWgNQwrm|9$VtL?Ca(uIu{(UYZEQ(7^_@rWAr z?hJ#|p``1hxtv4z6{h22L3*DvtqJhss? zz%{w6m9u$VW%6=_2!%V|^!{cSt>rsm-COyux~(LXidi5UF@fY%$vCAi;d`{`P*tlz-1H zh$-{;$J>m~2SveRXt*c?vv%W$$Ap7r8BE^D;{50XOuIz;Ae46cseDnjMkhU@JUVBZ zYq3o8{pg%wv>yA-(vZuXbFjGITdLhYw2<*ATwZUlv{l9}gr!;V16bn%;)9bRtb5%B z4lfxy`>`bixR@Q7PZ@~*4pEFoB!8*+l2c8cf=r=51j>@N+e61$Z4oueS&nQW6G0ADQvU=tB;jltjT6$M?6XH}r zkBky&b={98lFXOTF(*T&s8&TOfc!ma{z9GF3^^Y0f(TZhKzZ-)>ijRY9ZrW~KFRSE<8)UpoFieg5-S z=aW73Rz@+-@?d`dhC@NJt&*P7_OH~C7jaawIkRoob81`2y{G64tbQ>hX6w^(Z5WmD ztuzHaJiDMl!wLFcp+c4Mp|7GB53cM#D`}MSyyGA<)4Wcef`Z9$S^Zxu1&jid(g*z=SY#5oTiI_DMvAxDd=h5WeMEZd!w{ai>6n{O&xEUZ-WTI^~I-jy1hu|7~8R=>cxU|u9>TQBQ#3y9>tZB>b}Ady=I+V>7! z3-Arkxk-rnu1*p`0AO)~Ds#83OVAIYHwoGGy?jX8zUnXtqx!4b3dAUw&5QjZTmZt4 zZ7_L$wcV0I$!}Dvuuq9>#nOQGMEg}H{47xz>)?pAof2S}wY$gxzYqf38(pz9hYUqli&!Iesi&O6sAA zP15&NAd_YItCM4WWROvpzV{@T#&F3>4OHV&Syu!VTGDX#Qu^n-qK>MlbTNWc%ntk- zY{&fuAzT1eTb!glnyjsKgsx^O3mrI_e1~d;%>xE)2P;Hy!-uTK0Gr42uu=+jRh>2c z4NQy!chz|sWlbfSF-ep3BlG3#X8}@b&xx&8sqlBa7MD;XiZ2v-Lyy(=xNiz9299Xs zx5+GW=0>?;M@_D3=(EB}P8}2?7~dw3{XgUgly3Ry@9_pbo0)H=m-ARVqHkY^qHC8U z=-aG)UO8cjWP*E8+{-)i9k0L^cjVi*s*iibqR^3V6W8I6{M38Yue8N*V;%V!;wsXS zpDvDO9r>B!U*3^FSzH`C@~24HNJsuOv9opLXG?@oNB#_P$L+|^>wzQg$e%4s(2<{P z0dG6<=N?l{<}HG`>c}tJ$BPU%smjQTJ7I3`Z(szLq6RxRvVM(iw)g%sP+M> z-5)^tia|vMHvE;xY96!Up7BKwgBOO@%x7PyB@}C0pQGQQdwe;@KpP^y;fd=|p13c@ zdd+nxD_2&Yotu*hP1F;F?F&=E<9M0sfrFSB~IFDJVjBHlj@TVgXnZ zI#LoWm;wgo!EN~GFOKZIca(78O9J!fYVWu%;MHXtr$`v2!gu=GWtqW^^>Aj_E}Oix z!}3*z8mzJK+kY~~_o>!Sjz4ma2j@tSn}umwP~`u|B0`zHW6QKx=3=?l|7)pCj{$zV ztXvP@#~6$#485pK#ts3=k#Gg#dlMP)!UPGQ^Tv{_r`irw;<{LCA|+ns%`_Py<_!G| zNFKOD-X7)lOlZlbBezWd+Al|;c8z|;I~eLY2>S5bdPPueD6IXt_abE3*525#g3q5? z@<>K=jsC%Jhdi?RqDQ1J=;LAiBWhz~6=QtnNe|bee~05w#;;95LO0yf(VR1;Uj0Tx z!#BZvr*m^NJrBOuStm{u*dU*v3o-IYwWI;of1Flz(Lo@&1;tIS-=cRJD#A(nm(;+i zg78&2@6p?{0_Gw4byq)%R-bm_oltyPE% z+KLwEuR3c_N@yoAXgL{wJqr<$^P{gO$Kv$}7ATH}{dMvA$;x%>6XL`r+|PWRvyWgy z?~8YC+snb?^c-BaG&^avwOw+pR%SLmERyeil0V_Rc7%dWJ-kw)fx?K3h13Utf$M^m zlU(8`DLlu6`BO+6R7BMfyyx0IJuyZdB3UG{wc}E?y{pukRJ7qtQ&O1~NwuYDMbT1g z5`o|)`m3pIE5zR#d|$jHR4sTZHKf1!Z%Dw&mdYtj-@#ybax=5&(IV@M&B z6Gu{#{xt>&`bAy#QJRq5-My#k#<%1(In_PhPoyHKVPlTpn2l3v#^C>Qd zGRY$2Igw85w=Dc|dVDA3v4ovT<=h=9E#r3H%lAM9PJR1y2XFL0u*a*^)ZxV5sIJ810^5@f2Ls>nl!p6G==gm3Smm8|6j>R;9-m z21|D>g#A@Hs*0&MoANL~@5F(r+H{eX`v3juDqunbGvBEY59=1kA`fgGz$bJ@2Ps zy^EDeu^!2*WJ~4qrc#dCaw$}r;Uj!VlBN7x)nnzylKD+Ka zqRBo$%0pMXYmdA0iEG^NRwu34I>$;O^SyMa&k&h`Hk6?YQ_4}&)K#ab21Vl6Elr4~ zMyv>v|B<_0&dn1pWh{s2BjEj7;r_~)jRcEMYF~!9n?QUY2{k8i_Kjx?Ug6wUQ_A`0 z+!l}zS4(IFVnxU%Nw?(Ga&CKijFha*YOXymenVb+a8^>wal5s};Hs#9jp1oII*ld^P?Z(9jkvI&+Qd=FC+gugsMaZTH>W@T1uYcOE#zwOD_q?}l z@W#U{C0P|NjZ_WQFYRzBm2RbzNW1Zjd`iQ}97wpN#ip1=pY|SA zV6=lG)lxr(H0+#`JtzAhLy)<sH*L+Um-VR`J`;Qj#v#NO0TY`qp zZ3jRV>Nwu!Z%IQcySzzLc&*u*&{08rz1KRosqqj9 zI49fK58gXUDo5Q7Lca~jv~J;Hg^`vDFe*{u90QxaY(UnVT>sn@!LbW0Rk7dpmHf@xT7h|1u!fHCV zJtIKP_}_YU84JN9!7Va|;9IgwoZD)}+mdtC-#2R23@u^O92;B4H??NFPzj6g2IsaI zV-krMHpk1TwTkZc820_KcJ*k)U$;>p+3fGI&-DK>#`p5V4M&%HN11?`z!ZcKRfk`y z`AuYpz_tFHACZI2pik8&ggDJQwW*UD!`4mT{D|Fg$IUF+h20B`*QVC2jXMzuRCN1n z_4DFRY#Cr?BPSn>;6@=PU`XMBv{%J+YXu(u@{S?6%@+_xr@_bky6B<+VhH4z~CbZA& zjWG56nL(S=-{+|M@g~nlq@+S@saJ^6Bp`ElEyo=->o@fZ?#q_y`N(4sMx1-LZ87kB zqhLN>LEi+SWb>5co5Xerz7?4$uJd;5IcvL7zZZx2IV(hZa&;7mOH?E!RXDm1wZmNP zB)Mm*uGXyGoF(GI^2D$i70aIm-?Uf`YrOlD5*uYSz%XsU#pX~@e;R0ihoZ( zyAENh?x=S@>;iseN1WTVd#UE>d})u?ie{)gXuHKq65YZuiD-Dkf}pKdnGsbTJ2K9b zU^?R4!*M{=LPa07lnd==4_!M(lG!)gjdwtyY^0`t8m8Wbo_bIhDC8drrB&)|LEWEw zQVQ zVb*YG75$=$6nq5<@XPKGL`k^c`E+xUUWtYZm-W&fgOhRADauJrtsjVEcV!;g zkArFNJLe#=0QAaqtgawgei&D(!yig=&`GTX+b^}b_WM3mBkKpxBrV0kmJg}DWhVv< z@K|{RiPh}dc^6?tJu*07Prw#0CBaA`{by^b?m8m5R%n6>v!bsuZ!znzK}FjXhFza) z9XGtOMHWo0s5wvATII;ZdiIl3wv!hi+rb|%FEUPTbiTz4g-z7YBdv<$PxA0p1ljbt z_LKgv7-SDRwia`Lms&Ft6QFH%?FT%;@aUFs69T)2i#}zY%jhAX@ z7|o6MUU@ORL_lhD_3Jx`&kR0}Xr;IO!LGeyJx4ZSfhcp5&Gn=N#mX*?ad%YRP936E z(}TXSs{@%biJET6*OZ4_C`xqguu2O4k+J7E@?C;z#@_Q`UJT<(bOLq^^}-uhDc%g; zurRqJM&9Q7%-lEw<^lp2CGtbgJhqP7MF%9J5+BhY2}KI}EzndpOAhRHs_ZpS>kpM09GU(9$ zET=k`6AbRcY7`4JoH-2&_TCMT%wuGBR78i%3|7Bf$w|D+753@iim6%?TO4?@Kc~>X zIz_W>I%D(47*g;|c0!@ODg-g`*_S~Hlt*@16EbHey~9Jh}e@+Yq5 zi6@>|7F8PwJA*Y;hGj=#j_B^t^3bL9`|q%LuP7=(p@}o0A^pD#Mv2PY=cxLfNtQ() zkI*0OU~ZDOSe{o%4fw<*R5}`0R2;P3Mxa*Ipmtboj6SosW6|DB|89rS84p=1%7W82 z1s&_P`0KyQe>c7L=9{@Kdi?b<@*nnC8+9ZPVK4$QsxIUKa1Q6>@`XjffD^)8I%;e6(Zt`8$3cs%b<}rQ!F;GIjgqhxK0s$m zMcV)rSOAUSZK$)XM=*_ptzWyc_Cr|@S6A(adHm-c#jepO3%N58|ar|7#JoLN3t%p1Q0POA#3kfy(p6w z%HCTa1C`L;pUH3-ic}wwg3Uuf$(Wg@Qh$mv^-={W+UlH`b+LgM%j}oSx3_;$dxaY{^W?l+yhwXol7kle zpRmoSnlG8*d^3#-=OPK~>k4V4EF|75R>&2xkc_(@!nw;KN@%41tbyy1`_%QoZB((b zYL7d#1vcsdh*2Joi`fT+Ch*}1JT5AKnFi3Np3yn&J^vFpSH>#?Xu38>lAK+|?zUqF z*jp4eV;)vns7{h`b+|nb@}(w}&092Qa3#lAKiN2fY3-q_$|I|7ky|;XlA;>WB=)(# z-Hs=~M{3zGirA3#ha+5JSz=9+5$HbzKl~5cEJ}Z_=$o1@$f3VFPeOzSQb(0*k1f&; zR9aSa2}({3jNM_m8=a<#h4k5L)?w9hNO5{mG`1JmfMjHiUA2LKk?ca!gmMBj5q&OA zVh|85JBsLq7E&9I#901+OcD+(YLjHVOdGZc;F6cT2y1hVFfs;qs__#0z-VPIq#ZJX zHImLKDUnojZ2T=ke%j6X5#RPdqKW<4M%KN;(e62I5pMi2NA)JZFjk1~p3^7WB(GzpE^ zl@CQ3gI>T1tXbq=hmAZ@tS=}y59m7luKZXnK4(5h6pP<6EHP2556}C177vR0vWmEB zdbYyT5vof0+CbqhswXPGBj9UNCtLN4aIzzm??46FlyTXwNb-Lkv-@y zs-1|I-nM0C$LtOJ1ZwWRRbisaiz+Q4FU_k~XrAUkwsXT~?rGR?>as;zHpKCQsOY0r zG>dTZh87OaM{IuW4v~l4r+hYoJpNRo+$eSpY|&EctiGYObE`}9HIdDYH^7-je6KO? z7b6t78RSJ2xP|(%AqoHZ%~CyP4iYqm24Wosz3cCVz8DhdvR2}&y4M93x*ej-x>R-3W;`_S){)}`Be=;m3MJuL2DOS{A zyX;*NO%G#Dm3W!A+llhg7#&@>L;FcXITcnQ^T$`Pd4sxboxZ1Ij?alpk5_cu* zAtI6k>lSI7GaL+oeV(;X|D%V&kZv)}(h>7;{4j4>HU2XmdyFWE;^ihGJGL@Cb*@k* zwW%-S5Da=D{1tU_;=QR6>dzP$N`hi&M3mo%a%Hp^`l>QjFyh67hhsm7*4vZD5R zX|OUa%ECxU3&u+PvXY5ZQ^8#ry$!2WvN*F1VFHJ*53lFVH?kgJ{Un04lDrdg#&AF| z3CO#4tL(2NiVzsRy%Qa}>P6;Tn5shz#yXhBZoza{$MyH%>t7{@&07e!9= z#jrV-hdK#!9dbIP8;8RHFwOZRuYsS@)h$gP;316rg5C;7QU1O(S=j!J0bdI#b;Fcy z)wVt>#A1kho5^=am+TARJ^X#jyT{!{eQmBVtKvkjFqtNO#Q=r7RPXsNtoJvav^JF#L!38ym0diiM-c%rKG>Qjs`O7-` zma>rh1YlUB16S!k5ltKN4Y`BJ`9rqGW2{4TUN+`60Kf#J<3cQLfiXx!b=NUpNf{Db zRI*T?vX~zvKvE#wy)IqfNvt4BI}?OCX-&?$Qv&nC@ErHKwa2k--KTx7#pk3Y_+~Jg z4ZGJ-7pzCB8Cx~m)`CFMV)v=Fr#0VkvId}8>I@Wt_u7@#cMT6~XWhR@Z>1zq3D3gX zE=t`Q>eo3o7q3sWr+l;q*QzEzO-@5~(2GSqU9rNWTHAu@vAspHy_4X=` z;oHvro!not#8|tx_2n2nHnr(X$=X1Xi6dp@YAGnQR$_CP*;hH;?^cb%-MrP+k&{-- zK3pefEyMpX6z_W1pYbn3s|i?DB!KLFGi{RH7z-&PkuY~U>1raC@pr>a-uOGE-i!@Q z8PM-T@X3LUUi&@H4U%>Cqh+-0RJfpgOwl_fXvy(##W(SP zad+sn6;;a7ASZGRI<#<6iGG-uqMGqv$gFxxdqTARzhs!ZaiIY>{XHlE3`d4O^)BHi>pEWPq}|BQHxcV^a6{Yo_4>_PFzwc(MkIi6({*WmRY%l|RFoLBc0 zEmULDOVmE?%h!*?3%R@3?lA}Rb7L?+9x@n7r;Fc?j0gHNFC!`Y?nE^zB9ustn+m6D zaeBJ>n#SP75-kIexLNl8QsNA1gyg_?X(KdSt$97a1dw<$QsKukDDEm+fX;Wfv_c|nS%q~fkkR?G3 zZ7*+56=EJ80q{!JYvje9#-?E!CV~K$$%3WzVCh6+uw?NB9y@B1EsO~HsYL(T5uT(A z0f;%IHe;HyaMdqmfI&y*0<$BM# z%OKa}s5A>Hk)uKh5tXsBVvA)dp%c`4mZQh_RZh6Dvt>dyp&j`KmHFD)qvMYP!>x0L zAs9k!h&PsIa&-FJVkBEP$BE&P4H6P#w?ekPwlaO_Lx3y|kg*@5)R}F`5~jd({;O=E}3SXaowMe}t11*6|-tT|%$s#}@)FzP%Mq)dsbS9_q>vQ4A7 zIY439^fHNbb5a@Rq%!41l1a*O6rJQS{0*smrUUrvpYg24dmU;(IVtTZ6EYSeMC=gM zFXkAr@tjEtUcRr4z%S(v+MJqr7ih~dlSp*WR1J7iW!l#<>Pcz}2 zF1!)kx+ko^L-ntne#( z0_-*B(+Vg|B>Kv zJtx#?jqKAfTCy?pc8ru-ml|uJv~zH{s~K+EQ@Ck-)BnH=7*bz^JAZ>PUcK=nasO$; zI`4U&B%x>+(JBVT;kvn~-Lq?$t93K{*z-jzYS3e^5HDsX?b!!wxFEzqg4|M5y~`pF z#LZ@WM`@?A!JO-rK2MlN=LWpOB6{gc^rbf3*$0@Ht@AFTCMA9f=6DJnukPC)iJ)v644yLDizBc{l)z@&T74c3 zO@+MKUkL6`R4URXyVLA2!|3p0{W9|4>%yoGeLoC?{%5KVE5A#Oa}uu73JFj;KgCd@ zHh2bvGlO&RdApqA012@pK?HP^t-k)?aw!rpm2UL=K2)6&5IKLC8ev#W!^xlWP!za)HW&&3Z+wydJMg$c+r^w#&Br zpKnH!0y^~nno3tV!HC!x@lIe%NL>NDF%`5821I0bSh(=FRIx#mf(vYV4JHf}JSmqE z=|e}g4!xMS40$>4XT8xI+j$QUm0h9;ShhTB$T5bm@J;`Xu%#?%xIutmppnFxvJx@- zhT|OlvvKe(w5!ch%vRUx#j>ZryH}9zBK5EI59y)vV#94g3#i6tRbwz&;U@^Wzf8Xs z;#T{yY(X$@i)z+IGcbNgr_vuI#iah^Atj>5iMN8S)^_*gw~0n^U{BFrnLe_b)dTxsJe*p$a3`=IWUh@qdY$YA>7$b&E?=hd z+es&b<9mU%8`AM0yiNV8ilLGKslEDd8I)|{v%D<}Zwy}&9xHO=A?chghH}>2q|!f= zAIapS^HUWV#Vbm`riXqyId_tTkPk4>0|$Oq)=_jMH<`SuI_t+Ha3*oir*dXO7}O#E zstkwIHQ#+??O~IZdDA#*UNeu#0g}OZkcoM@NYoKkw-;3lIVE*42`{+D9zGkMC0a{M z?BcH^0DDe-qA=>unXr}b-h|iXPzsGD_spu%ITMa?tx3)&Sp8^RU7isk7UR9m;QoZ% zK2MXOY@gPL#oN*$U8gYN$hb7>$Tv@w7OO$FHXIm_mJoFJ?JYEr_h~Yxo6LwI$jlY@9 zz@e>%x(*85CdiXjWb4U?%!6VOpD6KDlC?Vv5ma=UrEljXo|uRFaLXrv=P6PTF&0b1 zi}P6l$5Y>eb>+tlwpgww^S05*yQy)G1_z12ex?SHT-Ws|zpqw`^ObX>lvj*@6$bmZWhW{YvzsGQxW{`RZC zz3OjR{q5ne%XXE^Mij7am6j*?YqjMN^g>?cS=LUb%7oo1YPOrl%86woGG-wdrNpCvEl?o4+O2`mFqL??LCSx(QUgO@2Z59=yP8TeKRv zNk3#Yw{}QAP*Fi2{SbF_+M?(=J(F5ofe7D3Rzy4e&( zF!v6lU7H)--qXH#y8uVE!{3Hgenf&zmHkarQVoIvP`MOi!LlTUL|^RMjNsx3E^w%0 zt;mP7H_7_Qk4Mwpd)Iz!Jap9ES&cGI8flBuBdC2-1O|AY;c=)X3P7!Glyxs++C`D+ z0*1)+ey&EQ+tv3z_1&hv_wrr85$;(sjhn=Cyy486531sLU`@AnVAOsj>DKM{^U&Gf?T`=LY1__z zSXOS`Q(UB<{zoV>!RU>tGE7hR@^w zb?UrLlx2UY)V>H!V_j@I&kVj;#xwkW#>MxG8~T|8rj+s7qy!q>@F>6F$|TUjXP??E zGP!W?#wYzr{vWd$Y-F7NZzPj5yYQwo+{5fDBbv(cv|2s}COinZE0C>175PBmLjg`>>*U50WGgN`d-n;+e*w-3DJlCxNZ4LRCS(cES* zl&dcuhX8bdk1&rj^?u_$YX^_~AydE1iyRUMEv~VT%osjXQ`0S?h%r!c)Iyy-9D0TQ zo4V!s5mD%|_5ko|b8bX(4;wht(L9h9R|>pv$`pgSAJ1sAmKXu*x2bq-vZZ|Gi$Mf2 zlR5=J*9yA~YF>0u`O!iBg>^FrH9Tj`z?AJ+khB)l zh@h5?`6Kwn{%KI~yTn{G6i6lQ*JVJ0zdgxWyM?(l`JhoSdZ2)DUK`}bRxh6BTgAT+ zj{aLHxU~Yii@>)q{Ha!uOk|d|dEj{JTl>{0#@}irKSed(^t@0^)4hm_obSSQN~Bh= zc!Ad`$6^Bxn`3~afx1HosDhW2Z&&US!WUnvftAP#mDzL4 zN#-or{@}oQqu{wyv`Ct*UaP5rYES|j=sPFYaMALOckB5}wRhZMU+w0rRBn<>=6#Hi z?yz?Ubfr}JQ@?~1Q4!Jf@DQ(ZYVbG%Wd@P~ElTu; zotwYJ@1?4``JiNIP$=MKWb~-a(+^$8WcxsAURi;b5hzY2r4Wgt=Ok%&*{%BnPHmP$ ze%iEIN!Ip`Iq<#kO>^vl1&)q68Sa z5&|f`ay_O~N=Lj0$^`Qz_R5hN8akzRSzoQxt^5jnnv4 z357}PiQz=#ZAtem@{7pZk}>&Wd0P@#|Nlwe?#UpJD&vIxZJ75h&~dkx@-(01TYQ;3 zK_o=)<-^s5OqVXRU8&lXaJx%ghsEUS2CuqY#^txU{8la*=vP=GLvSRX^qJ;0uIx|48wf&@j z*KdD35<%J%=($fnk*GasDI-g@?Uw=?L-ylM*O-^%=5aMD`}JF&w9%G9iL|$F>tC1j zB)js!(bl{6_UPum<%>7B67wV<&Tui06ISg*IrUOxs3NW<$|NGlcap|px(qckeX{yH zSN+XYe`l+|8T{2ZVK5G=GF8vRDw9aVm1yjp6C$6<_R*@3i+q+XUwtRWPoKe;fNG?6 z*Cq0qEXy2xkJQ-kV5wg21XGkHk${P)ObC8VcU@>!Y;({p@zqZ+U0#Ii;i?|^(J zw+G3YL9azV6R=&5{&%ywuDE^buOz~?#vN0C1wH8p`tuN($+em!T3qJ&f&0l{c)z%z zXZ28dOLAfV4f2*WQ}R~!ze<{C<5x<96i4|R2j}8TN2&sB|=sd(ad8?oliypmL%-_|5_|ERzgnmzegJ zDi&pbF_izJScDg_Aru+=<8PCPZ2G^#4gQVtkZ=#kNdH%PNF0BrXOrcz9Nu}wptPe> zLtZTH^#6_04w<=3Mf(>?I};?aBy!F@gF;T2e?bHP1b5*B)IzKqGt!-(w6|IkiAVfutk19Ue z#@5yoL)(ZJP$~2Ku6@oV18Vu-{_gL0f1l64lkBz6*?aBR+K;pM+H0?!Y|~}&Av!o0 z51g$o(X>_|;-n^`f#Jn@aew`DZ9fs1aR<;rUresM>peCaAi^2@P?N;^7ulx#zx zP1aZY3*)w+IPvozEEE5J8C{L9Zaf|`K0(|;Wa^bxPNh_)%#sB+ejgA0P1#@j{*e#R zC*?$<^r_|Tc^8Xb=mnmOxBwoCu)x=hJ~Xcfmd2xd>v?0vHE4Ui(DalH8Lx`mn&nyh zP$;y2TC;4vUPmKhcZqFgndSLiES~&XLzlyuhaWgIcO?uLW8GX@_M$`n5~F(O)x;@V z7K7O~eafm)a55?aX}fl|Gqrc$%A#D`IFCDZo}I#Vk*RNIFFgc5Z(uTtR`J)o7Z|s| zwB8glpjdF`C~o7Pwx1YKopRVuhMY1l`~R7+cSs&h3=Qovfe2(bP&sx5?H9d>5vG`SZgId|5E0TK@kl_HDBaRqI{QVe%qMfEL+ev2F(J02^Y(YKjarkJrW&;(GT{g)cfZ|t zh34M3=GB0TgPZUc*@G&}ffEytb%jRwLRWFs;PVq-@;xc#(?l)B6goy%Koy-M;-jA= zv14Wl5pPjE6JKayTk5>vOf=}1n*Bv*u_|$|u>zWjl$9D?Pvh}f@DW9!Ku{8)=Zu^i zus!9Ea(~vAyXxj^kqO`51+n~3s)8PEy(kbA@&;{p$+`52``9TO>9-}b1&rF;j|0CD zGz9M7vd}gO;ciQy#kzyGr-F%(L966o+*3aETyjBcP|)RswF3e@Z_JRu$_>rk(e4-7 zgD_LuB*eZgiviR;mbVINf+6v5ww4hUDLIr4Ke;5qQNjuQz^CTLSp|-gMRC`0!{>&N zQLMsQ3eIhGqQHWC1Up}sd*P4!j$P%r4V8G@0vmX4;+|}DoG3LDju|gbd@~sL?dXqC zyoZL0VB&XBq~?CJEt}z$%u~Z|%^Tw@(7flGmFtHOsY;_gH0l5!vQ9J^)qhW=B_qoIME6IWHJ@JL(!e zFuHEzXpJ{B@FMASy?aLVOO);#TO=`(TBirUu}!M;r7}Z~vky1|o0Ws_0cF9R79nC0 z;9&QQhT^+iJ7W7)6b!)^jsM)G!uwA95R1S)|k%3tMBU`qS873X_DN)0i@b89)v7N{H{KLso`r+b?j2A$MruQgriffQHlKxS zutRW5xllL}Y=!`fkNLWsMnXx6maQUlY<`dDx1*@8a z9d@D*yjZ&GjPRYsD&}wDeY7J1KM^ip6}ncwXELrJIv_QjM!`zZ8GrAyOL?PF-D+sN52rJ{OX8K+WGkCf86 zVN6z&LwdoPp|RKVC2&Cq-}!?_-&eDep_5fV=8GFRrUcAViAqjL zo3VHA4k;s*6W^h$X})r6cxbFg zRSXk``%B>#unBzsLS+x$zXTh}i7gk+r*K&pmBTdljF)snV>OyAqu_atU&e?hHwLeY zs^AW|@5&odMCj(wgBiK<(o>Khk`v!d$qn@`hx zpE+B8UBS)1TqPi5$UN(CB#UIvnAGQwc6Fj+&LbCvF0Ku9KNe!9RErvtT9o!p;7*9+ z`-(yc=u)2cKNOU1S$ZNgwvOUZxZ_y#yt_IFE;dVRxjU7+XQVg|?C0bm>B`)edl0BB z^G*}Vh|FgDqE^|u`o@mdoHWXLtRTiF5nA}@by~Zq$e3p;a8v0>pjtweJtcY#Yu)>n zdCyv9s}og5jLj4v^z)W!h2 z9-*;mI9oz+HjV44qr*=l zzmCPPa$I-Ws~n<1kMCjktBz@dz7u*&nKu#7PtcTQyX^VPy1U-Bo!KLvUBx~l%9FL5 zMNRuj^g^6vh-9g+a3j>AF5~PeU47>q{V;GWI-HNd{`-YW{l90h<6Kg>O=pGM$w@s0 z_7SbbGo7)uC)@UQFKQb<8PW2$fwsUwF1Pu^xS90B_X9m${V{>~p!DR9H$0Ax+^>5_ zIUat?Z#r@3XJN}r1Jf8s3z%>13A}~YFT%1$Nm@>Ns+v?6-@+m2Hdgo`w$ZgLadtkH-F#|bYIDE*Jir(lc1Bs{?y9}jp zXCd@8<+5Isyg%!S@qJQwb2NJL{G%n#K$kgg%3+<^=0spGQWM3TwPO5=-ZxS+UgK;5 zEjXTc?rD(k0ZJwIjf_ftW#B@@`|U_<+6!q;^aAxQoSvjxXT4@G<77xV>o?i=rspVG z#P!3etW~lHfe)GM_&rIwv5J(?WzE@@K+l=anHp8I#!8Bgj$e_&stKf5X^pvobeR_L zy$??#0z@IR1UVKw<#RM!^kKhM9|HZXc3FM&ON$Ax>? zFcl>*d&!3X9RC7a|KmK7@dOB!P{^}ID2tY!7Bahl_zH=l7|Kn*aADGH;~O&|8!zHP zR=5!Fa~W*}qb-HAfY>uY%h5lIJbd@Vl3Nw=Efh$RIB#wzgND~y&)h3dJ%JN48 zbN$n7XxG?GrkONSncJ8`4T%z=&u8CB?@$y2B{WWbd%*sgRv`;x?xH#}31N^E{rGd9ZxsWb%ShmR-^^Utodgixh z<#{dzoacqu-x;h5u5TeABY8XOmW%r^g6 z$D^~8S;}WeKL>d^!C~i%jBq5hl`|G)fn-Usnf&_3gqC%~DfzCfX6AC-8a7Fok#jy& zDQC9C!GHMf+_xU0Q#(Xqz-O{Z2^?jKrE~$vni9{87Vry=T|%_}SZ4MdtwxzYnnMry zvj$?epycm&5{`+M(uOihqA%ZCG-&)R&s&#WQP_j|2yt>_^_a@%ong~Bfn&`T9>GNoNt+HOQQlSO88L1~jZV45ul$88?{CkPO|$g^$F3E4 zkw;*9v%tItVC}ZCcPnf3Hf3E@r>vN2WsR>?)}-sP?!7%`J651byMME?ZTD}%4kA!+ zr@VK(!-su;Om7AgZC08)#q<7cyzP%^2TH!-yeVH;fic^yr&YEkH*{+I+wbHZVzBm= z_kbdZe|F3<-n;sEw?QCzuiJ$Z0OMW0g=)lKWj7?0MFcte1rf9ylL+*V|Jy`(4huR8dJ7Yna+DRU ziZ#~rcz|nlcEBd8djNK4XzUZxIy8;p1=^V?14ZeX;qb~z-z zQ=I*qm=g@ggxY%*)8eNkIVR*PIqD~0^Ewy_2d-RIZL9#PeBh8TKjiuF%i|=lWDia= znjzAK6nyH=s=HSbAL2JG>kg$$X+vX0Xf^yS8>or_LqH)U0nexE11~BfsVKrTje(>v zVI(ox6S0S5>BPYz74i_J5eJ7tDbHI)b5DTXzmtYUOPfawv^2-&mkDDO6VaBUKRg_@W$F9U zx_x=fWr?KY8GQH0$P4jk#s=_co+U;Uu^7LgMHsIE>NfMSt6L8+Mr07LXlS|87;hpw z>(+{Iv-titU3|?5WfVzyn*LfMjLPLP+>|YZ z6-`u@5~@(lUb4nVYrwH}>H8t?AB-0SUG>Mo@NHPCKhl7+>3;`S#ntr+8SWvCof4Rn zja9|>%abvcENwyFWQYJGyi1H@I2v!zFO6)1_{J;3gtH85A7TpWTO?iSy77{mvyAr$ zhMHMTHox{$z4LOG(fO7VQqP&+fT3o!KRAPA__XSD~<7NVyPpb%} zCJ3QuZ?PHc%Hdc&>88_kmHt4I@PSd{;i_x?fqXjom-Ve798BNdgzi9%AtxW-v&a_M z$G*x*wIky}AU&7SiCn2RevXJzi$*`<3D-6!)`ri6p~W)F8)NiA#Nh;gLPKK8C3yWe zr>fBbK}d44h8NMB#Ez=nXtrMdw6vSM1mQi#Lj3+eQpc*_vBOxL8{Ol0bV_`1UP5#) z4(halSnh+^>5-fQhoSo2ykmDKmaV=O8U- z^-k%KPaU8(1En@DBJl9c&u8Sg?Eau8Sdn)HwB#kt#P z=z|Krqo5%AN57|_0o)fO=|w^RrQNGyj6|C1fmQZ8{e0rvz{n-tZggaM+L7NHh%_G2PrU7NjyTGqX2K(=#Li>6N$^~n#@S7aFUT;W@rq^-ZiYWYmt z$B9lRHZ3=05v?3;3Uo>Tun;(S@%gS{TuZYcE{Cw5P(#!Cm^7)|!gLc-b2o207n*s` zmiB!I?OW{QXF{cNi@v@*p$W&K?KF|QIp#ZXrb)|op39FOEWfamiwTPCsxl;W4`Z_F ze6UzKnp55dO!v+r2>Iam=7+}is4p>RrjEWH zEP4>;lv#oc(6n~^M7OyZFjtJS8lcU^@r|-mXa*jwoSB|){2{4;2x+qe2c$tGuxcqh z7e(vLj(Q0X11gn^0ub;YYv+TQEDr~8=OOYa>0q$rcq(F$u)pE6m~->8#ZS-qQ{k_k zqHaU(m$>`kMepUtom5hwhg-g4ADfHkz!+RdjXrCp+_kyyg zn$NN6zY^g7sP+8CfqXt0Y@}P`$s4kT`cX?iA7H^J@oFD?DQ$;oH9?{1z2nd_Nx^cEJqW z{*lx1^f@(OrHyMz;d*m@v+=s>xK@T_&dtr*`=bQ2)VPSoTz+zFNrB+6R*f6Bj>9TGbN`v}bQSB_JB@2}#t#;R z9C@81qcqQDd6gqaXr9EpX0gWRm5z+&1RIW6u{cI+-m?OE@nqchQj}jkpxR5>u%6Y$ zz{j(TK3@NoFf&^vYqF==%Yxa>#@$hM5g%GDUm9UWAy;MW6e9R~M(mFfy2w~_zqrWZ zXlB)$eK?>M&h%x_9QM`ho_fL3bWc_4vyP}LgI%yHe1mIR9Hv0B9w`6K1FW5u&zXSLoPo#-0|$%NjL0?_jTK&yP2u_J`H(t zeMbB>*-MUZu(=a%j={wn%Qn?4&^w-8_uHvl7=MBL^)+&r81t(Ne{<6Zm#1w#>}Ob)=jzI z1UdI_T+9a>p_j08n3a8~aKWYx_RFX(@7cTm?NLUA5^k`k(e+D(_-Z;4MBMv6@mrbb zOy#Z^qCt=J0hNbdrA_*^0NSKE!e8?aVfrxdY5tmb{Hy!I8R`rcb($ICKsu@MZK4>4 zhyoQIGA=_ViDS7GV5g|Jc*(m0{D z6h>{eU%kPt45!3*$J!EDAPdV*D0X}(jF}lB{?fR>>f?bG$3uNE7L|Sz;ngm#4ychB z&8&>Gmp}no^Dr|%&O9MB_MrN%aiN9H*Y|g!*%VuKKo)bTHb3TfTbYqnm>FdmH^0OM z=GaqTG?3{Cq3S-=hKgZzP6f?sEFSDe>{(EJuhUuzm&D10&_Bi)$pkh~oaCQlGd^Qd z=xo_#CXd@z}t99yo!@hIWrK;xvMkLh8jTN!gI#JhiHcJ zM-9AX+E{>jE*oisc{CO*EsiBz`K#frqh z4bD&>shO4MJ0x0|Xa@|1rAS*!1&GdDYq|9bydj9jpebKFhE8@*%nr@sYC651DfOt~ z#k29i<>4`12ng*&nk+EVckBck0CQ~7FQvw18LxZ*4QAK_bK=xH9FqR0aT@v*s0aB3 z91<1Y?2F2ta46NfILH`9-({?(Fw^Y8Ry{RF_^xH8+(|(;4OSAOpvO2UGKPHo_Uhbc zaHP;y>%CTV7D$hv`@ZL&cH9>_;i>1GTX5!xplxO#ag*Gb#gV(BL+nk(2VOTmVPf~Q zD0WS`xifxaG1s4!AhqTD?1cAOSpSm;oa9K_*rD=`88{m&6&(WP$ax1bjU(%Wh=heZbfR z46pQdFtDqYo=j%VmELE}MrDT@ULluR^TM=Wt*T_jFv<{SrEwG3vKTP#;0^DHDrDi) z$(P>PjCww@OMz~-irnT~t4DjAH?56##@unf=WHG>k%u#QxReL)qCjyXRWK(o4>^9% zm9lJ_PnR&Rf!5ZnY#>=R&_l*F+{(*kxij$Iktm(jbYX&0`K`k}2s96AHwe8RId!wx zsSNg^MJ(;ruq2BePYQc3sJF@7l&@;%60Qb__FlN@W;3e^JgBTXc#y1mMj~k^YtT-< znEqxxu*PQmLOsSCcU)$6f8zlh0)g|UsZJ3@jzZf? z^q!6*Ye!R2f%tO+aigMNjP9~VB-NqvHx2_lL?2FLN{Un`dy81eGh9B&-HG~8FE+SuHSbNrJ1QyS3vBqWI)n{ydH z>O1AiAKxcV$F0AE)SEtO2Rd#E2z-3J%ygn!&-mzv%&2XFPrGqab2W$W=OD1_iQ0wc zPA&Q+$62wy{kre{!HF-KQMAntK9B^CW?9>79UEgYGm-1sIMXS>C7@71senoW&B3SJ z3ACwSAhR0j>(30F6Hd1^e<)3|+>-bakz!_YKd{r+@5HV3(9tgLw$MDwgX+=J1V`}1PzfuxeSFI(0bHpty4^Hh1n4IE9uxwEm*p_j>Mw%KLA;5W%Fp=qF<8B zh{F6gEaeRW+X~X2g~L3%Xu6SFGpj9@-p&Olyq(zyT((? zR!u;7=U$?-q}|Uhv+&LhqkxSR42w<-e<|rNlrS^_jy!Pw_NANIlqREUq9-mzs40d z>^i5^@r64R$OfNSs>CsTZ~1$H9(6y$kuJL@kyF2tgz&V4yZke3|Cr!RZhsrdJQ5q_ z$&;ar<(=jK4eZdGc!vHm<4MW=-ZFO`1nX~+e>MSohWN9FJ~XUkl3>;61;K| z^|iF~GJ>kOjr$Y|qTp-INCw7&!hK1e)FZLz1-uR^EEI+JS)Z0b_rRHq%<7YJw(P>4 z%vUzLmyF4|jaUtoM)O#*b; zZ@C2EP2-e)X{a^9h*Eiz-LbZW#m0|V5)UMV{r-r0*z$7IXA?f*44#rBE3?J~$(VG+ z4NlQ5kSL$BI1f$OX>!(!Y34E=D!Q8XiEI`FOR3R-3dMjoiOqg*0yDqG#f4QQNVLOO3z54Pbhsh6>*yk4Tk~dcqd2 zH!kAyAHSF-MjXQQYC0)vD-rA6_CrQn_e`53xRVFyw8xm6 z*E=QxG0CK7Cg#0L67nX66FEDa$Qf25-ZLcn%^`{KEsmOGHz#`Pjb1r)QkW>Kt7mxR zAngKwbD}W?;>nhccP3J4*_n>7FC$psMY&gVrmZfE4dTG;D4X%Hnr%5cip00%&=?G57W#CmbFrkaDB>K7H zzQmcmCeCr|<+#kF`r?^@vIQ;bLU)xKn;8NEiymQHB~Y@skxqH1om04k5uxOje?u5JtMEsMc?RAzS z6ud(kv|8IRY{sE2pGLv`>2l(@q-UyCQ-Jz09nbaFsAfQNZUo=EX{tR@2cXgcddk7m5tB zx^dk4h@y&Z2R6<^i5tS$2zmP0EbmfZKz2RWvA~&pL@V@O$y%C*loTxKp%o!7Jk*BF z4Bsw_!WSKvW>j))D*eLO6;B38lsvTDYSzy;(Ay_eV|vd@8?`13nQg&hdpiO|jYmeb z%OD-Y7ZlO-3R~(CcelqCoMzv8eolh-0@Np+y|p|lXGs){wyqIO5ZNhsFR*VQM$He2 zi3#Pv#3Qk6;~p7dN7qu3enewW|Hz0a&*&qXavtG{=1Lm^F_kF{57J~sR>?o7n#+w5 zq6NA{6m~DN|4JJ7(=xnfH#@zTZpu+>iwid8u(EIWoE?a|teewcqmE2*Mmaiu43)V- zv(|HY_Kh~PuV;H1jPJsoMypzqtV8I;{hM&hzA+AM2t;A_o|x<#6TNbntS&Ic>OsrQ z1id-FoAl_GwCtPW+rAQ*n#f9y@AY`(wos1mbyEEjz3k>nP0SBZC+Qv{xgh>jo0$WJ zU{urU@eNbJAjSZy_flve+uP1V0d8X zl^azuOX0&*tQ%$OaW6D6m%ZMvas_3yw`kMGFgsymn4PfEWG7tZ+t8_blMpI&QUOLi zqnvD`p5xo_L|CR}u~EWA4n6{>whoG%<0~*W3{mOsTbrnPFA};M@3UoUyn!35cww^n zixUkSuf|W$v3fXM8O>sHWGE(w>&uxOV^z!!<5pteIH|wb8R#0~2C$wOV!_E|9$K=c ztk?AkM>?ePXvJtI`>C8g7?Vt zOcWCH$&?8%^~BwLgDf3gGB2Gf{R3Hg^{Fgn~*#fCWiT>=4#biA=?(P!C~>rL0hC^(_xSstC`<3 zB=>S|{WnYL^NRuln?8|=w>Rc7WyjfNtj5$U$? z<-tA0&WZ0Swzim6qmdw0lky1s#0dOC{d34xhUHteFiD4pAy=g&ESg_BZ(g0NcW4iF zSajZA?H^C7va9L}EU|-qb?W(n<~ZMp6CO8lr1?HQ;o;a?+vH$cTk!ga^}w0_;yB;e zxHI)Yomyp1vm5J1Y1(7b8e!@h0bT}nRo^a6pXQUmN2{A?ZAYirXr9_`!Q%!TVOGIa z?=d#L778s2)Fr?x4>hC1Cf>-WK~dXF6%NJlkJ!y;Nb3%S7NJYgZhWBDV>TkS2d)g= zm>9Y-A#~#eBi0HgJcP2v3j&DXpab<4Q4Sk=89io8ySE2E2z(gmVp+eRxxVs7V=&%- z3eJ*xfo!X^`E~seiZep8kDE(W_m`eP7`x1Qn6MQEUTHZ$3!(82qptgt=ia#Gl=MDQ376*5`cw_D*GL)gwD(GJm zY@;3<+Ku`95T`m z5}y(U%?+QUTkO4LRV+8;a6;4QMqo&FEbjH@raTK<4)h~jGm4!iUr*?^r~$5#=XQHJ zl?@=9~&_*`zsLz2Z<--{d|_e`YwUa964 zx-p3mN*+dL8OTD&2~Q#)8R)sqF<`qbQ(`k&S9J+wv`!ZwPq4G^BP`;8dxdr~P7Uv1 z5M7!kBoLKO>;CnQ4-nfwDuRYv{KC;V|l=xPagy#RSyWiv#EEnM8OGUl8j1vfyP z60Io!O#aJ^zw+G;G}}lha(m}#Bn8x57IsmIebZW7I}K^$NXJuC5b_BKFe^??T6hZ& ze%Oo4|yxaI4(_WyxS zAHi{cfSw)4^L5O ze?;qOHmLe-L9VHb4Q{mI6y18(M~<7vz{(A_*=rrIJAxbSNB6N7(mXYe$Nv=V@X2bV z*3mTQ<6zsz0gfOyEz^DdFsz$qz`AZ~bOqa7zE9-+)mlf6AnVS+$X$&{(?qM||`>-|wSCNq4DWNx^DDZx_&jS&P|* zvD(OXi7fJY>x`%^Gu1s>v><3K{-)d386&pL91+G1ri}^aI#jAMqaAKwvP8FX%GGIP zWa4vMXN0!Q49%G5QHJpMkG^-DENgF&R~?XmnSjZ~gwxzQ zBYMkBIq)Q{Tk@vfPtI4Q+eu|Px?j42$1!WpTq%?J>iy8{QZ03x{?d;3roRfLx<+E= z=zuaOV3`Y0TL@?@1+-NHZf>@ANaljJaWQBcD?r=0610s?plw_O+QyB|;SHH~hB)tb zir;dX?=Mc@UkNdkjM|EsOFwZQ?dlV}-yH3N3Bv^&q9@`nHdJK9s@)ZF^bWwIbub0v z`z1wTJI4E=MU{bQ#*@H4U!Ox*1%IG0G>vyRc6|`*skQcGRQnz&tzG(AnRLo!bVs$t zG*=qvVw@-o?zM%0#!^6ACE(^}JXYdH`2cHhqkO?%3eC*Tr)#|TleY@0_JbJqCoc)A z{h!YlG}uO`c3$KCBS+0VE>4y9kAO3NuKzsQMdF@8RiYl>yU}KApD}Zm_h@)aX_m~U zR0}Y7$pWFr;lyeadnZ0OkHefQ)EQgP-Ey7^1@npRbz)`=V+1SqepKGy&zK)E{K}}! z++>j~TDnKlX>F$hnXmzXHFESKWsPVl5{{GYIqoURI+Ueep@re)J`V2_-UKg*(48q z@8-n?=Er5vvm;+dr_`ihEtvN!7rQ8&-5Yu)syLDRnr8Fg5VvSv>5_8h+e`&Ry?n_2 z_5GrA^!@Am_4t>4zv6%MPkp~su%uuTp|=aT8k2>Yjj_gn|JS}>on&o$FW?}?z#PX6 z<@I0RuYY~N7*nnGF!VkCXTD#d@w@pzg~m^3X%`wlTfqbc6BTqSxKP1T1&bBTQt)a8 zT?(ctxJ1ER1q&6dR4_@wYT)n}(_F})Duypw`0S43(ejb#dx`FXmw2HFwl&AOPqdr? z6C(OW_a`l*rusT3xLqUWtBu(#EiO(aYuVmbn=Cp#p*l%j}D8R zy5Bu4?uVg@HxNf1whwQ2m~T#|o!&9KZ&z=-w=0YG z_iXp#vIX31tZ1?!ex|Srj~+bwmhYezzP<~;#4|fhzl34GM7bIkIwnBJ1PMPxM;$u8 zIxq#AiVuaySATiny>2L^8GatuirXhL@peRaUHI&o zUFH2(LAD{+*syCnt`Y+N_4J{Fs-g@PG|nohG>~|q9GG!m&_EJYLF0!Cs#^t(vkJN_ zGLL2(7`Z-n`G+^#*LHT-I&SWKxv%9yk(&PZ)|ihRS9f;H^MABDy82=rj~nCE>&BKp z;x)PxO=f?)uoI~#X-Om3U!c12GoO63XZeR4{A)X(`Q+x#y?*?0>STUh1BSd(8B_h>otchf{i-gxkqLxOfn0qYx=@z_<4ps$dQ~ z&ax#1_+N+^507h^wCPh#>zmRVb66-RFN0HBulNC*qnby>yBCr<9_k&dNU8h_ zT4M#7bi(PTb`}q%Irf=PZ|+?F;onI&f|~yz2iI6RFe7~h&5Mr5KZx(@kKgor$;GDr zRGQj`^N+rX&TGeyyH&0(l3ZQq_;K&6A9VXZiEBO2q=uEfGtBH!T@e`^u7aT)o<#jG z&*6p7S~<*>c)#;s&fsv~`lhv>#hUsl<1xm0#<^Ftqi=QpVdNUwEB{<2n(OUwRi5?C zCyiY+%}e)0E&uR@{ie=tGz1=YT*Y#GoM_m2p$CevOdqGz(_Hmj*9YPp_iJ%R+s^1- zWiRRK4lljU1^4zZiT_U$KRS4>dM+}Vp=iwHNT4f{_bKCnj1;zsJ?cngPhjtOjcrJG z&*7Fc16}2J1~k7d>2UWX(Jj`Y4ZIINP0=2l8W*@`koETtcI9_(;hbCltX}xCTz1zN z<=6}}ma`y-P6SGf{^?g74|NZPd5qdf-7EI~OaD2HD% zQIW7H`@A0g;n5_G!+%_nHEW4 z|9a%X#LkoggvoG#D5nx-;2Pm`WJ%zqmo>FQ~d80e>eU^ zUQ&QH;-wmj6E99R^%pISKgO0uAQEGTa&l-~ZH1rf0b z&Bh3d^IT9KRVau0zXysWcwZ!{6z31SL7gqA+dv)4uC%Tm@lx5nQM?HKN{htuPXCi_ z5vT`2y-!fvC6*Z~!PolliA3oIJj?1Laik$02wJe@Q2%76|3fGSC>}vM zASf3pl)?TpBT=Ma^91FXpnM8rZ>Smn8+D2dgv5F=7(=m2!s4(y3AGaa`w24SC9y?| z*EaEb=u|J`mv~iQfY&$hVz?UqeQ>EwdkXUkMt&b$WYg>y+cYO;GG;1f8Kx1l1@rHi z-IyNCJD86#`Z$|*H6|A`A5)FF39}V*59a%r9?UzKW0;Xnn|3ZH36p`DkNG9(-i-Y% z%ug^+VD@2N!~6wv0;69-I+$xP%P==#zKeMr^CIT=m}8i;Da!;*8fG?T8Kx0)GiEF1 zZp`;FFOudxmpKg9|!Vgkxhmk*5jt3=6A`1uQM@og7Auf|CxO%n+Nxp-D{2`Cj%iR7WyDL}sf zpk0V*o&ne)K%0qa{~e(6T|nocJf*YZ7@PwroC|PP0eXJ{aQzZc`nWvF6~>hUb_vj* z0JIC(E?}2{9Z$;ZQ-EFpeF6prXio!51?ZiC?E>1n06U(MClQzJ6yWRu?0Oc^Cty&3 z>p4K70R4G@Q$V|b?E-cP&<_AA1+)v;A;9&5JP9a#5m5RPpi)4yfL#Jyz4G)1!1*R% z$6EmXZ9u7j?E-oQ3<}WS0h9`;6woYSy8zek#qCDcZ-Xs>(whO>MKq*SbR@LD1!zuU zW3%&eK;adDN&&kBbPDJbpiKbm5a7BJ&@5n=fWoT)l>&AMD4h)0?vhslodOC|0Hp#d z1vCq2S8l1|CZJP5uYf)Qt~5ZUfOY{p1h~=xy98(%fIb0(0<=tkQ$T4RV3&Yi0eU{b zC7@YAyMXNib_wX6Do-;3+9E)qfb9Z$1?Xi076U2;lr90Z3+NS~l>=M?v}*yS0-6PA z*8!XYN(HoE59kz7xD23G09*np1@sAURsu=|^a*fQ0SX0d7qCl!b2*^58c^5*C>2mC zV7q`_0{R5(Xq8t1x(DDCutPwv02E%5xPVdt?E-cP*d?G(fU^xyD4<=ycJ;KDCw&9J zDWFimb^*Ht^a{{!2B46Wm<3b{Xco{bV8>OPz$Kthz@PyA zR=}>UfKCB@0ytAlHUtz3Xcn+bK&OCS0eu1rw*hv29kAneK=XFMpaAU~;szMeD}bSl zgdPN-D~PN;1YpP`s-FY&hXJJm+6C+opg#f_`~{%%F#rrXEvoNVJaNPZyypOjI+4zs z0P`pM??f+N_`OPN*6OuM+G?#8xQ6FO>=jy*)}qz$)T*t+Wd+>3Nm_%J3{1hew8>gE z?+q%N1r0Sd&C{A1tLr`WO^sz$E%jB)8)~L45YNR`H`GjNX!x9OIQ@@D+jPpJQxtts z;|+~XYZ{$3Ygg1XOH?4`jv4k}URCX^YG`O$QDu5=In}SFrD~nCv1X04p{8-AN7#zm zL2#gu4q0@kHe;d|XW6>t9&f!T zSazaiJF%r4S6lBcY(`uy&3ezW>|D#e(6Xmnb}_azmf6;Osbw#;>?PQepX;snO6$Ga zdatwI8?5(c%l26ITFZaEWw%@QX3O4U+1o68yJg>rE&00JvhTIrcUblVmi-{M)Yl`H z-H9#q?7ItYwYa}W>xtM`V_$?l+j?)X-nUur4`E-1e=oMo77k%M zvGo(tI!E0!7xv}YOR&Y?gDt`go3SPTTd+kQaJ%Kc16$(Ti!JTv0Jh}+AT|c4U%{5TB^oW4@Stn?*jHmuxRMVW_A<oLnPm2I^i8I`XfY-QW>h-abJ67GTRn`k zE1WC6RV~$~yAY;vrTN?@^#uiR^9s>%tu)DRk_E(*eetiZsjc!hc$_Pm8pFYyD;kRUWsN?%>y+T2jJqGmN} z-kqzfnx%X-bfC4{Q7N6hADj#UYOQjid|W~uCZ!0&Aq;nSq#1YrkWOK zZBvU=${zNs^3<%YM|IXc(`H7>_&J*WgLqHsub#S=8YW6sw+)X! z&Py+K67A4{ziD-|jGWH7%U3aCJ7>$3P7NViWmRKSMW zEi_I#9DPIcm+DF0v*nr4r5M-{iees(_t0p zu+wzdXFAL|T_bOB+jKYzdLhrS19Z3nIxIYWJ8ru$a0YeQaytAu9d4Ztzf3O$w-N&% zPlpAl!{gIo*y%9JbogYt{x*1Tfrq^v(~B7t`xesQ1WgDBCqjo2p~HvJVLs^a9&{%0 zI?O;F&YliqPluoQIU0xS5Jrv;FGhzIqr-&J;l}9jVRYCqI*b|}PK*vCMu!ih!-mn} z!sswz?I(!%%HjECVP=`;b!xGeCo_|0h=PFdb(H?1sclx0G-=})?~^(!M? z3FBQ|HDygzOAYwbn!Phyn!L>_Y*ow3no{O@uXzB~8`x zB^`R7UDH;>8c~&NMtwug5Wba}`NBvN|C8&Wq^k7>v;4*NE9**XR+rX5UNdhqr?zxJ%6rTy@2C2YJdOY9!pHt^hX3D9U+5e8lR1(6B5iq| z*3?onZT5Ucvjxo1X2Zc;!Hlhh=hcdvxlSw9T9_HOVH$8HhLK% zw;qv_%^108W1E!@9KMrce<$6h+u<>X9VH71ygMy7@eli%w5DcohzukCo#2&5!~?ms zO5PhH;u0K*Uw)BsMTQfbIflr$1s;2iq>Xe>M`HKJcb$Z z=V*<~wKZ(ug znq+0$di@H}eedF~_%U4~$xW2KvX-#XzoQ0FuW@SvC4om^jC<*Aa33RGXxq~}g{xmMJ!WE<+kX!CvA{DnzNrcDtX&&h6! z#En}_BJr*jH?BO1aGRyVwx8_A7Y{!4$!;p_mXq9OtFZLHi1=nJyzM8sl`6bDPj*vy zcc0|8P~qKsvYWzV4AF!+KY3+seKoTfu6NR|M(xey7NHS)H=}Jze!zTBS}6Hv|4LgQ z6~;+Y^EJjMZ5w_TUh7&jxEeQ`>5P{9O*h?Cy&N)Y4d>X*vbA_tB+Z(l@`vX52)Aoh z{ydRx3r#$<#t-8yH1Qa>OgB%1nv1nZyeE+!W7?2^(zRw7q?fe2W67J!Y!VHGHgh4e z9oUm=%mQrVT|BHdqZlBzL}WOI-BNkf5^#%XTWR7Z@*(*WzuDe0#7%Q?5tq>0q7UPn z)`_!vhm`D9YWh^(m$#~NNRTi1wTqi*`uPICAt!0qf-G&{eTiVz!riFx;yxwo&O8Cmt;C6#6VP1`h z|IX8dIT3-|c^cd+2Zr-~=rp+15x5EG{^K&<7J)ncG`K&saD^Vtr@?&zT%pIWBf>mz znlR@avg#Wm*`G$Fv-dP%FG5{Xm@b2-!JQs~n~1=mr1?cZ$^S|VSL(I+G`L&Al`!{U z7e+*Q!GD_W;w1hNUYd+&VwMoMXv zVvAciy~uptw}%@UFoF~Ik1Xdk-INm}{$U!vM%+>_eb`bj;wN)*vBPSInGNF}w>>n4F

p2Bq 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

H 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

@B3BixqZ#;Hrq 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 OYAh4Q|MP#~|Nb9IpejlL literal 0 HcmV?d00001 diff --git a/WakaTime/packages/DllExport.1.7.4/tools/coreclr/coreclr.dll b/WakaTime/packages/DllExport.1.7.4/tools/coreclr/coreclr.dll new file mode 100644 index 0000000000000000000000000000000000000000..691dd40db6ace9e3f103bf9a10032ba87305d9a6 GIT binary patch literal 3784192 zcmdSC4|r6?)jxhWyGa&UvI`^{BtX=tXb@8u6kM@MU;`?F4S|G+3Hlaex@{F<7qJpZ z+^pm}ZfjfH+E!aBwDs*vEo}uB1xyI$4^aLW5vWF+>foljDCQ5Q+27}!dpFrYu(t2} zJm2S+Jag{exie?ZoH_IF%$b?|d!A8@ilUg{A`wLi;z@tm48IuI42qI8{?#Pql_7t= zGH96d=PMUfe0@dwvgHpyxcvTarGM@IhaP&^lm1^1q%ZeAl>YUH(r3;qO#jxyOCOjt zeE84|9d-DBZg9V{cjmOH+xf>gr~Ml5hc{(U{S!Z(Q(xon&S_)!&78L7H#t+khxaYN z$(~B#w)|$+)R*vFgXbUlnLjlH;nw_S=F~0x{@OI{naA(*zy7rfO6yWNb2$}dj=`)H z-tmvpXqZ;zsw;;Xk}g+HWGYH+5_@k>#=}NGClavn?>I$CP{0)YMW4#%+cf6FFHXtM z;Yb`0fS=mKwsnfKA5l+lo1!cr6s@-^FHxaf_!quaIre&-68_Ci%7P2O;eF;yHz}!j zzEnQ(f-;<_m=fUsrzuL^An_)79$4jp|2@Z$N22REo)@H_t|<3SnlWeol7-GZWJFQI z2!lK;C-IE=OQ&$lm)`HWUr{E#H3VP4qmy`^9vChgVm3(&rlcQ3u+}Mxl7%OD5&M^| zD0P#TejOo^Kl)I2iE_>4Q70bT{RLo=W8U>~( zT?ilZmre97f8d)BBOviy0q>PMJbNz+mm3r9|5rbYig&f1zR~vj=3%$keucj!Wexjd z|L}b?eQ&<>_e1o(_0r$#=zG^CzE`~Xw@jPd_Lb|D5>D7Xdi%_Ax7cLk)n=t)GkyD6 z-#4NQ^t`xqqV4sx#|EdjqK@J`*cYeb5WN@oy}QlZH-@IzWI6Ctf^JK2dCvr!eCUbm zl;F8<-(pjpVb$5LI%Siy2cn~FusnW?ZG#QKm){eqXeD%JLMKg#(omta!J{)PN`FN< zy?@a6?luMQ@3_GxlMq-8UpDd<+tT&aVhB@hJXJF!=Sx?7_n8z%pGC13+6n!ys)2rg zg^PTC+=p-bFhmNjT62r7+&UhWp((oy9!enF(v%&hUrpKP=;1qK@cs=M41!kMjd1`Q zcJxlM1$SrRbtAxrJ@on>z3!pc{q#!VZfv91V|XS0L{hrqCfY=^zr~vnjL%l88m!yu zhbu~AmA}P0x4xkx$87cti9BMFn=VsOh6_b|QL#8HD$O0U%r?*Djy$u?n<(;3j>Hw$ z;e`UPw8*s-SR|?mVwOqGGl^LiHP0eunbkaVXlkJt?M~D`C zEN(+&rAZu+P4JA|8hO-0*gkmVI>oogvZSnZw@Gm)2N!L+&L*F)0>_;e)!C{#+l15H z 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