emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/evil-matchit 1c1a218d34 067/244: sql


From: ELPA Syncer
Subject: [nongnu] elpa/evil-matchit 1c1a218d34 067/244: sql
Date: Thu, 6 Jan 2022 02:58:50 -0500 (EST)

branch: elpa/evil-matchit
commit 1c1a218d34362808ba085342bdfba7471d0e27c1
Author: Chen Bin <chenbin.sh@gmail.com>
Commit: Chen Bin <chenbin.sh@gmail.com>

    sql
---
 evil-matchit-sql.el | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 evil-matchit.el     |   6 ++++
 2 files changed, 107 insertions(+)

diff --git a/evil-matchit-sql.el b/evil-matchit-sql.el
new file mode 100644
index 0000000000..5d2c32870a
--- /dev/null
+++ b/evil-matchit-sql.el
@@ -0,0 +1,101 @@
+;;; evil-matchit-sql.el ---sql plugin of evil-matchit
+
+;; Copyright (C) 2014  Chen Bin <chenbin.sh@gmail.com>
+
+;; Author: Chen Bin <chenbin.sh@gmail.com>
+
+;; This file is not part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of evil-matchit
+;;
+;; evil-matchit is free software: you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as published
+;; by the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; evil-matchit is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+;;; Code:
+
+;; OPTIONAL, you don't need SDK to write a plugin for evil-matchit
+;; but SDK don make you write less code, isn't it?
+;; All you need to do is just define the match-tags for SDK algorithm to 
lookup.
+(require 'evil-matchit-sdk)
+
+;; copied from sql.vim
+;;  Handle the following:
+;;  if
+;;  elseif | elsif
+;;  else [if]
+;;  end if
+;;
+;;  [while condition] loop
+;;      leave
+;;      break
+;;      continue
+;;      exit
+;;  end loop
+;;
+;;  for
+;;      leave
+;;      break
+;;      continue
+;;      exit
+;;  end loop
+;;
+;;  do
+;;      statements
+;;  doend
+;;
+;;  case
+;;  when
+;;  when
+;;  default
+;;  end case
+;;
+;;  merge
+;;  when not matched
+;;  when matched
+;;
+;;  EXCEPTION
+;;  WHEN column_not_found THEN
+;;  WHEN OTHERS THEN
+;;
+;;  create[ or replace] procedure|function|event
+    ;;   '^\s*\<\%(do\|for\|while\|loop\)\>.*:'.
+;; TODO for one howto, if it cannot match any keyword,
+;; should try next howto, the purpose is avoid missing any howto
+(defvar evilmi-sql-extract-keyword-howtos
+  '(("^[ \t]*\\([a-zA-Z]+ [a-zA-Z]+\\)" 1)
+    ("^[ \t]*\\([a-zA-Z]+\\)" 1)
+    ("^.* \\(loop\\)[;]? *$" 1)
+    ))
+
+(defvar evilmi-sql-match-tags
+  '(("if" ("elsif" "else" "elseif" "else *if") ("end" "end *if"))
+    (("loop") ("leave" "break" "continue" "exit") ("end loop"))
+    ("begin" () "end")
+    ("case" ("when *others") ("end *case" "end"))
+    (("do") () "do *end")
+    ))
+
+;;;###autoload
+(defun evilmi-sql-get-tag ()
+  (let (rlt)
+    (setq rlt (evilmi-sdk-get-tag evilmi-sql-match-tags 
evilmi-sql-extract-keyword-howtos))
+    rlt))
+
+;;;###autoload
+(defun evilmi-sql-jump (rlt NUM)
+  (evilmi-sdk-jump rlt NUM evilmi-sql-match-tags 
evilmi-sql-extract-keyword-howtos))
+
+(provide 'evil-matchit-sql)
diff --git a/evil-matchit.el b/evil-matchit.el
index 55171f3bda..51f1802390 100644
--- a/evil-matchit.el
+++ b/evil-matchit.el
@@ -128,6 +128,12 @@ If this flag is nil, then 50 means jump 50 times.")
   (plist-put evilmi-plugins 'python-mode '((evilmi-simple-get-tag 
evilmi-simple-jump)
                                            (evilmi-python-get-tag 
evilmi-python-jump)))
 
+  ;; SQL
+  (autoload 'evilmi-sql-get-tag "evil-matchit-sql" nil)
+  (autoload 'evilmi-sql-jump "evil-matchit-sql" nil)
+  (plist-put evilmi-plugins 'sql-mode '((evilmi-simple-get-tag 
evilmi-simple-jump)
+                                           (evilmi-sql-get-tag 
evilmi-sql-jump)))
+
   ;; C/C++
   (autoload 'evilmi-c-get-tag "evil-matchit-c" nil)
   (autoload 'evilmi-c-jump "evil-matchit-c" nil)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]