[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdevplatform/plugins/snippet
From: Milian Wolff <mail () milianw ! de>
Date: 2009-11-07 18:03:42
Message-ID: 1257617022.670225.16117.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1046169 by mwolff:
use KTextEditor::TemplateInterface for snippets. This makes mirroring, navigation \
etc. work without any custom code.
NOTE: variables must be marked as , but this gives more features, see also \
TemplateInterface documentation
PS: we also get neat magic-vars like %{name}, %{date}, %{time} etc. pp. for free.
M +0 -1 CMakeLists.txt
D selectionjumper.cpp
D selectionjumper.h
M +11 -62 snippetcompletionitem.cpp
--- trunk/KDE/kdevplatform/plugins/snippet/CMakeLists.txt #1046168:1046169
@@ -12,7 +12,6 @@
snippetfilterproxymodel.cpp
snippetcompletionmodel.cpp
snippetcompletionitem.cpp
- selectionjumper.cpp
snippet.cpp
moverepository.cpp
editsnippet.cpp
--- trunk/KDE/kdevplatform/plugins/snippet/snippetcompletionitem.cpp #1046168:1046169
@@ -27,8 +27,10 @@
#include <language/codecompletion/codecompletionmodel.h>
+#include <ktexteditor/templateinterface.h>
+#include <ktexteditor/view.h>
+
#include "snippet.h"
-#include "selectionjumper.h"
SnippetCompletionItem::SnippetCompletionItem( const QString& name, const QString& \
snippet ) : CompletionTreeItem(), m_name(name), m_snippet(snippet)
@@ -76,68 +78,15 @@
void SnippetCompletionItem::execute( KTextEditor::Document* document, const \
KTextEditor::Range& word ) {
- // get indendation of the current line
- QString indendation;
- QString currentLine = document->line(word.start().line());
- for ( int i = 0; i < currentLine.size(); ++i ) {
- if ( currentLine[i].isSpace() ) {
- indendation += currentLine[i];
- } else {
- break;
+ if ( document->activeView() ) {
+ KTextEditor::TemplateInterface* templateIface
+ = qobject_cast<KTextEditor::TemplateInterface*>(document->activeView());
+ if ( templateIface ) {
+ document->removeText(word);
+ templateIface->insertTemplateText(word.start(), m_snippet, QMap<QString, \
QString>()); + return;
}
}
- // parse snippet for markers
- QList<KTextEditor::Range> markers;
- bool isEscaped = false;
- int line = word.start().line();
- int column = word.start().column();
- KTextEditor::Cursor start = KTextEditor::Cursor::invalid();
- QList<int> charsToRemove;
- for ( int i = 0; i < m_snippet.size(); ++i ) {
- if ( m_snippet[i] == '\\' ) {
- ++column;
- isEscaped = !isEscaped;
- } else if ( m_snippet[i] == '\n' ) {
- ++line;
- column = indendation.size();
- } else if ( m_snippet[i] == '$' ) {
- if ( isEscaped ) {
- charsToRemove << i - 1;
- isEscaped = false;
- } else {
- charsToRemove << i;
- if ( start.isValid() ) {
- KTextEditor::Cursor end(line, column);
- markers << KTextEditor::Range(start, end);
- start = KTextEditor::Cursor::invalid();
- } else {
- start = KTextEditor::Cursor(line, column);
- }
- }
- } else {
- isEscaped = false;
- ++column;
- }
- }
- if ( !markers.isEmpty() ) {
- // add jump-position to end of snippet
- KTextEditor::Cursor jumpPosition(line, column);
- markers << KTextEditor::Range(jumpPosition, jumpPosition);
- }
-
- // remove $'s
- int deletedChars = 0;
- foreach ( const int &pos, charsToRemove ) {
- m_snippet.remove(pos - deletedChars, 1 );
- ++deletedChars;
- }
- // indent
- m_snippet.replace('\n', '\n' + indendation);
-
- document->replaceText( word, m_snippet );
-
- if ( !markers.isEmpty() ) {
- new SelectionJumper(markers, document);
- }
+ document->replaceText(word, m_snippet);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic