Revision: 5005 http://geany.svn.sourceforge.net/geany/?rev=5005&view=rev Author: eht16 Date: 2010-06-06 18:34:26 +0000 (Sun, 06 Jun 2010)
Log Message: ----------- Update Scintilla to version 2.12.
Modified Paths: -------------- trunk/ChangeLog trunk/NEWS trunk/scintilla/CellBuffer.cxx trunk/scintilla/CellBuffer.h trunk/scintilla/CharacterSet.h trunk/scintilla/ContractionState.cxx trunk/scintilla/Document.cxx trunk/scintilla/Document.h trunk/scintilla/DocumentAccessor.cxx trunk/scintilla/DocumentAccessor.h trunk/scintilla/Editor.cxx trunk/scintilla/Editor.h trunk/scintilla/ExternalLexer.cxx trunk/scintilla/ExternalLexer.h trunk/scintilla/LexBash.cxx trunk/scintilla/LexCPP.cxx trunk/scintilla/LexCSS.cxx trunk/scintilla/LexCaml.cxx trunk/scintilla/LexHTML.cxx trunk/scintilla/LexPerl.cxx trunk/scintilla/LexPython.cxx trunk/scintilla/LexVHDL.cxx trunk/scintilla/LexVerilog.cxx trunk/scintilla/LineMarker.cxx trunk/scintilla/LineMarker.h trunk/scintilla/Partitioning.h trunk/scintilla/PerLine.cxx trunk/scintilla/PerLine.h trunk/scintilla/PlatGTK.cxx trunk/scintilla/PropSet.cxx trunk/scintilla/SVector.h trunk/scintilla/ScintillaBase.h trunk/scintilla/ScintillaGTK.cxx trunk/scintilla/Selection.cxx trunk/scintilla/Selection.h trunk/scintilla/SplitVector.h trunk/scintilla/Style.h trunk/scintilla/UniConversion.cxx trunk/scintilla/UniConversion.h trunk/scintilla/ViewStyle.cxx trunk/scintilla/WindowAccessor.cxx trunk/scintilla/XPM.cxx trunk/scintilla/XPM.h trunk/scintilla/include/Platform.h trunk/scintilla/include/SciLexer.h trunk/scintilla/include/Scintilla.iface trunk/scintilla/include/WindowAccessor.h trunk/src/plugindata.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/ChangeLog 2010-06-06 18:34:26 UTC (rev 5005) @@ -8,6 +8,8 @@ * src/symbols.c: Fix crash when trying to sort NULL pointers as tags in the Symbols list (closes #3011986). + * NEWS, scintilla/*, scintilla/include/*, src/plugindata.h: + Update Scintilla to version 2.12.
2010-06-04 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/NEWS =================================================================== --- trunk/NEWS 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/NEWS 2010-06-06 18:34:26 UTC (rev 5005) @@ -33,7 +33,7 @@ Arshinov).
Editor: - * Update Scintilla to 2.11. + * Update Scintilla to 2.12. * Add preference and support for virtual spaces. * Add word part autocompletion for the current selected item when pressing keybinding (default Tab) - Enter still completes normally.
Modified: trunk/scintilla/CellBuffer.cxx =================================================================== --- trunk/scintilla/CellBuffer.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/CellBuffer.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -44,9 +44,11 @@ starts.InsertText(line, delta); }
-void LineVector::InsertLine(int line, int position) { +void LineVector::InsertLine(int line, int position, bool lineStart) { starts.InsertPartition(line, position); if (perLine) { + if ((line > 0) && lineStart) + line--; perLine->InsertLine(line); } } @@ -339,7 +341,7 @@ return substance.ValueAt(position); }
-void CellBuffer::GetCharRange(char *buffer, int position, int lengthRetrieve) { +void CellBuffer::GetCharRange(char *buffer, int position, int lengthRetrieve) const { if (lengthRetrieve < 0) return; if (position < 0) @@ -355,7 +357,7 @@ } }
-char CellBuffer::StyleAt(int position) { +char CellBuffer::StyleAt(int position) const { return style.ValueAt(position); }
@@ -473,8 +475,8 @@
// Without undo
-void CellBuffer::InsertLine(int line, int position) { - lv.InsertLine(line, position); +void CellBuffer::InsertLine(int line, int position, bool lineStart) { + lv.InsertLine(line, position, lineStart); }
void CellBuffer::RemoveLine(int line) { @@ -490,27 +492,28 @@ style.InsertValue(position, insertLength, 0);
int lineInsert = lv.LineFromPosition(position) + 1; + bool atLineStart = lv.LineStart(lineInsert-1) == position; // Point all the lines after the insertion point further along in the buffer lv.InsertText(lineInsert-1, insertLength); char chPrev = substance.ValueAt(position - 1); char chAfter = substance.ValueAt(position + insertLength); if (chPrev == '\r' && chAfter == '\n') { // Splitting up a crlf pair at position - InsertLine(lineInsert, position); + InsertLine(lineInsert, position, false); lineInsert++; } char ch = ' '; for (int i = 0; i < insertLength; i++) { ch = s[i]; if (ch == '\r') { - InsertLine(lineInsert, (position + i) + 1); + InsertLine(lineInsert, (position + i) + 1, atLineStart); lineInsert++; } else if (ch == '\n') { if (chPrev == '\r') { // Patch up what was end of line lv.SetLineStart(lineInsert - 1, (position + i) + 1); } else { - InsertLine(lineInsert, (position + i) + 1); + InsertLine(lineInsert, (position + i) + 1, atLineStart); lineInsert++; } }
Modified: trunk/scintilla/CellBuffer.h =================================================================== --- trunk/scintilla/CellBuffer.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/CellBuffer.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -37,7 +37,7 @@ void SetPerLine(PerLine *pl);
void InsertText(int line, int delta); - void InsertLine(int line, int position); + void InsertLine(int line, int position, bool lineStart); void SetLineStart(int line, int position); void RemoveLine(int line); int Lines() const { @@ -149,8 +149,8 @@
/// Retrieving positions outside the range of the buffer works and returns 0 char CharAt(int position) const; - void GetCharRange(char *buffer, int position, int lengthRetrieve); - char StyleAt(int position); + void GetCharRange(char *buffer, int position, int lengthRetrieve) const; + char StyleAt(int position) const; const char *BufferPointer();
int Length() const; @@ -159,7 +159,7 @@ int Lines() const; int LineStart(int line) const; int LineFromPosition(int pos) const { return lv.LineFromPosition(pos); } - void InsertLine(int line, int position); + void InsertLine(int line, int position, bool lineStart); void RemoveLine(int line); const char *InsertString(int position, const char *s, int insertLength, bool &startSequence);
Modified: trunk/scintilla/CharacterSet.h =================================================================== --- trunk/scintilla/CharacterSet.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/CharacterSet.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -53,6 +53,7 @@ } bool Contains(int val) const { PLATFORM_ASSERT(val >= 0); + if (val < 0) return false; return (val < size) ? bset[val] : valueAfter; } };
Modified: trunk/scintilla/ContractionState.cxx =================================================================== --- trunk/scintilla/ContractionState.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/ContractionState.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -232,11 +232,11 @@
void ContractionState::Check() const { #ifdef CHECK_CORRECTNESS - for (int vline = 0;vline < LinesDisplayed(); vline++) { + for (int vline = 0; vline < LinesDisplayed(); vline++) { const int lineDoc = DocFromDisplay(vline); PLATFORM_ASSERT(GetVisible(lineDoc)); } - for (int lineDoc = 0;lineDoc < LinesInDoc(); lineDoc++) { + for (int lineDoc = 0; lineDoc < LinesInDoc(); lineDoc++) { const int displayThis = DisplayFromDoc(lineDoc); const int displayNext = DisplayFromDoc(lineDoc + 1); const int height = displayNext - displayThis;
Modified: trunk/scintilla/Document.cxx =================================================================== --- trunk/scintilla/Document.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/Document.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -258,7 +258,7 @@ return prev; }
-int Document::GetLevel(int line) { +int Document::GetLevel(int line) const { return static_cast<LineLevels *>(perLineData[ldLevels])->GetLevel(line); }
@@ -1367,7 +1367,7 @@ return statePrevious; }
-int Document::GetLineState(int line) { +int Document::GetLineState(int line) const { return static_cast<LineState *>(perLineData[ldState])->GetLineState(line); }
Modified: trunk/scintilla/Document.h =================================================================== --- trunk/scintilla/Document.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/Document.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -32,10 +32,10 @@
Range(Position pos=0) : start(pos), end(pos) { - }; + } Range(Position start_, Position end_) : start(start_), end(end_) { - }; + }
bool Valid() const { return (start != invalidPosition) && (end != invalidPosition); @@ -118,7 +118,7 @@ class CaseFolder { public: virtual ~CaseFolder() { - }; + } virtual size_t Fold(char *folded, size_t sizeFolded, const char *mixed, size_t lenMixed) = 0; };
@@ -243,10 +243,10 @@ void DelCharBack(int pos);
char CharAt(int position) { return cb.CharAt(position); } - void GetCharRange(char *buffer, int position, int lengthRetrieve) { + void GetCharRange(char *buffer, int position, int lengthRetrieve) const { cb.GetCharRange(buffer, position, lengthRetrieve); } - char StyleAt(int position) { return cb.StyleAt(position); } + char StyleAt(int position) const { return cb.StyleAt(position); } int GetMark(int line); int AddMark(int line, int markerNum); void AddMarkSet(int line, int valueSet); @@ -261,7 +261,7 @@ int VCHomePosition(int position) const;
int SetLevel(int line, int level); - int GetLevel(int line); + int GetLevel(int line) const; void ClearLevels(); int GetLastChild(int lineParent, int level=-1); int GetFoldParent(int line); @@ -294,7 +294,7 @@ void DecorationFillRange(int position, int value, int fillLength);
int SetLineState(int line, int state); - int GetLineState(int line); + int GetLineState(int line) const; int GetMaxLineState();
StyledText MarginStyledText(int line);
Modified: trunk/scintilla/DocumentAccessor.cxx =================================================================== --- trunk/scintilla/DocumentAccessor.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/DocumentAccessor.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -187,7 +187,7 @@ indent += SC_FOLDLEVELBASE; // if completely empty line or the start of a comment... if ((ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r') || - (pfnIsCommentLeader && (*pfnIsCommentLeader)(*this, pos, end-pos)) ) + (pfnIsCommentLeader && (*pfnIsCommentLeader)(*this, pos, end-pos))) return indent | SC_FOLDLEVELWHITEFLAG; else return indent;
Modified: trunk/scintilla/DocumentAccessor.h =================================================================== --- trunk/scintilla/DocumentAccessor.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/DocumentAccessor.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -38,9 +38,9 @@ void Fill(int position);
public: - DocumentAccessor(Document *pdoc_, PropertyGet &props_, WindowID id_=0) : + DocumentAccessor(Document *pdoc_, PropertyGet &props_, WindowID id_=0) : Accessor(), pdoc(pdoc_), props(props_), id(id_), - lenDoc(-1), validLen(0), chFlags(0), chWhile(0), + lenDoc(-1), validLen(0), chFlags(0), chWhile(0), startSeg(0), startPosStyling(0), mask(127) { // Initialize the mask to be big enough for any lexer. } @@ -54,8 +54,8 @@ void Flush(); int GetLineState(int line); int SetLineState(int line, int state); - int GetPropertyInt(const char *key, int defaultValue=0) { - return props.GetInt(key, defaultValue); + int GetPropertyInt(const char *key, int defaultValue=0) { + return props.GetInt(key, defaultValue); } char *GetProperties() { return props.ToString(); @@ -63,7 +63,7 @@ WindowID GetWindow() { return id; }
void StartAt(unsigned int start, char chMask=31); - void SetFlags(char chFlags_, char chWhile_) {chFlags = chFlags_; chWhile = chWhile_; }; + void SetFlags(char chFlags_, char chWhile_) {chFlags = chFlags_; chWhile = chWhile_; } unsigned int GetStartSegment() { return startSeg; } void StartSegment(unsigned int pos); void ColourTo(unsigned int pos, int chAttr);
Modified: trunk/scintilla/Editor.cxx =================================================================== --- trunk/scintilla/Editor.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/Editor.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -623,7 +623,7 @@ //wMain.InvalidateAll(); }
-void Editor::RedrawSelMargin(int line) { +void Editor::RedrawSelMargin(int line, bool allAfter) { if (!AbandonPaint()) { if (vs.maskInLine) { Redraw(); @@ -634,7 +634,8 @@ int position = pdoc->LineStart(line); PRectangle rcLine = RectangleFromRange(position, position); rcSelMargin.top = rcLine.top; - rcSelMargin.bottom = rcLine.bottom; + if (!allAfter) + rcSelMargin.bottom = rcLine.bottom; } wMain.InvalidateRectangle(rcSelMargin); } @@ -849,6 +850,9 @@ }
int Editor::MovePositionTo(SelectionPosition newPos, Selection::selTypes selt, bool ensureVisible) { + bool simpleCaret = (sel.Count() == 1) && sel.Empty(); + SelectionPosition spCaret = sel.Last(); + int delta = newPos.Position() - sel.MainCaret(); newPos = ClampPositionIntoDocument(newPos); newPos = MovePositionOutsideChar(newPos, delta); @@ -874,7 +878,14 @@ } ShowCaretAtCurrentPosition(); if (ensureVisible) { - EnsureCaretVisible(); + XYScrollPosition newXY = XYScrollToMakeVisible(true, true, true); + if (simpleCaret && (newXY.xOffset == xOffset)) { + // simple vertical scroll then invalidate + ScrollTo(newXY.topLine); + InvalidateSelection(SelectionRange(spCaret), true); + } else { + SetXYScroll(newXY); + } } return 0; } @@ -925,9 +936,11 @@ // Try to optimise small scrolls int linesToMove = topLine - topLineNew; SetTopLine(topLineNew); - ShowCaretAtCurrentPosition(); + // Optimize by styling the view as this will invalidate any needed area + // which could abort the initial paint if discovered later. + StyleToPositionInView(PositionAfterArea(GetClientRectangle())); +#ifndef UNDER_CE // Perform redraw rather than scroll if many lines would be redrawn anyway. -#ifndef UNDER_CE if ((abs(linesToMove) <= 10) && (paintState == notPainting)) { ScrollText(linesToMove); } else { @@ -1037,29 +1050,24 @@ 1 | 1 | 0 | 1 | No, kept out of UZ | moved by one position 1 | 1 | 1 | 1 | No, kept out of UZ | moved to put caret at 3UZ of the margin */ -void Editor::EnsureCaretVisible(bool useMargin, bool vert, bool horiz) { - //Platform::DebugPrintf("EnsureCaretVisible %d %s\n", xOffset, useMargin ? " margin" : " "); + +Editor::XYScrollPosition Editor::XYScrollToMakeVisible(const bool useMargin, const bool vert, const bool horiz) { PRectangle rcClient = GetTextRectangle(); - //int rcClientFullWidth = rcClient.Width(); - SelectionPosition posCaret = sel.RangeMain().caret; - if (posDrag.IsValid()) { - posCaret = posDrag; - } - Point pt = LocationFromPosition(posCaret); - Point ptBottomCaret = pt; - ptBottomCaret.y += vs.lineHeight - 1; - int lineCaret = DisplayFromPosition(posCaret.Position()); - bool bSlop, bStrict, bJump, bEven; + const SelectionPosition posCaret = posDrag.IsValid() ? posDrag : sel.RangeMain().caret; + const Point pt = LocationFromPosition(posCaret); + const Point ptBottomCaret(pt.x, pt.y + vs.lineHeight - 1); + const int lineCaret = DisplayFromPosition(posCaret.Position());
+ XYScrollPosition newXY(xOffset, topLine); + // Vertical positioning if (vert && (pt.y < rcClient.top || ptBottomCaret.y > rcClient.bottom || (caretYPolicy & CARET_STRICT) != 0)) { - int linesOnScreen = LinesOnScreen(); - int halfScreen = Platform::Maximum(linesOnScreen - 1, 2) / 2; - int newTopLine = topLine; - bSlop = (caretYPolicy & CARET_SLOP) != 0; - bStrict = (caretYPolicy & CARET_STRICT) != 0; - bJump = (caretYPolicy & CARET_JUMPS) != 0; - bEven = (caretYPolicy & CARET_EVEN) != 0; + const int linesOnScreen = LinesOnScreen(); + const int halfScreen = Platform::Maximum(linesOnScreen - 1, 2) / 2; + const bool bSlop = (caretYPolicy & CARET_SLOP) != 0; + const bool bStrict = (caretYPolicy & CARET_STRICT) != 0; + const bool bJump = (caretYPolicy & CARET_JUMPS) != 0; + const bool bEven = (caretYPolicy & CARET_EVEN) != 0;
// It should be possible to scroll the window to show the caret, // but this fails to remove the caret on GTK+ @@ -1092,10 +1100,10 @@ } if (lineCaret < topLine + yMarginT) { // Caret goes too high - newTopLine = lineCaret - yMoveT; + newXY.topLine = lineCaret - yMoveT; } else if (lineCaret > topLine + linesOnScreen - 1 - yMarginB) { // Caret goes too low - newTopLine = lineCaret - linesOnScreen + 1 + yMoveB; + newXY.topLine = lineCaret - linesOnScreen + 1 + yMoveB; } } else { // Not strict yMoveT = bJump ? caretYSlop * 3 : caretYSlop; @@ -1107,10 +1115,10 @@ } if (lineCaret < topLine) { // Caret goes too high - newTopLine = lineCaret - yMoveT; + newXY.topLine = lineCaret - yMoveT; } else if (lineCaret > topLine + linesOnScreen - 1) { // Caret goes too low - newTopLine = lineCaret - linesOnScreen + 1 + yMoveB; + newXY.topLine = lineCaret - linesOnScreen + 1 + yMoveB; } } } else { // No slop @@ -1118,41 +1126,35 @@ // Minimal move if (lineCaret < topLine) { // Caret goes too high - newTopLine = lineCaret; + newXY.topLine = lineCaret; } else if (lineCaret > topLine + linesOnScreen - 1) { // Caret goes too low if (bEven) { - newTopLine = lineCaret - linesOnScreen + 1; + newXY.topLine = lineCaret - linesOnScreen + 1; } else { - newTopLine = lineCaret; + newXY.topLine = lineCaret; } } } else { // Strict or going out of display if (bEven) { // Always center caret - newTopLine = lineCaret - halfScreen; + newXY.topLine = lineCaret - halfScreen; } else { // Always put caret on top of display - newTopLine = lineCaret; + newXY.topLine = lineCaret; } } } - newTopLine = Platform::Clamp(newTopLine, 0, MaxScrollPos()); - if (newTopLine != topLine) { - Redraw(); - SetTopLine(newTopLine); - SetVerticalScrollPos(); - } + newXY.topLine = Platform::Clamp(newXY.topLine, 0, MaxScrollPos()); }
// Horizontal positioning if (horiz && (wrapState == eWrapNone)) { - int halfScreen = Platform::Maximum(rcClient.Width() - 4, 4) / 2; - int xOffsetNew = xOffset; - bSlop = (caretXPolicy & CARET_SLOP) != 0; - bStrict = (caretXPolicy & CARET_STRICT) != 0; - bJump = (caretXPolicy & CARET_JUMPS) != 0; - bEven = (caretXPolicy & CARET_EVEN) != 0; + const int halfScreen = Platform::Maximum(rcClient.Width() - 4, 4) / 2; + const bool bSlop = (caretXPolicy & CARET_SLOP) != 0; + const bool bStrict = (caretXPolicy & CARET_STRICT) != 0; + const bool bJump = (caretXPolicy & CARET_JUMPS) != 0; + const bool bEven = (caretXPolicy & CARET_EVEN) != 0;
if (bSlop) { // A margin is defined int xMoveL, xMoveR; @@ -1181,18 +1183,18 @@ if (pt.x < rcClient.left + xMarginL) { // Caret is on the left of the display if (bJump && bEven) { - xOffsetNew -= xMoveL; + newXY.xOffset -= xMoveL; } else { // Move just enough to allow to display the caret - xOffsetNew -= (rcClient.left + xMarginL) - pt.x; + newXY.xOffset -= (rcClient.left + xMarginL) - pt.x; } } else if (pt.x >= rcClient.right - xMarginR) { // Caret is on the right of the display if (bJump && bEven) { - xOffsetNew += xMoveR; + newXY.xOffset += xMoveR; } else { // Move just enough to allow to display the caret - xOffsetNew += pt.x - (rcClient.right - xMarginR) + 1; + newXY.xOffset += pt.x - (rcClient.right - xMarginR) + 1; } } } else { // Not strict @@ -1205,10 +1207,10 @@ } if (pt.x < rcClient.left) { // Caret is on the left of the display - xOffsetNew -= xMoveL; + newXY.xOffset -= xMoveL; } else if (pt.x >= rcClient.right) { // Caret is on the right of the display - xOffsetNew += xMoveR; + newXY.xOffset += xMoveR; } } } else { // No slop @@ -1217,56 +1219,71 @@ // Strict or going out of display if (bEven) { // Center caret - xOffsetNew += pt.x - rcClient.left - halfScreen; + newXY.xOffset += pt.x - rcClient.left - halfScreen; } else { // Put caret on right - xOffsetNew += pt.x - rcClient.right + 1; + newXY.xOffset += pt.x - rcClient.right + 1; } } else { // Move just enough to allow to display the caret if (pt.x < rcClient.left) { // Caret is on the left of the display if (bEven) { - xOffsetNew -= rcClient.left - pt.x; + newXY.xOffset -= rcClient.left - pt.x; } else { - xOffsetNew += pt.x - rcClient.right + 1; + newXY.xOffset += pt.x - rcClient.right + 1; } } else if (pt.x >= rcClient.right) { // Caret is on the right of the display - xOffsetNew += pt.x - rcClient.right + 1; + newXY.xOffset += pt.x - rcClient.right + 1; } } } // In case of a jump (find result) largely out of display, adjust the offset to display the caret - if (pt.x + xOffset < rcClient.left + xOffsetNew) { - xOffsetNew = pt.x + xOffset - rcClient.left; - } else if (pt.x + xOffset >= rcClient.right + xOffsetNew) { - xOffsetNew = pt.x + xOffset - rcClient.right + 1; + if (pt.x + xOffset < rcClient.left + newXY.xOffset) { + newXY.xOffset = pt.x + xOffset - rcClient.left; + } else if (pt.x + xOffset >= rcClient.right + newXY.xOffset) { + newXY.xOffset = pt.x + xOffset - rcClient.right + 1; if (vs.caretStyle == CARETSTYLE_BLOCK) { // Ensure we can see a good portion of the block caret - xOffsetNew += vs.aveCharWidth; + newXY.xOffset += vs.aveCharWidth; } } - if (xOffsetNew < 0) { - xOffsetNew = 0; + if (newXY.xOffset < 0) { + newXY.xOffset = 0; } - if (xOffset != xOffsetNew) { - xOffset = xOffsetNew; - if (xOffsetNew > 0) { + } + + return newXY; +} + +void Editor::SetXYScroll(XYScrollPosition newXY) { + if ((newXY.topLine != topLine) || (newXY.xOffset != xOffset)) { + if (newXY.topLine != topLine) { + SetTopLine(newXY.topLine); + SetVerticalScrollPos(); + } + if (newXY.xOffset != xOffset) { + xOffset = newXY.xOffset; + if (newXY.xOffset > 0) { PRectangle rcText = GetTextRectangle(); if (horizontalScrollBarVisible && - rcText.Width() + xOffset > scrollWidth) { + rcText.Width() + xOffset > scrollWidth) { scrollWidth = xOffset + rcText.Width(); SetScrollBars(); } } SetHorizontalScrollPos(); - Redraw(); } + Redraw(); + UpdateSystemCaret(); } - UpdateSystemCaret(); }
+void Editor::EnsureCaretVisible(bool useMargin, bool vert, bool horiz) { + SetXYScroll(XYScrollToMakeVisible(useMargin, vert, horiz)); +} + void Editor::ShowCaretAtCurrentPosition() { if (hasFocus) { caret.active = true; @@ -1850,7 +1867,7 @@ return true; if (GoodTrailByte(us[1]) && GoodTrailByte(us[2]) && GoodTrailByte(us[3])) { if (*us == 0xf4) { - // Chcek if encoding a value beyond the last Unicode character 10FFFF + // Check if encoding a value beyond the last Unicode character 10FFFF if (us[1] > 0x8f) { return true; } else if (us[1] == 0x8f) { @@ -3229,6 +3246,8 @@ //Platform::DebugPrintf("Paint:%1d (%3d,%3d) ... (%3d,%3d)\n", // paintingAllText, rcArea.left, rcArea.top, rcArea.right, rcArea.bottom);
+ StyleToPositionInView(PositionAfterArea(rcArea)); + pixmapLine->Release(); RefreshStyleData(); RefreshPixMaps(surfaceWindow); @@ -3241,13 +3260,6 @@ pixmapLine->SetPalette(&palette, !hasFocus);
int screenLinePaintFirst = rcArea.top / vs.lineHeight; - // The area to be painted plus one extra line is styled. - // The extra line is to determine when a style change, such as starting a comment flows on to other lines. - int lineStyleLast = topLine + (rcArea.bottom - 1) / vs.lineHeight + 1; - //Platform::DebugPrintf("Paint lines = %d .. %d\n", topLine + screenLinePaintFirst, lineStyleLast); - int endPosPaint = pdoc->Length(); - if (lineStyleLast < cs.LinesDisplayed()) - endPosPaint = pdoc->LineStart(cs.DocFromDisplay(lineStyleLast) + 1);
int xStart = vs.fixedColumnWidth - xOffset; int ypos = 0; @@ -3255,8 +3267,6 @@ ypos += screenLinePaintFirst * vs.lineHeight; int yposScreen = screenLinePaintFirst * vs.lineHeight;
- // Ensure we are styled as far as we are painting. - pdoc->EnsureStyledTo(endPosPaint); bool paintAbandonedByStyling = paintState == paintAbandoned; if (needUpdateUI) { // Deselect palette by selecting a temporary palette @@ -3288,12 +3298,14 @@ } PLATFORM_ASSERT(pixmapSelPattern->Initialised());
- PaintSelMargin(surfaceWindow, rcArea); + if (paintState != paintAbandoned) { + PaintSelMargin(surfaceWindow, rcArea);
- PRectangle rcRightMargin = rcClient; - rcRightMargin.left = rcRightMargin.right - vs.rightMarginWidth; - if (rcArea.Intersects(rcRightMargin)) { - surfaceWindow->FillRectangle(rcRightMargin, vs.styles[STYLE_DEFAULT].back.allocated); + PRectangle rcRightMargin = rcClient; + rcRightMargin.left = rcRightMargin.right - vs.rightMarginWidth; + if (rcArea.Intersects(rcRightMargin)) { + surfaceWindow->FillRectangle(rcRightMargin, vs.styles[STYLE_DEFAULT].back.allocated); + } }
if (paintState == paintAbandoned) { @@ -4346,12 +4358,14 @@ // TODO: could invalidate from mh.startModification to end of screen //InvalidateRange(mh.position, mh.position + mh.length); if (paintState == notPainting && !CanDeferToLastStep(mh)) { + QueueStyling(pdoc->Length()); Redraw(); } } else { //Platform::DebugPrintf("** %x Line Changed %d .. %d\n", this, // mh.position, mh.position + mh.length); if (paintState == notPainting && mh.length && !CanEliminate(mh)) { + QueueStyling(mh.position + mh.length); InvalidateRange(mh.position, mh.position + mh.length); } } @@ -4365,7 +4379,7 @@ if ((paintState == notPainting) || !PaintContainsMargin()) { if (mh.modificationType & SC_MOD_CHANGEFOLD) { // Fold changes can affect the drawing of following lines so redraw whole margin - RedrawSelMargin(); + RedrawSelMargin(mh.line-1, true); } else { RedrawSelMargin(mh.line); } @@ -6199,6 +6213,48 @@ } }
+int Editor::PositionAfterArea(PRectangle rcArea) { + // The start of the document line after the display line after the area + // This often means that the line after a modification is restyled which helps + // detect multiline comment additions and heals single line comments + int lineAfter = topLine + (rcArea.bottom - 1) / vs.lineHeight + 1; + if (lineAfter < cs.LinesDisplayed()) + return pdoc->LineStart(cs.DocFromDisplay(lineAfter) + 1); + else + return pdoc->Length(); +} + +// Style to a position within the view. If this causes a change at end of last line then +// affects later lines so style all the viewed text. +void Editor::StyleToPositionInView(Position pos) { + int endWindow = PositionAfterArea(GetClientRectangle()); + if (pos > endWindow) + pos = endWindow; + int styleAtEnd = pdoc->StyleAt(pos-1); + pdoc->EnsureStyledTo(pos); + if ((endWindow > pos) && (styleAtEnd != pdoc->StyleAt(pos-1))) { + // Style at end of line changed so is multi-line change like starting a comment + // so require rest of window to be styled. + pdoc->EnsureStyledTo(endWindow); + } +} + +void Editor::IdleStyling() { + // Style the line after the modification as this allows modifications that change just the + // line of the modification to heal instead of propagating to the rest of the window. + StyleToPositionInView(pdoc->LineStart(pdoc->LineFromPosition(styleNeeded.upTo) + 2)); + + if (needUpdateUI) { + NotifyUpdateUI(); + needUpdateUI = false; + } + styleNeeded.Reset(); +} + +void Editor::QueueStyling(int upTo) { + styleNeeded.NeedUpTo(upTo); +} + bool Editor::PaintContains(PRectangle rc) { if (rc.Empty()) { return true;
Modified: trunk/scintilla/Editor.h =================================================================== --- trunk/scintilla/Editor.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/Editor.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -46,6 +46,26 @@ };
/** + * When platform has a way to generate an event before painting, + * accumulate needed styling range in StyleNeeded to avoid unnecessary work. + */ +class StyleNeeded { +public: + bool active; + Position upTo; + + StyleNeeded() : active(false), upTo(0) {} + void Reset() { + active = false; + upTo = 0; + } + void NeedUpTo(Position pos) { + if (upTo < pos) + upTo = pos; + } +}; + +/** * Hold a piece of text selected for copying or dragging. * The text is expected to hold a terminating '\0' and this is counted in len. */ @@ -197,7 +217,8 @@ enum { notPainting, painting, paintAbandoned } paintState; PRectangle rcPaint; bool paintingAllText; - + StyleNeeded styleNeeded; + int modEventMask;
SelectionText drag; @@ -272,7 +293,7 @@ bool AbandonPaint(); void RedrawRect(PRectangle rc); void Redraw(); - void RedrawSelMargin(int line=-1); + void RedrawSelMargin(int line=-1, bool allAfter=false); PRectangle RectangleFromRange(int start, int end); void InvalidateRange(int start, int end);
@@ -308,6 +329,14 @@ void HorizontalScrollTo(int xPos); void MoveCaretInsideView(bool ensureVisible=true); int DisplayFromPosition(int pos); + + struct XYScrollPosition { + int xOffset; + int topLine; + XYScrollPosition(int xOffset_, int topLine_) : xOffset(xOffset_), topLine(topLine_) {} + }; + XYScrollPosition XYScrollToMakeVisible(const bool useMargin, const bool vert, const bool horiz); + void SetXYScroll(XYScrollPosition newXY); void EnsureCaretVisible(bool useMargin=true, bool vert=true, bool horiz=true); void ShowCaretAtCurrentPosition(); void DropCaret(); @@ -460,6 +489,11 @@ virtual bool HaveMouseCapture() = 0; void SetFocusState(bool focusState);
+ int PositionAfterArea(PRectangle rcArea); + void StyleToPositionInView(Position pos); + void IdleStyling(); + virtual void QueueStyling(int upTo); + virtual bool PaintContains(PRectangle rc); bool PaintContainsMargin(); void CheckForChangeOutsidePaint(Range r);
Modified: trunk/scintilla/ExternalLexer.cxx =================================================================== --- trunk/scintilla/ExternalLexer.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/ExternalLexer.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -40,7 +40,7 @@ while (val[dim]) dim++; char **wls = new char * [dim + 1]; - for (int i = 0;i < dim;i++) { + for (int i = 0; i < dim; i++) { std::string words; words = ""; for (int n = 0; n < val[i]->len; n++) { @@ -114,7 +114,7 @@ // //------------------------------------------
-LexerLibrary::LexerLibrary(const char* ModuleName) { +LexerLibrary::LexerLibrary(const char *ModuleName) { // Initialise some members... first = NULL; last = NULL; @@ -195,18 +195,15 @@
/// Return the single LexerManager instance... LexerManager *LexerManager::GetInstance() { - if(!theInstance) + if (!theInstance) theInstance = new LexerManager; return theInstance; }
/// Delete any LexerManager instance... -void LexerManager::DeleteInstance() -{ - if(theInstance) { - delete theInstance; - theInstance = NULL; - } +void LexerManager::DeleteInstance() { + delete theInstance; + theInstance = NULL; }
/// protected constructor - this is a singleton... @@ -219,13 +216,15 @@ Clear(); }
-void LexerManager::Load(const char* path) -{ +void LexerManager::Load(const char *path) { LoadLexerLibrary(path); }
-void LexerManager::LoadLexerLibrary(const char* module) -{ +void LexerManager::LoadLexerLibrary(const char *module) { + for (LexerLibrary *ll = first; ll; ll= ll->next) { + if (strcmp(ll->m_sModuleName.c_str(), module) == 0) + return; + } LexerLibrary *lib = new LexerLibrary(module); if (NULL != first) { last->next = lib; @@ -236,8 +235,7 @@ } }
-void LexerManager::Clear() -{ +void LexerManager::Clear() { if (NULL != first) { LexerLibrary *cur = first; LexerLibrary *next; @@ -257,8 +255,7 @@ // //------------------------------------------
-LMMinder::~LMMinder() -{ +LMMinder::~LMMinder() { LexerManager::DeleteInstance(); }
Modified: trunk/scintilla/ExternalLexer.h =================================================================== --- trunk/scintilla/ExternalLexer.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/ExternalLexer.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -23,7 +23,7 @@ char *words[], WindowID window, char *props); typedef void (EXT_LEXER_DECL *ExtFoldFunction)(unsigned int lexer, unsigned int startPos, int length, int initStyle, char *words[], WindowID window, char *props); -typedef void* (EXT_LEXER_DECL *GetLexerFunction)(unsigned int Index); +typedef void*(EXT_LEXER_DECL *GetLexerFunction)(unsigned int Index); typedef int (EXT_LEXER_DECL *GetLexerCountFn)(); typedef void (EXT_LEXER_DECL *GetLexerNameFn)(unsigned int Index, char *name, int buflength);
@@ -37,12 +37,12 @@ int externalLanguage; char name[100]; public: - ExternalLexerModule(int language_, LexerFunction fnLexer_, - const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_){ + ExternalLexerModule(int language_, LexerFunction fnLexer_, + const char *languageName_=0, LexerFunction fnFolder_=0) : LexerModule(language_, fnLexer_, 0, fnFolder_) { strncpy(name, languageName_, sizeof(name)); name[sizeof(name)-1] = '\0'; languageName = name; - }; + } virtual void Lex(unsigned int startPos, int lengthDoc, int initStyle, WordList *keywordlists[], Accessor &styler) const; virtual void Fold(unsigned int startPos, int lengthDoc, int initStyle, @@ -64,10 +64,10 @@ LexerMinder *last;
public: - LexerLibrary(const char* ModuleName); + LexerLibrary(const char *ModuleName); ~LexerLibrary(); void Release(); - + LexerLibrary *next; std::string m_sModuleName; }; @@ -76,18 +76,18 @@ class LexerManager { public: ~LexerManager(); - + static LexerManager *GetInstance(); static void DeleteInstance(); - - void Load(const char* path); + + void Load(const char *path); void Clear();
private: LexerManager(); static LexerManager *theInstance;
- void LoadLexerLibrary(const char* module); + void LoadLexerLibrary(const char *module); LexerLibrary *first; LexerLibrary *last; };
Modified: trunk/scintilla/LexBash.cxx =================================================================== --- trunk/scintilla/LexBash.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexBash.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -248,14 +248,8 @@ sc.SetState(SCE_SH_DEFAULT); break; case SCE_SH_COMMENTLINE: - if (sc.ch == '\' && (sc.chNext == '\r' || sc.chNext == '\n')) { - // comment continuation - sc.Forward(); - if (sc.ch == '\r' && sc.chNext == '\n') { - sc.Forward(); - } - } else if (sc.atLineEnd) { - sc.ForwardSetState(SCE_SH_DEFAULT); + if (sc.atLineEnd && sc.chPrev != '\') { + sc.SetState(SCE_SH_DEFAULT); } break; case SCE_SH_HERE_DELIM: @@ -294,23 +288,14 @@ HereDoc.State = 1; } } else if (HereDoc.State == 1) { // collect the delimiter - if (HereDoc.Quoted) { // a quoted here-doc delimiter - if (sc.ch == HereDoc.Quote) { // closing quote => end of delimiter - sc.ForwardSetState(SCE_SH_DEFAULT); - } else { - if (sc.ch == '\' && sc.chNext == HereDoc.Quote) { // escaped quote - sc.Forward(); - } - HereDoc.Append(sc.ch); - } - } else { // an unquoted here-doc delimiter - if (setHereDoc2.Contains(sc.ch)) { - HereDoc.Append(sc.ch); - } else if (sc.ch == '\') { - // skip escape prefix - } else { - sc.SetState(SCE_SH_DEFAULT); - } + if (setHereDoc2.Contains(sc.ch) || sc.chPrev == '\') { + HereDoc.Append(sc.ch); + } else if (HereDoc.Quoted && sc.ch == HereDoc.Quote) { // closing quote => end of delimiter + sc.ForwardSetState(SCE_SH_DEFAULT); + } else if (sc.ch == '\') { + // skip escape prefix + } else { + sc.SetState(SCE_SH_DEFAULT); } if (HereDoc.DelimiterLength >= HERE_DELIM_MAX - 1) { // force blowup sc.SetState(SCE_SH_ERROR);
Modified: trunk/scintilla/LexCPP.cxx =================================================================== --- trunk/scintilla/LexCPP.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexCPP.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -59,8 +59,8 @@ WordList &keywords4 = *keywordlists[3];
// property styling.within.preprocessor - // For C++ code, determines whether all preprocessor code is styled in the preprocessor style (0, the default) - // or only from the initial # to the end of the command word(1). + // For C++ code, determines whether all preprocessor code is styled in the preprocessor style (0, the default) + // or only from the initial # to the end of the command word(1). bool stylingWithinPreprocessor = styler.GetPropertyInt("styling.within.preprocessor") != 0;
CharacterSet setOKBeforeRE(CharacterSet::setNone, "([{=,:;!%^&*|?~+-"); @@ -72,7 +72,7 @@ CharacterSet setWord(CharacterSet::setAlphaNum, "._", 0x80, true);
// property lexer.cpp.allow.dollars - // Set to 0 to disallow the '$' character in identifiers with the cpp lexer. + // Set to 0 to disallow the '$' character in identifiers with the cpp lexer. if (styler.GetPropertyInt("lexer.cpp.allow.dollars", 1) != 0) { setWordStart.Add('$'); setWord.Add('$'); @@ -379,20 +379,20 @@ WordList *[], Accessor &styler) {
// property fold.comment - // This option enables folding multi-line comments and explicit fold points when using the C++ lexer. - // Explicit fold points allows adding extra folding by placing a //{ comment at the start and a //} - // at the end of a section that should fold. + // This option enables folding multi-line comments and explicit fold points when using the C++ lexer. + // Explicit fold points allows adding extra folding by placing a //{ comment at the start and a //} + // at the end of a section that should fold. bool foldComment = styler.GetPropertyInt("fold.comment") != 0;
// property fold.preprocessor - // This option enables folding preprocessor directives when using the C++ lexer. - // Includes C#'s explicit #region and #endregion folding directives. + // This option enables folding preprocessor directives when using the C++ lexer. + // Includes C#'s explicit #region and #endregion folding directives. bool foldPreprocessor = styler.GetPropertyInt("fold.preprocessor") != 0;
bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;
- // property fold.at.else - // This option enables C++ folding on a "} else {" line of an if statement. + // property fold.at.else + // This option enables C++ folding on a "} else {" line of an if statement. bool foldAtElse = styler.GetPropertyInt("fold.at.else", 0) != 0;
unsigned int endPos = startPos + length; @@ -483,14 +483,14 @@ } }
-static const char * const cppWordLists[] = { +static const char *const cppWordLists[] = { "Primary keywords and identifiers", "Secondary keywords and identifiers", "Documentation comment keywords", "Unused", "Global classes and typedefs", 0, - }; +};
static void ColouriseCppDocSensitive(unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor &styler) {
Modified: trunk/scintilla/LexCSS.cxx =================================================================== --- trunk/scintilla/LexCSS.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexCSS.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -62,6 +62,7 @@
int lastState = -1; // before operator int lastStateC = -1; // before comment + int lastStateS = -1; // before single-quoted/double-quoted string int op = ' '; // last operator int opPrev = ' '; // last operator
@@ -105,7 +106,7 @@ i--; if ((sc.currentPos - i) % 2 == 1) continue; - sc.ForwardSetState(SCE_CSS_VALUE); + sc.ForwardSetState(lastStateS); }
if (sc.state == SCE_CSS_OPERATOR) { @@ -140,9 +141,9 @@ sc.SetState(SCE_CSS_TAG); break; case '{': - if (lastState == SCE_CSS_DIRECTIVE) + if (lastState == SCE_CSS_MEDIA) sc.SetState(SCE_CSS_DEFAULT); - else if (lastState == SCE_CSS_TAG) + else if (lastState == SCE_CSS_TAG || lastState == SCE_CSS_DIRECTIVE) sc.SetState(SCE_CSS_IDENTIFIER); break; case '}': @@ -219,7 +220,8 @@ sc.state == SCE_CSS_PSEUDOCLASS || sc.state == SCE_CSS_PSEUDOELEMENT || sc.state == SCE_CSS_EXTENDED_PSEUDOCLASS || sc.state == SCE_CSS_EXTENDED_PSEUDOELEMENT || sc.state == SCE_CSS_UNKNOWN_PSEUDOCLASS || - sc.state == SCE_CSS_IMPORTANT + sc.state == SCE_CSS_IMPORTANT || + sc.state == SCE_CSS_DIRECTIVE )) { char s[100]; sc.GetCurrentLowered(s, sizeof(s)); @@ -263,6 +265,10 @@ if (strcmp(s2, "important") != 0) sc.ChangeState(SCE_CSS_VALUE); break; + case SCE_CSS_DIRECTIVE: + if (op == '@' && strcmp(s2, "media") == 0) + sc.ChangeState(SCE_CSS_MEDIA); + break; } }
@@ -280,12 +286,14 @@ lastStateC = sc.state; sc.SetState(SCE_CSS_COMMENT); sc.Forward(); - } else if (sc.state == SCE_CSS_VALUE && (sc.ch == '"' || sc.ch == ''')) { + } else if ((sc.state == SCE_CSS_VALUE || sc.state == SCE_CSS_ATTRIBUTE) + && (sc.ch == '"' || sc.ch == ''')) { + lastStateS = sc.state; sc.SetState((sc.ch == '"' ? SCE_CSS_DOUBLESTRING : SCE_CSS_SINGLESTRING)); } else if (IsCssOperator(sc.ch) && (sc.state != SCE_CSS_ATTRIBUTE || sc.ch == ']') && (sc.state != SCE_CSS_VALUE || sc.ch == ';' || sc.ch == '}' || sc.ch == '!') - && (sc.state != SCE_CSS_DIRECTIVE || sc.ch == ';' || sc.ch == '{') + && ((sc.state != SCE_CSS_DIRECTIVE && sc.state != SCE_CSS_MEDIA) || sc.ch == ';' || sc.ch == '{') ) { if (sc.state != SCE_CSS_OPERATOR) lastState = sc.state;
Modified: trunk/scintilla/LexCaml.cxx =================================================================== --- trunk/scintilla/LexCaml.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexCaml.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -430,13 +430,11 @@ static #endif /* BUILD_AS_EXTERNAL_LEXER */ void FoldCamlDoc( - unsigned int startPos, int length, - int initStyle, - WordList *keywordlists[], - Accessor &styler) + unsigned int, int, + int, + WordList *[], + Accessor &) { - // below useless evaluation(s) to supress "not used" warnings - startPos || length || initStyle || keywordlists[0] || styler.Length(); }
static const char * const camlWordListDesc[] = {
Modified: trunk/scintilla/LexHTML.cxx =================================================================== --- trunk/scintilla/LexHTML.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexHTML.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -587,8 +587,6 @@ styler.StartAt(startPos, static_cast<char>(STYLE_MAX)); char prevWord[200]; prevWord[0] = '\0'; - char nextWord[200]; - nextWord[0] = '\0'; char phpStringDelimiter[200]; // PHP is not limited in length, we are phpStringDelimiter[0] = '\0'; int StateToPrint = initStyle; @@ -644,6 +642,7 @@ if (inScriptType == eNonHtmlScript && state == SCE_H_COMMENT) { scriptLanguage = eScriptComment; } + script_type beforeLanguage = ScriptOfState(beforePreProc);
// property fold.html // Folding is turned on or off for HTML and XML files with this option. @@ -683,7 +682,7 @@ const bool isMako = styler.GetPropertyInt("lexer.html.mako", 0) != 0;
// property lexer.html.django - // Set to 1 to enable the django template language. + // Set to 1 to enable the django template language. const bool isDjango = styler.GetPropertyInt("lexer.html.django", 0) != 0;
const CharacterSet setHTMLWord(CharacterSet::setAlphaNum, ".-_:!#", 0x80, true); @@ -950,7 +949,7 @@ }
// handle the start Django template code - else if (isDjango && scriptLanguage == eScriptNone && (ch == '{' && (chNext == '%' || chNext == '{'))) { + else if (isDjango && scriptLanguage != eScriptPython && (ch == '{' && (chNext == '%' || chNext == '{'))) { if (chNext == '%') strcpy(djangoBlockType, "%"); else @@ -965,6 +964,7 @@ i += 1; visibleChars += 1; state = SCE_HP_START; + beforeLanguage = scriptLanguage; scriptLanguage = eScriptPython; styler.ColourTo(i, SCE_H_ASP); if (foldHTMLPreprocessor && chNext == '%') @@ -1074,8 +1074,8 @@ }
// handle the end of Django template code - else if (isDjango && - ((inScriptType == eNonHtmlPreProc) || (inScriptType == eNonHtmlScriptPreProc)) && + else if (isDjango && + ((inScriptType == eNonHtmlPreProc) || (inScriptType == eNonHtmlScriptPreProc)) && (scriptLanguage != eScriptNone) && stateAllowsTermination(state) && isDjangoBlockEnd(ch, chNext, djangoBlockType)) { if (state == SCE_H_ASPAT) { @@ -1098,7 +1098,7 @@ if (foldHTMLPreprocessor) { levelCurrent--; } - scriptLanguage = eScriptNone; + scriptLanguage = beforeLanguage; continue; }
Modified: trunk/scintilla/LexPerl.cxx =================================================================== --- trunk/scintilla/LexPerl.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexPerl.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -1243,7 +1243,7 @@ else if (styler.Match(i, "=head")) isPodHeading = true; } else if (style == SCE_PL_DATASECTION) { - if (ch == '=' && isalpha(chNext) && levelCurrent == SC_FOLDLEVELBASE) + if (ch == '=' && isascii(chNext) && isalpha(chNext) && levelCurrent == SC_FOLDLEVELBASE) levelCurrent++; else if (styler.Match(i, "=cut") && levelCurrent > SC_FOLDLEVELBASE) levelCurrent--;
Modified: trunk/scintilla/LexPython.cxx =================================================================== --- trunk/scintilla/LexPython.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexPython.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -36,7 +36,7 @@ enum literalsAllowed { litNone=0, litU=1, litB=2};
static bool IsPyStringTypeChar(int ch, literalsAllowed allowed) { - return + return ((allowed & litB) && (ch == 'b' || ch == 'B')) || ((allowed & litU) && (ch == 'u' || ch == 'U')); } @@ -136,13 +136,13 @@ WordList &keywords2 = *keywordlists[1];
// property tab.timmy.whinge.level - // For Python code, checks whether indenting is consistent. - // The default, 0 turns off indentation checking, - // 1 checks whether each line is potentially inconsistent with the previous line, - // 2 checks whether any space characters occur before a tab character in the indentation, - // 3 checks whether any spaces are in the indentation, and + // For Python code, checks whether indenting is consistent. + // The default, 0 turns off indentation checking, + // 1 checks whether each line is potentially inconsistent with the previous line, + // 2 checks whether any space characters occur before a tab character in the indentation, + // 3 checks whether any spaces are in the indentation, and // 4 checks for any tab characters in the indentation. - // 1 is a good level to use. + // 1 is a good level to use. const int whingeLevel = styler.GetPropertyInt("tab.timmy.whinge.level");
// property lexer.python.literals.binary @@ -353,7 +353,7 @@ if (sc.ch == '0' && (sc.chNext == 'x' || sc.chNext == 'X')) { base_n_number = true; sc.SetState(SCE_P_NUMBER); - } else if (sc.ch == '0' && + } else if (sc.ch == '0' && (sc.chNext == 'o' || sc.chNext == 'O' || sc.chNext == 'b' || sc.chNext == 'B')) { if (base2or8Literals) { base_n_number = true; @@ -538,7 +538,7 @@ }
// Set fold header on non-quote/non-comment line - if (!quote && !comment && !(indentCurrent & SC_FOLDLEVELWHITEFLAG) ) { + if (!quote && !comment && !(indentCurrent & SC_FOLDLEVELWHITEFLAG)) { if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK)) lev |= SC_FOLDLEVELHEADERFLAG; } @@ -558,7 +558,7 @@ //styler.SetLevel(lineCurrent, indentCurrent); }
-static const char * const pythonWordListDesc[] = { +static const char *const pythonWordListDesc[] = { "Keywords", "Highlighted identifiers", 0
Modified: trunk/scintilla/LexVHDL.cxx =================================================================== --- trunk/scintilla/LexVHDL.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexVHDL.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -1,9 +1,9 @@ // Scintilla source code edit control /** @file LexVHDL.cxx ** Lexer for VHDL - ** Written by Phil Reid, + ** Written by Phil Reid, ** Based on: - ** - The Verilog Lexer by Avi Yegudin + ** - The Verilog Lexer by Avi Yegudin ** - The Fortran Lexer by Chuan-jian Shen ** - The C++ lexer by Neil Hodgson **/ @@ -126,7 +126,7 @@ sc.SetState(SCE_VHDL_IDENTIFIER); } else if (sc.Match('-', '-')) { sc.SetState(SCE_VHDL_COMMENT); - sc.Forward(); + sc.Forward(); } else if (sc.Match('-', '-')) { if (sc.Match("--!")) // Nice to have a different comment style sc.SetState(SCE_VHDL_COMMENTLINEBANG); @@ -161,7 +161,7 @@ static void FoldNoBoxVHDLDoc( unsigned int startPos, int length, - int initStyle, + int, Accessor &styler) { // Decided it would be smarter to have the lexer have all keywords included. Therefore I @@ -249,7 +249,6 @@ char chPrev = '\0'; char chNextNonBlank; int styleNext = styler.StyleAt(startPos); - int style = initStyle; //Platform::DebugPrintf("Line[%04d] Prev[%20s] ************************* Level[%x]\n", lineCurrent+1, prevWord, levelCurrent);
/***************************************/ @@ -265,16 +264,16 @@ j ++ ; chNextNonBlank = styler.SafeGetCharAt(j); } - style = styleNext; + int style = styleNext; styleNext = styler.StyleAt(i + 1); bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n');
- if (foldComment && atEOL && IsCommentLine(lineCurrent, styler)) + if (foldComment && atEOL && IsCommentLine(lineCurrent, styler)) { if(!IsCommentLine(lineCurrent-1, styler) && IsCommentLine(lineCurrent+1, styler)) { levelNext++; - } + } else if(IsCommentLine(lineCurrent-1, styler) && !IsCommentLine(lineCurrent+1, styler)) { levelNext--; @@ -380,7 +379,7 @@ ((strcmp(s, "begin") == 0) && (strcmp(prevWord, "function") == 0)) || ((strcmp(s, "begin") == 0) && (strcmp(prevWord, "procedure") == 0))) { - levelMinCurrentBegin = levelNext - 1; + levelMinCurrentBegin = levelNext - 1; } //Platform::DebugPrintf("Line[%04d] Prev[%20s] Cur[%20s] Level[%x]\n", lineCurrent+1, prevWord, s, levelCurrent); strcpy(prevWord, s); @@ -444,34 +443,34 @@
// Keyword: -// access after alias all architecture array assert attribute begin block body buffer bus case component -// configuration constant disconnect downto else elsif end entity exit file for function generate generic -// group guarded if impure in inertial inout is label library linkage literal loop map new next null of -// on open others out package port postponed procedure process pure range record register reject report -// return select severity shared signal subtype then to transport type unaffected units until use variable +// access after alias all architecture array assert attribute begin block body buffer bus case component +// configuration constant disconnect downto else elsif end entity exit file for function generate generic +// group guarded if impure in inertial inout is label library linkage literal loop map new next null of +// on open others out package port postponed procedure process pure range record register reject report +// return select severity shared signal subtype then to transport type unaffected units until use variable // wait when while with // // Operators: // abs and mod nand nor not or rem rol ror sla sll sra srl xnor xor // // Attributes: -// left right low high ascending image value pos val succ pred leftof rightof base range reverse_range -// length delayed stable quiet transaction event active last_event last_active last_value driving +// left right low high ascending image value pos val succ pred leftof rightof base range reverse_range +// length delayed stable quiet transaction event active last_event last_active last_value driving // driving_value simple_name path_name instance_name // // Std Functions: -// now readline read writeline write endfile resolved to_bit to_bitvector to_stdulogic to_stdlogicvector -// to_stdulogicvector to_x01 to_x01z to_UX01 rising_edge falling_edge is_x shift_left shift_right rotate_left +// now readline read writeline write endfile resolved to_bit to_bitvector to_stdulogic to_stdlogicvector +// to_stdulogicvector to_x01 to_x01z to_UX01 rising_edge falling_edge is_x shift_left shift_right rotate_left // rotate_right resize to_integer to_unsigned to_signed std_match to_01 // // Std Packages: -// std ieee work standard textio std_logic_1164 std_logic_arith std_logic_misc std_logic_signed -// std_logic_textio std_logic_unsigned numeric_bit numeric_std math_complex math_real vital_primitives +// std ieee work standard textio std_logic_1164 std_logic_arith std_logic_misc std_logic_signed +// std_logic_textio std_logic_unsigned numeric_bit numeric_std math_complex math_real vital_primitives // vital_timing // // Std Types: -// boolean bit character severity_level integer real time delay_length natural positive string bit_vector -// file_open_kind file_open_status line text side width std_ulogic std_ulogic_vector std_logic +// boolean bit character severity_level integer real time delay_length natural positive string bit_vector +// file_open_kind file_open_status line text side width std_ulogic std_ulogic_vector std_logic // std_logic_vector X01 X01Z UX01 UX01Z unsigned signed //
Modified: trunk/scintilla/LexVerilog.cxx =================================================================== --- trunk/scintilla/LexVerilog.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LexVerilog.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -150,6 +150,22 @@ return style == SCE_V_COMMENT; }
+static bool IsCommentLine(int line, Accessor &styler) { + int pos = styler.LineStart(line); + int eolPos = styler.LineStart(line + 1) - 1; + for (int i = pos; i < eolPos; i++) { + char ch = styler[i]; + char chNext = styler.SafeGetCharAt(i + 1); + int style = styler.StyleAt(i); + if (ch == '/' && chNext == '/' && + (style == SCE_V_COMMENTLINE || style == SCE_V_COMMENTLINEBANG)) { + return true; + } else if (!IsASpaceOrTab(ch)) { + return false; + } + } + return false; +} // Store both the current line's fold level and the next lines in the // level store to make it easy to pick up with each increment // and to make it possible to fiddle the current level for "} else {". @@ -195,6 +211,15 @@ levelNext--; } } + if (foldComment && atEOL && IsCommentLine(lineCurrent, styler)) + { + if (!IsCommentLine(lineCurrent - 1, styler) + && IsCommentLine(lineCurrent + 1, styler)) + levelNext++; + else if (IsCommentLine(lineCurrent - 1, styler) + && !IsCommentLine(lineCurrent+1, styler)) + levelNext--; + } if (foldComment && (style == SCE_V_COMMENTLINE)) { if ((ch == '/') && (chNext == '/')) { char chNext2 = styler.SafeGetCharAt(i + 2);
Modified: trunk/scintilla/LineMarker.cxx =================================================================== --- trunk/scintilla/LineMarker.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LineMarker.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -31,7 +31,7 @@ markType = SC_MARK_PIXMAP; }
-void LineMarker::SetXPM(const char * const *linesForm) { +void LineMarker::SetXPM(const char *const *linesForm) { delete pxpm; pxpm = new XPM(linesForm); markType = SC_MARK_PIXMAP; @@ -154,7 +154,7 @@ rcSmall.bottom = rc.bottom - 2; surface->RectangleDraw(rcSmall, fore.allocated, back.allocated);
- } else if (markType == SC_MARK_EMPTY || markType == SC_MARK_BACKGROUND || + } else if (markType == SC_MARK_EMPTY || markType == SC_MARK_BACKGROUND || markType == SC_MARK_UNDERLINE || markType == SC_MARK_AVAILABLE) { // An invisible marker so don't draw anything
Modified: trunk/scintilla/LineMarker.h =================================================================== --- trunk/scintilla/LineMarker.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/LineMarker.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -51,7 +51,7 @@ } void RefreshColourPalette(Palette &pal, bool want); void SetXPM(const char *textForm); - void SetXPM(const char * const *linesForm); + void SetXPM(const char *const *linesForm); void Draw(Surface *surface, PRectangle &rc, Font &fontForCharacter); };
Modified: trunk/scintilla/Partitioning.h =================================================================== --- trunk/scintilla/Partitioning.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/Partitioning.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -8,7 +8,7 @@ #ifndef PARTITIONING_H #define PARTITIONING_H
-/// A split vector of integers with a method for adding a value to all elements +/// A split vector of integers with a method for adding a value to all elements /// in a range. /// Used by the Partitioning class.
Modified: trunk/scintilla/PerLine.cxx =================================================================== --- trunk/scintilla/PerLine.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/PerLine.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -241,7 +241,7 @@ void LineLevels::InsertLine(int line) { if (levels.Length()) { int level = SC_FOLDLEVELBASE; - if ((line > 0) && (line < levels.Length())) { + if ((line > 0) && (line < levels.Length())) { level = levels[line-1] & ~SC_FOLDLEVELWHITEFLAG; } levels.InsertValue(line, 1, level); @@ -421,7 +421,7 @@ delete []annotations[line]; } annotations[line] = AllocateAnnotation(strlen(text), style); - AnnotationHeader *pah = reinterpret_cast<AnnotationHeader*>(annotations[line]); + AnnotationHeader *pah = reinterpret_cast<AnnotationHeader *>(annotations[line]); pah->style = static_cast<short>(style); pah->length = strlen(text); pah->lines = static_cast<short>(NumberLines(text));
Modified: trunk/scintilla/PerLine.h =================================================================== --- trunk/scintilla/PerLine.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/PerLine.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -11,7 +11,7 @@ #ifdef SCI_NAMESPACE namespace Scintilla { #endif - + /** * This holds the marker identifier and the marker type to display. * MarkerHandleNumbers are members of lists.
Modified: trunk/scintilla/PlatGTK.cxx =================================================================== --- trunk/scintilla/PlatGTK.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/PlatGTK.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -347,7 +347,7 @@ d2 = strchr(d1 + 1, '-'); if (d2) d3 = strchr(d2 + 1, '-'); - if (d3) { + if (d3 && d2) { // foundary-fontface-isoxxx-x *d2 = '\0'; foundary[0] = '-'; @@ -667,11 +667,9 @@
// Required on OS X #ifdef SCI_NAMESPACE -class Scintilla::SurfaceImpl : public Surface -#else -class SurfaceImpl : public Surface +namespace Scintilla { #endif -{ +class SurfaceImpl : public Surface { encodingType et; GdkDrawable *drawable; GdkGC *gc; @@ -731,6 +729,9 @@ void SetUnicodeMode(bool unicodeMode_); void SetDBCSMode(int codePage); }; +#ifdef SCI_NAMESPACE +} +#endif
const char *CharacterSetID(int characterSet) { switch (characterSet) {
Modified: trunk/scintilla/PropSet.cxx =================================================================== --- trunk/scintilla/PropSet.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/PropSet.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -96,7 +96,7 @@ // for that, through a recursive function and a simple chain of pointers.
struct VarChain { - VarChain(const char*var_=NULL, const VarChain *link_=NULL): var(var_), link(link_) {} + VarChain(const char *var_=NULL, const VarChain *link_=NULL): var(var_), link(link_) {}
bool contains(const char *testVar) const { return (var && (0 == strcmp(var, testVar)))
Modified: trunk/scintilla/SVector.h =================================================================== --- trunk/scintilla/SVector.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/SVector.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -19,19 +19,19 @@ */ class SVector { enum { allocSize = 4000 }; - + int *v; ///< The vector unsigned int size; ///< Number of elements allocated unsigned int len; ///< Number of elements used in vector - + /** Internally allocate more elements than the user wants * to avoid thrashing the memory allocator. */ void SizeTo(int newSize) { if (newSize < allocSize) newSize += allocSize; - else + else newSize = (newSize * 3) / 2; - int* newv = new int[newSize]; + int *newv = new int[newSize]; size = newSize; unsigned int i=0; for (; i<len; i++) { @@ -43,7 +43,7 @@ delete []v; v = newv; } - + public: SVector() { v = 0; @@ -60,7 +60,7 @@ size = 0; if (other.Length() > 0) { SizeTo(other.Length()); - for (int i=0;i<other.Length();i++) + for (int i=0; i<other.Length(); i++) v[i] = other.v[i]; len = other.Length(); } @@ -74,7 +74,7 @@ size = 0; if (other.Length() > 0) { SizeTo(other.Length()); - for (int i=0;i<other.Length();i++) + for (int i=0; i<other.Length(); i++) v[i] = other.v[i]; len = other.Length(); }
Modified: trunk/scintilla/ScintillaBase.h =================================================================== --- trunk/scintilla/ScintillaBase.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/ScintillaBase.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -76,7 +76,7 @@ void AutoCompleteCharacterDeleted(); void AutoCompleteCompleted(); void AutoCompleteMoveToCurrentWord(); - static void AutoCompleteDoubleClick(void* p); + static void AutoCompleteDoubleClick(void *p);
void CallTipClick(); void CallTipShow(Point pt, const char *defn);
Modified: trunk/scintilla/ScintillaGTK.cxx =================================================================== --- trunk/scintilla/ScintillaGTK.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/ScintillaGTK.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -256,7 +256,9 @@ static void DragDataGet(GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time); static gint TimeOut(ScintillaGTK *sciThis); - static gint IdleCallback(ScintillaGTK *sciThis); + static gboolean IdleCallback(ScintillaGTK *sciThis); + static gboolean StyleIdle(ScintillaGTK *sciThis); + virtual void QueueStyling(int upTo); static void PopUpCB(ScintillaGTK *sciThis, guint action, GtkWidget *widget);
gint ExposeTextThis(GtkWidget *widget, GdkEventExpose *ose); @@ -701,7 +703,7 @@ }
static char *ConvertText(int *lenResult, char *s, size_t len, const char *charSetDest, - const char *charSetSource, bool transliterations) { + const char *charSetSource, bool transliterations, bool silent=false) { // s is not const because of different versions of iconv disagreeing about const *lenResult = 0; char *destForm = 0; @@ -714,7 +716,9 @@ size_t outLeft = len*3+1; size_t conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft); if (conversions == ((size_t)(-1))) { -fprintf(stderr, "iconv %s->%s failed for %s\n", charSetSource, charSetDest, static_cast<char *>(s)); + if (!silent) + fprintf(stderr, "iconv %s->%s failed for %s\n", + charSetSource, charSetDest, static_cast<char *>(s)); delete []destForm; destForm = 0; } else { @@ -826,7 +830,7 @@
#ifdef SCI_LEXER case SCI_LOADLEXERLIBRARY: - LexerManager::GetInstance()->Load(reinterpret_cast<const char*>(wParam)); + LexerManager::GetInstance()->Load(reinterpret_cast<const char*>(lParam)); break; #endif case SCI_TARGETASUTF8: @@ -873,16 +877,17 @@ bool ScintillaGTK::SetIdle(bool on) { if (on) { // Start idler, if it's not running. - if (idler.state == false) { + if (!idler.state) { idler.state = true; - idler.idlerID = reinterpret_cast<IdlerID> - (gtk_idle_add((GtkFunction)IdleCallback, this)); + idler.idlerID = reinterpret_cast<IdlerID>( + g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, + reinterpret_cast<GSourceFunc>(IdleCallback), this, NULL)); } } else { // Stop idler, if it's running - if (idler.state == true) { + if (idler.state) { idler.state = false; - gtk_idle_remove(GPOINTER_TO_UINT(idler.idlerID)); + g_source_remove(GPOINTER_TO_UINT(idler.idlerID)); } } return true; @@ -1104,7 +1109,7 @@ if (mapped) { int mappedLength = strlen(mapped); const char *mappedBack = ConvertText(&mappedLength, mapped, - mappedLength, charSetBuffer, "UTF-8", false); + mappedLength, charSetBuffer, "UTF-8", false, true); if (mappedBack && (strlen(mappedBack) == 1) && (mappedBack[0] != sCharacter[0])) { pcf->SetTranslation(sCharacter[0], mappedBack[0]); } @@ -1612,6 +1617,7 @@ if (OwnPrimarySelection() && primary.s == NULL) CopySelectionRange(&primary);
+ sel.Clear(); SetSelection(pos, pos); atomSought = atomUTF8; gtk_selection_convert(GTK_WIDGET(PWidget(wMain)), GDK_SELECTION_PRIMARY, @@ -2308,8 +2314,8 @@ return 1; }
-int ScintillaGTK::IdleCallback(ScintillaGTK *sciThis) { - // Idler will be automatically stoped, if there is nothing +gboolean ScintillaGTK::IdleCallback(ScintillaGTK *sciThis) { + // Idler will be automatically stopped, if there is nothing // to do while idle. bool ret = sciThis->Idle(); if (ret == false) { @@ -2321,6 +2327,22 @@ return ret; }
+gboolean ScintillaGTK::StyleIdle(ScintillaGTK *sciThis) { + sciThis->IdleStyling(); + // Idler will be automatically stopped + return FALSE; +} + +void ScintillaGTK::QueueStyling(int upTo) { + Editor::QueueStyling(upTo); + if (!styleNeeded.active) { + // Only allow one style needed to be queued + styleNeeded.active = true; + g_idle_add_full(G_PRIORITY_HIGH_IDLE, + reinterpret_cast<GSourceFunc>(StyleIdle), this, NULL); + } +} + void ScintillaGTK::PopUpCB(ScintillaGTK *sciThis, guint action, GtkWidget *) { if (action) { sciThis->Command(action);
Modified: trunk/scintilla/Selection.cxx =================================================================== --- trunk/scintilla/Selection.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/Selection.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -127,7 +127,7 @@ } else if (start <= startRange) { // Trim end end = startRange; - } else { // + } else { // PLATFORM_ASSERT(end >= endRange); // Trim start start = endRange; @@ -267,7 +267,7 @@ for (size_t i=0; i<ranges.size();) { if ((i != mainRange) && (ranges[i].Trim(range))) { // Trimmed to empty so remove - for (size_t j=i;j<ranges.size()-1;j++) { + for (size_t j=i; j<ranges.size()-1; j++) { ranges[j] = ranges[j+1]; if (j == mainRange-1) mainRange--;
Modified: trunk/scintilla/Selection.h =================================================================== --- trunk/scintilla/Selection.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/Selection.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -57,7 +57,7 @@ };
// Ordered range to make drawing simpler -struct SelectionSegment { +struct SelectionSegment { SelectionPosition start; SelectionPosition end; SelectionSegment() { @@ -148,7 +148,7 @@ int MainAnchor() const; SelectionRange &Rectangular(); SelectionSegment Limits() const; - // This is for when you want to move the caret in response to a + // This is for when you want to move the caret in response to a // user direction command - for rectangular selections, use the range // that covers all selected text otherwise return the main selection. SelectionSegment LimitsForRectangularElseMain() const;
Modified: trunk/scintilla/SplitVector.h =================================================================== --- trunk/scintilla/SplitVector.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/SplitVector.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -1,6 +1,6 @@ // Scintilla source code edit control /** @file SplitVector.h - ** Main data structure for holding arrays that handle insertions + ** Main data structure for holding arrays that handle insertions ** and deletions efficiently. **/ // Copyright 1998-2007 by Neil Hodgson neilh@scintilla.org @@ -97,7 +97,7 @@
/// Retrieve the character at a particular position. /// Retrieving positions outside the range of the buffer returns 0. - /// The assertions here are disabled since calling code can be + /// The assertions here are disabled since calling code can be /// simpler if out of range access works and returns 0. T ValueAt(int position) const { if (position < part1Length) { @@ -135,7 +135,7 @@ } }
- T& operator[](int position) const { + T &operator[](int position) const { PLATFORM_ASSERT(position >= 0 && position < lengthBody); if (position < part1Length) { return body[position]; @@ -182,14 +182,14 @@ } }
- /// Ensure at least length elements allocated, + /// Ensure at least length elements allocated, /// appending zero valued elements if needed. void EnsureLength(int wantedLength) { if (Length() < wantedLength) { InsertValue(Length(), wantedLength - Length(), 0); } } - + /// Insert text into the buffer from an array. void InsertFromArray(int positionToInsert, const T s[], int positionFrom, int insertLength) { PLATFORM_ASSERT((positionToInsert >= 0) && (positionToInsert <= lengthBody)); @@ -238,7 +238,7 @@ DeleteRange(0, lengthBody); }
- T* BufferPointer() { + T *BufferPointer() { RoomFor(1); GapTo(lengthBody); body[lengthBody] = 0;
Modified: trunk/scintilla/Style.h =================================================================== --- trunk/scintilla/Style.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/Style.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -54,7 +54,7 @@ void ClearTo(const Style &source); bool EquivalentFontTo(const Style *other) const; void Realise(Surface &surface, int zoomLevel, Style *defaultStyle = 0, int extraFontFlag = 0); - bool IsProtected() const { return !(changeable && visible);}; + bool IsProtected() const { return !(changeable && visible);} };
#ifdef SCI_NAMESPACE
Modified: trunk/scintilla/UniConversion.cxx =================================================================== --- trunk/scintilla/UniConversion.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/UniConversion.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -1,6 +1,6 @@ // Scintilla source code edit control /** @file UniConversion.cxx - ** Functions to handle UFT-8 and UCS-2 strings. + ** Functions to handle UTF-8 and UTF-16 strings. **/ // Copyright 1998-2001 by Neil Hodgson neilh@scintilla.org // The License.txt file describes the conditions under which this software may be distributed.
Modified: trunk/scintilla/UniConversion.h =================================================================== --- trunk/scintilla/UniConversion.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/UniConversion.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -1,6 +1,6 @@ // Scintilla source code edit control /** @file UniConversion.h - ** Functions to handle UFT-8 and UCS-2 strings. + ** Functions to handle UTF-8 and UTF-16 strings. **/ // Copyright 1998-2001 by Neil Hodgson neilh@scintilla.org // The License.txt file describes the conditions under which this software may be distributed.
Modified: trunk/scintilla/ViewStyle.cxx =================================================================== --- trunk/scintilla/ViewStyle.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/ViewStyle.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -41,7 +41,7 @@ }
void FontNames::Clear() { - for (int i=0;i<max;i++) { + for (int i=0; i<max; i++) { delete []names[i]; } max = 0; @@ -50,7 +50,7 @@ const char *FontNames::Save(const char *name) { if (!name) return 0; - for (int i=0;i<max;i++) { + for (int i=0; i<max; i++) { if (strcmp(names[i], name) == 0) { return names[i]; } @@ -59,7 +59,7 @@ // Grow array int sizeNew = size * 2; char **namesNew = new char *[sizeNew]; - for (int j=0;j<max;j++) { + for (int j=0; j<max; j++) { namesNew[j] = names[j]; } delete []names; @@ -78,15 +78,15 @@
ViewStyle::ViewStyle(const ViewStyle &source) { Init(source.stylesSize); - for (unsigned int sty=0;sty<source.stylesSize;sty++) { + for (unsigned int sty=0; sty<source.stylesSize; sty++) { styles[sty] = source.styles[sty]; // Can't just copy fontname as its lifetime is relative to its owning ViewStyle styles[sty].fontName = fontNames.Save(source.styles[sty].fontName); } - for (int mrk=0;mrk<=MARKER_MAX;mrk++) { + for (int mrk=0; mrk<=MARKER_MAX; mrk++) { markers[mrk] = source.markers[mrk]; } - for (int ind=0;ind<=INDIC_MAX;ind++) { + for (int ind=0; ind<=INDIC_MAX; ind++) { indicators[ind] = source.indicators[ind]; }
@@ -131,7 +131,7 @@ someStylesProtected = false; leftMarginWidth = source.leftMarginWidth; rightMarginWidth = source.rightMarginWidth; - for (int i=0;i < margins; i++) { + for (int i=0; i < margins; i++) { ms[i] = source.ms[i]; } symbolMargin = source.symbolMargin; @@ -257,14 +257,14 @@
void ViewStyle::RefreshColourPalette(Palette &pal, bool want) { unsigned int i; - for (i=0;i<stylesSize;i++) { + for (i=0; i<stylesSize; i++) { pal.WantFind(styles[i].fore, want); pal.WantFind(styles[i].back, want); } - for (i=0;i<(sizeof(indicators)/sizeof(indicators[0]));i++) { + for (i=0; i<(sizeof(indicators)/sizeof(indicators[0])); i++) { pal.WantFind(indicators[i].fore, want); } - for (i=0;i<(sizeof(markers)/sizeof(markers[0]));i++) { + for (i=0; i<(sizeof(markers)/sizeof(markers[0])); i++) { markers[i].RefreshColourPalette(pal, want); } pal.WantFind(selforeground, want);
Modified: trunk/scintilla/WindowAccessor.cxx =================================================================== --- trunk/scintilla/WindowAccessor.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/WindowAccessor.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -7,7 +7,7 @@
#include <stdlib.h> #include <string.h> -#include <ctype.h> +#include <ctype.h> #include <stdio.h>
#include "Platform.h" @@ -28,7 +28,7 @@ if (SC_CP_UTF8 == codePage) // For lexing, all characters >= 0x80 are treated the // same so none is considered a lead byte. - return false; + return false; else return Platform::IsDBCSLeadByte(codePage, ch); } @@ -75,10 +75,10 @@ return Platform::SendScintilla(id, SCI_GETFOLDLEVEL, line, 0); }
-int WindowAccessor::Length() { - if (lenDoc == -1) +int WindowAccessor::Length() { + if (lenDoc == -1) lenDoc = Platform::SendScintilla(id, SCI_GETTEXTLENGTH, 0, 0); - return lenDoc; + return lenDoc; }
int WindowAccessor::GetLineState(int line) { @@ -129,7 +129,7 @@ startPos = extremePosition; lenDoc = -1; if (validLen > 0) { - Platform::SendScintillaPointer(id, SCI_SETSTYLINGEX, validLen, + Platform::SendScintillaPointer(id, SCI_SETSTYLINGEX, validLen, styleBuf); validLen = 0; } @@ -138,12 +138,12 @@ int WindowAccessor::IndentAmount(int line, int *flags, PFNIsCommentLeader pfnIsCommentLeader) { int end = Length(); int spaceFlags = 0; - - // Determines the indentation level of the current line and also checks for consistent + + // Determines the indentation level of the current line and also checks for consistent // indentation compared to the previous line. - // Indentation is judged consistent when the indentation whitespace of each line lines + // Indentation is judged consistent when the indentation whitespace of each line lines // the same or the indentation of one line is a prefix of the other. - + int pos = LineStart(line); char ch = (*this)[pos]; int indent = 0; @@ -170,11 +170,11 @@ } ch = (*this)[++pos]; } - + *flags = spaceFlags; indent += SC_FOLDLEVELBASE; // if completely empty line or the start of a comment... - if (isspace(ch) || (pfnIsCommentLeader && (*pfnIsCommentLeader)(*this, pos, end-pos)) ) + if (isspace(ch) || (pfnIsCommentLeader && (*pfnIsCommentLeader)(*this, pos, end-pos))) return indent | SC_FOLDLEVELWHITEFLAG; else return indent;
Modified: trunk/scintilla/XPM.cxx =================================================================== --- trunk/scintilla/XPM.cxx 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/XPM.cxx 2010-06-06 18:34:26 UTC (rev 5005) @@ -38,7 +38,7 @@ return i; }
-ColourAllocated XPM::ColourFromCode(int ch) { +ColourAllocated XPM::ColourFromCode(int ch) const { return colourCodeTable[ch]->allocated; #ifdef SLOW for (int i=0; i<nColours; i++) { @@ -62,7 +62,7 @@ Init(textForm); }
-XPM::XPM(const char * const *linesForm) : +XPM::XPM(const char *const *linesForm) : data(0), codes(0), colours(0), lines(0) { Init(linesForm); } @@ -88,7 +88,7 @@ } }
-void XPM::Init(const char * const *linesForm) { +void XPM::Init(const char *const *linesForm) { Clear(); height = 1; width = 1; @@ -185,7 +185,7 @@ // Centre the pixmap int startY = rc.top + (rc.Height() - height) / 2; int startX = rc.left + (rc.Width() - width) / 2; - for (int y=0;y<height;y++) { + for (int y=0; y<height; y++) { int prevCode = 0; int xStartRun = 0; for (int x=0; x<width; x++) {
Modified: trunk/scintilla/XPM.h =================================================================== --- trunk/scintilla/XPM.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/XPM.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -24,7 +24,7 @@ char codeTransparent; char *codes; ColourPair *colours; - ColourAllocated ColourFromCode(int ch); + ColourAllocated ColourFromCode(int ch) const; void FillRun(Surface *surface, int code, int startX, int y, int x); char **lines; ColourPair *colourCodeTable[256];
Modified: trunk/scintilla/include/Platform.h =================================================================== --- trunk/scintilla/include/Platform.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/include/Platform.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -314,8 +314,8 @@ Surface(const Surface &) {} Surface &operator=(const Surface &) { return *this; } public: - Surface() {}; - virtual ~Surface() {}; + Surface() {} + virtual ~Surface() {} static Surface *Allocate();
virtual void Init(WindowID wid)=0; @@ -474,7 +474,7 @@ */ class DynamicLibrary { public: - virtual ~DynamicLibrary() {}; + virtual ~DynamicLibrary() {}
/// @return Pointer to function "name", or NULL on failure. virtual Function FindFunction(const char *name) = 0;
Modified: trunk/scintilla/include/SciLexer.h =================================================================== --- trunk/scintilla/include/SciLexer.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/include/SciLexer.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -637,6 +637,7 @@ #define SCE_CSS_EXTENDED_IDENTIFIER 19 #define SCE_CSS_EXTENDED_PSEUDOCLASS 20 #define SCE_CSS_EXTENDED_PSEUDOELEMENT 21 +#define SCE_CSS_MEDIA 22 #define SCE_POV_DEFAULT 0 #define SCE_POV_COMMENT 1 #define SCE_POV_COMMENTLINE 2 @@ -1081,11 +1082,19 @@ #define SCE_FS_DATE 16 #define SCE_FS_STRINGEOL 17 #define SCE_FS_CONSTANT 18 -#define SCE_FS_ASM 19 -#define SCE_FS_LABEL 20 -#define SCE_FS_ERROR 21 -#define SCE_FS_HEXNUMBER 22 -#define SCE_FS_BINNUMBER 23 +#define SCE_FS_WORDOPERATOR 19 +#define SCE_FS_DISABLEDCODE 20 +#define SCE_FS_DEFAULT_C 21 +#define SCE_FS_COMMENTDOC_C 22 +#define SCE_FS_COMMENTLINEDOC_C 23 +#define SCE_FS_KEYWORD_C 24 +#define SCE_FS_KEYWORD2_C 25 +#define SCE_FS_NUMBER_C 26 +#define SCE_FS_STRING_C 27 +#define SCE_FS_PREPROCESSOR_C 28 +#define SCE_FS_OPERATOR_C 29 +#define SCE_FS_IDENTIFIER_C 30 +#define SCE_FS_STRINGEOL_C 31 #define SCE_CSOUND_DEFAULT 0 #define SCE_CSOUND_COMMENT 1 #define SCE_CSOUND_NUMBER 2
Modified: trunk/scintilla/include/Scintilla.iface =================================================================== --- trunk/scintilla/include/Scintilla.iface 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/include/Scintilla.iface 2010-06-06 18:34:26 UTC (rev 5005) @@ -2906,6 +2906,7 @@ val SCE_CSS_EXTENDED_IDENTIFIER=19 val SCE_CSS_EXTENDED_PSEUDOCLASS=20 val SCE_CSS_EXTENDED_PSEUDOELEMENT=21 +val SCE_CSS_MEDIA=22 # Lexical states for SCLEX_POV lex POV=SCLEX_POV SCE_POV_ val SCE_POV_DEFAULT=0 @@ -3388,7 +3389,7 @@ val SCE_ST_CHARACTER=15 val SCE_ST_SPEC_SEL=16 # Lexical states for SCLEX_FLAGSHIP (clipper) -lex FlagShip=SCLEX_FLAGSHIP SCE_B_ +lex FlagShip=SCLEX_FLAGSHIP SCE_FS_ val SCE_FS_DEFAULT=0 val SCE_FS_COMMENT=1 val SCE_FS_COMMENTLINE=2 @@ -3408,11 +3409,19 @@ val SCE_FS_DATE=16 val SCE_FS_STRINGEOL=17 val SCE_FS_CONSTANT=18 -val SCE_FS_ASM=19 -val SCE_FS_LABEL=20 -val SCE_FS_ERROR=21 -val SCE_FS_HEXNUMBER=22 -val SCE_FS_BINNUMBER=23 +val SCE_FS_WORDOPERATOR=19 +val SCE_FS_DISABLEDCODE=20 +val SCE_FS_DEFAULT_C=21 +val SCE_FS_COMMENTDOC_C=22 +val SCE_FS_COMMENTLINEDOC_C=23 +val SCE_FS_KEYWORD_C=24 +val SCE_FS_KEYWORD2_C=25 +val SCE_FS_NUMBER_C=26 +val SCE_FS_STRING_C=27 +val SCE_FS_PREPROCESSOR_C=28 +val SCE_FS_OPERATOR_C=29 +val SCE_FS_IDENTIFIER_C=30 +val SCE_FS_STRINGEOL_C=31 # Lexical states for SCLEX_CSOUND lex Csound=SCLEX_CSOUND SCE_CSOUND_ val SCE_CSOUND_DEFAULT=0
Modified: trunk/scintilla/include/WindowAccessor.h =================================================================== --- trunk/scintilla/include/WindowAccessor.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/scintilla/include/WindowAccessor.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -53,7 +53,7 @@ }
void StartAt(unsigned int start, char chMask=31); - void SetFlags(char chFlags_, char chWhile_) {chFlags = chFlags_; chWhile = chWhile_; }; + void SetFlags(char chFlags_, char chWhile_) {chFlags = chFlags_; chWhile = chWhile_; } unsigned int GetStartSegment() { return startSeg; } void StartSegment(unsigned int pos); void ColourTo(unsigned int pos, int chAttr);
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2010-06-06 18:02:49 UTC (rev 5004) +++ trunk/src/plugindata.h 2010-06-06 18:34:26 UTC (rev 5005) @@ -50,7 +50,7 @@ enum { /** The Application Programming Interface (API) version, incremented * whenever any plugin data types are modified or appended to. */ - GEANY_API_VERSION = 188, + GEANY_API_VERSION = 189,
/** The Application Binary Interface (ABI) version, incremented whenever * existing fields in the plugin data types have to be changed or reordered. */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.