[kde-doc-english] [kile] /: Add an optional argument to 'EditorExtension::selectParagraph()' to return the precise selection of the paragraph (without superfluous whitespace)

Michel Ludwig michel.ludwig at kdemail.net
Sat Mar 23 17:23:59 UTC 2013


Git commit b8a59d8eb6f311f5bcd4d39ac1951801900532e4 by Michel Ludwig.
Committed on 23/03/2013 at 18:17.
Pushed by mludwig into branch 'master'.

Add an optional argument to 'EditorExtension::selectParagraph()' to return the precise selection of the paragraph (without superfluous whitespace)

Patch by Eugene Shalygin.

M  +3    -3    doc/scripting.docbook
M  +40   -8    src/editorextension.cpp
M  +3    -2    src/editorextension.h
M  +2    -3    src/scripting/kilescriptview.cpp
M  +1    -1    src/scripting/kilescriptview.h

http://commits.kde.org/kile/b8a59d8eb6f311f5bcd4d39ac1951801900532e4

diff --git a/doc/scripting.docbook b/doc/scripting.docbook
index 9e87bee..b2314fd 100644
--- a/doc/scripting.docbook
+++ b/doc/scripting.docbook
@@ -664,10 +664,10 @@ Selects the text of the current math group.
 
 <variablelist><varlistentry>
 <term><synopsis>
-void view.selectParagraph();
+void view.selectParagraph(bool wholeLines = true);
 </synopsis></term>
 <listitem><para>
-Selects the entire text of the current &latex; paragraph.
+Selects the entire text of the current &latex; paragraph. If <parameter>wholeLines</parameter> is <literal>true</literal>, the first and the last lines of the paragraph will be included in the selection entirely (including the end-of-line character); otherwise, the selection will only contain non-whitespace characters.
 </para></listitem>
 </varlistentry></variablelist>
 
@@ -2028,4 +2028,4 @@ function surroundTexCommand(cmd,r)
 
 </sect1>
 
-</chapter>
\ No newline at end of file
+</chapter>
diff --git a/src/editorextension.cpp b/src/editorextension.cpp
index fc3906b..33b95ca 100644
--- a/src/editorextension.cpp
+++ b/src/editorextension.cpp
@@ -2262,14 +2262,14 @@ QString EditorExtension::word(const KTextEditor::Cursor &cursor, bool latexComma
 
 //////////////////// paragraph ////////////////////
 
-void EditorExtension::selectParagraph(KTextEditor::View *view)
+void EditorExtension::selectParagraph(KTextEditor::View* view, bool wholeLines)
 {
 	view = determineView(view);
 	if(!view) {
 		return;
 	}
 
-	KTextEditor::Range range = findCurrentParagraphRange(view);
+	KTextEditor::Range range = findCurrentParagraphRange(view, wholeLines);
 	if ( range.isValid() ) {
 		view->setSelection(range);
 	}
@@ -2298,17 +2298,23 @@ void EditorExtension::deleteParagraph(KTextEditor::View *view)
 }
 
 // get the range of the current paragraph
-KTextEditor::Range EditorExtension::findCurrentParagraphRange(KTextEditor::View *view)
+KTextEditor::Range EditorExtension::findCurrentParagraphRange(KTextEditor::View* view, bool wholeLines)
 {
 	view = determineView(view);
 	if(!view) {
 		return KTextEditor::Range::invalid();
 	}
 
-	int startline, endline;
-	return (findCurrentTexParagraph(startline, endline, view))
-	       ? KTextEditor::Range(startline, 0, endline + 1, 0)
-	       : KTextEditor::Range::invalid();
+	int startline, endline, startcolumn, endcolumn;
+
+	if (findCurrentTexParagraph(startline, startcolumn, endline, endcolumn, view)) {
+		return wholeLines ?
+			KTextEditor::Range(startline, 0, endline + 1, 0) :
+			KTextEditor::Range(startline, startcolumn, endline, endcolumn);
+	}
+	else {
+		 return KTextEditor::Range::invalid();
+	}
 }
 
 QString  EditorExtension::getParagraphText(KTextEditor::View *view)
@@ -2322,7 +2328,13 @@ QString  EditorExtension::getParagraphText(KTextEditor::View *view)
 	return (range.isValid()) ? view->document()->text(range) : QString();
 }
 
