## ***** WARNING...THIS FILE IS GENERATED BY FROM SCINTILLA.IFACE
## *****           DO NOT MODIFY...MODIFY SCINTILLA.RB INSTEAD

module Scintilla
  ## First line may be used for shbang

  ## This file defines the interface to Scintilla

  ## A line starting with ## is a pure comment and should be stripped by readers.
  ## A line starting with #! is for future shbang use
  ## A line starting with # followed by a space is a documentation comment and refers
  ## to the next feature definition.

  ## Each feature is defined by a line starting with fun, get, set, val or evt.
  ##     cat -> start a category
  ##     fun -> a function
  ##     get -> a property get function
  ##     set -> a property set function
  ##     val -> definition of a constant
  ##     evt -> an event
  ## All other feature names should be ignored. They may be defined in the future.
  ## A property may have a set function, a get function or both. Each will have
  ## "Get" or "Set" in their names and the corresponding name will have the obvious switch.
  ## A property may be subscripted, in which case the first parameter is the subscript.
  ## fun, get, and set features have a strict syntax:
  ## <featureType><ws><returnType><ws><name>[=<number](<param>,<param>)
  ## param is <paramType><ws><paramName>[=<value>]
  ## Additional white space is allowed between elements.
  ## The syntax for evt is <featureType><ws><returnType><ws><name>[=<number]([<param>[,<param>]*])
  ## Feature names that contain an underscore are defined by Windows, so in these
  ## cases, using the Windows definition is preferred where available.
  ## The feature numbers are stable so features will not be renumbered.
  ## Features may be removed but they will go through a period of deprecation
  ## before removal which is signalled by moving them into the Deprecated category.

  ## Types:
  ##     void
  ##     int
  ##     bool -> integer, 1=true, 0=false
  ##     position -> integer position in a document
  ##     colour -> colour integer containing red, green and blue bytes.
  ##     string -> pointer to const character
  ##     stringresult -> pointer to character
  ##     cells -> pointer to array of cells, each cell containing a style byte and character byte
  ##     textrange -> range of a min and a max position with an output string
  ##     findtext -> searchrange, text -> foundposition
  ##     keymod -> integer containing key in low half and modifiers in high half
  ##     formatrange
  ## Types no longer used:
  ##     findtextex -> searchrange
  ##     charrange -> range of a min and a max position
  ##     charrangeresult -> like charrange, but output param
  ##     countedstring
  ##     point -> x,y
  ##     pointresult  -> like point, but output param
  ##     rectangle -> left,top,right,bottom
  ## Client code should ignore definitions containing types it does not understand, except
  ## for possibly #defining the constants

  ## String arguments may contain NUL ('\0') characters where the calls provide a length 
  ## argument and retrieve NUL characters. All retrieved strings except for those retrieved 
  ## by GetLine also have a NUL appended but client code should calculate the size that 
  ## will be returned rather than relying upon the NUL whenever possible. Allow for the  
  ## extra NUL character when allocating buffers.


  ################################################
  ## For Scintilla.h
  INVALID_POSITION = -1
  # Define start of Scintilla messages to be greater than all edit (EM_*) messages
  # as many EM_ messages can be used although that use is deprecated.
  SCI_START = 2000
  SCI_OPTIONAL_START = 3000
  SCI_LEXER_START = 4000

  # Add text to the document
  def addText( text )
    sendMessage(2001, text.length, text)
  end


  # Add array of cells to document
  def addStyledText( length , c )
    return (sendMessage(2002, length, c))
  end

  # Insert string at a position
  def insertText( pos , text )
    return (sendMessage(2003, pos, text))
  end

  # Delete all text in the document
  def clearAll
    return (sendMessage(2004, 0, 0))
  end

  # Set all style bytes to 0, remove all folding information
  def clearDocumentStyle
    return (sendMessage(2005, 0, 0))
  end

  # The number of characters in the document
  def getLength
    return (sendMessage(2006, 0, 0))
  end

  # Returns the character byte at the position
  def getCharAt( pos )
    return (sendMessage(2007, pos, 0))
  end

  # Returns the position of the caret
  def getCurrentPos
    return (sendMessage(2008, 0, 0))
  end

  # Returns the position of the opposite end of the selection to the caret
  def getAnchor
    return (sendMessage(2009, 0, 0))
  end

  # Returns the style byte at the position
  def getStyleAt( pos )
    return (sendMessage(2010, pos, 0))
  end

  # Redoes the next action on the undo history
  def redo
    return (sendMessage(2011, 0, 0))
  end

  # Choose between collecting actions into the undo
  # history and discarding them.
  def setUndoCollection( collectUndo )
    return (sendMessage(2012, ( collectUndo ? 1 : 0 ), 0))
  end

  # Select all the text in the document.
  def selectAll
    return (sendMessage(2013, 0, 0))
  end

  # Remember the current position in the undo history as the position
  # at which the document was saved.
  def setSavePoint
    return (sendMessage(2014, 0, 0))
  end

  # Retrieve a buffer of cells.
  # Returns the number of bytes in the buffer not including terminating nulls.
  def getStyledText( tr )
    return (sendMessage(2015, 0, tr))
  end

  # Are there any redoable actions in the undo history.
  def canRedo?
    return (sendMessage(2016, 0, 0)==1 ? true : false)
  end

  # Retrieve the line number at which a particular marker is located
  def markerLineFromHandle( handle )
    return (sendMessage(2017, handle, 0))
  end

  # Delete a marker.
  def markerDeleteHandle( handle )
    return (sendMessage(2018, handle, 0))
  end

  # Is undo history being collected?
  def getUndoCollection?
    return (sendMessage(2019, 0, 0)==1 ? true : false)
  end

  SCWS_INVISIBLE = 0
  SCWS_VISIBLEALWAYS = 1
  SCWS_VISIBLEAFTERINDENT = 2

  # Are white space characters currently visible?
  # Returns one of SCWS_* constants.
  def getViewWS
    return (sendMessage(2020, 0, 0))
  end

  # Make white space characters invisible, always visible or visible outside indentation.
  def setViewWS( viewWS )
    return (sendMessage(2021, viewWS, 0))
  end

  # Find the position from a point within the window.
  def positionFromPoint( x , y )
    return (sendMessage(2022, x, y))
  end

  # Find the position from a point within the window but return 
  # INVALID_POSITION if not close to text.
  def positionFromPointClose( x , y )
    return (sendMessage(2023, x, y))
  end

  # Set caret to start of a line and ensure it is visible.
  def gotoLine( line )
    return (sendMessage(2024, line, 0))
  end

  # Set caret to a position and ensure it is visible.
  def gotoPos( pos )
    return (sendMessage(2025, pos, 0))
  end

  # Set the selection anchor to a position. The anchor is the opposite
  # end of the selection from the caret.
  def setAnchor( posAnchor )
    return (sendMessage(2026, posAnchor, 0))
  end

  # Retrieve the text of the line containing the caret.
  # Returns the index of the caret on the line.
  def getCurLine( length )
    len = sendMessage(2027, length, "")
    return "" if len==0
    buffer = " "*len
    len = sendMessage(2027, length, buffer)
    return buffer
  end

  # Retrieve the position of the last correctly styled character.
  def getEndStyled
    return (sendMessage(2028, 0, 0))
  end

  SC_EOL_CRLF = 0
  SC_EOL_CR = 1
  SC_EOL_LF = 2

  # Convert all line endings in the document to one mode.
  def convertEOLs( eolMode )
    return (sendMessage(2029, eolMode, 0))
  end

  # Retrieve the current end of line mode - one of CRLF, CR, or LF.
  def getEOLMode
    return (sendMessage(2030, 0, 0))
  end

  # Set the current end of line mode.
  def setEOLMode( eolMode )
    return (sendMessage(2031, eolMode, 0))
  end

  # 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.
  def startStyling( pos , mask )
    return (sendMessage(2032, pos, mask))
  end

  # Change style from current styling position for length characters to a style
  # and move the current styling position to after this newly styled segment.
  def setStyling( length , style )
    return (sendMessage(2033, length, style))
  end

  # Is drawing done first into a buffer or direct to the screen.
  def getBufferedDraw?
    return (sendMessage(2034, 0, 0)==1 ? true : false)
  end

  # If drawing is buffered then each line of text is drawn into a bitmap buffer
  # before drawing it to the screen to avoid flicker.
  def setBufferedDraw( buffered )
    return (sendMessage(2035, ( buffered ? 1 : 0 ), 0))
  end

  # Change the visible size of a tab to be a multiple of the width of a space
  # character.
  def setTabWidth( tabWidth )
    return (sendMessage(2036, tabWidth, 0))
  end

  # Retrieve the visible size of a tab.
  def getTabWidth
    return (sendMessage(2121, 0, 0))
  end

  # The SC_CP_UTF8 value can be used to enter Unicode mode.
  # This is the same value as CP_UTF8 in Windows
  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.
  def setCodePage( codePage )
    return (sendMessage(2037, codePage, 0))
  end

  # In palette mode, Scintilla uses the environments palette calls to display
  # more colours. This may lead to ugly displays.
  def setUsePalette( usePalette )
    return (sendMessage(2039, ( usePalette ? 1 : 0 ), 0))
  end

  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

  # Shapes used for outlining column
  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

  # Invisible mark that only sets the line background color
  SC_MARK_BACKGROUND = 22

  SC_MARK_CHARACTER = 10000

  # Markers used for outlining column
  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

  # Set the symbol used for a particular marker number.
  def markerDefine( markerNumber , markerSymbol )
    return (sendMessage(2040, markerNumber, markerSymbol))
  end

  # Set the foreground colour used for a particular marker number.
  def markerSetFore( markerNumber , fore )
    return (sendMessage(2041, markerNumber, fore.to_i))
  end

  # Set the background colour used for a particular marker number.
  def markerSetBack( markerNumber , back )
    return (sendMessage(2042, markerNumber, back.to_i))
  end

  # Add a marker to a line.
  def markerAdd( line , markerNumber )
    return (sendMessage(2043, line, markerNumber))
  end

  # Delete a marker from a line
  def markerDelete( line , markerNumber )
    return (sendMessage(2044, line, markerNumber))
  end

  # Delete all markers with a particular number from all lines
  def markerDeleteAll( markerNumber )
    return (sendMessage(2045, markerNumber, 0))
  end

  # Get a bit mask of all the markers set on a line.
  def markerGet( line )
    return (sendMessage(2046, line, 0))
  end

  # Find the next line after lineStart that includes a marker in mask.
  def markerNext( lineStart , markerMask )
    return (sendMessage(2047, lineStart, markerMask))
  end

  # Find the previous line before lineStart that includes a marker in mask.
  def markerPrevious( lineStart , markerMask )
    return (sendMessage(2048, lineStart, markerMask))
  end

  SC_MARGIN_SYMBOL = 0
  SC_MARGIN_NUMBER = 1

  # Set a margin to be either numeric or symbolic.
  def setMarginTypeN( margin , marginType )
    return (sendMessage(2240, margin, marginType))
  end

  # Retrieve the type of a margin.
  def getMarginTypeN( margin )
    return (sendMessage(2241, margin, 0))
  end

  # Set the width of a margin to a width expressed in pixels.
  def setMarginWidthN( margin , pixelWidth )
    return (sendMessage(2242, margin, pixelWidth))
  end

  # Retrieve the width of a margin in pixels.
  def getMarginWidthN( margin )
    return (sendMessage(2243, margin, 0))
  end

  # Set a mask that determines which markers are displayed in a margin.
  def setMarginMaskN( margin , mask )
    return (sendMessage(2244, margin, mask))
  end

  # Retrieve the marker mask of a margin.
  def getMarginMaskN( margin )
    return (sendMessage(2245, margin, 0))
  end

  # Make a margin sensitive or insensitive to mouse clicks.
  def setMarginSensitiveN( margin , sensitive )
    return (sendMessage(2246, margin, ( sensitive ? 1 : 0 )))
  end

  # Retrieve the mouse click sensitivity of a margin.
  def getMarginSensitiveN?( margin )
    return (sendMessage(2247, margin, 0)==1 ? true : false)
  end

  # Styles in range 32..37 are predefined for parts of the UI and are not used as normal styles.
  # Styles 38 and 39 are for future use.
  STYLE_DEFAULT = 32
  STYLE_LINENUMBER = 33
  STYLE_BRACELIGHT = 34
  STYLE_BRACEBAD = 35
  STYLE_CONTROLCHAR = 36
  STYLE_INDENTGUIDE = 37
  STYLE_LASTPREDEFINED = 39
  STYLE_MAX = 127

  # Character set identifiers are used in StyleSetCharacterSet.
  # The values are the same as the Windows *_CHARSET values.
  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_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

  # Clear all the styles and make equivalent to the global default style.
  def setStyleClearAll
    return (sendMessage(2050, 0, 0))
  end

  # Set the foreground colour of a style.
  def setStyleSetFore( style , fore )
    return (sendMessage(2051, style, fore.to_i))
  end

  # Set the background colour of a style.
  def setStyleSetBack( style , back )
    return (sendMessage(2052, style, back.to_i))
  end

  # Set a style to be bold or not.
  def setStyleSetBold( style , bold )
    return (sendMessage(2053, style, ( bold ? 1 : 0 )))
  end

  # Set a style to be italic or not.
  def setStyleSetItalic( style , italic )
    return (sendMessage(2054, style, ( italic ? 1 : 0 )))
  end

  # Set the size of characters of a style.
  def setStyleSetSize( style , sizePoints )
    return (sendMessage(2055, style, sizePoints))
  end

  # Set the font of a style.
  def setStyleSetFont( style , fontName )
    return (sendMessage(2056, style, fontName))
  end

  # Set a style to have its end of line filled or not.
  def setStyleSetEOLFilled( style , filled )
    return (sendMessage(2057, style, ( filled ? 1 : 0 )))
  end

  # Reset the default style to its state at startup
  def styleResetDefault
    return (sendMessage(2058, 0, 0))
  end

  # Set a style to be underlined or not.
  def setStyleSetUnderline( style , underline )
    return (sendMessage(2059, style, ( underline ? 1 : 0 )))
  end

  SC_CASE_MIXED = 0
  SC_CASE_UPPER = 1
  SC_CASE_LOWER = 2
  # Set a style to be mixed case, or to force upper or lower case.
  def setStyleSetCase( style , caseForce )
    return (sendMessage(2060, style, caseForce))
  end

  # Set the character set of the font in a style.
  def setStyleSetCharacterSet( style , characterSet )
    return (sendMessage(2066, style, characterSet))
  end

  # Set the foreground colour of the selection and whether to use this setting.
  def setSelFore( useSetting , fore )
    return (sendMessage(2067, ( useSetting ? 1 : 0 ), fore.to_i))
  end

  # Set the background colour of the selection and whether to use this setting.
  def setSelBack( useSetting , back )
    return (sendMessage(2068, ( useSetting ? 1 : 0 ), back.to_i))
  end

  # Set the foreground colour of the caret.
  def setCaretFore( fore )
    return (sendMessage(2069, fore.to_i, 0))
  end

  # When key+modifier combination km is pressed perform msg.
  def assignCmdKey( km , msg )
    return (sendMessage(2070, km, msg))
  end

  # When key+modifier combination km do nothing.
  def clearCmdKey( km )
    return (sendMessage(2071, km, 0))
  end

  # Drop all key mappings.
  def clearAllCmdKeys
    return (sendMessage(2072, 0, 0))
  end

  # Set the styles for a segment of the document.
  def setStylingEx( length , styles )
    return (sendMessage(2073, length, styles))
  end

  # Set a style to be visible or not.
  def setStyleSetVisible( style , visible )
    return (sendMessage(2074, style, ( visible ? 1 : 0 )))
  end

  # Get the time in milliseconds that the caret is on and off.
  def getCaretPeriod
    return (sendMessage(2075, 0, 0))
  end

  # Get the time in milliseconds that the caret is on and off. 0 = steady on.
  def setCaretPeriod( periodMilliseconds )
    return (sendMessage(2076, periodMilliseconds, 0))
  end

  # Set the set of characters making up words for when moving or selecting
  # by word.
  def setWordChars( characters )
    return (sendMessage(2077, 0, characters))
  end

  # Start a sequence of actions that is undone and redone as a unit.
  # May be nested.
  def beginUndoAction
    return (sendMessage(2078, 0, 0))
  end

  # End a sequence of actions that is undone and redone as a unit.
  def endUndoAction
    return (sendMessage(2079, 0, 0))
  end

  INDIC_MAX = 7
  INDIC_PLAIN = 0
  INDIC_SQUIGGLE = 1
  INDIC_TT = 2
  INDIC_DIAGONAL = 3
  INDIC_STRIKE = 4
  INDIC0_MASK = 32
  INDIC1_MASK = 64
  INDIC2_MASK = 128
  INDICS_MASK = INDIC0_MASK | INDIC1_MASK | INDIC2_MASK

  # Set an indicator to plain, squiggle or TT.
  def setIndicSetStyle( indic , style )
    return (sendMessage(2080, indic, style))
  end

  # Retrieve the style of an indicator.
  def getIndicGetStyle( indic )
    return (sendMessage(2081, indic, 0))
  end

  # Set the foreground colour of an indicator.
  def setIndicSetFore( indic , fore )
    return (sendMessage(2082, indic, fore.to_i))
  end

  # Retrieve the foreground colour of an indicator.
  def getIndicGetFore( indic )
    return (sendMessage(2083, indic, 0))
  end

  # 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.
  def setStyleBits( bits )
    return (sendMessage(2090, bits, 0))
  end

  # Retrieve number of bits in style bytes used to hold the lexical state.
  def getStyleBits
    return (sendMessage(2091, 0, 0))
  end

  # Used to hold extra styling information for each line.
  def setLineState( line , state )
    return (sendMessage(2092, line, state))
  end

  # Retrieve the extra styling information for a line.
  def getLineState( line )
    return (sendMessage(2093, line, 0))
  end

  # Retrieve the last line number that has line state.
  def getMaxLineState
    return (sendMessage(2094, 0, 0))
  end

  # Is the background of the line containing the caret in a different colour?
  def getCaretLineVisible?
    return (sendMessage(2095, 0, 0)==1 ? true : false)
  end

  # Dsplay the background of the line containing the caret in a different colour.
  def setCaretLineVisible( show )
    return (sendMessage(2096, ( show ? 1 : 0 ), 0))
  end

  # Get the colour of the background of the line containing the caret.
  def getCaretLineBack
    return (sendMessage(2097, 0, 0))
  end

  # Set the colour of the background of the line containing the caret.
  def setCaretLineBack( back )
    return (sendMessage(2098, back.to_i, 0))
  end

  # Display a auto-completion list.
  # The lenEntered parameter indicates how many characters before
  # the caret should be used to provide context.
  def autoCShow( lenEntered , itemList )
    return (sendMessage(2100, lenEntered, itemList))
  end

  # Remove the auto-completion list from the screen.
  def autoCCancel
    return (sendMessage(2101, 0, 0))
  end

  # Is there an auto-completion list visible?
  def autoCActive?
    return (sendMessage(2102, 0, 0)==1 ? true : false)
  end

  # Retrieve the position of the caret when the auto-completion list was
  # displayed.
  def autoCPosStart
    return (sendMessage(2103, 0, 0))
  end

  # User has selected an item so remove the list and insert the selection.
  def autoCComplete
    return (sendMessage(2104, 0, 0))
  end

  # Define a set of character that when typed cancel the auto-completion list.
  def autoCStops( characterSet )
    return (sendMessage(2105, 0, characterSet))
  end

  # Change the separator character in the string setting up an auto-completion
  # list. Default is space but can be changed if items contain space.
  def setAutoCSetSeparator( separatorCharacter )
    return (sendMessage(2106, separatorCharacter, 0))
  end

  # Retrieve the auto-completion list separator character.
  def getAutoCGetSeparator
    return (sendMessage(2107, 0, 0))
  end

  # Select the item in the auto-completion list that starts with a string.
  def autoCSelect( text )
    return (sendMessage(2108, 0, text))
  end

  # Should the auto-completion list be cancelled if the user backspaces to a
  # position before where the box was created.
  def setAutoCSetCancelAtStart( cancel )
    return (sendMessage(2110, ( cancel ? 1 : 0 ), 0))
  end

  # Retrieve whether auto-completion cancelled by backspacing before start.
  def getAutoCGetCancelAtStart?
    return (sendMessage(2111, 0, 0)==1 ? true : false)
  end

  # Define a set of character that when typed fills up the selected word.
  def setAutoCSetFillUps( characterSet )
    return (sendMessage(2112, 0, characterSet))
  end

  # Should a single item auto-completion list automatically choose the item.
  def setAutoCSetChooseSingle( chooseSingle )
    return (sendMessage(2113, ( chooseSingle ? 1 : 0 ), 0))
  end

  # Retrieve whether a single item auto-completion list automatically choose the item.
  def getAutoCGetChooseSingle?
    return (sendMessage(2114, 0, 0)==1 ? true : false)
  end

  # Set whether case is significant when performing auto-completion searches.
  def setAutoCSetIgnoreCase( ignoreCase )
    return (sendMessage(2115, ( ignoreCase ? 1 : 0 ), 0))
  end

  # Retrieve state of ignore case flag.
  def getAutoCGetIgnoreCase?
    return (sendMessage(2116, 0, 0)==1 ? true : false)
  end

  # Display a list of strings and send notification when user chooses one.
  def userListShow( listType , itemList )
    return (sendMessage(2117, listType, itemList))
  end

  # Set whether or not autocompletion is hidden automatically when nothing matches
  def setAutoCSetAutoHide( autoHide )
    return (sendMessage(2118, ( autoHide ? 1 : 0 ), 0))
  end

  # Retrieve whether or not autocompletion is hidden automatically when nothing matches
  def getAutoCGetAutoHide?
    return (sendMessage(2119, 0, 0)==1 ? true : false)
  end

  # Set the number of spaces used for one level of indentation.
  def setIndent( indentSize )
    return (sendMessage(2122, indentSize, 0))
  end

  # Retrieve indentation size.
  def getIndent
    return (sendMessage(2123, 0, 0))
  end

  # Indentation will only use space characters if useTabs is false, otherwise
  # it will use a combination of tabs and spaces.
  def setUseTabs( useTabs )
    return (sendMessage(2124, ( useTabs ? 1 : 0 ), 0))
  end

  # Retrieve whether tabs will be used in indentation.
  def getUseTabs?
    return (sendMessage(2125, 0, 0)==1 ? true : false)
  end

  # Change the indentation of a line to a number of columns.
  def setLineIndentation( line , indentSize )
    return (sendMessage(2126, line, indentSize))
  end

  # Retrieve the number of columns that a line is indented.
  def getLineIndentation( line )
    return (sendMessage(2127, line, 0))
  end

  # Retrieve the position before the first non indentation character on a line.
  def getLineIndentPosition( line )
    return (sendMessage(2128, line, 0))
  end

  # Retrieve the column number of a position, taking tab width into account.
  def getColumn( pos )
    return (sendMessage(2129, pos, 0))
  end

  # Show or hide the horizontal scroll bar.
  def setHScrollBar( show )
    return (sendMessage(2130, ( show ? 1 : 0 ), 0))
  end

  # Is the horizontal scroll bar visible?
  def getHScrollBar?
    return (sendMessage(2131, 0, 0)==1 ? true : false)
  end

  # Show or hide indentation guides.
  def setIndentationGuides( show )
    return (sendMessage(2132, ( show ? 1 : 0 ), 0))
  end

  # Are the indentation guides visible?
  def getIndentationGuides?
    return (sendMessage(2133, 0, 0)==1 ? true : false)
  end

  # Set the highlighted indentation guide column.
  # 0 = no highlighted guide.
  def setHighlightGuide( column )
    return (sendMessage(2134, column, 0))
  end

  # Get the highlighted indentation guide column.
  def getHighlightGuide
    return (sendMessage(2135, 0, 0))
  end

  # Get the position after the last visible characters on a line.
  def getLineEndPosition( line )
    return (sendMessage(2136, line, 0))
  end

  # Get the code page used to interpret the bytes of the document as characters.
  def getCodePage
    return (sendMessage(2137, 0, 0))
  end

  # Get the foreground colour of the caret.
  def getCaretFore
    return (sendMessage(2138, 0, 0))
  end

  # In palette mode?
  def getUsePalette?
    return (sendMessage(2139, 0, 0)==1 ? true : false)
  end

  # In read-only mode?
  def getReadOnly?
    return (sendMessage(2140, 0, 0)==1 ? true : false)
  end

  # Sets the position of the caret.
  def setCurrentPos( pos )
    return (sendMessage(2141, pos, 0))
  end

  # Sets the position that starts the selection - this becomes the anchor.
  def setSelectionStart( pos )
    return (sendMessage(2142, pos, 0))
  end

  # Returns the position at the start of the selection.
  def getSelectionStart
    return (sendMessage(2143, 0, 0))
  end

  # Sets the position that ends the selection - this becomes the currentPosition.
  def setSelectionEnd( pos )
    return (sendMessage(2144, pos, 0))
  end

  # Returns the position at the end of the selection.
  def getSelectionEnd
    return (sendMessage(2145, 0, 0))
  end

  # Sets the print magnification added to the point size of each style for printing.
  def setPrintMagnification( magnification )
    return (sendMessage(2146, magnification, 0))
  end

  # Returns the print magnification.
  def getPrintMagnification
    return (sendMessage(2147, 0, 0))
  end

  # PrintColourMode - use same colours as screen.
  SC_PRINT_NORMAL = 0
  # PrintColourMode - invert the light value of each style for printing.
  SC_PRINT_INVERTLIGHT = 1
  # PrintColourMode - force black text on white background for printing.
  SC_PRINT_BLACKONWHITE = 2
  # PrintColourMode - text stays coloured, but all background is forced to be white for printing.
  SC_PRINT_COLOURONWHITE = 3
  # PrintColourMode - only the default-background is forced to be white for printing.
  SC_PRINT_COLOURONWHITEDEFAULTBG = 4

  # Modify colours when printing for clearer printed text.
  def setPrintColourMode( mode )
    return (sendMessage(2148, mode, 0))
  end

  # Returns the print colour mode.
  def getPrintColourMode
    return (sendMessage(2149, 0, 0))
  end

  SCFIND_WHOLEWORD = 2
  SCFIND_MATCHCASE = 4
  SCFIND_WORDSTART = 0x00100000
  SCFIND_REGEXP = 0x00200000

  # Find some text in the document.
  def findText( flags , ft )
    return (sendMessage(2150, flags, ft))
  end

  # On Windows will draw the document into a display context such as a printer.
  def formatRange( draw , fr )
    return (sendMessage(2151, ( draw ? 1 : 0 ), fr))
  end

  # Retrieve the line at the top of the display.
  def getFirstVisibleLine
    return (sendMessage(2152, 0, 0))
  end

  # Retrieve the contents of a line.
  # Returns the length of the line.
  def getLine( line )
    len = sendMessage(2153, line, "")
    return "" if len==0
    buffer = " "*len
    len = sendMessage(2153, line, buffer)
    return buffer
  end

  # Returns the number of lines in the document. There is always at least one.
  def getLineCount
    return (sendMessage(2154, 0, 0))
  end

  # Sets the size in pixels of the left margin.
  def setMarginLeft( pixelWidth )
    return (sendMessage(2155, 0, pixelWidth))
  end

  # Returns the size in pixels of the left margin.
  def getMarginLeft
    return (sendMessage(2156, 0, 0))
  end

  # Sets the size in pixels of the right margin.
  def setMarginRight( pixelWidth )
    return (sendMessage(2157, 0, pixelWidth))
  end

  # Returns the size in pixels of the right margin.
  def getMarginRight
    return (sendMessage(2158, 0, 0))
  end

  # Is the document different from when it was last saved?
  def getModify?
    return (sendMessage(2159, 0, 0)==1 ? true : false)
  end

  # Select a range of text.
  def setSel( start , finish )
    return (sendMessage(2160, start, finish))
  end

  # Retrieve the selected text.
  # Return the length of the text.
  def getSelText
    len = sendMessage(2161, 0, "")
    return "" if len==0
    buffer = " "*len
    len = sendMessage(2161, 0, buffer)
    return buffer
  end

  # Retrieve a range of text.
  # Return the length of the text.
  def getTextRange( tr )
    return (sendMessage(2162, 0, tr))
  end

  # Draw the selection in normal style or with selection highlighted.
  def hideSelection( normal )
    return (sendMessage(2163, ( normal ? 1 : 0 ), 0))
  end

  # Retrieve the x value of the point in the window where a position is displayed.
  def pointXFromPosition( pos )
    return (sendMessage(2164, 0, pos))
  end

  # Retrieve the y value of the point in the window where a position is displayed.
  def pointYFromPosition( pos )
    return (sendMessage(2165, 0, pos))
  end

  # Retrieve the line containing a position.
  def lineFromPosition( pos )
    return (sendMessage(2166, pos, 0))
  end

  # Retrieve the position at the start of a line.
  def positionFromLine( line )
    return (sendMessage(2167, line, 0))
  end

  # Scroll horizontally and vertically.
  def lineScroll( columns , lines )
    return (sendMessage(2168, columns, lines))
  end

  # Ensure the caret is visible.
  def scrollCaret
    return (sendMessage(2169, 0, 0))
  end

  # Replace the selected text with the argument text.
  def replaceSel( text )
    return (sendMessage(2170, 0, text))
  end

  # Set to read only or read write.
  def setReadOnly( readOnly )
    return (sendMessage(2171, ( readOnly ? 1 : 0 ), 0))
  end

  # Null operation.
  def null
    return (sendMessage(2172, 0, 0))
  end

  # Will a paste succeed?
  def canPaste?
    return (sendMessage(2173, 0, 0)==1 ? true : false)
  end

  # Are there any undoable actions in the undo history.
  def canUndo?
    return (sendMessage(2174, 0, 0)==1 ? true : false)
  end

  # Delete the undo history.
  def emptyUndoBuffer
    return (sendMessage(2175, 0, 0))
  end

  # Undo one action in the undo history.
  def undo
    return (sendMessage(2176, 0, 0))
  end

  # Cut the selection to the clipboard.
  def cut
    return (sendMessage(2177, 0, 0))
  end

  # Copy the selection to the clipboard.
  def copy
    return (sendMessage(2178, 0, 0))
  end

  # Paste the contents of the clipboard into the document replacing the selection.
  def paste
    return (sendMessage(2179, 0, 0))
  end

  # Clear the selection.
  def clear
    return (sendMessage(2180, 0, 0))
  end

  # Replace the contents of the document with the argument text.
  def setText( text )
    return (sendMessage(2181, 0, text))
  end

  # Retrieve all the text in the document.
  # Returns number of characters retrieved.
  def getText( length )
    len = sendMessage(2182, length, "")
    return "" if len==0
    buffer = " "*len
    len = sendMessage(2182, length, buffer)
    return buffer
  end

  # Retrieve the number of characters in the document.
  def getTextLength
    return (sendMessage(2183, 0, 0))
  end

  # Retrieve a pointer to a function that processes messages for this Scintilla.
  def getDirectFunction
    return (sendMessage(2184, 0, 0))
  end

  # Retrieve a pointer value to use as the first argument when calling
  # the function returned by GetDirectFunction.
  def getDirectPointer
    return (sendMessage(2185, 0, 0))
  end

  # Set to overtype (true) or insert mode
  def setOvertype( overtype )
    return (sendMessage(2186, ( overtype ? 1 : 0 ), 0))
  end

  # Returns true if overtype mode is active otherwise false is returned.
  def getOvertype?
    return (sendMessage(2187, 0, 0)==1 ? true : false)
  end

  # Set the width of the insert mode caret
  def setCaretWidth( pixelWidth )
    return (sendMessage(2188, pixelWidth, 0))
  end

  # Returns the width of the insert mode caret
  def getCaretWidth
    return (sendMessage(2189, 0, 0))
  end

  # Sets the position that starts the target which is used for updating the 
  # document without affecting the scroll position.
  def setTargetStart( pos )
    return (sendMessage(2190, pos, 0))
  end

  # Get the position that starts the target.
  def getTargetStart
    return (sendMessage(2191, 0, 0))
  end

  # Sets the position that ends the target which is used for updating the 
  # document without affecting the scroll position.
  def setTargetEnd( pos )
    return (sendMessage(2192, pos, 0))
  end

  # Get the position that ends the target.
  def getTargetEnd
    return (sendMessage(2193, 0, 0))
  end

  # Replace the target text with the argument text.
  # Text is counted so it can contain nulls.
  # Returns the length of the replacement text.
  def replaceTarget( text )
    sendMessage(2194, text.length, text)
  end


  # Replace the target text with the argument text after \d processing.
  # Text is counted so it can contain nulls.
  # 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.
  def replaceTargetRE( text )
    sendMessage(2195, text.length, text)
  end


  # Search for a counted string in the target and set the target to the found
  # range. Text is counted so it can contain nulls.
  # Returns length of range or -1 for failure in which case target is not moved.
  def searchInTarget( text )
    sendMessage(2197, text.length, text)
  end


  # Set the search flags used by SearchInTarget
  def setSearchFlags( flags )
    return (sendMessage(2198, flags, 0))
  end

  # Get the search flags used by SearchInTarget
  def getSearchFlags
    return (sendMessage(2199, 0, 0))
  end

  # Show a call tip containing a definition near position pos.
  def callTipShow( pos , definition )
    return (sendMessage(2200, pos, definition))
  end

  # Remove the call tip from the screen.
  def callTipCancel
    return (sendMessage(2201, 0, 0))
  end

  # Is there an active call tip?
  def callTipActive?
    return (sendMessage(2202, 0, 0)==1 ? true : false)
  end

  # Retrieve the position where the caret was before displaying the call tip.
  def callTipPosStart
    return (sendMessage(2203, 0, 0))
  end

  # Highlight a segment of the definition.
  def callTipSetHlt( start , finish )
    return (sendMessage(2204, start, finish))
  end

  # Set the background colour for the call tip.
  def setCallTipSetBack( back )
    return (sendMessage(2205, back.to_i, 0))
  end

  # Find the display line of a document line taking hidden lines into account.
  def visibleFromDocLine( line )
    return (sendMessage(2220, line, 0))
  end

  # Find the document line of a display line taking hidden lines into account.
  def docLineFromVisible( lineDisplay )
    return (sendMessage(2221, lineDisplay, 0))
  end

  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.
  def setFoldLevel( line , level )
    return (sendMessage(2222, line, level))
  end

  # Retrieve the fold level of a line.
  def getFoldLevel( line )
    return (sendMessage(2223, line, 0))
  end

  # Find the last child line of a header line.
  def getLastChild( line , level )
    return (sendMessage(2224, line, level))
  end

  # Find the parent line of a child line.
  def getFoldParent( line )
    return (sendMessage(2225, line, 0))
  end

  # Make a range of lines visible.
  def showLines( lineStart , lineEnd )
    return (sendMessage(2226, lineStart, lineEnd))
  end

  # Make a range of lines invisible.
  def hideLines( lineStart , lineEnd )
    return (sendMessage(2227, lineStart, lineEnd))
  end

  # Is a line visible?
  def getLineVisible?( line )
    return (sendMessage(2228, line, 0)==1 ? true : false)
  end

  # Show the children of a header line.
  def setFoldExpanded( line , expanded )
    return (sendMessage(2229, line, ( expanded ? 1 : 0 )))
  end

  # Is a header line expanded?
  def getFoldExpanded?( line )
    return (sendMessage(2230, line, 0)==1 ? true : false)
  end

  # Switch a header line between expanded and contracted.
  def toggleFold( line )
    return (sendMessage(2231, line, 0))
  end

  # Ensure a particular line is visible by expanding any header line hiding it.
  def ensureVisible( line )
    return (sendMessage(2232, line, 0))
  end

  # Set some debugging options for folding
  def setFoldFlags( flags )
    return (sendMessage(2233, flags, 0))
  end

  # 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.
  def ensureVisibleEnforcePolicy( line )
    return (sendMessage(2234, line, 0))
  end

  # Sets whether a tab pressed when caret is within indentation indents
  def setTabIndents( tabIndents )
    return (sendMessage(2260, ( tabIndents ? 1 : 0 ), 0))
  end

  # Does a tab pressed when caret is within indentation indent?
  def getTabIndents?
    return (sendMessage(2261, 0, 0)==1 ? true : false)
  end

  # Sets whether a backspace pressed when caret is within indentation unindents
  def setBackSpaceUnIndents( bsUnIndents )
    return (sendMessage(2262, ( bsUnIndents ? 1 : 0 ), 0))
  end

  # Does a backspace pressed when caret is within indentation unindent?
  def getBackSpaceUnIndents?
    return (sendMessage(2263, 0, 0)==1 ? true : false)
  end

  SC_TIME_FOREVER = 10000000

  # Sets the time the mouse must sit still to generate a mouse dwell event
  def setMouseDwellTime( periodMilliseconds )
    return (sendMessage(2264, periodMilliseconds, 0))
  end

  # Retrieve the time the mouse must sit still to generate a mouse dwell event
  def getMouseDwellTime
    return (sendMessage(2265, 0, 0))
  end

  ## Start of key messages
  # Move caret down one line.
  def lineDown
    return (sendMessage(2300, 0, 0))
  end

  # Move caret down one line extending selection to new caret position.
  def lineDownExtend
    return (sendMessage(2301, 0, 0))
  end

  # Move caret up one line.
  def lineUp
    return (sendMessage(2302, 0, 0))
  end

  # Move caret up one line extending selection to new caret position.
  def lineUpExtend
    return (sendMessage(2303, 0, 0))
  end

  # Move caret left one character.
  def charLeft
    return (sendMessage(2304, 0, 0))
  end

  # Move caret left one character extending selection to new caret position.
  def charLeftExtend
    return (sendMessage(2305, 0, 0))
  end

  # Move caret right one character.
  def charRight
    return (sendMessage(2306, 0, 0))
  end

  # Move caret right one character extending selection to new caret position.
  def charRightExtend
    return (sendMessage(2307, 0, 0))
  end

  # Move caret left one word.
  def wordLeft
    return (sendMessage(2308, 0, 0))
  end

  # Move caret left one word extending selection to new caret position.
  def wordLeftExtend
    return (sendMessage(2309, 0, 0))
  end

  # Move caret right one word.
  def wordRight
    return (sendMessage(2310, 0, 0))
  end

  # Move caret right one word extending selection to new caret position.
  def wordRightExtend
    return (sendMessage(2311, 0, 0))
  end

  # Move caret to first position on line.
  def home
    return (sendMessage(2312, 0, 0))
  end

  # Move caret to first position on line extending selection to new caret position.
  def homeExtend
    return (sendMessage(2313, 0, 0))
  end

  # Move caret to last position on line.
  def lineEnd
    return (sendMessage(2314, 0, 0))
  end

  # Move caret to last position on line extending selection to new caret position.
  def lineEndExtend
    return (sendMessage(2315, 0, 0))
  end

  # Move caret to first position in document.
  def documentStart
    return (sendMessage(2316, 0, 0))
  end

  # Move caret to first position in document extending selection to new caret position.
  def documentStartExtend
    return (sendMessage(2317, 0, 0))
  end

  # Move caret to last position in document.
  def documentEnd
    return (sendMessage(2318, 0, 0))
  end

  # Move caret to last position in document extending selection to new caret position.
  def documentEndExtend
    return (sendMessage(2319, 0, 0))
  end

  # Move caret one page up.
  def pageUp
    return (sendMessage(2320, 0, 0))
  end

  # Move caret one page up extending selection to new caret position.
  def pageUpExtend
    return (sendMessage(2321, 0, 0))
  end

  # Move caret one page down.
  def pageDown
    return (sendMessage(2322, 0, 0))
  end

  # Move caret one page down extending selection to new caret position.
  def pageDownExtend
    return (sendMessage(2323, 0, 0))
  end

  # Switch from insert to overtype mode or the reverse.
  def editToggleOvertype
    return (sendMessage(2324, 0, 0))
  end

  # Cancel any modes such as call tip or auto-completion list display.
  def cancel
    return (sendMessage(2325, 0, 0))
  end

  # Delete the selection or if no selection, the character before the caret.
  def deleteBack
    return (sendMessage(2326, 0, 0))
  end

  # 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.
  def tab
    return (sendMessage(2327, 0, 0))
  end

  # Dedent the selected lines.
  def backTab
    return (sendMessage(2328, 0, 0))
  end

  # Insert a new line, may use a CRLF, CR or LF depending on EOL mode.
  def newLine
    return (sendMessage(2329, 0, 0))
  end

  # Insert a Form Feed character.
  def formFeed
    return (sendMessage(2330, 0, 0))
  end

  # Move caret to before first visible character on line.
  # If already there move to first character on line.
  def vCHome
    return (sendMessage(2331, 0, 0))
  end

  # Like VCHome but extending selection to new caret position.
  def vCHomeExtend
    return (sendMessage(2332, 0, 0))
  end

  # Magnify the displayed text by increasing the sizes by 1 point.
  def zoomIn
    return (sendMessage(2333, 0, 0))
  end

  # Make the displayed text smaller by decreasing the sizes by 1 point.
  def zoomOut
    return (sendMessage(2334, 0, 0))
  end

  # Delete the word to the left of the caret.
  def delWordLeft
    return (sendMessage(2335, 0, 0))
  end

  # Delete the word to the right of the caret.
  def delWordRight
    return (sendMessage(2336, 0, 0))
  end

  # Cut the line containing the caret.
  def lineCut
    return (sendMessage(2337, 0, 0))
  end

  # Delete the line containing the caret.
  def lineDelete
    return (sendMessage(2338, 0, 0))
  end

  # Switch the current line with the previous.
  def lineTranspose
    return (sendMessage(2339, 0, 0))
  end

  # Transform the selection to lower case.
  def lowerCase
    return (sendMessage(2340, 0, 0))
  end

  # Transform the selection to upper case.
  def upperCase
    return (sendMessage(2341, 0, 0))
  end

  # Scroll the document down, keeping the caret visible.
  def lineScrollDown
    return (sendMessage(2342, 0, 0))
  end

  # Scroll the document up, keeping the caret visible.
  def lineScrollUp
    return (sendMessage(2343, 0, 0))
  end

  # Move the caret inside current view if it's not there already
  def moveCaretInsideView
    return (sendMessage(2401, 0, 0))
  end

  # How many characters are on a line, not including end of line characters.
  def lineLength( line )
    return (sendMessage(2350, line, 0))
  end

  # Highlight the characters at two positions.
  def braceHighlight( pos1 , pos2 )
    return (sendMessage(2351, pos1, pos2))
  end

  # Highlight the character at a position indicating there is no matching brace.
  def braceBadLight( pos )
    return (sendMessage(2352, pos, 0))
  end

  # Find the position of a matching brace or INVALID_POSITION if no match.
  def braceMatch( pos )
    return (sendMessage(2353, pos, 0))
  end

  # Are the end of line characters visible.
  def getViewEOL?
    return (sendMessage(2355, 0, 0)==1 ? true : false)
  end

  # Make the end of line characters visible or invisible
  def setViewEOL( visible )
    return (sendMessage(2356, ( visible ? 1 : 0 ), 0))
  end

  # Retrieve a pointer to the document object.
  def getDocPointer
    return (sendMessage(2357, 0, 0))
  end

  # Change the document object used.
  def setDocPointer( pointer )
    return (sendMessage(2358, 0, pointer))
  end

  # Set which document modification events are sent to the container.
  def setModEventMask( mask )
    return (sendMessage(2359, mask, 0))
  end

  EDGE_NONE = 0
  EDGE_LINE = 1
  EDGE_BACKGROUND = 2

  # Retrieve the column number which text should be kept within.
  def getEdgeColumn
    return (sendMessage(2360, 0, 0))
  end

  # Set the column number of the edge.
  # If text goes past the edge then it is highlighted.
  def setEdgeColumn( column )
    return (sendMessage(2361, column, 0))
  end

  # Retrieve the edge highlight mode.
  def getEdgeMode
    return (sendMessage(2362, 0, 0))
  end

  # 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).
  def setEdgeMode( mode )
    return (sendMessage(2363, mode, 0))
  end

  # Retrieve the colour used in edge indication.
  def getEdgeColour
    return (sendMessage(2364, 0, 0))
  end

  # Change the colour used in edge indication.
  def setEdgeColour( edgeColour )
    return (sendMessage(2365, edgeColour.to_i, 0))
  end

  # Sets the current caret position to be the search anchor.
  def searchAnchor
    return (sendMessage(2366, 0, 0))
  end

  # Find some text starting at the search anchor.
  # Does not ensure the selection is visible.
  def searchNext( flags , text )
    return (sendMessage(2367, flags, text))
  end

  # Find some text starting at the search anchor and moving backwards.
  # Does not ensure the selection is visible.
  def searchPrev( flags , text )
    return (sendMessage(2368, flags, text))
  end

  # Show caret within N lines of edge when it's scrolled to view
  # If CARET_SLOP not set then centre caret on screen when it's
  # scrolled to view
  CARET_SLOP = 0x01
  # Value not used
  CARET_CENTER = 0x02
  # If CARET_SLOP also set then reposition whenever outside slop border
  # If CARET_SLOP not set then recentre even when visible
  CARET_STRICT = 0x04
  # If CARET_XEVEN set then both left and right margins are given equal weight
  # rather than favouring left following behaviour.
  CARET_XEVEN = 0x08
  # If CARET_XJUMPS set then when caret reaches the margin the display jumps
  # enough to leave the caret solidly within the display.
  CARET_XJUMPS = 0x10
  # Set the way the line the caret is on is kept visible.
  def setCaretPolicy( caretPolicy , caretSlop )
    return (sendMessage(2369, caretPolicy, caretSlop))
  end

  # Retrieves the number of lines completely visible.
  def getLinesOnScreen
    return (sendMessage(2370, 0, 0))
  end

  # Set whether a pop up menu is displayed automatically when the user presses
  # the wrong mouse button.
  def usePopUp( allowPopUp )
    return (sendMessage(2371, ( allowPopUp ? 1 : 0 ), 0))
  end

  # Is the selection a rectangular. The alternative is the more common stream selection.
  def getSelectionIsRectangle?
    return (sendMessage(2372, 0, 0)==1 ? true : false)
  end

  # 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.
  def setZoom( zoom )
    return (sendMessage(2373, zoom, 0))
  end
  # Retrieve the zoom level.
  def getZoom
    return (sendMessage(2374, 0, 0))
  end

  # Create a new document object.
  # Starts with reference count of 1 and not selected into editor.
  def createDocument
    return (sendMessage(2375, 0, 0))
  end
  # Extend life of document.
  def addRefDocument( doc )
    return (sendMessage(2376, 0, doc))
  end
  # Release a reference to the document, deleting document if it fades to black.
  def releaseDocument( doc )
    return (sendMessage(2377, 0, doc))
  end

  # Get which document modification events are sent to the container.
  def getModEventMask
    return (sendMessage(2378, 0, 0))
  end

  # Change internal focus flag
  def setFocus( focus )
    return (sendMessage(2380, ( focus ? 1 : 0 ), 0))
  end
  # Get internal focus flag
  def getFocus?
    return (sendMessage(2381, 0, 0)==1 ? true : false)
  end

  # Change error status - 0 = OK
  def setStatus( statusCode )
    return (sendMessage(2382, statusCode, 0))
  end
  # Get error status
  def getStatus
    return (sendMessage(2383, 0, 0))
  end

  # Set whether the mouse is captured when its button is pressed
  def setMouseDownCaptures( captures )
    return (sendMessage(2384, ( captures ? 1 : 0 ), 0))
  end
  # Get whether mouse gets captured
  def getMouseDownCaptures?
    return (sendMessage(2385, 0, 0)==1 ? true : false)
  end

  SC_CURSORNORMAL = -1
  SC_CURSORWAIT = 3
  # Sets the cursor to one of the SC_CURSOR* values
  def setCursor( cursorType )
    return (sendMessage(2386, cursorType, 0))
  end
  # Get cursor type
  def getCursor
    return (sendMessage(2387, 0, 0))
  end

  # Move to the previous change in capitalistion
  def wordPartLeft
    return (sendMessage(2390, 0, 0))
  end
  # Move to the previous change in capitalistion extending selection to new caret position.
  def wordPartLeftExtend
    return (sendMessage(2391, 0, 0))
  end
  # Move to the change next in capitalistion
  def wordPartRight
    return (sendMessage(2392, 0, 0))
  end
  # Move to the next change in capitalistion extending selection to new caret position.
  def wordPartRightExtend
    return (sendMessage(2393, 0, 0))
  end

  # Constants for use with SetVisiblePolicy, similar to SetCaretPolicy
  VISIBLE_SLOP = 0x01
  VISIBLE_STRICT = 0x04
  # Set the way the display area is determined when a particular line is to be moved to.
  def setVisiblePolicy( visiblePolicy , visibleSlop )
    return (sendMessage(2394, visiblePolicy, visibleSlop))
  end

  # Delete back from the current position to the start of the line
  def delLineLeft
    return (sendMessage(2395, 0, 0))
  end

  # Delete forwards from the current position to the end of the line
  def delLineRight
    return (sendMessage(2396, 0, 0))
  end

  # Get and Set the xOffset (ie, horizonal scroll position)
  def setXOffset( newOffset )
    return (sendMessage(2397, newOffset, 0))
  end
  def getXOffset
    return (sendMessage(2398, 0, 0))
  end

  # Set the focus to this Scintilla widget.
  # GTK+ Specific
  def grabFocus
    return (sendMessage(2400, 0, 0))
  end

  # Start notifying the container of all key presses and commands.
  def startRecord
    return (sendMessage(3001, 0, 0))
  end

  # Stop notifying the container of all key presses and commands.
  def stopRecord
    return (sendMessage(3002, 0, 0))
  end

  # Set the lexing language of the document.
  def setLexer( lexer )
    return (sendMessage(4001, lexer, 0))
  end

  # Retrieve the lexing language of the document.
  def getLexer
    return (sendMessage(4002, 0, 0))
  end

  # Colourise a segment of the document using the current lexing language.
  def colourise( start , finish )
    return (sendMessage(4003, start, finish))
  end

  # Set up a value that may be used by a lexer for some optional feature.
  def setProperty( key , value )
    return (sendMessage(4004, key, value))
  end

  # Set up the key words used by the lexer.
  def setKeyWords( keywordSet , keyWords )
    return (sendMessage(4005, keywordSet, keyWords))
  end

  # Set the lexing language of the document based on string name.
  def setLexerLanguage( language )
    return (sendMessage(4006, 0, language))
  end

  # Notifications
  # Type of modification and the action which caused the modification
  # These are defined as a bit mask to make it easy to specify which notifications are wanted.
  # One bit is set from each of SC_MOD_* and SC_PERFORMED_*.
  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_LASTSTEPINUNDOREDO = 0x100
  SC_MOD_CHANGEMARKER = 0x200
  SC_MOD_BEFOREINSERT = 0x400
  SC_MOD_BEFOREDELETE = 0x800
  SC_MODEVENTMASKALL = 0xF77

  # For compatibility, these go through the COMMAND notification rather than NOTIFY
  # and have exactly the same values as the EN_* constants.
  SCEN_CHANGE = 768
  SCEN_SETFOCUS = 512
  SCEN_KILLFOCUS = 256

  # Symbolic key codes and modifier flags
  # ASCII and other printable characters below 256
  # Extended keys above 300

  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

  SCMOD_SHIFT = 1
  SCMOD_CTRL = 2
  SCMOD_ALT = 4

  ################################################
  # For SciLexer.h
  SCLEX_CONTAINER = 0
  SCLEX_NULL = 1
  SCLEX_PYTHON = 2
  SCLEX_CPP = 3
  SCLEX_HTML = 4
  SCLEX_XML = 5
  SCLEX_PERL = 6
  SCLEX_SQL = 7
  SCLEX_VB = 8
  SCLEX_PROPERTIES = 9
  SCLEX_ERRORLIST = 10
  SCLEX_MAKEFILE = 11
  SCLEX_BATCH = 12
  SCLEX_XCODE = 13
  SCLEX_LATEX = 14
  SCLEX_LUA = 15
  SCLEX_DIFF = 16
  SCLEX_CONF = 17
  SCLEX_PASCAL = 18
  SCLEX_AVE = 19
  SCLEX_ADA = 20
  SCLEX_LISP = 21
  SCLEX_RUBY = 22
  SCLEX_EIFFEL = 23
  SCLEX_EIFFELKW = 24
  SCLEX_TCL = 25
  SCLEX_NNCRONTAB = 26
  SCLEX_BULLANT = 27
  SCLEX_VBSCRIPT = 28
  SCLEX_ASP = 29
  SCLEX_PHP = 30

  # When a lexer specifies its language as SCLEX_AUTOMATIC it receives a 
  # value assigned in sequence from SCLEX_AUTOMATIC+1.
  SCLEX_AUTOMATIC = 1000
  # Lexical states for SCLEX_PYTHON
  SCE_P_DEFAULT = 0
  SCE_P_COMMENTLINE = 1
  SCE_P_NUMBER = 2
  SCE_P_STRING = 3
  SCE_P_CHARACTER = 4
  SCE_P_WORD = 5
  SCE_P_TRIPLE = 6
  SCE_P_TRIPLEDOUBLE = 7
  SCE_P_CLASSNAME = 8
  SCE_P_DEFNAME = 9
  SCE_P_OPERATOR = 10
  SCE_P_IDENTIFIER = 11
  SCE_P_COMMENTBLOCK = 12
  SCE_P_STRINGEOL = 13
  # Lexical states for SCLEX_CPP
  SCE_C_DEFAULT = 0
  SCE_C_COMMENT = 1
  SCE_C_COMMENTLINE = 2
  SCE_C_COMMENTDOC = 3
  SCE_C_NUMBER = 4
  SCE_C_WORD = 5
  SCE_C_STRING = 6
  SCE_C_CHARACTER = 7
  SCE_C_UUID = 8
  SCE_C_PREPROCESSOR = 9
  SCE_C_OPERATOR = 10
  SCE_C_IDENTIFIER = 11
  SCE_C_STRINGEOL = 12
  SCE_C_VERBATIM = 13
  SCE_C_REGEX = 14
  SCE_C_COMMENTLINEDOC = 15
  SCE_C_WORD2 = 16
  SCE_C_COMMENTDOCKEYWORD = 17
  SCE_C_COMMENTDOCKEYWORDERROR = 18
  # Lexical states for SCLEX_VB, SCLEX_VBSCRIPT
  SCE_B_DEFAULT = 0
  SCE_B_COMMENT = 1
  SCE_B_NUMBER = 2
  SCE_B_KEYWORD = 3
  SCE_B_STRING = 4
  SCE_B_PREPROCESSOR = 5
  SCE_B_OPERATOR = 6
  SCE_B_IDENTIFIER = 7
  SCE_B_DATE = 8
  # Lexical states for SCLEX_HTML, SCLEX_XML
  SCE_H_DEFAULT = 0
  SCE_H_TAG = 1
  SCE_H_TAGUNKNOWN = 2
  SCE_H_ATTRIBUTE = 3
  SCE_H_ATTRIBUTEUNKNOWN = 4
  SCE_H_NUMBER = 5
  SCE_H_DOUBLESTRING = 6
  SCE_H_SINGLESTRING = 7
  SCE_H_OTHER = 8
  SCE_H_COMMENT = 9
  SCE_H_ENTITY = 10
  # XML and ASP
  SCE_H_TAGEND = 11
  SCE_H_XMLSTART = 12
  SCE_H_XMLEND = 13
  SCE_H_SCRIPT = 14
  SCE_H_ASP = 15
  SCE_H_ASPAT = 16
  SCE_H_CDATA = 17
  SCE_H_QUESTION = 18
  # More HTML
  SCE_H_VALUE = 19
  # X-Code
  SCE_H_XCCOMMENT = 20
  # SGML
  SCE_H_SGML_DEFAULT = 21
  SCE_H_SGML_COMMAND = 22
  SCE_H_SGML_1ST_PARAM = 23
  SCE_H_SGML_DOUBLESTRING = 24
  SCE_H_SGML_SIMPLESTRING = 25
  SCE_H_SGML_ERROR = 26
  SCE_H_SGML_SPECIAL = 27
  SCE_H_SGML_ENTITY = 28
  SCE_H_SGML_COMMENT = 29
  SCE_H_SGML_1ST_PARAM_COMMENT = 30
  SCE_H_SGML_BLOCK_DEFAULT = 31
  # Embedded Javascript
  SCE_HJ_START = 40
  SCE_HJ_DEFAULT = 41
  SCE_HJ_COMMENT = 42
  SCE_HJ_COMMENTLINE = 43
  SCE_HJ_COMMENTDOC = 44
  SCE_HJ_NUMBER = 45
  SCE_HJ_WORD = 46
  SCE_HJ_KEYWORD = 47
  SCE_HJ_DOUBLESTRING = 48
  SCE_HJ_SINGLESTRING = 49
  SCE_HJ_SYMBOLS = 50
  SCE_HJ_STRINGEOL = 51
  SCE_HJ_REGEX = 52
  # ASP Javascript
  SCE_HJA_START = 55
  SCE_HJA_DEFAULT = 56
  SCE_HJA_COMMENT = 57
  SCE_HJA_COMMENTLINE = 58
  SCE_HJA_COMMENTDOC = 59
  SCE_HJA_NUMBER = 60
  SCE_HJA_WORD = 61
  SCE_HJA_KEYWORD = 62
  SCE_HJA_DOUBLESTRING = 63
  SCE_HJA_SINGLESTRING = 64
  SCE_HJA_SYMBOLS = 65
  SCE_HJA_STRINGEOL = 66
  SCE_HJA_REGEX = 67
  # Embedded VBScript
  SCE_HB_START = 70
  SCE_HB_DEFAULT = 71
  SCE_HB_COMMENTLINE = 72
  SCE_HB_NUMBER = 73
  SCE_HB_WORD = 74
  SCE_HB_STRING = 75
  SCE_HB_IDENTIFIER = 76
  SCE_HB_STRINGEOL = 77
  # ASP VBScript
  SCE_HBA_START = 80
  SCE_HBA_DEFAULT = 81
  SCE_HBA_COMMENTLINE = 82
  SCE_HBA_NUMBER = 83
  SCE_HBA_WORD = 84
  SCE_HBA_STRING = 85
  SCE_HBA_IDENTIFIER = 86
  SCE_HBA_STRINGEOL = 87
  # Embedded Python
  SCE_HP_START = 90
  SCE_HP_DEFAULT = 91
  SCE_HP_COMMENTLINE = 92
  SCE_HP_NUMBER = 93
  SCE_HP_STRING = 94
  SCE_HP_CHARACTER = 95
  SCE_HP_WORD = 96
  SCE_HP_TRIPLE = 97
  SCE_HP_TRIPLEDOUBLE = 98
  SCE_HP_CLASSNAME = 99
  SCE_HP_DEFNAME = 100
  SCE_HP_OPERATOR = 101
  SCE_HP_IDENTIFIER = 102
  # ASP Python
  SCE_HPA_START = 105
  SCE_HPA_DEFAULT = 106
  SCE_HPA_COMMENTLINE = 107
  SCE_HPA_NUMBER = 108
  SCE_HPA_STRING = 109
  SCE_HPA_CHARACTER = 110
  SCE_HPA_WORD = 111
  SCE_HPA_TRIPLE = 112
  SCE_HPA_TRIPLEDOUBLE = 113
  SCE_HPA_CLASSNAME = 114
  SCE_HPA_DEFNAME = 115
  SCE_HPA_OPERATOR = 116
  SCE_HPA_IDENTIFIER = 117
  # PHP
  SCE_HPHP_DEFAULT = 118
  SCE_HPHP_HSTRING = 119
  SCE_HPHP_SIMPLESTRING = 120
  SCE_HPHP_WORD = 121
  SCE_HPHP_NUMBER = 122
  SCE_HPHP_VARIABLE = 123
  SCE_HPHP_COMMENT = 124
  SCE_HPHP_COMMENTLINE = 125
  SCE_HPHP_HSTRING_VARIABLE = 126
  SCE_HPHP_OPERATOR = 127
  # Lexical states for SCLEX_PERL
  SCE_PL_DEFAULT = 0
  SCE_PL_ERROR = 1
  SCE_PL_COMMENTLINE = 2
  SCE_PL_POD = 3
  SCE_PL_NUMBER = 4
  SCE_PL_WORD = 5
  SCE_PL_STRING = 6
  SCE_PL_CHARACTER = 7
  SCE_PL_PUNCTUATION = 8
  SCE_PL_PREPROCESSOR = 9
  SCE_PL_OPERATOR = 10
  SCE_PL_IDENTIFIER = 11
  SCE_PL_SCALAR = 12
  SCE_PL_ARRAY = 13
  SCE_PL_HASH = 14
  SCE_PL_SYMBOLTABLE = 15
  SCE_PL_REGEX = 17
  SCE_PL_REGSUBST = 18
  SCE_PL_LONGQUOTE = 19
  SCE_PL_BACKTICKS = 20
  SCE_PL_DATASECTION = 21
  SCE_PL_HERE_DELIM = 22
  SCE_PL_HERE_Q = 23
  SCE_PL_HERE_QQ = 24
  SCE_PL_HERE_QX = 25
  SCE_PL_STRING_Q = 26
  SCE_PL_STRING_QQ = 27
  SCE_PL_STRING_QX = 28
  SCE_PL_STRING_QR = 29
  SCE_PL_STRING_QW = 30
  # Lexical states for SCLEX_LATEX
  SCE_L_DEFAULT = 0
  SCE_L_COMMAND = 1
  SCE_L_TAG = 2
  SCE_L_MATH = 3
  SCE_L_COMMENT = 4
  # Lexical states for SCLEX_LUA
  SCE_LUA_DEFAULT = 0
  SCE_LUA_COMMENT = 1
  SCE_LUA_COMMENTLINE = 2
  SCE_LUA_COMMENTDOC = 3
  SCE_LUA_NUMBER = 4
  SCE_LUA_WORD = 5
  SCE_LUA_STRING = 6
  SCE_LUA_CHARACTER = 7
  SCE_LUA_LITERALSTRING = 8
  SCE_LUA_PREPROCESSOR = 9
  SCE_LUA_OPERATOR = 10
  SCE_LUA_IDENTIFIER = 11
  SCE_LUA_STRINGEOL = 12
  # Lexical states for SCLEX_ERRORLIST
  SCE_ERR_DEFAULT = 0
  SCE_ERR_PYTHON = 1
  SCE_ERR_GCC = 2
  SCE_ERR_MS = 3
  SCE_ERR_CMD = 4
  SCE_ERR_BORLAND = 5
  SCE_ERR_PERL = 6
  SCE_ERR_NET = 7
  SCE_ERR_LUA = 8
  SCE_ERR_DIFF_CHANGED = 10
  SCE_ERR_DIFF_ADDITION = 11
  SCE_ERR_DIFF_DELETION = 12
  SCE_ERR_DIFF_MESSAGE = 13
  # Lexical states for SCLEX_BATCH
  SCE_BAT_DEFAULT = 0
  SCE_BAT_COMMENT = 1
  SCE_BAT_WORD = 2
  SCE_BAT_LABEL = 3
  SCE_BAT_HIDE = 4
  SCE_BAT_COMMAND = 5
  SCE_BAT_IDENTIFIER = 6
  SCE_BAT_OPERATOR = 7
  # Lexical states for SCLEX_MAKEFILE
  SCE_MAKE_DEFAULT = 0
  SCE_MAKE_COMMENT = 1
  SCE_MAKE_PREPROCESSOR = 2
  SCE_MAKE_IDENTIFIER = 3
  SCE_MAKE_OPERATOR = 4
  SCE_MAKE_TARGET = 5
  SCE_MAKE_IDEOL = 9
  # Lexical states for the SCLEX_CONF (Apache Configuration Files Lexer)
  SCE_CONF_DEFAULT = 0
  SCE_CONF_COMMENT = 1
  SCE_CONF_NUMBER = 2
  SCE_CONF_IDENTIFIER = 3
  SCE_CONF_EXTENSION = 4
  SCE_CONF_PARAMETER = 5
  SCE_CONF_STRING = 6
  SCE_CONF_OPERATOR = 7
  SCE_CONF_IP = 8
  SCE_CONF_DIRECTIVE = 9
  # Avenue
  SCE_AVE_DEFAULT = 0
  SCE_AVE_COMMENT = 1
  SCE_AVE_NUMBER = 2
  SCE_AVE_WORD = 3
  SCE_AVE_KEYWORD = 4
  SCE_AVE_STATEMENT = 5
  SCE_AVE_STRING = 6
  SCE_AVE_ENUM = 7
  SCE_AVE_STRINGEOL = 8
  SCE_AVE_IDENTIFIER = 9
  SCE_AVE_OPERATOR = 10
  # Lexical states for SCLEX_ADA
  SCE_ADA_DEFAULT = 0
  SCE_ADA_COMMENT = 1
  SCE_ADA_NUMBER = 2
  SCE_ADA_WORD = 3
  SCE_ADA_STRING = 4
  SCE_ADA_CHARACTER = 5
  SCE_ADA_OPERATOR = 6
  SCE_ADA_IDENTIFIER = 7
  SCE_ADA_STRINGEOL = 8
  # Lexical states for SCLEX_LISP
  SCE_LISP_DEFAULT = 0
  SCE_LISP_COMMENT = 1
  SCE_LISP_NUMBER = 2
  SCE_LISP_KEYWORD = 3
  SCE_LISP_STRING = 6
  SCE_LISP_STRINGEOL = 8
  SCE_LISP_IDENTIFIER = 9
  SCE_LISP_OPERATOR = 10
  # Lexical states for SCLEX_EIFFEL and SCLEX_EIFFELKW
  SCE_EIFFEL_DEFAULT = 0
  SCE_EIFFEL_COMMENTLINE = 1
  SCE_EIFFEL_NUMBER = 2
  SCE_EIFFEL_WORD = 3
  SCE_EIFFEL_STRING = 4
  SCE_EIFFEL_CHARACTER = 5
  SCE_EIFFEL_OPERATOR = 6
  SCE_EIFFEL_IDENTIFIER = 7
  SCE_EIFFEL_STRINGEOL = 8
  # Lexical states for the SCLEX_NNCRONTAB (nnCron crontab Lexer)
  SCE_NNCRONTAB_DEFAULT = 0
  SCE_NNCRONTAB_COMMENT = 1
  SCE_NNCRONTAB_TASK = 2
  SCE_NNCRONTAB_SECTION = 3
  SCE_NNCRONTAB_KEYWORD = 4
  SCE_NNCRONTAB_MODIFIER = 5
  SCE_NNCRONTAB_ASTERISK = 6
  SCE_NNCRONTAB_NUMBER = 7
  SCE_NNCRONTAB_STRING = 8
  SCE_NNCRONTAB_ENVIRONMENT = 9
  SCE_NNCRONTAB_IDENTIFIER = 10

  # Events

  # GTK+ Specific to work around focus and accelerator problems:


  # The old name for SCN_UPDATEUI
  SCN_CHECKBRACE = 2007
end
