* John W. Eaton <[EMAIL PROTECTED]> [2004-06-07 15:18]:

> On  7-Jun-2004, Dirk Eddelbuettel <[EMAIL PROTECTED]> wrote:
> 
> | On Mon, Jun 07, 2004 at 03:19:10PM -0400, D. Goel wrote:
> | > Package: octave2.1
> | > Version: 2.1.57-2
> | > Severity: wishlist
> | > 
> | > When i use a keyword end when referring to matrix entries, example,
> | > data(2:end), octave-mode.el takes that "end" to end the block and
> | > spoils the indentation going forward.
> | > 
> | > Perhaps the block-end-regexp could use [^:]end instead of end ...
> | 
> | Fair point. Could you possibly prepare a patch?
> 
> You will also need to pay attention to things like "(end" or ",end"
> except the latter is valid in contexts other than indexing
> expressions, so doing it right will probably require more than a
> regexp.
> 
> Also, this should only be a problem with "end", since the other endXXX
> keywords can't be confused.  That's another good reason to use the
> more specific keywords when writing Octave code.

I am trying to clean up the bug record for the octave package in Debian and
I am resurecting this old discussion.  I agree with John that the problem
cannot be easily fixed with a mere regexp.  Also, I agree that people
writing Octave code should stick to the endXXX keywords.  

Therefore, I have a concrete proposal to "fix" the problem reported here
once and forever. The patch attached below drops "end" from the
octave-end-keywords variable, keeping it in octave-reserved-words though.
Furthermore, it drops "end" from the list of closing statements in
octave-block-match-alist.

I hope this patch will be suitable upstream.

-- 
Rafael
--- octave-mod.el-orig  2005-03-04 22:51:04.000000000 +0100
+++ octave-mod.el       2005-03-04 22:50:39.000000000 +0100
@@ -106,14 +106,14 @@
 (defvar octave-else-keywords
   '("case" "catch" "else" "elseif" "otherwise" "unwind_protect_cleanup"))
 (defvar octave-end-keywords
-  '("end" "endfor" "endfunction" "endif" "endswitch" "end_try_catch"
+  '("endfor" "endfunction" "endif" "endswitch" "end_try_catch"
     "end_unwind_protect" "endwhile" "until"))
 
 (defvar octave-reserved-words
   (append octave-begin-keywords
          octave-else-keywords
          octave-end-keywords
-         '("all_va_args" "break" "continue" "global" "gplot" "gsplot"
+         '("all_va_args" "break" "continue" "end" "global" "gplot" "gsplot"
            "replot" "return"))
   "Reserved words in Octave.")
 
@@ -356,14 +356,14 @@
   (concat octave-block-else-regexp "\\|" octave-block-end-regexp))
 (defvar octave-block-match-alist
   '(("do" . ("until"))
-    ("for" . ("end" "endfor"))
-    ("function" . ("end" "endfunction"))
-    ("if" . ("else" "elseif" "end" "endif"))
-    ("switch" . ("case" "otherwise" "end" "endswitch"))
-    ("try" . ("catch" "end" "end_try_catch"))
-    ("unwind_protect" . ("unwind_protect_cleanup" "end"
+    ("for" . ("endfor"))
+    ("function" . ("endfunction"))
+    ("if" . ("else" "elseif" "endif"))
+    ("switch" . ("case" "otherwise" "endswitch"))
+    ("try" . ("catch" "end_try_catch"))
+    ("unwind_protect" . ("unwind_protect_cleanup"
                         "end_unwind_protect"))
-    ("while" . ("end" "endwhile")))
+    ("while" . ("endwhile")))
   "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.")

Reply via email to