]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow use of "end" keyword for terminating Octave-mode blocks.
authorChong Yidong <cyd@stupidchicken.com>
Sat, 2 Jan 2010 19:40:59 +0000 (14:40 -0500)
committerChong Yidong <cyd@stupidchicken.com>
Sat, 2 Jan 2010 19:40:59 +0000 (14:40 -0500)
* progmodes/octave-mod.el (octave-end-keywords)
(octave-block-begin-or-end-regexp, octave-block-match-alist): Add
"end" keyword (Bug#3061).
(octave-end-as-array-index-p): New function.
(calculate-octave-indent): Use it.

lisp/ChangeLog
lisp/progmodes/octave-mod.el

index 965d4780ae2d0cfc7295534cbd2bf7e30f505c89..a6ca9dd4dde121335a685d333f49b66ec915aec0 100644 (file)
@@ -1,3 +1,11 @@
+2010-01-02  Daniel Elliott  <danelliottster@gmail.com>  (tiny change)
+
+       * progmodes/octave-mod.el (octave-end-keywords)
+       (octave-block-begin-or-end-regexp, octave-block-match-alist): Add
+       "end" keyword (Bug#3061).
+       (octave-end-as-array-index-p): New function.
+       (calculate-octave-indent): Use it.
+
 2010-01-02  Karl Fogel  <kfogel@red-bean.com>
 
        * bookmark.el: Consistently put the text property on the bookmark name.
index 7f09d83399b469651b4e32c4112e5c346f13115c..5c5e9851dcb81d7c6735d3156ee49f92834b6528 100644 (file)
@@ -101,11 +101,9 @@ All Octave abbrevs start with a grave accent (`)."
   '("do" "for" "function" "if" "switch" "try" "unwind_protect" "while"))
 (defvar octave-else-keywords
   '("case" "catch" "else" "elseif" "otherwise" "unwind_protect_cleanup"))
-;; FIXME: only use specific "end" tokens here to avoid confusion when "end"
-;; is used in indexing (the real fix is much more complex).
 (defvar octave-end-keywords
   '("endfor" "endfunction" "endif" "endswitch" "end_try_catch"
-    "end_unwind_protect" "endwhile" "until"))
+    "end_unwind_protect" "endwhile" "until" "end"))
 
 (defvar octave-reserved-words
   (append octave-begin-keywords
@@ -342,17 +340,15 @@ newline or semicolon after an else or end keyword."
   (concat octave-block-begin-regexp "\\|" octave-block-end-regexp))
 (defvar octave-block-else-or-end-regexp
   (concat octave-block-else-regexp "\\|" octave-block-end-regexp))
-;; FIXME: only use specific "end" tokens here to avoid confusion when "end"
-;; is used in indexing (the real fix is much more complex).
 (defvar octave-block-match-alist
   '(("do" . ("until"))
-    ("for" . ("endfor"))
+    ("for" . ("endfor" "end"))
     ("function" . ("endfunction"))
-    ("if" . ("else" "elseif" "endif"))
-    ("switch" . ("case" "otherwise" "endswitch"))
+    ("if" . ("else" "elseif" "endif" "end"))
+    ("switch" . ("case" "otherwise" "endswitch" "end"))
     ("try" . ("catch" "end_try_catch"))
     ("unwind_protect" . ("unwind_protect_cleanup" "end_unwind_protect"))
-    ("while" . ("endwhile")))
+    ("while" . ("endwhile" "end")))
   "Alist with Octave's matching block keywords.
 Has Octave's begin keywords as keys and a list of the matching else or
 end keywords as associated values.")
@@ -680,7 +676,10 @@ level."
                        (if (= bot (point))
                            (setq icol (+ icol octave-block-offset))))
                       ((octave-looking-at-kw octave-block-end-regexp)
-                       (if (not (= bot (point)))
+                       (if (and (not (= bot (point)))
+                                ;; special case for `end' keyword,
+                                ;; applied to all keywords
+                                (not (octave-end-as-array-index-p)))
                            (setq icol (- icol
                                          (octave-block-end-offset)))))))
                  (forward-char)))
@@ -702,6 +701,15 @@ level."
        (setq icol (list comment-column icol)))))
     icol))
 
+;; FIXME: this should probably also make sure we are actually looking
+;; at the "end" keyword.
+(defun octave-end-as-array-index-p ()
+  (save-excursion
+    (condition-case nil
+       ;; Check if point is between parens
+       (progn (up-list 1) t)
+      (error nil))))
+
 (defun octave-block-end-offset ()
   (save-excursion
     (octave-backward-up-block 1)