* 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.
This commit is contained in:
parent
cbee213171
commit
aa7dab9754
4 changed files with 70 additions and 44 deletions
|
@ -1,3 +1,10 @@
|
|||
2013-05-05 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* 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 <rgm@gnu.org>
|
||||
|
||||
* calendar/diary-lib.el (diary-from-outlook-function): New variable.
|
||||
|
|
|
@ -158,31 +158,44 @@
|
|||
|
||||
|
||||
|
||||
(defconst pascal-font-lock-keywords (purecopy
|
||||
(list
|
||||
'("^[ \t]*\\(function\\|pro\\(cedure\\|gram\\)\\)\\>[ \t]*\\([a-z]\\)"
|
||||
(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)
|
||||
'("^[ \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)))
|
||||
("\\<\\(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 @@ See also the user variables `pascal-type-keywords', `pascal-start-keywords' and
|
|||
|
||||
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)))
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2013-05-05 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* indent/pascal.pas: Add test for mis-identified comments.
|
||||
|
||||
2013-04-01 Masatake YAMATO <yamato@redhat.com>
|
||||
|
||||
* automated/imenu-tests.el: New file. (Bug#14112)
|
||||
|
@ -5,7 +9,7 @@
|
|||
2013-04-19 Fabián Ezequiel Gallina <fgallina@gnu.org>
|
||||
|
||||
* 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 <dgutov@yandex.ru>
|
||||
|
||||
|
@ -76,8 +80,8 @@
|
|||
|
||||
2013-02-03 Chong Yidong <cyd@gnu.org>
|
||||
|
||||
* 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 <dgutov@yandex.ru>
|
||||
|
||||
|
@ -381,7 +385,7 @@
|
|||
2011-07-26 Ulf Jasper <ulf.jasper@web.de>
|
||||
|
||||
* 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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue