[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