(defvar prolog-mode-syntax-table nil) (defvar prolog-mode-abbrev-table nil) (defvar prolog-mode-map nil) (defvar prolog-consult-string "reconsult(user). " "*(Re)Consult mode (for C-Prolog and Quintus Prolog). ") (defvar prolog-compile-string "compile(user). " "*Compile mode (for Quintus Prolog).") (defvar prolog-eof-string "end_of_file. " "*String that represents end of file for prolog. nil means send actual operaing system end of file.") (defvar prolog-indent-width 4) (if prolog-mode-syntax-table nil (let ((table (make-syntax-table))) (modify-syntax-entry 95 "w" table) (modify-syntax-entry 92 "\\" table) (modify-syntax-entry 47 "." table) (modify-syntax-entry 42 "." table) (modify-syntax-entry 43 "." table) (modify-syntax-entry 45 "." table) (modify-syntax-entry 61 "." table) (modify-syntax-entry 37 "<" table) (modify-syntax-entry 60 "." table) (modify-syntax-entry 62 "." table) (modify-syntax-entry 39 "\"" table) (setq prolog-mode-syntax-table table))) (define-abbrev-table (quote prolog-mode-abbrev-table) nil) (defun prolog-mode-variables nil (byte-code "I!^ %^IA!^I P%^IA!^ %^IA!^?^IE!^?^IE!^? ^IE!^? ^IE!^? ^II!^? +" [prolog-mode-syntax-table local-abbrev-table prolog-mode-abbrev-table paragraph-start page-delimiter paragraph-separate paragraph-ignore-fill-prefix t indent-line-function comment-start comment-start-skip comment-column comment-indent-hook set-syntax-table make-local-variable "^%%\\|^$\\|" prolog-indent-line "%" "%+ *" 48 prolog-comment-indent] 11)) (defun prolog-mode-commands (map) (byte-code "AAA#^AAA#+" [map define-key " " prolog-indent-line "" prolog-consult-region] 5)) (if prolog-mode-map nil (setq prolog-mode-map (make-sparse-keymap)) (prolog-mode-commands prolog-mode-map)) (defun prolog-mode nil "\ Major mode for editing Prolog code for Prologs. Blank lines and `%%...' separate paragraphs. `%'s start comments. Commands: \\{prolog-mode-map} Entry to this mode calls the value of prolog-mode-hook if that value is non-nil." (interactive) (byte-code "EA ^A!^?^?^E ^EE!+" [prolog-mode-map major-mode mode-name nil kill-all-local-variables use-local-map prolog-mode "Prolog" prolog-mode-variables run-hooks prolog-mode-hook] 5)) (defun prolog-indent-line (&optional whole-exp) "\ Indent current line as Prolog code. With argument, indent any additional lines of the same clause rigidly along with this one (not yet)." (interactive "p") (byte-code "EA d`ZAA ^`%^AC!^EiZ!f\" `\"^j^d Z`V.6 (defun prolog-indent-level nil "\ Compute prolog indentation level." (byte-code "SE ^EE!^II!f .i " "%%[^%]" "(" end-of-prolog-clause forward-char "[,(;>]" "[^,]" "-" "[^.]"] 20)) (defun end-of-prolog-clause nil "\ Go to end of clause in this line." (byte-code "AA!^SA ^`)A A#. (defun prolog-comment-indent nil "\ Compute prolog comment indentation." (byte-code "AA!f (defvar inferior-prolog-mode-map nil) (defun inferior-prolog-mode nil "\ Major mode for interacting with an inferior Prolog process. The following commands are available: \\{inferior-prolog-mode-map} Entry to this mode calls the value of prolog-mode-hook with no arguments, if that value is non-nil. Likewise with the value of shell-mode-hook. prolog-mode-hook is called after shell-mode-hook. You can send text to the inferior Prolog from other buffers using the commands send-region, send-string and \\[prolog-consult-region]. Commands: Tab indents for Prolog; with argument, shifts rest of expression rigidly with the current line. Paragraphs are separated only by blank lines and '%%'. '%'s start comments. Return at end of buffer sends line as input. Return not at end copies rest of line to end and sends it. \\[shell-send-eof] sends end-of-file as input. \\[kill-shell-input] and \\[backward-kill-word] are kill commands, imitating normal Unix input editing. \\[interrupt-shell-subjob] interrupts the shell or its current subjob if any. \\[stop-shell-subjob] stops, likewise. \\[quit-shell-subjob] sends quit signal, likewise." (interactive) (byte-code "?E ^?^?^?^I ^II!^ f (defun run-prolog nil "\ Run an inferior Prolog process, input and output via buffer *prolog*." (interactive) (byte-code "?AA!^AAAA\"!^A +" [nil require shell switch-to-buffer make-shell "prolog" inferior-prolog-mode] 5)) (defun prolog-consult-region (compile beg end) "\ Send the region to the Prolog process made by M-x run-prolog. If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode." (interactive "P r") (byte-code "?Sf \"^EE #^CEE\"^ " process-send-eof] 7)) (defun prolog-consult-region-and-go (compile beg end) "\ Send the region to the inferior Prolog, and switch to *prolog* buffer. If COMPILE (prefix arg) is not nil, use compile mode rather than consult mode." (interactive "P r") (byte-code "EA #^AA!+" [compile beg end nil prolog-consult-region switch-to-buffer "*prolog*"] 4)) .