From 5ce1ee54696dba17d70a99a94141463e6e987a35 Mon Sep 17 00:00:00 2001 From: davidsover Date: Sun, 19 Dec 2021 16:06:55 +0100 Subject: [PATCH] Add project files. --- Forms/frmMyDlg.Designer.cs | 134 + Forms/frmMyDlg.cs | 97 + Forms/frmMyDlg.resx | 120 + JSFunctionViewer.csproj | 114 + JSFunctionViewer.sln | 31 + Main.cs | 409 ++ .../JSFunctionViewer/JSFunctionViewer.csproj | 120 + .../JSFunctionViewer/NuGetUpgradeLog.html | 162 + .../5f884844/JSFunctionViewer/packages.config | 4 + PluginInfrastructure/ClikeStringArray.cs | 68 + .../DllExport/DllExportAttribute.cs | 29 + PluginInfrastructure/DllExport/Mono.Cecil.dll | Bin 0 -> 275968 bytes .../DllExport/NppPlugin.DllExport.MSBuild.dll | Bin 0 -> 41472 bytes .../DllExport/NppPlugin.DllExport.dll | Bin 0 -> 90112 bytes .../DllExport/NppPlugin.DllExport.targets | 44 + PluginInfrastructure/Docking_h.cs | 71 + PluginInfrastructure/GatewayDomain.cs | 273 + PluginInfrastructure/IScintillaGateway.cs | 2561 ++++++++ PluginInfrastructure/MenuCmdID_h.cs | 398 ++ PluginInfrastructure/Msgs_h.cs | 764 +++ PluginInfrastructure/NotepadPPGateway.cs | 69 + PluginInfrastructure/NppPluginNETBase.cs | 54 + PluginInfrastructure/NppPluginNETHelper.cs | 191 + PluginInfrastructure/Preference_h.cs | 310 + PluginInfrastructure/Resource_h.cs | 350 ++ PluginInfrastructure/ScintillaGateway.cs | 5162 +++++++++++++++++ PluginInfrastructure/Scintilla_iface.cs | 3047 ++++++++++ PluginInfrastructure/UnmanagedExports.cs | 66 + PluginInfrastructure/Win32.cs | 313 + Properties/AssemblyInfo.cs | 36 + Properties/JSFunctionViewer.png | Bin 0 -> 652 bytes Properties/JSFunctionViewer_Gray.png | Bin 0 -> 650 bytes Properties/JSFunctionViewer_bmp.bmp | Bin 0 -> 1162 bytes Properties/Resources.Designer.cs | 113 + Properties/Resources.resx | 136 + Properties/star.png | Bin 0 -> 811 bytes Properties/star_bmp.bmp | Bin 0 -> 628 bytes 37 files changed, 15246 insertions(+) create mode 100644 Forms/frmMyDlg.Designer.cs create mode 100644 Forms/frmMyDlg.cs create mode 100644 Forms/frmMyDlg.resx create mode 100644 JSFunctionViewer.csproj create mode 100644 JSFunctionViewer.sln create mode 100644 Main.cs create mode 100644 MigrationBackup/5f884844/JSFunctionViewer/JSFunctionViewer.csproj create mode 100644 MigrationBackup/5f884844/JSFunctionViewer/NuGetUpgradeLog.html create mode 100644 MigrationBackup/5f884844/JSFunctionViewer/packages.config create mode 100644 PluginInfrastructure/ClikeStringArray.cs create mode 100644 PluginInfrastructure/DllExport/DllExportAttribute.cs create mode 100644 PluginInfrastructure/DllExport/Mono.Cecil.dll create mode 100644 PluginInfrastructure/DllExport/NppPlugin.DllExport.MSBuild.dll create mode 100644 PluginInfrastructure/DllExport/NppPlugin.DllExport.dll create mode 100644 PluginInfrastructure/DllExport/NppPlugin.DllExport.targets create mode 100644 PluginInfrastructure/Docking_h.cs create mode 100644 PluginInfrastructure/GatewayDomain.cs create mode 100644 PluginInfrastructure/IScintillaGateway.cs create mode 100644 PluginInfrastructure/MenuCmdID_h.cs create mode 100644 PluginInfrastructure/Msgs_h.cs create mode 100644 PluginInfrastructure/NotepadPPGateway.cs create mode 100644 PluginInfrastructure/NppPluginNETBase.cs create mode 100644 PluginInfrastructure/NppPluginNETHelper.cs create mode 100644 PluginInfrastructure/Preference_h.cs create mode 100644 PluginInfrastructure/Resource_h.cs create mode 100644 PluginInfrastructure/ScintillaGateway.cs create mode 100644 PluginInfrastructure/Scintilla_iface.cs create mode 100644 PluginInfrastructure/UnmanagedExports.cs create mode 100644 PluginInfrastructure/Win32.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/JSFunctionViewer.png create mode 100644 Properties/JSFunctionViewer_Gray.png create mode 100644 Properties/JSFunctionViewer_bmp.bmp create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/star.png create mode 100644 Properties/star_bmp.bmp diff --git a/Forms/frmMyDlg.Designer.cs b/Forms/frmMyDlg.Designer.cs new file mode 100644 index 0000000..6278108 --- /dev/null +++ b/Forms/frmMyDlg.Designer.cs @@ -0,0 +1,134 @@ +namespace Kbg.NppPluginNET +{ + public partial class frmMyDlg + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.GoToFunction = new System.Windows.Forms.Button(); + this.GoUp = new System.Windows.Forms.Button(); + this.GoDown = new System.Windows.Forms.Button(); + this.GoToX = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.AcceptsTab = true; + this.richTextBox1.BackColor = System.Drawing.Color.Black; + this.richTextBox1.CausesValidation = false; + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.richTextBox1.ForeColor = System.Drawing.SystemColors.Window; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Margin = new System.Windows.Forms.Padding(0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.Size = new System.Drawing.Size(445, 278); + this.richTextBox1.TabIndex = 1; + this.richTextBox1.Text = ""; + this.richTextBox1.WordWrap = false; + this.richTextBox1.TextChanged += new System.EventHandler(this.richTextBox1_TextChanged); + // + // GoToFunction + // + this.GoToFunction.Location = new System.Drawing.Point(67, 12); + this.GoToFunction.Name = "GoToFunction"; + this.GoToFunction.Size = new System.Drawing.Size(92, 32); + this.GoToFunction.TabIndex = 2; + this.GoToFunction.Text = "GoTo Function"; + this.GoToFunction.UseVisualStyleBackColor = true; + this.GoToFunction.Click += new System.EventHandler(this.GoToFunctionClick); + // + // GoUp + // + this.GoUp.Location = new System.Drawing.Point(174, 12); + this.GoUp.Name = "GoUp"; + this.GoUp.Size = new System.Drawing.Size(40, 32); + this.GoUp.TabIndex = 3; + this.GoUp.Text = "/\\"; + this.GoUp.UseVisualStyleBackColor = true; + this.GoUp.Click += new System.EventHandler(this.GoUpClick); + // + // GoDown + // + this.GoDown.Location = new System.Drawing.Point(220, 12); + this.GoDown.Name = "GoDown"; + this.GoDown.Size = new System.Drawing.Size(40, 32); + this.GoDown.TabIndex = 4; + this.GoDown.Text = "\\/"; + this.GoDown.UseVisualStyleBackColor = true; + this.GoDown.Click += new System.EventHandler(this.GoDownClick); + // + // GoToX + // + this.GoToX.Location = new System.Drawing.Point(12, 12); + this.GoToX.Name = "GoToX"; + this.GoToX.Size = new System.Drawing.Size(40, 32); + this.GoToX.TabIndex = 5; + this.GoToX.Text = "X"; + this.GoToX.UseVisualStyleBackColor = true; + this.GoToX.Click += new System.EventHandler(this.GoToXClick); + // + // frmMyDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ActiveCaptionText; + this.CausesValidation = false; + this.ClientSize = new System.Drawing.Size(445, 278); + this.Controls.Add(this.GoToX); + this.Controls.Add(this.GoDown); + this.Controls.Add(this.GoUp); + this.Controls.Add(this.GoToFunction); + this.Controls.Add(this.richTextBox1); + this.Name = "frmMyDlg"; + this.Text = "frmMyDlg"; + this.Load += new System.EventHandler(this.frmMyDlg_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + + public void ChangeText(string text) + { + richTextBox1.Text = text; + } + + public System.Windows.Forms.Button GoToFunction; + public System.Windows.Forms.Button GoUp; + public System.Windows.Forms.Button GoDown; + public System.Windows.Forms.Button GoToX; + + public static bool isGoToFunctionClicked = false; + public static bool isGoUpClicked = false; + public static bool isGoDownClicked = false; + public static bool isGoToXClicked = false; + } +} \ No newline at end of file diff --git a/Forms/frmMyDlg.cs b/Forms/frmMyDlg.cs new file mode 100644 index 0000000..dd9dfa1 --- /dev/null +++ b/Forms/frmMyDlg.cs @@ -0,0 +1,97 @@ +using Kbg.NppPluginNET.PluginInfrastructure; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace Kbg.NppPluginNET +{ + public partial class frmMyDlg : Form + { + public frmMyDlg() + { + InitializeComponent(); + ActiveControl = null; + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + + } + + private void frmMyDlg_Load(object sender, EventArgs e) + { + this.ActiveControl = null; + ActiveControl = null; + } + + private void richTextBox1_TextChanged(object sender, EventArgs e) + { + + } + + private void GoToFunctionClick(object sender, EventArgs e) + { + isGoToFunctionClicked = true; + Main.CheckGoToButtons(); + } + + private void GoUpClick(object sender, EventArgs e) + { + isGoUpClicked = true; + Main.CheckGoToButtons(); + } + private void GoDownClick(object sender, EventArgs e) + { + isGoDownClicked = true; + Main.CheckGoToButtons(); + } + private void GoToXClick(object sender, EventArgs e) + { + Main.HideDialog(); + Main.isFuncEnabled = false; + } + + + public bool CheckGoToFunction() + { + if (isGoToFunctionClicked) + { + isGoToFunctionClicked = false; + return true; + } + return false; + } + public bool CheckGoUp() + { + if (isGoUpClicked) + { + isGoUpClicked = false; + return true; + } + return false; + } + public bool CheckGoDown() + { + if (isGoDownClicked) + { + isGoDownClicked = false; + return true; + } + return false; + } + + public void ShowGoUpDownButtons() + { + GoUp.Visible = true; + GoDown.Visible = true; + } + public void HideGoUpDownButtons() + { + GoUp.Visible = false; + GoDown.Visible = false; + } + } +} diff --git a/Forms/frmMyDlg.resx b/Forms/frmMyDlg.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Forms/frmMyDlg.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/JSFunctionViewer.csproj b/JSFunctionViewer.csproj new file mode 100644 index 0000000..3580a9a --- /dev/null +++ b/JSFunctionViewer.csproj @@ -0,0 +1,114 @@ + + + + Debug + x86 + {243AA53C-D41B-404C-A957-4BE14006D795} + Library + Properties + JSFunctionViewer + JSFunctionViewer + bin\Debug\ + v4.0 + + + true + DEBUG;TRACE + full + prompt + false + bin\Debug + x86 + true + + + TRACE + true + bin\Release + pdbonly + prompt + x86 + true + + + true + DEBUG;TRACE + full + prompt + false + bin\Debug-x64 + x64 + true + + + TRACE + true + bin\Release-x64 + pdbonly + prompt + x64 + true + + + + Program + $(ProgramW6432)\Notepad++\notepad++.exe + $(MSBuildProgramFiles32)\Notepad++\notepad++.exe + + + + + + + + + + + Form + + + frmMyDlg.cs + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + frmMyDlg.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + \ No newline at end of file diff --git a/JSFunctionViewer.sln b/JSFunctionViewer.sln new file mode 100644 index 0000000..461aa06 --- /dev/null +++ b/JSFunctionViewer.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29806.167 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JSFunctionViewer", "JSFunctionViewer.csproj", "{243AA53C-D41B-404C-A957-4BE14006D795}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {243AA53C-D41B-404C-A957-4BE14006D795}.Debug|x64.ActiveCfg = Debug|x86 + {243AA53C-D41B-404C-A957-4BE14006D795}.Debug|x64.Build.0 = Debug|x86 + {243AA53C-D41B-404C-A957-4BE14006D795}.Debug|x86.ActiveCfg = Debug|x86 + {243AA53C-D41B-404C-A957-4BE14006D795}.Debug|x86.Build.0 = Debug|x86 + {243AA53C-D41B-404C-A957-4BE14006D795}.Release|x64.ActiveCfg = Release|x64 + {243AA53C-D41B-404C-A957-4BE14006D795}.Release|x64.Build.0 = Release|x64 + {243AA53C-D41B-404C-A957-4BE14006D795}.Release|x86.ActiveCfg = Release|x86 + {243AA53C-D41B-404C-A957-4BE14006D795}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FAAAE0A1-788E-47CF-9DA5-1E4EAF2936A4} + EndGlobalSection +EndGlobal diff --git a/Main.cs b/Main.cs new file mode 100644 index 0000000..c617f1f --- /dev/null +++ b/Main.cs @@ -0,0 +1,409 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows.Forms; +using Kbg.NppPluginNET.PluginInfrastructure; + +namespace Kbg.NppPluginNET +{ + + class Main + { + internal const string PluginName = "JSFunctionViewer"; + static string iniFilePath = null; + static bool someSetting = false; + static frmMyDlg frmFuncView = null; + static int idFuncView = -1; + public static bool isFuncEnabled = false; + static Bitmap tbBmp = new Bitmap(JSFunctionViewer.Properties.Resources.JSFunctionViewer); + static Bitmap tbBmp_tbTab = new Bitmap(JSFunctionViewer.Properties.Resources.JSFunctionViewer_bmp); + static Icon tbIcon = null; + static bool isShuttingDown = false; + static string externalFilePath = ""; + + + + public static void OnNotification(ScNotification notification) + { + if (notification.Header.Code == (uint)NppMsg.NPPN_BEFORESHUTDOWN || notification.Header.Code == (uint)NppMsg.NPPN_SHUTDOWN) + { + isShuttingDown = true; + } + + if (!isShuttingDown && notification.Header.Code != (uint)NppMsg.NPPN_FILEBEFORELOAD) + { + RefreshFunction(); + } + } + + internal static void CommandMenuInit() + { + StringBuilder sbIniFilePath = new StringBuilder(Win32.MAX_PATH); + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_GETPLUGINSCONFIGDIR, Win32.MAX_PATH, sbIniFilePath); + iniFilePath = sbIniFilePath.ToString(); + if (!Directory.Exists(iniFilePath)) Directory.CreateDirectory(iniFilePath); + iniFilePath = Path.Combine(iniFilePath, PluginName + ".ini"); + someSetting = (Win32.GetPrivateProfileInt("SomeSection", "SomeKey", 0, iniFilePath) != 0); + + PluginBase.SetCommand(0, "Toggle Function Viewer", FunctionViewer, new ShortcutKey(false, true, false, Keys.B)); + + idFuncView = 0; + } + + internal static Bitmap GetCurrenctIcon() //Please tell me if there's a way to re-set an icon, 'till then, this function'll be sad + { + if (isFuncEnabled) + { + return new Bitmap(JSFunctionViewer.Properties.Resources.JSFunctionViewer); + } + else + { + return new Bitmap(JSFunctionViewer.Properties.Resources.JSFunctionViewer_Gray); + } + } + + internal static void SetToolBarIcon() + { + //tbBmp = GetCurrenctIcon(); :( + toolbarIcons tbIcons = new toolbarIcons(); + tbIcons.hToolbarBmp = tbBmp.GetHbitmap(); + IntPtr pTbIcons = Marshal.AllocHGlobal(Marshal.SizeOf(tbIcons)); + Marshal.StructureToPtr(tbIcons, pTbIcons, false); + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_ADDTOOLBARICON, PluginBase._funcItems.Items[idFuncView]._cmdID, pTbIcons); + Marshal.FreeHGlobal(pTbIcons); + } + + internal static void PluginCleanUp() + { + Win32.WritePrivateProfileString("SomeSection", "SomeKey", someSetting ? "1" : "0", iniFilePath); + } + + + internal static void FunctionViewer() + { + if (frmFuncView == null) + { + frmFuncView = new frmMyDlg(); + + using (Bitmap newBmp = new Bitmap(16, 16)) + { + Graphics g = Graphics.FromImage(newBmp); + ColorMap[] colorMap = new ColorMap[1]; + + colorMap[0] = new ColorMap(); + colorMap[0].OldColor = Color.Fuchsia; + colorMap[0].NewColor = Color.FromKnownColor(KnownColor.ButtonFace); + + ImageAttributes attr = new ImageAttributes(); + attr.SetRemapTable(colorMap); + + g.DrawImage(tbBmp_tbTab, new Rectangle(0, 0, 16, 16), 0, 0, 16, 16, GraphicsUnit.Pixel, attr); + + tbIcon = Icon.FromHandle(newBmp.GetHicon()); + } + + NppTbData _nppTbData = new NppTbData(); + + _nppTbData.hClient = frmFuncView.Handle; + _nppTbData.pszName = "Function Viewer"; + _nppTbData.dlgID = idFuncView; + + _nppTbData.uMask = NppTbMsg.DWS_DF_CONT_RIGHT | NppTbMsg.DWS_ICONTAB | NppTbMsg.DWS_ICONBAR; + _nppTbData.hIconTab = (uint)tbIcon.Handle; + _nppTbData.pszModuleName = PluginName; + + IntPtr _ptrNppTbData = Marshal.AllocHGlobal(Marshal.SizeOf(_nppTbData)); + Marshal.StructureToPtr(_nppTbData, _ptrNppTbData, false); + + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_DMMREGASDCKDLG, 0, _ptrNppTbData); + + isFuncEnabled = true; + } + else + { + isFuncEnabled = !isFuncEnabled; + } + } + + public static void ShowDialog() + { + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_DMMSHOW, 0, frmFuncView.Handle); + } + public static void HideDialog() + { + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_DMMHIDE, 0, frmFuncView.Handle); + } + + + internal static string ReadFile(string path) + { + string result; + using (StreamReader streamReader = new StreamReader(path, Encoding.UTF8)) + { + result = streamReader.ReadToEnd(); + } + return result; + } + + + internal static string GetSelectedText() + { + int length = (int)Win32.SendMessage(PluginBase.GetCurrentScintilla(), SciMsg.SCI_GETSELTEXT, 0, 0); + IntPtr ptrToText = Marshal.AllocHGlobal(length + 1); + + Win32.SendMessage(PluginBase.GetCurrentScintilla(), SciMsg.SCI_GETSELTEXT, length, ptrToText); + + return Marshal.PtrToStringAnsi(ptrToText); + } + + internal static string GetCurrentFilePath() + { + StringBuilder filePath = new StringBuilder(Win32.MAX_PATH); + + Win32.SendMessage(PluginBase.nppData._nppHandle, (uint)NppMsg.NPPM_GETFULLCURRENTPATH, Win32.MAX_PATH, filePath); + + return filePath.ToString(); + } + + internal static string TrimFunction(string text) + { + int layers = 0; + + for (int i = 9; i < text.Length; i++) + { + if (text[i] == '{') + { + layers++; + } + else if (text[i] == '}') + { + layers--; + if (layers == 0) + { + text = text.Substring(0, i + 1); + + break; + } + } + } + + return text; + } + + + internal static List GetIndents(string[] lines){ + List indents = new List(); + + for (int i = 0; i < lines[lines.Length - 1].Length; i++) + { + char indent = lines[lines.Length - 1][i]; + + if (indent == ' ' || indent == '\t') + { + indents.Add(indent); + } + else + { + break; + } + } + return indents; + } + + internal static string RemoveExtraIndents(string[] lines, List indents) + { + for (int i = 1; i < lines.Length; i++) + { + int indentsNum = 0; + + for (int j = 0; j < indents.Count; j++) + { + if (lines[i].Length > j) { + if (lines[i][j] == indents[j]) + { + indentsNum++; + } + else + { + break; + } + } + } + + lines[i] = lines[i].Substring(indentsNum); + } + + return String.Join(Environment.NewLine, lines); + } + + internal static string FixFunction(string text) + { + string[] lines = text.Split( + new string[] { Environment.NewLine }, + StringSplitOptions.None + ); + + List indents = GetIndents(lines); + + return RemoveExtraIndents(lines, indents); + } + + internal static List GetExternalFiles(string currentFilePath) + { + List externalFiles = new List(); + + string currentFile = ReadFile(currentFilePath); + + string[] sources = currentFile.Split( + new string[] { "src=\"" }, + StringSplitOptions.None + ); + + + + for (int i = 1; i < sources.Length; i++) + { + int index = sources[i].IndexOf("\""); + + if (sources[i].Substring(index + 1, 10) == ">") + { + externalFiles.Add(sources[i].Substring(0, index)); + } + } + + return externalFiles; + } + + internal static void AddExternalFiles(List list) + { + int lastSlash = list[0].LastIndexOf('\\'); + string folder = (lastSlash > -1) ? list[0].Substring(0, lastSlash + 1) : ""; + + List externalFiles = GetExternalFiles(list[0]); + + for (int i = 0; i < externalFiles.Count; i++) + { + externalFiles[i] = Regex.Replace(externalFiles[i], @"[\/]", "\\"); + + if (externalFiles[i][1] == ':') + { + list.Add(externalFiles[i]); + } + else + { + list.Add(folder + externalFiles[i]); + } + } + } + + + internal static void CheckGoToButtons() + { + if (frmFuncView.CheckGoToFunction()) + { + string selectedText = GetSelectedText(); + + string functionName = "function " + selectedText + "("; + + Clipboard.SetText(functionName); + + if (externalFilePath != "") + { + Process.Start("notepad++.exe", "\"" + externalFilePath + "\""); + } + + HideDialog(); + + SendKeys.SendWait("%(S{ENTER})^(V){ENTER}{ESCAPE}"); + } + else if (frmFuncView.CheckGoUp()) + { + HideDialog(); + + SendKeys.SendWait("%(SSS{ENTER})"); + } + else if (frmFuncView.CheckGoDown()) + { + HideDialog(); + + SendKeys.SendWait("%(SS{ENTER})"); + } + } + + internal static void RefreshFunction() + { + if (isFuncEnabled) + { + string selectedText = GetSelectedText(); + + string functionName = "function " + selectedText + "("; + + List filePaths = new List(); + + filePaths.Add(GetCurrentFilePath()); + + AddExternalFiles(filePaths); + + bool isActive = false; + + for (int i = 0; i < filePaths.Count; i++) + { + bool isReal = true; + + try + { + ReadFile(filePaths[i]); + } + catch + { + isReal = false; + } + + if (isReal) + { + string fileContents = ReadFile(filePaths[i]); + if (fileContents.Contains(functionName)) + { + string functionText = fileContents.Substring(fileContents.IndexOf(functionName)); + + functionText = TrimFunction(functionText); + functionText = FixFunction(functionText); + + if (i > 0) + { + frmFuncView.HideGoUpDownButtons(); + externalFilePath = filePaths[i]; + functionText = Environment.NewLine + " From: " + filePaths[i] + Environment.NewLine + Environment.NewLine + functionText; + } + else + { + frmFuncView.ShowGoUpDownButtons(); + externalFilePath = ""; + functionText = Environment.NewLine + Environment.NewLine + Environment.NewLine + functionText; + } + + frmFuncView.ChangeText(functionText); + + ShowDialog(); + + isActive = true; + + break; + } + } + } + + if (!isActive) + { + HideDialog(); + } + } + } + } +} \ No newline at end of file diff --git a/MigrationBackup/5f884844/JSFunctionViewer/JSFunctionViewer.csproj b/MigrationBackup/5f884844/JSFunctionViewer/JSFunctionViewer.csproj new file mode 100644 index 0000000..ead14c1 --- /dev/null +++ b/MigrationBackup/5f884844/JSFunctionViewer/JSFunctionViewer.csproj @@ -0,0 +1,120 @@ + + + + Debug + x86 + {243AA53C-D41B-404C-A957-4BE14006D795} + Library + Properties + JSFunctionViewer + JSFunctionViewer + bin\Debug\ + v4.0 + + + true + DEBUG;TRACE + full + prompt + false + bin\Debug + x86 + true + + + TRACE + true + bin\Release + pdbonly + prompt + x86 + true + + + true + DEBUG;TRACE + full + prompt + false + bin\Debug-x64 + x64 + true + + + TRACE + true + bin\Release-x64 + pdbonly + prompt + x64 + true + + + + Program + $(ProgramW6432)\Notepad++\notepad++.exe + $(MSBuildProgramFiles32)\Notepad++\notepad++.exe + + + + + + + packages\InputSimulator.1.0.4.0\lib\net20\WindowsInput.dll + + + + + + + Form + + + frmMyDlg.cs + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + frmMyDlg.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + + + + \ No newline at end of file diff --git a/MigrationBackup/5f884844/JSFunctionViewer/NuGetUpgradeLog.html b/MigrationBackup/5f884844/JSFunctionViewer/NuGetUpgradeLog.html new file mode 100644 index 0000000..7a1d18f --- /dev/null +++ b/MigrationBackup/5f884844/JSFunctionViewer/NuGetUpgradeLog.html @@ -0,0 +1,162 @@ + + + + + NuGetMigrationLog +

+ NuGet Migration Report - JSFunctionViewer

Overview

Migration to PackageReference was completed successfully. Please build and run your solution to verify that all packages are available.
+ If you run into any problems, have feedback, questions, or concerns, please + file an issue on the NuGet GitHub repository.
+ Changed files and this report have been backed up here: + C:\Users\János\source\repos\JSFunctionViewer\MigrationBackup\5f884844\JSFunctionViewer

Packages processed

Top-level dependencies:

Package IdVersion
InputSimulator + v1.0.4

Transitive dependencies:

Package IdVersion
+ No transitive dependencies found. +

Package compatibility issues

Description
+ No issues were found. +
\ No newline at end of file diff --git a/MigrationBackup/5f884844/JSFunctionViewer/packages.config b/MigrationBackup/5f884844/JSFunctionViewer/packages.config new file mode 100644 index 0000000..d4b065b --- /dev/null +++ b/MigrationBackup/5f884844/JSFunctionViewer/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/PluginInfrastructure/ClikeStringArray.cs b/PluginInfrastructure/ClikeStringArray.cs new file mode 100644 index 0000000..86296ba --- /dev/null +++ b/PluginInfrastructure/ClikeStringArray.cs @@ -0,0 +1,68 @@ +// NPP plugin platform for .Net v0.94.00 by Kasper B. Graversen etc. +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +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((IntPtr)((int)_nativeArray + (i * IntPtr.Size)), item); + _nativeItems.Add(item); + } + Marshal.WriteIntPtr((IntPtr)((int)_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((IntPtr)((int)_nativeArray + (i * IntPtr.Size)), item); + _nativeItems.Add(item); + } + Marshal.WriteIntPtr((IntPtr)((int)_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() + { + 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; + } + } + ~ClikeStringArray() + { + Dispose(); + } + } +} \ No newline at end of file diff --git a/PluginInfrastructure/DllExport/DllExportAttribute.cs b/PluginInfrastructure/DllExport/DllExportAttribute.cs new file mode 100644 index 0000000..60fbcbe --- /dev/null +++ b/PluginInfrastructure/DllExport/DllExportAttribute.cs @@ -0,0 +1,29 @@ +// 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/PluginInfrastructure/DllExport/Mono.Cecil.dll b/PluginInfrastructure/DllExport/Mono.Cecil.dll new file mode 100644 index 0000000000000000000000000000000000000000..ffe9b57debe72e460a2fa851d2870557e6030ffd GIT binary patch literal 275968 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 z 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¥Oz$yjIj1vGqg;92UeJF8d4qlid5a1}CB#i4 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 literal 0 HcmV?d00001 diff --git a/PluginInfrastructure/DllExport/NppPlugin.DllExport.MSBuild.dll b/PluginInfrastructure/DllExport/NppPlugin.DllExport.MSBuild.dll new file mode 100644 index 0000000000000000000000000000000000000000..c3c9de86a2cb42776089e8ee157ca5223bfd643a GIT binary patch literal 41472 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 P@*Kfp{O|Su1r7Xv!L!b_ literal 0 HcmV?d00001 diff --git a/PluginInfrastructure/DllExport/NppPlugin.DllExport.dll b/PluginInfrastructure/DllExport/NppPlugin.DllExport.dll new file mode 100644 index 0000000000000000000000000000000000000000..f673ed5ce1d567e6337dea83858dd141922daf8e GIT binary patch literal 90112 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≻JyV**{>*xX^1=I)XjiDTEGeEB=PA?=yywMsMtj5{@Lmv4NS+u~ z<^tu+^J;XG{(>l$C`fDZK2fF+c{=;VG>Jq(ug%6wV%&Vnw^8%~dR6RQAd%DSBI6CQ zpB_|!H=x($#@nJD$NmY81UevQ9VgL@Ue_D%i@O#P+AbFLy50Cle8p&^aC_Zjd@L%t zyzSyI)7FJP6K8S>+r_8T*M&Y8Z!PA0?6G_yK4(PZ!lv z;@-Q#o2}5by@wj#iFQVtf_L{0_`Vb8DfCG1ETD^3%DtTL3WZ){bUh=i!oBm5@>WK2 zHhw1_>x3qqNP5bd^PSisQ82T-7WuAGh}P-v#7zp(I{lrvTOsn+z88BHB5&<`@gbv4 z!M^3E`o0&RD>Sxz9nhC5<-BtE0b#op}iWh*&6KJpGTv^OORkvE#9(?Eqb*~!QC!*A^yg~rDc*-#p7ulv zmFp4hBzBzTc$oxx}m+m~M2Muo_}^wKU+DQSH6)-F+q#%FKs35hVLUC~Edw2I2x$ahP9 zv{j6@i`V+zZuHR}Q0T9HyZg(v%?&c;_kDZ&9c|w!65->C{(jn`Qzf#U^`cU{noHO& zGH2C=W7>@h6$8b!I~i>hGiDvqtF%`+A6b;K{%Y+IqbX-<#OhA=u9BF#o>M%unkI_a^(eFwBG;JE+c5M;I^?TbtOZ$p%yS9r}{SNx)XbYN2%6731Xr2~j zUABwUXJ41UK*LhXyjPB{iyW(cq4Hfg_fd19_6X;r8Stb3IPD{eg4gs*ipAO&j5Y@E z?zbN3UyAp5zun?^?MKCXwck@f<~k~2Q}DBXhIxXPtpYVyk$9*GE}xl}CX` zxoCv!s2rJw?x;+P6H~lLE7zx?y_LHKKDnXty_SyrA68BR9>z2z2X&vSF7Q00e%i@RQhr) z&PZC6I&E+YEjH`4i4yVt;0kS~LU+WLnJcvU3OyD}iWS-k3OyHF541v|KgV{8dTq5r zpU0jBYG$-2NVQ$5ovRSlb|trx!K>kF^JIngXmjETlTORf`ItT0+IXvZY6_hh--fSv z5|4U?yhD8CL7^@2E6onHExudeLqLjmWBjQ!^hg}9fTVb@ph-Fqtupuokjh7^Ob0rI ze9bAIs9K+f@~V|cwd9pfygU4E5$3Q zUY~}BRVQ)Uz^lVd@KVUXr22YuqsQ}~S?%J9@x^lV@LIJ|yO+_y5cTxg+QSM_PoJ$l zp%C@vCT*`m)SH{MmlUE=uvvRcAsPjnwGR}c-aJS9Od;ycbF?oNqTbx1eXkJp<`&Jz z8%GC2)SKsOnF>*Fo~sooM7?>Q)Wwbx#I?ayE zW_26iKh^FF9JhXCe1~d35qR91n$c9gTzfe1U8`Aq`_-eM`CY5j_^fsJlz!KGSo>sV z`h@kI_&ykXvG%UO6V{938wtKz`xW>wIKm%m^Zvk-)*I6uUrK$?dRzNc-G#RXzh^Bw zD;xHVb&2+=YY_H~^}vj5*!Qh(YoGe#g_A?yw`R=BhW)^5&^~p1@xjm!tREQP4;LQ_ zJ!hTgiTOk8fC-z`a4_^ktIiYlFV?KtLQ`#MI28I9>)yHaowPPxbfoyl)*p@U_KWU@ z4;%Xu_K!=BsUKS#wJ-Fui_-9Qo3N_J6ns}2UyJy9P0UQ=H3%CLAEopZd|!2aDfPVd zP>%0O?NiS+{n~!sI_3%ciB%#yBOg@0WhaY&V$~bpB=}ymW*Fbu%YJRYWF1&auJ!ok zr`E07r-CaEg??&%Yk4;8XVw$iry3FVGiy~#Htgrt<=UsdfUuuit7N@S(>!6V*FN>T z759cuSVJqb=}uaI);=}7@`dn8i&r>0yu56E*n~Z?@=)ky>or+F(==bP{!RPT>WdGB zUa@f4%T4#H71TcU^-C@)c-6Ws=7fDe^qTc`?F+VFdRO3e>zl@xzVx1=*RA8?)2l|W zTeCJXoo;`xTm8nz_V-KcOERa_y!_Joy7sBRUCOXKWX|P;-K%}-#kLs*zqCqal&-_x zuqtwVv$RjGYhO|DhUJ&-7smX4=nd;M?ZY_ouE3ktS;qHb?L9?rT64swxqj2S$@sW? z{HFC2<0IE^S+8VRBAxqN)|=X=E?AdB7!M*A*E!Hur;l>`)C>>iyisl^^g_WmdEiR8 zZPg~2PJ#a*@O^^s%5x_Lp9b`)-F2mR!MC^)O(e z`W|2|9UcEg;C!k2k~Sb|gX5XBt%Xk&0Qzy-gLGyA+KQn* zx%9#>p#>&%o`fW(vsb4LmTes8kxbot)w!A5H zCIdS9KTT*-w{10B+*%rJBlyyt2ji7ezB^yG7b2~#S^#}Yx1D^9&X+alQ>zfuFY$3A zO>)=x_X-ahL$^||KJ`BU{ptuHZukJi zy9|IhHwidi9H*r`BXM4o_>P-0e=P??YUIaOZ0SzgeA(t>^4p7!qg%~8lKbDc1+kqv zJqzVF7Po(v(&4x~VwNr}E%m9hMN2Ob$a5H$oW`)!TSgFt5;AKOUmL%CZF2h7c-s~{e5%!pCUb8&jU*gh@sb*FhA6bfj+yba@|_Cn!eXv z>4~r1RlvZ;3ZC`{)>Yi6GEU2viMC+6-&wkdwxt=+FD=4p7wm<7(hFP4o6E(LZ-+qL zYP5as7EBt@R@aF8^mUY2Hg_B6K8d*$ZPr%0<$B$^KVlqbeDbo4B=a$w8c9c&Vu9E| zJ?8Pcb?E7s&sfR}bvxQGtx4l`E*kIH+brkW{=69=R|Up)6<`cjh<_9DoQU(Br8rp_ z#W!7|@Xx{%w^-q9V+ij_+^goQhjAwHX&5%VV}^5E`0f)<0`9@=mg&z?3 z(O^h1be^12ZcwY{JP>RXOq*cZWM2O#r0pqWs_z9m1;0_^Y&34p?-}||(6UJ_1h`Xe z2Q|3W;};f%LRcHYm+|e72TI}QtR`Y#y7(4+wt~IC%;*_b+~;u-<;8;fcZ~l;XFc zwe~9we+(T&=wCxu*#ENutBi>MmB2ye!)n1b!vFPvDd5YN1dDnEb3jdBQc<)|=-(=E zpE`fZ?4sKd`V?X|ExEAhZnb*JU4e-GshVHoYz)^P?gM^Z(ZhnjU2++=iN9Sa+^+U7 zNx{vu$4%OUOL~eT_U9ngi2Y@ON0tl#b7aXbXZt zo^;Wjz8CDXFWM10X_qb8U;L_Y{)XMOa34al}J!$)vS55F^=i~dKcMN9Y^0o=}cG>bfef9R4fDuVM z6|ifG(H@a*Pe>RIHKQhw3%2?8U&^P2Zgm>`@)d`sbu_|_n1#P`1DTM(bx8v%$$u z;P*DC)G_tZ=Cn=ue{@2r7Z_1CV@XR@ua<@r6^n@)P{9TK=5Ec+VX3A zjzz7WV?EPyS746yT+3Gi&#GxF-V;+8N{t++6B5V`aeKB>-K`2g^>D=CK!fp3T7_C+h74!@*6Rr6|S z5SX6A2BF_6l5DoBFFvPaqj6JvyHVb|0@yo4d7ni5y(J@d-Sj(3*alPTPUP}PNxisx zgsVYQB8IXBrLa@8A@Cn1x2ykgu~qsI;+K?0>=~`Uwx9GZXuTHjlGb}l>+Sco-syYN zM=gEQx4ZRgrKCT*=mp_iqR!qHkGzE95PUZ-r2ohNFM6)=%39`0>Ck zQNK;MAF{m#m|Fs0gPU*y?8Em%O;WRyZ0c>j|B;3lqfP#oF8xKc-v8)|7o(N173F1> zh}ly(N$klao4P&8rVg{d>cV#mw=-dLp!pK>S=HHgW7#~LtJ+W6@wQvbo|XD~)|Y7e zWm&7AGH>;>r&tUAsRN&Cd#8+=@J`ta_7~eK3*v%r5NgdL+g9PT*=8$i1O6%1X;VrY zCEqrivYl=HTN~bQu-?<&KdH^8<=^hV5$>thC)*#M)GgGWw2!p^c+!*hm)rk5X}0y3 z*^%-d&^fz&Q0QDEaR$Zyj|iW$t;gH1EB}c9wf1A`BmTbv&XXFMY89`#xqPa1?y66h zUoRB)35EUs)vF#XAMrol{z&OP`97h%-T&`Z0snUYr&dk$ zPqh+(6Xg&2f4u6LnrgkiN=-h7vcsnN>sALQUt_PDgL<*J=YCLl7!kQ0^sibyb@Hu} z@9mQB?Lzr(n{WEuZSzf^XC>yd{_-`M$%p+f)?TCTL+McC!t()1`>>=v=wGnrw#mnZ z&y)Vk*E~}Guu$9YfB%}VPTuby0(=s!=Hbat8yQ}|=Jm-x0tINPP`D5M{#}9lP~-O$ zy()1Uq}Cdwbu@^?-jH&=B{dkaf3_x#_WPSPJw@-Jj1L6=A|-traUPp8VppvF!4yAq z<|_feZ~EF}%I~XQdskqRMfW6&ZmVG9+M0?;!BuM)R!l9pYwhxi=>-q0y|^N2)lF{< zO)q$K?V5_&1wUJRt(^oXJ5@~qd#(vSj%1$nz1%unF$wg03g>~_`vd6X)?I5?`uOhH zOdsEkn(5wA|Ka&w?hwm3M+lwqY2}Se*b_GXHq@n3vwi41=UTs$uOuo zEn+UWh}mcnv&nkI7sY7^;=8TK0Jm9B0QOkV0QOtY0X{6DM!t< zPX(&+Ij=8HtX65&IJH`Js1V=`_0JX6cnklA;%e2U>VUagwE}(s{8Z!39EL7eN2Ara zYw8)e7ps>m8YOg-z%GFqfrkVh6jMT}SwMGJLCeHLf;lYk z2r&0fJR=O6^fky;BCh!%3 zz7W$+7dS&;qrfJC%LQ%{7#G+jFe7k8;0FXA7I;M9F@cW>JSp%MfxaTiOW+KFvx`{2 zvx~k|a6|Fzq9brO34Xc2RtasD&{heJ3%*O>2Lv7wctRjPhmNvT32YSjMltI>G(l>A zB130REQ8D&#XTbMu)yPj$IIV{Ga~Siz{3KM3Opw8gus&mUk#I*Dq$*1V3ok>0-FRL z6L`FYF|AU@oG!3QU|irafhPr85s4$PIl@#U;yx_!n81?)t*FElI5WzaadD3bw8|t@ zV3WYOz!8Cm1s)T4QlK?S;tOmN7#BDq@T5SiT;d2E5qMbOrYXc{1U62kdy~Mb)97v# z*mRmN^x2Y4;*N_uBkn^2j|w~?P@T?HRRS9YZW0(jofIyl$ZjKRL5{0&hQyvOOy969Ux?NhPpR;3k3B&tS}| zvl-ebP`yWD3Tza(NyBr9&j>uE-Lr`~BrtQHxCI^+sOAVAfsFz;2|Ri}@h1eTYKbGT zQQ#(l8G(m1<^sma2s|Y4sKD!M$@$DW!s`X9`9e)#qrgo9GXf6@JSy;nK(#>P3v3j) zNnl3cA%RB)o)D-ON_>Hh0yhcF2s|Y4sK65f)gp;6u(4h&r@)NBLjsQqJRwkB$T(F3 z8wG9>m=SnL;8B4m1XeYWextxm0y6>+2|TLtOG)$SQpQvl2|of=(+_>fOW-Df8G%Oy zp3tzFaT;3)HwnyWxPq7y0@X^PBd}0q)MR`_|9XLU09x{`vt{Z>!M_GOL)$|i41FW? zeCTUMEyW)yez^G2;sX=!nffK{oBKLg&z+;8-6wXPWZHv z^(DJY?k#z+$1O=O_(%m(vnFRPr7CGOv$ zS5oRn#l*i-EYt+9oKO$^{xC833jChHH^W~7{y)NB1^k;}CYF#|Wyu4;^p?B`cvZ>I z0KI90rRBDh${R=HPm7R(cJGUj6P=5u|M|!sr2Wg34*~is_5q$DaH+s9f!hUsK;WkY zep%o%0*j|I)l7jG30yDmh`?_Nd_~|N1eTq~_;Um{3S1|!U*H~rHwyfLz?TL7LEz-m znYKpYbpnqF{FcCf6?6QGa`u-2pFaB)(D`lP7jR#24(TsEhnPljw+LKy z&YK9`DDV!!+;3C{sloQDy3E~sK}PT(9+wP0xpF91~= z7ME}?=<(3unQ+g89k*d^X8_iND)z-d&&J$%HsUl0Tnej=6F~wm0zFGL0@|txRPo&+ zK%9;MJ?x{whFh@Lb#Sl2ksV8|1+>vOEClRC4mQ5cxfpOg=-FxmZX>tQYg`2P6`*Hf z6@l>mu=_T855g-!+r~V9CGbPIJHW=5)(CfCrf;EVAsogPEH*y4PIxu)xA4WawQye} z@LJ@Ly>;Y_FY_T!8-33efO~Kks*OJAy@1!F&$88Cspk)3^}t5IlmPrNzI|t_kAN3j zeH6Ud=&O1G_u;eOwz?5Dj}sK&&PM+=1b7oTvT;s#81SFKi>*EZUTpMi*8$>7Y=E~Q zPg{Kwx!HKT|3iQWk%NtQu5SSRG^pC@R?x#r2PoOdd<%QejXvV`T}sa`XYQb*0;Y1X?#!J3HMV1pH^Rj`x$(t&Bj};UqR?|`0|>K zwRFNCs;>j{BS0HpA-f;$9}E16dH|T`1-^iO*-|e8+W7w1H{pH>&{ikZx8ObrXsh4i zTdFqhlsyK_?*MJ}2Yg}8R{xH7ig9X-U+PnT1b4Rj6S%YS2Iw<@e^%cI{0n%&9=`QM zK->BkQ1Ag_PuO}Mu)ul&u+aKfz<~8rz@YVWz_4`^F-rtStXF_36&ST%1HKH<#){eN zaF+|5V!Z*(WPugdo4`*Mc)Im(z@H}Y4C^;=pJ}}fSY`blaJKaa#5`Bv1=fE6Q!Q|= z^(WwK1lC!92EJC{Mb>}9-Dv#{u*tG4TV0AT-r@X-Rbb)F44{n_u>jn0KwE9LLU4Bh z;-)jKGTC@@XCg4$tP;4l3QSrNVBQai)`3y4jkU9Kz&>jV@F_qW>u6Kq-VSKveVfza zP6MLtSkvGh0<^KidnVvj)^xzD@$R67eGS5Et+RpIE$}+)9AGj6KWNPcelH+S_gUw` z{UL!LvG6@ZyeC1p4{z+DjR?HassZL>fM^|79o#noqIFpF;r=Iq2dss_d_v&Oc>B)6 zbqj=_vK9mXNk9u1dn|$bpukUC7XfoCAXlqKS`POiK(r341@6xQqIFm+ z;l5qqomML_cL==8x)k^?3B1Q@2mWqA3+Mb-!~JD}_gZU#`KrLLTOGiEP2hdjWx(GL zXsds=Ho*M=psgOXu7LX?f#0nZ7T-+BY>7VX2sz?D)3RO3z)|Q zK5iv|KQ8b))>h!Z3uvnstt8;TT2}&|w0ePm8PHa*SSh$)1+>*`*uA&#j@fp&|7fM* z{u3bjCVL1lZ0`h|We)?+wyy@9Z|??NU|(lV#21=<7}uXrj{?4|j>Gy!{r?77>VFe( zlK<;~ll{K|tnj}Lc$%NLQdRnYkG?RXF13e(nc(fgF9#n99t)lb{wg>t)DmhBeJAwO z(62(_qUl9-Ma@N*7Hur*F1n%Ub44S?w-n!6{7!NCgo`FzJ>lgE_Qa_ZE5nP!9pO#k zZQ(OZYD(HmeqQog$=fBhk%q{JBR543Mm`rg9(gA6&dQpZvke2PWS! z`6rVnPdRH!ddi_GcTf4|l&7X_skpAi*t zfA$ZWjuG8xoc=~E&Z)W)aoz)C2>yj!>`T7$W@sF9!B?trHU*u!xclG^Vx$nluLwWR zy3WK{U^e>q#i*YK{FVT}6!?qqYs7CE`po5cHsjZV-wOOzV$^XlMggt(U4q}G__g8J zjxok6^z&;#Z!KnI>(G;T;CGqa-NzGx-^DnPXMBtBWjQ{zA2UJmhm612_=}ByqVZ2O z{z0`&gs{WlcNqLG!#XI;vC?@(8*rvDE0VVo|*ZE}Xr%|1=<^X7Rc zo{V>=Z@;|1@FnB_lJWnmZ*?uxzYe@#EiV4K+Fk6k>L-M(-NkqK8cXi*JyiN$`}fhi ze9Ox2@O`jsr@g!Q7rwJ5ebN5iq&w~6@)F;3lgoU6oBVS%Vagr8tESi(-}vz>#4m_n zF@6*AI~_HJzlQcy_fSt_sanT^E}^LI?&(pkuPwC|q04daM0%{q z*@zv9fgQ=Ngt>-b0C!6y`gplvIvd4Ycc{!K_?wgI{!}`?xhJ9YtsJ-+0}0H<9ICa) zT%~Z?V6tb-%&Sd=>L$4x0(+A^9eqjMGBDVd(zKSv(}^q=_gml+k*nf^slF`IiK+}S zeTN75P%Od#QZ(^)i=N@;?5z~);&^&gdB+lt!=EWiVnDSrlf*y=Z?4cxOSZX~R#*61 zEJ&A!*)R}CIYF?eGnML*Vmenojw7mp6ygu!ZV81uA$i$ES}pIv#T}kvY32-H5}1RL zJ5Ul@Nty=nCH&1pgNd9N`nHhqDC*EL53EVn^s&?*(ak6SP5;u3OwD$4d7+h)t{p3wN4$GtQ ziEgPuWskANQ{9|MC%3}rn^i)fuAb3Xq)40`geQjBJ?3H}h@auBaPv>1dl@Xzm5IT$&=`ectfs-$ z=y(Q9G>J6|)!?$9Cy$0)#`D9yOphB%j`IU^dCd>cqosJT3#*l&GNTjNSI_*hE1{4Bl3k4R(E6HC<|X>^68QjS=b)$_pCBxR;D-a#E?7v4F0< zBd?=zVttJvbxfv{pn7H2{*F#ZTH|*Yu4wY3tiV{}U4o^{%!wm~H3Jj3ij1FJ=&nOs z5XVh?&ZU5&Ubz^?K}mUinzogi#3+>8$Mp1IsDh3l4XMcWVi>Amc#;?}W0jSdiSVL0 zns#?APaEHn7=#s$=`PLf($mra@{mZJhl@2Qw!|?$$qPW_mR%T?4{me1vewlKHaQXR zT_^X?%K!=-4kk2KGq`T3PfsP3R!}X=JSA%|!pslIkz;;vt_1VK^Hm~8fAfP~ZO9MG z)fTU&IGT{dtIB1~jO#|%NfP%_rW0MMzHY4%?Ow!IYK=_nM5T-q)zF20O65c~VNBsF zgg7v$K>yy2YSCP>IW+ZkV;rc*Rn1A!G|WmcB0(h^^;|ZrCom1(T=K-*ptH@xyDZ2! z*bMujnDOpz!=9eZr~!@(6S+7}0F0jN8#m1;LmINCY*Mp@x>>R4t9SNs?59T)V=Y1C zPl2oRcsj*&W3k@gWS%FH{|;w4Wo7X?lf8-5kRC`m?grz?%h8Eoj7oME@3`9Ieetar zstzR5GSh~_rk__ zFKmqW!U9`^pK$A34I6XsgpCcRkWvRa_g4bJ%TZ%}sX+)0x54UQXR?oA_c~aeQk#L8 zSF#W-xH8wk#>_3S-YQ6I4w3z4@X2Xi3|EI@UPm$IO!3pBDQ)x%4t5UJJn8O(ENsaZ3 z>5ZkisOH4zOU1gg>vc|50W0z}H3u?CYi^B=^_vS+W3l*PtcSP8#&8p7EXj3`Y{4Ww zYC+!`D?H}T{v8g)eRb1sjKIhV(ZP>^B z)d?`c8)F^S!)2LCn0sez%-k8P8=R3XV;kkAt%3-*>am-*At47dqBC*R9&u<} znCRAZl~0dSqcWoP8MA2`u@r*wdG#x}Hxf3H2D6OSLf^oGx$c!R@vsSv7yaW@8AgED zy`o~BLXfoNV=jD+;lkIf4!|loR(^a7|6f`6rc<%(&iGAR^?ZvyrZp!r-;(RmMb4nj z+p5ge?!Rfl$F<(>UEZjOQI^|XqD7F$YX4m=_W0KN)GW0uOgf4#R{Gs7w8sGFT4zsy zYnk({^1EB)d~58n#D51XoNs~0u)dB_9oO8He0Y9(xySJHDl5$oN+F zT|?j1!a8feAn#aL+Nx8ttoc^ZF-W;4@Kmg7KCSUBD&zjYZB56sq}_T7j*XYWcwd*c zx@KA~7Pz&I`%E$w=lH9&4VzEmb0T>nWCK?w24&-B6^7K#IG@Y1)!3sN>WO1xwI73f zy|XIYRw}kU*`p^3-5LQB(B(mGN#Oz|Eb!r?B)!Rlc>q@qQr&v~WhNf7^s5(dmklL( zt-Rh1NMxz6K&Pu096E-!Y)S4?9oSzP%ubatU)8jooOEO<37V+M-h%|At!ZsGbCZyL zZ0DLVHwULvaknQVif5M=TX)$o%#6FP#BA0Tr?VvpiS-XTvR$6auHxv8AK5ZM;p5%B z%sm^<6&taJddZ{>gLtA$kva}g z%>pSRxERJ^8Td5$(+LTWvtykmpYiS#3iPg#-YpQyg(4>g+A(<;Nc1E(>%Ltt7&)xv z&2K#=6Q>iATc{8+RgrZ+F5fJdcQ=hQRj)rQ0#{A+5{;(qK{BStOG2Z(9#P6nQzWll zohh@ifjHRoZ1AvYTP3&<{O(ORT^gO<_flKiLSw)9mXJWtJ2wwtk&0fn z`*o?*AT@q@s<#)zd*+5saV(Mcp?zy!bc<0k5HpKk&58a5R{Hz8a8Op}nchO0_T-)! z$VurIShe)_4-T)w1|vt=m`%p?o<24qTuf`a1G|C@yEK7z?(7ND=kTxEQ+=uG<%zCj zkLrvMK!utHy0#?;vF?kd7Odc6nuRi5n(XUFRGz7EIY5(JqXVdTUYf?A&5?-KbZZao zjkIaB4QI$9eh(pUjyjzw1U-3WT#4mi3PO4F&nc~&ugSwp-xW|EU1zmw2z!FPiE7zF zO7)u!0UVErW4*L*D@w>?5VAPsI=Q<*)qs4&GAGi@hNX*$x#McxCFqJqw6XDqo}IRf#ET* zK%qWHANz31K34X*SudAtS7EbTUA}06x_rSr)r#>*5~n1Z`i7lOq8&p9tRjj*bKGRQ zBY`s~+*YPFbUh4_ZD?Y}L5$lbh;=N8Ar99)-;INb* zLbmd;4qN#l=zOz0<_CM&$qRG@<}iZ;JlLXlvSPQMrHt*BY&o69L^Ld*)7EWwgmjwTq$s)~BG>3?%yF zSS^+#QG%6IQQ5YDhId&yfl(Vz8HpA0cw2LZMJ$M`?P=wS=fR?r&mJ+#9<@T>k?hmQ zhEM`$gr^M-CQ8nswYF5e+X*!LS*jzx1sz5XRT>u$#m)h&*y6;U-Y93F?8WIaIVYs# zm`9D<)41#`-3`>_|`7+h(8hSIG!(oyE4z99=qeeR5bs z`y9*S>;gJgkg}v8Z3o(Bey!N ziric@>1Tt?ZYNXbmAoO3*Ze3B*|91koFJxJ z!AbDW)WDTu5=lH4!#FZMajiPzF&jh&D~Ot_UCVxvkAMJlppNaT!}(<3`N8oor#0O1|$ybnw_9L zLoT6NQDB@ts^-V3#oYSJtrP0p zji+JkV&%shEsy*dIg-c^&Jj(1uvde}45iNI2jq%2KRid)`N2l``2nM~I6sD`zQzqS zs+SkeGYT9fm_f4fbq*wZ<@_>(+=;ytw=>n2+L;)Dk%|u_;~3Is11{s4`!NDQPX>V! zwRMZ0akeOQb_T@O2%9#<4zhNDkGj`6I6+1Fnq0>ze7&@}C zBvRHZD|MJq3fhcG=+^6M&g3nz#hhOkycaqzg@=kd%kZR?aP!=lG82dkC;bc96Qqi)c zG1aaHdF1Ja6D{Yp71(j{E9?gMrm$LP{LaZ=y*Hqb5GrZyU8u7JPR*tUx1qLDo8PZ` z5?cn5U$2ID5|6>Ww|K=43owd|v>Y z#@;is@!Z3(q~cDqc6!fdf)|{fR9*VKgB-6E?x+^}tYh4mY_XkS%ssy-65)7Mbz#j8 zd(}N|zXoL;gaSKVfxK5D>C@gLXU@hEqv1v~bi-I2$o6|!S1~I>q-~DA%Nz@Xcb<>; zqOcdB*R8qmkm4zup?=X)Scv1oW1Puu7w2!iW=gz6zbzsI^`?P= z_^{ihDj^|yl2!>BMQU@UFmr-ppaS(O7bAM6fCxEI`L`>94zan|zV?n>YWY#AG>Xxv(wfd=^4)q_Pzuwd*9FCWrCwiC{d#$<*RzI}be7~y94Ef9 zjF9nO)=bhwJoiBlTaFt z+Qr=JFzrmLZF#e zJu9Xz8mqMeXD5F-MW$NK_BJ0r`7w1jEIm>0vbv?N@p zIQD93mZB!tTjzB1`4kuFf-Q>0dhm{HPkNzwi3v4>Hz0Xnxk*me$!IDk59q*X#n`N* z4{G9Afy{YXn&)U12A8hs>KIJ*?~D(2;cz;8Oq?TuBh@dWYw3yiqp;qC%#@1^h%ss5 zYgl-134(>DpcBvwu&8vLY?rlIwkWK=qHm|HSsCV}q@w-eW&mt4A2JqTcuQaR>Me!> z{jF$=N=8O{sa}r|k+0sbHAnmT>Lm*5@iDDAg@jF@9awF|c+hzh0MRjEHVr+yYKmn< z4~2Ccnc!7r&P+ryd^x2T8X<==5@x@+Z?LWwt1W|A;)g(lyEXCT0IH50P(~)3&TWv2 zhymMINqJY4ulQgkEIBB7K;;LLJD|X=Fpy&R#j-RfAnl&?(yNQu(!CRrdG|Isr#O} zyB5sF-@JL}*KqNfcJAUt59U!=0_JGTLCVsou|V0uzmB4twwyLtEsYxnlRe4XF6aH^<#MmKjybxx8o?Ej)#l#wKNld0SfE9Bpvw%=_}h z((YIc(>oKy{M~G`M+?k)U$rM%gNdd~x0G+zIOL&XW6BZKhW2Bn9GyE< zVs!3aC4QH@krF3SI7l#&JTK~2JFh-AEXC<)3==SRYFOHX6V!S#r`58x+ezwa4X#{B z-^)tF(mIl2D>qGe4CYRucuxBqBef$|X6;1N{d8jB;$%1Wp|ky`E`m1odM4$;m_s;j zF}eGU$q7bv+(vQwtvoAQ6VJD-HC?0Zbj{}RCOXY0#Hp`w+`r+x;J3nE~j$b@i|R_nb~o&ggK8plH%J!T^RB@Pchaq6z6&a zHoiKxB{)dYul^9HS1(qjHemjp!iC{Lt-}Jq07mCX+}Dja5cQ;W%pm>p4-;(|J!>9A zlRNNb0KI5}HYQ_^>}x~1kL}x$97y$Xpue80TQF97>0G)#W|J+DxFppmKG{4Sl;)2Z z?EbKOG3WN_lo>o%%kW;)Y8ZU!VzTYvQoKSXEZ632j{TT?EM|WX$NZv_x76mw9lMz0H&3N845~DvdvlvLGF~eJf zaT*r#@DULi=wZy9cfwGU$YW!k!kHkx(v1O^l40ixzC(g;gsTsN7;Ak4+i$X&s^dA! z9?YZ8jEnM1yinn!jy! zBcWV!u#~7*=kO#8Rx>vrb&4~bnmP_e`C$pj0v}0n#$QSIa{%Z|m>0&E&bM;Br!cij zxWc%Mr%+s9_I#RNCE%$5_VRKL%GkFKm{Oilsa}&9=uMi%=&T#fBTLSStEVumbSOM# zA3d^3s98CszJi|_>DJ9FyX3>hqWk{Fj?Rn?;$_8pQ{~#@`Lccst<>si zEOCo0;>wy#tvL|tSr&H8zbBT?hRSH({+C0foOW_=4n5g0+aYG6W*Nm@^%C~$xF-ybR zEIQ3m37X9EohFuz=iph%Tyn0uc%;tu;Nmd@ax^Np23)kL zB-4nQ)M|$zJthL?D|A$Fg%h5hGje1)j!z|@lJ(i_R!Z(lPG@S=K0Q~}IP^r13I%P8 z4`W7`9W-daoZyBG!9LdE$Tn0-s)trd9IFS+kR0FV>D}BNM=KsMyB{7WlP*hjJ15uK z(Txh#qcyA#cMYV{sV#%mm>ObXPrqJ)Z8OI~6_%wcb0k|~64i&*Wa1s3oYgb$AOd09 z*qTiWth4F;)vVQR(1Vap@0J#2KbO0AB+d|L4y+pF!&W+ctgkL)Yn4kw@{xjcHAJIb z@AhRx#Fr26d19-Q7JOlQ4Zix#fB0BtjvpV%%<Z>8CpE{9 z%Xf49^*R0;aO4fI8O2|X%H^*HUlz}epUYnjzBZm4p37eizvJrRr-s)ZPmJSx-`G&Y z7rp!V5!SLKp8fcmH%Qr}J5jxIMuABYs!ow;Nw?)iPd#@2{@I z_gCkV?>roM4=h7k;Pr}sfPrwB5_b>j@U_+k`sef3#9Fp zd_i}L&Ls{i-H7Fcs&b9T_b|NJskuC+K{X}3sIqOy8~d7|izD%HZv{Vn@MGZyJf^^f zE~j_b6wOyAlh{seL%mpB~-*oA-O zi*m%fJg6(yVh?;Vgir?5O?(6ce)1)poZf`;cy*{rVo`V0jImPf1dTyZHtAXIC8(f8)d*N2+IWd>Pw?(+dIBV>E+$1qfl;YQF$T7srmE`5S=Oj|`NV)2xs9Ppm##3pG~AqT1?d^^=wxeGmS5X5-|Yj)=*}~Y-zLDyOA`-P6jCoiiS!;H>-iHQ0c}O zeKup=g4svuK7|5W4T|0GE}*m5xI$=!@W)ZOCMOoTaqOqIrn=%&5NZtlQJZj%V@K$( zw1w=IGOPKcDdbiO1*HRMxfCqqr7PB@iELrx3_H{^mMrN*e0x{LHyBs*z#ds#i#e6qWzreyV< zlys|8b?cCV@z~Z_A`W>55ML|DR=CMKjVR4<4|3qQ_jMX}yi_5Fx;H(`;&e*c%24V5 zep*u0mO^(9w2n^K;BcU=9hI0JBZqcS#k1Gp*$WJ%l~tiFC|e46)0uX38l|U%Nr7>_ zZJMQJ3A0@wIqDHy9Qjc83D{HJNwBf0%qJb9xyFscuEkHQ6GvhcxE{}qXWX^OSB{G7 zrOPbYAC0bVGS!cwaxA5*Rc$yGz8s-C#z}V{UTUK|GnM(SLwFGKp!~ITbJ@xzF=*uO zEs7Qo&5yR+QROs0&EOCRCDF#IH`_3*CblUT=fiCozA6midEqjx0Ed98q#Eh6{hyk# zTUFtbs0#q89Nl=*%vFs_!$GIk_FmA?@o7e>!zz+X6M3FjCGCLY2p*Z6h0C1I0Y*U>HvD~Bpj>=UVw zB5hZdOk!xOAOl}D>V+w&C!WdCnfbUXlxmkLn<}`R6W_C|!DH^Aoi)T!6dQ0Ka)7jE z{MWG*F5GrHF;%dboE2;Y1wu@Ai_e9WX>Fhz0rQ+%rOtvzXdi8#o(3&JnzNWbR1KNM zp|z^uLi%^_gpWLFt4Cetbj~}m)wt1<+tKp#N}FN)>GE=FtEXbrU0PlCRqX4$y07(x z(`v0@t{)t0j4EjZ)y+n;5Oa$5cY-2&J-0=*Py*EMEzljUbu9Y@qCd=+yd@-z`llsE zSq%!V7PzxSQksT3vke1>Wtdtv;dce%Yns)_gT0-z@Ua@9ow)Qx1q?oR0rDYdDGW(c zdHJw4kgu~$JJ8D?no~W}yc!(<`MVm+Gx|BtJm=%7$}Rv^woy*Ileh>JGMT7Lz8R(A zk^oE1#ghfNkPfw7O#kKLQ)P6wg5xGkzgjWkXh&*F?o!Yh#$`CF#OrHBtAJGMbc>|^ zU4!5W ztn;6^3{O4!1hzOk%~v6g5T%dtos0Oi7I;S1iM(4O6W!~mz%E!VEa;)785c0r7>yCv zRE{N`F(=-k&89BP(sTMYby)}Gp!-xxoD!oI)#D;P|EZSTz4J7!cbqvgW)nDPS=r)Q z?(Ys9>aLu%kX@oO*wb@M*kO33hNyUMn3j)jr3px* z6?&vCBU^6=N;V)CSKG*HjQ@2T(fXz*JY3RXDzlgxS_S#Eqg|_Vy+EpMkBgnL9O0a+ zwxTpEL2)&n>k)qy+Iy?`RQZ_LrVfOzK&%a*uns9UA|DRwI1c8*8prD!QHoUv>qJbB z{i)eI5jMbn<;*nN+LcmDYJe`wI)t+Q?|_YAk2?&C94o017ga^Wri~sobs}UyS{jy9 z>QA+`wu2Yu%J$BuYCqMK`HPHWXbWz>dUEICO&{Icbo10#suw)>g>zK!fvYyIpE~cv zM+(cM6Rl`PfR9M#CA%;jD7CCJRJ1%)YTIYvwy`s;qEg$ZU3Q5;nPT;iS9!@pRX`7$8Razv1|hrR{5-8I1Kj7h5d4W6~qB&WwgmZOPng2dAbn9 z@PHYNW)5i2fubs_JlXRe%)ABUex}%mV~< zS#L##(NJX=nj^7=i)PSiMlM#g98AOWUi{*IrK0a8h!-fxEbdcKg&=VNabFPCTo~P&Up^OPsz*;ho!cdYL=v8-7yuPj1BG~UC;|v`Ga^s1BenA91IDE{SZYMHK={` zQ%fO0<)_nMK)_4-{JdF^3UgC1u;|UtmQ_E$9$LMd#T%J`=7C3KH>6}2LmeEClxGA= z6xj_zNGq(4KoKIlLnstAWN%oz!VqUr1QgBOtx=WGB{%Rm1GhtO?gn>Oh_Vr15nXF- zBtM>YJ{W+AGRM&jScPF!)$sylSHe%}=yY_MbguJ3Dtv{gS_QMvswq0Fov6|ZFrqzF z=n7KQURF~tY#kXDl?4-M)0tZ-wnL(|nM2VEG*B87t>qa!qM1zCDfw~6J+8x!LwruD zG9N*-;}9PaWLG1COno4lxlza*2t%o~Kbm<0S_(Jh@`ME56qd)0FcvnYwLd~z0!7K( zY^dEVsUHLa=_=5?fj`J>L4v9!uG@;FjUR?c9}c1>)&X2JTvfo=o$xJyeEDE!{KWhDu<=(kUShO(*-S zFgq#nLq2C%A!S34NAMp8!j9~Y>@HTeW6sc~Z7Uc=zKHXZj`|W@QrMR?J1@cBL^CJC zVe}8-QUuBm%@T?NAO15rVo(k*iAY|Gg7;|V9&rCvT~90m%v$FDAc@@z^9Vm%J05K6 z6HTGmzn!6iiaPX53tc8|1Es>3VIpJ$GQ13ZD|*FQa{IUD@r}$O+yJip8HMYm(TA}k zgMVE|6Yr|TPPU~YvCsW&%JEJ1@@Q@S(HpMqdtd+2-LHR7HQxQ%zSo}p&ccb)emQOL z?3e!b?QdLhc<1-dK6lNnZTG%#N&WxTb>7;2g%@8^cE`gHeEiPvs~6t(>gW5Xt-inU zJL{kSeecm%;rWw@zKcln9v}*vXT(S6}1?I zhS@=yiuo8$m&u+JdRV!6sW=q00DD4GG7pUhJkM}_~=MI@JNa$dPRvBor^rsaHXYI%HXH6 z5>t8vwn_yRiAzQz8r|-q+w}ki1{&HPah#X{36g=a*U5{M@{SFo*`muZ#$A}iYLR~WyB13nqm zMHk5fjejHv1A;2JA~Nz`2zeUH9T|z2z!We88Yn_v5yk|1JQ#qB<4y&ws3a0&N7i?} z8C}o;OB5Yh0wrme+S@IaJi&*tnbuMnERK}Y#zPx)Ns_GaXnQnS1bz$(;T&1Q21b(@ zCKWUOULRc1B&rC{qAa3Mgwudkrj*c9}u=3)->Cur%7z9N}K7x3xUhwJ0b{%#wnzW-Mx5VnJYD^<4hLY9?#;tI{^{ zq=|Sh+COwSE;fDSp&;*_=HC^Tx-@&F4e!|FzQT^dq3&d=TE7j0EX}Kw&2k%KV!%ao z-~_8aqc7(u`Q}BiMmQi3?2SgY<3I8eO{B%pV`HrrzCv1@5g2Ni$jHd!Fgh|Sdr&0% zAd+$9sT6b~JH&tukRgLa<`|N8Em)=|1wt4XV4wmeLWSsmAb}nVe~5%Zy~(hufYvcA z+CCHV01r=s2S{h+8PTnvW^5MPqU{R=3ee7dG@LNSFq|WEN&`viuGfEt1XBdYeEsadnZXy+lkEa_XLX25`;2>F)TZ7 z=oq^K1WOEFWws|39~pTT<(F%=6&z^d_=7|LnF1dSpe$%2L6OEhtsO5+)pD~`r#-Q$ zrzf>j?o`Dq$E-rkJ5Vy%@UTB%LyR)P(d8LNd1UUg9S&+8CM+1!jhxKfTy0(VE^mf- z-V*V?88WBJxn_1wl{po;q*m+roGSC$*^<7*5Z*WHnN#JSAnwF>?fRB%Ubrwmzia-2 zn)cWO7PAj0T>~^GkN5n{=IGSWA!qM#pF`7hQ43$At^u>^HI9SBGfn^DzniMdV zOpN}kl4k2L$K?-(!~)PYBM@@3hfiwP4RdsY{q-~-`#qAPrxKT^YiqKXlV_^S-O^4t zopM^&afHY;2pvig5zL%x57ufjcXK2HUQI(}Vm;e%dA!@@@ovyT_bi0jr-?&T(KCIx z%hZa%M3-7tuMwF!k1Ue>kLMN5LEH_|2x+kh$1yauI5g#G&5G<2>N53|!m6Cs%jXgMc!fq?W06&Tt__e|6O zCzM)Pw<<-yg@2(UNc}QM;MOVZx5btFppC*}Q;5|g!KDFbnqWE;tlw0!RUNc~=m^ms zivvCo{Oo|eiV*>nEHKnVH+ zgTm2gFi6d3|HuV| zq|)8&6!~VE`R|!e+$2h0V!>nhzL{CyN2`4?T{nw`77Ecl^~OT)sW(JjT6^lXRdz#8 z$GlI*AgDk++@kn2CJ0&YsRwO68XIy)V^UBLgSUZc;q*2c>h7WShlR%zGgg-LARNb+ z1km3NvpiA?mIsXmW0E#;z!)4rVVvSQ$z7v>YJqg1vNRhvOGk#4K4ACMXN%WrIN1Y- zPiTxCyHdAd4#A)9R2BYnqXz1~9(AGQ=7^ z00G4vqR~AGCwDk>?up3(R1Rk8$I(k8f`g{^t&s+<8?1Iq9ReS&jOdL15m9UMvIjW=1>s78c|LS(a3{R+D zG%4d*96%72Voxjn!}LEK1fS78y(Zj|t5X7RT0KawWN$nlD_rQnD#KF(en?R_1E|e| zj$VjHprPLc$;he)M){SHfnL@??@@V%%*?o|p{?ug0-B~^A?L59!7~DdkRtqJ0IW=) zn)Px;cv=7*DE>Gg!g93F*f;Y48#*2mV1>dgheY@6rCMd~VWZ#k5j502`(d#G!yN2a zhB2`5(HEvI&fJe)kA~w6nrSS4h$oD$3$_cRktLYeV1S3nV$WdOC4x5booI8$TMSxg z`6EP4#u~VtLr*{^TO_~uG;vb&D~pY zf`0-Ax;53c)eB_QY;lDKe`l~G>a-_s7>M`dEqC`N5PYTr?;gr9?wwb!UdN~$$yWk1 za|iOg+``gKbH~C@pZD~vi_f^^fyCGPCT#d#FNt zmgn;IhO4u!P4ZWxeCOd`m5IZ{&OCy_qityL*f@?Ny^~+F;z12=0VmCI6CM)c9}mFg z9?GhMB(ul9a4-q{U|#IfS`S)0*ZFUjy3j{?yHQU(TAG!{snx+ese@b^qibSxJv1r|J8%eK^g*_FOIN2B bKqj?-f5*Rm3!Er*6J9a<|Ns8alfeHC8XNyQ literal 0 HcmV?d00001 diff --git a/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets b/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets new file mode 100644 index 0000000..66fa365 --- /dev/null +++ b/PluginInfrastructure/DllExport/NppPlugin.DllExport.targets @@ -0,0 +1,44 @@ + + + + + + $(DevEnvDir)\..\..\VC\bin + + + + + + + + diff --git a/PluginInfrastructure/Docking_h.cs b/PluginInfrastructure/Docking_h.cs new file mode 100644 index 0000000..bb256da --- /dev/null +++ b/PluginInfrastructure/Docking_h.cs @@ -0,0 +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; + } + +} diff --git a/PluginInfrastructure/GatewayDomain.cs b/PluginInfrastructure/GatewayDomain.cs new file mode 100644 index 0000000..7087a1c --- /dev/null +++ b/PluginInfrastructure/GatewayDomain.cs @@ -0,0 +1,273 @@ +// 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 */ + /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ + +} diff --git a/PluginInfrastructure/IScintillaGateway.cs b/PluginInfrastructure/IScintillaGateway.cs new file mode 100644 index 0000000..7b15765 --- /dev/null +++ b/PluginInfrastructure/IScintillaGateway.cs @@ -0,0 +1,2561 @@ +// 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(Position 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(Position pos, int deleteLength); + + /// 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(Position pos); + + /// Returns the position of the caret. (Scintilla feature 2008) + Position GetCurrentPos(); + + /// Returns the position of the opposite end of the selection to the caret. (Scintilla feature 2009) + Position GetAnchor(); + + /// Returns the style byte at the position. (Scintilla feature 2010) + int GetStyleAt(Position 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 handle); + + /// Delete a marker. (Scintilla feature 2018) + void MarkerDeleteHandle(int handle); + + /// Is undo history being collected? (Scintilla feature 2019) + bool GetUndoCollection(); + + /// + /// Are white space characters currently visible? + /// Returns one of SCWS_* constants. + /// (Scintilla feature 2020) + /// + int GetViewWS(); + + /// Make white space characters invisible, always visible or visible outside indentation. (Scintilla feature 2021) + void SetViewWS(int viewWS); + + /// Find the position from a point within the window. (Scintilla feature 2022) + Position 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) + /// + Position 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(Position pos); + + /// + /// Set the selection anchor to a position. The anchor is the opposite + /// end of the selection from the caret. + /// (Scintilla feature 2026) + /// + void SetAnchor(Position posAnchor); + + /// + /// 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) + Position GetEndStyled(); + + /// Convert all line endings in the document to one mode. (Scintilla feature 2029) + void ConvertEOLs(int eolMode); + + /// Retrieve the current end of line mode - one of CRLF, CR, or LF. (Scintilla feature 2030) + int GetEOLMode(); + + /// Set the current end of line mode. (Scintilla feature 2031) + void SetEOLMode(int eolMode); + + /// + /// Set the current styling position to pos and the styling mask to mask. + /// The styling mask can be used to protect some bits in each styling byte from modification. + /// (Scintilla feature 2032) + /// + void StartStyling(Position pos, int mask); + + /// + /// 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 winow or inline? (Scintilla feature 2678) + int GetIMEInteraction(); + + /// Choose to display the the IME in a winow or inline. (Scintilla feature 2679) + void SetIMEInteraction(int imeInteraction); + + /// Set the symbol used for a particular marker number. (Scintilla feature 2040) + void MarkerDefine(int markerNumber, int 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 set); + + /// Set the alpha used for a marker that is drawn in the text area, not the margin. (Scintilla feature 2476) + void MarkerSetAlpha(int markerNumber, int alpha); + + /// Set a margin to be either numeric or symbolic. (Scintilla feature 2240) + void SetMarginTypeN(int margin, int marginType); + + /// Retrieve the type of a margin. (Scintilla feature 2241) + int 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, int cursor); + + /// Retrieve the cursor shown in a margin. (Scintilla feature 2249) + int GetMarginCursorN(int margin); + + /// 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 filled); + + /// 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) + int StyleGetCase(int style); + + /// Get the character get of the font in a style. (Scintilla feature 2490) + int 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, int caseForce); + + /// Set the size of characters of a style. Size is in points multiplied by 100. (Scintilla feature 2061) + void StyleSetSizeFractional(int style, int caseForce); + + /// 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, int weight); + + /// Get the weight of characters of a style. (Scintilla feature 2064) + int StyleGetWeight(int style); + + /// Set the character set of the font in a style. (Scintilla feature 2066) + void StyleSetCharacterSet(int style, int 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) + int GetSelAlpha(); + + /// Set the alpha of the selection. (Scintilla feature 2478) + void SetSelAlpha(int 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 km is pressed perform msg. (Scintilla feature 2070) + void AssignCmdKey(KeyModifier km, int msg); + + /// When key+modifier combination km is pressed do nothing. (Scintilla feature 2071) + void ClearCmdKey(KeyModifier km); + + /// 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(); + + /// + /// 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 indic, int style); + + /// Retrieve the style of an indicator. (Scintilla feature 2081) + int IndicGetStyle(int indic); + + /// Set the foreground colour of an indicator. (Scintilla feature 2082) + void IndicSetFore(int indic, Colour fore); + + /// Retrieve the foreground colour of an indicator. (Scintilla feature 2083) + Colour IndicGetFore(int indic); + + /// Set an indicator to draw under text or over(default). (Scintilla feature 2510) + void IndicSetUnder(int indic, bool under); + + /// Retrieve whether indicator drawn under or over text. (Scintilla feature 2511) + bool IndicGetUnder(int indic); + + /// Set a hover indicator to plain, squiggle or TT. (Scintilla feature 2680) + void IndicSetHoverStyle(int indic, int style); + + /// Retrieve the hover style of an indicator. (Scintilla feature 2681) + int IndicGetHoverStyle(int indic); + + /// Set the foreground hover colour of an indicator. (Scintilla feature 2682) + void IndicSetHoverFore(int indic, Colour fore); + + /// Retrieve the foreground hover colour of an indicator. (Scintilla feature 2683) + Colour IndicGetHoverFore(int indic); + + /// Set the attributes of an indicator. (Scintilla feature 2684) + void IndicSetFlags(int indic, int flags); + + /// Retrieve the attributes of an indicator. (Scintilla feature 2685) + int IndicGetFlags(int indic); + + /// 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(); + + /// + /// 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(); + + /// 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); + + /// + /// 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 lenEntered parameter indicates how many characters before + /// the caret should be used to provide context. + /// (Scintilla feature 2100) + /// + unsafe void AutoCShow(int lenEntered, 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) + Position 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 text); + + /// + /// 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 indentSize); + + /// 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) + Position GetLineIndentPosition(int line); + + /// Retrieve the column number of a position, taking tab width into account. (Scintilla feature 2129) + int GetColumn(Position pos); + + /// Count characters between two positions. (Scintilla feature 2633) + int CountCharacters(int startPos, int endPos); + + /// Show or hide the horizontal scroll bar. (Scintilla feature 2130) + void SetHScrollBar(bool show); + + /// Is the horizontal scroll bar visible? (Scintilla feature 2131) + bool GetHScrollBar(); + + /// Show or hide indentation guides. (Scintilla feature 2132) + void SetIndentationGuides(int indentView); + + /// Are the indentation guides visible? (Scintilla feature 2133) + int 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) + Position 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(Position pos); + + /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2142) + void SetSelectionStart(Position pos); + + /// Returns the position at the start of the selection. (Scintilla feature 2143) + Position GetSelectionStart(); + + /// Sets the position that ends the selection - this becomes the currentPosition. (Scintilla feature 2144) + void SetSelectionEnd(Position pos); + + /// Returns the position at the end of the selection. (Scintilla feature 2145) + Position GetSelectionEnd(); + + /// Set caret to a position, while removing any existing selection. (Scintilla feature 2556) + void SetEmptySelection(Position pos); + + /// 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(int mode); + + /// Returns the print colour mode. (Scintilla feature 2149) + int GetPrintColourMode(); + + /// Find some text in the document. (Scintilla feature 2150) + Position FindText(int flags, 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(Position start, Position end); + + /// + /// 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 in normal style or with selection highlighted. (Scintilla feature 2163) + void HideSelection(bool normal); + + /// Retrieve the x value of the point in the window where a position is displayed. (Scintilla feature 2164) + int PointXFromPosition(Position pos); + + /// Retrieve the y value of the point in the window where a position is displayed. (Scintilla feature 2165) + int PointYFromPosition(Position pos); + + /// Retrieve the line containing a position. (Scintilla feature 2166) + int LineFromPosition(Position pos); + + /// Retrieve the position at the start of a line. (Scintilla feature 2167) + Position 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(Position secondary, Position 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(Position pos); + + /// Get the position that starts the target. (Scintilla feature 2191) + Position 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(Position pos); + + /// Get the position that ends the target. (Scintilla feature 2193) + Position GetTargetEnd(); + + /// Sets both the start and end of the target in one call. (Scintilla feature 2686) + void SetTargetRange(Position start, Position end); + + /// Retrieve the text in the target. (Scintilla feature 2687) + unsafe string GetTargetText(); + + /// + /// 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 length of 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(int flags); + + /// Get the search flags used by SearchInTarget. (Scintilla feature 2199) + int GetSearchFlags(); + + /// Show a call tip containing a definition near position pos. (Scintilla feature 2200) + unsafe void CallTipShow(Position 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) + Position 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 start, int end); + + /// 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 line); + + /// Find the document line of a display line taking hidden lines into account. (Scintilla feature 2221) + int DocLineFromVisible(int lineDisplay); + + /// The number of display lines needed to wrap a document line (Scintilla feature 2235) + int WrapCount(int line); + + /// + /// 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, int level); + + /// Retrieve the fold level of a line. (Scintilla feature 2223) + int GetFoldLevel(int line); + + /// Find the last child line of a header line. (Scintilla feature 2224) + int GetLastChild(int line, int 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); + + /// Expand or contract a fold header. (Scintilla feature 2237) + void FoldLine(int line, int action); + + /// Expand or contract a fold header and its children. (Scintilla feature 2238) + void FoldChildren(int line, int 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, int level); + + /// Expand or contract all fold headers. (Scintilla feature 2662) + void FoldAll(int 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(int automaticFold); + + /// Get automatic folding behaviours. (Scintilla feature 2664) + int GetAutomaticFold(); + + /// Set some style options for folding. (Scintilla feature 2233) + void SetFoldFlags(int 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(Position pos, bool onlyWordCharacters); + + /// Get position of end of word. (Scintilla feature 2267) + int WordEndPosition(Position pos, bool onlyWordCharacters); + + /// Sets whether text is word wrapped. (Scintilla feature 2268) + void SetWrapMode(int mode); + + /// Retrieve whether text is word wrapped. (Scintilla feature 2269) + int GetWrapMode(); + + /// Set the display mode of visual flags for wrapped lines. (Scintilla feature 2460) + void SetWrapVisualFlags(int wrapVisualFlags); + + /// Retrive the display mode of visual flags for wrapped lines. (Scintilla feature 2461) + int GetWrapVisualFlags(); + + /// Set the location of visual flags for wrapped lines. (Scintilla feature 2462) + void SetWrapVisualFlagsLocation(int wrapVisualFlagsLocation); + + /// Retrive the location of visual flags for wrapped lines. (Scintilla feature 2463) + int 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(int mode); + + /// Retrieve how wrapped sublines are placed. Default is fixed. (Scintilla feature 2473) + int GetWrapIndentMode(); + + /// Sets the degree of caching of layout information. (Scintilla feature 2272) + void SetLayoutCache(int mode); + + /// Retrieve the degree of caching of layout information. (Scintilla feature 2273) + int 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 show); + + /// 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); + + /// 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); + + /// How many phases is drawing done in? (Scintilla feature 2673) + int 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(int phases); + + /// Choose the quality level for text from the FontQuality enumeration. (Scintilla feature 2611) + void SetFontQuality(int fontQuality); + + /// Retrieve the quality level for text. (Scintilla feature 2612) + int GetFontQuality(); + + /// Scroll so that a display line is at the top of the display. (Scintilla feature 2613) + void SetFirstVisibleLine(int lineDisplay); + + /// Change the effect of pasting when there are multiple selections. (Scintilla feature 2614) + void SetMultiPaste(int multiPaste); + + /// Retrieve the effect of pasting when there are multiple selections.. (Scintilla feature 2615) + int GetMultiPaste(); + + /// + /// Retrieve the value of a tag from a regular expression search. + /// Result is NUL-terminated. + /// (Scintilla feature 2616) + /// + unsafe string GetTag(int tagNumber); + + /// Make the target range start and end be the same as the selection range start and end. (Scintilla feature 2287) + void TargetFromSelection(); + + /// 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 the colours used as a chequerboard pattern in the fold margin (Scintilla feature 2290) + void SetFoldMarginColour(bool useSetting, Colour back); + + /// Set the colours used as a chequerboard pattern in the fold margin (Scintilla feature 2291) + void SetFoldMarginHiColour(bool useSetting, Colour fore); + + /// 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(); + + /// 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(); + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2349) + /// + void HomeWrap(); + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2450) + /// + void HomeWrapExtend(); + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2451) + /// + void LineEndWrap(); + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2452) + /// + void LineEndWrapExtend(); + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2453) + /// + void VCHomeWrap(); + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (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(Position pos1, Position pos2); + + /// Use specified indicator to highlight matching braces instead of changing their style. (Scintilla feature 2498) + void BraceHighlightIndicator(bool useBraceHighlightIndicator, int indicator); + + /// Highlight the character at a position indicating there is no matching brace. (Scintilla feature 2352) + void BraceBadLight(Position pos); + + /// Use specified indicator to highlight non matching brace instead of changing its style. (Scintilla feature 2499) + void BraceBadLightIndicator(bool useBraceBadLightIndicator, int indicator); + + /// Find the position of a matching brace or INVALID_POSITION if no match. (Scintilla feature 2353) + Position BraceMatch(Position pos); + + /// 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 pointer); + + /// Set which document modification events are sent to the container. (Scintilla feature 2359) + void SetModEventMask(int mask); + + /// 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) + int GetEdgeMode(); + + /// + /// The edge may be displayed by a line (EDGE_LINE) or by highlighting text that + /// goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). + /// (Scintilla feature 2363) + /// + void SetEdgeMode(int mode); + + /// 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); + + /// 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(int flags, 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(int flags, 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. + /// (Scintilla feature 2371) + /// + void UsePopUp(bool allowPopUp); + + /// 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 zoom); + + /// 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) + /// + int CreateDocument(); + + /// Extend life of document. (Scintilla feature 2376) + void AddRefDocument(int doc); + + /// Release a reference to the document, deleting document if it fades to black. (Scintilla feature 2377) + void ReleaseDocument(int doc); + + /// Get which document modification events are sent to the container. (Scintilla feature 2378) + int GetModEventMask(); + + /// 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(int statusCode); + + /// Get error status. (Scintilla feature 2383) + int 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(); + + /// Sets the cursor to one of the SC_CURSOR* values. (Scintilla feature 2386) + void SetCursor(int cursorType); + + /// Get cursor type. (Scintilla feature 2387) + int 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(int 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(); + + /// Get and Set the xOffset (ie, horizontal scroll position). (Scintilla feature 2397) + void SetXOffset(int newOffset); + + /// Get and Set 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(int 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(int caretPolicy, int caretSlop); + + /// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). (Scintilla feature 2406) + void SetPrintWrapMode(int mode); + + /// Is printing line wrapped? (Scintilla feature 2407) + int 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 between paragraphs (delimited by empty lines). (Scintilla feature 2413) + void ParaDown(); + + /// Move caret between paragraphs (delimited by empty lines). (Scintilla feature 2414) + void ParaDownExtend(); + + /// Move caret between paragraphs (delimited by empty lines). (Scintilla feature 2415) + void ParaUp(); + + /// Move caret between paragraphs (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) + /// + Position PositionBefore(Position 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) + /// + Position PositionAfter(Position 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) + /// + Position PositionRelative(Position pos, int relative); + + /// Copy a range of text to the clipboard. Positions are clipped into the document. (Scintilla feature 2419) + void CopyRange(Position start, Position 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(int mode); + + /// Get the mode of the current selection. (Scintilla feature 2423) + int GetSelectionMode(); + + /// Retrieve the position of the start of the selection at the given line (INVALID_POSITION if no selection on this line). (Scintilla feature 2424) + Position 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) + Position 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(int behaviour); + + /// Get auto-completion case insensitive behaviour. (Scintilla feature 2635) + int AutoCGetCaseInsensitiveBehaviour(); + + /// Change the effect of autocompleting when there are multiple selections. (Scintilla feature 2636) + void AutoCSetMulti(int multi); + + /// Retrieve the effect of autocompleting when there are multiple selections.. (Scintilla feature 2637) + int AutoCGetMulti(); + + /// Set the way autocompletion lists are ordered. (Scintilla feature 2660) + void AutoCSetOrder(int order); + + /// Get the way autocompletion lists are ordered. (Scintilla feature 2661) + int 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) + int GetCaretSticky(); + + /// Stop the caret preferred x position changing when the user types. (Scintilla feature 2458) + void SetCaretSticky(int 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(int alpha); + + /// Get the background alpha of the caret line. (Scintilla feature 2471) + int GetCaretLineBackAlpha(); + + /// Set the style of the caret to be drawn. (Scintilla feature 2512) + void SetCaretStyle(int caretStyle); + + /// Returns the current style of the caret. (Scintilla feature 2513) + int 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 position, int fillLength); + + /// Turn a indicator off over a range. (Scintilla feature 2505) + void IndicatorClearRange(int position, int clearLength); + + /// Are any indicators present at position? (Scintilla feature 2506) + int IndicatorAllOnFor(int position); + + /// What value does a particular indicator have at at a position? (Scintilla feature 2507) + int IndicatorValueAt(int indicator, int position); + + /// Where does a particular indicator start? (Scintilla feature 2508) + int IndicatorStart(int indicator, int position); + + /// Where does a particular indicator end? (Scintilla feature 2509) + int IndicatorEnd(int indicator, int position); + + /// 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 rangeLength bytes. + /// (Scintilla feature 2643) + /// + IntPtr GetRangePointer(int position, int rangeLength); + + /// + /// Return a position which, to avoid performance costs, should not be within + /// the range of a call to GetRangePointer. + /// (Scintilla feature 2644) + /// + Position GetGapPosition(); + + /// Set the alpha fill colour of the given indicator. (Scintilla feature 2523) + void IndicSetAlpha(int indicator, int alpha); + + /// Get the alpha fill colour of the given indicator. (Scintilla feature 2524) + int IndicGetAlpha(int indicator); + + /// Set the alpha outline colour of the given indicator. (Scintilla feature 2558) + void IndicSetOutlineAlpha(int indicator, int alpha); + + /// Get the alpha outline colour of the given indicator. (Scintilla feature 2559) + int 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(int marginOptions); + + /// Get the margin options. (Scintilla feature 2557) + int 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(int visible); + + /// Get the visibility for the annotations for a view (Scintilla feature 2549) + int 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, int flags); + + /// Find the position of a character from a point within the window. (Scintilla feature 2561) + Position 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) + /// + Position 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 additionalCaretsBlink); + + /// 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) + int SetSelection(int caret, int anchor); + + /// Add a selection (Scintilla feature 2573) + int 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(); + + /// Which selection is the main selection (Scintilla feature 2576) + void SetSelectionNCaret(int selection, Position pos); + + /// Which selection is the main selection (Scintilla feature 2577) + Position GetSelectionNCaret(int selection); + + /// Which selection is the main selection (Scintilla feature 2578) + void SetSelectionNAnchor(int selection, Position posAnchor); + + /// Which selection is the main selection (Scintilla feature 2579) + Position GetSelectionNAnchor(int selection); + + /// Which selection is the main selection (Scintilla feature 2580) + void SetSelectionNCaretVirtualSpace(int selection, int space); + + /// Which selection is the main selection (Scintilla feature 2581) + int GetSelectionNCaretVirtualSpace(int selection); + + /// Which selection is the main selection (Scintilla feature 2582) + void SetSelectionNAnchorVirtualSpace(int selection, int space); + + /// Which selection is the main 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, Position pos); + + /// Returns the position at the start of the selection. (Scintilla feature 2585) + Position GetSelectionNStart(int selection); + + /// Sets the position that ends the selection - this becomes the currentPosition. (Scintilla feature 2586) + void SetSelectionNEnd(int selection, Position pos); + + /// Returns the position at the end of the selection. (Scintilla feature 2587) + Position GetSelectionNEnd(int selection); + + /// Returns the position at the end of the selection. (Scintilla feature 2588) + void SetRectangularSelectionCaret(Position pos); + + /// Returns the position at the end of the selection. (Scintilla feature 2589) + Position GetRectangularSelectionCaret(); + + /// Returns the position at the end of the selection. (Scintilla feature 2590) + void SetRectangularSelectionAnchor(Position posAnchor); + + /// Returns the position at the end of the selection. (Scintilla feature 2591) + Position GetRectangularSelectionAnchor(); + + /// Returns the position at the end of the selection. (Scintilla feature 2592) + void SetRectangularSelectionCaretVirtualSpace(int space); + + /// Returns the position at the end of the selection. (Scintilla feature 2593) + int GetRectangularSelectionCaretVirtualSpace(); + + /// Returns the position at the end of the selection. (Scintilla feature 2594) + void SetRectangularSelectionAnchorVirtualSpace(int space); + + /// Returns the position at the end of the selection. (Scintilla feature 2595) + int GetRectangularSelectionAnchorVirtualSpace(); + + /// Returns the position at the end of the selection. (Scintilla feature 2596) + void SetVirtualSpaceOptions(int virtualSpaceOptions); + + /// Returns the position at the end of the selection. (Scintilla feature 2597) + int 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(int alpha); + + /// Get the alpha of the selection. (Scintilla feature 2603) + int 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(); + + /// + /// 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(Position start, Position 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(int technology); + + /// Get the tech. (Scintilla feature 2631) + int GetTechnology(); + + /// Create an ILoader*. (Scintilla feature 2632) + int CreateLoader(int bytes); + + /// On OS X, show a find indicator. (Scintilla feature 2640) + void FindIndicatorShow(Position start, Position end); + + /// On OS X, flash a find indicator, then fade out. (Scintilla feature 2641) + void FindIndicatorFlash(Position start, Position 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(int lineEndBitSet); + + /// Get the line end types currently allowed. (Scintilla feature 2657) + int GetLineEndTypesAllowed(); + + /// Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation. (Scintilla feature 2658) + int 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(Position start, Position 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); + + /// Retrieve the number of bits the current lexer needs for styling. (Scintilla feature 4011) + int GetStyleBitsNeeded(); + + /// + /// 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) + int PrivateLexerCall(int operation, int 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 int 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(); + + /// + /// Deprecated in 2.30 + /// In palette mode? + /// (Scintilla feature 2139) + /// + bool GetUsePalette(); + + /// + /// In palette mode, Scintilla uses the environment's palette calls to display + /// more colours. This may lead to ugly displays. + /// (Scintilla feature 2039) + /// + void SetUsePalette(bool usePalette); + + /// + /// 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(); + + /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ + } +} diff --git a/PluginInfrastructure/MenuCmdID_h.cs b/PluginInfrastructure/MenuCmdID_h.cs new file mode 100644 index 0000000..b4e2a28 --- /dev/null +++ b/PluginInfrastructure/MenuCmdID_h.cs @@ -0,0 +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) + } +} diff --git a/PluginInfrastructure/Msgs_h.cs b/PluginInfrastructure/Msgs_h.cs new file mode 100644 index 0000000..036c660 --- /dev/null +++ b/PluginInfrastructure/Msgs_h.cs @@ -0,0 +1,764 @@ +// 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, + + /// + ///void NPPM_GETPLUGINSCONFIGDIR(int strLen, TCHAR *str) + /// + 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(INT 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(INT 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(0, 0) + /// Reloads Buffer + /// wParam: Buffer to reload + /// lParam: 0 if no alert, else alert + /// + NPPM_RELOADBUFFERID = Constants.NPPMSG + 61, + + /// + /// INT NPPM_GETBUFFERLANGTYPE(INT 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(INT 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(INT 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(INT 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(INT bufferID, 0) + /// wParam: BufferID to get format from + /// lParam: 0 + /// returns as int, see formatType. -1 on error + /// + NPPM_GETBUFFERFORMAT = Constants.NPPMSG + 68, + + /// + /// BOOL NPPM_SETBUFFERFORMAT(INT bufferID, INT format) + /// wParam: BufferID to set format of + /// lParam: format + /// Returns TRUE on success, FALSE otherwise + /// use int, see formatType + /// + NPPM_SETBUFFERFORMAT = Constants.NPPMSG + 69, + + /// + /// BOOL NPPM_ADDREBAR(0, REBARBANDINFO *) + /// Returns assigned ID in wID value of struct pointer + /// + NPPM_ADDREBAR = Constants.NPPMSG + 57, + + /// + /// BOOL NPPM_ADDREBAR(INT ID, REBARBANDINFO *) + ///Use ID assigned with NPPM_ADDREBAR + /// + NPPM_UPDATEREBAR = Constants.NPPMSG + 58, + + /// + /// BOOL NPPM_ADDREBAR(INT ID, 0) + ///Use ID assigned with NPPM_ADDREBAR + /// + NPPM_REMOVEREBAR = Constants.NPPMSG + 59, + + /// + /// 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 shorcut 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 enconding + /// + 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 programing 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 programing 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_ISDOCSWITCHERSHOWN(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%\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, + + 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, + /// + /// 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_GETNPPDIRECTORY = RUNCOMMAND_USER + NPP_DIRECTORY, + + /// + /// 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, + + 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, + + /// + /// 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 DOCSTAUS_READONLY and DOCSTAUS_BUFFERDIRTY + /// + NPPN_READONLYCHANGED = NPPN_FIRST + 16, + + DOCSTAUS_READONLY = 1, + DOCSTAUS_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/PluginInfrastructure/NotepadPPGateway.cs b/PluginInfrastructure/NotepadPPGateway.cs new file mode 100644 index 0000000..e1668df --- /dev/null +++ b/PluginInfrastructure/NotepadPPGateway.cs @@ -0,0 +1,69 @@ +// 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); + } + } +} diff --git a/PluginInfrastructure/NppPluginNETBase.cs b/PluginInfrastructure/NppPluginNETBase.cs new file mode 100644 index 0000000..250a901 --- /dev/null +++ b/PluginInfrastructure/NppPluginNETBase.cs @@ -0,0 +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; + } + } +} diff --git a/PluginInfrastructure/NppPluginNETHelper.cs b/PluginInfrastructure/NppPluginNETHelper.cs new file mode 100644 index 0000000..c337fea --- /dev/null +++ b/PluginInfrastructure/NppPluginNETHelper.cs @@ -0,0 +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; + } +} diff --git a/PluginInfrastructure/Preference_h.cs b/PluginInfrastructure/Preference_h.cs new file mode 100644 index 0000000..c72ed1c --- /dev/null +++ b/PluginInfrastructure/Preference_h.cs @@ -0,0 +1,310 @@ +// 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_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_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_CHECK_SHOWVERTICALEDGE = IDD_PREFERENCE_MARGEIN_BOX + 8, + IDC_NBCOLONE_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 9, + IDC_COLONENUMBER_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 10, + + IDC_VES_GB_STATIC = IDD_PREFERENCE_MARGEIN_BOX + 11, + IDC_RADIO_LNMODE = IDD_PREFERENCE_MARGEIN_BOX + 12, + IDC_RADIO_BGMODE = 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, + + 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_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_FILEAUTODETECTION = IDD_PREFERENCE_SETTING_BOX + 7, + 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_PREFERENCE_OFFSET_FLS = 40, + IDC_CHECK_REMEMBEREDITVIEWPERFILE = IDD_PREFERENCE_SETTING_BOX + IDC_PREFERENCE_OFFSET_FLS + 1, + IDC_REMEMBEREDITVIEWPERFILE_STATIC = IDD_PREFERENCE_SETTING_BOX + IDC_PREFERENCE_OFFSET_FLS + 2, + IDC_EDIT_REMEMBEREDITVIEWPERFILE = IDD_PREFERENCE_SETTING_BOX + IDC_PREFERENCE_OFFSET_FLS + 3, + + 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, + + 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_TABSETTINGS_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_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, + + /* --Autogenerated -- end of section automatically generated from preference_rc.h */ + } +} diff --git a/PluginInfrastructure/Resource_h.cs b/PluginInfrastructure/Resource_h.cs new file mode 100644 index 0000000..f0b8361 --- /dev/null +++ b/PluginInfrastructure/Resource_h.cs @@ -0,0 +1,350 @@ +// 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_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_FUNCLIST_ROOT = 620, + IDI_FUNCLIST_NODE = 621, + IDI_FUNCLIST_LEAF = 622, + + IDI_FUNCLIST_SORTBUTTON = 631, + IDI_FUNCLIST_RELOADBUTTON = 632, + + 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, + 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, + + IDD_DEBUGINFOBOX = 1750, + IDC_DEBUGINFO_EDIT = 1751, + IDC_DEBUGINFO_COPYLINK = 1752, + + 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_EDGE_SIZE = NOTEPADPLUS_USER_INTERNAL + 28, + 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_CHECKDOCSTATUS = Constants.NPPMSG + 53, + + NPPM_INTERNAL_ENABLECHECKDOCOPT = Constants.NPPMSG + 54, + + CHECKDOCOPT_NONE = 0, + CHECKDOCOPT_UPDATESILENTLY = 1, + CHECKDOCOPT_UPDATEGO2END = 2, + + NPPM_INTERNAL_GETCHECKDOCOPT = Constants.NPPMSG + 55, + + NPPM_INTERNAL_SETCHECKDOCOPT = Constants.NPPMSG + 56, + + 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_MACRO = 7, + MENUINDEX_RUN = 8, + MENUINDEX_PLUGINS = 9, + /* --Autogenerated -- end of section automatically generated from resource.h */ + } +} diff --git a/PluginInfrastructure/ScintillaGateway.cs b/PluginInfrastructure/ScintillaGateway.cs new file mode 100644 index 0000000..7b30a8d --- /dev/null +++ b/PluginInfrastructure/ScintillaGateway.cs @@ -0,0 +1,5162 @@ +// 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(new Position(GetCurrentPos().Value + text.Length)); + } + + public void InsertTextAndMoveCursor(string text) + { + var currentPos = GetCurrentPos(); + InsertText(currentPos, text); + GotoPos(new Position(currentPos.Value + text.Length)); + } + + public void SelectCurrentLine() + { + int line = GetCurrentLineNumber(); + SetSelection(PositionFromLine(line).Value, PositionFromLine(line + 1).Value); + } + + /// + /// clears the selection without changing the position of the cursor + /// + public void ClearSelectionToCursor() + { + var pos = GetCurrentPos().Value; + 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ADDTEXT, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ADDSTYLEDTEXT, length, (IntPtr) cPtr); + } + } + + /// Insert string at a position. (Scintilla feature 2003) + public unsafe void InsertText(Position pos, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INSERTTEXT, pos.Value, (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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHANGEINSERTION, length, (IntPtr) textPtr); + } + } + + /// Delete all text in the document. (Scintilla feature 2004) + public void ClearAll() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEARALL, Unused, Unused); + } + + /// Delete a range of text in the document. (Scintilla feature 2645) + public void DeleteRange(Position pos, int deleteLength) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DELETERANGE, pos.Value, deleteLength); + } + + /// Set all style bytes to 0, remove all folding information. (Scintilla feature 2005) + public void ClearDocumentStyle() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEARDOCUMENTSTYLE, Unused, Unused); + } + + /// Returns the number of bytes in the document. (Scintilla feature 2006) + public int GetLength() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLENGTH, Unused, Unused); + return (int) res; + } + + /// Returns the character byte at the position. (Scintilla feature 2007) + public int GetCharAt(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCHARAT, pos.Value, Unused); + return (int) res; + } + + /// Returns the position of the caret. (Scintilla feature 2008) + public Position GetCurrentPos() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCURRENTPOS, Unused, Unused); + return new Position((int) res); + } + + /// Returns the position of the opposite end of the selection to the caret. (Scintilla feature 2009) + public Position GetAnchor() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETANCHOR, Unused, Unused); + return new Position((int) res); + } + + /// Returns the style byte at the position. (Scintilla feature 2010) + public int GetStyleAt(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEAT, pos.Value, Unused); + return (int) res; + } + + /// Redoes the next action on the undo history. (Scintilla feature 2011) + public void Redo() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_REDO, Unused, Unused); + } + + /// + /// Choose between collecting actions into the undo + /// history and discarding them. + /// (Scintilla feature 2012) + /// + public void SetUndoCollection(bool collectUndo) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETUNDOCOLLECTION, collectUndo ? 1 : 0, Unused); + } + + /// Select all the text in the document. (Scintilla feature 2013) + public void SelectAll() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SELECTALL, Unused, Unused); + } + + /// + /// Remember the current position in the undo history as the position + /// at which the document was saved. + /// (Scintilla feature 2014) + /// + public void SetSavePoint() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSAVEPOINT, Unused, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEDTEXT, Unused, tr.NativePointer); + return (int) res; + } + + /// Are there any redoable actions in the undo history? (Scintilla feature 2016) + public bool CanRedo() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CANREDO, Unused, Unused); + return 1 == (int) res; + } + + /// Retrieve the line number at which a particular marker is located. (Scintilla feature 2017) + public int MarkerLineFromHandle(int handle) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERLINEFROMHANDLE, handle, Unused); + return (int) res; + } + + /// Delete a marker. (Scintilla feature 2018) + public void MarkerDeleteHandle(int handle) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETEHANDLE, handle, Unused); + } + + /// Is undo history being collected? (Scintilla feature 2019) + public bool GetUndoCollection() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETUNDOCOLLECTION, Unused, Unused); + return 1 == (int) res; + } + + /// + /// Are white space characters currently visible? + /// Returns one of SCWS_* constants. + /// (Scintilla feature 2020) + /// + public int GetViewWS() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETVIEWWS, Unused, Unused); + return (int) res; + } + + /// Make white space characters invisible, always visible or visible outside indentation. (Scintilla feature 2021) + public void SetViewWS(int viewWS) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETVIEWWS, viewWS, Unused); + } + + /// Find the position from a point within the window. (Scintilla feature 2022) + public Position PositionFromPoint(int x, int y) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMPOINT, x, y); + return new Position((int) res); + } + + /// + /// Find the position from a point within the window but return + /// INVALID_POSITION if not close to text. + /// (Scintilla feature 2023) + /// + public Position PositionFromPointClose(int x, int y) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMPOINTCLOSE, x, y); + return new Position((int) res); + } + + /// Set caret to start of a line and ensure it is visible. (Scintilla feature 2024) + public void GotoLine(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GOTOLINE, line, Unused); + } + + /// Set caret to a position and ensure it is visible. (Scintilla feature 2025) + public void GotoPos(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GOTOPOS, pos.Value, 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(Position posAnchor) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETANCHOR, posAnchor.Value, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCURLINE, length, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Retrieve the position of the last correctly styled character. (Scintilla feature 2028) + public Position GetEndStyled() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETENDSTYLED, Unused, Unused); + return new Position((int) res); + } + + /// Convert all line endings in the document to one mode. (Scintilla feature 2029) + public void ConvertEOLs(int eolMode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CONVERTEOLS, eolMode, Unused); + } + + /// Retrieve the current end of line mode - one of CRLF, CR, or LF. (Scintilla feature 2030) + public int GetEOLMode() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETEOLMODE, Unused, Unused); + return (int) res; + } + + /// Set the current end of line mode. (Scintilla feature 2031) + public void SetEOLMode(int eolMode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETEOLMODE, eolMode, Unused); + } + + /// + /// Set the current styling position to pos and the styling mask to mask. + /// The styling mask can be used to protect some bits in each styling byte from modification. + /// (Scintilla feature 2032) + /// + public void StartStyling(Position pos, int mask) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STARTSTYLING, pos.Value, mask); + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLING, length, style); + } + + /// Is drawing done first into a buffer or direct to the screen? (Scintilla feature 2034) + public bool GetBufferedDraw() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETBUFFEREDDRAW, Unused, Unused); + return 1 == (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETBUFFEREDDRAW, buffered ? 1 : 0, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETTABWIDTH, tabWidth, Unused); + } + + /// Retrieve the visible size of a tab. (Scintilla feature 2121) + public int GetTabWidth() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTABWIDTH, Unused, Unused); + return (int) res; + } + + /// Clear explicit tabstops on a line. (Scintilla feature 2675) + public void ClearTabStops(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEARTABSTOPS, line, Unused); + } + + /// Add an explicit tab stop for a line. (Scintilla feature 2676) + public void AddTabStop(int line, int x) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ADDTABSTOP, line, x); + } + + /// Find the next explicit tab stop position on a line after a position. (Scintilla feature 2677) + public int GetNextTabStop(int line, int x) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETNEXTTABSTOP, line, x); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCODEPAGE, codePage, Unused); + } + + /// Is the IME displayed in a winow or inline? (Scintilla feature 2678) + public int GetIMEInteraction() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETIMEINTERACTION, Unused, Unused); + return (int) res; + } + + /// Choose to display the the IME in a winow or inline. (Scintilla feature 2679) + public void SetIMEInteraction(int imeInteraction) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETIMEINTERACTION, imeInteraction, Unused); + } + + /// Set the symbol used for a particular marker number. (Scintilla feature 2040) + public void MarkerDefine(int markerNumber, int markerSymbol) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINE, markerNumber, markerSymbol); + } + + /// Set the foreground colour used for a particular marker number. (Scintilla feature 2041) + public void MarkerSetFore(int markerNumber, Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETFORE, markerNumber, fore.Value); + } + + /// Set the background colour used for a particular marker number. (Scintilla feature 2042) + public void MarkerSetBack(int markerNumber, Colour back) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETBACK, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETBACKSELECTED, markerNumber, back.Value); + } + + /// Enable/disable highlight for current folding bloc (smallest one that contains the caret) (Scintilla feature 2293) + public void MarkerEnableHighlight(bool enabled) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERENABLEHIGHLIGHT, enabled ? 1 : 0, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERADD, line, markerNumber); + return (int) res; + } + + /// Delete a marker from a line. (Scintilla feature 2044) + public void MarkerDelete(int line, int markerNumber) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETE, line, markerNumber); + } + + /// Delete all markers with a particular number from all lines. (Scintilla feature 2045) + public void MarkerDeleteAll(int markerNumber) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDELETEALL, markerNumber, Unused); + } + + /// Get a bit mask of all the markers set on a line. (Scintilla feature 2046) + public int MarkerGet(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERGET, line, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERNEXT, lineStart, markerMask); + return (int) res; + } + + /// Find the previous line before lineStart that includes a marker in mask. (Scintilla feature 2048) + public int MarkerPrevious(int lineStart, int markerMask) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERPREVIOUS, lineStart, markerMask); + return (int) res; + } + + /// Define a marker from a pixmap. (Scintilla feature 2049) + public unsafe void MarkerDefinePixmap(int markerNumber, string pixmap) + { + fixed (byte* pixmapPtr = Encoding.UTF8.GetBytes(pixmap)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINEPIXMAP, markerNumber, (IntPtr) pixmapPtr); + } + } + + /// Add a set of markers to a line. (Scintilla feature 2466) + public void MarkerAddSet(int line, int set) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERADDSET, line, set); + } + + /// 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, int alpha) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSETALPHA, markerNumber, alpha); + } + + /// Set a margin to be either numeric or symbolic. (Scintilla feature 2240) + public void SetMarginTypeN(int margin, int marginType) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINTYPEN, margin, marginType); + } + + /// Retrieve the type of a margin. (Scintilla feature 2241) + public int GetMarginTypeN(int margin) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINTYPEN, margin, Unused); + return (int) res; + } + + /// Set the width of a margin to a width expressed in pixels. (Scintilla feature 2242) + public void SetMarginWidthN(int margin, int pixelWidth) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINWIDTHN, margin, pixelWidth); + } + + /// Retrieve the width of a margin in pixels. (Scintilla feature 2243) + public int GetMarginWidthN(int margin) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINWIDTHN, margin, Unused); + return (int) res; + } + + /// Set a mask that determines which markers are displayed in a margin. (Scintilla feature 2244) + public void SetMarginMaskN(int margin, int mask) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINMASKN, margin, mask); + } + + /// Retrieve the marker mask of a margin. (Scintilla feature 2245) + public int GetMarginMaskN(int margin) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINMASKN, margin, Unused); + return (int) res; + } + + /// Make a margin sensitive or insensitive to mouse clicks. (Scintilla feature 2246) + public void SetMarginSensitiveN(int margin, bool sensitive) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINSENSITIVEN, margin, sensitive ? 1 : 0); + } + + /// Retrieve the mouse click sensitivity of a margin. (Scintilla feature 2247) + public bool GetMarginSensitiveN(int margin) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINSENSITIVEN, margin, Unused); + return 1 == (int) res; + } + + /// Set the cursor shown when the mouse is inside a margin. (Scintilla feature 2248) + public void SetMarginCursorN(int margin, int cursor) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINCURSORN, margin, cursor); + } + + /// Retrieve the cursor shown in a margin. (Scintilla feature 2249) + public int GetMarginCursorN(int margin) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINCURSORN, margin, Unused); + return (int) res; + } + + /// Clear all the styles and make equivalent to the global default style. (Scintilla feature 2050) + public void StyleClearAll() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLECLEARALL, Unused, Unused); + } + + /// Set the foreground colour of a style. (Scintilla feature 2051) + public void StyleSetFore(int style, Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETFORE, style, fore.Value); + } + + /// Set the background colour of a style. (Scintilla feature 2052) + public void StyleSetBack(int style, Colour back) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETBACK, style, back.Value); + } + + /// Set a style to be bold or not. (Scintilla feature 2053) + public void StyleSetBold(int style, bool bold) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETBOLD, style, bold ? 1 : 0); + } + + /// Set a style to be italic or not. (Scintilla feature 2054) + public void StyleSetItalic(int style, bool italic) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETITALIC, style, italic ? 1 : 0); + } + + /// Set the size of characters of a style. (Scintilla feature 2055) + public void StyleSetSize(int style, int sizePoints) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETSIZE, style, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETFONT, style, (IntPtr) fontNamePtr); + } + } + + /// Set a style to have its end of line filled or not. (Scintilla feature 2057) + public void StyleSetEOLFilled(int style, bool filled) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETEOLFILLED, style, filled ? 1 : 0); + } + + /// Reset the default style to its state at startup (Scintilla feature 2058) + public void StyleResetDefault() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLERESETDEFAULT, Unused, Unused); + } + + /// Set a style to be underlined or not. (Scintilla feature 2059) + public void StyleSetUnderline(int style, bool underline) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETUNDERLINE, style, underline ? 1 : 0); + } + + /// Get the foreground colour of a style. (Scintilla feature 2481) + public Colour StyleGetFore(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETFORE, style, Unused); + return new Colour((int) res); + } + + /// Get the background colour of a style. (Scintilla feature 2482) + public Colour StyleGetBack(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETBACK, style, Unused); + return new Colour((int) res); + } + + /// Get is a style bold or not. (Scintilla feature 2483) + public bool StyleGetBold(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETBOLD, style, Unused); + return 1 == (int) res; + } + + /// Get is a style italic or not. (Scintilla feature 2484) + public bool StyleGetItalic(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETITALIC, style, Unused); + return 1 == (int) res; + } + + /// Get the size of characters of a style. (Scintilla feature 2485) + public int StyleGetSize(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETSIZE, style, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETFONT, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETEOLFILLED, style, Unused); + return 1 == (int) res; + } + + /// Get is a style underlined or not. (Scintilla feature 2488) + public bool StyleGetUnderline(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETUNDERLINE, style, Unused); + return 1 == (int) res; + } + + /// Get is a style mixed case, or to force upper or lower case. (Scintilla feature 2489) + public int StyleGetCase(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCASE, style, Unused); + return (int) res; + } + + /// Get the character get of the font in a style. (Scintilla feature 2490) + public int StyleGetCharacterSet(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCHARACTERSET, style, Unused); + return (int) res; + } + + /// Get is a style visible or not. (Scintilla feature 2491) + public bool StyleGetVisible(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETVISIBLE, style, Unused); + return 1 == (int) res; + } + + /// + /// Get is a style changeable or not (read only). + /// Experimental feature, currently buggy. + /// (Scintilla feature 2492) + /// + public bool StyleGetChangeable(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETCHANGEABLE, style, Unused); + return 1 == (int) res; + } + + /// Get is a style a hotspot or not. (Scintilla feature 2493) + public bool StyleGetHotSpot(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETHOTSPOT, style, Unused); + return 1 == (int) res; + } + + /// Set a style to be mixed case, or to force upper or lower case. (Scintilla feature 2060) + public void StyleSetCase(int style, int caseForce) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCASE, style, caseForce); + } + + /// Set the size of characters of a style. Size is in points multiplied by 100. (Scintilla feature 2061) + public void StyleSetSizeFractional(int style, int caseForce) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETSIZEFRACTIONAL, style, caseForce); + } + + /// Get the size of characters of a style in points multiplied by 100 (Scintilla feature 2062) + public int StyleGetSizeFractional(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETSIZEFRACTIONAL, style, Unused); + return (int) res; + } + + /// Set the weight of characters of a style. (Scintilla feature 2063) + public void StyleSetWeight(int style, int weight) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETWEIGHT, style, weight); + } + + /// Get the weight of characters of a style. (Scintilla feature 2064) + public int StyleGetWeight(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLEGETWEIGHT, style, Unused); + return (int) res; + } + + /// Set the character set of the font in a style. (Scintilla feature 2066) + public void StyleSetCharacterSet(int style, int characterSet) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCHARACTERSET, style, characterSet); + } + + /// Set a style to be a hotspot or not. (Scintilla feature 2409) + public void StyleSetHotSpot(int style, bool hotspot) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETHOTSPOT, style, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELFORE, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELBACK, useSetting ? 1 : 0, back.Value); + } + + /// Get the alpha of the selection. (Scintilla feature 2477) + public int GetSelAlpha() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELALPHA, Unused, Unused); + return (int) res; + } + + /// Set the alpha of the selection. (Scintilla feature 2478) + public void SetSelAlpha(int alpha) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELALPHA, alpha, Unused); + } + + /// Is the selection end of line filled? (Scintilla feature 2479) + public bool GetSelEOLFilled() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELEOLFILLED, Unused, Unused); + return 1 == (int) res; + } + + /// Set the selection to have its end of line filled or not. (Scintilla feature 2480) + public void SetSelEOLFilled(bool filled) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELEOLFILLED, filled ? 1 : 0, Unused); + } + + /// Set the foreground colour of the caret. (Scintilla feature 2069) + public void SetCaretFore(Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETFORE, fore.Value, Unused); + } + + /// When key+modifier combination km is pressed perform msg. (Scintilla feature 2070) + public void AssignCmdKey(KeyModifier km, int msg) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ASSIGNCMDKEY, km.Value, msg); + } + + /// When key+modifier combination km is pressed do nothing. (Scintilla feature 2071) + public void ClearCmdKey(KeyModifier km) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEARCMDKEY, km.Value, Unused); + } + + /// Drop all key mappings. (Scintilla feature 2072) + public void ClearAllCmdKeys() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEARALLCMDKEYS, Unused, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLINGEX, length, (IntPtr) stylesPtr); + } + } + + /// Set a style to be visible or not. (Scintilla feature 2074) + public void StyleSetVisible(int style, bool visible) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETVISIBLE, style, visible ? 1 : 0); + } + + /// Get the time in milliseconds that the caret is on and off. (Scintilla feature 2075) + public int GetCaretPeriod() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETPERIOD, Unused, Unused); + return (int) res; + } + + /// Get the time in milliseconds that the caret is on and off. 0 = steady on. (Scintilla feature 2076) + public void SetCaretPeriod(int periodMilliseconds) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETPERIOD, periodMilliseconds, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWORDCHARS, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETWORDCHARS, Unused, (IntPtr) charactersPtr); + return Encoding.UTF8.GetString(charactersBuffer).TrimEnd('\0'); + } + } + + /// + /// Start a sequence of actions that is undone and redone as a unit. + /// May be nested. + /// (Scintilla feature 2078) + /// + public void BeginUndoAction() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_BEGINUNDOACTION, Unused, Unused); + } + + /// End a sequence of actions that is undone and redone as a unit. (Scintilla feature 2079) + public void EndUndoAction() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ENDUNDOACTION, Unused, Unused); + } + + /// Set an indicator to plain, squiggle or TT. (Scintilla feature 2080) + public void IndicSetStyle(int indic, int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETSTYLE, indic, style); + } + + /// Retrieve the style of an indicator. (Scintilla feature 2081) + public int IndicGetStyle(int indic) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETSTYLE, indic, Unused); + return (int) res; + } + + /// Set the foreground colour of an indicator. (Scintilla feature 2082) + public void IndicSetFore(int indic, Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETFORE, indic, fore.Value); + } + + /// Retrieve the foreground colour of an indicator. (Scintilla feature 2083) + public Colour IndicGetFore(int indic) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETFORE, indic, Unused); + return new Colour((int) res); + } + + /// Set an indicator to draw under text or over(default). (Scintilla feature 2510) + public void IndicSetUnder(int indic, bool under) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETUNDER, indic, under ? 1 : 0); + } + + /// Retrieve whether indicator drawn under or over text. (Scintilla feature 2511) + public bool IndicGetUnder(int indic) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETUNDER, indic, Unused); + return 1 == (int) res; + } + + /// Set a hover indicator to plain, squiggle or TT. (Scintilla feature 2680) + public void IndicSetHoverStyle(int indic, int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETHOVERSTYLE, indic, style); + } + + /// Retrieve the hover style of an indicator. (Scintilla feature 2681) + public int IndicGetHoverStyle(int indic) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETHOVERSTYLE, indic, Unused); + return (int) res; + } + + /// Set the foreground hover colour of an indicator. (Scintilla feature 2682) + public void IndicSetHoverFore(int indic, Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETHOVERFORE, indic, fore.Value); + } + + /// Retrieve the foreground hover colour of an indicator. (Scintilla feature 2683) + public Colour IndicGetHoverFore(int indic) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETHOVERFORE, indic, Unused); + return new Colour((int) res); + } + + /// Set the attributes of an indicator. (Scintilla feature 2684) + public void IndicSetFlags(int indic, int flags) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETFLAGS, indic, flags); + } + + /// Retrieve the attributes of an indicator. (Scintilla feature 2685) + public int IndicGetFlags(int indic) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETFLAGS, indic, Unused); + return (int) res; + } + + /// Set the foreground colour of all whitespace and whether to use this setting. (Scintilla feature 2084) + public void SetWhitespaceFore(bool useSetting, Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACEFORE, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACEBACK, useSetting ? 1 : 0, back.Value); + } + + /// Set the size of the dots used to mark space characters. (Scintilla feature 2086) + public void SetWhitespaceSize(int size) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACESIZE, size, Unused); + } + + /// Get the size of the dots used to mark space characters. (Scintilla feature 2087) + public int GetWhitespaceSize() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETWHITESPACESIZE, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSTYLEBITS, bits, Unused); + } + + /// Retrieve number of bits in style bytes used to hold the lexical state. (Scintilla feature 2091) + public int GetStyleBits() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEBITS, Unused, Unused); + return (int) res; + } + + /// Used to hold extra styling information for each line. (Scintilla feature 2092) + public void SetLineState(int line, int state) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETLINESTATE, line, state); + } + + /// Retrieve the extra styling information for a line. (Scintilla feature 2093) + public int GetLineState(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESTATE, line, Unused); + return (int) res; + } + + /// Retrieve the last line number that has line state. (Scintilla feature 2094) + public int GetMaxLineState() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMAXLINESTATE, Unused, Unused); + return (int) res; + } + + /// Is the background of the line containing the caret in a different colour? (Scintilla feature 2095) + public bool GetCaretLineVisible() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEVISIBLE, Unused, Unused); + return 1 == (int) res; + } + + /// Display the background of the line containing the caret in a different colour. (Scintilla feature 2096) + public void SetCaretLineVisible(bool show) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEVISIBLE, show ? 1 : 0, Unused); + } + + /// Get the colour of the background of the line containing the caret. (Scintilla feature 2097) + public Colour GetCaretLineBack() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEBACK, Unused, Unused); + return new Colour((int) res); + } + + /// Set the colour of the background of the line containing the caret. (Scintilla feature 2098) + public void SetCaretLineBack(Colour back) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEBACK, back.Value, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STYLESETCHANGEABLE, style, changeable ? 1 : 0); + } + + /// + /// Display a auto-completion list. + /// The lenEntered parameter indicates how many characters before + /// the caret should be used to provide context. + /// (Scintilla feature 2100) + /// + public unsafe void AutoCShow(int lenEntered, string itemList) + { + fixed (byte* itemListPtr = Encoding.UTF8.GetBytes(itemList)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSHOW, lenEntered, (IntPtr) itemListPtr); + } + } + + /// Remove the auto-completion list from the screen. (Scintilla feature 2101) + public void AutoCCancel() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCCANCEL, Unused, Unused); + } + + /// Is there an auto-completion list visible? (Scintilla feature 2102) + public bool AutoCActive() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCACTIVE, Unused, Unused); + return 1 == (int) res; + } + + /// Retrieve the position of the caret when the auto-completion list was displayed. (Scintilla feature 2103) + public Position AutoCPosStart() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCPOSSTART, Unused, Unused); + return new Position((int) res); + } + + /// User has selected an item so remove the list and insert the selection. (Scintilla feature 2104) + public void AutoCComplete() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCCOMPLETE, Unused, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSTOPS, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETSEPARATOR, separatorCharacter, Unused); + } + + /// Retrieve the auto-completion list separator character. (Scintilla feature 2107) + public int AutoCGetSeparator() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETSEPARATOR, Unused, Unused); + return (int) res; + } + + /// Select the item in the auto-completion list that starts with a string. (Scintilla feature 2108) + public unsafe void AutoCSelect(string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSELECT, Unused, (IntPtr) textPtr); + } + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCANCELATSTART, cancel ? 1 : 0, Unused); + } + + /// Retrieve whether auto-completion cancelled by backspacing before start. (Scintilla feature 2111) + public bool AutoCGetCancelAtStart() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCANCELATSTART, Unused, Unused); + return 1 == (int) res; + } + + /// + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETFILLUPS, Unused, (IntPtr) characterSetPtr); + } + } + + /// Should a single item auto-completion list automatically choose the item. (Scintilla feature 2113) + public void AutoCSetChooseSingle(bool chooseSingle) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCHOOSESINGLE, chooseSingle ? 1 : 0, Unused); + } + + /// Retrieve whether a single item auto-completion list automatically choose the item. (Scintilla feature 2114) + public bool AutoCGetChooseSingle() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCHOOSESINGLE, Unused, Unused); + return 1 == (int) res; + } + + /// Set whether case is significant when performing auto-completion searches. (Scintilla feature 2115) + public void AutoCSetIgnoreCase(bool ignoreCase) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETIGNORECASE, ignoreCase ? 1 : 0, Unused); + } + + /// Retrieve state of ignore case flag. (Scintilla feature 2116) + public bool AutoCGetIgnoreCase() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETIGNORECASE, Unused, Unused); + return 1 == (int) res; + } + + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_USERLISTSHOW, listType, (IntPtr) itemListPtr); + } + } + + /// Set whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2118) + public void AutoCSetAutoHide(bool autoHide) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETAUTOHIDE, autoHide ? 1 : 0, Unused); + } + + /// Retrieve whether or not autocompletion is hidden automatically when nothing matches. (Scintilla feature 2119) + public bool AutoCGetAutoHide() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETAUTOHIDE, Unused, Unused); + return 1 == (int) res; + } + + /// + /// Set whether or not autocompletion deletes any word characters + /// after the inserted text upon completion. + /// (Scintilla feature 2270) + /// + public void AutoCSetDropRestOfWord(bool dropRestOfWord) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETDROPRESTOFWORD, dropRestOfWord ? 1 : 0, Unused); + } + + /// + /// Retrieve whether or not autocompletion deletes any word characters + /// after the inserted text upon completion. + /// (Scintilla feature 2271) + /// + public bool AutoCGetDropRestOfWord() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETDROPRESTOFWORD, Unused, Unused); + return 1 == (int) res; + } + + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_REGISTERIMAGE, type, (IntPtr) xpmDataPtr); + } + } + + /// Clear all the registered XPM images. (Scintilla feature 2408) + public void ClearRegisteredImages() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEARREGISTEREDIMAGES, Unused, Unused); + } + + /// Retrieve the auto-completion list type-separator character. (Scintilla feature 2285) + public int AutoCGetTypeSeparator() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETTYPESEPARATOR, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETTYPESEPARATOR, separatorCharacter, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMAXWIDTH, characterCount, Unused); + } + + /// Get the maximum width, in characters, of auto-completion and user lists. (Scintilla feature 2209) + public int AutoCGetMaxWidth() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMAXWIDTH, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMAXHEIGHT, rowCount, Unused); + } + + /// Set the maximum height, in rows, of auto-completion and user lists. (Scintilla feature 2211) + public int AutoCGetMaxHeight() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMAXHEIGHT, Unused, Unused); + return (int) res; + } + + /// Set the number of spaces used for one level of indentation. (Scintilla feature 2122) + public void SetIndent(int indentSize) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETINDENT, indentSize, Unused); + } + + /// Retrieve indentation size. (Scintilla feature 2123) + public int GetIndent() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETINDENT, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETUSETABS, useTabs ? 1 : 0, Unused); + } + + /// Retrieve whether tabs will be used in indentation. (Scintilla feature 2125) + public bool GetUseTabs() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETUSETABS, Unused, Unused); + return 1 == (int) res; + } + + /// Change the indentation of a line to a number of columns. (Scintilla feature 2126) + public void SetLineIndentation(int line, int indentSize) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETLINEINDENTATION, line, indentSize); + } + + /// Retrieve the number of columns that a line is indented. (Scintilla feature 2127) + public int GetLineIndentation(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEINDENTATION, line, Unused); + return (int) res; + } + + /// Retrieve the position before the first non indentation character on a line. (Scintilla feature 2128) + public Position GetLineIndentPosition(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEINDENTPOSITION, line, Unused); + return new Position((int) res); + } + + /// Retrieve the column number of a position, taking tab width into account. (Scintilla feature 2129) + public int GetColumn(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCOLUMN, pos.Value, Unused); + return (int) res; + } + + /// Count characters between two positions. (Scintilla feature 2633) + public int CountCharacters(int startPos, int endPos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_COUNTCHARACTERS, startPos, endPos); + return (int) res; + } + + /// Show or hide the horizontal scroll bar. (Scintilla feature 2130) + public void SetHScrollBar(bool show) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETHSCROLLBAR, show ? 1 : 0, Unused); + } + + /// Is the horizontal scroll bar visible? (Scintilla feature 2131) + public bool GetHScrollBar() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETHSCROLLBAR, Unused, Unused); + return 1 == (int) res; + } + + /// Show or hide indentation guides. (Scintilla feature 2132) + public void SetIndentationGuides(int indentView) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETINDENTATIONGUIDES, indentView, Unused); + } + + /// Are the indentation guides visible? (Scintilla feature 2133) + public int GetIndentationGuides() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETINDENTATIONGUIDES, Unused, Unused); + return (int) res; + } + + /// + /// Set the highlighted indentation guide column. + /// 0 = no highlighted guide. + /// (Scintilla feature 2134) + /// + public void SetHighlightGuide(int column) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETHIGHLIGHTGUIDE, column, Unused); + } + + /// Get the highlighted indentation guide column. (Scintilla feature 2135) + public int GetHighlightGuide() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETHIGHLIGHTGUIDE, Unused, Unused); + return (int) res; + } + + /// Get the position after the last visible characters on a line. (Scintilla feature 2136) + public Position GetLineEndPosition(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDPOSITION, line, Unused); + return new Position((int) res); + } + + /// Get the code page used to interpret the bytes of the document as characters. (Scintilla feature 2137) + public int GetCodePage() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCODEPAGE, Unused, Unused); + return (int) res; + } + + /// Get the foreground colour of the caret. (Scintilla feature 2138) + public Colour GetCaretFore() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETFORE, Unused, Unused); + return new Colour((int) res); + } + + /// In read-only mode? (Scintilla feature 2140) + public bool GetReadOnly() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETREADONLY, Unused, Unused); + return 1 == (int) res; + } + + /// Sets the position of the caret. (Scintilla feature 2141) + public void SetCurrentPos(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCURRENTPOS, pos.Value, Unused); + } + + /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2142) + public void SetSelectionStart(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONSTART, pos.Value, Unused); + } + + /// Returns the position at the start of the selection. (Scintilla feature 2143) + public Position GetSelectionStart() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONSTART, Unused, Unused); + return new Position((int) res); + } + + /// Sets the position that ends the selection - this becomes the currentPosition. (Scintilla feature 2144) + public void SetSelectionEnd(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONEND, pos.Value, Unused); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2145) + public Position GetSelectionEnd() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONEND, Unused, Unused); + return new Position((int) res); + } + + /// Set caret to a position, while removing any existing selection. (Scintilla feature 2556) + public void SetEmptySelection(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETEMPTYSELECTION, pos.Value, Unused); + } + + /// Sets the print magnification added to the point size of each style for printing. (Scintilla feature 2146) + public void SetPrintMagnification(int magnification) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTMAGNIFICATION, magnification, Unused); + } + + /// Returns the print magnification. (Scintilla feature 2147) + public int GetPrintMagnification() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTMAGNIFICATION, Unused, Unused); + return (int) res; + } + + /// Modify colours when printing for clearer printed text. (Scintilla feature 2148) + public void SetPrintColourMode(int mode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTCOLOURMODE, mode, Unused); + } + + /// Returns the print colour mode. (Scintilla feature 2149) + public int GetPrintColourMode() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTCOLOURMODE, Unused, Unused); + return (int) res; + } + + /// Find some text in the document. (Scintilla feature 2150) + public Position FindText(int flags, TextToFind ft) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FINDTEXT, flags, ft.NativePointer); + return new Position((int) res); + } + + /// Retrieve the display line at the top of the display. (Scintilla feature 2152) + public int GetFirstVisibleLine() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETFIRSTVISIBLELINE, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINE, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINECOUNT, Unused, Unused); + return (int) res; + } + + /// Sets the size in pixels of the left margin. (Scintilla feature 2155) + public void SetMarginLeft(int pixelWidth) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINLEFT, Unused, pixelWidth); + } + + /// Returns the size in pixels of the left margin. (Scintilla feature 2156) + public int GetMarginLeft() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINLEFT, Unused, Unused); + return (int) res; + } + + /// Sets the size in pixels of the right margin. (Scintilla feature 2157) + public void SetMarginRight(int pixelWidth) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINRIGHT, Unused, pixelWidth); + } + + /// Returns the size in pixels of the right margin. (Scintilla feature 2158) + public int GetMarginRight() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINRIGHT, Unused, Unused); + return (int) res; + } + + /// Is the document different from when it was last saved? (Scintilla feature 2159) + public bool GetModify() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMODIFY, Unused, Unused); + return 1 == (int) res; + } + + /// Select a range of text. (Scintilla feature 2160) + public void SetSel(Position start, Position end) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSEL, start.Value, end.Value); + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELTEXT, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXTRANGE, Unused, tr.NativePointer); + return (int) res; + } + + /// Draw the selection in normal style or with selection highlighted. (Scintilla feature 2163) + public void HideSelection(bool normal) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HIDESELECTION, normal ? 1 : 0, Unused); + } + + /// Retrieve the x value of the point in the window where a position is displayed. (Scintilla feature 2164) + public int PointXFromPosition(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_POINTXFROMPOSITION, Unused, pos.Value); + return (int) res; + } + + /// Retrieve the y value of the point in the window where a position is displayed. (Scintilla feature 2165) + public int PointYFromPosition(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_POINTYFROMPOSITION, Unused, pos.Value); + return (int) res; + } + + /// Retrieve the line containing a position. (Scintilla feature 2166) + public int LineFromPosition(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEFROMPOSITION, pos.Value, Unused); + return (int) res; + } + + /// Retrieve the position at the start of a line. (Scintilla feature 2167) + public Position PositionFromLine(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONFROMLINE, line, Unused); + return new Position((int) res); + } + + /// Scroll horizontally and vertically. (Scintilla feature 2168) + public void LineScroll(int columns, int lines) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLL, columns, lines); + } + + /// Ensure the caret is visible. (Scintilla feature 2169) + public void ScrollCaret() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLCARET, Unused, 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(Position secondary, Position primary) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLRANGE, secondary.Value, primary.Value); + } + + /// Replace the selected text with the argument text. (Scintilla feature 2170) + public unsafe void ReplaceSel(string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_REPLACESEL, Unused, (IntPtr) textPtr); + } + } + + /// Set to read only or read write. (Scintilla feature 2171) + public void SetReadOnly(bool readOnly) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETREADONLY, readOnly ? 1 : 0, Unused); + } + + /// Null operation. (Scintilla feature 2172) + public void Null() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_NULL, Unused, Unused); + } + + /// Will a paste succeed? (Scintilla feature 2173) + public bool CanPaste() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CANPASTE, Unused, Unused); + return 1 == (int) res; + } + + /// Are there any undoable actions in the undo history? (Scintilla feature 2174) + public bool CanUndo() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CANUNDO, Unused, Unused); + return 1 == (int) res; + } + + /// Delete the undo history. (Scintilla feature 2175) + public void EmptyUndoBuffer() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_EMPTYUNDOBUFFER, Unused, Unused); + } + + /// Undo one action in the undo history. (Scintilla feature 2176) + public void Undo() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_UNDO, Unused, Unused); + } + + /// Cut the selection to the clipboard. (Scintilla feature 2177) + public void Cut() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CUT, Unused, Unused); + } + + /// Copy the selection to the clipboard. (Scintilla feature 2178) + public void Copy() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_COPY, Unused, Unused); + } + + /// Paste the contents of the clipboard into the document replacing the selection. (Scintilla feature 2179) + public void Paste() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PASTE, Unused, Unused); + } + + /// Clear the selection. (Scintilla feature 2180) + public void Clear() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEAR, Unused, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETTEXT, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXT, length, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// Retrieve the number of characters in the document. (Scintilla feature 2183) + public int GetTextLength() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTEXTLENGTH, Unused, Unused); + return (int) res; + } + + /// 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, Unused, 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, Unused, Unused); + } + + /// Set to overtype (true) or insert mode. (Scintilla feature 2186) + public void SetOvertype(bool overtype) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETOVERTYPE, overtype ? 1 : 0, Unused); + } + + /// Returns true if overtype mode is active otherwise false is returned. (Scintilla feature 2187) + public bool GetOvertype() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETOVERTYPE, Unused, Unused); + return 1 == (int) res; + } + + /// Set the width of the insert mode caret. (Scintilla feature 2188) + public void SetCaretWidth(int pixelWidth) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETWIDTH, pixelWidth, Unused); + } + + /// Returns the width of the insert mode caret. (Scintilla feature 2189) + public int GetCaretWidth() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETWIDTH, Unused, Unused); + return (int) res; + } + + /// + /// 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(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETSTART, pos.Value, Unused); + } + + /// Get the position that starts the target. (Scintilla feature 2191) + public Position GetTargetStart() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETSTART, Unused, Unused); + return new Position((int) res); + } + + /// + /// 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(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETEND, pos.Value, Unused); + } + + /// Get the position that ends the target. (Scintilla feature 2193) + public Position GetTargetEnd() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETEND, Unused, Unused); + return new Position((int) res); + } + + /// Sets both the start and end of the target in one call. (Scintilla feature 2686) + public void SetTargetRange(Position start, Position end) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETTARGETRANGE, start.Value, end.Value); + } + + /// Retrieve the text in the target. (Scintilla feature 2687) + public unsafe string GetTargetText() + { + byte[] charactersBuffer = new byte[10000]; + fixed (byte* charactersPtr = charactersBuffer) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTARGETTEXT, Unused, (IntPtr) charactersPtr); + return Encoding.UTF8.GetString(charactersBuffer).TrimEnd('\0'); + } + } + + /// + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_REPLACETARGET, length, (IntPtr) textPtr); + return (int) res; + } + } + + /// + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_REPLACETARGETRE, length, (IntPtr) textPtr); + return (int) res; + } + } + + /// + /// 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 length of 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHINTARGET, length, (IntPtr) textPtr); + return (int) res; + } + } + + /// Set the search flags used by SearchInTarget. (Scintilla feature 2198) + public void SetSearchFlags(int flags) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSEARCHFLAGS, flags, Unused); + } + + /// Get the search flags used by SearchInTarget. (Scintilla feature 2199) + public int GetSearchFlags() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSEARCHFLAGS, Unused, Unused); + return (int) res; + } + + /// Show a call tip containing a definition near position pos. (Scintilla feature 2200) + public unsafe void CallTipShow(Position pos, string definition) + { + fixed (byte* definitionPtr = Encoding.UTF8.GetBytes(definition)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSHOW, pos.Value, (IntPtr) definitionPtr); + } + } + + /// Remove the call tip from the screen. (Scintilla feature 2201) + public void CallTipCancel() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPCANCEL, Unused, Unused); + } + + /// Is there an active call tip? (Scintilla feature 2202) + public bool CallTipActive() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPACTIVE, Unused, Unused); + return 1 == (int) res; + } + + /// Retrieve the position where the caret was before displaying the call tip. (Scintilla feature 2203) + public Position CallTipPosStart() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPPOSSTART, Unused, Unused); + return new Position((int) res); + } + + /// Set the start position in order to change when backspacing removes the calltip. (Scintilla feature 2214) + public void CallTipSetPosStart(int posStart) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETPOSSTART, posStart, Unused); + } + + /// Highlight a segment of the definition. (Scintilla feature 2204) + public void CallTipSetHlt(int start, int end) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETHLT, start, end); + } + + /// Set the background colour for the call tip. (Scintilla feature 2205) + public void CallTipSetBack(Colour back) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETBACK, back.Value, Unused); + } + + /// Set the foreground colour for the call tip. (Scintilla feature 2206) + public void CallTipSetFore(Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETFORE, fore.Value, Unused); + } + + /// Set the foreground colour for the highlighted part of the call tip. (Scintilla feature 2207) + public void CallTipSetForeHlt(Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETFOREHLT, fore.Value, Unused); + } + + /// Enable use of STYLE_CALLTIP and set call tip tab size in pixels. (Scintilla feature 2212) + public void CallTipUseStyle(int tabSize) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPUSESTYLE, tabSize, Unused); + } + + /// Set position of calltip, above or below text. (Scintilla feature 2213) + public void CallTipSetPosition(bool above) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CALLTIPSETPOSITION, above ? 1 : 0, Unused); + } + + /// Find the display line of a document line taking hidden lines into account. (Scintilla feature 2220) + public int VisibleFromDocLine(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VISIBLEFROMDOCLINE, line, Unused); + return (int) res; + } + + /// Find the document line of a display line taking hidden lines into account. (Scintilla feature 2221) + public int DocLineFromVisible(int lineDisplay) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DOCLINEFROMVISIBLE, lineDisplay, Unused); + return (int) res; + } + + /// The number of display lines needed to wrap a document line (Scintilla feature 2235) + public int WrapCount(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WRAPCOUNT, line, Unused); + return (int) res; + } + + /// + /// 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, int level) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDLEVEL, line, level); + } + + /// Retrieve the fold level of a line. (Scintilla feature 2223) + public int GetFoldLevel(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDLEVEL, line, Unused); + return (int) res; + } + + /// Find the last child line of a header line. (Scintilla feature 2224) + public int GetLastChild(int line, int level) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLASTCHILD, line, level); + return (int) res; + } + + /// Find the parent line of a child line. (Scintilla feature 2225) + public int GetFoldParent(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDPARENT, line, Unused); + return (int) res; + } + + /// Make a range of lines visible. (Scintilla feature 2226) + public void ShowLines(int lineStart, int lineEnd) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SHOWLINES, lineStart, lineEnd); + } + + /// Make a range of lines invisible. (Scintilla feature 2227) + public void HideLines(int lineStart, int lineEnd) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HIDELINES, lineStart, lineEnd); + } + + /// Is a line visible? (Scintilla feature 2228) + public bool GetLineVisible(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEVISIBLE, line, Unused); + return 1 == (int) res; + } + + /// Are all lines visible? (Scintilla feature 2236) + public bool GetAllLinesVisible() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETALLLINESVISIBLE, Unused, Unused); + return 1 == (int) res; + } + + /// Show the children of a header line. (Scintilla feature 2229) + public void SetFoldExpanded(int line, bool expanded) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDEXPANDED, line, expanded ? 1 : 0); + } + + /// Is a header line expanded? (Scintilla feature 2230) + public bool GetFoldExpanded(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETFOLDEXPANDED, line, Unused); + return 1 == (int) res; + } + + /// Switch a header line between expanded and contracted. (Scintilla feature 2231) + public void ToggleFold(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_TOGGLEFOLD, line, Unused); + } + + /// Expand or contract a fold header. (Scintilla feature 2237) + public void FoldLine(int line, int action) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FOLDLINE, line, action); + } + + /// Expand or contract a fold header and its children. (Scintilla feature 2238) + public void FoldChildren(int line, int action) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FOLDCHILDREN, line, 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, int level) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_EXPANDCHILDREN, line, level); + } + + /// Expand or contract all fold headers. (Scintilla feature 2662) + public void FoldAll(int action) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FOLDALL, action, Unused); + } + + /// Ensure a particular line is visible by expanding any header line hiding it. (Scintilla feature 2232) + public void EnsureVisible(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ENSUREVISIBLE, line, Unused); + } + + /// Set automatic folding behaviours. (Scintilla feature 2663) + public void SetAutomaticFold(int automaticFold) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETAUTOMATICFOLD, automaticFold, Unused); + } + + /// Get automatic folding behaviours. (Scintilla feature 2664) + public int GetAutomaticFold() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETAUTOMATICFOLD, Unused, Unused); + return (int) res; + } + + /// Set some style options for folding. (Scintilla feature 2233) + public void SetFoldFlags(int flags) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDFLAGS, flags, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ENSUREVISIBLEENFORCEPOLICY, line, Unused); + } + + /// Sets whether a tab pressed when caret is within indentation indents. (Scintilla feature 2260) + public void SetTabIndents(bool tabIndents) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETTABINDENTS, tabIndents ? 1 : 0, Unused); + } + + /// Does a tab pressed when caret is within indentation indent? (Scintilla feature 2261) + public bool GetTabIndents() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTABINDENTS, Unused, Unused); + return 1 == (int) res; + } + + /// Sets whether a backspace pressed when caret is within indentation unindents. (Scintilla feature 2262) + public void SetBackSpaceUnIndents(bool bsUnIndents) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETBACKSPACEUNINDENTS, bsUnIndents ? 1 : 0, Unused); + } + + /// Does a backspace pressed when caret is within indentation unindent? (Scintilla feature 2263) + public bool GetBackSpaceUnIndents() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETBACKSPACEUNINDENTS, Unused, Unused); + return 1 == (int) res; + } + + /// Sets the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2264) + public void SetMouseDwellTime(int periodMilliseconds) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSEDWELLTIME, periodMilliseconds, Unused); + } + + /// Retrieve the time the mouse must sit still to generate a mouse dwell event. (Scintilla feature 2265) + public int GetMouseDwellTime() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSEDWELLTIME, Unused, Unused); + return (int) res; + } + + /// Get position of start of word. (Scintilla feature 2266) + public int WordStartPosition(Position pos, bool onlyWordCharacters) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDSTARTPOSITION, pos.Value, onlyWordCharacters ? 1 : 0); + return (int) res; + } + + /// Get position of end of word. (Scintilla feature 2267) + public int WordEndPosition(Position pos, bool onlyWordCharacters) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDENDPOSITION, pos.Value, onlyWordCharacters ? 1 : 0); + return (int) res; + } + + /// Sets whether text is word wrapped. (Scintilla feature 2268) + public void SetWrapMode(int mode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPMODE, mode, Unused); + } + + /// Retrieve whether text is word wrapped. (Scintilla feature 2269) + public int GetWrapMode() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPMODE, Unused, Unused); + return (int) res; + } + + /// Set the display mode of visual flags for wrapped lines. (Scintilla feature 2460) + public void SetWrapVisualFlags(int wrapVisualFlags) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPVISUALFLAGS, wrapVisualFlags, Unused); + } + + /// Retrive the display mode of visual flags for wrapped lines. (Scintilla feature 2461) + public int GetWrapVisualFlags() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPVISUALFLAGS, Unused, Unused); + return (int) res; + } + + /// Set the location of visual flags for wrapped lines. (Scintilla feature 2462) + public void SetWrapVisualFlagsLocation(int wrapVisualFlagsLocation) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPVISUALFLAGSLOCATION, wrapVisualFlagsLocation, Unused); + } + + /// Retrive the location of visual flags for wrapped lines. (Scintilla feature 2463) + public int GetWrapVisualFlagsLocation() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPVISUALFLAGSLOCATION, Unused, Unused); + return (int) res; + } + + /// Set the start indent for wrapped lines. (Scintilla feature 2464) + public void SetWrapStartIndent(int indent) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPSTARTINDENT, indent, Unused); + } + + /// Retrive the start indent for wrapped lines. (Scintilla feature 2465) + public int GetWrapStartIndent() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPSTARTINDENT, Unused, Unused); + return (int) res; + } + + /// Sets how wrapped sublines are placed. Default is fixed. (Scintilla feature 2472) + public void SetWrapIndentMode(int mode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWRAPINDENTMODE, mode, Unused); + } + + /// Retrieve how wrapped sublines are placed. Default is fixed. (Scintilla feature 2473) + public int GetWrapIndentMode() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETWRAPINDENTMODE, Unused, Unused); + return (int) res; + } + + /// Sets the degree of caching of layout information. (Scintilla feature 2272) + public void SetLayoutCache(int mode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETLAYOUTCACHE, mode, Unused); + } + + /// Retrieve the degree of caching of layout information. (Scintilla feature 2273) + public int GetLayoutCache() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLAYOUTCACHE, Unused, Unused); + return (int) res; + } + + /// Sets the document width assumed for scrolling. (Scintilla feature 2274) + public void SetScrollWidth(int pixelWidth) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSCROLLWIDTH, pixelWidth, Unused); + } + + /// Retrieve the document width assumed for scrolling. (Scintilla feature 2275) + public int GetScrollWidth() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSCROLLWIDTH, Unused, Unused); + return (int) res; + } + + /// Sets whether the maximum width line displayed is used to set scroll width. (Scintilla feature 2516) + public void SetScrollWidthTracking(bool tracking) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSCROLLWIDTHTRACKING, tracking ? 1 : 0, Unused); + } + + /// Retrieve whether the scroll width tracks wide lines. (Scintilla feature 2517) + public bool GetScrollWidthTracking() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSCROLLWIDTHTRACKING, Unused, Unused); + return 1 == (int) res; + } + + /// + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_TEXTWIDTH, style, (IntPtr) textPtr); + return (int) res; + } + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETENDATLASTLINE, endAtLastLine ? 1 : 0, Unused); + } + + /// + /// Retrieve whether the maximum scroll position has the last + /// line at the bottom of the view. + /// (Scintilla feature 2278) + /// + public bool GetEndAtLastLine() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETENDATLASTLINE, Unused, Unused); + return 1 == (int) res; + } + + /// Retrieve the height of a particular line of text in pixels. (Scintilla feature 2279) + public int TextHeight(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_TEXTHEIGHT, line, Unused); + return (int) res; + } + + /// Show or hide the vertical scroll bar. (Scintilla feature 2280) + public void SetVScrollBar(bool show) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETVSCROLLBAR, show ? 1 : 0, Unused); + } + + /// Is the vertical scroll bar visible? (Scintilla feature 2281) + public bool GetVScrollBar() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETVSCROLLBAR, Unused, Unused); + return 1 == (int) res; + } + + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_APPENDTEXT, length, (IntPtr) textPtr); + } + } + + /// Is drawing done in two phases with backgrounds drawn before foregrounds? (Scintilla feature 2283) + public bool GetTwoPhaseDraw() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTWOPHASEDRAW, Unused, Unused); + return 1 == (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETTWOPHASEDRAW, twoPhase ? 1 : 0, Unused); + } + + /// How many phases is drawing done in? (Scintilla feature 2673) + public int GetPhasesDraw() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPHASESDRAW, Unused, Unused); + return (int) res; + } + + /// + /// 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(int phases) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETPHASESDRAW, phases, Unused); + } + + /// Choose the quality level for text from the FontQuality enumeration. (Scintilla feature 2611) + public void SetFontQuality(int fontQuality) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETFONTQUALITY, fontQuality, Unused); + } + + /// Retrieve the quality level for text. (Scintilla feature 2612) + public int GetFontQuality() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETFONTQUALITY, Unused, Unused); + return (int) res; + } + + /// Scroll so that a display line is at the top of the display. (Scintilla feature 2613) + public void SetFirstVisibleLine(int lineDisplay) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETFIRSTVISIBLELINE, lineDisplay, Unused); + } + + /// Change the effect of pasting when there are multiple selections. (Scintilla feature 2614) + public void SetMultiPaste(int multiPaste) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMULTIPASTE, multiPaste, Unused); + } + + /// Retrieve the effect of pasting when there are multiple selections.. (Scintilla feature 2615) + public int GetMultiPaste() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMULTIPASTE, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTAG, tagNumber, (IntPtr) tagValuePtr); + return Encoding.UTF8.GetString(tagValueBuffer).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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_TARGETFROMSELECTION, Unused, Unused); + } + + /// Join the lines in the target. (Scintilla feature 2288) + public void LinesJoin() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINESJOIN, Unused, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINESSPLIT, pixelWidth, Unused); + } + + /// Set the colours used as a chequerboard pattern in the fold margin (Scintilla feature 2290) + public void SetFoldMarginColour(bool useSetting, Colour back) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDMARGINCOLOUR, useSetting ? 1 : 0, back.Value); + } + + /// Set the colours used as a chequerboard pattern in the fold margin (Scintilla feature 2291) + public void SetFoldMarginHiColour(bool useSetting, Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETFOLDMARGINHICOLOUR, useSetting ? 1 : 0, fore.Value); + } + + /// Move caret down one line. (Scintilla feature 2300) + public void LineDown() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWN, Unused, Unused); + } + + /// Move caret down one line extending selection to new caret position. (Scintilla feature 2301) + public void LineDownExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWNEXTEND, Unused, Unused); + } + + /// Move caret up one line. (Scintilla feature 2302) + public void LineUp() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEUP, Unused, Unused); + } + + /// Move caret up one line extending selection to new caret position. (Scintilla feature 2303) + public void LineUpExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEUPEXTEND, Unused, Unused); + } + + /// Move caret left one character. (Scintilla feature 2304) + public void CharLeft() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFT, Unused, Unused); + } + + /// Move caret left one character extending selection to new caret position. (Scintilla feature 2305) + public void CharLeftExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFTEXTEND, Unused, Unused); + } + + /// Move caret right one character. (Scintilla feature 2306) + public void CharRight() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHT, Unused, Unused); + } + + /// Move caret right one character extending selection to new caret position. (Scintilla feature 2307) + public void CharRightExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHTEXTEND, Unused, Unused); + } + + /// Move caret left one word. (Scintilla feature 2308) + public void WordLeft() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFT, Unused, Unused); + } + + /// Move caret left one word extending selection to new caret position. (Scintilla feature 2309) + public void WordLeftExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTEXTEND, Unused, Unused); + } + + /// Move caret right one word. (Scintilla feature 2310) + public void WordRight() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHT, Unused, Unused); + } + + /// Move caret right one word extending selection to new caret position. (Scintilla feature 2311) + public void WordRightExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTEXTEND, Unused, Unused); + } + + /// Move caret to first position on line. (Scintilla feature 2312) + public void Home() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HOME, Unused, Unused); + } + + /// Move caret to first position on line extending selection to new caret position. (Scintilla feature 2313) + public void HomeExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HOMEEXTEND, Unused, Unused); + } + + /// Move caret to last position on line. (Scintilla feature 2314) + public void LineEnd() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEEND, Unused, Unused); + } + + /// Move caret to last position on line extending selection to new caret position. (Scintilla feature 2315) + public void LineEndExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDEXTEND, Unused, Unused); + } + + /// Move caret to first position in document. (Scintilla feature 2316) + public void DocumentStart() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTSTART, Unused, Unused); + } + + /// Move caret to first position in document extending selection to new caret position. (Scintilla feature 2317) + public void DocumentStartExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTSTARTEXTEND, Unused, Unused); + } + + /// Move caret to last position in document. (Scintilla feature 2318) + public void DocumentEnd() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTEND, Unused, Unused); + } + + /// Move caret to last position in document extending selection to new caret position. (Scintilla feature 2319) + public void DocumentEndExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DOCUMENTENDEXTEND, Unused, Unused); + } + + /// Move caret one page up. (Scintilla feature 2320) + public void PageUp() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUP, Unused, Unused); + } + + /// Move caret one page up extending selection to new caret position. (Scintilla feature 2321) + public void PageUpExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUPEXTEND, Unused, Unused); + } + + /// Move caret one page down. (Scintilla feature 2322) + public void PageDown() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWN, Unused, Unused); + } + + /// Move caret one page down extending selection to new caret position. (Scintilla feature 2323) + public void PageDownExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWNEXTEND, Unused, Unused); + } + + /// Switch from insert to overtype mode or the reverse. (Scintilla feature 2324) + public void EditToggleOvertype() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_EDITTOGGLEOVERTYPE, Unused, Unused); + } + + /// Cancel any modes such as call tip or auto-completion list display. (Scintilla feature 2325) + public void Cancel() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CANCEL, Unused, Unused); + } + + /// Delete the selection or if no selection, the character before the caret. (Scintilla feature 2326) + public void DeleteBack() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DELETEBACK, Unused, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_TAB, Unused, Unused); + } + + /// Dedent the selected lines. (Scintilla feature 2328) + public void BackTab() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_BACKTAB, Unused, Unused); + } + + /// Insert a new line, may use a CRLF, CR or LF depending on EOL mode. (Scintilla feature 2329) + public void NewLine() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_NEWLINE, Unused, Unused); + } + + /// Insert a Form Feed character. (Scintilla feature 2330) + public void FormFeed() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FORMFEED, Unused, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VCHOME, Unused, Unused); + } + + /// Like VCHome but extending selection to new caret position. (Scintilla feature 2332) + public void VCHomeExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEEXTEND, Unused, Unused); + } + + /// Magnify the displayed text by increasing the sizes by 1 point. (Scintilla feature 2333) + public void ZoomIn() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ZOOMIN, Unused, Unused); + } + + /// Make the displayed text smaller by decreasing the sizes by 1 point. (Scintilla feature 2334) + public void ZoomOut() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ZOOMOUT, Unused, Unused); + } + + /// Delete the word to the left of the caret. (Scintilla feature 2335) + public void DelWordLeft() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDLEFT, Unused, Unused); + } + + /// Delete the word to the right of the caret. (Scintilla feature 2336) + public void DelWordRight() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDRIGHT, Unused, Unused); + } + + /// Delete the word to the right of the caret, but not the trailing non-word characters. (Scintilla feature 2518) + public void DelWordRightEnd() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DELWORDRIGHTEND, Unused, Unused); + } + + /// Cut the line containing the caret. (Scintilla feature 2337) + public void LineCut() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINECUT, Unused, Unused); + } + + /// Delete the line containing the caret. (Scintilla feature 2338) + public void LineDelete() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEDELETE, Unused, Unused); + } + + /// Switch the current line with the previous. (Scintilla feature 2339) + public void LineTranspose() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINETRANSPOSE, Unused, Unused); + } + + /// Duplicate the current line. (Scintilla feature 2404) + public void LineDuplicate() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEDUPLICATE, Unused, Unused); + } + + /// Transform the selection to lower case. (Scintilla feature 2340) + public void LowerCase() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LOWERCASE, Unused, Unused); + } + + /// Transform the selection to upper case. (Scintilla feature 2341) + public void UpperCase() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_UPPERCASE, Unused, Unused); + } + + /// Scroll the document down, keeping the caret visible. (Scintilla feature 2342) + public void LineScrollDown() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLLDOWN, Unused, Unused); + } + + /// Scroll the document up, keeping the caret visible. (Scintilla feature 2343) + public void LineScrollUp() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINESCROLLUP, Unused, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DELETEBACKNOTLINE, Unused, Unused); + } + + /// Move caret to first position on display line. (Scintilla feature 2345) + public void HomeDisplay() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HOMEDISPLAY, Unused, Unused); + } + + /// + /// Move caret to first position on display line extending selection to + /// new caret position. + /// (Scintilla feature 2346) + /// + public void HomeDisplayExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HOMEDISPLAYEXTEND, Unused, Unused); + } + + /// Move caret to last position on display line. (Scintilla feature 2347) + public void LineEndDisplay() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDDISPLAY, Unused, Unused); + } + + /// + /// Move caret to last position on display line extending selection to new + /// caret position. + /// (Scintilla feature 2348) + /// + public void LineEndDisplayExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDDISPLAYEXTEND, Unused, Unused); + } + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2349) + /// + public void HomeWrap() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HOMEWRAP, Unused, Unused); + } + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2450) + /// + public void HomeWrapExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HOMEWRAPEXTEND, Unused, Unused); + } + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2451) + /// + public void LineEndWrap() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDWRAP, Unused, Unused); + } + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2452) + /// + public void LineEndWrapExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDWRAPEXTEND, Unused, Unused); + } + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2453) + /// + public void VCHomeWrap() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEWRAP, Unused, Unused); + } + + /// + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + /// (Scintilla feature 2454) + /// + public void VCHomeWrapExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEWRAPEXTEND, Unused, Unused); + } + + /// Copy the line containing the caret. (Scintilla feature 2455) + public void LineCopy() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINECOPY, Unused, Unused); + } + + /// Move the caret inside current view if it's not there already. (Scintilla feature 2401) + public void MoveCaretInsideView() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MOVECARETINSIDEVIEW, Unused, Unused); + } + + /// How many characters are on a line, including end of line characters? (Scintilla feature 2350) + public int LineLength(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINELENGTH, line, Unused); + return (int) res; + } + + /// Highlight the characters at two positions. (Scintilla feature 2351) + public void BraceHighlight(Position pos1, Position pos2) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_BRACEHIGHLIGHT, pos1.Value, pos2.Value); + } + + /// Use specified indicator to highlight matching braces instead of changing their style. (Scintilla feature 2498) + public void BraceHighlightIndicator(bool useBraceHighlightIndicator, int indicator) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_BRACEHIGHLIGHTINDICATOR, useBraceHighlightIndicator ? 1 : 0, indicator); + } + + /// Highlight the character at a position indicating there is no matching brace. (Scintilla feature 2352) + public void BraceBadLight(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_BRACEBADLIGHT, pos.Value, Unused); + } + + /// Use specified indicator to highlight non matching brace instead of changing its style. (Scintilla feature 2499) + public void BraceBadLightIndicator(bool useBraceBadLightIndicator, int indicator) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_BRACEBADLIGHTINDICATOR, useBraceBadLightIndicator ? 1 : 0, indicator); + } + + /// Find the position of a matching brace or INVALID_POSITION if no match. (Scintilla feature 2353) + public Position BraceMatch(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_BRACEMATCH, pos.Value, Unused); + return new Position((int) res); + } + + /// Are the end of line characters visible? (Scintilla feature 2355) + public bool GetViewEOL() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETVIEWEOL, Unused, Unused); + return 1 == (int) res; + } + + /// Make the end of line characters visible or invisible. (Scintilla feature 2356) + public void SetViewEOL(bool visible) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETVIEWEOL, visible ? 1 : 0, Unused); + } + + /// Retrieve a pointer to the document object. (Scintilla feature 2357) + public IntPtr GetDocPointer() + { + return Win32.SendMessage(scintilla, SciMsg.SCI_GETDOCPOINTER, Unused, Unused); + } + + /// Change the document object used. (Scintilla feature 2358) + public void SetDocPointer(IntPtr pointer) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETDOCPOINTER, Unused, pointer); + } + + /// Set which document modification events are sent to the container. (Scintilla feature 2359) + public void SetModEventMask(int mask) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMODEVENTMASK, mask, Unused); + } + + /// Retrieve the column number which text should be kept within. (Scintilla feature 2360) + public int GetEdgeColumn() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGECOLUMN, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGECOLUMN, column, Unused); + } + + /// Retrieve the edge highlight mode. (Scintilla feature 2362) + public int GetEdgeMode() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGEMODE, Unused, Unused); + return (int) res; + } + + /// + /// The edge may be displayed by a line (EDGE_LINE) or by highlighting text that + /// goes beyond it (EDGE_BACKGROUND) or not displayed at all (EDGE_NONE). + /// (Scintilla feature 2363) + /// + public void SetEdgeMode(int mode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGEMODE, mode, Unused); + } + + /// Retrieve the colour used in edge indication. (Scintilla feature 2364) + public Colour GetEdgeColour() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETEDGECOLOUR, Unused, Unused); + return new Colour((int) res); + } + + /// Change the colour used in edge indication. (Scintilla feature 2365) + public void SetEdgeColour(Colour edgeColour) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETEDGECOLOUR, edgeColour.Value, Unused); + } + + /// Sets the current caret position to be the search anchor. (Scintilla feature 2366) + public void SearchAnchor() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHANCHOR, Unused, Unused); + } + + /// + /// Find some text starting at the search anchor. + /// Does not ensure the selection is visible. + /// (Scintilla feature 2367) + /// + public unsafe int SearchNext(int flags, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHNEXT, flags, (IntPtr) textPtr); + return (int) res; + } + } + + /// + /// 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(int flags, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SEARCHPREV, flags, (IntPtr) textPtr); + return (int) res; + } + } + + /// Retrieves the number of lines completely visible. (Scintilla feature 2370) + public int LinesOnScreen() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINESONSCREEN, Unused, Unused); + return (int) res; + } + + /// + /// Set whether a pop up menu is displayed automatically when the user presses + /// the wrong mouse button. + /// (Scintilla feature 2371) + /// + public void UsePopUp(bool allowPopUp) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_USEPOPUP, allowPopUp ? 1 : 0, Unused); + } + + /// Is the selection rectangular? The alternative is the more common stream selection. (Scintilla feature 2372) + public bool SelectionIsRectangle() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SELECTIONISRECTANGLE, Unused, Unused); + return 1 == (int) res; + } + + /// + /// 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 zoom) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETZOOM, zoom, Unused); + } + + /// Retrieve the zoom level. (Scintilla feature 2374) + public int GetZoom() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETZOOM, Unused, Unused); + return (int) res; + } + + /// + /// Create a new document object. + /// Starts with reference count of 1 and not selected into editor. + /// (Scintilla feature 2375) + /// + public int CreateDocument() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CREATEDOCUMENT, Unused, Unused); + return (int) res; + } + + /// Extend life of document. (Scintilla feature 2376) + public void AddRefDocument(int doc) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ADDREFDOCUMENT, Unused, doc); + } + + /// Release a reference to the document, deleting document if it fades to black. (Scintilla feature 2377) + public void ReleaseDocument(int doc) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_RELEASEDOCUMENT, Unused, doc); + } + + /// Get which document modification events are sent to the container. (Scintilla feature 2378) + public int GetModEventMask() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMODEVENTMASK, Unused, Unused); + return (int) res; + } + + /// Change internal focus flag. (Scintilla feature 2380) + public void SetFocus(bool focus) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETFOCUS, focus ? 1 : 0, Unused); + } + + /// Get internal focus flag. (Scintilla feature 2381) + public bool GetFocus() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETFOCUS, Unused, Unused); + return 1 == (int) res; + } + + /// Change error status - 0 = OK. (Scintilla feature 2382) + public void SetStatus(int statusCode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSTATUS, statusCode, Unused); + } + + /// Get error status. (Scintilla feature 2383) + public int GetStatus() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSTATUS, Unused, Unused); + return (int) res; + } + + /// Set whether the mouse is captured when its button is pressed. (Scintilla feature 2384) + public void SetMouseDownCaptures(bool captures) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSEDOWNCAPTURES, captures ? 1 : 0, Unused); + } + + /// Get whether mouse gets captured. (Scintilla feature 2385) + public bool GetMouseDownCaptures() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSEDOWNCAPTURES, Unused, Unused); + return 1 == (int) res; + } + + /// Sets the cursor to one of the SC_CURSOR* values. (Scintilla feature 2386) + public void SetCursor(int cursorType) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCURSOR, cursorType, Unused); + } + + /// Get cursor type. (Scintilla feature 2387) + public int GetCursor() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCURSOR, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCONTROLCHARSYMBOL, symbol, Unused); + } + + /// Get the way control characters are displayed. (Scintilla feature 2389) + public int GetControlCharSymbol() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCONTROLCHARSYMBOL, Unused, Unused); + return (int) res; + } + + /// Move to the previous change in capitalisation. (Scintilla feature 2390) + public void WordPartLeft() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTLEFT, Unused, Unused); + } + + /// + /// Move to the previous change in capitalisation extending selection + /// to new caret position. + /// (Scintilla feature 2391) + /// + public void WordPartLeftExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTLEFTEXTEND, Unused, Unused); + } + + /// Move to the change next in capitalisation. (Scintilla feature 2392) + public void WordPartRight() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTRIGHT, Unused, Unused); + } + + /// + /// Move to the next change in capitalisation extending selection + /// to new caret position. + /// (Scintilla feature 2393) + /// + public void WordPartRightExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDPARTRIGHTEXTEND, Unused, 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(int visiblePolicy, int visibleSlop) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETVISIBLEPOLICY, visiblePolicy, visibleSlop); + } + + /// Delete back from the current position to the start of the line. (Scintilla feature 2395) + public void DelLineLeft() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DELLINELEFT, Unused, Unused); + } + + /// Delete forwards from the current position to the end of the line. (Scintilla feature 2396) + public void DelLineRight() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DELLINERIGHT, Unused, Unused); + } + + /// Get and Set the xOffset (ie, horizontal scroll position). (Scintilla feature 2397) + public void SetXOffset(int newOffset) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETXOFFSET, newOffset, Unused); + } + + /// Get and Set the xOffset (ie, horizontal scroll position). (Scintilla feature 2398) + public int GetXOffset() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETXOFFSET, Unused, Unused); + return (int) res; + } + + /// Set the last x chosen value to be the caret x position. (Scintilla feature 2399) + public void ChooseCaretX() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHOOSECARETX, Unused, Unused); + } + + /// Set the focus to this Scintilla widget. (Scintilla feature 2400) + public void GrabFocus() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GRABFOCUS, Unused, 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(int caretPolicy, int caretSlop) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETXCARETPOLICY, caretPolicy, 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(int caretPolicy, int caretSlop) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETYCARETPOLICY, caretPolicy, caretSlop); + } + + /// Set printing to line wrapped (SC_WRAP_WORD) or not line wrapped (SC_WRAP_NONE). (Scintilla feature 2406) + public void SetPrintWrapMode(int mode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETPRINTWRAPMODE, mode, Unused); + } + + /// Is printing line wrapped? (Scintilla feature 2407) + public int GetPrintWrapMode() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPRINTWRAPMODE, Unused, Unused); + return (int) res; + } + + /// Set a fore colour for active hotspots. (Scintilla feature 2410) + public void SetHotspotActiveFore(bool useSetting, Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEFORE, useSetting ? 1 : 0, fore.Value); + } + + /// Get the fore colour for active hotspots. (Scintilla feature 2494) + public Colour GetHotspotActiveFore() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEFORE, Unused, Unused); + return new Colour((int) res); + } + + /// Set a back colour for active hotspots. (Scintilla feature 2411) + public void SetHotspotActiveBack(bool useSetting, Colour back) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEBACK, useSetting ? 1 : 0, back.Value); + } + + /// Get the back colour for active hotspots. (Scintilla feature 2495) + public Colour GetHotspotActiveBack() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEBACK, Unused, Unused); + return new Colour((int) res); + } + + /// Enable / Disable underlining active hotspots. (Scintilla feature 2412) + public void SetHotspotActiveUnderline(bool underline) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTACTIVEUNDERLINE, underline ? 1 : 0, Unused); + } + + /// Get whether underlining for active hotspots. (Scintilla feature 2496) + public bool GetHotspotActiveUnderline() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTACTIVEUNDERLINE, Unused, Unused); + return 1 == (int) res; + } + + /// Limit hotspots to single line so hotspots on two lines don't merge. (Scintilla feature 2421) + public void SetHotspotSingleLine(bool singleLine) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETHOTSPOTSINGLELINE, singleLine ? 1 : 0, Unused); + } + + /// Get the HotspotSingleLine property (Scintilla feature 2497) + public bool GetHotspotSingleLine() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETHOTSPOTSINGLELINE, Unused, Unused); + return 1 == (int) res; + } + + /// Move caret between paragraphs (delimited by empty lines). (Scintilla feature 2413) + public void ParaDown() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PARADOWN, Unused, Unused); + } + + /// Move caret between paragraphs (delimited by empty lines). (Scintilla feature 2414) + public void ParaDownExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PARADOWNEXTEND, Unused, Unused); + } + + /// Move caret between paragraphs (delimited by empty lines). (Scintilla feature 2415) + public void ParaUp() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PARAUP, Unused, Unused); + } + + /// Move caret between paragraphs (delimited by empty lines). (Scintilla feature 2416) + public void ParaUpExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PARAUPEXTEND, Unused, Unused); + } + + /// + /// Given a valid document position, return the previous position taking code + /// page into account. Returns 0 if passed 0. + /// (Scintilla feature 2417) + /// + public Position PositionBefore(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONBEFORE, pos.Value, Unused); + return new Position((int) res); + } + + /// + /// 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 Position PositionAfter(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONAFTER, pos.Value, Unused); + return new Position((int) res); + } + + /// + /// 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 Position PositionRelative(Position pos, int relative) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_POSITIONRELATIVE, pos.Value, relative); + return new Position((int) res); + } + + /// Copy a range of text to the clipboard. Positions are clipped into the document. (Scintilla feature 2419) + public void CopyRange(Position start, Position end) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_COPYRANGE, start.Value, end.Value); + } + + /// Copy argument text to the clipboard. (Scintilla feature 2420) + public unsafe void CopyText(int length, string text) + { + fixed (byte* textPtr = Encoding.UTF8.GetBytes(text)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_COPYTEXT, 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(int mode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONMODE, mode, Unused); + } + + /// Get the mode of the current selection. (Scintilla feature 2423) + public int GetSelectionMode() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONMODE, Unused, Unused); + return (int) res; + } + + /// 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 Position GetLineSelStartPosition(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESELSTARTPOSITION, line, Unused); + return new Position((int) res); + } + + /// 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 Position GetLineSelEndPosition(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINESELENDPOSITION, line, Unused); + return new Position((int) res); + } + + /// Move caret down one line, extending rectangular selection to new caret position. (Scintilla feature 2426) + public void LineDownRectExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEDOWNRECTEXTEND, Unused, Unused); + } + + /// Move caret up one line, extending rectangular selection to new caret position. (Scintilla feature 2427) + public void LineUpRectExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEUPRECTEXTEND, Unused, Unused); + } + + /// Move caret left one character, extending rectangular selection to new caret position. (Scintilla feature 2428) + public void CharLeftRectExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHARLEFTRECTEXTEND, Unused, Unused); + } + + /// Move caret right one character, extending rectangular selection to new caret position. (Scintilla feature 2429) + public void CharRightRectExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHARRIGHTRECTEXTEND, Unused, Unused); + } + + /// Move caret to first position on line, extending rectangular selection to new caret position. (Scintilla feature 2430) + public void HomeRectExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_HOMERECTEXTEND, Unused, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMERECTEXTEND, Unused, Unused); + } + + /// Move caret to last position on line, extending rectangular selection to new caret position. (Scintilla feature 2432) + public void LineEndRectExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LINEENDRECTEXTEND, Unused, Unused); + } + + /// Move caret one page up, extending rectangular selection to new caret position. (Scintilla feature 2433) + public void PageUpRectExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PAGEUPRECTEXTEND, Unused, Unused); + } + + /// Move caret one page down, extending rectangular selection to new caret position. (Scintilla feature 2434) + public void PageDownRectExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PAGEDOWNRECTEXTEND, Unused, Unused); + } + + /// Move caret to top of page, or one page up if already at top of page. (Scintilla feature 2435) + public void StutteredPageUp() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEUP, Unused, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEUPEXTEND, Unused, Unused); + } + + /// Move caret to bottom of page, or one page down if already at bottom of page. (Scintilla feature 2437) + public void StutteredPageDown() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEDOWN, Unused, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STUTTEREDPAGEDOWNEXTEND, Unused, Unused); + } + + /// Move caret left one word, position cursor at end of word. (Scintilla feature 2439) + public void WordLeftEnd() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTEND, Unused, Unused); + } + + /// Move caret left one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2440) + public void WordLeftEndExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDLEFTENDEXTEND, Unused, Unused); + } + + /// Move caret right one word, position cursor at end of word. (Scintilla feature 2441) + public void WordRightEnd() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTEND, Unused, Unused); + } + + /// Move caret right one word, position cursor at end of word, extending selection to new caret position. (Scintilla feature 2442) + public void WordRightEndExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_WORDRIGHTENDEXTEND, Unused, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETWHITESPACECHARS, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETWHITESPACECHARS, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETPUNCTUATIONCHARS, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPUNCTUATIONCHARS, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCHARSDEFAULT, Unused, Unused); + } + + /// Get currently selected item position in the auto-completion list (Scintilla feature 2445) + public int AutoCGetCurrent() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCURRENT, Unused, Unused); + return (int) res; + } + + /// + /// 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[] sBuffer = new byte[10000]; + fixed (byte* sPtr = sBuffer) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCURRENTTEXT, Unused, (IntPtr) sPtr); + return Encoding.UTF8.GetString(sBuffer).TrimEnd('\0'); + } + } + + /// Set auto-completion case insensitive behaviour to either prefer case-sensitive matches or have no preference. (Scintilla feature 2634) + public void AutoCSetCaseInsensitiveBehaviour(int behaviour) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR, behaviour, Unused); + } + + /// Get auto-completion case insensitive behaviour. (Scintilla feature 2635) + public int AutoCGetCaseInsensitiveBehaviour() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR, Unused, Unused); + return (int) res; + } + + /// Change the effect of autocompleting when there are multiple selections. (Scintilla feature 2636) + public void AutoCSetMulti(int multi) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETMULTI, multi, Unused); + } + + /// Retrieve the effect of autocompleting when there are multiple selections.. (Scintilla feature 2637) + public int AutoCGetMulti() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETMULTI, Unused, Unused); + return (int) res; + } + + /// Set the way autocompletion lists are ordered. (Scintilla feature 2660) + public void AutoCSetOrder(int order) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCSETORDER, order, Unused); + } + + /// Get the way autocompletion lists are ordered. (Scintilla feature 2661) + public int AutoCGetOrder() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_AUTOCGETORDER, Unused, Unused); + return (int) res; + } + + /// Enlarge the document to a particular size of text bytes. (Scintilla feature 2446) + public void Allocate(int bytes) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATE, bytes, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_TARGETASUTF8, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETLENGTHFORENCODE, bytes, 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) + { + IntPtr res = 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FINDCOLUMN, line, column); + return (int) res; + } + + /// Can the caret preferred x position only be changed by explicit movement commands? (Scintilla feature 2457) + public int GetCaretSticky() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETSTICKY, Unused, Unused); + return (int) res; + } + + /// Stop the caret preferred x position changing when the user types. (Scintilla feature 2458) + public void SetCaretSticky(int useCaretStickyBehaviour) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETSTICKY, useCaretStickyBehaviour, Unused); + } + + /// Switch between sticky and non-sticky: meant to be bound to a key. (Scintilla feature 2459) + public void ToggleCaretSticky() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_TOGGLECARETSTICKY, Unused, Unused); + } + + /// Enable/Disable convert-on-paste for line endings (Scintilla feature 2467) + public void SetPasteConvertEndings(bool convert) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETPASTECONVERTENDINGS, convert ? 1 : 0, Unused); + } + + /// Get convert-on-paste setting (Scintilla feature 2468) + public bool GetPasteConvertEndings() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPASTECONVERTENDINGS, Unused, Unused); + return 1 == (int) res; + } + + /// Duplicate the selection. If selection empty duplicate the line containing the caret. (Scintilla feature 2469) + public void SelectionDuplicate() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SELECTIONDUPLICATE, Unused, Unused); + } + + /// Set background alpha of the caret line. (Scintilla feature 2470) + public void SetCaretLineBackAlpha(int alpha) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEBACKALPHA, alpha, Unused); + } + + /// Get the background alpha of the caret line. (Scintilla feature 2471) + public int GetCaretLineBackAlpha() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEBACKALPHA, Unused, Unused); + return (int) res; + } + + /// Set the style of the caret to be drawn. (Scintilla feature 2512) + public void SetCaretStyle(int caretStyle) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETSTYLE, caretStyle, Unused); + } + + /// Returns the current style of the caret. (Scintilla feature 2513) + public int GetCaretStyle() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETSTYLE, Unused, Unused); + return (int) res; + } + + /// Set the indicator used for IndicatorFillRange and IndicatorClearRange (Scintilla feature 2500) + public void SetIndicatorCurrent(int indicator) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETINDICATORCURRENT, indicator, Unused); + } + + /// Get the current indicator (Scintilla feature 2501) + public int GetIndicatorCurrent() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETINDICATORCURRENT, Unused, Unused); + return (int) res; + } + + /// Set the value used for IndicatorFillRange (Scintilla feature 2502) + public void SetIndicatorValue(int value) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETINDICATORVALUE, value, Unused); + } + + /// Get the current indicator value (Scintilla feature 2503) + public int GetIndicatorValue() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETINDICATORVALUE, Unused, Unused); + return (int) res; + } + + /// Turn a indicator on over a range. (Scintilla feature 2504) + public void IndicatorFillRange(int position, int fillLength) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORFILLRANGE, position, fillLength); + } + + /// Turn a indicator off over a range. (Scintilla feature 2505) + public void IndicatorClearRange(int position, int clearLength) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORCLEARRANGE, position, clearLength); + } + + /// Are any indicators present at position? (Scintilla feature 2506) + public int IndicatorAllOnFor(int position) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORALLONFOR, position, Unused); + return (int) res; + } + + /// What value does a particular indicator have at at a position? (Scintilla feature 2507) + public int IndicatorValueAt(int indicator, int position) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORVALUEAT, indicator, position); + return (int) res; + } + + /// Where does a particular indicator start? (Scintilla feature 2508) + public int IndicatorStart(int indicator, int position) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICATORSTART, indicator, position); + return (int) res; + } + + /// Where does a particular indicator end? (Scintilla feature 2509) + public int IndicatorEnd(int indicator, int position) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICATOREND, indicator, position); + return (int) res; + } + + /// Set number of entries in position cache (Scintilla feature 2514) + public void SetPositionCache(int size) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETPOSITIONCACHE, size, Unused); + } + + /// How many entries are allocated to the position cache? (Scintilla feature 2515) + public int GetPositionCache() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPOSITIONCACHE, Unused, Unused); + return (int) res; + } + + /// Copy the selection, if selection empty copy the line with the caret (Scintilla feature 2519) + public void CopyAllowLine() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_COPYALLOWLINE, Unused, 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, Unused, 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 rangeLength bytes. + /// (Scintilla feature 2643) + /// + public IntPtr GetRangePointer(int position, int rangeLength) + { + return Win32.SendMessage(scintilla, SciMsg.SCI_GETRANGEPOINTER, position, rangeLength); + } + + /// + /// Return a position which, to avoid performance costs, should not be within + /// the range of a call to GetRangePointer. + /// (Scintilla feature 2644) + /// + public Position GetGapPosition() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETGAPPOSITION, Unused, Unused); + return new Position((int) res); + } + + /// Set the alpha fill colour of the given indicator. (Scintilla feature 2523) + public void IndicSetAlpha(int indicator, int alpha) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETALPHA, indicator, alpha); + } + + /// Get the alpha fill colour of the given indicator. (Scintilla feature 2524) + public int IndicGetAlpha(int indicator) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETALPHA, indicator, Unused); + return (int) res; + } + + /// Set the alpha outline colour of the given indicator. (Scintilla feature 2558) + public void IndicSetOutlineAlpha(int indicator, int alpha) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICSETOUTLINEALPHA, indicator, alpha); + } + + /// Get the alpha outline colour of the given indicator. (Scintilla feature 2559) + public int IndicGetOutlineAlpha(int indicator) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_INDICGETOUTLINEALPHA, indicator, Unused); + return (int) res; + } + + /// Set extra ascent for each line (Scintilla feature 2525) + public void SetExtraAscent(int extraAscent) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETEXTRAASCENT, extraAscent, Unused); + } + + /// Get extra ascent for each line (Scintilla feature 2526) + public int GetExtraAscent() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETEXTRAASCENT, Unused, Unused); + return (int) res; + } + + /// Set extra descent for each line (Scintilla feature 2527) + public void SetExtraDescent(int extraDescent) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETEXTRADESCENT, extraDescent, Unused); + } + + /// Get extra descent for each line (Scintilla feature 2528) + public int GetExtraDescent() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETEXTRADESCENT, Unused, Unused); + return (int) res; + } + + /// Which symbol was defined for markerNumber with MarkerDefine (Scintilla feature 2529) + public int MarkerSymbolDefined(int markerNumber) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERSYMBOLDEFINED, markerNumber, Unused); + return (int) res; + } + + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETTEXT, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETTEXT, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLE, line, style); + } + + /// Get the style number for the text margin for a line (Scintilla feature 2533) + public int MarginGetStyle(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLE, line, Unused); + return (int) res; + } + + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLES, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLES, line, (IntPtr) stylesPtr); + return Encoding.UTF8.GetString(stylesBuffer).TrimEnd('\0'); + } + } + + /// Clear the margin text on all lines (Scintilla feature 2536) + public void MarginTextClearAll() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINTEXTCLEARALL, Unused, Unused); + } + + /// Get the start of the range of style numbers used for margin text (Scintilla feature 2537) + public void MarginSetStyleOffset(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINSETSTYLEOFFSET, style, Unused); + } + + /// Get the start of the range of style numbers used for margin text (Scintilla feature 2538) + public int MarginGetStyleOffset() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARGINGETSTYLEOFFSET, Unused, Unused); + return (int) res; + } + + /// Set the margin options. (Scintilla feature 2539) + public void SetMarginOptions(int marginOptions) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMARGINOPTIONS, marginOptions, Unused); + } + + /// Get the margin options. (Scintilla feature 2557) + public int GetMarginOptions() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMARGINOPTIONS, Unused, Unused); + return (int) res; + } + + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETTEXT, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETTEXT, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLE, line, style); + } + + /// Get the style number for the annotations for a line (Scintilla feature 2543) + public int AnnotationGetStyle(int line) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLE, line, Unused); + return (int) res; + } + + /// 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLES, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLES, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETLINES, line, Unused); + return (int) res; + } + + /// Clear the annotations from all lines (Scintilla feature 2547) + public void AnnotationClearAll() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONCLEARALL, Unused, Unused); + } + + /// Set the visibility for the annotations for a view (Scintilla feature 2548) + public void AnnotationSetVisible(int visible) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETVISIBLE, visible, Unused); + } + + /// Get the visibility for the annotations for a view (Scintilla feature 2549) + public int AnnotationGetVisible() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETVISIBLE, Unused, Unused); + return (int) res; + } + + /// Get the start of the range of style numbers used for annotations (Scintilla feature 2550) + public void AnnotationSetStyleOffset(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONSETSTYLEOFFSET, style, Unused); + } + + /// Get the start of the range of style numbers used for annotations (Scintilla feature 2551) + public int AnnotationGetStyleOffset() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ANNOTATIONGETSTYLEOFFSET, Unused, Unused); + return (int) res; + } + + /// Release all extended (>255) style numbers (Scintilla feature 2552) + public void ReleaseAllExtendedStyles() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_RELEASEALLEXTENDEDSTYLES, Unused, Unused); + } + + /// Allocate some extended (>255) style numbers and return the start of the range (Scintilla feature 2553) + public int AllocateExtendedStyles(int numberStyles) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATEEXTENDEDSTYLES, numberStyles, Unused); + return (int) res; + } + + /// Add a container action to the undo stack (Scintilla feature 2560) + public void AddUndoAction(int token, int flags) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ADDUNDOACTION, token, flags); + } + + /// Find the position of a character from a point within the window. (Scintilla feature 2561) + public Position CharPositionFromPoint(int x, int y) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHARPOSITIONFROMPOINT, x, y); + return new Position((int) res); + } + + /// + /// Find the position of a character from a point within the window. + /// Return INVALID_POSITION if not close to text. + /// (Scintilla feature 2562) + /// + public Position CharPositionFromPointClose(int x, int y) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHARPOSITIONFROMPOINTCLOSE, x, y); + return new Position((int) res); + } + + /// Set whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2668) + public void SetMouseSelectionRectangularSwitch(bool mouseSelectionRectangularSwitch) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMOUSESELECTIONRECTANGULARSWITCH, mouseSelectionRectangularSwitch ? 1 : 0, Unused); + } + + /// Whether switching to rectangular mode while selecting with the mouse is allowed. (Scintilla feature 2669) + public bool GetMouseSelectionRectangularSwitch() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMOUSESELECTIONRECTANGULARSWITCH, Unused, Unused); + return 1 == (int) res; + } + + /// Set whether multiple selections can be made (Scintilla feature 2563) + public void SetMultipleSelection(bool multipleSelection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMULTIPLESELECTION, multipleSelection ? 1 : 0, Unused); + } + + /// Whether multiple selections can be made (Scintilla feature 2564) + public bool GetMultipleSelection() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMULTIPLESELECTION, Unused, Unused); + return 1 == (int) res; + } + + /// Set whether typing can be performed into multiple selections (Scintilla feature 2565) + public void SetAdditionalSelectionTyping(bool additionalSelectionTyping) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELECTIONTYPING, additionalSelectionTyping ? 1 : 0, Unused); + } + + /// Whether typing can be performed into multiple selections (Scintilla feature 2566) + public bool GetAdditionalSelectionTyping() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALSELECTIONTYPING, Unused, Unused); + return 1 == (int) res; + } + + /// Set whether additional carets will blink (Scintilla feature 2567) + public void SetAdditionalCaretsBlink(bool additionalCaretsBlink) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETSBLINK, additionalCaretsBlink ? 1 : 0, Unused); + } + + /// Whether additional carets will blink (Scintilla feature 2568) + public bool GetAdditionalCaretsBlink() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETSBLINK, Unused, Unused); + return 1 == (int) res; + } + + /// Set whether additional carets are visible (Scintilla feature 2608) + public void SetAdditionalCaretsVisible(bool additionalCaretsBlink) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETSVISIBLE, additionalCaretsBlink ? 1 : 0, Unused); + } + + /// Whether additional carets are visible (Scintilla feature 2609) + public bool GetAdditionalCaretsVisible() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETSVISIBLE, Unused, Unused); + return 1 == (int) res; + } + + /// How many selections are there? (Scintilla feature 2570) + public int GetSelections() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONS, Unused, Unused); + return (int) res; + } + + /// Is every selected range empty? (Scintilla feature 2650) + public bool GetSelectionEmpty() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONEMPTY, Unused, Unused); + return 1 == (int) res; + } + + /// Clear selections to a single empty stream selection (Scintilla feature 2571) + public void ClearSelections() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEARSELECTIONS, Unused, Unused); + } + + /// Set a simple selection (Scintilla feature 2572) + public int SetSelection(int caret, int anchor) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTION, caret, anchor); + return (int) res; + } + + /// Add a selection (Scintilla feature 2573) + public int AddSelection(int caret, int anchor) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ADDSELECTION, caret, anchor); + return (int) res; + } + + /// Drop one selection (Scintilla feature 2671) + public void DropSelectionN(int selection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DROPSELECTIONN, selection, Unused); + } + + /// Set the main selection (Scintilla feature 2574) + public void SetMainSelection(int selection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETMAINSELECTION, selection, Unused); + } + + /// Which selection is the main selection (Scintilla feature 2575) + public int GetMainSelection() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETMAINSELECTION, Unused, Unused); + return (int) res; + } + + /// Which selection is the main selection (Scintilla feature 2576) + public void SetSelectionNCaret(int selection, Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNCARET, selection, pos.Value); + } + + /// Which selection is the main selection (Scintilla feature 2577) + public Position GetSelectionNCaret(int selection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNCARET, selection, Unused); + return new Position((int) res); + } + + /// Which selection is the main selection (Scintilla feature 2578) + public void SetSelectionNAnchor(int selection, Position posAnchor) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNANCHOR, selection, posAnchor.Value); + } + + /// Which selection is the main selection (Scintilla feature 2579) + public Position GetSelectionNAnchor(int selection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNANCHOR, selection, Unused); + return new Position((int) res); + } + + /// Which selection is the main selection (Scintilla feature 2580) + public void SetSelectionNCaretVirtualSpace(int selection, int space) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNCARETVIRTUALSPACE, selection, space); + } + + /// Which selection is the main selection (Scintilla feature 2581) + public int GetSelectionNCaretVirtualSpace(int selection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNCARETVIRTUALSPACE, selection, Unused); + return (int) res; + } + + /// Which selection is the main selection (Scintilla feature 2582) + public void SetSelectionNAnchorVirtualSpace(int selection, int space) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNANCHORVIRTUALSPACE, selection, space); + } + + /// Which selection is the main selection (Scintilla feature 2583) + public int GetSelectionNAnchorVirtualSpace(int selection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNANCHORVIRTUALSPACE, selection, Unused); + return (int) res; + } + + /// Sets the position that starts the selection - this becomes the anchor. (Scintilla feature 2584) + public void SetSelectionNStart(int selection, Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNSTART, selection, pos.Value); + } + + /// Returns the position at the start of the selection. (Scintilla feature 2585) + public Position GetSelectionNStart(int selection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNSTART, selection, Unused); + return new Position((int) res); + } + + /// Sets the position that ends the selection - this becomes the currentPosition. (Scintilla feature 2586) + public void SetSelectionNEnd(int selection, Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETSELECTIONNEND, selection, pos.Value); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2587) + public Position GetSelectionNEnd(int selection) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSELECTIONNEND, selection, Unused); + return new Position((int) res); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2588) + public void SetRectangularSelectionCaret(Position pos) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONCARET, pos.Value, Unused); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2589) + public Position GetRectangularSelectionCaret() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONCARET, Unused, Unused); + return new Position((int) res); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2590) + public void SetRectangularSelectionAnchor(Position posAnchor) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONANCHOR, posAnchor.Value, Unused); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2591) + public Position GetRectangularSelectionAnchor() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONANCHOR, Unused, Unused); + return new Position((int) res); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2592) + public void SetRectangularSelectionCaretVirtualSpace(int space) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, space, Unused); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2593) + public int GetRectangularSelectionCaretVirtualSpace() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, Unused, Unused); + return (int) res; + } + + /// Returns the position at the end of the selection. (Scintilla feature 2594) + public void SetRectangularSelectionAnchorVirtualSpace(int space) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, space, Unused); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2595) + public int GetRectangularSelectionAnchorVirtualSpace() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, Unused, Unused); + return (int) res; + } + + /// Returns the position at the end of the selection. (Scintilla feature 2596) + public void SetVirtualSpaceOptions(int virtualSpaceOptions) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETVIRTUALSPACEOPTIONS, virtualSpaceOptions, Unused); + } + + /// Returns the position at the end of the selection. (Scintilla feature 2597) + public int GetVirtualSpaceOptions() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETVIRTUALSPACEOPTIONS, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETRECTANGULARSELECTIONMODIFIER, modifier, Unused); + } + + /// Get the modifier key used for rectangular selection. (Scintilla feature 2599) + public int GetRectangularSelectionModifier() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETRECTANGULARSELECTIONMODIFIER, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELFORE, fore.Value, 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELBACK, back.Value, Unused); + } + + /// Set the alpha of the selection. (Scintilla feature 2602) + public void SetAdditionalSelAlpha(int alpha) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALSELALPHA, alpha, Unused); + } + + /// Get the alpha of the selection. (Scintilla feature 2603) + public int GetAdditionalSelAlpha() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALSELALPHA, Unused, Unused); + return (int) res; + } + + /// Set the foreground colour of additional carets. (Scintilla feature 2604) + public void SetAdditionalCaretFore(Colour fore) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETADDITIONALCARETFORE, fore.Value, Unused); + } + + /// Get the foreground colour of additional carets. (Scintilla feature 2605) + public Colour GetAdditionalCaretFore() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETADDITIONALCARETFORE, Unused, Unused); + return new Colour((int) res); + } + + /// Set the main selection to the next selection. (Scintilla feature 2606) + public void RotateSelection() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ROTATESELECTION, Unused, Unused); + } + + /// Swap that caret and anchor of the main selection. (Scintilla feature 2607) + public void SwapMainAnchorCaret() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SWAPMAINANCHORCARET, Unused, 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(Position start, Position end) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CHANGELEXERSTATE, start.Value, end.Value); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CONTRACTEDFOLDNEXT, lineStart, Unused); + return (int) res; + } + + /// Centre current line in window. (Scintilla feature 2619) + public void VerticalCentreCaret() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VERTICALCENTRECARET, Unused, Unused); + } + + /// Move the selected lines up one line, shifting the line above after the selection (Scintilla feature 2620) + public void MoveSelectedLinesUp() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MOVESELECTEDLINESUP, Unused, Unused); + } + + /// Move the selected lines down one line, shifting the line below before the selection (Scintilla feature 2621) + public void MoveSelectedLinesDown() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MOVESELECTEDLINESDOWN, Unused, Unused); + } + + /// Set the identifier reported as IdFrom in notification messages. (Scintilla feature 2622) + public void SetIdentifier(int identifier) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETIDENTIFIER, identifier, Unused); + } + + /// Get the identifier. (Scintilla feature 2623) + public int GetIdentifier() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETIDENTIFIER, Unused, Unused); + return (int) res; + } + + /// Set the width for future RGBA image data. (Scintilla feature 2624) + public void RGBAImageSetWidth(int width) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETWIDTH, width, Unused); + } + + /// Set the height for future RGBA image data. (Scintilla feature 2625) + public void RGBAImageSetHeight(int height) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETHEIGHT, height, Unused); + } + + /// Set the scale factor in percent for future RGBA image data. (Scintilla feature 2651) + public void RGBAImageSetScale(int scalePercent) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_RGBAIMAGESETSCALE, scalePercent, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_MARKERDEFINERGBAIMAGE, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_REGISTERRGBAIMAGE, type, (IntPtr) pixelsPtr); + } + } + + /// Scroll to start of document. (Scintilla feature 2628) + public void ScrollToStart() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLTOSTART, Unused, Unused); + } + + /// Scroll to end of document. (Scintilla feature 2629) + public void ScrollToEnd() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SCROLLTOEND, Unused, Unused); + } + + /// Set the technology used. (Scintilla feature 2630) + public void SetTechnology(int technology) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETTECHNOLOGY, technology, Unused); + } + + /// Get the tech. (Scintilla feature 2631) + public int GetTechnology() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETTECHNOLOGY, Unused, Unused); + return (int) res; + } + + /// Create an ILoader*. (Scintilla feature 2632) + public int CreateLoader(int bytes) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CREATELOADER, bytes, Unused); + return (int) res; + } + + /// On OS X, show a find indicator. (Scintilla feature 2640) + public void FindIndicatorShow(Position start, Position end) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORSHOW, start.Value, end.Value); + } + + /// On OS X, flash a find indicator, then fade out. (Scintilla feature 2641) + public void FindIndicatorFlash(Position start, Position end) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORFLASH, start.Value, end.Value); + } + + /// On OS X, hide the find indicator. (Scintilla feature 2642) + public void FindIndicatorHide() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FINDINDICATORHIDE, Unused, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEDISPLAY, Unused, Unused); + } + + /// Like VCHomeDisplay but extending selection to new caret position. (Scintilla feature 2653) + public void VCHomeDisplayExtend() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_VCHOMEDISPLAYEXTEND, Unused, Unused); + } + + /// Is the caret line always visible? (Scintilla feature 2654) + public bool GetCaretLineVisibleAlways() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETCARETLINEVISIBLEALWAYS, Unused, Unused); + return 1 == (int) res; + } + + /// Sets the caret line to always visible. (Scintilla feature 2655) + public void SetCaretLineVisibleAlways(bool alwaysVisible) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETCARETLINEVISIBLEALWAYS, alwaysVisible ? 1 : 0, 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(int lineEndBitSet) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETLINEENDTYPESALLOWED, lineEndBitSet, Unused); + } + + /// Get the line end types currently allowed. (Scintilla feature 2657) + public int GetLineEndTypesAllowed() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESALLOWED, Unused, Unused); + return (int) res; + } + + /// Get the line end types currently recognised. May be a subset of the allowed types due to lexer limitation. (Scintilla feature 2658) + public int GetLineEndTypesActive() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESACTIVE, Unused, Unused); + return (int) res; + } + + /// 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)) + { + IntPtr res = 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) + { + IntPtr res = 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_CLEARREPRESENTATION, (IntPtr) encodedCharacterPtr, Unused); + } + } + + /// Start notifying the container of all key presses and commands. (Scintilla feature 3001) + public void StartRecord() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STARTRECORD, Unused, Unused); + } + + /// Stop notifying the container of all key presses and commands. (Scintilla feature 3002) + public void StopRecord() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_STOPRECORD, Unused, Unused); + } + + /// Set the lexing language of the document. (Scintilla feature 4001) + public void SetLexer(int lexer) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETLEXER, lexer, Unused); + } + + /// Retrieve the lexing language of the document. (Scintilla feature 4002) + public int GetLexer() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLEXER, Unused, Unused); + return (int) res; + } + + /// Colourise a segment of the document using the current lexing language. (Scintilla feature 4003) + public void Colourise(Position start, Position end) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_COLOURISE, start.Value, end.Value); + } + + /// 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)) + { + IntPtr res = 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETKEYWORDS, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETLEXERLANGUAGE, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_LOADLEXERLIBRARY, 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[] bufBuffer = new byte[10000]; + fixed (byte* bufPtr = bufBuffer) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTY, (IntPtr) keyPtr, (IntPtr) bufPtr); + return Encoding.UTF8.GetString(bufBuffer).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[] bufBuffer = new byte[10000]; + fixed (byte* bufPtr = bufBuffer) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTYEXPANDED, (IntPtr) keyPtr, (IntPtr) bufPtr); + return Encoding.UTF8.GetString(bufBuffer).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) + { + fixed (byte* keyPtr = Encoding.UTF8.GetBytes(key)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPROPERTYINT, (IntPtr) keyPtr, Unused); + return (int) res; + } + } + + /// Retrieve the number of bits the current lexer needs for styling. (Scintilla feature 4011) + public int GetStyleBitsNeeded() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEBITSNEEDED, Unused, Unused); + return (int) res; + } + + /// + /// Retrieve the name of the lexer. + /// Return the length of the text. + /// Result is NUL-terminated. + /// (Scintilla feature 4012) + /// + public unsafe string GetLexerLanguage() + { + byte[] textBuffer = new byte[10000]; + fixed (byte* textPtr = textBuffer) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLEXERLANGUAGE, Unused, (IntPtr) textPtr); + return Encoding.UTF8.GetString(textBuffer).TrimEnd('\0'); + } + } + + /// For private communication between an application and a known lexer. (Scintilla feature 4013) + public int PrivateLexerCall(int operation, int pointer) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PRIVATELEXERCALL, operation, pointer); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PROPERTYNAMES, Unused, (IntPtr) namesPtr); + return Encoding.UTF8.GetString(namesBuffer).TrimEnd('\0'); + } + } + + /// Retrieve the type of a property. (Scintilla feature 4015) + public unsafe int PropertyType(string name) + { + fixed (byte* namePtr = Encoding.UTF8.GetBytes(name)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_PROPERTYTYPE, (IntPtr) namePtr, Unused); + return (int) res; + } + } + + /// + /// 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) + { + IntPtr res = 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DESCRIBEKEYWORDSETS, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETLINEENDTYPESSUPPORTED, Unused, Unused); + return (int) res; + } + + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_ALLOCATESUBSTYLES, styleBase, numberStyles); + return (int) res; + } + + /// The starting style number for the sub styles associated with a base style (Scintilla feature 4021) + public int GetSubStylesStart(int styleBase) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLESSTART, styleBase, Unused); + return (int) res; + } + + /// The number of sub styles associated with a base style (Scintilla feature 4022) + public int GetSubStylesLength(int styleBase) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLESLENGTH, styleBase, Unused); + return (int) res; + } + + /// For a sub style, return the base style, else return the argument. (Scintilla feature 4027) + public int GetStyleFromSubStyle(int subStyle) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSTYLEFROMSUBSTYLE, subStyle, Unused); + return (int) res; + } + + /// For a secondary style, return the primary style, else return the argument. (Scintilla feature 4028) + public int GetPrimaryStyleFromStyle(int style) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETPRIMARYSTYLEFROMSTYLE, style, Unused); + return (int) res; + } + + /// Free allocated sub styles (Scintilla feature 4023) + public void FreeSubStyles() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_FREESUBSTYLES, Unused, 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)) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETIDENTIFIERS, 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() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_DISTANCETOSECONDARYSTYLES, Unused, Unused); + return (int) res; + } + + /// + /// 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) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETSUBSTYLEBASES, Unused, (IntPtr) stylesPtr); + return Encoding.UTF8.GetString(stylesBuffer).TrimEnd('\0'); + } + } + + /// + /// Deprecated in 2.30 + /// In palette mode? + /// (Scintilla feature 2139) + /// + public bool GetUsePalette() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETUSEPALETTE, Unused, Unused); + return 1 == (int) res; + } + + /// + /// In palette mode, Scintilla uses the environment's palette calls to display + /// more colours. This may lead to ugly displays. + /// (Scintilla feature 2039) + /// + public void SetUsePalette(bool usePalette) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETUSEPALETTE, usePalette ? 1 : 0, Unused); + } + + /// + /// Deprecated in 3.5.5 + /// Always interpret keyboard input as Unicode + /// (Scintilla feature 2521) + /// + public void SetKeysUnicode(bool keysUnicode) + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_SETKEYSUNICODE, keysUnicode ? 1 : 0, Unused); + } + + /// Are keys always interpreted as Unicode? (Scintilla feature 2522) + public bool GetKeysUnicode() + { + IntPtr res = Win32.SendMessage(scintilla, SciMsg.SCI_GETKEYSUNICODE, Unused, Unused); + return 1 == (int) res; + } + + /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ + } +} diff --git a/PluginInfrastructure/Scintilla_iface.cs b/PluginInfrastructure/Scintilla_iface.cs new file mode 100644 index 0000000..cc84383 --- /dev/null +++ b/PluginInfrastructure/Scintilla_iface.cs @@ -0,0 +1,3047 @@ +// 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, + + /// 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, + + /// 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 pos and the styling mask to mask. + /// The styling mask can be used to protect some bits in each styling byte from modification. + 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 winow 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_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, + + /// 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, + + STYLE_DEFAULT = 32, + + STYLE_LINENUMBER = 33, + + STYLE_BRACELIGHT = 34, + + STYLE_BRACEBAD = 35, + + STYLE_CONTROLCHAR = 36, + + STYLE_INDENTGUIDE = 37, + + STYLE_CALLTIP = 38, + + 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_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, + + /// 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 km is pressed perform msg. + SCI_ASSIGNCMDKEY = 2070, + + /// When key+modifier combination km 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, + + /// 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_IME = 32, + + INDIC_IME_MAX = 35, + + INDIC_MAX = 35, + + INDIC_CONTAINER = 8, + + INDIC0_MASK = 0x20, + + INDIC1_MASK = 0x40, + + INDIC2_MASK = 0x80, + + INDICS_MASK = 0xE0, + + /// 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, + + /// 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, + + /// 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, + + /// Set a style to be changeable or not (read only). + /// Experimental feature, currently buggy. + SCI_STYLESETCHANGEABLE = 2099, + + /// Display a auto-completion list. + /// The lenEntered 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, + + /// 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 currentPosition. + 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, + + /// Modify colours when printing for clearer printed text. + SCI_SETPRINTCOLOURMODE = 2148, + + /// Returns the print colour mode. + SCI_GETPRINTCOLOURMODE = 2149, + + 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 in normal style or with selection highlighted. + 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, + + /// 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 length of 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, + + 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, + + 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, + + /// 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, + + /// 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, + + 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, + + /// Make the target range start and end be the same as the selection range start and end. + SCI_TARGETFROMSELECTION = 2287, + + /// 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 the colours used as a chequerboard pattern in the fold margin + SCI_SETFOLDMARGINCOLOUR = 2290, + + /// Set the colours used as a chequerboard pattern in the fold margin + SCI_SETFOLDMARGINHICOLOUR = 2291, + + /// 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, + + /// 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, + + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + SCI_HOMEWRAP = 2349, + + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + SCI_HOMEWRAPEXTEND = 2450, + + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + SCI_LINEENDWRAP = 2451, + + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + SCI_LINEENDWRAPEXTEND = 2452, + + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + SCI_VCHOMEWRAP = 2453, + + /// These are like their namesakes Home(Extend)?, LineEnd(Extend)?, VCHome(Extend)? + /// except they behave differently when word-wrap is enabled: + /// They go first to the start / end of the display line, like (Home|LineEnd)Display + /// The difference is that, the cursor is already at the point, it goes on to the start + /// or end of the document line, as appropriate for (Home|LineEnd|VCHome)(Extend)?. + 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. + 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, + + /// 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) 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, + + /// 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, + + /// Set whether a pop up menu is displayed automatically when the user presses + /// the wrong mouse button. + 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, + + /// 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 modification events are sent to the container. + SCI_GETMODEVENTMASK = 2378, + + /// 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, + + 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, + + /// Get and Set the xOffset (ie, horizontal scroll position). + SCI_SETXOFFSET = 2397, + + /// Get and Set 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 between paragraphs (delimited by empty lines). + SCI_PARADOWN = 2413, + + /// Move caret between paragraphs (delimited by empty lines). + SCI_PARADOWNEXTEND = 2414, + + /// Move caret between paragraphs (delimited by empty lines). + SCI_PARAUP = 2415, + + /// Move caret between paragraphs (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, + + /// 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, + + /// 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, + + /// 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 position? + SCI_INDICATORALLONFOR = 2506, + + /// What value does a particular indicator have at 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 rangeLength 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_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, + + /// Which selection is the main selection + SCI_SETSELECTIONNCARET = 2576, + + /// Which selection is the main selection + SCI_GETSELECTIONNCARET = 2577, + + /// Which selection is the main selection + SCI_SETSELECTIONNANCHOR = 2578, + + /// Which selection is the main selection + SCI_GETSELECTIONNANCHOR = 2579, + + /// Which selection is the main selection + SCI_SETSELECTIONNCARETVIRTUALSPACE = 2580, + + /// Which selection is the main selection + SCI_GETSELECTIONNCARETVIRTUALSPACE = 2581, + + /// Which selection is the main selection + SCI_SETSELECTIONNANCHORVIRTUALSPACE = 2582, + + /// Which selection is the main 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, + + /// Returns the position at the end of the selection. + SCI_SETRECTANGULARSELECTIONCARET = 2588, + + /// Returns the position at the end of the selection. + SCI_GETRECTANGULARSELECTIONCARET = 2589, + + /// Returns the position at the end of the selection. + SCI_SETRECTANGULARSELECTIONANCHOR = 2590, + + /// Returns the position at the end of the selection. + SCI_GETRECTANGULARSELECTIONANCHOR = 2591, + + /// Returns the position at the end of the selection. + SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE = 2592, + + /// Returns the position at the end of the selection. + SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE = 2593, + + /// Returns the position at the end of the selection. + SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE = 2594, + + /// Returns the position at the end of the selection. + SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE = 2595, + + SCVS_NONE = 0, + + SCVS_RECTANGULARSELECTION = 1, + + SCVS_USERACCESSIBLE = 2, + + /// Returns the position at the end of the selection. + SCI_SETVIRTUALSPACEOPTIONS = 2596, + + /// Returns the position at the end of the selection. + 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, + + /// 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 number of bits the current lexer needs for styling. + SCI_GETSTYLEBITSNEEDED = 4011, + + /// 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, + + 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, + + /// 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, + + SC_CP_DBCS = 1, + + /// Deprecated in 2.30 + /// In palette mode? + SCI_GETUSEPALETTE = 2139, + + /// In palette mode, Scintilla uses the environment's palette calls to display + /// more colours. This may lead to ugly displays. + SCI_SETUSEPALETTE = 2039, + + /// Deprecated in 3.5.5 + /// Always interpret keyboard input as Unicode + SCI_SETKEYSUNICODE = 2521, + + /// Are keys always interpreted as Unicode? + SCI_GETKEYSUNICODE = 2522, + + /* --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/PluginInfrastructure/UnmanagedExports.cs b/PluginInfrastructure/UnmanagedExports.cs new file mode 100644 index 0000000..1a7bac6 --- /dev/null +++ b/PluginInfrastructure/UnmanagedExports.cs @@ -0,0 +1,66 @@ +// 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; + +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; + Main.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(Main.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(); + Main.SetToolBarIcon(); + } + else if (notification.Header.Code == (uint)NppMsg.NPPN_SHUTDOWN) + { + Main.PluginCleanUp(); + Marshal.FreeHGlobal(_ptrPluginName); + } + else + { + Main.OnNotification(notification); + } + } + } +} diff --git a/PluginInfrastructure/Win32.cs b/PluginInfrastructure/Win32.cs new file mode 100644 index 0000000..d1a8c74 --- /dev/null +++ b/PluginInfrastructure/Win32.cs @@ -0,0 +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); + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..fa49ead --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("JSFunctionViewer")] +[assembly: AssemblyDescription("Provides and easier way to view and/or navigate to functions from function calls. Also works with external files if the src attribute is the last attribute of the script tag.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("davidsover")] +[assembly: AssemblyProduct("JSFunctionViewer")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[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("1.0.0.*")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/JSFunctionViewer.png b/Properties/JSFunctionViewer.png new file mode 100644 index 0000000000000000000000000000000000000000..fa98dd97369053429fb466c7b5d8d757d44bad83 GIT binary patch literal 652 zcmV;70(1R|P)EX>4Tx04R}tkv&MmKpe$iQ>7vmQ7eczWT;LSL`58>ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HI!Hs@X9CsG4OY zV^J}aT@?eb2%;Z-2xCxUrXEi%rr|lh?&0I>U4&K9P8i>4rtTK|Hf* z>74h8L#!w%#OK8023?T&k?XR{Z=4Gb3p_Jqq?7Z+A!4!6#&R38qM;H`6NeR5qkJLb zvch?bvs$jQ<~{ifgE?&_#dVq^h+zqFBp^aY6(y8mAwsK0iisrcM?L(*jz2*znOr3> zax9<%6_Voz|AXJ%n)#_oHz^neI$v!2V-yJN0*#t&e;?a+;{@ zj1?$*-Q(R|?Y;ebrrF;Qkk@jv>J(}{00006VoOIv0Nw!J0NyG3ovr`?010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003l3L_t(I%gs_j4uCKSD}oHZ+gpfJ_0000EX>4Tx04R}tkv&MmKpe$iQ>7vmQ7eczWT;LSL`58>ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HI!Hs@X9CsG4OY zV^J}aT@?eb2%;Z-2xCxUrXEi%rr|lh?&0I>U4&K9P8i>4rtTK|Hf* z>74h8L#!w%#OK8023?T&k?XR{Z=4Gb3p_Jqq?7Z+A!4!6#&R38qM;H`6NeR5qkJLb zvch?bvs$jQ<~{ifgE?&_#dVq^h+zqFBp^aY6(y8mAwsK0iisrcM?L(*jz2*znOr3> zax9<%6_Voz|AXJ%n)#_oHz^neI$v!2V-yJN0*#t&e;?a+;{@ zj1?$*-Q(R|?Y;ebrrF;Qkk@jv>J(}{00006VoOIv0Nw!J0NyG3ovr`?010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003f1L_t(I%gs_j4uCKSD})#F(0tvHf@v#evsfG0{KulGsT{8-Ks)}rsX z#wEo;u5vO(_1hG~(zv`xd@S|z{rO75@aH&u^1p-5Il=grre2RR>IaY2N5&8WJnYxW z@2{R;wOs)Dafab8J%I7Sk9W8KtThoGFZws<0Q}89iCy(TdQ~Iw^Bq2PuFWjUGo$oC dI?s*s><>L~?E-E5P%UGXXjrQ4Upy5gZLHFeh~5AI literal 0 HcmV?d00001 diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c2ef016 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// 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 JSFunctionViewer.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", "16.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("JSFunctionViewer.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 JSFunctionViewer { + get { + object obj = ResourceManager.GetObject("JSFunctionViewer", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap JSFunctionViewer_bmp { + get { + object obj = ResourceManager.GetObject("JSFunctionViewer_bmp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap JSFunctionViewer_Gray { + get { + object obj = ResourceManager.GetObject("JSFunctionViewer_Gray", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap star { + get { + object obj = ResourceManager.GetObject("star", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap star_bmp { + get { + object obj = ResourceManager.GetObject("star_bmp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..f2aa9f4 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + star.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + star_bmp.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + JSFunctionViewer.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + JSFunctionViewer_bmp.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + JSFunctionViewer_Gray.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Properties/star.png b/Properties/star.png new file mode 100644 index 0000000000000000000000000000000000000000..164d16b0ad506b2cc1b511af11d52a56310c603e GIT binary patch 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 literal 0 HcmV?d00001