unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Raul Laasner <raullaasner@gmail.com>
To: 19809@debbugs.gnu.org
Subject: bug#19809: 24.4; f90-beginning-of-subprogram wrong behavior with string continuation
Date: Sat, 7 Feb 2015 22:25:10 +0200	[thread overview]
Message-ID: <CADOJ32B7+G10Tde-ecSpJGQBkcPwV6q1rUJLSeO3mffU3m_zKg@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 2724 bytes --]

The functions f90-beginning-of-subprogram and f90-end-of-subprogram do not
work correctly if the source file contains lines which begin with the
correct keywords but in fact belong to a continued string. For instance, in
the following,

subroutine foo()
  print*, '&
       end subroutine foo'
  ! The cursor is here
end subroutine foo

f90-beginning-of-subprogram jumps past the line containing 'subroutine
foo()'. A similar example could be written for f90-end-of-subprogram. I
propose to put a small check of whether the previous line ended with an
ampersand into the F90 major mode source file:

--- f90.el    2015-02-07 16:50:56.210519581 +0200
+++ f90_new.el    2015-02-07 16:56:44.997174743 +0200
@@ -1619,6 +1619,14 @@
                 (looking-at "[ \t0-9]*\\(!\\|$\\|#\\)")))
     not-last-statement))

+(defsubst f90-test-string-continuation ()
+  "Return true if the the current is a string continuation."
+  (save-excursion
+    (beginning-of-line)
+    (backward-char)
+    (skip-chars-backward " ")
+    (string= (string (char-before)) "&")))
+
 (defun f90-beginning-of-subprogram ()
   "Move point to the beginning of the current subprogram.
 Return (TYPE NAME), or nil if not found."
@@ -1629,9 +1637,13 @@
                 (re-search-backward f90-program-block-re nil 'move))
       (beginning-of-line)
       (skip-chars-forward " \t0-9")
-      (cond ((setq matching-beg (f90-looking-at-program-block-start))
+      (cond ((and
+          (setq matching-beg (f90-looking-at-program-block-start))
+          (not (f90-test-string-continuation)))
              (setq count (1- count)))
-            ((f90-looking-at-program-block-end)
+            ((and
+          (f90-looking-at-program-block-end)
+          (not (f90-test-string-continuation)))
              (setq count (1+ count)))))
     (beginning-of-line)
     (if (zerop count)
@@ -1654,9 +1666,13 @@
                 (re-search-forward f90-program-block-re nil 'move))
       (beginning-of-line)
       (skip-chars-forward " \t0-9")
-      (cond ((f90-looking-at-program-block-start)
+      (cond ((and
+          (f90-looking-at-program-block-start)
+          (not (f90-test-string-continuation)))
              (setq count (1+ count)))
-            ((setq matching-end (f90-looking-at-program-block-end))
+            ((and
+          (setq matching-end (f90-looking-at-program-block-end))
+          (not (f90-test-string-continuation)))
              (setq count (1- count))))
       (end-of-line))
     ;; This means f90-end-of-subprogram followed by f90-start-of-subprogram


Best wishes,
Raul Laasner

-- 
Raul Laasner
Institute of Physics
University of Tartu
Ravila 14c, 50411, Estonia
e-mail: raullaasner@gmail.com
cell: (+372)5182268

[-- Attachment #2: Type: text/html, Size: 3495 bytes --]

             reply	other threads:[~2015-02-07 20:25 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-07 20:25 Raul Laasner [this message]
2015-02-11  1:27 ` bug#19809: 24.4; f90-beginning-of-subprogram wrong behavior with string continuation Glenn Morris
2015-02-11  9:53   ` Raul Laasner
2015-02-11 19:09     ` Glenn Morris
2015-02-11 19:33       ` Raul Laasner
2015-02-24  7:18         ` Glenn Morris

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADOJ32B7+G10Tde-ecSpJGQBkcPwV6q1rUJLSeO3mffU3m_zKg@mail.gmail.com \
    --to=raullaasner@gmail.com \
    --cc=19809@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).