diff options
| author | Stefan Monnier | 2015-09-29 23:28:32 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2015-09-29 23:28:32 -0400 |
| commit | e1877439d889e5584dabfd769338367f186e0741 (patch) | |
| tree | d95a7ebd31869c1bad402739b1d8de043f722ce7 /lisp | |
| parent | 300bce3a09da12396a1a686f20ac16acefe80cbc (diff) | |
| download | emacs-e1877439d889e5584dabfd769338367f186e0741.tar.gz emacs-e1877439d889e5584dabfd769338367f186e0741.zip | |
* lisp/progmodes/prolog.el: Fix various indentation cases
(prolog-operator-chars): New const (add \\).
(prolog-smie-forward-token, prolog-smie-backward-token): Use it.
(prolog-smie-rules): Add rules according to bug#21526.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/progmodes/prolog.el | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el index 3d9b0c322ab..ff2769e7493 100644 --- a/lisp/progmodes/prolog.el +++ b/lisp/progmodes/prolog.el | |||
| @@ -840,6 +840,8 @@ This is really kludgy, and unneeded (i.e. obsolete) in Emacs>=24." | |||
| 840 | 840 | ||
| 841 | (require 'smie) | 841 | (require 'smie) |
| 842 | 842 | ||
| 843 | (defconst prolog-operator-chars "-\\\\#&*+./:<=>?@\\^`~") | ||
| 844 | |||
| 843 | (defun prolog-smie-forward-token () | 845 | (defun prolog-smie-forward-token () |
| 844 | ;; FIXME: Add support for 0'<char>, if needed after adding it to | 846 | ;; FIXME: Add support for 0'<char>, if needed after adding it to |
| 845 | ;; syntax-propertize-functions. | 847 | ;; syntax-propertize-functions. |
| @@ -848,7 +850,7 @@ This is really kludgy, and unneeded (i.e. obsolete) in Emacs>=24." | |||
| 848 | (point) | 850 | (point) |
| 849 | (progn (cond | 851 | (progn (cond |
| 850 | ((looking-at "[!;]") (forward-char 1)) | 852 | ((looking-at "[!;]") (forward-char 1)) |
| 851 | ((not (zerop (skip-chars-forward "#&*+-./:<=>?@\\^`~")))) | 853 | ((not (zerop (skip-chars-forward prolog-operator-chars)))) |
| 852 | ((not (zerop (skip-syntax-forward "w_'")))) | 854 | ((not (zerop (skip-syntax-forward "w_'")))) |
| 853 | ;; In case of non-ASCII punctuation. | 855 | ;; In case of non-ASCII punctuation. |
| 854 | ((not (zerop (skip-syntax-forward "."))))) | 856 | ((not (zerop (skip-syntax-forward "."))))) |
| @@ -861,8 +863,8 @@ This is really kludgy, and unneeded (i.e. obsolete) in Emacs>=24." | |||
| 861 | (buffer-substring-no-properties | 863 | (buffer-substring-no-properties |
| 862 | (point) | 864 | (point) |
| 863 | (progn (cond | 865 | (progn (cond |
| 864 | ((memq (char-before) '(?! ?\;)) (forward-char -1)) | 866 | ((memq (char-before) '(?! ?\; ?\,)) (forward-char -1)) |
| 865 | ((not (zerop (skip-chars-backward "#&*+-./:<=>?@\\^`~")))) | 867 | ((not (zerop (skip-chars-backward prolog-operator-chars)))) |
| 866 | ((not (zerop (skip-syntax-backward "w_'")))) | 868 | ((not (zerop (skip-syntax-backward "w_'")))) |
| 867 | ;; In case of non-ASCII punctuation. | 869 | ;; In case of non-ASCII punctuation. |
| 868 | ((not (zerop (skip-syntax-backward "."))))) | 870 | ((not (zerop (skip-syntax-backward "."))))) |
| @@ -947,12 +949,36 @@ This is really kludgy, and unneeded (i.e. obsolete) in Emacs>=24." | |||
| 947 | ;; ; c) | 949 | ;; ; c) |
| 948 | ;; | 950 | ;; |
| 949 | ;; based on the space between the open paren and the "a". | 951 | ;; based on the space between the open paren and the "a". |
| 950 | (unless (and (smie-rule-parent-p "(") | 952 | (unless (and (smie-rule-parent-p "(" ";") |
| 951 | (save-excursion | 953 | (save-excursion |
| 952 | (smie-indent-forward-token) | 954 | (smie-indent-forward-token) |
| 953 | (smie-backward-sexp 'halfsexp) | 955 | (smie-backward-sexp 'halfsexp) |
| 954 | (not (eq ?\( (char-before))))) | 956 | (if (smie-rule-parent-p "(") |
| 957 | (not (eq (char-before) ?\()) | ||
| 958 | (smie-indent-backward-token) | ||
| 959 | (smie-rule-bolp)))) | ||
| 955 | prolog-indent-width)) | 960 | prolog-indent-width)) |
| 961 | (`(:after . ";") | ||
| 962 | ;; Align with same-line comment as in: | ||
| 963 | ;; ; %% Toto | ||
| 964 | ;; foo | ||
| 965 | (and (smie-rule-bolp) | ||
| 966 | (looking-at ";[ \t]*\\(%\\)") | ||
| 967 | (let ((offset (- (save-excursion (goto-char (match-beginning 1)) | ||
| 968 | (current-column)) | ||
| 969 | (current-column)))) | ||
| 970 | ;; Only do it for small offsets, since the comment may actually be | ||
| 971 | ;; an "end-of-line" comment at comment-column! | ||
| 972 | (if (<= offset prolog-indent-width) offset)))) | ||
| 973 | (`(:after . ",") | ||
| 974 | ;; Special indent for: | ||
| 975 | ;; foopredicate(x) :- !, | ||
| 976 | ;; toto. | ||
| 977 | (and (eq (char-before) ?!) | ||
| 978 | (save-excursion | ||
| 979 | (smie-indent-backward-token) ;Skip ! | ||
| 980 | (equal ":-" (car (smie-indent-backward-token)))) | ||
| 981 | (smie-rule-parent prolog-indent-width))) | ||
| 956 | (`(:after . ,(or `":-" `"-->")) prolog-indent-width))) | 982 | (`(:after . ,(or `":-" `"-->")) prolog-indent-width))) |
| 957 | 983 | ||
| 958 | 984 | ||