// 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
{
    /// <summary>
    /// 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.
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct ScNotificationHeader
    {
        /// <summary>
        /// environment specific window handle/pointer
        /// </summary>
        public IntPtr hwndFrom; 

        /// <summary>
        /// CtrlID of the window issuing the notification
        /// </summary>
        public IntPtr IdFrom;

        /// <summary>
        /// The SCN_* notification Code
        /// </summary>
        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 */

        /// <summary>
        /// 0-based index
        /// </summary>
        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 */

        /// <summary>
        /// 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
        /// </summary>
        public Position Position { get { return new Position(position); } }

        /// <summary>
        /// Character of the notification - eg keydown
        /// SCN_CHARADDED, SCN_KEY, SCN_AUTOCCOMPLETE, SCN_AUTOCSELECTION, SCN_USERLISTSELECTION
        /// </summary>
        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;

        /// <summary>
        /// text to find
        /// </summary>
        /// <param name="chrRange">range to search</param>
        /// <param name="searchText">the search pattern</param>
        public TextToFind(CharacterRange chrRange, string searchText)
        {
            _sciTextToFind.chrg = chrRange;
            _sciTextToFind.lpstrText = Marshal.StringToHGlobalAnsi(searchText);
        }

        /// <summary>
        /// text to find
        /// </summary>
        /// <param name="cpmin">range to search</param>
        /// <param name="cpmax">range to search</param>
        /// <param name="searchText">the search pattern</param>
        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();
        }
    }
}
