emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r112454: * lisp/progmodes/pascal.el (


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112454: * lisp/progmodes/pascal.el (pascal--syntax-propertize): New const.
Date: Sat, 04 May 2013 22:26:38 -0400
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 112454
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Sat 2013-05-04 22:26:38 -0400
message:
  * lisp/progmodes/pascal.el (pascal--syntax-propertize): New const.
  (pascal-mode): Use it.  Use setq-local.
  (pascal-font-lock-keywords): Use backquotes.
  Merge the two entries that handle function definitions.
  * test/indent/pascal.pas: Add test for mis-identified comments.
modified:
  lisp/ChangeLog
  lisp/progmodes/pascal.el
  test/ChangeLog
  test/indent/pascal.pas
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-05-04 23:55:57 +0000
+++ b/lisp/ChangeLog    2013-05-05 02:26:38 +0000
@@ -1,3 +1,10 @@
+2013-05-05  Stefan Monnier  <address@hidden>
+
+       * progmodes/pascal.el (pascal-font-lock-keywords): Use backquotes.
+       Merge the two entries that handle function definitions.
+       (pascal--syntax-propertize): New const.
+       (pascal-mode): Use it.  Use setq-local.
+
 2013-05-04  Glenn Morris  <address@hidden>
 
        * calendar/diary-lib.el (diary-from-outlook-function): New variable.

=== modified file 'lisp/progmodes/pascal.el'
--- a/lisp/progmodes/pascal.el  2013-01-31 00:58:24 +0000
+++ b/lisp/progmodes/pascal.el  2013-05-05 02:26:38 +0000
@@ -158,31 +158,44 @@
 
 
 
-(defconst pascal-font-lock-keywords (purecopy
-  (list
-   '("^[ \t]*\\(function\\|pro\\(cedure\\|gram\\)\\)\\>[ \t]*\\([a-z]\\)"
-     1 font-lock-keyword-face)
-   '("^[ \t]*\\(function\\|pro\\(cedure\\|gram\\)\\)\\>[ 
\t]*\\([a-z][a-z0-9_]*\\)"
-     3 font-lock-function-name-face t)
-;   ("type" "const" "real" "integer" "char" "boolean" "var"
-;    "record" "array" "file")
-   (cons (concat "\\<\\(array\\|boolean\\|c\\(har\\|onst\\)\\|file\\|"
-                "integer\\|re\\(al\\|cord\\)\\|type\\|var\\)\\>")
-        'font-lock-type-face)
-   '("\\<\\(label\\|external\\|forward\\)\\>" . font-lock-constant-face)
-   '("\\<\\([0-9]+\\)[ \t]*:" 1 font-lock-function-name-face)
-;   ("of" "to" "for" "if" "then" "else" "case" "while"
-;    "do" "until" "and" "or" "not" "in" "with" "repeat" "begin" "end")
-   (concat "\\<\\("
-          "and\\|begin\\|case\\|do\\|e\\(lse\\|nd\\)\\|for\\|i[fn]\\|"
-          "not\\|o[fr]\\|repeat\\|t\\(hen\\|o\\)\\|until\\|w\\(hile\\|ith\\)"
-          "\\)\\>")
-   '("\\<\\(goto\\)\\>[ \t]*\\([0-9]+\\)?"
-     1 font-lock-keyword-face)
-   '("\\<\\(goto\\)\\>[ \t]*\\([0-9]+\\)?"
-     2 font-lock-keyword-face t)))
+(defconst pascal-font-lock-keywords
+  `(("\\_<\\(function\\|pro\\(cedure\\|gram\\)\\)[ 
\t]+\\([[:alpha:]][[:alnum:]_]*\\)"
+     (1 font-lock-keyword-face)
+     (3 font-lock-function-name-face))
+    ;; ("type" "const" "real" "integer" "char" "boolean" "var"
+    ;;  "record" "array" "file")
+    (,(concat "\\<\\(array\\|boolean\\|c\\(har\\|onst\\)\\|file\\|"
+              "integer\\|re\\(al\\|cord\\)\\|type\\|var\\)\\>")
+     font-lock-type-face)
+    ("\\<\\(label\\|external\\|forward\\)\\>" . font-lock-constant-face)
+    ("\\<\\([0-9]+\\)[ \t]*:" 1 font-lock-function-name-face)
+    ;; ("of" "to" "for" "if" "then" "else" "case" "while"
+    ;;  "do" "until" "and" "or" "not" "in" "with" "repeat" "begin" "end")
+    ,(concat "\\<\\("
+             "and\\|begin\\|case\\|do\\|e\\(lse\\|nd\\)\\|for\\|i[fn]\\|"
+             
"not\\|o[fr]\\|repeat\\|t\\(hen\\|o\\)\\|until\\|w\\(hile\\|ith\\)"
+             "\\)\\>")
+    ("\\<\\(goto\\)\\>[ \t]*\\([0-9]+\\)?"
+     1 font-lock-keyword-face)
+    ("\\<\\(goto\\)\\>[ \t]*\\([0-9]+\\)?"
+     2 font-lock-keyword-face t))
   "Additional expressions to highlight in Pascal mode.")
-(put 'pascal-mode 'font-lock-defaults '(pascal-font-lock-keywords nil t))
+
+(defconst pascal--syntax-propertize
+  (syntax-propertize-rules
+   ;; The syntax-table settings are too coarse and end up treating /* and (/
+   ;; as comment starters.  Fix it here by removing the "2" from the syntax
+   ;; of the second char of such sequences.
+   ("/\\(\\*\\)" (1 ". 3b"))
+   ("(\\(\\/\\)" (1 (prog1 ". 1c" (forward-char -1) nil)))
+   ;; Pascal uses '' and "" rather than \' and \" to escape quotes.
+   ("''\\|\"\"" (0 (if (save-excursion
+                         (nth 3 (syntax-ppss (match-beginning 0))))
+                       (string-to-syntax ".")
+                     ;; In case of 3 or more quotes in a row, only advance
+                     ;; one quote at a time.
+                     (forward-char -1)
+                     nil)))))
 
 (defcustom pascal-indent-level 3
   "Indentation of Pascal statements with respect to containing block."
@@ -346,23 +359,22 @@
 
 Turning on Pascal mode calls the value of the variable pascal-mode-hook with
 no args, if that value is non-nil."
-  (set (make-local-variable 'local-abbrev-table) pascal-mode-abbrev-table)
-  (set (make-local-variable 'indent-line-function) 'pascal-indent-line)
-  (set (make-local-variable 'comment-indent-function) 'pascal-indent-comment)
-  (set (make-local-variable 'parse-sexp-ignore-comments) nil)
-  (set (make-local-variable 'blink-matching-paren-dont-ignore-comments) t)
-  (set (make-local-variable 'case-fold-search) t)
-  (set (make-local-variable 'comment-start) "{")
-  (set (make-local-variable 'comment-start-skip) "(\\*+ *\\|{ *")
-  (set (make-local-variable 'comment-end) "}")
+  (setq-local local-abbrev-table pascal-mode-abbrev-table)
+  (setq-local indent-line-function 'pascal-indent-line)
+  (setq-local comment-indent-function 'pascal-indent-comment)
+  (setq-local parse-sexp-ignore-comments nil)
+  (setq-local blink-matching-paren-dont-ignore-comments t)
+  (setq-local case-fold-search t)
+  (setq-local comment-start "{")
+  (setq-local comment-start-skip "(\\*+ *\\|{ *")
+  (setq-local comment-end "}")
   (add-hook 'completion-at-point-functions 'pascal-completions-at-point nil t)
   ;; Font lock support
-  (set (make-local-variable 'font-lock-defaults)
-       '(pascal-font-lock-keywords nil t))
+  (setq-local font-lock-defaults '(pascal-font-lock-keywords nil t))
+  (setq-local syntax-propertize-function pascal--syntax-propertize)
   ;; Imenu support
-  (set (make-local-variable 'imenu-generic-expression)
-       pascal-imenu-generic-expression)
-  (set (make-local-variable 'imenu-case-fold-search) t)
+  (setq-local imenu-generic-expression pascal-imenu-generic-expression)
+  (setq-local imenu-case-fold-search t)
   ;; Pascal-mode's own hide/show support.
   (add-to-invisibility-spec '(pascal . t)))
 

=== modified file 'test/ChangeLog'
--- a/test/ChangeLog    2013-04-19 19:56:16 +0000
+++ b/test/ChangeLog    2013-05-05 02:26:38 +0000
@@ -1,3 +1,7 @@
+2013-05-05  Stefan Monnier  <address@hidden>
+
+       * indent/pascal.pas: Add test for mis-identified comments.
+
 2013-04-01  Masatake YAMATO  <address@hidden>
 
        * automated/imenu-tests.el: New file.  (Bug#14112)
@@ -5,7 +9,7 @@
 2013-04-19  Fabián Ezequiel Gallina  <address@hidden>
 
        * automated/python-tests.el (python-imenu-prev-index-position-1):
-       Removed test.
+       Remove test.
        (python-imenu-create-index-1, python-imenu-create-flat-index-1):
        New tests.
 
@@ -62,8 +66,8 @@
        (ruby-move-to-block-skips-percent-literal): Add depth-affecting
        bits inside the examples.
        (ruby-move-to-block-skips-heredoc): New test.
-       (ruby-add-log-current-method-after-inner-class): Lower
-       expectations: move point inside a method, initially.
+       (ruby-add-log-current-method-after-inner-class):
+       Lower expectations: move point inside a method, initially.
 
 2013-02-13  Dmitry Gutov  <address@hidden>
 
@@ -76,8 +80,8 @@
 
 2013-02-03  Chong Yidong  <address@hidden>
 
-       * automated/files.el (file-test--do-local-variables-test): Avoid
-       compilation warning message.
+       * automated/files.el (file-test--do-local-variables-test):
+       Avoid compilation warning message.
 
 2013-01-27  Dmitry Gutov  <address@hidden>
 
@@ -381,7 +385,7 @@
 2011-07-26  Ulf Jasper  <address@hidden>
 
        * automated/icalendar-tests.el (icalendar-tests--compare-strings):
-       Removed, simply use string=.
+       Remove, simply use string=.
        (icalendar--diarytime-to-isotime)
        (icalendar--datetime-to-diary-date)
        (icalendar--datestring-to-isodate)

=== modified file 'test/indent/pascal.pas'
--- a/test/indent/pascal.pas    2013-01-31 01:58:24 +0000
+++ b/test/indent/pascal.pas    2013-05-05 02:26:38 +0000
@@ -6,7 +6,7 @@
 
 This program 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, version 2.
+published by the Free Software Foundation, version 3.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -25,7 +25,10 @@
 
 {$gnu-pascal,I+}
 
+(* second style of comment *)
 // Free-pascal style comment.
+var x:Char = 12 /* 45;   // This /* does not start a comment.
+var x:Char = (/ 4);      // This (/ does not start a comment.
 
 program CRTDemo;
 


reply via email to

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