annotate lisp/obsolete/scribe.el @ 66046:f56e7dee3fe4

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