diff options
| author | Juanma Barranquero | 2003-05-30 23:24:41 +0000 |
|---|---|---|
| committer | Juanma Barranquero | 2003-05-30 23:24:41 +0000 |
| commit | db47d2ab7a8fb71f995539b33d4c1ec1d1019f07 (patch) | |
| tree | 24a21220da5fe216c59fa47ad34a2449f9725e4f /lisp/textmodes | |
| parent | 17cd3083a59cde81052603790db330b3d71ebdea (diff) | |
| download | emacs-db47d2ab7a8fb71f995539b33d4c1ec1d1019f07.tar.gz emacs-db47d2ab7a8fb71f995539b33d4c1ec1d1019f07.zip | |
Moved to obsolete/.
Diffstat (limited to 'lisp/textmodes')
| -rw-r--r-- | lisp/textmodes/scribe.el | 324 |
1 files changed, 0 insertions, 324 deletions
diff --git a/lisp/textmodes/scribe.el b/lisp/textmodes/scribe.el deleted file mode 100644 index 16067d19638..00000000000 --- a/lisp/textmodes/scribe.el +++ /dev/null | |||
| @@ -1,324 +0,0 @@ | |||
| 1 | ;;; scribe.el --- scribe mode, and its idiosyncratic commands | ||
| 2 | |||
| 3 | ;; Copyright (C) 1985 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; Maintainer: FSF | ||
| 6 | ;; Keywords: wp | ||
| 7 | |||
| 8 | ;; This file is part of GNU Emacs. | ||
| 9 | |||
| 10 | ;; GNU Emacs is free software; you can redistribute it and/or modify | ||
| 11 | ;; it under the terms of the GNU General Public License as published by | ||
| 12 | ;; the Free Software Foundation; either version 2, or (at your option) | ||
| 13 | ;; any later version. | ||
| 14 | |||
| 15 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 16 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | ;; GNU General Public License for more details. | ||
| 19 | |||
| 20 | ;; You should have received a copy of the GNU General Public License | ||
| 21 | ;; along with GNU Emacs; see the file COPYING. If not, write to the | ||
| 22 | ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
| 23 | ;; Boston, MA 02111-1307, USA. | ||
| 24 | |||
| 25 | ;;; Commentary: | ||
| 26 | |||
| 27 | ;; A major mode for editing source in written for the Scribe text formatter. | ||
| 28 | ;; Knows about Scribe syntax and standard layout rules. The command to | ||
| 29 | ;; run Scribe on a buffer is bogus; someone interested should fix it. | ||
| 30 | |||
| 31 | ;;; Code: | ||
| 32 | |||
| 33 | (defgroup scribe nil | ||
| 34 | "Scribe mode." | ||
| 35 | :prefix "scribe-" | ||
| 36 | :group 'wp) | ||
| 37 | |||
| 38 | (defvar scribe-mode-syntax-table nil | ||
| 39 | "Syntax table used while in scribe mode.") | ||
| 40 | |||
| 41 | (defvar scribe-mode-abbrev-table nil | ||
| 42 | "Abbrev table used while in scribe mode.") | ||
| 43 | |||
| 44 | (defcustom scribe-fancy-paragraphs nil | ||
| 45 | "*Non-nil makes Scribe mode use a different style of paragraph separation." | ||
| 46 | :type 'boolean | ||
| 47 | :group 'scribe) | ||
| 48 | |||
| 49 | (defcustom scribe-electric-quote nil | ||
| 50 | "*Non-nil makes insert of double quote use `` or '' depending on context." | ||
| 51 | :type 'boolean | ||
| 52 | :group 'scribe) | ||
| 53 | |||
| 54 | (defcustom scribe-electric-parenthesis nil | ||
| 55 | "*Non-nil makes parenthesis char ( (]}> ) automatically insert its close | ||
| 56 | if typed after an @Command form." | ||
| 57 | :type 'boolean | ||
| 58 | :group 'scribe) | ||
| 59 | |||
| 60 | (defconst scribe-open-parentheses "[({<" | ||
| 61 | "Open parenthesis characters for Scribe.") | ||
| 62 | |||
| 63 | (defconst scribe-close-parentheses "])}>" | ||
| 64 | "Close parenthesis characters for Scribe. | ||
| 65 | These should match up with `scribe-open-parenthesis'.") | ||
| 66 | |||
| 67 | (if (null scribe-mode-syntax-table) | ||
| 68 | (let ((st (syntax-table))) | ||
| 69 | (unwind-protect | ||
| 70 | (progn | ||
| 71 | (setq scribe-mode-syntax-table (copy-syntax-table | ||
| 72 | text-mode-syntax-table)) | ||
| 73 | (set-syntax-table scribe-mode-syntax-table) | ||
| 74 | (modify-syntax-entry ?\" " ") | ||
| 75 | (modify-syntax-entry ?\\ " ") | ||
| 76 | (modify-syntax-entry ?@ "w ") | ||
| 77 | (modify-syntax-entry ?< "(> ") | ||
| 78 | (modify-syntax-entry ?> ")< ") | ||
| 79 | (modify-syntax-entry ?[ "(] ") | ||
| 80 | (modify-syntax-entry ?] ")[ ") | ||
| 81 | (modify-syntax-entry ?{ "(} ") | ||
| 82 | (modify-syntax-entry ?} "){ ") | ||
| 83 | (modify-syntax-entry ?' "w ")) | ||
| 84 | (set-syntax-table st)))) | ||
| 85 | |||
| 86 | (defvar scribe-mode-map nil) | ||
| 87 | |||
| 88 | (if scribe-mode-map | ||
| 89 | nil | ||
| 90 | (setq scribe-mode-map (make-sparse-keymap)) | ||
| 91 | (define-key scribe-mode-map "\t" 'scribe-tab) | ||
| 92 | (define-key scribe-mode-map "\e\t" 'tab-to-tab-stop) | ||
| 93 | (define-key scribe-mode-map "\es" 'center-line) | ||
| 94 | (define-key scribe-mode-map "\e}" 'up-list) | ||
| 95 | (define-key scribe-mode-map "\eS" 'center-paragraph) | ||
| 96 | (define-key scribe-mode-map "\"" 'scribe-insert-quote) | ||
| 97 | (define-key scribe-mode-map "(" 'scribe-parenthesis) | ||
| 98 | (define-key scribe-mode-map "[" 'scribe-parenthesis) | ||
| 99 | (define-key scribe-mode-map "{" 'scribe-parenthesis) | ||
| 100 | (define-key scribe-mode-map "<" 'scribe-parenthesis) | ||
| 101 | (define-key scribe-mode-map "\C-c\C-c" 'scribe-chapter) | ||
| 102 | (define-key scribe-mode-map "\C-c\C-t" 'scribe-section) | ||
| 103 | (define-key scribe-mode-map "\C-c\C-s" 'scribe-subsection) | ||
| 104 | (define-key scribe-mode-map "\C-c\C-v" 'scribe-insert-environment) | ||
| 105 | (define-key scribe-mode-map "\C-c\C-e" 'scribe-bracket-region-be) | ||
| 106 | (define-key scribe-mode-map "\C-c[" 'scribe-begin) | ||
| 107 | (define-key scribe-mode-map "\C-c]" 'scribe-end) | ||
| 108 | (define-key scribe-mode-map "\C-c\C-i" 'scribe-italicize-word) | ||
| 109 | (define-key scribe-mode-map "\C-c\C-b" 'scribe-bold-word) | ||
| 110 | (define-key scribe-mode-map "\C-c\C-u" 'scribe-underline-word)) | ||
| 111 | |||
| 112 | ;;;###autoload | ||
| 113 | (define-derived-mode scribe-mode text-mode "Scribe" | ||
| 114 | "Major mode for editing files of Scribe (a text formatter) source. | ||
| 115 | Scribe-mode is similar to text-mode, with a few extra commands added. | ||
| 116 | \\{scribe-mode-map} | ||
| 117 | |||
| 118 | Interesting variables: | ||
| 119 | |||
| 120 | `scribe-fancy-paragraphs' | ||
| 121 | Non-nil makes Scribe mode use a different style of paragraph separation. | ||
| 122 | |||
| 123 | `scribe-electric-quote' | ||
| 124 | Non-nil makes insert of double quote use `` or '' depending on context. | ||
| 125 | |||
| 126 | `scribe-electric-parenthesis' | ||
| 127 | Non-nil makes an open-parenthesis char (one of `([<{') | ||
| 128 | automatically insert its close if typed after an @Command form." | ||
| 129 | (set (make-local-variable 'comment-start) "@Comment[") | ||
| 130 | (set (make-local-variable 'comment-start-skip) (concat "@Comment[" scribe-open-parentheses "]")) | ||
| 131 | (set (make-local-variable 'comment-column) 0) | ||
| 132 | (set (make-local-variable 'comment-end) "]") | ||
| 133 | (set (make-local-variable 'paragraph-start) | ||
| 134 | (concat "\\([\n\f]\\)\\|\\(@\\w+[" | ||
| 135 | scribe-open-parentheses | ||
| 136 | "].*[" | ||
| 137 | scribe-close-parentheses | ||
| 138 | "]$\\)")) | ||
| 139 | (set (make-local-variable 'paragraph-separate) | ||
| 140 | (if scribe-fancy-paragraphs paragraph-start "$")) | ||
| 141 | (set (make-local-variable 'sentence-end) | ||
| 142 | "\\([.?!]\\|@:\\)[]\"')}]*\\($\\| $\\|\t\\| \\)[ \t\n]*") | ||
| 143 | (set (make-local-variable 'compile-command) | ||
| 144 | (concat "scribe " (buffer-file-name)))) | ||
| 145 | |||
| 146 | (defun scribe-tab () | ||
| 147 | (interactive) | ||
| 148 | (insert "@\\")) | ||
| 149 | |||
| 150 | ;; This algorithm could probably be improved somewhat. | ||
| 151 | ;; Right now, it loses seriously... | ||
| 152 | |||
| 153 | (defun scribe () | ||
| 154 | "Run Scribe on the current buffer." | ||
| 155 | (interactive) | ||
| 156 | (call-interactively 'compile)) | ||
| 157 | |||
| 158 | (defun scribe-envelop-word (string count) | ||
| 159 | "Surround current word with Scribe construct @STRING[...]. | ||
| 160 | COUNT specifies how many words to surround. A negative count means | ||
| 161 | to skip backward." | ||
| 162 | (let ((spos (point)) (epos (point)) (ccoun 0) noparens) | ||
| 163 | (if (not (zerop count)) | ||
| 164 | (progn (if (= (char-syntax (preceding-char)) ?w) | ||
| 165 | (forward-sexp (min -1 count))) | ||
| 166 | (setq spos (point)) | ||
| 167 | (if (looking-at (concat "@\\w[" scribe-open-parentheses "]")) | ||
| 168 | (forward-char 2) | ||
| 169 | (goto-char epos) | ||
| 170 | (skip-chars-backward "\\W") | ||
| 171 | (forward-char -1)) | ||
| 172 | (forward-sexp (max count 1)) | ||
| 173 | (setq epos (point)))) | ||
| 174 | (goto-char spos) | ||
| 175 | (while (and (< ccoun (length scribe-open-parentheses)) | ||
| 176 | (save-excursion | ||
| 177 | (or (search-forward (char-to-string | ||
| 178 | (aref scribe-open-parentheses ccoun)) | ||
| 179 | epos t) | ||
| 180 | (search-forward (char-to-string | ||
| 181 | (aref scribe-close-parentheses ccoun)) | ||
| 182 | epos t))) | ||
| 183 | (setq ccoun (1+ ccoun)))) | ||
| 184 | (if (>= ccoun (length scribe-open-parentheses)) | ||
| 185 | (progn (goto-char epos) | ||
| 186 | (insert "@end(" string ")") | ||
| 187 | (goto-char spos) | ||
| 188 | (insert "@begin(" string ")")) | ||
| 189 | (goto-char epos) | ||
| 190 | (insert (aref scribe-close-parentheses ccoun)) | ||
| 191 | (goto-char spos) | ||
| 192 | (insert "@" string (aref scribe-open-parentheses ccoun)) | ||
| 193 | (goto-char epos) | ||
| 194 | (forward-char 3) | ||
| 195 | (skip-chars-forward scribe-close-parentheses)))) | ||
| 196 | |||
| 197 | (defun scribe-underline-word (count) | ||
| 198 | "Underline COUNT words around point by means of Scribe constructs." | ||
| 199 | (interactive "p") | ||
| 200 | (scribe-envelop-word "u" count)) | ||
| 201 | |||
| 202 | (defun scribe-bold-word (count) | ||
| 203 | "Boldface COUNT words around point by means of Scribe constructs." | ||
| 204 | (interactive "p") | ||
| 205 | (scribe-envelop-word "b" count)) | ||
| 206 | |||
| 207 | (defun scribe-italicize-word (count) | ||
| 208 | "Italicize COUNT words around point by means of Scribe constructs." | ||
| 209 | (interactive "p") | ||
| 210 | (scribe-envelop-word "i" count)) | ||
| 211 | |||
| 212 | (defun scribe-begin () | ||
| 213 | (interactive) | ||
| 214 | (insert "\n") | ||
| 215 | (forward-char -1) | ||
| 216 | (scribe-envelop-word "Begin" 0) | ||
| 217 | (re-search-forward (concat "[" scribe-open-parentheses "]"))) | ||
| 218 | |||
| 219 | (defun scribe-end () | ||
| 220 | (interactive) | ||
| 221 | (insert "\n") | ||
| 222 | (forward-char -1) | ||
| 223 | (scribe-envelop-word "End" 0) | ||
| 224 | (re-search-forward (concat "[" scribe-open-parentheses "]"))) | ||
| 225 | |||
| 226 | (defun scribe-chapter () | ||
| 227 | (interactive) | ||
| 228 | (insert "\n") | ||
| 229 | (forward-char -1) | ||
| 230 | (scribe-envelop-word "Chapter" 0) | ||
| 231 | (re-search-forward (concat "[" scribe-open-parentheses "]"))) | ||
| 232 | |||
| 233 | (defun scribe-section () | ||
| 234 | (interactive) | ||
| 235 | (insert "\n") | ||
| 236 | (forward-char -1) | ||
| 237 | (scribe-envelop-word "Section" 0) | ||
| 238 | (re-search-forward (concat "[" scribe-open-parentheses "]"))) | ||
| 239 | |||
| 240 | (defun scribe-subsection () | ||
| 241 | (interactive) | ||
| 242 | (insert "\n") | ||
| 243 | (forward-char -1) | ||
| 244 | (scribe-envelop-word "SubSection" 0) | ||
| 245 | (re-search-forward (concat "[" scribe-open-parentheses "]"))) | ||
| 246 | |||
| 247 | (defun scribe-bracket-region-be (env min max) | ||
| 248 | (interactive "sEnvironment: \nr") | ||
| 249 | (save-excursion | ||
| 250 | (goto-char max) | ||
| 251 | (insert "@end(" env ")\n") | ||
| 252 | (goto-char min) | ||
| 253 | (insert "@begin(" env ")\n"))) | ||
| 254 | |||
| 255 | (defun scribe-insert-environment (env) | ||
| 256 | (interactive "sEnvironment: ") | ||
| 257 | (scribe-bracket-region-be env (point) (point)) | ||
| 258 | (forward-line 1) | ||
| 259 | (insert ?\n) | ||
| 260 | (forward-char -1)) | ||
| 261 | |||
| 262 | (defun scribe-insert-quote (count) | ||
| 263 | "Insert ``, '' or \" according to preceding character. | ||
| 264 | If `scribe-electric-quote' is non-nil, insert ``, '' or \" according | ||
| 265 | to preceding character. With numeric arg N, always insert N \" characters. | ||
| 266 | Else just insert \"." | ||
| 267 | (interactive "P") | ||
| 268 | (if (or count (not scribe-electric-quote)) | ||
| 269 | (self-insert-command (prefix-numeric-value count)) | ||
| 270 | (let (lastfore lastback lastquote) | ||
| 271 | (insert | ||
| 272 | (cond | ||
| 273 | ((= (preceding-char) ?\\) ?\") | ||
| 274 | ((bobp) "``") | ||
| 275 | (t | ||
| 276 | (setq lastfore (save-excursion (and (search-backward | ||
| 277 | "``" (- (point) 1000) t) | ||
| 278 | (point))) | ||
| 279 | lastback (save-excursion (and (search-backward | ||
| 280 | "''" (- (point) 1000) t) | ||
| 281 | (point))) | ||
| 282 | lastquote (save-excursion (and (search-backward | ||
| 283 | "\"" (- (point) 100) t) | ||
| 284 | (point)))) | ||
| 285 | (if (not lastquote) | ||
| 286 | (cond ((not lastfore) "``") | ||
| 287 | ((not lastback) "''") | ||
| 288 | ((> lastfore lastback) "''") | ||
| 289 | (t "``")) | ||
| 290 | (cond ((and (not lastback) (not lastfore)) "\"") | ||
| 291 | ((and lastback (not lastfore) (> lastquote lastback)) "\"") | ||
| 292 | ((and lastback (not lastfore) (> lastback lastquote)) "``") | ||
| 293 | ((and lastfore (not lastback) (> lastquote lastfore)) "\"") | ||
| 294 | ((and lastfore (not lastback) (> lastfore lastquote)) "''") | ||
| 295 | ((and (> lastquote lastfore) (> lastquote lastback)) "\"") | ||
| 296 | ((> lastfore lastback) "''") | ||
| 297 | (t "``"))))))))) | ||
| 298 | |||
| 299 | (defun scribe-parenthesis (count) | ||
| 300 | "If scribe-electric-parenthesis is non-nil, insertion of an open-parenthesis | ||
| 301 | character inserts the following close parenthesis character if the | ||
| 302 | preceding text is of the form @Command." | ||
| 303 | (interactive "P") | ||
| 304 | (self-insert-command (prefix-numeric-value count)) | ||
| 305 | (let (at-command paren-char point-save) | ||
| 306 | (if (or count (not scribe-electric-parenthesis)) | ||
| 307 | nil | ||
| 308 | (save-excursion | ||
| 309 | (forward-char -1) | ||
| 310 | (setq point-save (point)) | ||
| 311 | (skip-chars-backward (concat "^ \n\t\f" scribe-open-parentheses)) | ||
| 312 | (setq at-command (and (equal (following-char) ?@) | ||
| 313 | (/= (point) (1- point-save))))) | ||
| 314 | (if (and at-command | ||
| 315 | (setq paren-char | ||
| 316 | (string-match (regexp-quote | ||
| 317 | (char-to-string (preceding-char))) | ||
| 318 | scribe-open-parentheses))) | ||
| 319 | (save-excursion | ||
| 320 | (insert (aref scribe-close-parentheses paren-char))))))) | ||
| 321 | |||
| 322 | (provide 'scribe) | ||
| 323 | |||
| 324 | ;;; scribe.el ends here | ||