annotate lisp/woman.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents 5b60124f1c0a
children 2ea9fa348c21
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1 ;;; woman.el --- browse UN*X manual pages `wo (without) man'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59552
diff changeset
3 ;; Copyright (C) 2000, 2002, 2004, 2005 Free Software Foundation, Inc.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
5 ;; Author: Francis J. Wright <F.J.Wright@qmul.ac.uk>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
6 ;; Maintainer: Francis J. Wright <F.J.Wright@qmul.ac.uk>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
7 ;; Keywords: help, unix
56256
72d8528b9070 Update Eli's email address.
Eli Zaretskii <eliz@gnu.org>
parents: 55895
diff changeset
8 ;; Adapted-By: Eli Zaretskii <eliz@gnu.org>
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38112
diff changeset
9 ;; Version: see `woman-version'
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
10 ;; URL: http://centaur.maths.qmul.ac.uk/Emacs/WoMan/
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
11
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
12 ;; This file is part of GNU Emacs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
13
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
14 ;; GNU Emacs is free software; you can redistribute it and/or modify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
16 ;; the Free Software Foundation; either version 2, or (at your option)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
17 ;; any later version.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
18
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
22 ;; GNU General Public License for more details.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
23
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
24 ;; You should have received a copy of the GNU General Public License
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
25 ;; along with GNU Emacs; see the file COPYING. If not, write to the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
27 ;; Boston, MA 02111-1307, USA.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
28
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
29 ;;; Commentary:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
30
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
31 ;; WoMan implements a subset of the formatting performed by the Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
32 ;; `man' (or `manual-entry') command to format a UN*X manual `page'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
33 ;; for display, but without calling any external programs. It is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
34 ;; intended to emulate the whole of the -man macro package, plus those
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
35 ;; ?roff requests that are most commonly used in man pages. However,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
36 ;; the emulation is modified to include the reformatting done by the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
37 ;; Emacs `man' command. No hyphenation is performed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
38
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
39 ;; Advantages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
40
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
41 ;; Much more direct, does not require any external programs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
42 ;; Supports completion on man page names.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
43
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
44 ;; Disadvantages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
45
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
46 ;; Not a complete emulation. Currently no support for eqn or tbl.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
47 ;; Slightly slower for large man pages (but usually faster for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
48 ;; small- and medium-size pages).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
49
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
50 ;; This browser works quite well on simple well-written man files. It
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
51 ;; works less well on idiosyncratic files that `break the rules' or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
52 ;; use the more obscure ?roff requests directly. Current test results
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
53 ;; are available in the file woman.status.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
54
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
55 ;; WoMan supports the use of compressed man files via
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
56 ;; `auto-compression-mode' by turning it on if necessary. But you may
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
57 ;; need to adjust the user option `woman-file-compression-regexp'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
58
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
59 ;; Read on for (currently) the only documentation for WoMan!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
60
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
61 ;; See also the documentation for the WoMan interactive commands and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
62 ;; user option variables, all of which begin with the prefix `woman-'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
63 ;; This can be done most easily by loading WoMan and then running the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
64 ;; command `woman-mini-help', or selecting the WoMan menu option `Mini
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
65 ;; Help' when WoMan is running.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
66
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
67 ;; WoMan is still under development! Please let me know what doesn't
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
68 ;; work -- I am adding and improving functionality as testing shows
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
69 ;; that it is necessary. See below for guidance on reporting bugs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
70
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
71 ;; Recommended use
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
72 ;; ===============
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
73
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
74 ;; Put this in your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
75 ;; (autoload 'woman "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
76 ;; "Decode and browse a UN*X man page." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
77 ;; (autoload 'woman-find-file "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
78 ;; "Find, decode and browse a specific UN*X man-page file." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
79
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
80 ;; Then either (1 -- *RECOMMENDED*): If the `MANPATH' environment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
81 ;; variable is set then WoMan will use it; otherwise you may need to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
82 ;; reset the Lisp variable `woman-manpath', and you may also want to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
83 ;; set the Lisp variable `woman-path'. Please see the online
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
84 ;; documentation for these variables. Now you can execute the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
85 ;; extended command `woman', enter or select a manual entry topic,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
86 ;; using completion, and if necessary select a filename, using
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
87 ;; completion. By default, WoMan suggests the word nearest to the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
88 ;; cursor in the current buffer as the topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
89
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
90 ;; Or (2): Execute the extended command `woman-find-file' and enter a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
91 ;; filename, using completion. This mode of execution may be useful
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
92 ;; for temporary files outside the standard UN*X manual directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
93 ;; structure.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
94
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
95 ;; Or (3): Put the next two sexpr's in your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
96 ;; (autoload 'woman-dired-find-file "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
97 ;; "In dired, run the WoMan man-page browser on this file." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
98 ;; (add-hook 'dired-mode-hook
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
99 ;; (lambda ()
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
100 ;; (define-key dired-mode-map "W" 'woman-dired-find-file)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
101 ;; and open the directory containing the man page file using dired,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
102 ;; put the cursor on the file, and press `W'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
103
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
104 ;; In each case, the result should (!) be a buffer in Man mode showing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
105 ;; a formatted manual entry. When called from WoMan, Man mode should
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
106 ;; work as advertised, but modified where necessary in the context of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
107 ;; WoMan. (However, `Man' will still invoke the standard Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
108 ;; manual-browsing facility rather than `WoMan' -- this is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
109 ;; intentional!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
110
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
111 ;; (By default, WoMan will automatically define the dired keys "W" and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
112 ;; "w" when it loads, but only if they are not already defined. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
113 ;; behaviour is controlled by the user option `woman-dired-keys'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
114 ;; Note that the `dired-x' (dired extra) package binds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
115 ;; `dired-copy-filename-as-kill' to the key "w" (as pointed out by Jim
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
116 ;; Davidson), although "W" appears to be really unused. The `dired-x'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
117 ;; package will over-write the WoMan binding to "w", whereas (by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
118 ;; default) WoMan will not overwrite the `dired-x' binding.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
119
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
120 ;; The following is based on suggestions by Guy Gascoigne-Piggford and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
121 ;; Juanma Barranquero. If you really want to square the man-woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
122 ;; circle then you might care to define the following bash function in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
123 ;; .bashrc:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
124
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
125 ;; man() { gnudoit -q '(raise-frame (selected-frame)) (woman' \"$1\" ')' ; }
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
126
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
127 ;; If you use Microsoft COMMAND.COM then you can create a file called
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
128 ;; man.bat somewhere in your path containing the two lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
129
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
130 ;; @echo off
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
131 ;; gnudoit -q (raise-frame (selected-frame)) (woman \"%1\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
132
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
133 ;; and then (e.g. from a command prompt or the Run... option in the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
134 ;; Start menu) just execute
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
135
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
136 ;; man man_page_name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
137
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
138
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
139 ;; Using the `word at point' as a topic suggestion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
140 ;; ===============================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
141
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
142 ;; By default, the `woman' command uses the word nearest to point in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
143 ;; the current buffer as a suggestion for the topic to look up. The
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
144 ;; topic must be confirmed or edited in the minibuffer. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
145 ;; suggestion can be turned off, or `woman' can use the suggested
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
146 ;; topic without confirmation* if possible, by setting the user-option
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
147 ;; `woman-topic-at-point' to nil or t respectively. (Its default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
148 ;; value is neither nil nor t, meaning ask for confirmation.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
149
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
150 ;; [* Thanks to Benjamin Riefenstahl for suggesting this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
151 ;; functionality.]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
152
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
153 ;; The variable `woman-topic-at-point' can be rebound locally, which
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
154 ;; may be useful to provide special private key bindings, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
155
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
156 ;; (global-set-key "\C-cw"
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
157 ;; (lambda ()
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
158 ;; (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
159 ;; (let ((woman-topic-at-point t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
160 ;; (woman)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
161
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
162
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
163 ;; Customization, Hooks and Imenu
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
164 ;; ==============================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
165
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
166 ;; WoMan supports the GNU Emacs 20+ customization facility, and puts
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
167 ;; a customization group called `WoMan' in the `Help' group under the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
168 ;; top-level `Emacs' group. In order to be able to customize WoMan
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
169 ;; without first loading it, add the following sexp to your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
170
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
171 ;; (defgroup woman nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
172 ;; "Browse UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
173 ;; :tag "WoMan" :group 'help :load "woman")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
174
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
175
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
176 ;; WoMan currently runs two hooks: `woman-pre-format-hook' immediately
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
177 ;; before formatting a buffer and `woman-post-format-hook' immediately
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
178 ;; after formatting a buffer. These hooks can be used for special
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
179 ;; customizations that require code to be executed, etc., although
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
180 ;; most customization should be possible by setting WoMan user option
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
181 ;; variables, e.g. in `.emacs' and should NOT require the use of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
182 ;; hooks. `woman-pre-format-hook' might be appropriate for face
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
183 ;; customization, whereas `woman-post-format-hook' might be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
184 ;; appropriate for installing a dynamic menu using `imenu' (although
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
185 ;; it is better to use the built-in WoMan imenu support).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
186
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
187 ;; The WoMan menu provides an option to make a contents menu for the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
188 ;; current man page (using imenu). Alternatively, if you set the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
189 ;; variable `woman-imenu' to `t' then WoMan will do it automatically
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
190 ;; for every man page. The menu title is the value of the variable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
191 ;; `woman-imenu-title', which is "CONTENTS" by default. By default,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
192 ;; the menu shows manual sections and subsections, but you can change
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
193 ;; this by changing the value of `woman-imenu-generic-expression'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
194 ;; This facility is not yet widely tested and may be fooled by obscure
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
195 ;; man pages that `break the rules'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
196
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
197 ;; WoMan is configured not to replace spaces in an imenu *Completion*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
198 ;; buffer. For further documentation of the use of imenu, such as
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
199 ;; menu sorting, see the source file imenu.el, which is distributed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
200 ;; with GNU Emacs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
201
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
202 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
203
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
204 ;; Howard Melman made (essentially) the following suggestions, which
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
205 ;; are slightly different from the expression that I currently use.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
206 ;; You may prefer one of Howard's suggestions, which I think assume
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
207 ;; that `case-fold-search' is `t' (which it is by default):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
208
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
209 ;; (setq woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
210 ;; '((nil "^\\( \\)?\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 2)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
211
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
212 ;; will give support for .SH and .SS, though it won't show the heading
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
213 ;; name hierarchy. If you just want .SH in the imenu then use:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
214
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
215 ;; (setq woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
216 ;; '((nil "^\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
217
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
218 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
219
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
220
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
221 ;; Vertical spacing and blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
222 ;; ================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
223
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
224 ;; The number of consecutive blank lines in the formatted buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
225 ;; should be either 0 or 1. A blank line should leave a space like
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
226 ;; .sp 1 (p. 14). Current policy is to output vertical space only
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
227 ;; immediately before text is output.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
228
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
229
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
230 ;; Horizontal and vertical spacing and resolution
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
231 ;; ==============================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
232
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
233 ;; WoMan currently assumes 10 characters per inch horizontally, hence
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
234 ;; a horizontal resolution of 24 basic units, and 5 lines per inch
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
235 ;; vertically, hence a vertical resolution of 48 basic units. (nroff
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
236 ;; uses 240 per inch).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
237
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
238
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
239 ;; The *WoMan-Log* buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
240 ;; ======================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
241
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
242 ;; This is modelled on the byte-compiler. It logs all files formatted
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
243 ;; by WoMan, and if WoMan finds anything that it cannot handle then it
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
244 ;; writes a warning to this buffer. If the variable `woman-show-log'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
245 ;; is non-nil (by default it is `nil') then WoMan automatically
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
246 ;; displays this buffer. Many WoMan warnings can be completely
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
247 ;; ignored, because they are reporting the fact that WoMan has ignored
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
248 ;; requests that it is correct to ignore. In some future version this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
249 ;; level of paranoia will be reduced, but not until WoMan is more
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
250 ;; reliable. At present, all warnings should be treated with some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
251 ;; suspicion. Uninterpreted escape sequences are also logged (in some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
252 ;; cases).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
253
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
254 ;; Uninterpreted ?roff requests can optionally be left in the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
255 ;; formatted buffer to indicate precisely where they occur by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
256 ;; resetting the variable `woman-ignore' to `nil' (by default it is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
257 ;; `t').
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
258
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
259 ;; Automatic initiation of woman decoding
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
260
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
261 ;; (Probably not a good idea. If you use it, be careful!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
262
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
263 ;; Put something like this in your .emacs. The call to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
264 ;; set-visited-file-name is to avoid font-locking triggered by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
265 ;; automatic major mode selection.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
266
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
267 ;; (autoload 'woman-decode-region "woman")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
268
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
269 ;; (setq format-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
270 ;; (cons
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
271 ;; '(man "UN*X man-page source format" "\\.\\(TH\\|ig\\) "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
272 ;; woman-decode-region nil nil
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
273 ;; (lambda (arg)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
274 ;; set-visited-file-name
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
275 ;; (file-name-sans-extension buffer-file-name)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
276 ;; format-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
277
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
278
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
279 ;; Reporting Bugs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
280 ;; ==============
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
281
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
282 ;; If WoMan fails completely, or formats a file incorrectly
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
283 ;; (i.e. obviously wrongly or significantly differently from man) or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
284 ;; inelegantly, then please
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
285
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
286 ;; (a) check that you are running the latest version of woman.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
287 ;; available from my web site (see above),
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
288
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
289 ;; (b) check that the problem is not already described in the file
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
290 ;; woman.status, also available from my web site.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
291
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
292 ;; If both of the above are true then please email me the entry from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
293 ;; the *WoMan-Log* buffer relating to the problem file, together with
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
294 ;; a brief description of the problem. Please indicate where you got
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
295 ;; the source file from, but do not send it to me unless I ask you to!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
296 ;; Thanks. (There is at present no automated bug-reporting facility
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
297 ;; for WoMan.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
298
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
299 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
300
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
301 ;; NOTE:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
302
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
303 ;; CASE-DEPENDENCE OF FILENAMES. By default, WoMan ignores case in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
304 ;; file pathnames only when it seems appropriate. MS-Windows users
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
305 ;; who want complete case independence should set the NTEmacs variable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
306 ;; `w32-downcase-file-names' to `t' and use all lower case when
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
307 ;; setting WoMan file paths.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
308
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
309 ;; (1) INCOMPATIBLE CHANGE! WoMan no longer uses a persistent topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
310 ;; cache by default. (It caused too much confusion!) Explicitly set
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
311 ;; the variable `woman-cache-filename' to save the cache between Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
312 ;; sessions. This is recommended only if the command `woman' is too
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
313 ;; slow the first time that it is run in an Emacs session, while it
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
314 ;; builds its cache in main memory, which MAY be VERY slow.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
315
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
316 ;; (2) The user option `woman-cache-level' controls the amount of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
317 ;; information cached (in main memory and, optionally, saved to disc).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
318
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
319 ;; (3) UPDATING THE CACHE. A prefix argument always causes the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
320 ;; `woman' command (only) to rebuild its topic cache, and to re-save
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
321 ;; it to `woman-cache-filename' if this variable has a non-nil value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
322 ;; This is necessary if the NAMES (not contents) of any of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
323 ;; directories or files in the paths specified by `woman-manpath' or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
324 ;; `woman-path' change. If WoMan user options that affect the cache
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
325 ;; are changed then WoMan will automatically update its cache file on
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
326 ;; disc (if one is in use) the next time it is run in a new Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
327 ;; session.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
328
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
329 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
330
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
331
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
332 ;; TO DO
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
333 ;; =====
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
334
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
335 ;; Reconsider case sensitivity of file names.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
336 ;; MUST PROCESS .if, .nr IN ORDER ENCOUNTERED IN FILE! (rcsfile, mf).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
337 ;; Allow general delimiter in `\v', cf. `\h'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
338 ;; Improve major-mode documentation.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
339 ;; Pre-process conditionals in macro bodies if possible for speed?
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
340 ;; Emulate more complete preprocessor support for tbl (.TS/.TE)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
341 ;; Emulate some preprocessor support for eqn (.EQ/.EN)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
342 ;; Re-write filling and adjusting code!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
343 ;; Allow word wrap at comma (for long option lists)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
344 ;; Buffer list handling not quite right.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
345 ;; Make 10 or 12 pitch (cpi) optional -- 12 => ll = 78
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
346 ;; Use unpaddable space for tabbing?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
347 ;; Tidy up handling of fonts when filling and adjusting
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
348 ;; -- see text/text properties?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
349 ;; Improve speed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
350 ;; Add font-lock support (for quoted strings, etc.)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
351 ;; Optionally save large files in enriched format?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
352 ;; Add apropos facility by searching NAME (?) entry in man files?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
353 ;; Documentation -- optional auto-display of formatted WoMan man page?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
354 ;; Implement a bug reporter?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
355 ;; Support diversion and traps (to some extent) - for Tcl/tk pages?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
356 ;; Add a menu of WoMan buffers?
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
357 ;; Fix .fc properly?
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
358
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
359
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
360 ;; Implementation strategy [this description is now well out of date!]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
361 ;; -- three main passes, each to process respectively:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
362
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
363 ;; 1) non-breaking `.' requests including font macros
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
364 ;; 2) \ escape sequences, mainly special characters and font changes
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
365 ;; 3) breaking `.' requests, mainly filling and justification
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
366
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
367 ;; For each pass, a control function finds and pre-processes the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
368 ;; escape or request and then calls the appropriate function to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
369 ;; perform the required formatting. Based originally on enriched.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
370 ;; and format.el.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
371
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
372 ;; The background information that made this project possible is
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
373 ;; freely available courtesy of Bell Labs from
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
374 ;; http://cm.bell-labs.com/7thEdMan/
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
375
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
376
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
377 ;; Acknowledgements
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
378 ;; ================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
379
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
380 ;; For Heather, Kathryn and Madelyn, the women in my life
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
381 ;; (although they will probably never use it)!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
382
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
383 ;; I also thank the following for helpful suggestions, bug reports,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
384 ;; code fragments, general interest, etc.:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
385 ;; Jari Aalto <jari.aalto@cs.tpu.fi>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
386 ;; Dean Andrews <dean@dra.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
387 ;; Juanma Barranquero <barranquero@laley-actualidad.es>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
388 ;; Karl Berry <kb@cs.umb.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
389 ;; Jim Chapman <jchapman@netcomuk.co.uk>
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
390 ;; Kin Cho <kin@neoscale.com>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
391 ;; Frederic Corne <frederic.corne@erli.fr>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
392 ;; Peter Craft <craft@alacritech.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
393 ;; Charles Curley <ccurley@trib.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
394 ;; Jim Davidson <jdavidso@teknowledge.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
395 ;; Kevin D'Elia <Kevin.DElia@mci.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
396 ;; John Fitch <jpff@maths.bath.ac.uk>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
397 ;; Hans Frosch <jwfrosch@rish.b17c.ingr.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
398 ;; Guy Gascoigne-Piggford <ggp@informix.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
399 ;; Brian Gorka <gorkab@sanchez.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
400 ;; Nicolai Henriksen <nhe@lyngso-industri.dk>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
401 ;; Thomas Herchenroeder <the@software-ag.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
402 ;; Alexander Hinds <ahinds@thegrid.net>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
403 ;; Stefan Hornburg <sth@hacon.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
404 ;; Theodore Jump <tjump@cais.com>
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
405 ;; David Kastrup <dak@gnu.org>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
406 ;; Paul Kinnucan <paulk@mathworks.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
407 ;; Jonas Linde <jonas@init.se>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
408 ;; Andrew McRae <andrewm@optimation.co.nz>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
409 ;; Howard Melman <howard@silverstream.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
410 ;; Dennis Pixton <dennis@math.binghamton.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
411 ;; T. V. Raman <raman@Adobe.COM>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
412 ;; Bruce Ravel <bruce.ravel@nist.gov>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
413 ;; Benjamin Riefenstahl <benny@crocodial.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
414 ;; Kevin Ruland <kruland@seistl.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
415 ;; Tom Schutter <tom@platte.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
416 ;; Wei-Xue Shi <wxshi@ma.neweb.ne.jp>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
417 ;; Fabio Somenzi <fabio@joplin.colorado.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
418 ;; Karel Sprenger <ks@ic.uva.nl>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
419 ;; Chris Szurgot <szurgot@itribe.net>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
420 ;; Paul A. Thompson <pat@po.cwru.edu>
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
421 ;; Arrigo Triulzi <arrigo@maths.qmw.ac.uk>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
422 ;; Geoff Voelker <voelker@cs.washington.edu>
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
423 ;; Eli Zaretskii <eliz@is.elta.co.il>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
424
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
425 ;;; History:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
426 ;; For recent change log see end of file.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
427
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
428
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
429 ;;; Code:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
430
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
431 (defvar woman-version "0.551 (beta)" "WoMan version information.")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
432
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
433 (require 'man)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
434 (eval-when-compile ; to avoid compiler warnings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
435 (require 'dired)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
436 (require 'apropos))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
437
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
438 (defun woman-mapcan (fn x)
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
439 "Return concatenated list of FN applied to successive `car' elements of X.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
440 FN must return a list, cons or nil. Useful for splicing into a list."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
441 ;; Based on the Standard Lisp function MAPCAN but with args swapped!
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
442 ;; More concise implementation than the recursive one. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
443 (apply #'nconc (mapcar fn x)))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
444
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
445 (defun woman-parse-colon-path (paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
446 "Explode search path string PATHS into a list of directory names.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
447 Allow Cygwin colon-separated search paths on Microsoft platforms.
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
448 Replace null components by calling `woman-parse-man.conf'.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
449 As a special case, if PATHS is nil then replace it by calling
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
450 `woman-parse-man.conf'."
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
451 ;; Based on suggestions by Jari Aalto and Eli Zaretskii.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
452 ;; parse-colon-path returns nil for a null path component and
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
453 ;; an empty substring of MANPATH denotes the default list.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
454 (if (memq system-type '(windows-nt ms-dos))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
455 (cond ((null paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
456 (mapcar 'woman-Cyg-to-Win (woman-parse-man.conf)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
457 ((string-match ";" paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
458 ;; Assume DOS-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
459 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
460 (lambda (x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
461 (if x
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
462 (list x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
463 (mapcar 'woman-Cyg-to-Win (woman-parse-man.conf))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
464 (parse-colon-path paths)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
465 ((string-match "\\`[a-zA-Z]:" paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
466 ;; Assume single DOS-style path...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
467 paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
468 (t
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
469 ;; Assume UNIX/Cygwin-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
470 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
471 (lambda (x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
472 (mapcar 'woman-Cyg-to-Win
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
473 (if x (list x) (woman-parse-man.conf))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
474 (let ((path-separator ":"))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
475 (parse-colon-path paths)))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
476 ;; Assume host-default-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
477 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
478 (lambda (x) (if x (list x) (woman-parse-man.conf)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
479 (parse-colon-path (or paths "")))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
480
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
481 (defun woman-Cyg-to-Win (file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
482 "Convert an absolute filename FILE from Cygwin to Windows form."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
483 ;; Code taken from w32-symlinks.el
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
484 (if (eq (aref file 0) ?/)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
485 ;; Try to use Cygwin mount table via `cygpath.exe'.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
486 (condition-case nil
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
487 (with-temp-buffer
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
488 ;; cygpath -m file
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
489 (call-process "cygpath" nil t nil "-m" file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
490 (buffer-substring 1 (buffer-size)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
491 (error
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
492 ;; Assume no `cygpath' program available.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
493 ;; Hack /cygdrive/x/ or /x/ or (obsolete) //x/ to x:/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
494 (when (string-match "\\`\\(/cygdrive\\|/\\)?/./" file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
495 (if (match-string 1) ; /cygdrive/x/ or //x/ -> /x/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
496 (setq file (substring file (match-end 1))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
497 (aset file 0 (aref file 1)) ; /x/ -> xx/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
498 (aset file 1 ?:)) ; xx/ -> x:/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
499 file))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
500 file))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
501
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
502
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
503 ;;; User options:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
504
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
505 ;; NB: Group identifiers must be lowercase!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
506
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
507 (defgroup woman nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
508 "Browse UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
509 :tag "WoMan"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
510 :group 'help)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
511
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
512 (defcustom woman-show-log nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
513 "*If non-nil then show the *WoMan-Log* buffer if appropriate.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
514 I.e. if any warning messages are written to it. Default is nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
515 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
516 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
517
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
518 (defcustom woman-pre-format-hook nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
519 "*Hook run by WoMan immediately before formatting a buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
520 Change only via `Customization' or the function `add-hook'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
521 :type 'hook
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
522 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
523
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
524 (defcustom woman-post-format-hook nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
525 "*Hook run by WoMan immediately after formatting a buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
526 Change only via `Customization' or the function `add-hook'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
527 :type 'hook
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
528 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
529
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
530
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
531 ;; Interface options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
532
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
533 (defgroup woman-interface nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
534 "Interface options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
535 :tag "WoMan Interface"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
536 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
537
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
538 (defcustom woman-man.conf-path
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
539 (let ((path '("/usr/lib" "/etc")))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
540 (if (eq system-type 'windows-nt)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
541 (mapcar 'woman-Cyg-to-Win path)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
542 path))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
543 "*List of dirs to search and/or files to try for man config file.
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
544 A trailing separator (`/' for UNIX etc.) on directories is optional,
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
545 and the filename is used if a directory specified is the first to
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
546 contain the strings \"man\" and \".conf\" (in that order).
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
547 If MANPATH is not set but a config file is found then it is parsed
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
548 instead to provide a default value for `woman-manpath'."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
549 :type '(repeat string)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
550 :group 'woman-interface)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
551
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
552 (defun woman-parse-man.conf ()
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
553 "Parse if possible configuration file for man command.
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
554 Used only if MANPATH is not set or contains null components.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
555 Look in `woman-man.conf-path' and return a value for `woman-manpath'.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
556 Concatenate data from all lines in the config file of the form
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
557 MANPATH /usr/man
30018
c7243fc7bcb6 (woman-man.conf-path): Explicitly include the debian man-db config file
Miles Bader <miles@gnu.org>
parents: 29669
diff changeset
558 or
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
559 MANDATORY_MANPATH /usr/man
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
560 or
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
561 OPTIONAL_MANPATH /usr/man"
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
562 ;; Functionality suggested by Charles Curley.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
563 (let ((path woman-man.conf-path)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
564 file manpath)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
565 (while (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
566 path
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
567 (not (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
568 (file-readable-p (setq file (car path)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
569 ;; If not a file then find the file:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
570 (or (not (file-directory-p file))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
571 (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
572 (setq file
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
573 (directory-files file t "man.*\\.conf" t))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
574 (file-readable-p (setq file (car file)))))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
575 ;; Parse the file -- if no MANPATH data ignore it:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
576 (with-temp-buffer
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
577 (insert-file-contents file)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
578 (while (re-search-forward
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
579 ;; `\(?: ... \)' is a "shy group"
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
580 "\
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
581 ^[ \t]*\\(?:MANDATORY_\\|OPTIONAL_\\)?MANPATH[ \t]+\\(\\S-+\\)" nil t)
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
582 (setq manpath (cons (match-string 1) manpath)))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
583 manpath))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
584 ))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
585 (setq path (cdr path)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
586 (nreverse manpath)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
587
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
588 (defcustom woman-manpath
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
589 (or (woman-parse-colon-path (getenv "MANPATH"))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
590 '("/usr/man" "/usr/share/man" "/usr/local/man"))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
591 "*List of DIRECTORY TREES to search for UN*X manual files.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
592 Each element should be the name of a directory that contains
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
593 subdirectories of the form `man?', or more precisely subdirectories
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
594 selected by the value of `woman-manpath-man-regexp'. Non-directory
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
595 and unreadable files are ignored.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
596
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
597 If not set then the environment variable MANPATH is used. If no such
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
598 environment variable is found, the default list is determined by
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
599 consulting the man configuration file if found, which is determined by
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
600 the user option `woman-man.conf-path'. An empty substring of MANPATH
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
601 denotes the default list.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
602
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
603 Any environment variables (names must have the UN*X-style form $NAME,
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
604 e.g. $HOME, $EMACSDATA, $emacs_dir) are evaluated first but each
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
605 element must evaluate to a SINGLE directory name. Trailing `/'s are
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
606 ignored. (Specific directories in `woman-path' are also searched.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
607
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
608 Microsoft platforms:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
609 I recommend including drive letters explicitly, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
610
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
611 (\"C:/Cygwin/usr/man/\" \"C:/Cygwin/usr/local/man\").
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
612
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
613 The MANPATH environment variable may be set using DOS semi-colon-
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
614 separated or UN*X/Cygwin colon-separated syntax (but not mixed)."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
615 :type '(repeat string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
616 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
617
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
618 (defcustom woman-manpath-man-regexp "[Mm][Aa][Nn]"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
619 "Regexp to match man directories UNDER `woman-manpath' directories.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
620 These normally have names of the form `man?'. Its default value is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
621 \"[Mm][Aa][Nn]\", which is case-insensitive mainly for the benefit of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
622 Microsoft platforms. Its purpose is to avoid `cat?', `.', `..', etc."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
623 ;; Based on a suggestion by Wei-Xue Shi.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
624 :type 'string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
625 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
626
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
627 (defcustom woman-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
628 (if (eq system-type 'ms-dos) '("$DJDIR/info" "$DJDIR/man/cat[1-9onlp]"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
629 "*List of SPECIFIC DIRECTORIES to search for UN*X manual files.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
630 For example
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
631
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
632 (\"/emacs/etc\").
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
633
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
634 These directories are searched in addition to the directory trees
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
635 specified in `woman-manpath'. Each element should be a directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
636 string or nil, which represents the current directory when the path is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
637 expanded and cached. However, the last component (only) of each
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
638 directory string is treated as a regexp \(Emacs, not shell) and the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
639 string is expanded into a list of matching directories. Non-directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
640 and unreadable files are ignored. The default value is nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
641
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
642 Any environment variables (which must have the UN*X-style form $NAME,
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
643 e.g. $HOME, $EMACSDATA, $emacs_dir) are evaluated first but each
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
644 element must evaluate to a SINGLE directory name (regexp, see above).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
645 For example
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
646
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
647 (\"$EMACSDATA\") [or equivalently (\"$emacs_dir/etc\")].
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
648
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
649 Trailing `/'s are discarded. (The directory trees in `woman-manpath'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
650 are also searched.) On Microsoft platforms I recommend including
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
651 drive letters explicitly."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
652 :type '(repeat (choice string (const nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
653 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
654
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
655 (defcustom woman-cache-level 2
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
656 "*The level of topic caching.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
657 1 - cache only the topic and directory lists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
658 (the only level before version 0.34 - only for compatibility);
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
659 2 - cache also the directories for each topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
660 (faster, without using much more memory);
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
661 3 - cache also the actual filenames for each topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
662 (fastest, but uses twice as much memory).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
663 The default value is currently 2, a good general compromise.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
664 If the `woman' command is slow to find files then try 3, which may be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
665 particularly beneficial with large remote-mounted man directories.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
666 Run the `woman' command with a prefix argument or delete the cache
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
667 file `woman-cache-filename' for a change to take effect.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
668 \(Values < 1 behave like 1; values > 3 behave like 3.)"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
669 :type '(choice (const :tag "Minimal" 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
670 (const :tag "Default" 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
671 (const :tag "Maximal" 3))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
672 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
673
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
674 (defcustom woman-cache-filename nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
675 "*The full pathname of the WoMan directory and topic cache file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
676 It is used to save and restore the cache between sessions. This is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
677 especially useful with remote-mounted man page files! The default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
678 value of nil suppresses this action. The `standard' non-nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
679 filename is \"~/.wmncach.el\". Remember that a prefix argument forces
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
680 the `woman' command to update and re-write the cache."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
681 :type '(choice (const :tag "None" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
682 (const :tag "~/.wmncach.el" "~/.wmncach.el")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
683 file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
684 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
685
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
686 (defcustom woman-dired-keys t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
687 "*List of `dired' mode keys to define to run WoMan on current file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
688 E.g. '(\"w\" \"W\"), or any non-null atom to automatically define
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
689 \"w\" and \"W\" if they are unbound, or nil to do nothing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
690 Default is t."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
691 :type '(choice (const :tag "None" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
692 (repeat string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
693 (other :tag "Auto" t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
694 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
695
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
696 (defcustom woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
697 '((nil "\n\\([A-Z].*\\)" 1) ; SECTION, but not TITLE
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
698 ("*Subsections*" "^ \\([A-Z].*\\)" 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
699 "*Imenu support for Sections and Subsections.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
700 An alist with elements of the form (MENU-TITLE REGEXP INDEX) --
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
701 see the documentation for `imenu-generic-expression'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
702 :type 'sexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
703 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
704
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
705 (defcustom woman-imenu nil
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
706 "*If non-nil then WoMan adds a Contents menu to the menubar.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
707 It does this by calling `imenu-add-to-menubar'. Default is nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
708 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
709 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
710
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
711 (defcustom woman-imenu-title "CONTENTS"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
712 "*The title to use if WoMan adds a Contents menu to the menubar.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
713 Default is \"CONTENTS\"."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
714 :type 'string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
715 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
716
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
717 (defcustom woman-topic-at-point-default 'confirm
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
718 ;; `woman-topic-at-point' may be let-bound when woman is loaded, in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
719 ;; which case its global value does not get defined.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
720 ;; `woman-file-name' sets it to this value if it is unbound.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
721 "*Default value for `woman-topic-at-point'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
722 :type '(choice (const :tag "Yes" t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
723 (const :tag "No" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
724 (other :tag "Confirm" confirm))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
725 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
726
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
727 (defcustom woman-topic-at-point woman-topic-at-point-default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
728 "*Controls use by `woman' of `word at point' as a topic suggestion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
729 If non-nil then the `woman' command uses the word at point as an
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
730 initial topic suggestion when it reads a topic from the minibuffer; if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
731 t then the `woman' command uses the word at point WITHOUT
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
732 INTERACTIVE CONFIRMATION if it exists as a topic. The default value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
733 is `confirm', meaning suggest a topic and ask for confirmation."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
734 :type '(choice (const :tag "Yes" t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
735 (const :tag "No" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
736 (other :tag "Confirm" confirm))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
737 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
738
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
739 (defvar woman-file-regexp nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
740 "Regexp used to select (possibly compressed) man source files, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
741 \"\\.\\([0-9lmnt]\\w*\\)\\(\\.\\(g?z\\|bz2\\)\\)?\\'\".
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
742 Built automatically from the customizable user options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
743 `woman-uncompressed-file-regexp' and `woman-file-compression-regexp'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
744
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
745 (defvar woman-uncompressed-file-regexp) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
746 (defvar woman-file-compression-regexp) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
747
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
748 (defun set-woman-file-regexp (symbol value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
749 "Bind SYMBOL to VALUE and set `woman-file-regexp' as per user customizations.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
750 Used as :set cookie by Customize when customizing the user options
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
751 `woman-uncompressed-file-regexp' and `woman-file-compression-regexp'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
752 (set-default symbol value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
753 (and (boundp 'woman-uncompressed-file-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
754 (boundp 'woman-file-compression-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
755 (setq woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
756 (concat woman-uncompressed-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
757 "\\("
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
758 (substring woman-file-compression-regexp 0 -2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
759 "\\)?\\'"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
760
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
761 (defcustom woman-uncompressed-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
762 "\\.\\([0-9lmnt]\\w*\\)" ; disallow no extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
763 "*Do not change this unless you are sure you know what you are doing!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
764 Regexp used to select man source files (ignoring any compression extension).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
765
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
766 The SysV standard man pages use two character suffixes, and this is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
767 becoming more common in the GNU world. For example, the man pages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
768 in the ncurses package include `toe.1m', `form.3x', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
769
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
770 Note: an optional compression regexp will be appended, so this regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
771 MUST NOT end with any kind of string terminator such as $ or \\'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
772 :type 'regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
773 :set 'set-woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
774 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
775
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
776 (defcustom woman-file-compression-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
777 "\\.\\(g?z\\|bz2\\)\\'"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
778 "*Do not change this unless you are sure you know what you are doing!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
779 Regexp used to match compressed man file extensions for which
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
780 decompressors are available and handled by auto-compression mode,
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
781 e.g. \"\\\\.\\\\(g?z\\\\|bz2\\\\)\\\\'\" for `gzip' or `bzip2'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
782 Should begin with \\. and end with \\' and MUST NOT be optional."
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
783 ;; Should be compatible with car of
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
784 ;; `jka-compr-file-name-handler-entry', but that is unduly
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
785 ;; complicated, includes an inappropriate extension (.tgz) and is
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
786 ;; not loaded by default!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
787 :type 'regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
788 :set 'set-woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
789 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
790
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
791 (defcustom woman-use-own-frame ; window-system
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
792 (or (and (fboundp 'display-graphic-p) (display-graphic-p)) ; Emacs 21
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
793 (memq window-system '(x w32))) ; Emacs 20
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
794 "*If non-nil then use a dedicated frame for displaying WoMan windows.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
795 Only useful when run on a graphic display such as X or MS-Windows."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
796 :type 'boolean
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
797 :group 'woman-interface)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
798
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
799
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
800 ;; Formatting options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
801
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
802 (defgroup woman-formatting nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
803 "Formatting options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
804 :tag "WoMan Formatting"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
805 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
806
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
807 (defcustom woman-fill-column 65
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
808 "*Right margin for formatted text -- default is 65."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
809 :type 'integer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
810 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
811
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
812 (defcustom woman-fill-frame nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
813 ;; Based loosely on a suggestion by Theodore Jump:
54516
796bcfb5fa61 (woman-fill-frame): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 54385
diff changeset
814 "*If non-nil then most of the window width is used."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
815 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
816 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
817
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
818 (defcustom woman-default-indent 5
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
819 "*Default prevailing indent set by -man macros -- default is 5.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
820 Set this variable to 7 to emulate GNU man formatting."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
821 :type 'integer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
822 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
823
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
824 (defcustom woman-bold-headings t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
825 "*If non-nil then embolden section and subsection headings. Default is t.
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
826 Heading emboldening is NOT standard `man' behavior."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
827 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
828 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
829
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
830 (defcustom woman-ignore t
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
831 "*If non-nil then unrecognised requests etc. are ignored. Default is t.
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
832 This gives the standard ?roff behavior. If nil then they are left in
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
833 the buffer, which may aid debugging."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
834 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
835 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
836
54385
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
837 (defcustom woman-preserve-ascii t
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
838 "*If non-nil, preserve ASCII characters in the WoMan buffer.
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
839 Otherwise, to save time, some backslashes and spaces may be
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
840 represented differently (as the values of the variables
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
841 `woman-escaped-escape-char' and `woman-unpadded-space-char'
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
842 respectively) so that the buffer content is strictly wrong even though
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
843 it should display correctly. This should be irrelevant unless the
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
844 buffer text is searched, copied or saved to a file."
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
845 ;; This option should probably be removed!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
846 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
847 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
848
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
849 (defcustom woman-emulation 'nroff
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
850 "*WoMan emulation, currently either nroff or troff. Default is nroff.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
851 Troff emulation is experimental and largely untested.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
852 \(Add groff later?)"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
853 :type '(choice (const nroff) (const troff))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
854 :group 'woman-formatting)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
855
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
856
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
857 ;; Faces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
858
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
859 (defgroup woman-faces nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
860 "Face options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
861 :tag "WoMan Faces"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
862 :group 'woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
863 :group 'faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
864
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
865 (defcustom woman-fontify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
866 (or (and (fboundp 'display-color-p) (display-color-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
867 (and (fboundp 'display-graphic-p) (display-graphic-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
868 (x-display-color-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
869 "*If non-nil then WoMan assumes that face support is available.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
870 It defaults to a non-nil value if the display supports either colors
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
871 or different fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
872 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
873 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
874
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
875 ;; This is overkill! Troff uses just italic; Nroff uses just underline.
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
876 ;; You should probably select either italic or underline as you prefer, but
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
877 ;; not both, although italic and underline work together perfectly well!
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
878 (defface woman-italic
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
879 `((((min-colors 88) (background light))
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59552
diff changeset
880 (:slant italic :underline t :foreground "red1"))
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59552
diff changeset
881 (((background light)) (:slant italic :underline t :foreground "red"))
42452
0cfd64a10789 (ps-font-lock-face-attributes): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 39653
diff changeset
882 (((background dark)) (:slant italic :underline t)))
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
883 "Face for italic font in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
884 :group 'woman-faces)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
885 ;; backward-compatibility alias
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
886 (put 'woman-italic-face 'face-alias 'woman-italic)
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
887
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
888 (defface woman-bold
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59552
diff changeset
889 '((((min-colors 88) (background light)) (:weight bold :foreground "blue1"))
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59552
diff changeset
890 (((background light)) (:weight bold :foreground "blue"))
42452
0cfd64a10789 (ps-font-lock-face-attributes): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 39653
diff changeset
891 (((background dark)) (:weight bold :foreground "green2")))
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
892 "Face for bold font in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
893 :group 'woman-faces)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
894 ;; backward-compatibility alias
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
895 (put 'woman-bold-face 'face-alias 'woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
896
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
897 ;; Brown is a good compromise: it is distinguishable from the default
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
898 ;; but not enough so to make font errors look terrible. (Files that use
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
899 ;; non-standard fonts seem to do so badly or in idiosyncratic ways!)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
900 (defface woman-unknown
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
901 '((((background light)) (:foreground "brown"))
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59552
diff changeset
902 (((min-colors 88) (background dark)) (:foreground "cyan1"))
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
903 (((background dark)) (:foreground "cyan")))
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
904 "Face for all unknown fonts in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
905 :group 'woman-faces)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
906 ;; backward-compatibility alias
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
907 (put 'woman-unknown-face 'face-alias 'woman-unknown)
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
908
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
909 (defface woman-addition
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
910 '((t (:foreground "orange")))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
911 "Face for all WoMan additions to man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
912 :group 'woman-faces)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
913 ;; backward-compatibility alias
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
914 (put 'woman-addition-face 'face-alias 'woman-addition)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
915
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
916 (defun woman-default-faces ()
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
917 "Set foreground colors of italic and bold faces to their default values."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
918 (interactive)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
919 (face-spec-set 'woman-italic (face-user-default-spec 'woman-italic))
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
920 (face-spec-set 'woman-bold (face-user-default-spec 'woman-bold)))
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
921
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
922 (defun woman-monochrome-faces ()
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
923 "Set foreground colors of italic and bold faces to that of the default face.
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
924 This is usually either black or white."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
925 (interactive)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
926 (set-face-foreground 'woman-italic 'unspecified)
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
927 (set-face-foreground 'woman-bold 'unspecified))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
928
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
929 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
930 ;; Experimental font support, initially only for MS-Windows.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
931 (defconst woman-font-support
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
932 (eq window-system 'w32) ; Support X later!
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
933 "If non-nil then non-ASCII characters and symbol font supported.")
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
934
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
935 (defun woman-select-symbol-fonts (fonts)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
936 "Select symbol fonts from a list FONTS of font name strings."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
937 (let (symbol-fonts)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
938 ;; With NTEmacs 20.5, the PATTERN option to `x-list-fonts' does
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
939 ;; not seem to work and fonts may be repeated, so ...
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
940 (while fonts
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
941 (and (string-match "-Symbol-" (car fonts))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
942 (not (member (car fonts) symbol-fonts))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
943 (setq symbol-fonts (cons (car fonts) symbol-fonts)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
944 (setq fonts (cdr fonts)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
945 symbol-fonts))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
946
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
947 (when woman-font-support
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
948 (make-face 'woman-symbol)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
949
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
950 ;; Set the symbol font only if `woman-use-symbol-font' is true, to
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
951 ;; avoid unnecessarily upsetting the line spacing in NTEmacs 20.5!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
952
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
953 (defcustom woman-use-extended-font t
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
954 "*If non-nil then may use non-ASCII characters from the default font."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
955 :type 'boolean
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
956 :group 'woman-faces)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
957
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
958 (defcustom woman-use-symbol-font nil
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
959 "*If non-nil then may use the symbol font. It is off by default,
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
960 mainly because it may change the line spacing (in NTEmacs 20.5)."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
961 :type 'boolean
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
962 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
963
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
964 (defconst woman-symbol-font-list
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
965 (or (woman-select-symbol-fonts (x-list-fonts "*" 'default))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
966 (woman-select-symbol-fonts (x-list-fonts "*")))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
967 "Symbol font(s), preferably same size as default when WoMan was loaded.")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
968
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
969 (defcustom woman-symbol-font (car woman-symbol-font-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
970 "*A string describing the symbol font to use for special characters.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
971 It should be compatible with, and the same size as, the default text font.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
972 Under MS-Windows, the default is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
973 \"-*-Symbol-normal-r-*-*-*-*-96-96-p-*-ms-symbol\"."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
974 :type `(choice
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
975 ,@(mapcar (lambda (x) (list 'const x))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
976 woman-symbol-font-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
977 string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
978 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
979
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
980 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
981
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
982 ;; For non windows-nt ...
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
983 (defvar woman-use-extended-font nil)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
984 (defvar woman-use-symbol-font nil)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
985 (defvar woman-symbol-font nil)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
986 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
987
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
988
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
989 ;;; Internal variables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
990
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
991 (defconst woman-justify-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
992 '(left right center full)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
993 "Justify styles for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
994 (defconst woman-adjust-left 0 ; == adjust off, noadjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
995 "Adjustment indicator `l' -- adjust left margin only.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
996 (defconst woman-adjust-right 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
997 "Adjustment indicator `r' -- adjust right margin only.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
998 (defconst woman-adjust-center 2
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
999 "Adjustment indicator `c' -- center.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1000 (defconst woman-adjust-both 3 ; default -- adj,both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1001 "Adjustment indicator `b' or `n' -- adjust both margins.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1002
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1003 (defvar woman-adjust woman-adjust-both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1004 "Current adjustment number-register value.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1005 (defvar woman-adjust-previous woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1006 "Previous adjustment number-register value.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1007 (defvar woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1008 (nth woman-adjust woman-justify-list) ; use vector?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1009 "Current justification style for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1010 (defvar woman-justify-previous woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1011 "Previous justification style for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1012
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1013 (defvar woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1014 "Current left margin.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1015 (defvar woman-prevailing-indent woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1016 "Current prevailing indent.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1017 (defvar woman-interparagraph-distance 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1018 "Interparagraph distance in lines.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1019 Set by .PD; used by .SH, .SS, .TP, .LP, .PP, .P, .IP, .HP.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1020 (defvar woman-leave-blank-lines nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1021 "Blank lines to leave as vertical space.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1022 (defconst woman-tab-width 5
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1023 "Default tab width set by -man macros.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1024 (defvar woman-nofill nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1025 "Current fill mode: nil for filling.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1026 (defvar woman-RS-left-margin nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1027 "Left margin stack for nested use of `.RS/.RE'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1028 (defvar woman-RS-prevailing-indent nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1029 "Prevailing indent stack for nested use of `.RS/.RE'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1030 (defvar woman-nospace nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1031 "Current no-space mode: nil for normal spacing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1032 Set by `.ns' request; reset by any output or `.rs' request")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1033
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1034 (defsubst woman-reset-nospace ()
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1035 "Set `woman-nospace' to nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1036 (setq woman-nospace nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1037
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1038 (defconst woman-mode-line-format
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1039 ;; This is essentially the Man-mode format with page numbers removed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1040 ;; and line numbers added. (Online documents do not have pages, but
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1041 ;; they do have lines!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1042 '("-" mode-line-mule-info mode-line-modified
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1043 mode-line-frame-identification mode-line-buffer-identification
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1044 " " global-mode-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1045 " %[(WoMan" mode-line-process minor-mode-alist ")%]--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1046 (line-number-mode "L%l--")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1047 (-3 . "%p") "-%-")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1048 "Mode line format for WoMan buffer.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1049
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1050 (defconst woman-request-regexp "^[.'][ \t]*\\(\\S +\\) *"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1051 ;; Was "^\\.[ \t]*\\([a-z0-9]+\\) *" but cvs.1 uses a macro named
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1052 ;; "`" and CGI.man uses a macro named "''"!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1053 ;; CGI.man uses ' as control character in places -- it *should*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1054 ;; suppress breaks!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1055 ;; Could end with "\\( +\\|$\\)" instead of " *"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1056 "Regexp to match a ?roff request plus trailing white space.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1057
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1058 (defvar woman-imenu-done nil
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1059 "Buffer-local: set to true if function `woman-imenu' has been called.")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1060 (make-variable-buffer-local 'woman-imenu-done)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1061
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1062 ;; From imenu.el -- needed when reformatting a file in its old buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1063 ;; The latest buffer index used to update the menu bar menu.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1064 (eval-when-compile
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1065 (require 'imenu))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1066 (make-variable-buffer-local 'imenu--last-menubar-index-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1067
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1068 (defvar woman-buffer-alist nil
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1069 "An alist representing WoMan buffers that are already decoded.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1070 Each element is of the form (FILE-NAME . BUFFER-NAME).")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1071
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1072 (defvar woman-buffer-number 0
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1073 "Ordinal number of current buffer entry in `woman-buffer-alist'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1074 The ordinal numbers start from 0.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1075
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1076 (defvar woman-if-conditions-true '(?n ?e ?o)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1077 "List of one-character built-in condition names that are true.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1078 Should include ?e, ?o (page even/odd) and either ?n (nroff) or ?t (troff).
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1079 Default is '(?n ?e ?o). Set via `woman-emulation'.")
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1080
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1081
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1082 ;;; Specialized utility functions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1083
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1084 ;;; Fast deletion without saving on the kill ring (cf. simple.el):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1085
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1086 (defun woman-delete-line (&optional arg)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1087 "Delete rest of current line; if all blank then delete thru newline.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1088 With a numeric argument ARG, delete that many lines from point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1089 Negative arguments delete lines backward."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1090 ;; This is a non-interactive version of kill-line in simple.el that
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1091 ;; deletes instead of killing and assumes kill-whole-line is nil,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1092 ;; which is essential!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1093 (delete-region (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1094 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1095 (if arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1096 (forward-line arg)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1097 (if (eobp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1098 (signal 'end-of-buffer nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1099 (if (looking-at "[ \t]*$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1100 (forward-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1101 (end-of-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1102 (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1103
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1104 (defsubst woman-delete-whole-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1105 "Delete current line from beginning including eol."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1106 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1107 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1108
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1109 (defsubst woman-delete-following-space ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1110 "Delete all spaces and tabs FOLLOWING point (cf. `delete-horizontal-space')."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1111 ;; cf. delete-horizontal-space in simple.el:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1112 (delete-region (point) (progn (skip-chars-forward " \t") (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1113
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1114 (defsubst woman-delete-match (subexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1115 "Delete subexpression SUBEXP of buffer text matched by last search."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1116 (delete-region (match-beginning subexp) (match-end subexp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1117
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1118 ;; delete-char does not kill by default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1119 ;; delete-backward-char does not kill by default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1120 ;; delete-horizontal-space does not kill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1121 ;; delete-blank-lines does not kill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1122
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1123
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1124 ;;; File handling:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1125
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1126 (defvar woman-expanded-directory-path nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1127 "Expanded directory list cache. Resetting to nil forces update.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1128
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1129 (defvar woman-topic-all-completions nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1130 "Expanded topic alist cache. Resetting to nil forces update.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1131
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1132 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1133 (defun woman (&optional topic re-cache)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1134 "Browse UN*X man page for TOPIC (Without using external Man program).
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1135 The major browsing mode used is essentially the standard Man mode.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1136 Choose the filename for the man page using completion, based on the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1137 topic selected from the directories specified in `woman-manpath' and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1138 `woman-path'. The directory expansions and topics are cached for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1139 speed, but a non-nil interactive argument forces the caches to be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1140 updated (e.g. to re-interpret the current directory).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1141
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1142 Used non-interactively, arguments are optional: if given then TOPIC
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1143 should be a topic string and non-nil RE-CACHE forces re-caching."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1144 (interactive (list nil current-prefix-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1145 ;; The following test is for non-interactive calls via gnudoit etc.
57702
c61ee1c7b2e8 (woman): Don't call interactive-p.
Richard M. Stallman <rms@gnu.org>
parents: 56256
diff changeset
1146 (if (or (not (stringp topic)) (string-match "\\S " topic))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1147 (let ((file-name (woman-file-name topic re-cache)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1148 (if file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1149 (woman-find-file file-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1150 (message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1151 "WoMan Error: No matching manual files found in search path")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1152 (ding))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1153 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1154 (message "WoMan Error: No topic specified in non-interactive call")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1155 (ding))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1156 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1157
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1158 ;; Allow WoMan to be called via the standard Help menu:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1159 (define-key-after menu-bar-manuals-menu [woman]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1160 '(menu-item "Read Man Page (WoMan)..." woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1161 :help "Man-page documentation Without Man") t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1162
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1163 (defvar woman-cached-data nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1164 "A list of cached data used to determine cache validity.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1165 Set from the cache by `woman-read-directory-cache'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1166
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1167 (defun woman-cached-data ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1168 "Generate a list of data used to determine cache validity.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1169 Called both to generate and to check the cache!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1170 ;; Must use substituted paths because values of env vars may change!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1171 (list woman-cache-level
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1172 (mapcar 'substitute-in-file-name woman-manpath)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1173 (mapcar 'substitute-in-file-name woman-path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1174
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1175 (defun woman-read-directory-cache ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1176 "Load the directory and topic cache.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1177 It is loaded from the file named by the variable `woman-cache-filename'.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1178 Return t if the file exists, nil otherwise."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1179 (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1180 woman-cache-filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1181 (load woman-cache-filename t nil t) ; file exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1182 (equal woman-cached-data (woman-cached-data)))) ; cache valid
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1183
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1184 (defun woman-write-directory-cache ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1185 "Save the directory and topic cache.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1186 It is saved to the file named by the variable `woman-cache-filename'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1187 (if woman-cache-filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1188 (save-excursion ; to restore current buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1189 ;; Make a temporary buffer; name starting with space "hides" it.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1190 (let ((standard-output
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1191 (set-buffer (generate-new-buffer "WoMan tmp buffer")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1192 (backup-inhibited t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1193 ;; (switch-to-buffer standard-output t) ; only for debugging
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1194 (buffer-disable-undo standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1195 (princ
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1196 ";;; WoMan directory and topic cache -- generated automatically\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1197 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1198 ;; For data validity check:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1199 `(setq woman-cached-data ',(woman-cached-data)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1200 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1201 `(setq woman-expanded-directory-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1202 ',woman-expanded-directory-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1203 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1204 `(setq woman-topic-all-completions
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1205 ',woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1206 (write-file woman-cache-filename) ; write CURRENT buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1207 (kill-buffer standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1208 ))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1209
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1210 (defvar woman-topic-history nil "Topic read history.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1211 (defvar woman-file-history nil "File-name read history.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1212
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1213 (defun woman-file-name (topic &optional re-cache)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1214 "Get the name of the UN*X man-page file describing a chosen TOPIC.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1215 When `woman' is called interactively, the word at point may be used as
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1216 the topic or initial topic suggestion, subject to the value of the
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1217 user option `woman-topic-at-point'. Return nil if no file can be found.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1218 Optional argument RE-CACHE, if non-nil, forces the cache to be re-read."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1219 ;; Handle the caching of the directory and topic lists:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1220 (if (and (not re-cache)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1221 (or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1222 (and woman-expanded-directory-path woman-topic-all-completions)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1223 (woman-read-directory-cache)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1224 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1225 (message "Building list of manual directory expansions...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1226 (setq woman-expanded-directory-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1227 (woman-expand-directory-path woman-manpath woman-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1228 (message "Building completion list of all manual topics...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1229 (setq woman-topic-all-completions
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1230 (woman-topic-all-completions woman-expanded-directory-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1231 (woman-write-directory-cache))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1232 ;; There is a problem in that I want to offer case-insensitive
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1233 ;; completions, but to return only a case-sensitive match. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1234 ;; does not seem to work properly by default, so I re-do the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1235 ;; completion if necessary.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1236 (let (files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1237 (or (stringp topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1238 (and (eq t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1239 (if (boundp 'woman-topic-at-point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1240 woman-topic-at-point
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1241 ;; Was let-bound when file loaded, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1242 (setq woman-topic-at-point woman-topic-at-point-default)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1243 (setq topic
52567
22ddccd48cc0 (woman-file-name, woman-follow-word):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1244 (or (current-word t) "")) ; only within or adjacent to word
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1245 (assoc topic woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1246 (setq topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1247 (completing-read
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1248 "Manual entry: "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1249 woman-topic-all-completions nil 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1250 ;; Initial input suggestion (was nil), with
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1251 ;; cursor at left ready to kill suggestion!:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1252 (and woman-topic-at-point
52567
22ddccd48cc0 (woman-file-name, woman-follow-word):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1253 (cons (or (current-word) "") 0)) ; nearest word
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1254 'woman-topic-history)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1255 ;; Note that completing-read always returns a string.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1256 (if (= (length topic) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1257 nil ; no topic, so no file!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1258 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1259 ((setq files (woman-file-name-all-completions topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1260 ;; Complete topic more carefully, i.e. use the completion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1261 ;; rather than the string entered by the user:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1262 ((setq files (all-completions topic woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1263 (while (/= (length topic) (length (car files)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1264 (setq files (cdr files)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1265 (setq files (woman-file-name-all-completions (car files)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1266 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1267 ((null files) nil) ; no file found for topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1268 ((null (cdr files)) (car (car files))) ; only 1 file for topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1269 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1270 ;; Multiple files for topic, so must select 1.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1271 ;; Unread the command event (TAB = ?\t = 9) that runs the command
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1272 ;; `minibuffer-complete' in order to automatically complete the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1273 ;; minibuffer contents as far as possible.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1274 (setq unread-command-events '(9)) ; and delete any type-ahead!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1275 (completing-read "Manual file: " files nil 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1276 (try-completion "" files) 'woman-file-history)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1277 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1278
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1279 (defun woman-select (predicate list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1280 "Select unique elements for which PREDICATE is true in LIST.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1281 \(Note that this function changes the value of LIST.)"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1282 ;; Intended to be fast by avoiding recursion and list copying.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1283 (while (and list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1284 (or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1285 (member (car list) (cdr list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1286 (not (funcall predicate (car list)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1287 (setq list (cdr list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1288 (if list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1289 (let ((newlist list) cdr_list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1290 (while (setq cdr_list (cdr list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1291 (if (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1292 (not (member (car cdr_list) (cdr cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1293 (funcall predicate (car cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1294 (setq list cdr_list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1295 (setcdr list (cdr cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1296 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1297 newlist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1298
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1299 (defun woman-file-readable-p (dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1300 "Return t if DIR is readable, otherwise log a warning."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1301 (or (file-readable-p dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1302 (WoMan-warn "Ignoring unreadable `manpath' directory tree `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1303
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1304 (defun woman-directory-files (head dir)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1305 "Return a sorted list of files in directory HEAD matching regexp in DIR.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1306 Value is a sorted list of the absolute pathnames of all the files in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1307 directory HEAD, or the current directory if HEAD is nil, that match the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1308 regexp that is the final component of DIR. Log a warning if list is empty."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1309 (or (directory-files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1310 (or head (directory-file-name default-directory)) ; was "."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1311 t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1312 (file-name-nondirectory dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1313 (WoMan-warn "No directories match `woman-path' entry `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1314
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1315 (defun woman-file-accessible-directory-p (dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1316 "Return t if DIR is accessible, otherwise log a warning."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1317 (or (file-accessible-directory-p dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1318 (WoMan-warn "Ignoring inaccessible `man-page' directory `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1319
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1320 (defun woman-expand-directory-path (woman-manpath woman-path)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1321 "Expand the manual directories in WOMAN-MANPATH and WOMAN-PATH.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1322 WOMAN-MANPATH should be a list of general manual directories, while
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1323 WOMAN-PATH should be a list of specific manual directory regexps.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1324 Ignore any paths that are unreadable or not directories."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1325 ;; Allow each path to be a single string or a list of strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1326 (if (not (listp woman-manpath)) (setq woman-manpath (list woman-manpath)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1327 (if (not (listp woman-path)) (setq woman-path (list woman-path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1328 (let (dir head dirs)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1329 (while woman-manpath
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1330 (setq dir (car woman-manpath)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1331 woman-manpath (cdr woman-manpath))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1332 (if (and dir (woman-file-readable-p dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1333 ;; NB: `parse-colon-path' creates null elements for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1334 ;; redundant (semi-)colons and trailing `/'s!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1335 ;; If does not actually matter here if dir ends with `/'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1336 ;; Need regexp "man" here to avoid "cat?", `.', `..', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1337 (setq dir (woman-canonicalize-dir dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1338 dirs (nconc dirs (directory-files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1339 dir t woman-manpath-man-regexp)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1340 (while woman-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1341 (setq dir (car woman-path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1342 woman-path (cdr woman-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1343 (if (or (null dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1344 (null (setq dir (woman-canonicalize-dir dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1345 head (file-name-directory dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1346 (woman-file-readable-p head))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1347 (setq dirs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1348 (if dir
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1349 (nconc dirs (woman-directory-files head dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1350 (cons (directory-file-name default-directory) dirs))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1351 ;; was "." -- at head of list for later filtering
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1352 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1353 (woman-select 'woman-file-accessible-directory-p dirs)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1354
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1355 (defun woman-canonicalize-dir (dir)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1356 "Canonicalize the directory name DIR.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1357 Any UN*X-style environment variables are evaluated first."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1358 (setq dir (expand-file-name (substitute-in-file-name dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1359 ;; A path that ends with / matches all directories in it,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1360 ;; including `.' and `..', so remove any trailing / !!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1361 (if (string= (substring dir -1) "/")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1362 (setq dir (substring dir 0 -1)))
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 47978
diff changeset
1363 (if (memq system-type '(windows-nt ms-dos cygwin)) ; what else?
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1364 ;; Match capitalization used by `file-name-directory':
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1365 (setq dir (concat (file-name-directory dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1366 (file-name-nondirectory dir))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1367 dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1368
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1369 (defsubst woman-not-member (dir path)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1370 "Return t if DIR is not a member of the list PATH, nil otherwise.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1371 If DIR is `.' it is first replaced by the current directory."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1372 (not (member dir path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1373
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1374 (defun woman-topic-all-completions (path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1375 "Return an alist of the man files in all man directories in the list PATH.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1376 The cdr of each alist element is the path-index / filename."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1377 ;; Support 3 levels of caching: each element of the alist `files'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1378 ;; will be a list of the first `woman-cache-level' elements of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1379 ;; following list: (topic path-index filename). This alist `files'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1380 ;; is re-processed by `woman-topic-all-completions-merge'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1381 (let (dir files (path-index 0)) ; indexing starts at zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1382 (while path
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1383 (setq dir (pop path))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1384 (if (woman-not-member dir path) ; use each directory only once!
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1385 (push (woman-topic-all-completions-1 dir path-index)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1386 files))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1387 (setq path-index (1+ path-index)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1388 ;; Uniquefy topics:
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1389 ;; Concate all lists with a single nconc call to
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1390 ;; avoid retraversing the first lists repeatedly -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1391 (woman-topic-all-completions-merge
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1392 (apply #'nconc files))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1393
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1394 (defun woman-topic-all-completions-1 (dir path-index)
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1395 "Return an alist of the man topics in directory DIR with index PATH-INDEX.
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1396 A topic is a filename sans type-related extensions.
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1397 Support 3 levels of caching: each element of the alist will be a list
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1398 of the first `woman-cache-level' elements from the following list:
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1399 \(topic path-index filename)."
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1400 ;; This function used to check that each file in the directory was
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1401 ;; not itself a directory, but this is very slow and should be
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1402 ;; unnecessary. So let us assume that `woman-file-regexp' will
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1403 ;; filter out any directories, which probably should not be there
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1404 ;; anyway, i.e. it is a user error!
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1405 ;;
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1406 ;; Don't sort files: we do that when merging, anyway. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1407 (let (newlst (lst (directory-files dir nil woman-file-regexp t))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1408 ;; Make an explicit regexp for stripping extension and
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1409 ;; compression extension: file-name-sans-extension is a
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1410 ;; far too costly function. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1411 (ext (format "\\(\\.[^.\\/]*\\)?\\(%s\\)?\\'"
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1412 woman-file-compression-regexp)))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1413 ;; Use a loop instead of mapcar in order to avoid the speed
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1414 ;; penalty of binding function arguments. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1415 (dolist (file lst newlst)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1416 (push
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1417 (cons
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1418 (if (string-match ext file)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1419 (substring file 0 (match-beginning 0))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1420 file)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1421 (and (> woman-cache-level 1)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1422 (cons
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1423 path-index
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1424 (and (> woman-cache-level 2)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1425 (list file)))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1426 newlst))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1427
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1428 (defun woman-topic-all-completions-merge (alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1429 "Merge the alist ALIST so that the keys are unique.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1430 Also make each path-info component into a list.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1431 \(Note that this function changes the value of ALIST.)"
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1432 ;; Replaces unreadably "optimized" O(n^2) implementation.
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1433 ;; Instead we use sorting to merge stuff efficiently. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1434 (let (elt newalist)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1435 ;; Sort list into reverse order
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1436 (setq alist (sort alist (lambda(x y) (string< (car y) (car x)))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1437 ;; merge duplicate keys.
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1438 (if (> woman-cache-level 1)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1439 (while alist
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1440 (setq elt (pop alist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1441 (if (equal (car elt) (caar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1442 (unless (member (cdr elt) (cdar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1443 (setcdr (car newalist) (cons (cdr elt)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1444 (cdar newalist))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1445 (setcdr elt (list (cdr elt)))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1446 (push elt newalist)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1447 ;; woman-cache-level = 1 => elements are single-element lists ...
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1448 (while alist
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1449 (setq elt (pop alist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1450 (unless (equal (car elt) (caar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1451 (push elt newalist))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1452 newalist))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1453
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1454 (defun woman-file-name-all-completions (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1455 "Return an alist of the files in all man directories that match TOPIC."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1456 ;; Support 3 levels of caching: each element of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1457 ;; woman-topic-all-completions is a list of one of the forms:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1458 ;; (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1459 ;; (topic (path-index) (path-index) ... )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1460 ;; (topic (path-index filename) (path-index filename) ... )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1461 ;; where the are no duplicates in the value lists.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1462 ;; Topic must match first `word' of filename, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1463 (let ((topic-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1464 (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1465 "\\`" (regexp-quote topic) ; first `word'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1466 "\\(\\..+\\)*" ; optional subsequent `words'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1467 woman-file-regexp)) ; extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1468 (topics woman-topic-all-completions)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1469 (path woman-expanded-directory-path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1470 dir files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1471 (if (cdr (car topics))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1472 ;; Use cached path-info to locate files for each topic:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1473 (let ((path-info (cdr (assoc topic topics)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1474 filename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1475 (while path-info
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1476 (setq dir (nth (car (car path-info)) path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1477 filename (car (cdr (car path-info)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1478 path-info (cdr path-info)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1479 files (nconc files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1480 ;; Find the actual file name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1481 (if filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1482 (list (concat dir "/" filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1483 (directory-files dir t topic-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1484 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1485 ;; Search path for the files for each topic:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1486 (while path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1487 (setq dir (car path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1488 path (cdr path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1489 (if (woman-not-member dir path) ; use each directory only once!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1490 (setq files (nconc files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1491 (directory-files dir t topic-regexp))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1492 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1493 (mapcar 'list files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1494 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1495
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1496
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1497 ;;; dired support
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1498
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1499 (defun woman-dired-define-key (key)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1500 "Bind the argument KEY to the command `woman-dired-find-file'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1501 (define-key dired-mode-map key 'woman-dired-find-file))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1502
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1503 (defsubst woman-dired-define-key-maybe (key)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1504 "If KEY is undefined in Dired, bind it to command `woman-dired-find-file'."
59552
45a313bd5998 (woman-dired-define-key-maybe): If KEY is undefined,
Eli Zaretskii <eliz@gnu.org>
parents: 57702
diff changeset
1505 (if (or (eq (lookup-key dired-mode-map key) 'undefined)
45a313bd5998 (woman-dired-define-key-maybe): If KEY is undefined,
Eli Zaretskii <eliz@gnu.org>
parents: 57702
diff changeset
1506 (null (lookup-key dired-mode-map key)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1507 (woman-dired-define-key key)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1508
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1509 (defun woman-dired-define-keys ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1510 "Define dired keys to run WoMan according to `woman-dired-keys'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1511 (if woman-dired-keys
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1512 (if (listp woman-dired-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1513 (mapcar 'woman-dired-define-key woman-dired-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1514 (woman-dired-define-key-maybe "w")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1515 (woman-dired-define-key-maybe "W")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1516 (define-key-after (lookup-key dired-mode-map [menu-bar immediate])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1517 [woman] '("Read Man Page (WoMan)" . woman-dired-find-file) 'view))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1518
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1519 (if (featurep 'dired)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1520 (woman-dired-define-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1521 (add-hook 'dired-mode-hook 'woman-dired-define-keys))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1522
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1523 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1524 (defun woman-dired-find-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1525 "In dired, run the WoMan man-page browser on this file."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1526 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1527 ;; dired-get-filename is defined in dired.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1528 (woman-find-file (dired-get-filename)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1529
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1530
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1531 ;;; tar-mode support
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1532
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1533 (defun woman-tar-extract-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1534 "In tar mode, run the WoMan man-page browser on this file."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1535 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1536 (or (eq major-mode 'tar-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1537 (error "`woman-tar-extract-file' can be used only in `tar-mode'"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1538 (buffer-disable-undo)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1539 (let (global-font-lock-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1540 (funcall (symbol-function 'tar-extract)) ; defined in tar-mode
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1541 (let ((WoMan-current-file buffer-file-name)) ; used for message logging
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1542 (rename-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1543 (woman-make-bufname (file-name-nondirectory buffer-file-name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1544 (woman-process-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1545 (goto-char (point-min)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1546
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1547 ;; There is currently no `tar-mode-hook' so use ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1548 (eval-after-load "tar-mode"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1549 '(progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1550 (define-key tar-mode-map "w" 'woman-tar-extract-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1551 (define-key-after (lookup-key tar-mode-map [menu-bar immediate])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1552 [woman] '("Read Man Page (WoMan)" . woman-tar-extract-file) 'view)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1553
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1554
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1555 (defvar woman-last-file-name nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1556 "The full pathname of the last file formatted by WoMan.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1557
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1558 (defun woman-reformat-last-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1559 "Reformat last file, e.g. after changing fill column."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1560 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1561 (if woman-last-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1562 (woman-find-file woman-last-file-name t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1563 (call-interactively 'woman-find-file)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1564
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1565 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1566 (defun woman-find-file (file-name &optional reformat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1567 "Find, decode and browse a specific UN*X man-page source file FILE-NAME.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1568 Use existing buffer if possible; reformat only if prefix arg given.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1569 When called interactively, optional argument REFORMAT forces reformatting
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1570 of an existing WoMan buffer formatted earlier.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1571 No external programs are used, except that `gunzip' will be used to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1572 decompress the file if appropriate. See the documentation for the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1573 `woman' command for further details."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1574 (interactive "fBrowse UN*X manual file: \nP")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1575 (setq woman-last-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1576 (setq file-name (expand-file-name file-name))) ; to canonicalize
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1577 (let ((alist-tail woman-buffer-alist) exists)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1578 (setq woman-buffer-number 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1579 (while (and alist-tail (not (string= file-name (car (car alist-tail)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1580 (setq alist-tail (cdr alist-tail)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1581 woman-buffer-number (1+ woman-buffer-number)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1582 (or (and (setq exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1583 (and alist-tail (WoMan-find-buffer))) ; buffer exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1584 (not reformat))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1585 ;; Format new buffer or reformat current buffer:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1586 (let* ((bufname (file-name-nondirectory file-name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1587 (case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1588 (compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1589 (not (not (string-match woman-file-compression-regexp bufname)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1590 (if compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1591 (setq bufname (file-name-sans-extension bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1592 (setq bufname (if exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1593 (buffer-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1594 (woman-make-bufname bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1595 (woman-really-find-file file-name compressed bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1596 (or exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1597 (setq woman-buffer-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1598 (cons (cons file-name bufname) woman-buffer-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1599 woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1600 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1601 (Man-build-section-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1602 (Man-build-references-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1603 (goto-char (point-min)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1604
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1605 (defun woman-make-bufname (bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1606 "Create an unambiguous buffer name from BUFNAME."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1607 (let ((dot (string-match "\\." bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1608 (if dot (setq bufname (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1609 (substring bufname (1+ dot)) " "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1610 (substring bufname 0 dot))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1611 (generate-new-buffer-name ; ensure uniqueness
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1612 (concat "*WoMan " bufname "*"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1613
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1614 (defvar woman-frame nil
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1615 "Dedicated frame used for displaying WoMan windows.")
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1616
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1617 (defun woman-really-find-file (filename compressed bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1618 "Find, decompress, and decode a UN*X man page FILENAME.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1619 If COMPRESSED is non-nil, turn on auto-compression mode to decompress
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1620 the file if necessary. Set buffer name BUFNAME and major mode.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1621 Do not call directly!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1622 (let ((WoMan-current-file filename)) ; used for message logging
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1623 (if woman-use-own-frame
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1624 (select-frame
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1625 (or (and (frame-live-p woman-frame) woman-frame)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1626 (setq woman-frame (make-frame)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1627 (switch-to-buffer (get-buffer-create bufname))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1628 (buffer-disable-undo)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1629 (setq buffer-read-only nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1630 (erase-buffer) ; NEEDED for reformat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1631 (woman-insert-file-contents filename compressed)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1632 ;; Set buffer's default directory to that of the file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1633 (setq default-directory (file-name-directory filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1634 (set (make-local-variable 'backup-inhibited) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1635 (set-visited-file-name "")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1636 (woman-process-buffer)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1637
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1638 (defun woman-process-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1639 "The second half of `woman-really-find-file'!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1640 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1641 ;; Check (crudely) that this really is likely to be in UN*X
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1642 ;; man-page source format, assuming we are at point-min:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1643 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1644 (if (re-search-forward "^[.']" 1000 t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1645 (woman-decode-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1646 (message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1647 "File appears to be pre-formatted -- using source file may be better.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1648 (woman-man-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1649 (woman-mode))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1650
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1651 (defun woman-man-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1652 "Post-process an nroff-preformatted man buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1653 ;; Kill all leading whitespace:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1654 (if (looking-at "\\s-+") (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1655 ;; Delete all page footer/header pairs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1656 (re-search-forward ".*") ; match header
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1657 ;; Footer conventionally has page number at right, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1658 (let ((regex (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1659 "^.*[0-9]\n\\s-*" ; footer and following blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1660 (regexp-quote (match-string 0)) ; header
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1661 "\\s-*\n"))) ; following blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1662 (while (re-search-forward regex nil 1) ; finish at eob
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1663 (woman-delete-match 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1664 ;; Delete last text line (footer) and all following blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1665 (re-search-backward "\\S-")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1666 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1667 (if (looking-at ".*[0-9]$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1668 (delete-region (point) (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1669
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1670 ;; Squeeze multiple blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1671 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1672 (while (re-search-forward "^[ \t]*\n\\([ \t]*\n\\)+" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1673 (replace-match "\n" t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1674
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1675 ;; CJK characters are underlined by double-sized "__".
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1676 ;; (Code lifted from man.el, with trivial changes.)
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1677 (if (< (buffer-size) (position-bytes (point-max)))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1678 ;; Multibyte characters exist.
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1679 (progn
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1680 (goto-char (point-min))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1681 (while (search-forward "__\b\b" nil t)
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1682 (backward-delete-char 4)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
1683 (woman-set-face (point) (1+ (point)) 'woman-italic))
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1684 (goto-char (point-min))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1685 (while (search-forward "\b\b__" nil t)
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1686 (backward-delete-char 4)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
1687 (woman-set-face (1- (point)) (point) 'woman-italic))))
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1688
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1689 ;; Interpret overprinting to indicate bold face:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1690 (goto-char (point-min))
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1691 (while (re-search-forward "\\(.\\)\\(\\(+\\1\\)+\\)" nil t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1692 (woman-delete-match 2)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
1693 (woman-set-face (1- (point)) (point) 'woman-bold))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1694
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1695 ;; Interpret underlining to indicate italic face:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1696 ;; (Must be AFTER emboldening to interpret bold _ correctly!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1697 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1698 (while (search-forward "_" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1699 (delete-char -2)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
1700 (woman-set-face (point) (1+ (point)) 'woman-italic))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1701
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1702 ;; Leave any other uninterpreted ^H's in the buffer for now! (They
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1703 ;; might indicate composite special characters, which could be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1704 ;; interpreted if I knew what to expect.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1705
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1706 ;; Optionally embolden section and subsection headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1707 ;; (cf. `woman-imenu-generic-expression'):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1708 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1709 (woman-bold-headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1710 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1711 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1712 (while (re-search-forward "^\\( \\)?\\([A-Z].*\\)" nil t)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
1713 (woman-set-face (match-beginning 2) (match-end 2) 'woman-bold))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1714 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1715
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1716 (defun woman-insert-file-contents (filename compressed)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1717 "Insert file FILENAME into the current buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1718 If COMPRESSED is t, or is non-nil and the filename implies compression,
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1719 then turn on auto-compression mode to decompress the file.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1720 Leave point at end of new text. Return length of inserted text."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1721 ;; Leaves point at end of inserted text in GNU Emacs 20.3, but at
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1722 ;; start in 19.34!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1723 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1724 (let ((case-fold-search t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1725 ;; Co-operate with auto-compression mode:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1726 (if (and compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1727 (or (eq compressed t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1728 (string-match woman-file-compression-regexp filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1729 ;; (not auto-compression-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1730 (not (rassq 'jka-compr-handler file-name-handler-alist)) )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1731 ;; (error "Compressed file requires Auto File Decompression turned on")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1732 (auto-compression-mode 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1733 (nth 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1734 (condition-case ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1735 (insert-file-contents filename nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1736 (file-error
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1737 ;; Run find-file-not-found-hooks until one returns non-nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1738 ;; (run-hook-with-args-until-success 'find-file-not-found-hooks)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1739 (insert "\n***** File " filename " not found! *****\n\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1740 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1741 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1742
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1743
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1744 ;;; Major mode (Man) interface:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1745
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1746 (defvar woman-mode-map nil "Keymap for woman mode.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1747
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1748 (if woman-mode-map
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1749 ()
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1750 ;; Set up the keymap, mostly inherited from Man-mode-map. Normally
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1751 ;; button-buffer-map is used as a parent keymap, but we can't have two
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1752 ;; parents, so we just copy it.
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1753 (setq woman-mode-map (copy-keymap button-buffer-map))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1754 (set-keymap-parent woman-mode-map Man-mode-map)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1755 ;; Above two lines were
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1756 ;; (setq woman-mode-map (cons 'keymap Man-mode-map))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1757 (define-key woman-mode-map "R" 'woman-reformat-last-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1758 (define-key woman-mode-map "w" 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1759 (define-key woman-mode-map "\en" 'WoMan-next-manpage)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1760 (define-key woman-mode-map "\ep" 'WoMan-previous-manpage)
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1761 (define-key woman-mode-map [M-mouse-2] 'woman-follow-word))
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1762
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1763 (defun woman-follow-word (event)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1764 "Run WoMan with word under mouse as topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1765 Argument EVENT is the invoking mouse event."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1766 (interactive "e") ; mouse event
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1767 (goto-char (posn-point (event-start event)))
52567
22ddccd48cc0 (woman-file-name, woman-follow-word):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1768 (woman (or (current-word t) "")))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1769
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1770 ;; WoMan menu bar and pop-up menu:
45271
bab60576e8ec (woman-menu): Add a comment about the last change.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45209
diff changeset
1771 (easy-menu-define
bab60576e8ec (woman-menu): Add a comment about the last change.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45209
diff changeset
1772 woman-menu ; (SYMBOL MAPS DOC MENU)
bab60576e8ec (woman-menu): Add a comment about the last change.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45209
diff changeset
1773 ;; That comment was moved after the symbol `woman-menu' to make
bab60576e8ec (woman-menu): Add a comment about the last change.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45209
diff changeset
1774 ;; find-function-search-for-symbol work. -- rost
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1775 woman-mode-map
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1776 "WoMan Menu"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1777 `("WoMan"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1778 ["WoMan..." woman t] ; [NAME CALLBACK ENABLE]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1779 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1780 ["Next Section" Man-next-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1781 ["Previous Section" Man-previous-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1782 ["Goto Section..." Man-goto-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1783 ["Goto See-Also Section" Man-goto-see-also-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1784 ["Follow Reference..." Man-follow-manual-reference t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1785 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1786 ["Previous WoMan Buffer" WoMan-previous-manpage t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1787 ["Next WoMan Buffer" WoMan-next-manpage t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1788 ["Bury WoMan Buffer" Man-quit t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1789 ["Kill WoMan Buffer" Man-kill t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1790 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1791 ;; ["Toggle Fill Frame Width" woman-toggle-fill-frame t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1792 ["Use Full Frame Width" woman-toggle-fill-frame
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1793 :active t :style toggle :selected woman-fill-frame]
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1794 ["Reformat Last Man Page" woman-reformat-last-file t]
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
1795 ["Use Monochrome Main Faces" woman-monochrome-faces t]
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
1796 ["Use Default Main Faces" woman-default-faces t]
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1797 ["Make Contents Menu" (woman-imenu t) (not woman-imenu-done)]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1798 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1799 ["Describe (Wo)Man Mode" describe-mode t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1800 ["Mini Help" woman-mini-help t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1801 ,@(if (fboundp 'customize-group)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1802 '(["Customize..." (customize-group 'woman) t]))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1803 ["Show Version" (message "WoMan %s" woman-version) t]
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1804 "--"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1805 ("Advanced"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1806 ["View Source" (view-file woman-last-file-name) woman-last-file-name]
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1807 ["Show Log" (switch-to-buffer-other-window "*WoMan-Log*" t) t]
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1808 ["Extended Font" woman-toggle-use-extended-font
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1809 :included woman-font-support
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1810 :active t :style toggle :selected woman-use-extended-font]
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1811 ["Symbol Font" woman-toggle-use-symbol-font
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1812 :included woman-font-support
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1813 :active t :style toggle :selected woman-use-symbol-font]
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1814 ["Font Map" woman-display-extended-fonts
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1815 :included woman-font-support
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1816 :active woman-use-symbol-font]
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1817 "--"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1818 "Emulation"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1819 ["nroff" (woman-reset-emulation 'nroff)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1820 :active t :style radio :selected (eq woman-emulation 'nroff)]
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1821 ["troff" (woman-reset-emulation 'troff)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1822 :active t :style radio :selected (eq woman-emulation 'troff)]
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1823 )
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1824 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1825
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1826 (defun woman-toggle-use-extended-font ()
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1827 "Toggle `woman-use-extended-font' and reformat, for menu use."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1828 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1829 (setq woman-use-extended-font (not woman-use-extended-font))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1830 (woman-reformat-last-file))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1831
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1832 (defun woman-toggle-use-symbol-font ()
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1833 "Toggle `woman-use-symbol-font' and reformat, for menu use."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1834 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1835 (setq woman-use-symbol-font (not woman-use-symbol-font))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1836 (woman-reformat-last-file))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1837
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1838 (defun woman-reset-emulation (value)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1839 "Reset `woman-emulation' to VALUE and reformat, for menu use."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1840 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1841 (setq woman-emulation value)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1842 (woman-reformat-last-file))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1843
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1844 (defun woman-mode ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1845 "Turn on (most of) Man mode to browse a buffer formatted by WoMan.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1846 WoMan is an ELisp emulation of much of the functionality of the Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1847 `man' command running the standard UN*X man and ?roff programs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1848 WoMan author: F.J.Wright@Maths.QMW.ac.uk
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1849 WoMan version: see `woman-version'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1850 See `Man-mode' for additional details."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1851 (let ((Man-build-page-list (symbol-function 'Man-build-page-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1852 (Man-strip-page-headers (symbol-function 'Man-strip-page-headers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1853 (Man-unindent (symbol-function 'Man-unindent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1854 (Man-goto-page (symbol-function 'Man-goto-page)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1855 ;; Prevent inappropriate operations:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1856 (fset 'Man-build-page-list 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1857 (fset 'Man-strip-page-headers 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1858 (fset 'Man-unindent 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1859 (fset 'Man-goto-page 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1860 (unwind-protect
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1861 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1862 (set (make-local-variable 'Man-mode-map) woman-mode-map)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1863 ;; Install Man mode:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1864 (Man-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1865 ;; Reset inappropriate definitions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1866 (setq mode-line-format woman-mode-line-format)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1867 (put 'Man-mode 'mode-class 'special))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1868 ;; Restore the status quo:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1869 (fset 'Man-build-page-list Man-build-page-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1870 (fset 'Man-strip-page-headers Man-strip-page-headers)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1871 (fset 'Man-unindent Man-unindent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1872 (fset 'Man-goto-page Man-goto-page)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1873 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1874 ;; Imenu support:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1875 (set (make-local-variable 'imenu-generic-expression)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1876 ;; `make-local-variable' in case imenu not yet loaded!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1877 woman-imenu-generic-expression)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1878 (set (make-local-variable 'imenu-space-replacement) " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1879 ;; For reformat ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1880 ;; necessary when reformatting a file in its old buffer:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1881 (setq imenu--last-menubar-index-alist nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1882 ;; necessary to avoid re-installing the same imenu:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1883 (setq woman-imenu-done nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1884 (if woman-imenu (woman-imenu))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1885 (setq buffer-read-only nil)
50404
019c0ecad8d7 (woman-xref): Removed.
Juanma Barranquero <lekktu@gmail.com>
parents: 49549
diff changeset
1886 (Man-highlight-references)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1887 (setq buffer-read-only t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1888 (set-buffer-modified-p nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1889
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1890 (defun woman-imenu (&optional redraw)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1891 "Add a \"Contents\" menu to the menubar.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1892 Optional argument REDRAW, if non-nil, forces mode line to be updated."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1893 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1894 (if woman-imenu-done
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1895 ;; This is PRIMARILY to avoid a bug in imenu-add-to-menubar that
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1896 ;; causes it to corrupt the menu bar if it is run more than once
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1897 ;; in the same buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1898 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1899 (setq woman-imenu-done t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1900 (imenu-add-to-menubar woman-imenu-title)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1901 (if redraw (force-mode-line-update))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1902
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1903 (defun woman-toggle-fill-frame ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1904 "Toggle formatting to fill (most of) the width of the current frame."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1905 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1906 (setq woman-fill-frame (not woman-fill-frame))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1907 (message "Woman fill column set to %s."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1908 (if woman-fill-frame "frame width" woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1909 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1910
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1911 (defun woman-mini-help ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1912 "Display WoMan commands and user options in an `apropos' buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1913 ;; Based on apropos-command in apropos.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1914 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1915 (require 'apropos)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1916 (let ((message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1917 (let ((standard-output (get-buffer-create "*Apropos*")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1918 (print-help-return-message 'identity))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1919 (setq apropos-accumulator
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1920 (apropos-internal "woman"
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1921 (lambda (symbol)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1922 (or (commandp symbol)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1923 (user-variable-p symbol)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1924 ;; Filter out any inhibited symbols:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1925 (let ((tem apropos-accumulator))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1926 (while tem
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1927 (if (get (car tem) 'apropos-inhibit)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1928 (setq apropos-accumulator (delq (car tem) apropos-accumulator)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1929 (setq tem (cdr tem))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1930 ;; Find documentation strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1931 (let ((p apropos-accumulator)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1932 doc symbol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1933 (while p
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1934 (setcar p (list ; must have 3 elements:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1935 (setq symbol (car p)) ; 1. name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1936 (if (functionp symbol) ; 2. command doc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1937 (if (setq doc (documentation symbol t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1938 (substring doc 0 (string-match "\n" doc))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1939 "(not documented)"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1940 (if (user-variable-p symbol) ; 3. variable doc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1941 (if (setq doc (documentation-property
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1942 symbol 'variable-documentation t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1943 (substring doc 0 (string-match "\n" doc))))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1944 (setq p (cdr p))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1945 ;; Output the result:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1946 (and (apropos-print t nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1947 message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1948 (message message))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1949
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1950
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1951 (defun WoMan-getpage-in-background (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1952 "Use TOPIC to start WoMan from `Man-follow-manual-reference'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1953 ;; topic is a string, generally of the form "section topic"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1954 (let ((s (string-match " " topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1955 (if s (setq topic (substring topic (1+ s))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1956 (woman topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1957
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1958 (defvar WoMan-Man-start-time nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1959 "Used to record formatting time used by the `man' command.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1960
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1961 (defadvice Man-getpage-in-background
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1962 (around Man-getpage-in-background-advice (topic) activate)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1963 "Use WoMan unless invoked outside a WoMan buffer or invoked explicitly.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1964 Otherwise use Man and record start of formatting time."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1965 (if (and (eq mode-line-format woman-mode-line-format)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1966 (not (eq (caar command-history) 'man)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1967 (WoMan-getpage-in-background topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1968 ;; Initiates man processing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1969 (setq WoMan-Man-start-time (current-time))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1970 ad-do-it))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1971
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1972 (defadvice Man-bgproc-sentinel
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1973 (after Man-bgproc-sentinel-advice activate)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1974 ;; Terminates man processing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1975 "Report formatting time."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1976 (let* ((time (current-time))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1977 (time (+ (* (- (car time) (car WoMan-Man-start-time)) 65536)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1978 (- (cadr time) (cadr WoMan-Man-start-time)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1979 (message "Man formatting done in %d seconds" time)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1980
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1981
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1982 ;;; Buffer handling:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1983
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1984 (defun WoMan-previous-manpage ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1985 "Find the previous WoMan buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1986 ;; Assumes currently in a WoMan buffer!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1987 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1988 (WoMan-find-buffer) ; find current existing buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1989 (if (null (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1990 (error "No previous WoMan buffer"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1991 (if (>= (setq woman-buffer-number (1+ woman-buffer-number))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1992 (length woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1993 (setq woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1994 (if (WoMan-find-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1995 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1996 (if (< (setq woman-buffer-number (1- woman-buffer-number)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1997 (setq woman-buffer-number (1- (length woman-buffer-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1998 (WoMan-previous-manpage)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2000 (defun WoMan-next-manpage ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2001 "Find the next WoMan buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2002 ;; Assumes currently in a WoMan buffer!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2003 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2004 (WoMan-find-buffer) ; find current existing buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2005 (if (null (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2006 (error "No next WoMan buffer"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2007 (if (< (setq woman-buffer-number (1- woman-buffer-number)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2008 (setq woman-buffer-number (1- (length woman-buffer-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2009 (if (WoMan-find-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2010 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2011 (WoMan-next-manpage)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2012
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2013 (defun WoMan-find-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2014 "Switch to buffer corresponding to `woman-buffer-number' and return it.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2015 If such a buffer does not exist then remove its association from the
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2016 alist in `woman-buffer-alist' and return nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2017 (if (zerop woman-buffer-number)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2018 (let ((buffer (get-buffer (cdr (car woman-buffer-alist)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2019 (if buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2020 (switch-to-buffer buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2021 ;; Delete alist element:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2022 (setq woman-buffer-alist (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2023 nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2024 (let* ((prev-ptr (nthcdr (1- woman-buffer-number) woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2025 (buffer (get-buffer (cdr (car (cdr prev-ptr))))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2026 (if buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2027 (switch-to-buffer buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2028 ;; Delete alist element:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2029 (setcdr prev-ptr (cdr (cdr prev-ptr)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2030 (if (>= woman-buffer-number (length woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2031 (setq woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2032 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2033 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2034
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2035
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2036 ;;; Syntax and display tables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2037
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2038 (defconst woman-escaped-escape-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2039 ;; An arbitrary unused control character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2040 "Internal character representation of escaped escape characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2041 (defconst woman-escaped-escape-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2042 (char-to-string woman-escaped-escape-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2043 "Internal string representation of escaped escape characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2044
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2045 (defconst woman-unpadded-space-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2046 ;; An arbitrary unused control character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2047 "Internal character representation of unpadded space characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2048 (defconst woman-unpadded-space-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2049 (char-to-string woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2050 "Internal string representation of unpadded space characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2051
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2052 (defvar woman-syntax-table nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2053 "Syntax table to support special characters used internally by WoMan.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2054
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2055 (if woman-syntax-table
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2056 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2057 (setq woman-syntax-table (make-syntax-table))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2058 ;; The following internal chars must NOT have whitespace syntax:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2059 (modify-syntax-entry woman-unpadded-space-char "." woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2060 (modify-syntax-entry woman-escaped-escape-char "." woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2061 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2062
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2063 (defun woman-set-buffer-display-table ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2064 "Set up a display table for a WoMan buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2065 This display table is used for displaying internal special characters, but
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2066 does not interfere with any existing display table, e.g. for displaying
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2067 European characters."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2068 (setq buffer-display-table
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2069 ;; The following test appears to be necessary on some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2070 ;; non-Windows platforms, e.g. Solaris 2.6 when running on a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2071 ;; tty. Thanks to T. V. Raman <raman@Adobe.COM>.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2072 ;; The MS-DOS terminal also sets standard-display-table to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2073 ;; a non-nil value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2074 (if standard-display-table ; default is nil !!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2075 (copy-sequence standard-display-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2076 (make-display-table)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2077 ;; Display the following internal chars correctly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2078 (aset buffer-display-table woman-unpadded-space-char [?\ ])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2079 (aset buffer-display-table woman-escaped-escape-char [?\\]))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2080
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2081
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2082 ;;; The main decoding driver:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2083
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2084 (defvar font-lock-mode) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2085
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2086 (defun woman-decode-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2087 "Decode a buffer in UN*X man-page source format.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2088 No external programs are used."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2089 (interactive) ; mainly for testing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2090 (WoMan-log-begin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2091 (run-hooks 'woman-pre-format-hook)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2092 (and (boundp 'font-lock-mode) font-lock-mode (font-lock-mode -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2093 ;; (fundamental-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2094 (let ((start-time (current-time)) ; (HIGH LOW MICROSEC)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2095 time) ; HIGH * 2**16 + LOW seconds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2096 (message "WoMan formatting buffer...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2097 ; (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2098 ; (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2099 ; ((re-search-forward "^\\.[ \t]*TH" nil t) ; wrong format if not found?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2100 ; (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2101 ; (delete-region (point-min) (point))) ; potentially dangerous!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2102 ; (t (message "WARNING: .TH request not found -- not man-page format?")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2103 (woman-decode-region (point-min) (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2104 (setq time (current-time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2105 time (+ (* (- (car time) (car start-time)) 65536)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2106 (- (cadr time) (cadr start-time))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2107 (message "WoMan formatting buffer...done in %d seconds" time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2108 (WoMan-log-end time))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2109 (run-hooks 'woman-post-format-hook))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2110
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2111 (defvar woman-string-alist ; rebound in woman-decode-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2112 '(("S" . "") ("R" . "(Reg.)") ("Tm" . "(TM)")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2113 ("lq" . "\"") ("rq" . "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2114 ("''" . "\"") ; needed for gcc.1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2115 (".T" . "") ; output device from -T option?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2116 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2117 "Alist of strings predefined in the -man macro package `tmac.an'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2118
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2119 (defvar woman-negative-vertical-space nil ; rebound in woman-decode-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2120 "Set to t if .sp N with N < 0 encountered.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2121
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2122 (defun woman-pre-process-region (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2123 "Pre-process escapes and comments in the region of text between FROM and TO.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2124 To be called on original buffer and any .so insertions."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2125 ;; Hide escaped escapes \\ and printable escapes \e very early
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2126 ;; (to be re-instated as just \ very late!):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2127 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2128 ;; .eo turns off escape character processing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2129 (while (re-search-forward "\\(\\\\[\\e]\\)\\|^\\.eo" to t) ; \\
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2130 (if (match-string 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2131 (replace-match woman-escaped-escape-string t t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2132 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2133 ;; .ec turns on escape character processing (and sets the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2134 ;; escape character to its argument, if any, which I'm ignoring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2135 ;; for now!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2136 (while (and (re-search-forward "\\(\\\\\\)\\|^\\.ec" to t) ; \
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2137 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2138 (replace-match woman-escaped-escape-string t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2139 ;; ***** Need test for .ec arg and warning here! *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2140 (woman-delete-whole-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2141
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2142 ;; Delete comments .\"<anything>, \"<anything> and null requests.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2143 ;; (However, should null . requests cause a break?)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2144 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2145 (while (re-search-forward "^[.'][ \t]*\\(\\\\\".*\\)?\n\\|\\\\\".*" to t)
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2146 (woman-delete-match 0)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2147
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2148 (defun woman-non-underline-faces ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2149 "Prepare non-underlined versions of underlined faces."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2150 (let ((face-list (face-list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2151 (while face-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2152 (let* ((face (car face-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2153 (face-name (symbol-name face)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2154 (if (and (string-match "\\`woman-" face-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2155 (face-underline-p face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2156 (let ((face-no-ul (intern (concat face-name "-no-ul"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2157 (copy-face face face-no-ul)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2158 (set-face-underline-p face-no-ul nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2159 (setq face-list (cdr face-list)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2160
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2161 ;; Preprocessors
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2162 ;; =============
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2163
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2164 ;; This information is based on documentation for the man command by
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2165 ;; Graeme W. Wilford <G.Wilford@ee.surrey.ac.uk>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2166
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2167 ;; First, the environment variable $MANROFFSEQ is interrogated, and if
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2168 ;; not set then the initial line of the nroff file is parsed for a
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2169 ;; preprocessor string. To contain a valid preprocessor string, the
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2170 ;; first line must resemble
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2171 ;;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2172 ;; '\" <string>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2173 ;;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2174 ;; where string can be any combination of the following letters that
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2175 ;; specify the sequence of preprocessors to run before nroff or
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2176 ;; troff/groff. Not all installations will have a full set of
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2177 ;; preprocessors. Some of the preprocessors and the letters used to
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2178 ;; designate them are: eqn (e), grap (g), pic (p), tbl (t), vgrind
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2179 ;; (v), refer (r). This option overrides the $MANROFFSEQ environment
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2180 ;; variable. zsoelim is always run as the very first preprocessor.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2181
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2182 (defvar woman-emulate-tbl nil
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2183 "True if WoMan should emulate the tbl preprocessor.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2184 This applies to text between .TE and .TS directives.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2185 Currently set only from '\" t in the first line of the source file.")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2186
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2187 (defun woman-decode-region (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2188 "Decode the region between FROM and TO in UN*X man-page source format."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2189 ;; Suitable for use in format-alist.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2190 ;; But this requires care to control major mode implied font locking.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2191 ;; Must return the new end of file. See format.el for details.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2192 ;; NB: The `to' argument is bogus: it is not currently used, and if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2193 ;; it were it would need to be a marker rather than a position!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2194 ;; First force the correct environment:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2195 (let ((case-fold-search nil) ; This is necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2196 (woman-string-alist woman-string-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2197 (woman-fill-column woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2198 woman-negative-vertical-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2199 (setq woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2200 woman-prevailing-indent woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2201 woman-interparagraph-distance 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2202 woman-leave-blank-lines nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2203 woman-RS-left-margin nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2204 woman-RS-prevailing-indent nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2205 woman-adjust woman-adjust-both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2206 woman-justify (nth woman-adjust woman-justify-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2207 woman-nofill nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2208
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2209 (setq woman-if-conditions-true
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2210 (cons (string-to-char (symbol-name woman-emulation)) '(?e ?o)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2211
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2212 ;; Prepare non-underlined versions of underlined faces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2213 (woman-non-underline-faces)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
2214 ;; Set font of `woman-symbol' face to `woman-symbol-font' if
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2215 ;; `woman-symbol-font' is well defined.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2216 (and woman-use-symbol-font
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2217 (stringp woman-symbol-font)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
2218 (set-face-font 'woman-symbol woman-symbol-font
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2219 (and (frame-live-p woman-frame) woman-frame)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2220
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2221 ;; Set syntax and display tables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2222 (set-syntax-table woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2223 (woman-set-buffer-display-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2224
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2225 ;; Based loosely on a suggestion by Theodore Jump:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2226 (if (or woman-fill-frame
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2227 (not (and (integerp woman-fill-column) (> woman-fill-column 0))))
54516
796bcfb5fa61 (woman-fill-frame): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 54385
diff changeset
2228 (setq woman-fill-column (- (window-width) woman-default-indent)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2229
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2230 ;; Check for preprocessor requests:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2231 (goto-char from)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2232 (if (looking-at "'\\\\\"[ \t]*\\([a-z]+\\)")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2233 (let ((letters (append (match-string 1) nil)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2234 (if (memq ?t letters)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2235 (setq woman-emulate-tbl t
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2236 letters (delete ?t letters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2237 (if letters
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2238 (WoMan-warn "Unhandled preprocessor request letters %s"
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2239 (concat letters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2240 (woman-delete-line 1)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2241
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2242 (woman-pre-process-region from nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2243 ;; Process ignore requests, macro definitions,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2244 ;; conditionals and switch source requests:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2245 (woman0-roff-buffer from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2246
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2247 ;; Process \k escapes BEFORE changing tab width (?):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2248 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2249 (woman-mark-horizonal-position)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2250
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2251 ;; Set buffer-local variables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2252 (setq fill-column woman-fill-column
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2253 tab-width woman-tab-width)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2254
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2255 ;; Hide unpaddable and digit-width spaces \(space) and \0:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2256 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2257 (while (re-search-forward "\\\\[ 0]" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2258 (replace-match woman-unpadded-space-string t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2259
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2260 ;; Discard optional hyphen \%; concealed newlines \<newline>;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2261 ;; point-size change function \sN,\s+N, \s-N:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2262 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2263 (while (re-search-forward "\\\\\\([%\n]\\|s[-+]?[0-9]+\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2264 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2265
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2266 ;; BEWARE: THIS SHOULD PROBABLY ALL BE DONE MUCH LATER!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2267 ;; Process trivial escapes \-, \`, \.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2268 ;; (\' must be done after tab processing!):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2269 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2270 (while (re-search-forward "\\\\\\([-`.]\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2271 (replace-match "\\1"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2272 ;; NB: Must keep ALL zero-width characters \&, \|, and \^ until
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2273 ;; ALL requests processed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2274
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2275 ;; Process no-break requests and macros (including font-change macros):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2276 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2277 (woman1-roff-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2278
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2279 ;; Process strings and special character escapes \(xx:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2280 ;; (Must do this BEFORE fontifying!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2281 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2282 (woman-strings)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2283 ;; Special chars moved after translation in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2284 ;; `woman2-process-escapes' (for pic.1):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2285 ; (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2286 ; (woman-special-characters)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2287
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2288 ;; Process standard font-change requests and escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2289 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2290 (woman-change-fonts)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2291
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2292 ;; 1/2 em vertical motion \d, \u and general local vertical motion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2293 ;; \v'+/-N' simulated using TeX ^ and _ symbols for now.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2294 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2295 (let ((first t)) ; assume no nesting!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2296 (while (re-search-forward "\\\\\\([du]\\|v'[^']*'\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2297 (let* ((esc (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2298 (repl (if (or (= (aref esc 0) ?u)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2299 (and (>= (length esc) 2) (= (aref esc 2) ?-)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2300 "^" "_")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2301 (cond (first
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2302 (replace-match repl nil t)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
2303 (put-text-property (1- (point)) (point) 'face 'woman-addition)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2304 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2305 "Initial vertical motion escape \\%s simulated" esc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2306 (WoMan-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2307 " by TeX `%s' in woman-addition-face!" repl))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2308 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2309 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2310 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2311 "Terminal vertical motion escape \\%s ignored!" esc)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2312 (setq first (not first))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2313 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2314
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2315 ; ;; \h'+/-N' local horizontal motion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2316 ; ;; N may include width escape \w'...'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2317 ; ;; Implement arbitrary forward motion and non-overlapping backward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2318 ; ;; motion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2319 ; (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2320 ; (while (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2321 ; ;; Delimiter can be a special char escape sequence \(.. or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2322 ; ;; a single normal char (usually '):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2323 ; "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2324 ; nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2325 ; (let ((from (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2326 ; (delim (regexp-quote (match-string 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2327 ; (absolute (match-string 2)) ; absolute position?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2328 ; (N (woman-parse-numeric-arg)) ; distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2329 ; to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2330 ; msg) ; for warning
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2331 ; (if (not (looking-at delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2332 ; ;; Warn but leave escape in buffer unprocessed:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2333 ; (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2334 ; "Local horizontal motion (%s) delimiter error!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2335 ; (buffer-substring from (1+ (point)))) ; point at end of arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2336 ; (setq to (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2337 ; ;; For possible warning -- save before deleting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2338 ; msg (buffer-substring from to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2339 ; (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2340 ; (if absolute ; make relative
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2341 ; (setq N (- N (current-column))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2342 ; (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2343 ; ;; Move forward by inserting hard spaces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2344 ; (insert-char woman-unpadded-space-char N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2345 ; ;; Move backwards by deleting space,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2346 ; ;; first backwards then forwards:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2347 ; (while (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2348 ; (<= (setq N (1+ N)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2349 ; (cond ((memq (preceding-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2350 ; (delete-backward-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2351 ; ((memq (following-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2352 ; (delete-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2353 ; (t nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2354 ; (if (<= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2355 ; (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2356 ; "Negative horizontal motion (%s) would overwrite!" msg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2357 ; ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2358
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2359 ;; Process formatting macros
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2360 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2361 (woman2-roff-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2362
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2363 ;; Go back and process negative vertical space if necessary:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2364 (if woman-negative-vertical-space
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2365 (woman-negative-vertical-space from))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2366
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2367 (if woman-preserve-ascii
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2368 ;; Re-instate escaped escapes to just `\' and unpaddable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2369 ;; spaces to just `space', without inheriting any text
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2370 ;; properties. This is not necessary, UNLESS the buffer is to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2371 ;; be saved as ASCII.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2372 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2373 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2374 (while (search-forward woman-escaped-escape-string nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2375 (delete-char -1) (insert ?\\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2376 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2377 (while (search-forward woman-unpadded-space-string nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2378 (delete-char -1) (insert ?\ ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2379 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2380
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2381 ;; Must return the new end of file if used in format-alist.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2382 (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2383
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2384 (defun woman-horizontal-escapes (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2385 "Process \\h'+/-N' local horizontal motion escapes upto TO.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2386 Implements arbitrary forward and non-overlapping backward motion.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2387 Preserves location of `point'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2388 ;; Moved from `woman-decode-region' for version 0.50.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2389 ;; N may include width escape \w'...' (but may already be processed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2390 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2391 (while (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2392 ;; Delimiter can be a special char escape sequence \(.. or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2393 ;; a single normal char (usually '):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2394 "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2395 to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2396 (let ((from (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2397 (delim (regexp-quote (match-string 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2398 (absolute (match-string 2)) ; absolute position?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2399 (N (woman-parse-numeric-arg)) ; distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2400 to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2401 msg) ; for warning
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2402 (if (not (looking-at delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2403 ;; Warn but leave escape in buffer unprocessed:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2404 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2405 "Local horizontal motion (%s) delimiter error!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2406 (buffer-substring from (1+ (point)))) ; point at end of arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2407 (setq to (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2408 ;; For possible warning -- save before deleting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2409 msg (buffer-substring from to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2410 (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2411 (if absolute ; make relative
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2412 (setq N (- N (current-column))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2413 (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2414 ;; Move forward by inserting hard spaces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2415 (insert-char woman-unpadded-space-char N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2416 ;; Move backwards by deleting space,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2417 ;; first backwards then forwards:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2418 (while (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2419 (<= (setq N (1+ N)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2420 (cond ((memq (preceding-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2421 (delete-backward-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2422 ((memq (following-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2423 (delete-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2424 (t nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2425 (if (<= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2426 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2427 "Negative horizontal motion (%s) would overwrite!" msg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2428 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2429 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2430
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2431
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2432
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2433 ;; Process ignore requests (.ig), conditionals (.if etc.),
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2434 ;; source-switch (.so), macro definitions (.de etc.) and macro
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2435 ;; expansions.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2436
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2437 (defvar woman0-if-to) ; marker bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2438 (defvar woman0-macro-alist) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2439 (defvar woman0-search-regex) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2440 (defvar woman0-search-regex-start ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2441 "^[.'][ \t]*\\(ig\\|if\\|ie\\|el\\|so\\|rn\\|de\\|am")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2442 (defconst woman0-search-regex-end "\\)\\([ \t]+\\|$\\)")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2443 ;; May need other terminal characters, e.g. \, but NOT \n!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2444 ;; Alternatively, force maximal match (Posix?)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2445
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2446 (defvar woman0-rename-alist) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2447
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2448 (defun woman0-roff-buffer (from)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2449 "Process conditional-type requests and user-defined macros.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2450 Start at FROM and re-scan new text as appropriate."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2451 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2452 (let ((woman0-if-to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2453 request woman0-macro-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2454 (woman0-search-regex-start woman0-search-regex-start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2455 (woman0-search-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2456 (concat woman0-search-regex-start woman0-search-regex-end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2457 woman0-rename-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2458 (while (re-search-forward woman0-search-regex nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2459 (setq request (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2460 (cond ((string= request "ig") (woman0-ig))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2461 ((string= request "if") (woman0-if "if"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2462 ((string= request "ie") (woman0-if "ie"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2463 ((string= request "el") (woman0-el))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2464 ((string= request "so") (woman0-so))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2465 ((string= request "rn") (woman0-rn))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2466 ((string= request "de") (woman0-de))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2467 ((string= request "am") (woman0-de 'append))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2468 (t (woman0-macro request))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2469 (set-marker woman0-if-to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2470 (woman0-rename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2471 ;; Should now re-run `woman0-roff-buffer' if any renaming was
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2472 ;; done, but let's just hope this is not necessary for now!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2473 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2474
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2475 (defun woman0-ig ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2476 ".ig yy -- Discard input up to `.yy', which defaults to `..')."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2477 ;; The terminal request MUST begin with . (not ')!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2478 (looking-at "\\(\\S +\\)?")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2479 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2480 (let ((yy (or (match-string 1) "."))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2481 (from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2482 (if (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2483 (concat "^\\.[ \t]*" (regexp-quote yy) ".*\n") nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2484 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2485 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2486 "ig request ignored -- terminator `.%s' not found!" yy)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2487 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2488 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2489
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2490 (defsubst woman0-process-escapes (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2491 "Process escapes within an if/ie condition between FROM and TO."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2492 (woman-strings to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2493 (goto-char from) ; necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2494 ;; Strip font-change escapes:
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2495 (while (re-search-forward "\\\\f\\(\\[[^]]+\\]\\|(..\\|.\\)" to t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2496 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2497 (goto-char from) ; necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2498 (woman2-process-escapes to 'numeric))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2499
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2500 (defun woman0-if (request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2501 ".if/ie c anything -- Discard unless c evaluates to true.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2502 Remember condition for use by a subsequent `.el'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2503 REQUEST is the invoking directive without the leading dot."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2504 ;; c evaluates to a one-character built-in condition name or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2505 ;; 'string1'string2' or a number > 0, prefix ! negates.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2506 ;; \{ ... \} for multi-line use.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2507 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2508 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2509 ;; (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2510 ;; Process escapes in condition:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2511 (let ((from (point)) negated n (c 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2512 (set-marker woman0-if-to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2513 (save-excursion (skip-syntax-forward "^ ") (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2514 ;; Process condition:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2515 (if (setq negated (= (following-char) ?!)) (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2516 (cond
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2517 ;; ((looking-at "[no]") (setq c t)) ; accept n(roff) and o(dd page)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2518 ;; ((looking-at "[te]") (setq c nil)) ; reject t(roff) and e(ven page)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2519 ((looking-at "[ntoe]")
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2520 (setq c (memq (following-char) woman-if-conditions-true)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2521 ;; Unrecognised letter so reject:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2522 ((looking-at "[A-Za-z]") (setq c nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2523 (WoMan-warn "%s %s -- unrecognised condition name rejected!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2524 request (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2525 ;; Accept strings if identical:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2526 ((save-restriction
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2527 (narrow-to-region from woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2528 ;; String delimiter can be any non-numeric character,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2529 ;; including a special character escape:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2530 (looking-at "\\(\\\\(..\\|[^0-9]\\)\\(.*\\)\\1\\(.*\\)\\1\\'"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2531 (let ((end1 (copy-marker (match-end 2)))) ; end of first string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2532 ;; Delete 2nd and 3rd delimiters to avoid processing them:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2533 (delete-region (match-end 3) woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2534 (delete-region (match-end 2) (match-beginning 3))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2535 (goto-char (match-end 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2536 (woman0-process-escapes (point) woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2537 (setq c (string= (buffer-substring (point) end1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2538 (buffer-substring end1 woman0-if-to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2539 (set-marker end1 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2540 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2541 ;; Accept numeric value if > 0:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2542 ((numberp (setq n (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2543 (woman0-process-escapes from woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2544 (woman-parse-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2545 (setq c (> n 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2546 (goto-char from))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2547 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2548 (if (eq c 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2549 (woman-if-ignore woman0-if-to request) ; ERROR!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2550 (woman-if-body request woman0-if-to (eq c negated)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2551 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2552
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2553 (defun woman-if-body (request to delete) ; should be reversed as `accept'?
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2554 "Process if-body, including \\{ ... \\}.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2555 REQUEST is the invoking directive without the leading dot.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2556 If TO is non-nil then delete the if-body.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2557 If DELETE is non-nil then delete from point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2558 ;; Assume concealed newlines already processed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2559 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2560 (if to (delete-region (point) to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2561 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2562 (cond (;;(looking-at "[^{\n]*\\\\{\\s *") ; multi-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2563 ;; allow escaped newlines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2564 (looking-at "[^{\n]*\\(\\\\\n\\)*\\\\{\\s *\\(\\\\\n\\)*") ; multi-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2565 ;; including preceding .if(s) and following newline
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2566 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2567 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2568 ;; Allow for nested \{ ... \} -- BUT BEWARE that this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2569 ;; algorithm only supports one level of nesting!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2570 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2571 (and (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2572 ;; "\\(\\\\{\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2573 ;; Interpret bogus `el \}' as `el \{',
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2574 ;; especially for Tcl/Tk man pages:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2575 "\\(\\\\{\\|el[ \t]*\\\\}\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2576 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2577 (re-search-forward "\\\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2578 (delete-region (if delete from (match-beginning 0)) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2579 (if (looking-at "^$") (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2580 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2581 (delete (woman-delete-line 1)) ; single-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2582 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2583 ;; Process matching .el anything:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2584 (cond ((string= request "ie")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2585 ;; Discard unless previous .ie c `evaluated to false'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2586 (cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2587 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2588 (woman-if-body "el" nil (not delete)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2589 ;; Got here after processing a single-line `.ie' as a body
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2590 ;; clause to be discarded:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2591 ((string= request "el")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2592 (cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2593 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2594 (woman-if-body "el" nil t))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2595 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2596 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2597 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2598
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2599 (defun woman0-el ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2600 "Isolated .el request -- should not happen!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2601 (WoMan-warn "el request without matching `ie' rejected!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2602 (cond (woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2603 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2604 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2605 (woman-if-body "el" nil t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2606 (t ; Ignore -- leave in buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2607 ;; This does not work too well, but it's only for debugging!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2608 (skip-chars-forward "^ \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2609 (if (looking-at "[ \t]*\\{") (search-forward "\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2610 (forward-line 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2611
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2612 (defun woman-if-ignore (to request)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2613 "Ignore but warn about an if request ending at TO, named REQUEST."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2614 (WoMan-warn-ignored request "ignored -- condition not handled!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2615 (if woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2616 (woman-if-body request to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2617 ;; Ignore -- leave in buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2618 ;; This does not work too well, but it's only for debugging!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2619 (skip-chars-forward "^ \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2620 (if (looking-at "[ \t]*\\{") (search-forward "\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2621 (forward-line 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2622
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2623 (defun woman0-so ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2624 ".so filename -- Switch source file. `.so' requests may be nested."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2625 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2626 ;; (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2627 (let* ((beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2628 (end (progn (woman-forward-arg 'unquote) (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2629 (name (buffer-substring beg end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2630 (filename name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2631 ;; If the specified file does not exist in this ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2632 (or (file-exists-p filename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2633 ;; or the parent directory ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2634 (file-exists-p
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2635 (setq filename (concat "../" name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2636 ;; then use the WoMan search mechanism to find the filename ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2637 (setq filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2638 (woman-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2639 (file-name-sans-extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2640 (file-name-nondirectory name))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2641 ;; Cannot find the file, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2642 (kill-buffer (current-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2643 (error "File `%s' not found" name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2644 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2645 (woman-delete-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2646 (let ((from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2647 (to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2648 (length (woman-insert-file-contents filename 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2649 (set-marker to (+ from length))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2650 (woman-pre-process-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2651 (set-marker to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2652 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2653 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2654
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2655
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2656 ;;; Process macro definitions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2657
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2658 (defun woman0-rn ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2659 "Process .rn xx yy -- rename macro xx to yy."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2660 ;; For now, done backwards AFTER all macro expansion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2661 ;; Should also allow requests and strings to be renamed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2662 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2663 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2664 (let* ((beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2665 (end (progn (woman-forward-arg 'unquote 'concat) (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2666 (old (buffer-substring beg end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2667 new)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2668 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2669 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2670 (setq beg (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2671 end (progn (woman-forward-arg 'unquote) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2672 new (buffer-substring beg end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2673 woman0-rename-alist (cons (cons new old) woman0-rename-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2674 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2675 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2676
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2677 (defun woman0-rename ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2678 "Effect renaming required by .rn requests."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2679 ;; For now, do this backwards AFTER all macro expansion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2680 (while woman0-rename-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2681 (let* ((new (car woman0-rename-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2682 (old (cdr new))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2683 (new (car new)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2684 (setq woman0-rename-alist (cdr woman0-rename-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2685 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2686 (setq new (concat "^[.'][ \t]*" (regexp-quote new)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2687 (setq old (concat "." old))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2688 (while (re-search-forward new nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2689 (replace-match old nil t)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2690
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2691 (defconst woman-unescape-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2692 (concat woman-escaped-escape-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2693 "\\(" woman-escaped-escape-string "\\)?"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2694
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2695 (defsubst woman-unescape (macro)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2696 "Replace escape sequences in the body of MACRO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2697 Replaces || by |, but | by \, where | denotes the internal escape."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2698 (let (start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2699 (while (setq start (string-match woman-unescape-regex macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2700 (setq macro
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2701 (if (match-string 1 macro)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2702 (replace-match "" t t macro 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2703 (replace-match "\\" t t macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2704 start (1+ start)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2705 macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2706
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2707 (defun woman0-de (&optional append)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2708 "Process .de/am xx yy -- (re)define/append macro xx; end at `..'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2709 \(Should be up to call of yy, which defaults to `.')
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2710 Optional argument APPEND, if non-nil, means append macro."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2711 ;; Modelled on woman-strings. BEWARE: Processing of .am is a hack!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2712 ;; Add support for .rm?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2713 ;; (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2714 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2715 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2716 (looking-at "[^ \t\n]+") ; macro name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2717 (let* ((macro (match-string 0)) from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2718 (previous (assoc macro woman0-macro-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2719 (if (not previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2720 (setq woman0-search-regex-start
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2721 (concat woman0-search-regex-start "\\|" (regexp-quote macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2722 woman0-search-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2723 (concat woman0-search-regex-start woman0-search-regex-end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2724 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2725 ;; Macro body runs from start of next line to line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2726 ;; beginning with `..'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2727 ;; The terminal request MUST begin with `.' (not ')!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2728 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2729 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2730 (re-search-forward "^\\.[ \t]*\\.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2731 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2732 (let ((body (woman-unescape (buffer-substring from (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2733 (if (and append previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2734 (setq previous (cdr previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2735 body (concat body (cdr previous))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2736 append (car previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2737 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2738 (setq macro (cons macro (cons append body))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2739 ;; This should be an update, but consing a new string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2740 ;; onto the front of the alist has the same effect:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2741 (setq woman0-macro-alist (cons macro woman0-macro-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2742 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2743 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2744 (backward-char) ; return to end of .de/am line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2745 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2746 (beginning-of-line) ; delete .de/am line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2747 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2748
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2749 (defun woman0-macro (request)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2750 "Process the macro call named REQUEST."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2751 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2752 (let ((macro (assoc request woman0-macro-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2753 (if macro
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2754 (woman-interpolate-macro (cdr macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2755 ;; SHOULD DELETE THE UNINTERPRETED REQUEST!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2756 ;; Output this message once only per call (cf. strings)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2757 (WoMan-warn "Undefined macro %s not interpolated!" request))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2758
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2759 (defun woman-interpolate-macro (macro)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2760 "Interpolate (.de) or append (.am) expansion of MACRO into the buffer."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2761 ;; Could make this more efficient by checking which arguments are
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2762 ;; actually used in the expansion!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2763 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2764 ;; Process arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2765 (let ((argno 0) (append (car macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2766 argno-string formal-arg from actual-arg start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2767 (setq macro (cdr macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2768 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2769 ;; Get next actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2770 (setq argno (1+ argno))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2771 (setq argno-string (format "%d" argno))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2772 (setq formal-arg (concat "\\\\\\$" argno-string)) ; regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2773 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2774 (woman-forward-arg 'unquote 'noskip)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2775 (setq actual-arg (buffer-substring from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2776 (skip-chars-forward " \t") ; now skip following whitespace!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2777 ;; Replace formal arg with actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2778 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2779 (while (setq start (string-match formal-arg macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2780 (setq macro (replace-match actual-arg t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2781 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2782 ;; Delete any remaining formal arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2783 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2784 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2785 (setq start (string-match "\\\\\\$." macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2786 (setq macro (replace-match "" t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2787 ;; Replace .$ number register with actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2788 ;; (Do this properly via register mechanism later!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2789 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2790 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2791 (setq start (string-match "\\\\n(\\.\\$" macro start)) ; regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2792 (setq macro (replace-match argno-string t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2793 (if append
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2794 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2795 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2796 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2797 (save-excursion ; leave point at start of new text
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2798 (insert macro))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2799
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2800
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2801 ;;; Process strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2802
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2803 (defun woman-match-name ()
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2804 "Match and move over name of form: x, (xx or [xxx...].
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2805 Applies to number registers, fonts, strings/macros/diversions, and
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2806 special characters."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2807 (cond ((= (following-char) ?\[ )
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2808 (forward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2809 (re-search-forward "[^]]+")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2810 (forward-char)) ; skip closing ]
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2811 ((= (following-char) ?\( )
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2812 (forward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2813 (re-search-forward ".."))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2814 (t (re-search-forward "."))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2815
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2816 (defun woman-strings (&optional to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2817 "Process ?roff string requests and escape sequences up to buffer position TO.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2818 Strings are defined/updated by `.ds xx string' requests and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2819 interpolated by `\*x' and `\*(xx' escapes."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2820 ;; Add support for .as and .rm?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2821 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2822 ;; Find .ds requests and \* escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2823 (re-search-forward "\\(^[.'][ \t]*ds\\)\\|\\\\\\*" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2824 (cond ((match-string 1) ; .ds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2825 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2826 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2827 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2828 (re-search-forward "[^ \t\n]+")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2829 (let ((string (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2830 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2831 ; (setq string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2832 ; (cons string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2833 ; ;; hack (?) for CGI.man!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2834 ; (cond ((looking-at "\"\"") "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2835 ; ((looking-at ".*") (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2836 ; ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2837 ;; Above hack causes trouble in arguments!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2838 (looking-at ".*")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2839 (setq string (cons string (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2840 ;; This should be an update, but consing a new string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2841 ;; onto the front of the alist has the same effect:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2842 (setq woman-string-alist (cons string woman-string-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2843 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2844 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2845 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2846 (t ; \*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2847 (let ((beg (match-beginning 0)))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2848 (woman-match-name)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2849 (let* ((stringname (match-string 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2850 (string (assoc stringname woman-string-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2851 (cond (string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2852 (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2853 ;; Temporary hack in case string starts with a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2854 ;; control character:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2855 (if (bolp) (insert-before-markers "\\&"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2856 (insert-before-markers (cdr string)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2857 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2858 (WoMan-warn "Undefined string %s not interpolated!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2859 stringname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2860 (cond (woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2861 ;; Output above message once only per call
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2862 (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2863 (setq woman-string-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2864 (cons (cons stringname "")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2865 woman-string-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2866 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2867 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2868 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2869 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2870
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2871
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2872 ;;; Process special character escapes \(xx:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2873
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2874 (defconst woman-special-characters
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2875 ;; To be built heuristically as required!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2876 ;; MUST insert all characters as strings for correct conversion to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2877 ;; multibyte representation!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2878 '(("em" "--" "\276" . t) ; 3/4 Em dash
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2879 ("bu" "*" "\267" . t) ; bullet
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2880 ("fm" "'") ; foot mark
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2881 ("co" "(C)" "\251") ; copyright
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2882
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2883 ("pl" "+" "+" . t) ; math plus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2884 ("mi" "-" "-" . t) ; math minus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2885 ("**" "*" "*" . t) ; math star
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2886 ("aa" "'" "\242" . t) ; acute accent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2887 ("ul" "_") ; underrule
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2888
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2889 ("*S" "Sigma" "S" . t) ; Sigma
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2890
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2891 (">=" ">=" "\263" . t) ; >=
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2892 ("<=" "<=" "\243" . t) ; <=
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2893 ("->" "->" "\256" . t) ; right arrow
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2894 ("<-" "<-" "\254" . t) ; left arrow
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2895 ("mu" " x " "\264" . t) ; multiply
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2896 ("+-" "+/-" "\261" . t) ; plus-minus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2897 ("bv" "|") ; bold vertical
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2898
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2899 ;; groff etc. extensions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2900 ("lq" "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2901 ("rq" "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2902 ("aq" "'")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2903 ("ha" "^")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2904 ("ti" "~")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2905 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2906 "Alist of special character codes with ASCII and extended-font equivalents.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2907 Each alist elements has the form
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2908 (input-string ascii-string extended-font-string . use-symbol-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2909 where
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2910 * `\\(input-string' is the ?roff encoding,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2911 * `ascii-string' is the (multi-character) ASCII simulation,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2912 * `extended-font-string' is the single-character string representing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2913 the character position in the extended 256-character font, and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2914 * `use-symbol-font' is t to indicate use of the symbol font or nil,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2915 i.e. omitted, to indicate use of the default font.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2916 Any element may be nil. Avoid control character codes (0 to \\37, \\180
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2917 to \\237) in `extended-font-string' for now, since they can be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2918 displayed only with a modified display table.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2919
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2920 Use the WoMan command `woman-display-extended-fonts' or a character
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2921 map accessory to help construct this alist.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2922
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2923 (defsubst woman-replace-match (newtext &optional face)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2924 "Replace text matched by last search with NEWTEXT and return t.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2925 Set NEWTEXT in face FACE if specified."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2926 (woman-delete-match 0)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2927 (insert-before-markers newtext)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
2928 (if face (put-text-property (1- (point)) (point) 'face 'woman-symbol))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2929 t)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2930
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2931 (defun woman-special-characters (to)
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2932 "Process special character escapes \\(xx, \\[xxx] up to buffer position TO.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2933 \(This must be done AFTER translation, which may use special characters.)"
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2934 (while (re-search-forward "\\\\\\(?:(\\(..\\)\\|\\[\\([[^]]+\\)\\]\\)" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2935 (let* ((name (or (match-string-no-properties 1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2936 (match-string-no-properties 2)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2937 (replacement (assoc name woman-special-characters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2938 (unless
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2939 (and
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2940 replacement
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2941 (cond ((and (cddr replacement)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2942 (if (nthcdr 3 replacement)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2943 ;; Need symbol font:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2944 (if woman-use-symbol-font
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2945 (woman-replace-match (nth 2 replacement)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
2946 'woman-symbol))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2947 ;; Need extended font:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2948 (if woman-use-extended-font
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2949 (woman-replace-match (nth 2 replacement))))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2950 ((cadr replacement) ; Use ASCII simulation
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2951 (woman-replace-match (cadr replacement)))))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2952 (WoMan-warn (concat "Special character "
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2953 (if (match-string 1) "\\(%s" "\\[%s]")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2954 " not interpolated!") name)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2955 (if woman-ignore (woman-delete-match 0))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2956 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2957
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2958 (defun woman-display-extended-fonts ()
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2959 "Display table of glyphs of graphic characters and their octal codes.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2960 All the octal codes in the ranges [32..127] and [160..255] are displayed
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2961 together with the corresponding glyphs from the default and symbol fonts.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2962 Useful for constructing the alist variable `woman-special-characters'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2963 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2964 (with-output-to-temp-buffer "*WoMan Extended Font Map*"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2965 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2966 (set-buffer standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2967 (let ((i 32))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2968 (while (< i 256)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2969 (insert (format "\\%03o " i) (string i) " " (string i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2970 (put-text-property (1- (point)) (point)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
2971 'face 'woman-symbol)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2972 (insert " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2973 (setq i (1+ i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2974 (when (= i 128) (setq i 160) (insert "\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2975 (if (zerop (% i 8)) (insert "\n")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2976 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2977 (print-help-return-message)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2978
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2979
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2980 ;;; Formatting macros that do not cause a break:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2981
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2982 (defvar request) ; Bound locally by woman1-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2983 (defvar unquote) ; Bound locally by woman1-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2984
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2985 (defun woman-unquote (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2986 "Delete any double-quote characters between point and TO.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2987 Leave point at TO (which should be a marker)."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2988 (let (in-quote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2989 (while (search-forward "\"" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2990 (if (and in-quote (looking-at "\""))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2991 ;; Repeated double-quote represents single double-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2992 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2993 (if (or in-quote (looking-at ".*\"")) ; paired
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2994 (delete-char -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2995 (setq in-quote (not in-quote))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2996 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2997 (if in-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2998 (WoMan-warn "Unpaired \" in .%s arguments." request))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2999 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3000
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3001 (defsubst woman-unquote-args ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3002 "Delete any double-quote characters up to the end of the line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3003 (woman-unquote (save-excursion (end-of-line) (point-marker))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3004
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3005 (defun woman1-roff-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3006 "Process non-breaking requests."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3007 (let ((case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3008 request fn unquote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3009 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3010 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3011 (re-search-forward woman-request-regexp nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3012 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3013 ;; Construct woman function to call:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3014 ((setq fn (intern-soft
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3015 (concat "woman1-"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3016 (setq request (match-string 1)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3017 (if (get fn 'notfont) ; not a font-change request
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3018 (funcall fn)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3019 ;; Delete request or macro name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3020 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3021 ;; If no args then apply to next line else unquote args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3022 ;; (unquote is used by called function):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3023 (setq unquote (not (eolp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3024 (if (eolp) (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3025 ; ;; Hide leading control character in unquoted argument:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3026 ; (cond ((memq (following-char) '(?. ?'))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3027 ; (insert "\\&")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3028 ; (beginning-of-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3029 ;; Call the appropriate function:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3030 (funcall fn)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3031 ;; Hide leading control character in quoted argument (only):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3032 (if (and unquote (memq (following-char) '(?. ?')))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3033 (insert "\\&"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3034 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3035 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3036
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3037 ;;; Font-changing macros:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3038
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3039 (defun woman1-B ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3040 ".B -- Set words of current line in bold font."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3041 (woman1-B-or-I ".ft B\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3042
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3043 (defun woman1-I ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3044 ".I -- Set words of current line in italic font."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3045 (woman1-B-or-I ".ft I\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3046
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3047 (defun woman1-B-or-I (B-or-I)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3048 ".B/I -- Set words of current line in bold/italic font.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3049 B-OR-I is the appropriate complete control line."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3050 ;; Should NOT concatenate the arguments!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3051 (insert B-or-I) ; because it might be a control line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3052 ;; Return to bol to process .SM/.B, .B/.if etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3053 ;; or start of first arg to hide leading control char.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3054 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3055 (if unquote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3056 (woman-unquote-args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3057 (while (looking-at "^[.']") (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3058 (end-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3059 (delete-horizontal-space))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3060 (insert "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3061
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3062 (defun woman1-SM ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3063 ".SM -- Set the current line in small font, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3064 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3065
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3066 (defalias 'woman1-SB 'woman1-B)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3067 ;; .SB -- Set the current line in small bold font, i.e. just embolden!
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3068 ;; (This is what /usr/local/share/groff/tmac/tmac.an does. The
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3069 ;; Linux man.7 is wrong about this!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3070
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3071 (defun woman1-BI ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3072 ".BI -- Join words of current line alternating bold and italic fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3073 (woman1-alt-fonts (list "\\fB" "\\fI")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3074
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3075 (defun woman1-BR ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3076 ".BR -- Join words of current line alternating bold and Roman fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3077 (woman1-alt-fonts (list "\\fB" "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3078
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3079 (defun woman1-IB ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3080 ".IB -- Join words of current line alternating italic and bold fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3081 (woman1-alt-fonts (list "\\fI" "\\fB")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3082
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3083 (defun woman1-IR ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3084 ".IR -- Join words of current line alternating italic and Roman fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3085 (woman1-alt-fonts (list "\\fI" "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3086
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3087 (defun woman1-RB ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3088 ".RB -- Join words of current line alternating Roman and bold fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3089 (woman1-alt-fonts (list "\\fR" "\\fB")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3090
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3091 (defun woman1-RI ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3092 ".RI -- Join words of current line alternating Roman and italic fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3093 (woman1-alt-fonts (list "\\fR" "\\fI")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3094
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3095 (defun woman1-alt-fonts (fonts)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3096 "Join words using alternating fonts in FONTS, which MUST be a dynamic list."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3097 (nconc fonts fonts) ; circular list!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3098 (insert (car fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3099 ;; Return to start of first arg to hide leading control char:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3100 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3101 (setq fonts (cdr fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3102 (woman-forward-arg unquote 'concat) ; unquote is bound above
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3103 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3104 (insert (car fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3105 (setq fonts (cdr fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3106 (woman-forward-arg unquote 'concat)) ; unquote is bound above
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3107 (insert "\\fR")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3108 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3109
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3110 (defun woman-forward-arg (&optional unquote concat)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3111 "Move forward over one ?roff argument, optionally unquoting and/or joining.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3112 If optional arg UNQUOTE is non-nil then delete any argument quotes.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3113 If optional arg CONCAT is non-nil then join arguments."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3114 (if (eq (following-char) ?\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3115 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3116 (if unquote (delete-char 1) (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3117 (re-search-forward "\"\\|$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3118 ;; Repeated double-quote represents single double-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3119 (while (eq (following-char) ?\") ; paired
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3120 (if unquote (delete-char 1) (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3121 (re-search-forward "\"\\|$"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3122 (if (eq (preceding-char) ?\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3123 (if unquote (delete-backward-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3124 (WoMan-warn "Unpaired \" in .%s arguments." request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3125 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3126 ;; (re-search-forward "[^\\\n] \\|$") ; inconsistent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3127 (skip-syntax-forward "^ "))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3128 (cond ((null concat) (skip-chars-forward " \t")) ; don't skip eol!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3129 ((eq concat 'noskip)) ; do not skip following whitespace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3130 (t (woman-delete-following-space)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3131 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3132
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3133
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3134 ;; The following requests are not explicit font-change requests and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3135 ;; so are flagged `notfont' to turn off automatic request deletion
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3136 ;; and further processing.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3137
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3138 (put 'woman1-TP 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3139 (defun woman1-TP ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3140 ".TP -- After tag line, reset font to Roman for paragraph body."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3141 ;; Same for .IP, but forward only 1 line?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3142 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3143 ;; May be an `irrelevant' control line in the way, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3144 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3145 (forward-line (if (looking-at "\\.\\S-+[ \t]*$") 2 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3146 ;; May be looking at control line, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3147 (insert ".ft R\n")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3148
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3149 (put 'woman1-ul 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3150 (defun woman1-ul ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3151 ".ul N -- Underline (italicize) the next N input lines, default N = 1."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3152 (let ((N (if (eolp) 1 (woman-parse-numeric-arg)))) ; woman-get-numeric-arg ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3153 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3154 (insert ".ft I\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3155 (forward-line N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3156 (insert ".ft R\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3157 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3158
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3159 ;;; Other non-breaking requests:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3160
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3161 ;; Hyphenation
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3162 ;; Warnings commented out.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3163
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3164 (put 'woman1-nh 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3165 (defun woman1-nh ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3166 ".nh -- No hyphenation, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3167 ;; Must be handled here to avoid breaking!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3168 ;; (WoMan-log-1 ".nh request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3169 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3170
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3171 (put 'woman1-hy 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3172 (defun woman1-hy ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3173 ".hy N -- Set hyphenation mode to N, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3174 ;; (WoMan-log-1 ".hy request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3175 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3176
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3177 (put 'woman1-hc 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3178 (defun woman1-hc ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3179 ".hc c -- Set hyphenation character to c, i.e. delete it!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3180 (let ((c (char-to-string (following-char))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3181 ;; (WoMan-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3182 ;; "Hyphenation character %s deleted -- hyphenation not supported!" c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3183 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3184 (setq c (concat "\\(" c "\\)\\|^[.'][ \t]*hc"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3185 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3186 (while (and (re-search-forward c nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3187 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3188 (delete-char -1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3189 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3190
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3191 (put 'woman1-hw 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3192 (defun woman1-hw ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3193 ".hw words -- Set hyphenation exception words, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3194 ;; (WoMan-log-1 ".hw request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3195 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3196
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3197 ;;; Other non-breaking requests correctly ignored by nroff:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3198
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3199 (put 'woman1-ps 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3200 (defalias 'woman1-ps 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3201 ;; .ps -- Point size -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3202
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3203 (put 'woman1-ss 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3204 (defalias 'woman1-ss 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3205 ;; .ss -- Space-character size -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3206
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3207 (put 'woman1-cs 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3208 (defalias 'woman1-cs 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3209 ;; .cs -- Constant character space (width) mode -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3210
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3211 (put 'woman1-ne 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3212 (defalias 'woman1-ne 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3213 ;; .ne -- Need vertical space -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3214
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3215 (put 'woman1-vs 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3216 (defalias 'woman1-vs 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3217 ;; .vs -- Vertical base line spacing -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3218
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3219 (put 'woman1-bd 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3220 (defalias 'woman1-bd 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3221 ;; .bd -- Embolden font -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3222
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3223 ;;; Non-breaking SunOS-specific macros:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3224
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3225 (defun woman1-TX ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3226 ".TX t p -- Resolve SunOS abbrev t and join to p (usually punctuation)."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3227 (insert "SunOS ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3228 (woman-forward-arg 'unquote 'concat))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3229
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3230 (put 'woman1-IX 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3231 (defalias 'woman1-IX 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3232 ;; .IX -- Index macro, for Sun internal use -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3233
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3234
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3235 ;;; Direct font selection:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3236
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3237 (defconst woman-font-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3238 '(("R" . default)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
3239 ("I" . woman-italic)
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
3240 ("B" . woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3241 ("P" . previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3242 ("1" . default)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
3243 ("2" . woman-italic)
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
3244 ("3" . woman-bold) ; used in bash.1
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3245 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3246 "Alist of ?roff font indicators and woman font variables and names.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3247
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3248 (defun woman-change-fonts ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3249 "Process font changes."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3250 ;; ***** NEEDS REVISING IF IT WORKS OK *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3251 ;; Paragraph .LP/PP/HP/IP/TP and font .B/.BI etc. macros reset font.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3252 ;; Should .SH/.SS reset font?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3253 ;; Font size setting macros (?) should reset font.
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3254 (let ((font-alist woman-font-alist) ; for local updating
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3255 (previous-pos (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3256 (previous-font 'default)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3257 (current-font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3258 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3259 ;; Find font requests, paragraph macros and font escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3260 (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3261 "^[.'][ \t]*\\(\\(\\ft\\)\\|\\(.P\\)\\)\\|\\(\\\\f\\)" nil 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3262 (let (font beg notfont)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3263 ;; Match font indicator and leave point at end of sequence:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3264 (cond ((match-string 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3265 ;; .ft request found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3266 (setq beg (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3267 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3268 (if (eolp) ; default is previous font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3269 (setq font previous-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3270 (looking-at "[^ \t\n]+"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3271 (forward-line)) ; end of control line and \n
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3272 ((match-string 3)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3273 ;; Macro that resets font found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3274 (setq font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3275 ((match-string 4)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3276 ;; \f escape found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3277 (setq beg (match-beginning 0))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3278 (woman-match-name))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3279 (t (setq notfont t)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3280 (if notfont
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3281 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3282 ;; Get font name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3283 (or font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3284 (let ((fontstring (match-string 0)))
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3285 (setq font (assoc fontstring font-alist)
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3286 ;; NB: font-alist contains VARIABLE NAMES.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3287 font (if font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3288 (cdr font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3289 (WoMan-warn "Unknown font %s." fontstring)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3290 ;; Output this message once only per call ...
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3291 (setq font-alist
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
3292 (cons (cons fontstring 'woman-unknown)
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3293 font-alist))
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
3294 'woman-unknown)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3295 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3296 ;; Delete font control line or escape sequence:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3297 (cond (beg (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3298 (if (eq font 'previous) (setq font previous-font))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3299 (woman-set-face previous-pos (point) current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3300 (if beg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3301 ;; Explicit font control
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3302 (setq previous-pos (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3303 previous-font current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3304 ;; Macro that resets font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3305 ;; (forward-line) ; DOES NOT WORK! but unnecessary?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3306 ;; Must process font changes in any paragraph tag!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3307 (setq previous-pos (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3308 previous-font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3309 (setq current-font font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3310 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3311 ;; Set font after last request up to eob:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3312 (woman-set-face previous-pos (point) current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3313 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3314
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3315 (defun woman-set-face (from to face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3316 "Set the face of the text from FROM to TO to face FACE.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3317 Ignore the default face and underline only word characters."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3318 (or (eq face 'default) ; ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3319 (not woman-fontify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3320 (if (face-underline-p face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3321 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3322 (let ((face-no-ul (intern (concat (symbol-name face) "-no-ul"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3323 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3324 (while (< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3325 (skip-syntax-forward "w" to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3326 (put-text-property from (point) 'face face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3327 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3328 (skip-syntax-forward "^w" to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3329 (put-text-property from (point) 'face face-no-ul)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3330 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3331 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3332 (put-text-property from to 'face face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3333 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3334
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3335
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3336 ;;; Output translation:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3337
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3338 (defvar translations nil) ; Also bound locally by woman2-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3339 ;; A list of the form (\"[ace]\" (a . b) (c . d) (e . ?\ )) or nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3340
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3341 (defun woman-get-next-char ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3342 "Return and delete next char in buffer, including special chars."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3343 (if ;;(looking-at "\\\\(\\(..\\)")
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3344 ;; Match special \(xx and strings \*[xxx], \*(xx, \*x:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3345 (looking-at "\\\\\\((..\\|\\*\\(\\[[^]]+\\]\\|(..\\|.\\)\\)")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3346 (prog1 (match-string 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3347 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3348 (prog1 (char-to-string (following-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3349 (delete-char 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3350
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3351 (defun woman2-tr (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3352 ".tr abcde -- Translate a -> b, c -> d, ..., e -> space.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3353 Format paragraphs upto TO. Supports special chars.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3354 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3355 ;; This should be an update, but consing onto the front of the alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3356 ;; has the same effect and match duplicates should not matter.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3357 ;; Initialize translation data structures:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3358 (let ((matches (car translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3359 (alist (cdr translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3360 a b)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3361 ;; `matches' must be a string:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3362 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3363 (concat (if matches (substring matches 1 -1)) "]"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3364 ;; Process .tr arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3365 (while (not (eolp)) ; (looking-at "[ \t]*$") ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3366 (setq a (woman-get-next-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3367 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3368 (setq b " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3369 (setq b (woman-get-next-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3370 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3371 (if (= (length a) 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3372 (concat a matches)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3373 (concat matches "\\|\\" a))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3374 alist (cons (cons a b) alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3375 (delete-char 1) ; no blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3376 ;; Rebuild translations list:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3377 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3378 (if (= (string-to-char matches) ?\])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3379 (substring matches 3)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3380 (concat "[" matches))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3381 translations (cons matches alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3382 ;; Format any following text:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3383 (woman2-format-paragraphs to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3384 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3385
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3386 (defsubst woman-translate (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3387 "Translate up to marker TO. Do this last of all transformations."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3388 (if translations
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3389 (let ((matches (car translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3390 (alist (cdr translations)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3391 (while (re-search-forward matches to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3392 ;; Done like this to retain text properties and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3393 ;; support translation of special characters:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3394 (insert-before-markers-and-inherit
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3395 (cdr (assoc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3396 (buffer-substring-no-properties
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3397 (match-beginning 0) (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3398 alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3399 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3400 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3401
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3402
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3403 ;;; Registers:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3404
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3405 (defvar woman-registers ; these are all read-only
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3406 '((".H" 24) (".V" 48) ; resolution in basic units
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3407 (".g" 0) ; not groff
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3408 ;; (Iff emulating groff need to implement groff italic correction
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3409 ;; \/, e.g. for pic.1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3410 (".i" left-margin) ; current indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3411 (".j" woman-adjust) ; current adjustment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3412 (".l" fill-column) ; current line length
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3413 (".s" 12) ; current point size
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3414 (".u" (if woman-nofill 0 1)) ; 1/0 in fill/nofill mode
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3415 (".v" 48) ; current vertical line spacing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3416 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3417 "Register alist: the key is the register name as a string.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3418 Each element has the form (KEY VALUE . INC) -- inc may be nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3419 Also bound locally in `woman2-roff-buffer'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3420
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3421 (defun woman-mark-horizonal-position ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3422 "\\kx -- Store current horizontal position in INPUT LINE in register x."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3423 (while (re-search-forward "\\\\k\\(.\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3424 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3425 (setq woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3426 (cons (list (match-string 1) (current-column))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3427 woman-registers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3428 (woman-delete-match 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3429
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3430 (defsubst woman2-process-escapes-to-eol (&optional numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3431 "Process remaining escape sequences up to eol.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3432 Handle numeric arguments specially if optional argument NUMERIC is non-nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3433 (woman2-process-escapes
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3434 (save-excursion (end-of-line) (point-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3435 numeric))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3436
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3437 (defun woman2-nr (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3438 ".nr R +/-N M -- Assign +/-N (wrt to previous value, if any) to register R.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3439 The increment for auto-incrementing is set to M.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3440 Format paragraphs upto TO. (Breaks, but should not!)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3441 (let* ((name (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3442 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3443 (progn (skip-syntax-forward "^ ") (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3444 (pm (progn ; increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3445 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3446 (when (memq (char-after) '(?+ ?-))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3447 (forward-char) (char-before))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3448 (value (if (eolp) ; no value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3449 nil ; to be interpreted as zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3450 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3451 (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3452 (inc (progn ; auto-increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3453 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3454 (if (eolp) ; no value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3455 nil ; to be interpreted as zero ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3456 (woman-parse-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3457 (oldvalue (assoc name woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3458 (when oldvalue
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3459 (setq oldvalue (cdr oldvalue)) ; (value . inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3460 (unless inc (setq inc (cdr oldvalue))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3461 (cond ((null value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3462 (setq value 0) ; correct?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3463 (WoMan-warn "nr %s -- null value assigned as zero!" name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3464 ((symbolp value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3465 (setq value (list 'quote value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3466 (if pm ; increment old value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3467 (setq oldvalue (if oldvalue (car oldvalue) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3468 value (if (eq pm ?+)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3469 (+ oldvalue value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3470 (- oldvalue value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3471 (setq woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3472 (cons (cons name (cons value inc)) woman-registers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3473 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3474 (woman2-format-paragraphs to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3475
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3476
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3477 ;;; Numeric (and "non-text") request arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3478
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3479 (defsubst woman-get-numeric-arg ()
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3480 "Get the value of a numeric argument at or after point.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3481 The argument can include the width function and scale indicators.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3482 Assumes 10 characters per inch. Does not move point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3483 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3484 (save-excursion (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3485
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3486 (defun woman-parse-numeric-arg ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3487 "Get the value of a numeric expression at or after point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3488 Unlike `woman-get-numeric-arg', leaves point after the argument.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3489 The expression may be an argument in quotes."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3490 (if (= (following-char) ?\") (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3491 ;; Allow leading +/-:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3492 (let ((value (if (looking-at "[+-]") 0 (woman-parse-numeric-value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3493 op)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3494 (while (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3495 ((looking-at "[+-/*%]") ; arithmetic operators
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3496 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3497 (setq op (intern-soft (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3498 (setq value (funcall op value (woman-parse-numeric-value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3499 ((looking-at "[<=>]=?") ; relational operators
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3500 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3501 (setq op (or (intern-soft (match-string 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3502 (intern-soft "=")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3503 (setq value (if (funcall op value (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3504 1 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3505 ((memq (setq op (following-char)) '(?& ?:)) ; Boolean and / or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3506 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3507 (setq value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3508 ;; and / or are special forms, not functions, in ELisp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3509 (if (eq op ?&)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3510 ;; and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3511 (if (> value 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3512 (if (> (woman-parse-numeric-value) 0) 1 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3513 ;; skip second operand
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3514 (prog1 0 (woman-parse-numeric-value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3515 ;; or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3516 (if (> value 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3517 ;; skip second operand
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3518 (prog1 1 (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3519 (if (> (woman-parse-numeric-value) 0) 1 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3520 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3521 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3522 ; (if (looking-at "[ \t\nRC\)\"]") ; R, C are tab types
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3523 ; ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3524 ; (WoMan-warn "Unimplemented numerical operator `%c' in %s"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3525 ; (following-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3526 ; (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3527 ; (save-excursion (beginning-of-line) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3528 ; (save-excursion (end-of-line) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3529 ; (skip-syntax-forward "^ "))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3530 value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3531 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3532
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3533 (defun woman-parse-numeric-value ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3534 "Get a single numeric value at or after point.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3535 The value can be a number register or width function (which assumes 10
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3536 characters per inch) and can include scale indicators. It may be an
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3537 expression in parentheses. Leaves point after the value."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3538 ;; Must replace every \' by some different single character first
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3539 ;; before calling this function by calling
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3540 ;; (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3541 (if (eq (following-char) ?\()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3542 ;; Treat parenthesized expression as a single value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3543 (let (n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3544 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3545 (setq n (woman-parse-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3546 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3547 (if (eq (following-char) ?\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3548 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3549 (WoMan-warn "Parenthesis confusion in numeric expression!"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3550 n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3551 (let ((n (cond ((looking-at "[-+]?[.0-9]+") ; single number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3552 ;; currently needed to set match-end, even though
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3553 ;; string-to-number returns 0 if number not parsed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3554 (string-to-number (match-string 0)))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3555 ((looking-at "\\\\n\\([-+]\\)?\\(?:\
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3556 \\[\\([^]]+\\)\\]\\|\(\\(..\\)\\|\\(.\\)\\)")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3557 ;; interpolate number register, maybe auto-incremented
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3558 (let* ((pm (match-string-no-properties 1))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3559 (name (or (match-string-no-properties 2)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3560 (match-string-no-properties 3)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3561 (match-string-no-properties 4)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3562 (value (assoc name woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3563 (if value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3564 (let (inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3565 (setq value (cdr value) ; (value . inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3566 inc (cdr value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3567 ;; eval internal (.X) registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3568 ;; stored as lisp variable names:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3569 value (eval (car value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3570 (if (and pm inc) ; auto-increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3571 (setq value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3572 (funcall (intern-soft pm) value inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3573 woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3574 (cons (cons name (cons value inc))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3575 woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3576 value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3577 (WoMan-warn "Undefined register %s defaulted to 0."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3578 name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3579 0) ; default to zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3580 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3581 ((re-search-forward
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3582 ;; Delimiter can be special char escape \[xxx],
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3583 ;; \(xx or single normal char (usually '):
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3584 "\\=\\\\w\\(\\\\\\[[^]]+\\]\\|\\\\(..\\|.\\)" nil t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3585 (let ((from (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3586 (delim (regexp-quote (match-string 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3587 (if (re-search-forward delim nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3588 ;; Return width of string:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3589 (- (match-beginning 0) from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3590 (WoMan-warn "Width escape delimiter error!"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3591 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3592 (if (null n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3593 ;; ERROR -- should handle this better!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3594 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3595 (WoMan-warn "Numeric/register argument error: %s"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3596 (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3597 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3598 (save-excursion (end-of-line) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3599 (skip-syntax-forward "^ ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3600 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3601 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3602 ;; Check for scale factor:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3603 (if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3604 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3605 ((looking-at "\\s ") nil) ; stay put!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3606 ((looking-at "[mnuv]")) ; ignore for now
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3607 ((looking-at "i") (setq n (* n 10))) ; inch
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3608 ((looking-at "c") (setq n (* n 3.9))) ; cm
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3609 ((looking-at "P") (setq n (* n 1.7))) ; Pica
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3610 ((looking-at "p") (setq n (* n 0.14))) ; point
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3611 ;; NB: May be immediately followed by + or -, etc.,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3612 ;; in which case do nothing and return nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3613 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3614 (goto-char (match-end 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3615 (if (numberp n) (round n) n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3616 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3617
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3618
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3619 ;;; VERTICAL FORMATTING -- Formatting macros that cause a break:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3620
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3621 ;; Vertical spacing philosophy:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3622 ;; Delete all vertical space as it is encountered. Then insert
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3623 ;; vertical space only before text, as required.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3624
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3625 (defun woman2-roff-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3626 "Process breaks. Format paragraphs and headings."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3627 (let ((case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3628 (to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3629 (canonically-space-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3630 (symbol-function 'canonically-space-region))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3631 (insert-and-inherit (symbol-function 'insert-and-inherit))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3632 (set-text-properties (symbol-function 'set-text-properties))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3633 (woman-registers woman-registers)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3634 fn request translations
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3635 tab-stop-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3636 ;; ?roff does not squeeze multiple spaces, but does fill, so...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3637 (fset 'canonically-space-region 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3638 ;; Try to avoid spaces inheriting underlines from preceding text!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3639 (fset 'insert-and-inherit (symbol-function 'insert))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3640 (fset 'set-text-properties 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3641 (unwind-protect
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3642 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3643 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3644 (re-search-forward woman-request-regexp nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3645 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3646 ;; Construct woman function to call:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3647 ((setq fn (intern-soft
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3648 (concat "woman2-"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3649 (setq request (match-string 1)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3650 ;; Delete request or macro name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3651 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3652 ;; Unrecognised request:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3653 ((prog1 nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3654 ;; (WoMan-warn ".%s request ignored!" request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3655 (WoMan-warn-ignored request "ignored!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3656 ;; (setq fn 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3657 ;; AVOID LEAVING A BLANK LINE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3658 ;; (setq fn 'woman2-format-paragraphs)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3659 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3660 ;; .LP assumes it is at eol and leaves a (blank) line,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3661 ;; so leave point at end of line before paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3662 ((or (looking-at "[ \t]*$") ; no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3663 woman-ignore) ; ignore all
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3664 ;; (beginning-of-line) (kill-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3665 ;; AVOID LEAVING A BLANK LINE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3666 (beginning-of-line) (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3667 (t (end-of-line) (insert ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3668 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3669 (if (not (or fn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3670 (and (not (memq (following-char) '(?. ?')))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3671 (setq fn 'woman2-format-paragraphs))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3672 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3673 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3674 (set-marker to (woman-find-next-control-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3675 ;; Call the appropriate function:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3676 (funcall fn to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3677 (if (not (eobp)) ; This should not happen, but ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3678 (woman2-format-paragraphs (point-max-marker) woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3679 (fset 'canonically-space-region canonically-space-region)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3680 (fset 'set-text-properties set-text-properties)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3681 (fset 'insert-and-inherit insert-and-inherit)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3682 (set-marker to nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3683
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3684 (defun woman-find-next-control-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3685 "Find and return start of next control line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3686 ; (let ((to (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3687 ; (re-search-forward "^\\." nil t))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3688 ; (if to (1- to) (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3689 (let (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3690 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3691 ;; Must handle
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3692 ;; ...\c
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3693 ;; .br (and other requests?)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3694 ;; by deleting both the \c and the following request.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3695 ;; BEWARE THAT THIS CODE MAY BE UNRELIABLE!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3696 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3697 (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3698 (setq to (re-search-forward "\\(\\\\c\\)?\n[.']" nil t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3699 (match-string 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3700 (looking-at "br"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3701 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3702 (woman-delete-line 2)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3703 (if to (1- to) (point-max))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3704
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3705 (defun woman2-PD (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3706 ".PD d -- Set the interparagraph distance to d.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3707 Round to whole lines, default 1 line. Format paragraphs upto TO.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3708 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3709 ;; .ie \\n[.$] .nr PD (v;\\$1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3710 ;; .el .nr PD .4v>?\n[.V]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3711 (woman-set-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3712 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3713
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3714 (defun woman-set-interparagraph-distance ()
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3715 "Set the interparagraph distance from a .PD request at point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3716 (setq woman-interparagraph-distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3717 (if (eolp) 1 (woman-get-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3718 ;; Should allow .PD 0 to set zero line spacing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3719 (woman-delete-line 1)) ; ignore remaining args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3720
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3721 (defsubst woman-interparagraph-space ()
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3722 "Set variable `woman-leave-blank-lines' from `woman-interparagraph-distance'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3723 ; (if (> woman-interparagraph-distance 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3724 ; (forward-line 1) ; leave 1 blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3725 ; (woman-delete-line 1)) ; do not leave blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3726 (setq woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3727 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3728
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3729 (defun woman2-TH (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3730 ".TH n c x v m -- Begin a man page. Format paragraphs upto TO.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3731 n is the name of the page in chapter c\; x is extra commentary\;
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3732 v alters page foot left; m alters page head center.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3733 \(Should set prevailing indent and tabs to 5.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3734 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3735 (insert ?\()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3736 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3737 (insert ?\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3738 (let ((start (point)) here)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3739 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3740 (cond ((looking-at "\"\"[ \t]")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3741 (delete-char 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3742 ;; (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3743 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3744 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3745 (setq here (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3746 (insert " -- ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3747 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3748 ;; Delete repeated arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3749 (if (string-match (buffer-substring here (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3750 (buffer-substring start here))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3751 (delete-region here (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3752 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3753 ;; Embolden heading (point is at end of heading):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3754 (woman-set-face
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
3755 (save-excursion (beginning-of-line) (point)) (point) 'woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3756 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3757 (delete-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3758 (setq woman-left-margin woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3759 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3760 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3761
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3762 (defun woman2-SH (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3763 ".SH -- Sub-head. Leave blank line and subhead.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3764 Format paragraphs upto TO. Set prevailing indent to 5."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3765 (if (eolp) ; If no args then
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3766 (delete-char 1) ; apply to next line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3767 (woman-unquote-args) ; else unquote to end of heading
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3768 (beginning-of-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3769 (woman2-process-escapes-to-eol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3770 (woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3771 (setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3772 ;; Optionally embolden heading (point is at beginning of heading):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3773 (if woman-bold-headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3774 (woman-set-face
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
3775 (point) (save-excursion (end-of-line) (point)) 'woman-bold))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3776 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3777 (setq woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3778 woman-nofill nil) ; fill output lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3779 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3780 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3781
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3782 (defun woman2-SS (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3783 ".SS -- Sub-sub-head. Like .SH but indent heading 3 spaces.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3784 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3785 (if (eolp) ; If no args then
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3786 (delete-char 1)) ; apply to next line.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3787 (insert " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3788 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3789 (woman2-SH to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3790
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3791 (defun woman2-LP (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3792 ".LP,.PP -- Begin paragraph. Set prevailing indent to 5.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3793 Leave 1 blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3794 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3795 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3796 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3797 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3798
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3799 (defalias 'woman2-PP 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3800 (defalias 'woman2-P 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3801
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3802 (defun woman2-ns (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3803 ".ns -- Turn on no-space mode. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3804 ;; Should not cause a break!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3805 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3806 (setq woman-nospace t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3807 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3808
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3809 (defun woman2-rs (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3810 ".rs -- Turn off no-space mode. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3811 ;; Should not cause a break!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3812 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3813 (setq woman-nospace nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3814 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3815
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3816 (defun woman2-sp (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3817 ".sp N -- If N > 0 then leave 1 blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3818 (let ((N (if (eolp) 1 (woman-get-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3819 (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3820 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3821 (setq woman-negative-vertical-space t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3822 (insert ".sp ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3823 (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3824 (setq woman-leave-blank-lines N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3825 (woman2-format-paragraphs to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3826
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3827 (defun woman-negative-vertical-space (from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3828 ".sp N with N < 0 => overlap following with preceding lines at FROM."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3829 ;; Run by woman-decode-region if necessary -- not usually required.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3830 (WoMan-warn "Negative vertical spacing support is experimental!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3831 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3832 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3833 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3834 (re-search-forward "^\\.sp " nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3835 (let ((N (woman-get-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3836 overlap overwritten)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3837 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3838 (setq from (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3839 overlap (buffer-substring from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3840 (progn (forward-line (- N)) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3841 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3842 (forward-line N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3843 (let ((imax (length overlap))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3844 (i 0) c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3845 (while (< i imax)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3846 (setq c (aref overlap i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3847 (cond ((eq c ?\n) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3848 (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3849 ((eolp) ; extend line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3850 ;; Insert character INCLUDING TEXT PROPERTIES:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3851 ;; (insert (substring overlap i (1+ i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3852 (let ((eol (string-match "\n" overlap i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3853 (insert (substring overlap i eol))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3854 (setq i (or eol imax)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3855 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3856 ((eq c ?\ ) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3857 (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3858 ((eq c ?\t) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3859 (if (eq (following-char) ?\t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3860 (forward-char) ; both tabs, just skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3861 (let ((i woman-tab-width))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3862 (while (> i 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3863 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3864 (insert ?\ ) ; extend line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3865 (forward-char)) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3866 (setq i (1- i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3867 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3868 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3869 (if (or (eq (following-char) ?\ ) ; overwrite OK
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3870 overwritten) ; warning only once per ".sp -"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3871 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3872 (setq overwritten t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3873 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3874 "Character(s) overwritten by negative vertical spacing in line %d"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3875 (count-lines 1 (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3876 (delete-char 1) (insert (substring overlap i (1+ i)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3877 (setq i (1+ i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3878 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3879 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3880
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3881
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3882 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3883 ;; The following function should probably do ALL width and number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3884 ;; register interpolation.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3885 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3886
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3887 (defun woman2-process-escapes (to &optional numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3888 "Process remaining escape sequences up to marker TO, preserving point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3889 Optional argument NUMERIC, if non-nil, means the argument is numeric."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3890 ;; The first two cases below could be merged (maybe)!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3891 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3892 ;; Discard zero width filler character used to hide leading dots
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3893 ;; and zero width characters \|, \^:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3894 (while (re-search-forward "\\\\[&|^]" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3895 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3896 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3897 ;; Interrupt text processing -- CONTINUE current text with the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3898 ;; next text line (after any control lines, unless processing to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3899 ;; eol):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3900 (while (re-search-forward "\\\\c.*\n?" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3901 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3902 ;; but do not delete the final newline ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3903 (if (and (or (eobp) (= (point) to)) (not (bolp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3904 (insert-before-markers ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3905 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3906 (woman-translate to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3907 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3908 (woman-special-characters to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3909 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3910 ;; Printable version of the current escape character, ASSUMED to be `\'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3911 ;; This must be done LAST of all escape processing!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3912 ;; Done like this to preserve any text properties of the `\'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3913 (while (search-forward "\\" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3914 (let ((c (following-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3915 (cond ((eq c ?') ; \' -> '
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3916 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3917 (cond (numeric ; except in numeric args, \' -> `
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3918 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3919 (insert ?`))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3920 ((eq c ?\( )) ; uninterpreted special character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3921 ; \(.. -- do nothing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3922 ((eq c ?t) ; non-interpreted tab \t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3923 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3924 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3925 (insert "\t"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3926 ((and numeric
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3927 (memq c '(?w ?n ?h)))) ; leave \w, \n, \h (?????)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3928 ((eq c ?l) (woman-horizontal-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3929 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3930 ;; \? -> ? where ? is any remaining character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3931 (WoMan-warn "Escape ignored: \\%c -> %c" c c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3932 (delete-char -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3933 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3934 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3935 ;; Process non-default tab settings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3936 (cond (tab-stop-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3937 (while (search-forward "\t" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3938 (woman-tab-to-tab-stop))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3939 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3940
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3941 ;; Must replace \' by something before processing \w, done above.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3942
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3943 ;; Replace all `\w' and `\n' escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3944 ;; (This may be a bit too recursive!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3945 (while (re-search-forward "\\\\[nw]" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3946 (let ((from (match-beginning 0)) N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3947 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3948 (setq N (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3949 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3950 ;; Interpolate value:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3951 (insert-before-markers (number-to-string N))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3952 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3953
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3954 (defun woman-horizontal-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3955 "\\l'Nc' -- Draw a horizontal line of length N using character c, default _."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3956 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3957 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3958 (looking-at "\\(.\\)\\(.*\\)\\1")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3959 (let ((to (make-marker)) from N c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3960 (set-marker to (match-end 2))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3961 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3962 (setq from (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3963 N (woman-parse-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3964 (setq c (if (< (point) to) (following-char) ?_))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3965 (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3966 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3967 (set-marker to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3968 (insert (make-string N c))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3969 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3970
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3971 ;;; 4. Text Filling, Adjusting, and Centering
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3972
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3973 (defun woman2-br (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3974 ".br -- Break. Leave no blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3975 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3976 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3977
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3978 (defun woman2-fi (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3979 ".fi -- Fill subsequent output lines. Leave no blank line.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3980 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3981 (setq woman-nofill nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3982 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3983 ;; Preserve any final blank line in the nofill region:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3984 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3985 (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3986 (if (looking-at "[ \t]*$") (setq woman-leave-blank-lines 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3987 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3988
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3989 (defun woman2-nf (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3990 ".nf -- Nofill. Subsequent lines are neither filled nor adjusted.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3991 Input text lines are copied directly to output lines without regard
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3992 for the current line length. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3993 (setq woman-nofill t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3994 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3995 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3996
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3997 (defun woman2-ad (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3998 ".ad c -- Line adjustment is begun (once fill mode is on).
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3999 Set justification mode to c if specified.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4000 Format paragraphs upto TO. (Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4001 ;; c = l -- left, r -- right, c -- center, b or n -- both,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4002 ;; absent -- unchanged. Initial mode adj,both.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4003 (setq woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4004 (cond ((eolp) woman-adjust-previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4005 ((eq (following-char) ?l) woman-adjust-left)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4006 ((eq (following-char) ?r) woman-adjust-right)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4007 ((eq (following-char) ?c) woman-adjust-center)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4008 ((memq (following-char) '(?b ?n)) woman-adjust-both)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4009 (t (woman-get-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4010 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4011 woman-justify (nth woman-adjust woman-justify-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4012 (woman-delete-line 1) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4013 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4014
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4015 (defun woman2-na (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4016 ".na -- No adjusting. Format paragraphs upto TO.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4017 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4018 (setq woman-adjust-previous woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4019 woman-justify-previous woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4020 woman-adjust woman-adjust-left ; fill but do not adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4021 woman-justify (nth woman-adjust woman-justify-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4022 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4023 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4024
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4025 ;;; The main formatting functions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4026
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4027 (defun woman-leave-blank-lines (&optional leave)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4028 "Delete all blank lines around point.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4029 Leave one blank line if optional argument LEAVE is non-nil and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4030 non-zero, or if LEAVE is nil and variable `woman-leave-blank-lines' is
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4031 non-nil and non-zero."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4032 ;; ***** It may suffice to delete only lines ABOVE point! *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4033 ;; NOTE: Function arguments are evaluated left to right
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4034 ;; (*note (elisp)Function Forms::.).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4035 (delete-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4036 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4037 (if (not (eq (skip-syntax-backward " ") 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4038 (forward-line)) ; forward-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4039 (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4040 (progn (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4041 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4042 (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4043 (if woman-nospace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4044 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4045 (if (or (null leave) (eq leave 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4046 ;; output any `pending' vertical space ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4047 (setq leave woman-leave-blank-lines))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4048 (if (and leave (> leave 0)) (insert-before-markers ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4049 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4050 (setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4051 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4052
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4053 ;; `fill-region-as-paragraph' in `fill.el' appears to be the principal
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4054 ;; text filling function, so that is what I use here.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4055
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4056 (defvar woman-temp-indent nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4057
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4058 (defun woman2-format-paragraphs (to &optional new-left)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4059 "Indent, fill and adjust paragraphs upto TO to current left margin.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4060 If optional arg NEW-LEFT is non-nil then reset current left margin.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4061 If `woman-nofill' is non-nil then indent without filling or adjusting."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4062 ;; Blank space should only ever be output before text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4063 (if new-left (setq left-margin new-left))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4064 (if (looking-at "^\\s *$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4065 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4066 (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4067 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4068 ;; Successive control lines are sufficiently common to be worth a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4069 ;; special case (maybe):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4070 (if (>= (point) to) ; >= as a precaution!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4071 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4072 ;; (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4073 (woman-reset-nospace)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4074 ;; (woman2-process-escapes to) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4075 (woman2-process-escapes to 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4076 (if woman-nofill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4077 ;; Indent without filling or adjusting ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4078 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4079 (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4080 (cond (woman-temp-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4081 (indent-to woman-temp-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4082 (forward-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4083 (indent-rigidly (point) to left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4084 (woman-horizontal-escapes to)) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4085 ;; Fill and justify ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4086 ;; Blank lines and initial spaces cause a break.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4087 ; (cond ((and (= (point) to) (not (looking-at ".nf"))) ; Yuk!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4088 ; ;; No text after a request that caused a break, so delete
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4089 ; ;; any spurious blank line left:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4090 ; (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4091 ; (if (looking-at "^\\s *$") (kill-line) (forward-line))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4092 (while (< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4093 (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4094 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4095 ;; Indent first lin of paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4096 (indent-to (or woman-temp-indent left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4097 (woman-horizontal-escapes to) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4098 ;; Find the beginning of the next paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4099 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4100 ; (if (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4101 ; ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4102 ; (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4103 ; (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4104 ; (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4105 ; (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4106 ; (setq woman-leave-blank-lines nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4107 (and (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4108 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4109 (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4110 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4111 (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4112 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4113 ;; If a single short line then just leave it.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4114 ;; This is necessary to preserve some table layouts.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4115 ;; PROBABLY NOT NECESSARY WITH SQUEEZE MODIFICATION !!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4116 (if (or (> (count-lines from (point)) 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4117 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4118 (backward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4119 (> (current-column) fill-column)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4120 ;; ?roff does not squeeze multiple spaces
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4121 ;; (fill-region-as-paragraph from (point) woman-justify t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4122 ;; NOSQUEEZE has no effect if JUSTIFY is full, so
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4123 ;; redefine canonically-space-region, see above.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4124 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4125 ;; Needs a re-write of the paragraph formatter to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4126 ;; avoid this nonsense to handle temporary indents!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4127 (if (and woman-temp-indent (< woman-temp-indent left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4128 (let ((left-margin woman-temp-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4129 (fill-region-as-paragraph from (point) woman-justify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4130 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4131 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4132 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4133 (setq from (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4134 (fill-region-as-paragraph from (point) woman-justify))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4135 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4136 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4137 ;; Delete all but 1 trailing blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4138 ;;(woman-leave-blank-lines 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4139 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4140 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4141 (setq woman-temp-indent nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4142 ;; Non-white-space text has been processed, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4143 ;;(setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4144 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4145
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4146
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4147 ;;; Tagged, indented and hanging paragraphs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4148
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4149 (defun woman2-TP (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4150 ".TP i -- Set prevailing indent to i. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4151 Begin indented paragraph with hanging tag given by next text line.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4152 If tag doesn't fit, place it on a separate line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4153 (let ((i (woman2-get-prevailing-indent)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4154 (woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4155 (woman2-tagged-paragraph to i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4156
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4157 (defun woman2-IP (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4158 ".IP x i -- Same as .TP with tag x. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4159 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4160 (if (eolp) ; no args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4161 ;; Like LP without resetting prevailing indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4162 (woman2-format-paragraphs to (+ woman-left-margin
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4163 woman-prevailing-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4164 (woman-forward-arg 'unquote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4165 (let ((i (woman2-get-prevailing-indent 'leave-eol)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4166 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4167 (woman-leave-blank-lines) ; must be here,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4168 (woman2-tagged-paragraph to i))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4169
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4170 (defun woman-find-next-control-line-carefully ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4171 "Find and return start of next control line, even if already there!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4172 (if (looking-at "^[.']")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4173 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4174 (woman-find-next-control-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4175
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4176 (defun woman2-tagged-paragraph (to i)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4177 "Begin indented paragraph with hanging tag given by current text line.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4178 If tag doesn't fit, leave it on separate line.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4179 Format paragraphs upto TO. Set prevailing indent to I."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4180 (if (not (looking-at "\\s *$")) ; non-empty tag
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4181 (setq woman-leave-blank-lines nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4182
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4183 ;; Temporary hack for bash.1 and groff_mmse.7 until code is revised
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4184 ;; to process all requests uniformly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4185 (cond ((and (= (point) to) (looking-at "^[.'][ \t]*\\(PD\\|br\\|ta\\) *"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4186 (if (string= (match-string 1) "br")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4187 (woman-delete-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4188 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4189 (if (string= (match-string 1) "ta") ; for GetInt.3
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4190 (woman2-ta to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4191 (woman-set-interparagraph-distance)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4192 (set-marker to (woman-find-next-control-line-carefully))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4193 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4194
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4195 (let ((tag (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4196 (woman-reset-nospace)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4197 ;; Format the tag:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4198 (woman2-process-escapes-to-eol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4199 ;; TIDY UP THE FOLLOWING CODE
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4200 ;; (indent-to woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4201 (setq left-margin woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4202 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4203 (fill-region-as-paragraph (save-excursion (forward-line -1) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4204 (point) woman-justify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4205
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4206 ;; Temporary hack for bash.1 until all requests processed uniformly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4207 (cond ((and (= (point) to) (looking-at "^[.'][ \t]*PD *"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4208 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4209 (woman-set-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4210 (set-marker to (woman-find-next-control-line-carefully))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4211 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4212
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4213 ;; Format the paragraph body, if there is one! Set indented left
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4214 ;; margin anyway, because the paragraph body may begin with a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4215 ;; control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4216 (setq left-margin (+ woman-left-margin i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4217 (cond ((< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4218 (woman2-format-paragraphs to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4219 (goto-char tag) (end-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4220 (cond ((> (setq i (- left-margin (current-column))) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4221 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4222 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4223 ;; Necessary to avoid spaces inheriting underlines.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4224 ;; Cannot simply delete (current-column) whitespace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4225 ;; characters because some may be tabs!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4226 (while (> i 0) (insert ? ) (setq i (1- i)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4227 (goto-char to) ; necessary ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4228 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4229 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4230
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4231 (defun woman2-HP (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4232 ".HP i -- Set prevailing indent to i. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4233 Begin paragraph with hanging indent."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4234 (let ((i (woman2-get-prevailing-indent)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4235 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4236 (setq woman-temp-indent woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4237 (woman2-format-paragraphs to (+ woman-left-margin i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4238 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4239
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4240 (defun woman2-get-prevailing-indent (&optional leave-eol)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4241 "Set prevailing indent to integer argument at point, and return it.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4242 If no argument then return the existing prevailing indent.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4243 Delete line from point and eol unless LEAVE-EOL is non-nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4244 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4245 (or leave-eol (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4246 (let ((i (woman-get-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4247 (woman-delete-line) (or leave-eol (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4248 ;; i = 0 if the argument was not a number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4249 (if (> i 0) (setq woman-prevailing-indent i))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4250 woman-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4251
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4252 (defmacro woman-push (value stack)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4253 "Push VALUE onto STACK."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4254 `(setq ,stack (cons ,value ,stack)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4255
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4256 (defmacro woman-pop (variable stack)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4257 "Pop into VARIABLE the value at the top of STACK.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4258 Allow for mismatched requests!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4259 `(if ,stack
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4260 (setq ,variable (car ,stack)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4261 ,stack (cdr ,stack))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4262
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4263 (defun woman2-RS (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4264 ".RS i -- Start relative indent, move left margin in distance i.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4265 Set prevailing indent to 5 for nested indents. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4266 (woman-push woman-left-margin woman-RS-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4267 (woman-push woman-prevailing-indent woman-RS-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4268 (setq woman-left-margin (+ woman-left-margin
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4269 (woman2-get-prevailing-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4270 woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4271 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4272
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4273 (defun woman2-RE (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4274 ".RE -- End of relative indent. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4275 Set prevailing indent to amount of starting .RS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4276 (woman-pop woman-left-margin woman-RS-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4277 (woman-pop woman-prevailing-indent woman-RS-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4278 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4279 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4280
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4281
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4282 ;;; Line Length and Indenting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4283
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4284 (defun woman-set-arg (arg &optional previous)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4285 "Reset, increment or decrement argument ARG, which must be quoted.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4286 If no argument then use value of optional arg PREVIOUS if non-nil,
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4287 otherwise set PREVIOUS. Delete the whole remaining control line."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4288 (if (eolp) ; space already skipped
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4289 (set arg (if previous (eval previous) 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4290 (if previous (set previous (eval arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4291 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4292 (let ((pm (if (looking-at "[+-]")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4293 (prog1 (following-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4294 (forward-char 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4295 (i (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4296 (cond ((null pm) (set arg i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4297 ((= pm ?+) (set arg (+ (eval arg) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4298 ((= pm ?-) (set arg (- (eval arg) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4299 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4300 (beginning-of-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4301 (woman-delete-line 1)) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4302
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4303 ;; NEED TO RATIONALIZE NAMES FOR PREVIOUS VALUES!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4304 (defvar woman-ll-fill-column woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4305 (defvar woman-in-left-margin woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4306
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4307 (defun woman2-ll (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4308 ".ll +/-N -- Set, increment or decrement line length.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4309 Format paragraphs upto TO. (Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4310 (woman-set-arg 'fill-column 'woman-ll-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4311 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4312
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4313 (defun woman2-in (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4314 ".in +/-N -- Set, increment or decrement the indent.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4315 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4316 (woman-set-arg 'left-margin 'woman-in-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4317 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4318
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4319 (defun woman2-ti (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4320 ".ti +/-N -- Temporary indent. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4321 ;; Ignore if no argument.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4322 ;; Indent next output line only wrt current indent.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4323 ;; Current indent is not changed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4324 (setq woman-temp-indent left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4325 (woman-set-arg 'woman-temp-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4326 (woman2-format-paragraphs to nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4327
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4328
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4329 ;;; Tabs, Leaders, and Fields:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4330
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4331 (defun woman2-ta (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4332 ".ta Nt ... -- Set tabs, left type, unless t=R(right), C(centered).
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4333 \(Breaks, but should not.) The tab stops are separated by spaces\;
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4334 a value preceded by + represents an increment to the previous stop value.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4335 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4336 (setq tab-stop-list nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4337 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4338 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4339 (let ((tab-stop 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4340 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4341 (let ((plus (cond ((eq (following-char) ?+) (forward-char 1) t)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4342 (i (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4343 (setq tab-stop (if plus (+ tab-stop i) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4344 (if (memq (following-char) '(?R ?C))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4345 (setq tab-stop (cons tab-stop (following-char))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4346 (setq tab-stop-list (cons tab-stop tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4347 (skip-syntax-forward "^ ") ; skip following R, C, `;', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4348 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4349 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4350 (woman-delete-line 1) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4351 (setq tab-stop-list (reverse tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4352 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4353
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4354 (defsubst woman-get-tab-stop (tab-stop-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4355 "If TAB-STOP-LIST is a cons, return its car, else return TAB-STOP-LIST."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4356 (if (consp tab-stop-list) (car tab-stop-list) tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4357
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4358 (defun woman-tab-to-tab-stop ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4359 "Insert spaces to next defined tab-stop column.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4360 The variable `tab-stop-list' is a list whose elements are either left
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4361 tab stop columns or pairs (COLUMN . TYPE) where TYPE is R or C."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4362 ;; Based on tab-to-tab-stop in indent.el.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4363 ;; R & C tabs probably not quite right!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4364 (delete-backward-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4365 (let ((tabs tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4366 (while (and tabs (>= (current-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4367 (woman-get-tab-stop (car tabs))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4368 (setq tabs (cdr tabs)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4369 (if tabs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4370 (let* ((tab (car tabs))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4371 (type (and (consp tab) (cdr tab)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4372 eol n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4373 (if type
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4374 (setq tab (woman-get-tab-stop tab)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4375 eol (save-excursion (end-of-line) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4376 n (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4377 (search-forward "\t" eol t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4378 n (- (if n (1- n) eol) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4379 tab (- tab (if (eq type ?C) (/ n 2) n))) )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4380 (setq n (- tab (current-column)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4381 (while (> n 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4382 (insert ?\ )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4383 (setq n (1- n))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4384 (insert ?\ ))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4385
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4386 (defun woman2-DT (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4387 ".DT -- Restore default tabs. Format paragraphs upto TO.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4388 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4389 ;; Currently just terminates special tab processing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4390 (setq tab-stop-list nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4391 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4392 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4393
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4394 (defun woman2-fc (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4395 ".fc a b -- Set field delimiter a and pad character b.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4396 Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4397 A VERY FIRST ATTEMPT to make fields at least readable!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4398 Needs doing properly!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4399 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4400 (woman-delete-whole-line) ; ignore!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4401 (let ((delim (following-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4402 (pad ?\ ) end) ; pad defaults to space
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4403 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4404 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4405 (or (eolp) (setq pad (following-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4406 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4407 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4408 (if (re-search-forward "^[.'][ \t]*fc\\s " nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4409 (setq end (match-beginning 0))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4410 ;; A field is contained between a pair of field delimiter
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4411 ;; characters and consists of sub-strings separated by padding
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4412 ;; indicator characters:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4413 (setq delim (string delim ?[ ?^ delim ?] ?* delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4414 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4415 (while (re-search-forward delim end t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4416 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4417 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4418 (insert woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4419 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4420 (delete-backward-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4421 (insert-before-markers woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4422 (subst-char-in-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4423 (match-beginning 0) (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4424 pad woman-unpadded-space-char t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4425 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4426 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4427 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4428
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4429
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4430 ;;; Preliminary table support (.TS/.TE)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4431
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4432 (defun woman2-TS (to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4433 ".TS -- Start of table code for the tbl processor.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4434 Format paragraphs upto TO."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4435 ;; This is a preliminary hack that seems to suffice for lilo.8.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4436 (woman-delete-line 1) ; ignore any arguments
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4437 (when woman-emulate-tbl
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4438 ;; Assumes column separator is \t and intercolumn spacing is 3.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4439 ;; The first line may optionally be a list of options terminated by
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4440 ;; a semicolon. Currently, just delete it:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4441 (if (looking-at ".*;[ \t]*$") (woman-delete-line 1)) ;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4442 ;; The following lines must specify the format of each line of the
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4443 ;; table and end with a period. Currently, just delete them:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4444 (while (not (looking-at ".*\\.[ \t]*$")) (woman-delete-line 1))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4445 (woman-delete-line 1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4446 ;; For each column, find its width and align it:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4447 (let ((start (point)) (col 1))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4448 (while (prog1 (search-forward "\t" to t) (goto-char start))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4449 ;; Find current column width:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4450 (while (< (point) to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4451 (when (search-forward "\t" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4452 (backward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4453 (if (> (current-column) col) (setq col (current-column))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4454 (forward-line))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4455 ;; Align current column:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4456 (goto-char start)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4457 (setq col (+ col 3)) ; intercolumn space
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4458 (while (< (point) to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4459 (when (search-forward "\t" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4460 (delete-char -1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4461 (insert-char ?\ (- col (current-column))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4462 (forward-line))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4463 (goto-char start))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4464 ;; Format table with no filling or adjusting (cf. woman2-nf):
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4465 (setq woman-nofill t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4466 (woman2-format-paragraphs to))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4467
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4468 (defalias 'woman2-TE 'woman2-fi)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4469 ;; ".TE -- End of table code for the tbl processor."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4470 ;; Turn filling and adjusting back on.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4471
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4472
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4473 ;;; WoMan message logging:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4474
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4475 ;; The basis for this logging code was shamelessly pirated from bytecomp.el
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4476 ;; by Jamie Zawinski <jwz@lucid.com> & Hallvard Furuseth <hbf@ulrik.uio.no>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4477
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4478 (defvar WoMan-current-file nil) ; bound in woman-really-find-file
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4479 (defvar WoMan-Log-header-point-max nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4480
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4481 (defun WoMan-log-begin ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4482 "Log the beginning of formatting in *WoMan-Log*."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4483 (let ((WoMan-current-buffer (buffer-name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4484 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4485 (set-buffer (get-buffer-create "*WoMan-Log*"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4486 (or (eq major-mode 'view-mode) (view-mode 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4487 (setq buffer-read-only nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4488 (goto-char (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4489 (insert "\n\^L\nFormatting "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4490 (if (stringp WoMan-current-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4491 (concat "file " WoMan-current-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4492 (concat "buffer " WoMan-current-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4493 " at " (current-time-string) "\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4494 (setq WoMan-Log-header-point-max (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4495 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4496
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4497 (defun WoMan-log (format &rest args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4498 "Log a message out of FORMAT control string and optional ARGS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4499 (WoMan-log-1 (apply 'format format args)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4500
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4501 (defun WoMan-warn (format &rest args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4502 "Log a warning message out of FORMAT control string and optional ARGS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4503 (setq format (apply 'format format args))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4504 (WoMan-log-1 (concat "** " format)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4505
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4506 (defun WoMan-warn-ignored (request ignored)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4507 "Log a warning message about ignored directive REQUEST.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4508 IGNORED is a string appended to the log message."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4509 (let ((tail
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4510 (buffer-substring (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4511 (save-excursion (end-of-line) (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4512 (if (and (> (length tail) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4513 (/= (string-to-char tail) ?\ ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4514 (setq tail (concat " " tail)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4515 (WoMan-log-1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4516 (concat "** " request tail " request " ignored))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4517
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4518 (defun WoMan-log-end (time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4519 "Log the end of formatting in *WoMan-Log*.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4520 TIME specifies the time it took to format the man page, to be printed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4521 with the message."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4522 (WoMan-log-1 (format "Formatting time %d seconds." time) 'end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4523
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4524 (defun WoMan-log-1 (string &optional end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4525 "Log a message STRING in *WoMan-Log*.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4526 If optional argument END is non-nil then make buffer read-only after
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4527 logging the message."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4528 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4529 (set-buffer (get-buffer-create "*WoMan-Log*"))
35690
89f18a0fac53 (WoMan-log-1): Make the log buffer writable. From
Eli Zaretskii <eliz@gnu.org>
parents: 32759
diff changeset
4530 (setq buffer-read-only nil)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4531 (goto-char (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4532 (or end (insert " ")) (insert string "\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4533 (if end
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4534 (setq buffer-read-only t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4535 (if woman-show-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4536 (select-window ; to return to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4537 (prog1 (selected-window) ; WoMan window
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4538 (select-window (display-buffer (current-buffer)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4539 (cond (WoMan-Log-header-point-max
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4540 (goto-char WoMan-Log-header-point-max)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4541 (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4542 (recenter 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4543 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4544 nil) ; for woman-file-readable-p etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4545
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4546 (provide 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4547
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 50404
diff changeset
4548 ;;; arch-tag: eea35e90-552f-4712-a94b-d9ffd3db7651
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4549 ;;; woman.el ends here