diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index 4277bccc0..bbeab30b0 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -5267,7 +5267,7 @@ struct Quote{ const char *_quote; }; -const int nbQuote = 161; +const int nbQuote = 171; Quote quotes[nbQuote] = { {"Notepad++", "Good programmers use Notepad++ to code.\nExtreme programmers use MS Word to code, in Comic Sans, center aligned."}, {"Martin Golding", "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."}, @@ -5419,6 +5419,16 @@ Quote quotes[nbQuote] = { {"Anonymous #117", "A Native American was asked:\n\"Do you celebrate Columbus day?\"\nHe replied:\n\"I don't know, do Jews celebrate Hitler's birthday?\""}, {"Anonymous #118", "I love necrophilia, but i can't stand the awkward silences."}, {"Anonymous #119", "\"I'm gonna Google that. BING that, Bing that, sorry.\"\n- The CEO of Bing (many times per day still)"}, +{"Anonymous #120", "Life is what happens to you while you're looking at your smartphone."}, +{"Anonymous #121", "Thing to do today:\n1. Get up\n2. Go back to bed"}, +{"Anonymous #122", "Nerd?\nI prefer the term \"Intellectual badass\"."}, +{"Anonymous #123", "How can you face your problem if your problem is your face?"}, +{"Anonymous #124", "YOLOLO:\nYou Only LOL Once."}, +{"Anonymous #125", "Pooping with the door opened is the meaning of true freedom."}, +{"Anonymous #126", "Social media does not make people stupid.\nIt just makes stupid people more visible."}, +{"Anonymous #127", "Don't give up your dreams.\nKeep sleeping."}, +{"Anonymous #128", "I love sleep.\nNot because I'm lazy.\nBut because my dreams are better than my real life."}, +{"Anonymous #129", "Without nipples, tits are pointless."}, {"Barack Obama", "Yes, we scan!"}, {"George W. Bush", "Where is my Nobel prize?\nI bombed people too."}, {"Gandhi", "Earth provides enough to satisfy every man's need, but not every man's greed."}, diff --git a/PowerEditor/src/ScitillaComponent/ScintillaEditView.cpp b/PowerEditor/src/ScitillaComponent/ScintillaEditView.cpp index 32a5e0fbb..c18eac63d 100644 --- a/PowerEditor/src/ScitillaComponent/ScintillaEditView.cpp +++ b/PowerEditor/src/ScitillaComponent/ScintillaEditView.cpp @@ -2885,7 +2885,72 @@ void ScintillaEditView::insertNewLineBelowCurrentLine() } execute(SCI_SETEMPTYSELECTION, execute(SCI_POSITIONFROMLINE, current_line + 1)); } -/* + +// Get the first left index, in which the value greater or equal than pivot's one +// If no one is greater than pivot, then pivot's index will be returned +size_t ScintillaEditView::getLeftLineIndex(size_t leftIndex, size_t pivotIndex) +{ + size_t i = leftIndex; + while (i < pivotIndex) + { + size_t iLine = getGreaterLineBetween(i, pivotIndex); + if (iLine == pivotIndex) + i++; + else + break; + } + return i; +} + +// Get the first right index, in which the value smaller or equal than pivot's one +// If no one is smaller or equal than pivot, then pivot's index will be returned +size_t ScintillaEditView::getRightLineIndex(size_t rightIndex, size_t pivotIndex) +{ + size_t i = rightIndex; + while (i > pivotIndex) + { + size_t iLine = getGreaterLineBetween(i, pivotIndex); + if (iLine == i) + i--; + else + break; + } + return i; +} + +size_t ScintillaEditView::getGreaterLineBetween(size_t l1, size_t l2) +{ + int line1Len = execute(SCI_LINELENGTH, l1); + int line2Len = execute(SCI_LINELENGTH, l2); + + char *line1text = new char[line1Len + 1]; + char *line2text = new char[line2Len + 1]; + execute(SCI_GETLINE, l1, (LPARAM)line1text); + line1text[line1Len] = '\0'; + execute(SCI_GETLINE, l2, (LPARAM)line2text); + line2text[line2Len] = '\0'; + + string s1 = line1text; + string s2 = line2text; + + size_t res; + if (s1.compare(s2) > 0) + res = l1; + else + res = l2 + + delete[] line1text; + delete[] line2text; + + return res; +} + +size_t ScintillaEditView::getRandomPivot(size_t /*fromLine*/, size_t /*toLine*/) +{ + return 2; +} + + void ScintillaEditView::quickSortLines(size_t fromLine, size_t toLine) { if (fromLine == toLine) @@ -2898,12 +2963,17 @@ void ScintillaEditView::quickSortLines(size_t fromLine, size_t toLine) size_t leftIndex = fromLine; size_t rightIndex = toLine; - for (size_t i = fromLine, j = toLine; i <= pivotIndex; ++i) + while (leftIndex != rightIndex) { - if (val(leftIndex) <= val(pivotIndex)) - ++leftIndex; + leftIndex = getLeftLineIndex(leftIndex, pivotIndex); // get the first left index, in which the value greater or equal than pivot's one + rightIndex = getRightLineIndex(rightIndex, pivotIndex); // get the first right index, in which the value smaller or equal than pivot's one + + swapLines(leftIndex, rightIndex); + //if (val(leftIndex) <= val(pivotIndex)) + // ++leftIndex; + //for (size_t j = toLine; i >= pivotIndex; --j) //{ @@ -2916,7 +2986,7 @@ void ScintillaEditView::quickSortLines(size_t fromLine, size_t toLine) // check the right side recursively quickSortLines(pivotIndex + 1, toLine); } -*/ + bool ScintillaEditView::swapLines(size_t line1, size_t line2) { diff --git a/PowerEditor/src/ScitillaComponent/ScintillaEditView.h b/PowerEditor/src/ScitillaComponent/ScintillaEditView.h index 00ac0a61c..652a06236 100644 --- a/PowerEditor/src/ScitillaComponent/ScintillaEditView.h +++ b/PowerEditor/src/ScitillaComponent/ScintillaEditView.h @@ -657,7 +657,7 @@ public: }; void scrollPosToCenter(int pos); bool swapLines(size_t line1, size_t line2); - //void quickSortLines(size_t fromLine, size_t toLine); + void quickSortLines(size_t fromLine, size_t toLine); protected: static HINSTANCE _hLib; @@ -956,6 +956,12 @@ protected: pair getWordRange(); bool expandWordSelection(); + + // For the quicksort on lines + size_t getLeftLineIndex(size_t leftIndex, size_t pivotIndex); + size_t getRightLineIndex(size_t rightIndex, size_t pivotIndex); + size_t getGreaterLineBetween(size_t l1, size_t l2); + size_t getRandomPivot(size_t fromLine, size_t toLine); }; #endif //SCINTILLA_EDIT_VIEW_H