= Using wxStyledTextCtrl =

== Documentation ==

First, here's where you will find documentation:

 * wxPython specific: http://www.yellowbrain.com/stc/index.html
 * another one: http://wxpython.org/docs/api/wx.stc-module.html
 * wxWidgets specific information: http://webpages.charter.net/edreamleo/out2.htm
 * Scintilla documentation (not directly useful, since it all is wrapped): http://scintilla.sourceforge.net/ScintillaDoc.html

Also look at [[wxStyledTextCtrl]].

== Styling ==
 * You must set a face property for other font-related properties to take effect. Without a face property, the style will inherit the font from the default property and size, bold, and italic will not be applied (underline, however, will). When you *do* set a face property, the other font properties are not inherited from default. So if you just want to add bold to a style, for example, you must also have face, italic, and size properties matching the default style.

Here is some misc. notes from RichardPrescott

 * Calls to `StartStyling` and `SetStyling` within an `EVT_STC_MODIFIED` when `SetLexer(wxSTC_LEX_CONTAINER)` doesn't work with wxPython 2.4 for Python 2.3.  Although within `EVT_STC_STYLENEEDED` (as it is supposed to be) it works just fine.

 * Events from `EVT_STC_STYLENEEDED` seem to provide ''only'' `GetPosition()` which correspond to the position at the end of the modification.  It is up to the code to find out what is already styled, what is not and what styled need to be refreshed.

Here's an example how to find the area to be styled:

{{{
#!python
def onStyleNeeded(self, e):
    start = self.GetEndStyled()    # this is the first character that needs styling
    end = e.GetPosition()          # this is the last character that needs styling
    self.StartStyling(start, 31)   # in this example, only style the text style bits
    for pos in range(start, end):  # in this example, simply loop over it..
        self.SetStyling(1, NUMBER) # ..and set it all to the NUMBER style
}}}

== Text modification ==

Here is some misc. notes from Francesco

* You can control what types of modifications will fire a EVT_STC_MODIFIED
event with the SetModEventMask command.

Not documented in Stc Documentation at: www.yellowbrain.com/stc/index.html:

* CopyRange(4, 8) #copies text from pos1 (4) until pos2 (8) into clipboard

* CopyText(4, "abcd") #copies text ("abcd") into clipboard

== X11 clipboard ==

--(There is a long standing bug in the wxPython code which prevents the X11 clipboard (middle mouse copy/paste) from working with STC controls. You can paste into them, but never can paste out of them. Even if you use wx.TheClipboard.UsePrimary() - it will have no effect at all in wxPython. C++ code using the STC is not affected by this and it works properly.)--

--(Normal copy/paste (using the second X11 clipboard) is not affected by this and works fine, i.e. you can use ctrl-C/ctrl-V to copy/paste between STC and other apps.)--

--( See here: http://sourceforge.net/tracker/index.php?func=detail&aid=657320&group_id=9863&atid=109863 )--

--(The above link is a bug filed by Robin Dunn himself several years ago.. and apparently still open. Oh well.)--

This is fixed as of (at least) 2.8.4.