aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes
diff options
context:
space:
mode:
authorStefan Monnier2015-09-29 23:28:32 -0400
committerStefan Monnier2015-09-29 23:28:32 -0400
commite1877439d889e5584dabfd769338367f186e0741 (patch)
treed95a7ebd31869c1bad402739b1d8de043f722ce7 /lisp/progmodes
parent300bce3a09da12396a1a686f20ac16acefe80cbc (diff)
downloademacs-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/progmodes')
-rw-r--r--lisp/progmodes/prolog.el36
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