-bool EditorExtension::findCurrentTexParagraph(int &startline, int &endline, KTextEditor::View *view)
+bool EditorExtension::findCurrentTexParagraph(int& startline, int& endline, KTextEditor::View* view)
+{
+	int dummy;
+	return findCurrentTexParagraph(startline, dummy, endline, dummy, view);
+}
+
+bool EditorExtension::findCurrentTexParagraph(int& startline, int& startcolumn, int& endline, int& endcolumn, KTextEditor::View* view)
 {
 	view = determineView(view);
 	if(!view) {
@@ -2353,6 +2365,16 @@ bool EditorExtension::findCurrentTexParagraph(int &startline, int &endline, KTex
 		startline = line;
 	}
 
+	// it is guaranteed that 'startline.trimmed()' won't be empty
+	startcolumn = 0;
+	QString line = doc->line(startline);
+	for(int i = 0; i < line.size(); ++i) {
+		if(!line[i].isSpace()) {
+			startcolumn = i;
+			break;
+		}
+	}
+
 	// find the next empty line
 	for(int line = row + 1; line < doc->lines(); ++line) {
 		if(doc->line(line).trimmed().isEmpty()) {
@@ -2361,6 +2383,16 @@ bool EditorExtension::findCurrentTexParagraph(int &startline, int &endline, KTex
 		endline = line;
 	}
 
+	// it is guaranteed that 'endline.trimmed()' won't be empty
+	line = doc->line(endline);
+	endcolumn = line.size();
+	for(int i = line.size() - 1; i >= 0; --i) {
+		if(!line[i].isSpace()) {
+			endcolumn = i+1;
+			break;
+		}
+	}
+
 	// settings result
 	return true;
 }
diff --git a/src/editorextension.h b/src/editorextension.h
index e963129..81d661b 100644
--- a/src/editorextension.h
+++ b/src/editorextension.h
@@ -85,7 +85,7 @@ public:
 	KTextEditor::Range wordRange(const KTextEditor::Cursor &cursor, bool latexCommand=false, KTextEditor::View *view = NULL);
 	QString word(const KTextEditor::Cursor &cursor, bool latexCommand=false, KTextEditor::View *view = NULL);
 
-	KTextEditor::Range findCurrentParagraphRange(KTextEditor::View *view);
+	KTextEditor::Range findCurrentParagraphRange(KTextEditor::View *view, bool wholeLines = true);
 	QString getParagraphText(KTextEditor::View *view);
 	int prevNonEmptyLine(int line, KTextEditor::View *view = NULL);
 	int nextNonEmptyLine(int line, KTextEditor::View *view = NULL);
@@ -126,7 +126,7 @@ public Q_SLOTS:
 	void matchTexgroup(KTextEditor::View *view = NULL);
 	void closeTexgroup(KTextEditor::View *view = NULL);
 
-	void selectParagraph(KTextEditor::View *view = NULL);
+	void selectParagraph(KTextEditor::View *view = NULL, bool wholeLines = true);
 	void selectLine(KTextEditor::View *view = NULL);
 	void selectLines(int from, int to, KTextEditor::View *view = NULL);
 	void selectWord(SelectMode mode = smTex, KTextEditor::View *view = NULL);
@@ -259,6 +259,7 @@ private:
 
 	// find current paragraph
 	bool findCurrentTexParagraph(int &startline, int &endline, KTextEditor::View *view);
+	bool findCurrentTexParagraph(int &startline, int& startcolumn, int &endline, int& endcolumn, KTextEditor::View *view);
 
 	// sectioning commands
 	bool findEndOfDocument(KTextEditor::Document *doc, int row, int col, int &rowFound, int &colFound);
diff --git a/src/scripting/kilescriptview.cpp b/src/scripting/kilescriptview.cpp
index bd875c7..0abdd77 100644
--- a/src/scripting/kilescriptview.cpp
+++ b/src/scripting/kilescriptview.cpp
@@ -193,12 +193,11 @@ void KileScriptView::selectMathgroup()
 
 ////////////////////////////////// Paragraph //////////////////////////////////////
 
-void KileScriptView::selectParagraph()
+void KileScriptView::selectParagraph(bool wholeLines)
 {
-	m_editor->selectParagraph(m_view);
+	m_editor->selectParagraph(m_view, wholeLines);
 }
 
-
 }
 
 #include "kilescriptview.moc"
diff --git a/src/scripting/kilescriptview.h b/src/scripting/kilescriptview.h
index b822c0f..9ddf8b8 100644
--- a/src/scripting/kilescriptview.h
+++ b/src/scripting/kilescriptview.h
@@ -87,7 +87,7 @@ class KileScriptView : public QObject, protected QScriptable
 		Q_INVOKABLE void selectMathgroup();
 
 		// paragraph
-		Q_INVOKABLE void selectParagraph();
+		Q_INVOKABLE void selectParagraph(bool wholeLines = true);
 
 	private:
 		KTextEditor::View *m_view;


More information about the kde-doc-english mailing list