diff -ur scintilla-ORIG\include\Scintilla.h scintilla\include\Scintilla.h --- scintilla-ORIG\include\Scintilla.h Wed Oct 27 10:45:10 2010 +++ scintilla\include\Scintilla.h Sat Oct 30 13:34:26 2010 @@ -124,6 +124,7 @@ #define SC_MARK_LEFTRECT 27 #define SC_MARK_AVAILABLE 28 #define SC_MARK_UNDERLINE 29 +#define SC_MARK_BACKFORE 3030 #define SC_MARK_CHARACTER 10000 #define SC_MARKNUM_FOLDEREND 25 #define SC_MARKNUM_FOLDEROPENMID 26 @@ -166,6 +167,7 @@ #define STYLE_CONTROLCHAR 36 #define STYLE_INDENTGUIDE 37 #define STYLE_CALLTIP 38 +#define STYLE_AUTOCOMPLETION 39 #define STYLE_LASTPREDEFINED 39 #define STYLE_MAX 255 #define SC_CHARSET_ANSI 0 diff -ur scintilla-ORIG\src\AutoComplete.cxx scintilla\src\AutoComplete.cxx --- scintilla-ORIG\src\AutoComplete.cxx Wed Oct 27 10:45:10 2010 +++ scintilla\src\AutoComplete.cxx Sat Oct 30 13:34:26 2010 @@ -132,7 +132,7 @@ char item[maxItemLen]; int start = 0; // lower bound of the api array block to search int end = lb->Length() - 1; // upper bound of the api array block to search - while ((start <= end) && (location == -1)) { // Binary searching loop + while (lenWord && (start <= end) && (location == -1)) { // Binary searching loop int pivot = (start + end) / 2; lb->GetValue(pivot, item, maxItemLen); int cond; diff -ur scintilla-ORIG\src\Editor.cxx scintilla\src\Editor.cxx --- scintilla-ORIG\src\Editor.cxx Wed Oct 27 10:45:10 2010 +++ scintilla\src\Editor.cxx Sat Oct 30 13:34:26 2010 @@ -114,6 +114,7 @@ printColourMode = SC_PRINT_NORMAL; printWrapState = eWrapWord; cursorMode = SC_CURSORNORMAL; + reverseArrowInMargin = false; controlCharSymbol = 0; /* Draw the control characters */ hasFocus = false; @@ -2619,7 +2620,8 @@ if (!overrideBackground) { int marks = pdoc->GetMark(line); for (int markBit = 0; (markBit < 32) && marks; markBit++) { - if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND) && + if ((marks & 1) && ((vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND) || + (vsDraw.markers[markBit].markType == SC_MARK_BACKFORE)) && (vsDraw.markers[markBit].alpha == SC_ALPHA_NOALPHA)) { background = vsDraw.markers[markBit].back.allocated; overrideBackground = true; @@ -2839,6 +2841,15 @@ if (vsDraw.hotspotForegroundSet) textFore = vsDraw.hotspotForeground.allocated; } + + marks = pdoc->GetMark(line); + for (markBit = 0; (markBit < 32) && marks; markBit++) { + if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_BACKFORE)) { + textFore = vsDraw.markers[markBit].fore.allocated; + } + marks >>= 1; + } + const int inSelection = hideSelection ? 0 : sel.CharacterInSelection(iDoc); if (inSelection && (vsDraw.selforeset)) { textFore = (inSelection == 1) ? vsDraw.selforeground.allocated : vsDraw.selAdditionalForeground.allocated; @@ -3050,7 +3061,8 @@ } marks = pdoc->GetMark(line); for (markBit = 0; (markBit < 32) && marks; markBit++) { - if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND)) { + if ((marks & 1) && ((vsDraw.markers[markBit].markType == SC_MARK_BACKGROUND) || + (vsDraw.markers[markBit].markType == SC_MARK_BACKFORE))) { SimpleAlphaRectangle(surface, rcSegment, vsDraw.markers[markBit].back.allocated, vsDraw.markers[markBit].alpha); } else if ((marks & 1) && (vsDraw.markers[markBit].markType == SC_MARK_UNDERLINE)) { PRectangle rcUnderline = rcSegment; @@ -6151,7 +6163,7 @@ } else { if (vs.fixedColumnWidth > 0) { // There is a margin if (PointInSelMargin(pt)) { - DisplayCursor(Window::cursorReverseArrow); + DisplayCursor(reverseArrowInMargin ? Window::cursorReverseArrow : Window::cursorArrow); SetHotSpotRange(NULL); return; // No need to test for selection } diff -ur scintilla-ORIG\src\Editor.h scintilla\src\Editor.h --- scintilla-ORIG\src\Editor.h Wed Oct 27 10:45:10 2010 +++ scintilla\src\Editor.h Sat Oct 30 13:34:26 2010 @@ -137,6 +137,7 @@ int printColourMode; int printWrapState; int cursorMode; + bool reverseArrowInMargin; int controlCharSymbol; bool hasFocus; diff -ur scintilla-ORIG\src\LineMarker.cxx scintilla\src\LineMarker.cxx --- scintilla-ORIG\src\LineMarker.cxx Wed Oct 27 10:45:10 2010 +++ scintilla\src\LineMarker.cxx Sat Oct 30 13:34:26 2010 @@ -155,7 +155,8 @@ surface->RectangleDraw(rcSmall, fore.allocated, back.allocated); } else if (markType == SC_MARK_EMPTY || markType == SC_MARK_BACKGROUND || - markType == SC_MARK_UNDERLINE || markType == SC_MARK_AVAILABLE) { + markType == SC_MARK_UNDERLINE || markType == SC_MARK_AVAILABLE || + markType == SC_MARK_BACKFORE) { // An invisible marker so don't draw anything } else if (markType == SC_MARK_VLINE) { diff -ur scintilla-ORIG\src\ScintillaBase.cxx scintilla\src\ScintillaBase.cxx --- scintilla-ORIG\src\ScintillaBase.cxx Wed Oct 27 10:45:10 2010 +++ scintilla\src\ScintillaBase.cxx Sat Oct 30 13:34:26 2010 @@ -220,7 +220,7 @@ } } ac.Start(wMain, idAutoComplete, sel.MainCaret(), PointMainCaret(), - lenEntered, vs.lineHeight, IsUnicodeMode()); + lenEntered, vs.styles[STYLE_AUTOCOMPLETION].lineHeight, IsUnicodeMode()); PRectangle rcClient = GetClientRectangle(); Point pt = LocationFromPosition(sel.MainCaret() - lenEntered); @@ -250,8 +250,8 @@ rcac.right = rcac.left + widthLB; rcac.bottom = Platform::Minimum(rcac.top + heightLB, rcPopupBounds.bottom); ac.lb->SetPositionRelative(rcac, wMain); - ac.lb->SetFont(vs.styles[STYLE_DEFAULT].font); - unsigned int aveCharWidth = vs.styles[STYLE_DEFAULT].aveCharWidth; + ac.lb->SetFont(vs.styles[STYLE_AUTOCOMPLETION].font); + unsigned int aveCharWidth = vs.styles[STYLE_AUTOCOMPLETION].aveCharWidth; ac.lb->SetAverageCharWidth(aveCharWidth); ac.lb->SetDoubleClickAction(AutoCompleteDoubleClick, this); @@ -275,9 +275,7 @@ rcList.bottom = rcList.top + heightAlloced; ac.lb->SetPositionRelative(rcList, wMain); ac.Show(true); - if (lenEntered != 0) { - AutoCompleteMoveToCurrentWord(); - } + AutoCompleteMoveToCurrentWord(); } void ScintillaBase::AutoCompleteCancel() { @@ -299,7 +297,10 @@ char wordCurrent[1000]; int i; int startWord = ac.posStart - ac.startLen; - for (i = startWord; i < sel.MainCaret() && i - startWord < 1000; i++) + int endWord = sel.MainCaret(); + //if (ac.selectRestOfWord) + endWord = pdoc->ExtendWordSelect(endWord, 1, true); + for (i = startWord; i < endWord && i - startWord < 1000; i++) wordCurrent[i - startWord] = pdoc->CharAt(i); wordCurrent[Platform::Minimum(i - startWord, 999)] = '\0'; ac.Select(wordCurrent); diff -ur scintilla-ORIG\src\ViewStyle.cxx scintilla\src\ViewStyle.cxx --- scintilla-ORIG\src\ViewStyle.cxx Wed Oct 27 10:45:10 2010 +++ scintilla\src\ViewStyle.cxx Sat Oct 30 13:34:26 2010 @@ -301,9 +301,9 @@ for (unsigned int i=0; i