Function: prolog-clause-start
prolog-clause-start is a byte-compiled function defined in
prolog.el.gz.
Signature
(prolog-clause-start &optional NOT-ALLOW-METHODS)
Documentation
Return the position at the start of the head of the current clause.
If NOTALLOWMETHODS is non-nil then do not match on methods in
objects (relevant only if prolog-system is set to sicstus).
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/prolog.el.gz
(defun prolog-clause-start (&optional not-allow-methods)
"Return the position at the start of the head of the current clause.
If NOTALLOWMETHODS is non-nil then do not match on methods in
objects (relevant only if `prolog-system' is set to `sicstus')."
(save-excursion
(let ((notdone t)
(retval (point-min)))
(end-of-line)
;; SICStus object?
(if (and (not not-allow-methods)
(eq prolog-system 'sicstus)
(prolog-in-object))
(while (and
notdone
;; Search for a head or a fact
(re-search-backward
;; If in object, then find method start.
;; "^[ \t]+[a-z$].*\\(:-\\|&\\|:: {\\|,\\)"
"^[ \t]+[a-z$].*\\(:-\\|&\\|:: {\\)" ; The comma causes
; problems since we cannot assume
; that the line starts at column 0,
; thus we don't know if the line
; is a head or a subgoal
(point-min) t))
(if (>= (prolog-paren-balance) 0) ; To no match on " a) :-"
;; Start of method found
(progn
(setq retval (point))
(setq notdone nil)))
) ; End of while
;; Not in object
(while (and
notdone
;; Search for a text at beginning of a line
;; ######
;; (re-search-backward "^[a-z$']" nil t))
(let ((case-fold-search nil))
(re-search-backward "^\\([[:lower:]$']\\|[:?]-\\)"
nil t)))
(let ((bal (prolog-paren-balance)))
(cond
((> bal 0)
;; Start of clause found
(progn
(setq retval (point))
(setq notdone nil)))
((and (= bal 0)
(looking-at
(format ".*\\(\\.\\|%s\\|!,\\)[ \t]*\\(%%.*\\|\\)$"
prolog-head-delimiter)))
;; Start of clause found if the line ends with a '.' or
;; a prolog-head-delimiter
(progn
(setq retval (point))
(setq notdone nil))
)
(t nil) ; Do nothing
))))
retval)))