annotate lisp/woman.el @ 68498:528aecb860cf

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-30 Creator: Michael Olson <mwolson@gnu.org> Merge from erc--main--0 2006-01-30 Michael Olson <mwolson@gnu.org> * erc-stamp.el (erc-timestamp-right-align-by-pixel): New option that determines whether to use pixel values to align right timestamps. The default is not to do so, since it only works with Emacs22 on X, and even then some people have trouble. (erc-insert-aligned): Use `erc-timestamp-right-align-by-pixel'.
author Miles Bader <miles@gnu.org>
date Tue, 31 Jan 2006 00:24:36 +0000
parents bd98d8a37303
children 3bd95f4f2941 0ca0d9181b5e
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
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 2000, 2002, 2003, 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>
65380
71481859776b (woman-file-name): Provide a default, not initial input.
Richard M. Stallman <rms@gnu.org>
parents: 65359
diff changeset
6 ;; Maintainer: FSF
47978
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
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63509
diff changeset
26 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63509
diff changeset
27 ;; Boston, MA 02110-1301, USA.
28832
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
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
139 ;; Using the word at point as the default topic
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
140 ;; ============================================
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
141
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
142 ;; The `woman' command uses the word nearest to point in the current
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
143 ;; buffer as the default topic to look up if it matches the name of a
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
144 ;; manual page installed on the system. The default topic can also be
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
145 ;; used without confirmation by setting the user-option
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
146 ;; `woman-use-topic-at-point' to t; thanks to Benjamin Riefenstahl for
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
147 ;; suggesting this functionality.
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
148
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
149 ;; The variable `woman-use-topic-at-point' can be rebound locally,
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
150 ;; which may be useful to provide special private key bindings, e.g.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
151
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
152 ;; (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
153 ;; (lambda ()
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
154 ;; (interactive)
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
155 ;; (let ((woman-use-topic-at-point t))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
156 ;; (woman)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
157
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
158
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
159 ;; Customization, Hooks and Imenu
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
160 ;; ==============================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
161
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
162 ;; WoMan supports the GNU Emacs 20+ customization facility, and puts
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
163 ;; a customization group called `WoMan' in the `Help' group under the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
164 ;; top-level `Emacs' group. In order to be able to customize WoMan
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
165 ;; without first loading it, add the following sexp to your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
166
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
167 ;; (defgroup woman nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
168 ;; "Browse UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
169 ;; :tag "WoMan" :group 'help :load "woman")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
170
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
171
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
172 ;; WoMan currently runs two hooks: `woman-pre-format-hook' immediately
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
173 ;; before formatting a buffer and `woman-post-format-hook' immediately
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
174 ;; after formatting a buffer. These hooks can be used for special
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
175 ;; customizations that require code to be executed, etc., although
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
176 ;; most customization should be possible by setting WoMan user option
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
177 ;; variables, e.g. in `.emacs' and should NOT require the use of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
178 ;; hooks. `woman-pre-format-hook' might be appropriate for face
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
179 ;; customization, whereas `woman-post-format-hook' might be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
180 ;; appropriate for installing a dynamic menu using `imenu' (although
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
181 ;; it is better to use the built-in WoMan imenu support).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
182
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
183 ;; The WoMan menu provides an option to make a contents menu for the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
184 ;; current man page (using imenu). Alternatively, if you set the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
185 ;; variable `woman-imenu' to `t' then WoMan will do it automatically
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
186 ;; for every man page. The menu title is the value of the variable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
187 ;; `woman-imenu-title', which is "CONTENTS" by default. By default,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
188 ;; the menu shows manual sections and subsections, but you can change
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
189 ;; this by changing the value of `woman-imenu-generic-expression'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
190 ;; This facility is not yet widely tested and may be fooled by obscure
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
191 ;; man pages that `break the rules'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
192
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
193 ;; WoMan is configured not to replace spaces in an imenu *Completion*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
194 ;; buffer. For further documentation of the use of imenu, such as
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
195 ;; menu sorting, see the source file imenu.el, which is distributed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
196 ;; with GNU Emacs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
197
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
198 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
199
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
200 ;; Howard Melman made (essentially) the following suggestions, which
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
201 ;; are slightly different from the expression that I currently use.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
202 ;; You may prefer one of Howard's suggestions, which I think assume
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
203 ;; that `case-fold-search' is `t' (which it is by default):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
204
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
205 ;; (setq woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
206 ;; '((nil "^\\( \\)?\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 2)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
207
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
208 ;; 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
209 ;; name hierarchy. If you just want .SH in the imenu then use:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
210
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
211 ;; (setq woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
212 ;; '((nil "^\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
213
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
214 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
215
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
216
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
217 ;; Vertical spacing and blank lines
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 ;; The number of consecutive blank lines in the formatted buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
221 ;; 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
222 ;; .sp 1 (p. 14). Current policy is to output vertical space only
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
223 ;; immediately before text is output.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
224
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
225
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
226 ;; Horizontal and vertical spacing and resolution
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
227 ;; ==============================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
228
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
229 ;; WoMan currently assumes 10 characters per inch horizontally, hence
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
230 ;; a horizontal resolution of 24 basic units, and 5 lines per inch
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
231 ;; vertically, hence a vertical resolution of 48 basic units. (nroff
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
232 ;; uses 240 per inch).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
233
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
234
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
235 ;; The *WoMan-Log* buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
236 ;; ======================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
237
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
238 ;; This is modelled on the byte-compiler. It logs all files formatted
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
239 ;; by WoMan, and if WoMan finds anything that it cannot handle then it
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
240 ;; writes a warning to this buffer. If the variable `woman-show-log'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
241 ;; is non-nil (by default it is `nil') then WoMan automatically
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
242 ;; displays this buffer. Many WoMan warnings can be completely
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
243 ;; ignored, because they are reporting the fact that WoMan has ignored
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
244 ;; requests that it is correct to ignore. In some future version this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
245 ;; level of paranoia will be reduced, but not until WoMan is more
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
246 ;; reliable. At present, all warnings should be treated with some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
247 ;; suspicion. Uninterpreted escape sequences are also logged (in some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
248 ;; cases).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
249
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
250 ;; Uninterpreted ?roff requests can optionally be left in the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
251 ;; formatted buffer to indicate precisely where they occur by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
252 ;; resetting the variable `woman-ignore' to `nil' (by default it is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
253 ;; `t').
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
254
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
255 ;; Automatic initiation of woman decoding
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
256
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
257 ;; (Probably not a good idea. If you use it, be careful!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
258
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
259 ;; Put something like this in your .emacs. The call to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
260 ;; set-visited-file-name is to avoid font-locking triggered by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
261 ;; automatic major mode selection.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
262
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
263 ;; (autoload 'woman-decode-region "woman")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
264
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
265 ;; (setq format-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
266 ;; (cons
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
267 ;; '(man "UN*X man-page source format" "\\.\\(TH\\|ig\\) "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
268 ;; 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
269 ;; (lambda (arg)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
270 ;; 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
271 ;; (file-name-sans-extension buffer-file-name)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
272 ;; format-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
273
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
274
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
275 ;; Reporting Bugs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
276 ;; ==============
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
277
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
278 ;; If WoMan fails completely, or formats a file incorrectly
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
279 ;; (i.e. obviously wrongly or significantly differently from man) or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
280 ;; inelegantly, then please
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
281
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
282 ;; (a) check that you are running the latest version of woman.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
283 ;; available from my web site (see above),
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
284
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
285 ;; (b) check that the problem is not already described in the file
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
286 ;; woman.status, also available from my web site.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
287
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
288 ;; 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
289 ;; the *WoMan-Log* buffer relating to the problem file, together with
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
290 ;; a brief description of the problem. Please indicate where you got
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
291 ;; 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
292 ;; Thanks. (There is at present no automated bug-reporting facility
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
293 ;; for WoMan.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
294
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
295 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
296
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
297 ;; NOTE:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
298
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
299 ;; CASE-DEPENDENCE OF FILENAMES. By default, WoMan ignores case in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
300 ;; file pathnames only when it seems appropriate. MS-Windows users
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
301 ;; who want complete case independence should set the NTEmacs variable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
302 ;; `w32-downcase-file-names' to `t' and use all lower case when
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
303 ;; setting WoMan file paths.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
304
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
305 ;; (1) INCOMPATIBLE CHANGE! WoMan no longer uses a persistent topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
306 ;; cache by default. (It caused too much confusion!) Explicitly set
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
307 ;; the variable `woman-cache-filename' to save the cache between Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
308 ;; sessions. This is recommended only if the command `woman' is too
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
309 ;; 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
310 ;; builds its cache in main memory, which MAY be VERY slow.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
311
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
312 ;; (2) The user option `woman-cache-level' controls the amount of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
313 ;; information cached (in main memory and, optionally, saved to disc).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
314
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
315 ;; (3) UPDATING THE CACHE. A prefix argument always causes the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
316 ;; `woman' command (only) to rebuild its topic cache, and to re-save
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
317 ;; it to `woman-cache-filename' if this variable has a non-nil value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
318 ;; This is necessary if the NAMES (not contents) of any of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
319 ;; directories or files in the paths specified by `woman-manpath' or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
320 ;; `woman-path' change. If WoMan user options that affect the cache
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
321 ;; are changed then WoMan will automatically update its cache file on
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
322 ;; 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
323 ;; session.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
324
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
325 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
326
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
327
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
328 ;; TO DO
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
329 ;; =====
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
330
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
331 ;; Reconsider case sensitivity of file names.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
332 ;; MUST PROCESS .if, .nr IN ORDER ENCOUNTERED IN FILE! (rcsfile, mf).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
333 ;; Allow general delimiter in `\v', cf. `\h'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
334 ;; Improve major-mode documentation.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
335 ;; 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
336 ;; 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
337 ;; Emulate some preprocessor support for eqn (.EQ/.EN)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
338 ;; Re-write filling and adjusting code!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
339 ;; Allow word wrap at comma (for long option lists)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
340 ;; Buffer list handling not quite right.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
341 ;; Make 10 or 12 pitch (cpi) optional -- 12 => ll = 78
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
342 ;; Use unpaddable space for tabbing?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
343 ;; Tidy up handling of fonts when filling and adjusting
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
344 ;; -- see text/text properties?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
345 ;; Improve speed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
346 ;; Add font-lock support (for quoted strings, etc.)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
347 ;; Optionally save large files in enriched format?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
348 ;; Add apropos facility by searching NAME (?) entry in man files?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
349 ;; Documentation -- optional auto-display of formatted WoMan man page?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
350 ;; Implement a bug reporter?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
351 ;; Support diversion and traps (to some extent) - for Tcl/tk pages?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
352 ;; 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
353 ;; Fix .fc properly?
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
354
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
355
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
356 ;; Implementation strategy [this description is now well out of date!]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
357 ;; -- three main passes, each to process respectively:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
358
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
359 ;; 1) non-breaking `.' requests including font macros
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
360 ;; 2) \ escape sequences, mainly special characters and font changes
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
361 ;; 3) breaking `.' requests, mainly filling and justification
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
362
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
363 ;; For each pass, a control function finds and pre-processes the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
364 ;; escape or request and then calls the appropriate function to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
365 ;; perform the required formatting. Based originally on enriched.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
366 ;; and format.el.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
367
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
368 ;; 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
369 ;; 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
370 ;; http://cm.bell-labs.com/7thEdMan/
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
371
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
372
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
373 ;; Acknowledgements
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
374 ;; ================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
375
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
376 ;; For Heather, Kathryn and Madelyn, the women in my life
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
377 ;; (although they will probably never use it)!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
378
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
379 ;; I also thank the following for helpful suggestions, bug reports,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
380 ;; code fragments, general interest, etc.:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
381 ;; Jari Aalto <jari.aalto@cs.tpu.fi>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
382 ;; Dean Andrews <dean@dra.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
383 ;; Juanma Barranquero <barranquero@laley-actualidad.es>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
384 ;; Karl Berry <kb@cs.umb.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
385 ;; Jim Chapman <jchapman@netcomuk.co.uk>
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
386 ;; Kin Cho <kin@neoscale.com>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
387 ;; Frederic Corne <frederic.corne@erli.fr>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
388 ;; Peter Craft <craft@alacritech.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
389 ;; Charles Curley <ccurley@trib.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
390 ;; Jim Davidson <jdavidso@teknowledge.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
391 ;; Kevin D'Elia <Kevin.DElia@mci.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
392 ;; John Fitch <jpff@maths.bath.ac.uk>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
393 ;; Hans Frosch <jwfrosch@rish.b17c.ingr.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
394 ;; Guy Gascoigne-Piggford <ggp@informix.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
395 ;; Brian Gorka <gorkab@sanchez.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
396 ;; Nicolai Henriksen <nhe@lyngso-industri.dk>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
397 ;; Thomas Herchenroeder <the@software-ag.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
398 ;; Alexander Hinds <ahinds@thegrid.net>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
399 ;; Stefan Hornburg <sth@hacon.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
400 ;; Theodore Jump <tjump@cais.com>
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
401 ;; David Kastrup <dak@gnu.org>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
402 ;; Paul Kinnucan <paulk@mathworks.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
403 ;; Jonas Linde <jonas@init.se>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
404 ;; Andrew McRae <andrewm@optimation.co.nz>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
405 ;; Howard Melman <howard@silverstream.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
406 ;; Dennis Pixton <dennis@math.binghamton.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
407 ;; T. V. Raman <raman@Adobe.COM>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
408 ;; Bruce Ravel <bruce.ravel@nist.gov>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
409 ;; Benjamin Riefenstahl <benny@crocodial.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
410 ;; Kevin Ruland <kruland@seistl.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
411 ;; Tom Schutter <tom@platte.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
412 ;; Wei-Xue Shi <wxshi@ma.neweb.ne.jp>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
413 ;; Fabio Somenzi <fabio@joplin.colorado.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
414 ;; Karel Sprenger <ks@ic.uva.nl>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
415 ;; Chris Szurgot <szurgot@itribe.net>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
416 ;; 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
417 ;; Arrigo Triulzi <arrigo@maths.qmw.ac.uk>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
418 ;; Geoff Voelker <voelker@cs.washington.edu>
65392
476c6d40ab50 Fix my email address.
Eli Zaretskii <eliz@gnu.org>
parents: 65380
diff changeset
419 ;; Eli Zaretskii <eliz@gnu.org>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
420
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
421
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
422 ;;; Code:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
423
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
424 (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
425
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
426 (require 'man)
66177
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
427 (require 'button)
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
428 (define-button-type 'WoMan-xref-man-page
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
429 :supertype 'Man-abstract-xref-man-page
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
430 'func 'woman)
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
431
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
432 (eval-when-compile ; to avoid compiler warnings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
433 (require 'dired)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
434 (require 'apropos))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
435
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
436 (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
437 "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
438 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
439 ;; 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
440 ;; More concise implementation than the recursive one. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
441 (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
442
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
443 (defun woman-parse-colon-path (paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
444 "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
445 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
446 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
447 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
448 `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
449 ;; 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
450 ;; 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
451 ;; 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
452 (if (memq system-type '(windows-nt ms-dos))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
453 (cond ((null paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
454 (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
455 ((string-match ";" paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
456 ;; Assume DOS-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
457 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
458 (lambda (x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
459 (if x
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
460 (list x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
461 (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
462 (parse-colon-path paths)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
463 ((string-match "\\`[a-zA-Z]:" paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
464 ;; Assume single DOS-style path...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
465 paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
466 (t
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
467 ;; Assume UNIX/Cygwin-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
468 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
469 (lambda (x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
470 (mapcar 'woman-Cyg-to-Win
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
471 (if x (list x) (woman-parse-man.conf))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
472 (let ((path-separator ":"))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
473 (parse-colon-path paths)))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
474 ;; Assume host-default-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
475 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
476 (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
477 (parse-colon-path (or paths "")))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
478
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
479 (defun woman-Cyg-to-Win (file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
480 "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
481 ;; Code taken from w32-symlinks.el
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
482 (if (eq (aref file 0) ?/)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
483 ;; 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
484 (condition-case nil
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
485 (with-temp-buffer
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
486 ;; cygpath -m file
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
487 (call-process "cygpath" nil t nil "-m" file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
488 (buffer-substring 1 (buffer-size)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
489 (error
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
490 ;; Assume no `cygpath' program available.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
491 ;; 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
492 (when (string-match "\\`\\(/cygdrive\\|/\\)?/./" file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
493 (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
494 (setq file (substring file (match-end 1))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
495 (aset file 0 (aref file 1)) ; /x/ -> xx/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
496 (aset file 1 ?:)) ; xx/ -> x:/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
497 file))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
498 file))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
499
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
500
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
501 ;;; User options:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
502
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
503 ;; NB: Group identifiers must be lowercase!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
504
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
505 (defgroup woman nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
506 "Browse UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
507 :tag "WoMan"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
508 :group 'help)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
509
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
510 (defcustom woman-show-log nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
511 "*If non-nil then show the *WoMan-Log* buffer if appropriate.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
512 I.e. if any warning messages are written to it. Default is nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
513 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
514 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
515
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
516 (defcustom woman-pre-format-hook nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
517 "*Hook run by WoMan immediately before formatting a buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
518 Change only via `Customization' or the function `add-hook'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
519 :type 'hook
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
520 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
521
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
522 (defcustom woman-post-format-hook nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
523 "*Hook run by WoMan immediately after formatting a buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
524 Change only via `Customization' or the function `add-hook'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
525 :type 'hook
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
526 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
527
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
528
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
529 ;; Interface options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
530
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
531 (defgroup woman-interface nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
532 "Interface options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
533 :tag "WoMan Interface"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
534 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
535
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
536 (defcustom woman-man.conf-path
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
537 (let ((path '("/usr/lib" "/etc")))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
538 (if (eq system-type 'windows-nt)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
539 (mapcar 'woman-Cyg-to-Win path)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
540 path))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
541 "*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
542 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
543 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
544 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
545 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
546 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
547 :type '(repeat string)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
548 :group 'woman-interface)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
549
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
550 (defun woman-parse-man.conf ()
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
551 "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
552 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
553 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
554 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
555 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
556 or
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
557 MANDATORY_MANPATH /usr/man
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
558 or
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
559 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
560 ;; 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
561 (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
562 file manpath)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
563 (while (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
564 path
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
565 (not (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
566 (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
567 ;; 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
568 (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
569 (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
570 (setq file
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
571 (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
572 (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
573 ;; 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
574 (with-temp-buffer
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
575 (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
576 (while (re-search-forward
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
577 ;; `\(?: ... \)' is a "shy group"
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
578 "\
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
579 ^[ \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
580 (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
581 manpath))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
582 ))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
583 (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
584 (nreverse manpath)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
585
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
586 (defcustom woman-manpath
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
587 (or (woman-parse-colon-path (getenv "MANPATH"))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
588 '("/usr/man" "/usr/share/man" "/usr/local/man"))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
589 "*List of DIRECTORY TREES to search for UN*X manual files.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
590 Each element should be the name of a directory that contains
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
591 subdirectories of the form `man?', or more precisely subdirectories
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
592 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
593 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
594
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
595 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
596 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
597 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
598 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
599 denotes the default list.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
600
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
601 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
602 e.g. $HOME, $EMACSDATA, $emacs_dir) are evaluated first but each
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
603 element must evaluate to a SINGLE directory name. Trailing `/'s are
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
604 ignored. (Specific directories in `woman-path' are also searched.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
605
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
606 Microsoft platforms:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
607 I recommend including drive letters explicitly, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
608
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
609 (\"C:/Cygwin/usr/man/\" \"C:/Cygwin/usr/local/man\").
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
610
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
611 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
612 separated or UN*X/Cygwin colon-separated syntax (but not mixed)."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
613 :type '(repeat string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
614 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
615
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
616 (defcustom woman-manpath-man-regexp "[Mm][Aa][Nn]"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
617 "Regexp to match man directories UNDER `woman-manpath' directories.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
618 These normally have names of the form `man?'. Its default value is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
619 \"[Mm][Aa][Nn]\", which is case-insensitive mainly for the benefit of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
620 Microsoft platforms. Its purpose is to avoid `cat?', `.', `..', etc."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
621 ;; Based on a suggestion by Wei-Xue Shi.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
622 :type 'string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
623 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
624
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
625 (defcustom woman-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
626 (if (eq system-type 'ms-dos) '("$DJDIR/info" "$DJDIR/man/cat[1-9onlp]"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
627 "*List of SPECIFIC DIRECTORIES to search for UN*X manual files.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
628 For example
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
629
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
630 (\"/emacs/etc\").
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
631
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
632 These directories are searched in addition to the directory trees
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
633 specified in `woman-manpath'. Each element should be a directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
634 string or nil, which represents the current directory when the path is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
635 expanded and cached. However, the last component (only) of each
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
636 directory string is treated as a regexp \(Emacs, not shell) and the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
637 string is expanded into a list of matching directories. Non-directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
638 and unreadable files are ignored. The default value is nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
639
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
640 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
641 e.g. $HOME, $EMACSDATA, $emacs_dir) are evaluated first but each
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
642 element must evaluate to a SINGLE directory name (regexp, see above).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
643 For example
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
644
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
645 (\"$EMACSDATA\") [or equivalently (\"$emacs_dir/etc\")].
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
646
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
647 Trailing `/'s are discarded. (The directory trees in `woman-manpath'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
648 are also searched.) On Microsoft platforms I recommend including
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
649 drive letters explicitly."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
650 :type '(repeat (choice string (const nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
651 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
652
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
653 (defcustom woman-cache-level 2
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
654 "*The level of topic caching.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
655 1 - cache only the topic and directory lists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
656 (the only level before version 0.34 - only for compatibility);
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
657 2 - cache also the directories for each topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
658 (faster, without using much more memory);
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
659 3 - cache also the actual filenames for each topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
660 (fastest, but uses twice as much memory).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
661 The default value is currently 2, a good general compromise.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
662 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
663 particularly beneficial with large remote-mounted man directories.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
664 Run the `woman' command with a prefix argument or delete the cache
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
665 file `woman-cache-filename' for a change to take effect.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
666 \(Values < 1 behave like 1; values > 3 behave like 3.)"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
667 :type '(choice (const :tag "Minimal" 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
668 (const :tag "Default" 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
669 (const :tag "Maximal" 3))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
670 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
671
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
672 (defcustom woman-cache-filename nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
673 "*The full pathname of the WoMan directory and topic cache file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
674 It is used to save and restore the cache between sessions. This is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
675 especially useful with remote-mounted man page files! The default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
676 value of nil suppresses this action. The `standard' non-nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
677 filename is \"~/.wmncach.el\". Remember that a prefix argument forces
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
678 the `woman' command to update and re-write the cache."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
679 :type '(choice (const :tag "None" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
680 (const :tag "~/.wmncach.el" "~/.wmncach.el")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
681 file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
682 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
683
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
684 (defcustom woman-dired-keys t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
685 "*List of `dired' mode keys to define to run WoMan on current file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
686 E.g. '(\"w\" \"W\"), or any non-null atom to automatically define
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
687 \"w\" and \"W\" if they are unbound, or nil to do nothing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
688 Default is t."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
689 :type '(choice (const :tag "None" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
690 (repeat string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
691 (other :tag "Auto" t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
692 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
693
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
694 (defcustom woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
695 '((nil "\n\\([A-Z].*\\)" 1) ; SECTION, but not TITLE
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
696 ("*Subsections*" "^ \\([A-Z].*\\)" 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
697 "*Imenu support for Sections and Subsections.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
698 An alist with elements of the form (MENU-TITLE REGEXP INDEX) --
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
699 see the documentation for `imenu-generic-expression'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
700 :type 'sexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
701 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
702
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
703 (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
704 "*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
705 It does this by calling `imenu-add-to-menubar'. Default is nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
706 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
707 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
708
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
709 (defcustom woman-imenu-title "CONTENTS"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
710 "*The title to use if WoMan adds a Contents menu to the menubar.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
711 Default is \"CONTENTS\"."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
712 :type 'string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
713 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
714
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
715 (defcustom woman-use-topic-at-point-default nil
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
716 ;; `woman-use-topic-at-point' may be let-bound when woman is loaded,
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
717 ;; in which case its global value does not get defined.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
718 ;; `woman-file-name' sets it to this value if it is unbound.
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
719 "*Default value for `woman-use-topic-at-point'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
720 :type '(choice (const :tag "Yes" t)
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
721 (const :tag "No" nil))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
722 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
723
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
724 (defcustom woman-use-topic-at-point woman-use-topic-at-point-default
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
725 "*Control use of the word at point as the default topic.
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
726 If non-nil the `woman' command uses the word at point automatically,
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
727 without interactive confirmation, if it exists as a topic."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
728 :type '(choice (const :tag "Yes" t)
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
729 (const :tag "No" nil))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
730 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
731
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
732 (defvar woman-file-regexp nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
733 "Regexp used to select (possibly compressed) man source files, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
734 \"\\.\\([0-9lmnt]\\w*\\)\\(\\.\\(g?z\\|bz2\\)\\)?\\'\".
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
735 Built automatically from the customizable user options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
736 `woman-uncompressed-file-regexp' and `woman-file-compression-regexp'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
737
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
738 (defvar woman-uncompressed-file-regexp) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
739 (defvar woman-file-compression-regexp) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
740
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
741 (defun set-woman-file-regexp (symbol value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
742 "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
743 Used as :set cookie by Customize when customizing the user options
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
744 `woman-uncompressed-file-regexp' and `woman-file-compression-regexp'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
745 (set-default symbol value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
746 (and (boundp 'woman-uncompressed-file-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
747 (boundp 'woman-file-compression-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
748 (setq woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
749 (concat woman-uncompressed-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
750 "\\("
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
751 (substring woman-file-compression-regexp 0 -2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
752 "\\)?\\'"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
753
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
754 (defcustom woman-uncompressed-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
755 "\\.\\([0-9lmnt]\\w*\\)" ; disallow no extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
756 "*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
757 Regexp used to select man source files (ignoring any compression extension).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
758
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
759 The SysV standard man pages use two character suffixes, and this is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
760 becoming more common in the GNU world. For example, the man pages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
761 in the ncurses package include `toe.1m', `form.3x', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
762
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
763 Note: an optional compression regexp will be appended, so this regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
764 MUST NOT end with any kind of string terminator such as $ or \\'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
765 :type 'regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
766 :set 'set-woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
767 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
768
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
769 (defcustom woman-file-compression-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
770 "\\.\\(g?z\\|bz2\\)\\'"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
771 "*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
772 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
773 decompressors are available and handled by auto-compression mode,
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
774 e.g. \"\\\\.\\\\(g?z\\\\|bz2\\\\)\\\\'\" for `gzip' or `bzip2'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
775 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
776 ;; 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
777 ;; `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
778 ;; 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
779 ;; not loaded by default!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
780 :type 'regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
781 :set 'set-woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
782 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
783
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
784 (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
785 (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
786 (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
787 "*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
788 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
789 :type 'boolean
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
790 :group 'woman-interface)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
791
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
792
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
793 ;; Formatting options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
794
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
795 (defgroup woman-formatting nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
796 "Formatting options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
797 :tag "WoMan Formatting"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
798 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
799
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
800 (defcustom woman-fill-column 65
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
801 "*Right margin for formatted text -- default is 65."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
802 :type 'integer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
803 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
804
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
805 (defcustom woman-fill-frame nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
806 ;; Based loosely on a suggestion by Theodore Jump:
54516
796bcfb5fa61 (woman-fill-frame): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 54385
diff changeset
807 "*If non-nil then most of the window width is used."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
808 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
809 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
810
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
811 (defcustom woman-default-indent 5
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
812 "*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
813 Set this variable to 7 to emulate GNU man formatting."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
814 :type 'integer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
815 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
816
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
817 (defcustom woman-bold-headings t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
818 "*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
819 Heading emboldening is NOT standard `man' behavior."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
820 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
821 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
822
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
823 (defcustom woman-ignore t
63509
f890545a138d (woman-ignore, woman0-if): Fix spelling in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 63365
diff changeset
824 "*If non-nil then unrecognized 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
825 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
826 the buffer, which may aid debugging."
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
54385
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
830 (defcustom woman-preserve-ascii t
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
831 "*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
832 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
833 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
834 `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
835 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
836 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
837 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
838 ;; This option should probably be removed!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
839 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
840 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
841
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
842 (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
843 "*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
844 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
845 \(Add groff later?)"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
846 :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
847 :group 'woman-formatting)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
848
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
849
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
850 ;; Faces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
851
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
852 (defgroup woman-faces nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
853 "Face options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
854 :tag "WoMan Faces"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
855 :group 'woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
856 :group 'faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
857
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
858 (defcustom woman-fontify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
859 (or (and (fboundp 'display-color-p) (display-color-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
860 (and (fboundp 'display-graphic-p) (display-graphic-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
861 (x-display-color-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
862 "*If non-nil then WoMan assumes that face support is available.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
863 It defaults to a non-nil value if the display supports either colors
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
864 or different fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
865 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
866 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
867
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
868 ;; 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
869 ;; 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
870 ;; 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
871 (defface woman-italic
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
872 `((((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
873 (: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
874 (((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
875 (((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
876 "Face for italic font in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
877 :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
878 ;; 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
879 (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
880
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
881 (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
882 '((((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
883 (((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
884 (((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
885 "Face for bold font in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
886 :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
887 ;; 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
888 (put 'woman-bold-face 'face-alias 'woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
889
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
890 ;; 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
891 ;; 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
892 ;; 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
893 (defface woman-unknown
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
894 '((((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
895 (((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
896 (((background dark)) (:foreground "cyan")))
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
897 "Face for all unknown fonts in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
898 :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
899 ;; 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
900 (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
901
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
902 (defface woman-addition
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
903 '((t (:foreground "orange")))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
904 "Face for all WoMan additions to 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-addition-face 'face-alias 'woman-addition)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
908
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
909 (defun woman-default-faces ()
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
910 "Set foreground colors of italic and bold faces to their default values."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
911 (interactive)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
912 (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
913 (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
914
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
915 (defun woman-monochrome-faces ()
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
916 "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
917 This is usually either black or white."
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 (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
920 (set-face-foreground 'woman-bold 'unspecified))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
921
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
922 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
923 ;; 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
924 (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
925 (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
926 "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
927
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
928 (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
929 "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
930 (let (symbol-fonts)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
931 ;; 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
932 ;; 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
933 (while fonts
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
934 (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
935 (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
936 (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
937 (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
938 symbol-fonts))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
939
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
940 (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
941 (make-face 'woman-symbol)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
942
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
943 ;; 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
944 ;; avoid unnecessarily upsetting the line spacing in NTEmacs 20.5!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
945
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
946 (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
947 "*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
948 :type 'boolean
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
949 :group 'woman-faces)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
950
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
951 (defcustom woman-use-symbol-font nil
65393
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
952 "*If non-nil then may use the symbol font.
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
953 It is off by default, mainly because it may change the line spacing
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
954 \(in NTEmacs 20.5)."
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
955 :type 'boolean
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
956 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
957
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
958 (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
959 (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
960 (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
961 "Symbol font(s), preferably same size as default when WoMan was loaded.")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
962
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
963 (defcustom woman-symbol-font (car woman-symbol-font-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
964 "*A string describing the symbol font to use for special characters.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
965 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
966 Under MS-Windows, the default is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
967 \"-*-Symbol-normal-r-*-*-*-*-96-96-p-*-ms-symbol\"."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
968 :type `(choice
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
969 ,@(mapcar (lambda (x) (list 'const x))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
970 woman-symbol-font-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
971 string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
972 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
973
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
974 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
975
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
976 ;; 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
977 (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
978 (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
979 (defvar woman-symbol-font nil)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
980 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
981
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
982
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
983 ;;; Internal variables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
984
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
985 (defconst woman-justify-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
986 '(left right center full)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
987 "Justify styles for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
988 (defconst woman-adjust-left 0 ; == adjust off, noadjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
989 "Adjustment indicator `l' -- adjust left margin only.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
990 (defconst woman-adjust-right 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
991 "Adjustment indicator `r' -- adjust right margin only.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
992 (defconst woman-adjust-center 2
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
993 "Adjustment indicator `c' -- center.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
994 (defconst woman-adjust-both 3 ; default -- adj,both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
995 "Adjustment indicator `b' or `n' -- adjust both margins.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
996
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
997 (defvar woman-adjust woman-adjust-both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
998 "Current adjustment number-register value.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
999 (defvar woman-adjust-previous woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1000 "Previous adjustment number-register value.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1001 (defvar woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1002 (nth woman-adjust woman-justify-list) ; use vector?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1003 "Current justification style for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1004 (defvar woman-justify-previous woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1005 "Previous justification style for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1006
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1007 (defvar woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1008 "Current left margin.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1009 (defvar woman-prevailing-indent woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1010 "Current prevailing indent.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1011 (defvar woman-interparagraph-distance 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1012 "Interparagraph distance in lines.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1013 Set by .PD; used by .SH, .SS, .TP, .LP, .PP, .P, .IP, .HP.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1014 (defvar woman-leave-blank-lines nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1015 "Blank lines to leave as vertical space.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1016 (defconst woman-tab-width 5
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1017 "Default tab width set by -man macros.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1018 (defvar woman-nofill nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1019 "Current fill mode: nil for filling.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1020 (defvar woman-RS-left-margin nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1021 "Left margin stack for nested use of `.RS/.RE'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1022 (defvar woman-RS-prevailing-indent nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1023 "Prevailing indent stack for nested use of `.RS/.RE'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1024 (defvar woman-nospace nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1025 "Current no-space mode: nil for normal spacing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1026 Set by `.ns' request; reset by any output or `.rs' request")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1027
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1028 (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
1029 "Set `woman-nospace' to nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1030 (setq woman-nospace nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1031
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1032 (defconst woman-request-regexp "^[.'][ \t]*\\(\\S +\\) *"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1033 ;; Was "^\\.[ \t]*\\([a-z0-9]+\\) *" but cvs.1 uses a macro named
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1034 ;; "`" and CGI.man uses a macro named "''"!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1035 ;; CGI.man uses ' as control character in places -- it *should*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1036 ;; suppress breaks!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1037 ;; Could end with "\\( +\\|$\\)" instead of " *"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1038 "Regexp to match a ?roff request plus trailing white space.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1039
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1040 (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
1041 "Buffer-local: set to true if function `woman-imenu' has been called.")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1042 (make-variable-buffer-local 'woman-imenu-done)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1043
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1044 ;; From imenu.el -- needed when reformatting a file in its old buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1045 ;; The latest buffer index used to update the menu bar menu.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1046 (eval-when-compile
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1047 (require 'imenu))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1048 (make-variable-buffer-local 'imenu--last-menubar-index-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1049
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1050 (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
1051 "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
1052 Each element is of the form (FILE-NAME . BUFFER-NAME).")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1053
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1054 (defvar woman-buffer-number 0
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1055 "Ordinal number of current buffer entry in `woman-buffer-alist'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1056 The ordinal numbers start from 0.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1057
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1058 (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
1059 "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
1060 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
1061 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
1062
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1063
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1064 ;;; Specialized utility functions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1065
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1066 ;;; Fast deletion without saving on the kill ring (cf. simple.el):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1067
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1068 (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
1069 "Delete rest of current line; if all blank then delete thru newline.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1070 With a numeric argument ARG, delete that many lines from point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1071 Negative arguments delete lines backward."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1072 ;; This is a non-interactive version of kill-line in simple.el that
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1073 ;; deletes instead of killing and assumes kill-whole-line is nil,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1074 ;; which is essential!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1075 (delete-region (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1076 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1077 (if arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1078 (forward-line arg)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1079 (if (eobp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1080 (signal 'end-of-buffer nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1081 (if (looking-at "[ \t]*$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1082 (forward-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1083 (end-of-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1084 (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1085
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1086 (defsubst woman-delete-whole-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1087 "Delete current line from beginning including eol."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1088 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1089 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1090
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1091 (defsubst woman-delete-following-space ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1092 "Delete all spaces and tabs FOLLOWING point (cf. `delete-horizontal-space')."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1093 ;; cf. delete-horizontal-space in simple.el:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1094 (delete-region (point) (progn (skip-chars-forward " \t") (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1095
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1096 (defsubst woman-delete-match (subexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1097 "Delete subexpression SUBEXP of buffer text matched by last search."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1098 (delete-region (match-beginning subexp) (match-end subexp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1099
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1100 ;; delete-char does not kill by default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1101 ;; delete-backward-char does not kill by default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1102 ;; delete-horizontal-space does not kill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1103 ;; delete-blank-lines does not kill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1104
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1105
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1106 ;;; File handling:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1107
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1108 (defvar woman-expanded-directory-path nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1109 "Expanded directory list cache. Resetting to nil forces update.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1110
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1111 (defvar woman-topic-all-completions nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1112 "Expanded topic alist cache. Resetting to nil forces update.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1113
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1114 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1115 (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
1116 "Browse UN*X man page for TOPIC (Without using external Man program).
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1117 The major browsing mode used is essentially the standard Man mode.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1118 Choose the filename for the man page using completion, based on the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1119 topic selected from the directories specified in `woman-manpath' and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1120 `woman-path'. The directory expansions and topics are cached for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1121 speed, but a non-nil interactive argument forces the caches to be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1122 updated (e.g. to re-interpret the current directory).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1123
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1124 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
1125 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
1126 (interactive (list nil current-prefix-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1127 ;; 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
1128 (if (or (not (stringp topic)) (string-match "\\S " topic))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1129 (let ((file-name (woman-file-name topic re-cache)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1130 (if file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1131 (woman-find-file file-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1132 (message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1133 "WoMan Error: No matching manual files found in search path")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1134 (ding))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1135 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1136 (message "WoMan Error: No topic specified in non-interactive call")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1137 (ding))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1138 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1139
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1140 ;; Allow WoMan to be called via the standard Help menu:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1141 (define-key-after menu-bar-manuals-menu [woman]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1142 '(menu-item "Read Man Page (WoMan)..." woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1143 :help "Man-page documentation Without Man") t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1144
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1145 (defvar woman-cached-data nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1146 "A list of cached data used to determine cache validity.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1147 Set from the cache by `woman-read-directory-cache'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1148
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1149 (defun woman-cached-data ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1150 "Generate a list of data used to determine cache validity.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1151 Called both to generate and to check the cache!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1152 ;; Must use substituted paths because values of env vars may change!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1153 (list woman-cache-level
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1154 (mapcar 'substitute-in-file-name woman-manpath)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1155 (mapcar 'substitute-in-file-name woman-path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1156
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1157 (defun woman-read-directory-cache ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1158 "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
1159 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
1160 Return t if the file exists, nil otherwise."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1161 (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1162 woman-cache-filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1163 (load woman-cache-filename t nil t) ; file exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1164 (equal woman-cached-data (woman-cached-data)))) ; cache valid
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1165
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1166 (defun woman-write-directory-cache ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1167 "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
1168 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
1169 (if woman-cache-filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1170 (save-excursion ; to restore current buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1171 ;; Make a temporary buffer; name starting with space "hides" it.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1172 (let ((standard-output
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1173 (set-buffer (generate-new-buffer "WoMan tmp buffer")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1174 (backup-inhibited t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1175 ;; (switch-to-buffer standard-output t) ; only for debugging
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1176 (buffer-disable-undo standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1177 (princ
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1178 ";;; WoMan directory and topic cache -- generated automatically\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1179 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1180 ;; For data validity check:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1181 `(setq woman-cached-data ',(woman-cached-data)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1182 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1183 `(setq woman-expanded-directory-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1184 ',woman-expanded-directory-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1185 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1186 `(setq woman-topic-all-completions
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1187 ',woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1188 (write-file woman-cache-filename) ; write CURRENT buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1189 (kill-buffer standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1190 ))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1191
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1192 (defvar woman-topic-history nil "Topic read history.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1193 (defvar woman-file-history nil "File-name read history.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1194
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1195 (defun woman-file-name (topic &optional re-cache)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1196 "Get the name of the UN*X man-page file describing a chosen TOPIC.
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1197 When `woman' is called interactively, the word at point may be
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1198 automatically used as the topic, if the value of the user option
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1199 `woman-use-topic-at-point' is non-nil. Return nil if no file can
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1200 be found. Optional argument RE-CACHE, if non-nil, forces the
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1201 cache to be re-read."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1202 ;; Handle the caching of the directory and topic lists:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1203 (if (and (not re-cache)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1204 (or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1205 (and woman-expanded-directory-path woman-topic-all-completions)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1206 (woman-read-directory-cache)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1207 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1208 (message "Building list of manual directory expansions...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1209 (setq woman-expanded-directory-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1210 (woman-expand-directory-path woman-manpath woman-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1211 (message "Building completion list of all manual topics...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1212 (setq woman-topic-all-completions
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1213 (woman-topic-all-completions woman-expanded-directory-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1214 (woman-write-directory-cache))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1215 ;; There is a problem in that I want to offer case-insensitive
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1216 ;; completions, but to return only a case-sensitive match. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1217 ;; does not seem to work properly by default, so I re-do the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1218 ;; completion if necessary.
65380
71481859776b (woman-file-name): Provide a default, not initial input.
Richard M. Stallman <rms@gnu.org>
parents: 65359
diff changeset
1219 (let (files
71481859776b (woman-file-name): Provide a default, not initial input.
Richard M. Stallman <rms@gnu.org>
parents: 65359
diff changeset
1220 (default (current-word)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1221 (or (stringp topic)
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1222 (and (if (boundp 'woman-use-topic-at-point)
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1223 woman-use-topic-at-point
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1224 ;; Was let-bound when file loaded, so ...
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1225 (setq woman-use-topic-at-point woman-use-topic-at-point-default))
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1226 (setq topic (or (current-word t) "")) ; only within or adjacent to word
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1227 (test-completion topic woman-topic-all-completions))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1228 (setq topic
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1229 (let* ((word-at-point (current-word))
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1230 (default
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1231 (when (and word-at-point
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1232 (test-completion
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1233 word-at-point woman-topic-all-completions))
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1234 word-at-point)))
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1235 (completing-read
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1236 (if default
65680
ed770a0a7846 2005-09-24 Emilio C. Lopes <eclig@gmx.net>
Romain Francoise <romain@orebokech.com>
parents: 65582
diff changeset
1237 (format "Manual entry (default %s): " default)
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1238 "Manual entry: ")
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1239 woman-topic-all-completions nil 1
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1240 nil
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1241 'woman-topic-history
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1242 default))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1243 ;; Note that completing-read always returns a string.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1244 (if (= (length topic) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1245 nil ; no topic, so no file!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1246 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1247 ((setq files (woman-file-name-all-completions topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1248 ;; Complete topic more carefully, i.e. use the completion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1249 ;; rather than the string entered by the user:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1250 ((setq files (all-completions topic woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1251 (while (/= (length topic) (length (car files)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1252 (setq files (cdr files)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1253 (setq files (woman-file-name-all-completions (car files)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1254 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1255 ((null files) nil) ; no file found for topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1256 ((null (cdr files)) (car (car files))) ; only 1 file for topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1257 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1258 ;; Multiple files for topic, so must select 1.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1259 ;; Unread the command event (TAB = ?\t = 9) that runs the command
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1260 ;; `minibuffer-complete' in order to automatically complete the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1261 ;; minibuffer contents as far as possible.
65393
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
1262 (setq unread-command-events '(9)) ; and delete any type-ahead!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1263 (completing-read "Manual file: " files nil 1
65393
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
1264 (try-completion "" files) 'woman-file-history))))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1265
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1266 (defun woman-select (predicate list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1267 "Select unique elements for which PREDICATE is true in LIST.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1268 \(Note that this function changes the value of LIST.)"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1269 ;; Intended to be fast by avoiding recursion and list copying.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1270 (while (and list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1271 (or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1272 (member (car list) (cdr list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1273 (not (funcall predicate (car list)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1274 (setq list (cdr list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1275 (if list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1276 (let ((newlist list) cdr_list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1277 (while (setq cdr_list (cdr list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1278 (if (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1279 (not (member (car cdr_list) (cdr cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1280 (funcall predicate (car cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1281 (setq list cdr_list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1282 (setcdr list (cdr cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1283 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1284 newlist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1285
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1286 (defun woman-file-readable-p (dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1287 "Return t if DIR is readable, otherwise log a warning."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1288 (or (file-readable-p dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1289 (WoMan-warn "Ignoring unreadable `manpath' directory tree `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1290
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1291 (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
1292 "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
1293 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
1294 directory HEAD, or the current directory if HEAD is nil, that match the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1295 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
1296 (or (directory-files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1297 (or head (directory-file-name default-directory)) ; was "."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1298 t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1299 (file-name-nondirectory dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1300 (WoMan-warn "No directories match `woman-path' entry `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1301
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1302 (defun woman-file-accessible-directory-p (dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1303 "Return t if DIR is accessible, otherwise log a warning."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1304 (or (file-accessible-directory-p dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1305 (WoMan-warn "Ignoring inaccessible `man-page' directory `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1306
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1307 (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
1308 "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
1309 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
1310 WOMAN-PATH should be a list of specific manual directory regexps.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1311 Ignore any paths that are unreadable or not directories."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1312 ;; Allow each path to be a single string or a list of strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1313 (if (not (listp woman-manpath)) (setq woman-manpath (list woman-manpath)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1314 (if (not (listp woman-path)) (setq woman-path (list woman-path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1315 (let (dir head dirs)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1316 (while woman-manpath
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1317 (setq dir (car woman-manpath)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1318 woman-manpath (cdr woman-manpath))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1319 (if (and dir (woman-file-readable-p dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1320 ;; NB: `parse-colon-path' creates null elements for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1321 ;; redundant (semi-)colons and trailing `/'s!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1322 ;; If does not actually matter here if dir ends with `/'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1323 ;; Need regexp "man" here to avoid "cat?", `.', `..', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1324 (setq dir (woman-canonicalize-dir dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1325 dirs (nconc dirs (directory-files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1326 dir t woman-manpath-man-regexp)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1327 (while woman-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1328 (setq dir (car woman-path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1329 woman-path (cdr woman-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1330 (if (or (null dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1331 (null (setq dir (woman-canonicalize-dir dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1332 head (file-name-directory dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1333 (woman-file-readable-p head))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1334 (setq dirs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1335 (if dir
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1336 (nconc dirs (woman-directory-files head dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1337 (cons (directory-file-name default-directory) dirs))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1338 ;; was "." -- at head of list for later filtering
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1339 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1340 (woman-select 'woman-file-accessible-directory-p dirs)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1341
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1342 (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
1343 "Canonicalize the directory name DIR.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1344 Any UN*X-style environment variables are evaluated first."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1345 (setq dir (expand-file-name (substitute-in-file-name dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1346 ;; A path that ends with / matches all directories in it,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1347 ;; including `.' and `..', so remove any trailing / !!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1348 (if (string= (substring dir -1) "/")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1349 (setq dir (substring dir 0 -1)))
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 47978
diff changeset
1350 (if (memq system-type '(windows-nt ms-dos cygwin)) ; what else?
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1351 ;; Match capitalization used by `file-name-directory':
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1352 (setq dir (concat (file-name-directory dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1353 (file-name-nondirectory dir))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1354 dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1355
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1356 (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
1357 "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
1358 If DIR is `.' it is first replaced by the current directory."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1359 (not (member dir path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1360
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1361 (defun woman-topic-all-completions (path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1362 "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
1363 The cdr of each alist element is the path-index / filename."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1364 ;; Support 3 levels of caching: each element of the alist `files'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1365 ;; will be a list of the first `woman-cache-level' elements of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1366 ;; following list: (topic path-index filename). This alist `files'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1367 ;; is re-processed by `woman-topic-all-completions-merge'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1368 (let (dir files (path-index 0)) ; indexing starts at zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1369 (while path
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1370 (setq dir (pop path))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1371 (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
1372 (push (woman-topic-all-completions-1 dir path-index)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1373 files))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1374 (setq path-index (1+ path-index)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1375 ;; Uniquefy topics:
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1376 ;; Concate all lists with a single nconc call to
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1377 ;; avoid retraversing the first lists repeatedly -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1378 (woman-topic-all-completions-merge
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1379 (apply #'nconc files))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1380
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1381 (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
1382 "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
1383 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
1384 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
1385 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
1386 \(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
1387 ;; 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
1388 ;; 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
1389 ;; 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
1390 ;; 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
1391 ;; anyway, i.e. it is a user error!
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1392 ;;
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1393 ;; 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
1394 (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
1395 ;; Make an explicit regexp for stripping extension and
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1396 ;; compression extension: file-name-sans-extension is a
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1397 ;; far too costly function. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1398 (ext (format "\\(\\.[^.\\/]*\\)?\\(%s\\)?\\'"
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1399 woman-file-compression-regexp)))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1400 ;; 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
1401 ;; penalty of binding function arguments. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1402 (dolist (file lst newlst)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1403 (push
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1404 (cons
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1405 (if (string-match ext file)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1406 (substring file 0 (match-beginning 0))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1407 file)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1408 (and (> woman-cache-level 1)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1409 (cons
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1410 path-index
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1411 (and (> woman-cache-level 2)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1412 (list file)))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1413 newlst))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1414
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1415 (defun woman-topic-all-completions-merge (alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1416 "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
1417 Also make each path-info component into a list.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1418 \(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
1419 ;; Replaces unreadably "optimized" O(n^2) implementation.
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1420 ;; Instead we use sorting to merge stuff efficiently. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1421 (let (elt newalist)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1422 ;; Sort list into reverse order
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1423 (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
1424 ;; merge duplicate keys.
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1425 (if (> woman-cache-level 1)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1426 (while alist
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1427 (setq elt (pop alist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1428 (if (equal (car elt) (caar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1429 (unless (member (cdr elt) (cdar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1430 (setcdr (car newalist) (cons (cdr elt)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1431 (cdar newalist))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1432 (setcdr elt (list (cdr elt)))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1433 (push elt newalist)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1434 ;; 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
1435 (while alist
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1436 (setq elt (pop alist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1437 (unless (equal (car elt) (caar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1438 (push elt newalist))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1439 newalist))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1440
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1441 (defun woman-file-name-all-completions (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1442 "Return an alist of the files in all man directories that match TOPIC."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1443 ;; Support 3 levels of caching: each element of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1444 ;; woman-topic-all-completions is a list of one of the forms:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1445 ;; (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1446 ;; (topic (path-index) (path-index) ... )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1447 ;; (topic (path-index filename) (path-index filename) ... )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1448 ;; where the are no duplicates in the value lists.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1449 ;; Topic must match first `word' of filename, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1450 (let ((topic-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1451 (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1452 "\\`" (regexp-quote topic) ; first `word'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1453 "\\(\\..+\\)*" ; optional subsequent `words'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1454 woman-file-regexp)) ; extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1455 (topics woman-topic-all-completions)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1456 (path woman-expanded-directory-path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1457 dir files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1458 (if (cdr (car topics))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1459 ;; Use cached path-info to locate files for each topic:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1460 (let ((path-info (cdr (assoc topic topics)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1461 filename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1462 (while path-info
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1463 (setq dir (nth (car (car path-info)) path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1464 filename (car (cdr (car path-info)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1465 path-info (cdr path-info)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1466 files (nconc files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1467 ;; Find the actual file name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1468 (if filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1469 (list (concat dir "/" filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1470 (directory-files dir t topic-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1471 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1472 ;; Search path for the files for each topic:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1473 (while path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1474 (setq dir (car path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1475 path (cdr path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1476 (if (woman-not-member dir path) ; use each directory only once!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1477 (setq files (nconc files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1478 (directory-files dir t topic-regexp))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1479 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1480 (mapcar 'list files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1481 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1482
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1483
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1484 ;;; dired support
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1485
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1486 (defun woman-dired-define-key (key)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1487 "Bind the argument KEY to the command `woman-dired-find-file'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1488 (define-key dired-mode-map key 'woman-dired-find-file))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1489
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1490 (defsubst woman-dired-define-key-maybe (key)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1491 "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
1492 (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
1493 (null (lookup-key dired-mode-map key)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1494 (woman-dired-define-key key)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1495
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1496 (defun woman-dired-define-keys ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1497 "Define dired keys to run WoMan according to `woman-dired-keys'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1498 (if woman-dired-keys
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1499 (if (listp woman-dired-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1500 (mapcar 'woman-dired-define-key woman-dired-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1501 (woman-dired-define-key-maybe "w")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1502 (woman-dired-define-key-maybe "W")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1503 (define-key-after (lookup-key dired-mode-map [menu-bar immediate])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1504 [woman] '("Read Man Page (WoMan)" . woman-dired-find-file) 'view))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1505
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1506 (if (featurep 'dired)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1507 (woman-dired-define-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1508 (add-hook 'dired-mode-hook 'woman-dired-define-keys))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1509
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1510 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1511 (defun woman-dired-find-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1512 "In dired, run the WoMan man-page browser on this file."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1513 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1514 ;; dired-get-filename is defined in dired.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1515 (woman-find-file (dired-get-filename)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1516
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1517
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1518 ;;; tar-mode support
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1519
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1520 (defun woman-tar-extract-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1521 "In tar mode, run the WoMan man-page browser on this file."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1522 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1523 (or (eq major-mode 'tar-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1524 (error "`woman-tar-extract-file' can be used only in `tar-mode'"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1525 (buffer-disable-undo)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1526 (let (global-font-lock-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1527 (funcall (symbol-function 'tar-extract)) ; defined in tar-mode
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1528 (let ((WoMan-current-file buffer-file-name)) ; used for message logging
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1529 (rename-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1530 (woman-make-bufname (file-name-nondirectory buffer-file-name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1531 (woman-process-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1532 (goto-char (point-min)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1533
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1534 ;; There is currently no `tar-mode-hook' so use ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1535 (eval-after-load "tar-mode"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1536 '(progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1537 (define-key tar-mode-map "w" 'woman-tar-extract-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1538 (define-key-after (lookup-key tar-mode-map [menu-bar immediate])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1539 [woman] '("Read Man Page (WoMan)" . woman-tar-extract-file) 'view)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1540
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1541
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1542 (defvar woman-last-file-name nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1543 "The full pathname of the last file formatted by WoMan.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1544
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1545 (defun woman-reformat-last-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1546 "Reformat last file, e.g. after changing fill column."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1547 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1548 (if woman-last-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1549 (woman-find-file woman-last-file-name t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1550 (call-interactively 'woman-find-file)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1551
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1552 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1553 (defun woman-find-file (file-name &optional reformat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1554 "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
1555 Use existing buffer if possible; reformat only if prefix arg given.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1556 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
1557 of an existing WoMan buffer formatted earlier.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1558 No external programs are used, except that `gunzip' will be used to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1559 decompress the file if appropriate. See the documentation for the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1560 `woman' command for further details."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1561 (interactive "fBrowse UN*X manual file: \nP")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1562 (setq woman-last-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1563 (setq file-name (expand-file-name file-name))) ; to canonicalize
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1564 (let ((alist-tail woman-buffer-alist) exists)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1565 (setq woman-buffer-number 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1566 (while (and alist-tail (not (string= file-name (car (car alist-tail)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1567 (setq alist-tail (cdr alist-tail)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1568 woman-buffer-number (1+ woman-buffer-number)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1569 (or (and (setq exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1570 (and alist-tail (WoMan-find-buffer))) ; buffer exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1571 (not reformat))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1572 ;; Format new buffer or reformat current buffer:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1573 (let* ((bufname (file-name-nondirectory file-name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1574 (case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1575 (compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1576 (not (not (string-match woman-file-compression-regexp bufname)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1577 (if compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1578 (setq bufname (file-name-sans-extension bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1579 (setq bufname (if exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1580 (buffer-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1581 (woman-make-bufname bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1582 (woman-really-find-file file-name compressed bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1583 (or exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1584 (setq woman-buffer-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1585 (cons (cons file-name bufname) woman-buffer-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1586 woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1587 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1588 (Man-build-section-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1589 (Man-build-references-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1590 (goto-char (point-min)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1591
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1592 (defun woman-make-bufname (bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1593 "Create an unambiguous buffer name from BUFNAME."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1594 (let ((dot (string-match "\\." bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1595 (if dot (setq bufname (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1596 (substring bufname (1+ dot)) " "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1597 (substring bufname 0 dot))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1598 (generate-new-buffer-name ; ensure uniqueness
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1599 (concat "*WoMan " bufname "*"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1600
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1601 (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
1602 "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
1603
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1604 (defun woman-really-find-file (filename compressed bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1605 "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
1606 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
1607 the file if necessary. Set buffer name BUFNAME and major mode.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1608 Do not call directly!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1609 (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
1610 (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
1611 (select-frame
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1612 (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
1613 (setq woman-frame (make-frame)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1614 (switch-to-buffer (get-buffer-create bufname))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1615 (buffer-disable-undo)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1616 (setq buffer-read-only nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1617 (erase-buffer) ; NEEDED for reformat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1618 (woman-insert-file-contents filename compressed)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1619 ;; Set buffer's default directory to that of the file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1620 (setq default-directory (file-name-directory filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1621 (set (make-local-variable 'backup-inhibited) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1622 (set-visited-file-name "")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1623 (woman-process-buffer)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1624
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1625 (defun woman-process-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1626 "The second half of `woman-really-find-file'!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1627 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1628 ;; Check (crudely) that this really is likely to be in UN*X
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1629 ;; man-page source format, assuming we are at point-min:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1630 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1631 (if (re-search-forward "^[.']" 1000 t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1632 (woman-decode-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1633 (message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1634 "File appears to be pre-formatted -- using source file may be better.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1635 (woman-man-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1636 (woman-mode))
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-man-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1639 "Post-process an nroff-preformatted man buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1640 ;; Kill all leading whitespace:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1641 (if (looking-at "\\s-+") (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1642 ;; Delete all page footer/header pairs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1643 (re-search-forward ".*") ; match header
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1644 ;; Footer conventionally has page number at right, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1645 (let ((regex (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1646 "^.*[0-9]\n\\s-*" ; footer and following blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1647 (regexp-quote (match-string 0)) ; header
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1648 "\\s-*\n"))) ; following blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1649 (while (re-search-forward regex nil 1) ; finish at eob
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1650 (woman-delete-match 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1651 ;; Delete last text line (footer) and all following blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1652 (re-search-backward "\\S-")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1653 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1654 (if (looking-at ".*[0-9]$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1655 (delete-region (point) (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1656
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1657 ;; Squeeze multiple blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1658 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1659 (while (re-search-forward "^[ \t]*\n\\([ \t]*\n\\)+" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1660 (replace-match "\n" t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1661
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1662 ;; 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
1663 ;; (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
1664 (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
1665 ;; Multibyte characters exist.
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1666 (progn
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1667 (goto-char (point-min))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1668 (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
1669 (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
1670 (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
1671 (goto-char (point-min))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1672 (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
1673 (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
1674 (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
1675
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1676 ;; Interpret overprinting to indicate bold face:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1677 (goto-char (point-min))
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1678 (while (re-search-forward "\\(.\\)\\(\\(+\\1\\)+\\)" nil t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1679 (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
1680 (woman-set-face (1- (point)) (point) 'woman-bold))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1681
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1682 ;; Interpret underlining to indicate italic face:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1683 ;; (Must be AFTER emboldening to interpret bold _ correctly!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1684 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1685 (while (search-forward "_" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1686 (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
1687 (woman-set-face (point) (1+ (point)) 'woman-italic))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1688
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1689 ;; Leave any other uninterpreted ^H's in the buffer for now! (They
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1690 ;; might indicate composite special characters, which could be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1691 ;; interpreted if I knew what to expect.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1692
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1693 ;; Optionally embolden section and subsection headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1694 ;; (cf. `woman-imenu-generic-expression'):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1695 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1696 (woman-bold-headings
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 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1699 (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
1700 (woman-set-face (match-beginning 2) (match-end 2) 'woman-bold))))
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
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1703 (defun woman-insert-file-contents (filename compressed)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1704 "Insert file FILENAME into the current buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1705 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
1706 then turn on auto-compression mode to decompress the file.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1707 Leave point at end of new text. Return length of inserted text."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1708 ;; 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
1709 ;; start in 19.34!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1710 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1711 (let ((case-fold-search t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1712 ;; Co-operate with auto-compression mode:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1713 (if (and compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1714 (or (eq compressed t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1715 (string-match woman-file-compression-regexp filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1716 ;; (not auto-compression-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1717 (not (rassq 'jka-compr-handler file-name-handler-alist)) )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1718 ;; (error "Compressed file requires Auto File Decompression turned on")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1719 (auto-compression-mode 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1720 (nth 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1721 (condition-case ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1722 (insert-file-contents filename nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1723 (file-error
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1724 ;; Run find-file-not-found-hooks until one returns non-nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1725 ;; (run-hook-with-args-until-success 'find-file-not-found-hooks)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1726 (insert "\n***** File " filename " not found! *****\n\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1727 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1728 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1729
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1730
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1731 ;;; Major mode (Man) interface:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1732
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1733 (defvar woman-mode-map nil "Keymap for woman mode.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1734
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1735 (unless woman-mode-map
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1736 (setq woman-mode-map (make-sparse-keymap))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1737 (set-keymap-parent woman-mode-map Man-mode-map)
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1738
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1739 (define-key woman-mode-map "R" 'woman-reformat-last-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1740 (define-key woman-mode-map "w" 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1741 (define-key woman-mode-map "\en" 'WoMan-next-manpage)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1742 (define-key woman-mode-map "\ep" 'WoMan-previous-manpage)
65359
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1743 (define-key woman-mode-map [M-mouse-2] 'woman-follow-word)
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1744
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1745 ;; We don't need to call `man' when we are in `woman-mode'.
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1746 (define-key woman-mode-map [remap man] 'woman))
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1747
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1748 (defun woman-follow-word (event)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1749 "Run WoMan with word under mouse as topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1750 Argument EVENT is the invoking mouse event."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1751 (interactive "e") ; mouse event
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1752 (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
1753 (woman (or (current-word t) "")))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1754
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1755 ;; 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
1756 (easy-menu-define
bab60576e8ec (woman-menu): Add a comment about the last change.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45209
diff changeset
1757 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
1758 ;; 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
1759 ;; find-function-search-for-symbol work. -- rost
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1760 woman-mode-map
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1761 "WoMan Menu"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1762 `("WoMan"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1763 ["WoMan..." woman t] ; [NAME CALLBACK ENABLE]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1764 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1765 ["Next Section" Man-next-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1766 ["Previous Section" Man-previous-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1767 ["Goto Section..." Man-goto-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1768 ["Goto See-Also Section" Man-goto-see-also-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1769 ["Follow Reference..." Man-follow-manual-reference t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1770 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1771 ["Previous WoMan Buffer" WoMan-previous-manpage t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1772 ["Next WoMan Buffer" WoMan-next-manpage t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1773 ["Bury WoMan Buffer" Man-quit t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1774 ["Kill WoMan Buffer" Man-kill t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1775 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1776 ;; ["Toggle Fill Frame Width" woman-toggle-fill-frame t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1777 ["Use Full Frame Width" woman-toggle-fill-frame
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1778 :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
1779 ["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
1780 ["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
1781 ["Use Default Main Faces" woman-default-faces t]
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1782 ["Make Contents Menu" (woman-imenu t) (not woman-imenu-done)]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1783 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1784 ["Describe (Wo)Man Mode" describe-mode t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1785 ["Mini Help" woman-mini-help t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1786 ,@(if (fboundp 'customize-group)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1787 '(["Customize..." (customize-group 'woman) t]))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1788 ["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
1789 "--"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1790 ("Advanced"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1791 ["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
1792 ["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
1793 ["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
1794 :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
1795 :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
1796 ["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
1797 :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
1798 :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
1799 ["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
1800 :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
1801 :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
1802 "--"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1803 "Emulation"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1804 ["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
1805 :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
1806 ["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
1807 :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
1808 )
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1809 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1810
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1811 (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
1812 "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
1813 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1814 (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
1815 (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
1816
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1817 (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
1818 "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
1819 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1820 (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
1821 (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
1822
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1823 (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
1824 "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
1825 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1826 (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
1827 (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
1828
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1829 (put 'woman-mode 'mode-class 'special)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1830
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1831 (defun woman-mode ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1832 "Turn on (most of) Man mode to browse a buffer formatted by WoMan.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1833 WoMan is an ELisp emulation of much of the functionality of the Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1834 `man' command running the standard UN*X man and ?roff programs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1835 WoMan author: F.J.Wright@Maths.QMW.ac.uk
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1836 WoMan version: see `woman-version'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1837 See `Man-mode' for additional details."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1838 (let ((Man-build-page-list (symbol-function 'Man-build-page-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1839 (Man-strip-page-headers (symbol-function 'Man-strip-page-headers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1840 (Man-unindent (symbol-function 'Man-unindent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1841 (Man-goto-page (symbol-function 'Man-goto-page)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1842 ;; Prevent inappropriate operations:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1843 (fset 'Man-build-page-list 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1844 (fset 'Man-strip-page-headers 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1845 (fset 'Man-unindent 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1846 (fset 'Man-goto-page 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1847 (unwind-protect
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1848 (delay-mode-hooks (Man-mode))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1849 ;; Restore the status quo:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1850 (fset 'Man-build-page-list Man-build-page-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1851 (fset 'Man-strip-page-headers Man-strip-page-headers)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1852 (fset 'Man-unindent Man-unindent)
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1853 (fset 'Man-goto-page Man-goto-page)))
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1854 (setq major-mode 'woman-mode
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1855 mode-name "WoMan")
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1856 ;; Don't show page numbers like Man-mode does. (Online documents do
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1857 ;; not have pages)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1858 (kill-local-variable 'mode-line-buffer-identification)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1859 (use-local-map woman-mode-map)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1860 ;; Imenu support:
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1861 (set (make-local-variable 'imenu-generic-expression)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1862 ;; `make-local-variable' in case imenu not yet loaded!
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1863 woman-imenu-generic-expression)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1864 (set (make-local-variable 'imenu-space-replacement) " ")
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1865 ;; For reformat ...
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1866 ;; necessary when reformatting a file in its old buffer:
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1867 (setq imenu--last-menubar-index-alist nil)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1868 ;; necessary to avoid re-installing the same imenu:
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1869 (setq woman-imenu-done nil)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1870 (if woman-imenu (woman-imenu))
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1871 (let (buffer-read-only)
66177
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
1872 (Man-highlight-references 'WoMan-xref-man-page))
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1873 (set-buffer-modified-p nil)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1874 (run-mode-hooks 'woman-mode-hook))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1875
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1876 (defun woman-imenu (&optional redraw)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1877 "Add a \"Contents\" menu to the menubar.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1878 Optional argument REDRAW, if non-nil, forces mode line to be updated."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1879 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1880 (if woman-imenu-done
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1881 ;; This is PRIMARILY to avoid a bug in imenu-add-to-menubar that
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1882 ;; 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
1883 ;; in the same buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1884 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1885 (setq woman-imenu-done t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1886 (imenu-add-to-menubar woman-imenu-title)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1887 (if redraw (force-mode-line-update))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1888
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1889 (defun woman-toggle-fill-frame ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1890 "Toggle formatting to fill (most of) the width of the current frame."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1891 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1892 (setq woman-fill-frame (not woman-fill-frame))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1893 (message "Woman fill column set to %s."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1894 (if woman-fill-frame "frame width" woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1895 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1896
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1897 (defun woman-mini-help ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1898 "Display WoMan commands and user options in an `apropos' buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1899 ;; Based on apropos-command in apropos.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1900 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1901 (require 'apropos)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1902 (let ((message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1903 (let ((standard-output (get-buffer-create "*Apropos*")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1904 (print-help-return-message 'identity))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1905 (setq apropos-accumulator
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1906 (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
1907 (lambda (symbol)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1908 (or (commandp symbol)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1909 (user-variable-p symbol)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1910 ;; Filter out any inhibited symbols:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1911 (let ((tem apropos-accumulator))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1912 (while tem
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1913 (if (get (car tem) 'apropos-inhibit)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1914 (setq apropos-accumulator (delq (car tem) apropos-accumulator)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1915 (setq tem (cdr tem))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1916 ;; Find documentation strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1917 (let ((p apropos-accumulator)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1918 doc symbol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1919 (while p
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1920 (setcar p (list ; must have 3 elements:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1921 (setq symbol (car p)) ; 1. name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1922 (if (functionp symbol) ; 2. command doc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1923 (if (setq doc (documentation symbol t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1924 (substring doc 0 (string-match "\n" doc))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1925 "(not documented)"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1926 (if (user-variable-p symbol) ; 3. variable doc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1927 (if (setq doc (documentation-property
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1928 symbol 'variable-documentation t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1929 (substring doc 0 (string-match "\n" doc))))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1930 (setq p (cdr p))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1931 ;; Output the result:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1932 (and (apropos-print t nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1933 message
65582
4d1085b02d64 Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents: 65428
diff changeset
1934 (message "%s" message))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1935
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1936
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1937 (defun WoMan-getpage-in-background (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1938 "Use TOPIC to start WoMan from `Man-follow-manual-reference'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1939 ;; topic is a string, generally of the form "section topic"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1940 (let ((s (string-match " " topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1941 (if s (setq topic (substring topic (1+ s))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1942 (woman topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1943
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1944 (defvar WoMan-Man-start-time nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1945 "Used to record formatting time used by the `man' command.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1946
65359
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1947 ;; Both advices are disabled because "a file in Emacs should not put
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1948 ;; advice on a function in Emacs" (see Info node "(elisp)Advising
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1949 ;; Functions"). Counting the formatting time is useful for
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1950 ;; developping, but less applicable for daily use. The advice for
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1951 ;; `Man-getpage-in-background' can be discarded, because the
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1952 ;; key-binding in `woman-mode-map' has been remapped to call `woman'
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1953 ;; but `man'. Michael Albinus <michael.albinus@gmx.de>
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1954
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1955 ;; (defadvice Man-getpage-in-background
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1956 ;; (around Man-getpage-in-background-advice (topic) activate)
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1957 ;; "Use WoMan unless invoked outside a WoMan buffer or invoked explicitly.
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1958 ;; Otherwise use Man and record start of formatting time."
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1959 ;; (if (and (eq major-mode 'woman-mode)
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1960 ;; (not (eq (caar command-history) 'man)))
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1961 ;; (WoMan-getpage-in-background topic)
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1962 ;; ;; Initiates man processing
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1963 ;; (setq WoMan-Man-start-time (current-time))
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1964 ;; ad-do-it))
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1965
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1966 ;; (defadvice Man-bgproc-sentinel
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1967 ;; (after Man-bgproc-sentinel-advice activate)
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1968 ;; ;; Terminates man processing
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1969 ;; "Report formatting time."
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1970 ;; (let* ((time (current-time))
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1971 ;; (time (+ (* (- (car time) (car WoMan-Man-start-time)) 65536)
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1972 ;; (- (cadr time) (cadr WoMan-Man-start-time)))))
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1973 ;; (message "Man formatting done in %d seconds" time)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1974
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1975
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1976 ;;; Buffer handling:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1977
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1978 (defun WoMan-previous-manpage ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1979 "Find the previous WoMan buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1980 ;; Assumes currently in a WoMan buffer!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1981 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1982 (WoMan-find-buffer) ; find current existing buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1983 (if (null (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1984 (error "No previous WoMan buffer"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1985 (if (>= (setq woman-buffer-number (1+ woman-buffer-number))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1986 (length woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1987 (setq woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1988 (if (WoMan-find-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1989 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1990 (if (< (setq woman-buffer-number (1- woman-buffer-number)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1991 (setq woman-buffer-number (1- (length woman-buffer-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1992 (WoMan-previous-manpage)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1993
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1994 (defun WoMan-next-manpage ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1995 "Find the next WoMan buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1996 ;; Assumes currently in a WoMan buffer!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1997 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1998 (WoMan-find-buffer) ; find current existing buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1999 (if (null (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2000 (error "No next WoMan buffer"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2001 (if (< (setq woman-buffer-number (1- woman-buffer-number)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2002 (setq woman-buffer-number (1- (length woman-buffer-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2003 (if (WoMan-find-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2004 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2005 (WoMan-next-manpage)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2006
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2007 (defun WoMan-find-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2008 "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
2009 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
2010 alist in `woman-buffer-alist' and return nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2011 (if (zerop woman-buffer-number)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2012 (let ((buffer (get-buffer (cdr (car woman-buffer-alist)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2013 (if buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2014 (switch-to-buffer buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2015 ;; Delete alist element:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2016 (setq woman-buffer-alist (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2017 nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2018 (let* ((prev-ptr (nthcdr (1- woman-buffer-number) woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2019 (buffer (get-buffer (cdr (car (cdr prev-ptr))))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2020 (if buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2021 (switch-to-buffer buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2022 ;; Delete alist element:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2023 (setcdr prev-ptr (cdr (cdr prev-ptr)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2024 (if (>= woman-buffer-number (length woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2025 (setq woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2026 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2027 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2028
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2029
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2030 ;;; Syntax and display tables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2031
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2032 (defconst woman-escaped-escape-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2033 ;; An arbitrary unused control character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2034 "Internal character representation of escaped escape characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2035 (defconst woman-escaped-escape-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2036 (char-to-string woman-escaped-escape-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2037 "Internal string representation of escaped escape characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2038
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2039 (defconst woman-unpadded-space-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2040 ;; An arbitrary unused control character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2041 "Internal character representation of unpadded space characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2042 (defconst woman-unpadded-space-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2043 (char-to-string woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2044 "Internal string representation of unpadded space characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2045
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2046 (defvar woman-syntax-table nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2047 "Syntax table to support special characters used internally by WoMan.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2048
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2049 (if woman-syntax-table
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2050 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2051 (setq woman-syntax-table (make-syntax-table))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2052 ;; The following internal chars must NOT have whitespace syntax:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2053 (modify-syntax-entry woman-unpadded-space-char "." woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2054 (modify-syntax-entry woman-escaped-escape-char "." woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2055 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2056
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2057 (defun woman-set-buffer-display-table ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2058 "Set up a display table for a WoMan buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2059 This display table is used for displaying internal special characters, but
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2060 does not interfere with any existing display table, e.g. for displaying
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2061 European characters."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2062 (setq buffer-display-table
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2063 ;; The following test appears to be necessary on some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2064 ;; non-Windows platforms, e.g. Solaris 2.6 when running on a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2065 ;; tty. Thanks to T. V. Raman <raman@Adobe.COM>.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2066 ;; The MS-DOS terminal also sets standard-display-table to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2067 ;; a non-nil value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2068 (if standard-display-table ; default is nil !!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2069 (copy-sequence standard-display-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2070 (make-display-table)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2071 ;; Display the following internal chars correctly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2072 (aset buffer-display-table woman-unpadded-space-char [?\ ])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2073 (aset buffer-display-table woman-escaped-escape-char [?\\]))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2074
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2075
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2076 ;;; The main decoding driver:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2077
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2078 (defvar font-lock-mode) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2079
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2080 (defun woman-decode-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2081 "Decode a buffer in UN*X man-page source format.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2082 No external programs are used."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2083 (interactive) ; mainly for testing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2084 (WoMan-log-begin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2085 (run-hooks 'woman-pre-format-hook)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2086 (and (boundp 'font-lock-mode) font-lock-mode (font-lock-mode -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2087 ;; (fundamental-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2088 (let ((start-time (current-time)) ; (HIGH LOW MICROSEC)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2089 time) ; HIGH * 2**16 + LOW seconds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2090 (message "WoMan formatting buffer...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2091 ; (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2092 ; (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2093 ; ((re-search-forward "^\\.[ \t]*TH" nil t) ; wrong format if not found?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2094 ; (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2095 ; (delete-region (point-min) (point))) ; potentially dangerous!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2096 ; (t (message "WARNING: .TH request not found -- not man-page format?")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2097 (woman-decode-region (point-min) (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2098 (setq time (current-time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2099 time (+ (* (- (car time) (car start-time)) 65536)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2100 (- (cadr time) (cadr start-time))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2101 (message "WoMan formatting buffer...done in %d seconds" time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2102 (WoMan-log-end time))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2103 (run-hooks 'woman-post-format-hook))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2104
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2105 (defvar woman-string-alist ; rebound in woman-decode-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2106 '(("S" . "") ("R" . "(Reg.)") ("Tm" . "(TM)")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2107 ("lq" . "\"") ("rq" . "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2108 ("''" . "\"") ; needed for gcc.1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2109 (".T" . "") ; output device from -T option?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2110 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2111 "Alist of strings predefined in the -man macro package `tmac.an'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2112
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2113 (defvar woman-negative-vertical-space nil ; rebound in woman-decode-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2114 "Set to t if .sp N with N < 0 encountered.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2115
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2116 (defun woman-pre-process-region (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2117 "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
2118 To be called on original buffer and any .so insertions."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2119 ;; Hide escaped escapes \\ and printable escapes \e very early
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2120 ;; (to be re-instated as just \ very late!):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2121 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2122 ;; .eo turns off escape character processing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2123 (while (re-search-forward "\\(\\\\[\\e]\\)\\|^\\.eo" to t) ; \\
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2124 (if (match-string 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2125 (replace-match woman-escaped-escape-string t t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2126 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2127 ;; .ec turns on escape character processing (and sets the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2128 ;; escape character to its argument, if any, which I'm ignoring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2129 ;; for now!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2130 (while (and (re-search-forward "\\(\\\\\\)\\|^\\.ec" to t) ; \
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2131 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2132 (replace-match woman-escaped-escape-string t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2133 ;; ***** Need test for .ec arg and warning here! *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2134 (woman-delete-whole-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2135
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2136 ;; Delete comments .\"<anything>, \"<anything> and null requests.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2137 ;; (However, should null . requests cause a break?)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2138 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2139 (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
2140 (woman-delete-match 0)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2141
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2142 (defun woman-non-underline-faces ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2143 "Prepare non-underlined versions of underlined faces."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2144 (let ((face-list (face-list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2145 (while face-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2146 (let* ((face (car face-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2147 (face-name (symbol-name face)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2148 (if (and (string-match "\\`woman-" face-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2149 (face-underline-p face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2150 (let ((face-no-ul (intern (concat face-name "-no-ul"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2151 (copy-face face face-no-ul)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2152 (set-face-underline-p face-no-ul nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2153 (setq face-list (cdr face-list)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2154
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2155 ;; Preprocessors
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2156 ;; =============
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2157
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2158 ;; 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
2159 ;; 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
2160
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2161 ;; 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
2162 ;; 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
2163 ;; 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
2164 ;; first line must resemble
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2165 ;;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2166 ;; '\" <string>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2167 ;;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2168 ;; 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
2169 ;; 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
2170 ;; 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
2171 ;; 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
2172 ;; 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
2173 ;; (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
2174 ;; 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
2175
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2176 (defvar woman-emulate-tbl nil
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2177 "True if WoMan should emulate the tbl preprocessor.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2178 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
2179 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
2180
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2181 (defun woman-decode-region (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2182 "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
2183 ;; Suitable for use in format-alist.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2184 ;; But this requires care to control major mode implied font locking.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2185 ;; Must return the new end of file. See format.el for details.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2186 ;; NB: The `to' argument is bogus: it is not currently used, and if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2187 ;; it were it would need to be a marker rather than a position!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2188 ;; First force the correct environment:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2189 (let ((case-fold-search nil) ; This is necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2190 (woman-string-alist woman-string-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2191 (woman-fill-column woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2192 woman-negative-vertical-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2193 (setq woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2194 woman-prevailing-indent woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2195 woman-interparagraph-distance 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2196 woman-leave-blank-lines nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2197 woman-RS-left-margin nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2198 woman-RS-prevailing-indent nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2199 woman-adjust woman-adjust-both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2200 woman-justify (nth woman-adjust woman-justify-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2201 woman-nofill nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2202
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2203 (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
2204 (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
2205
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2206 ;; Prepare non-underlined versions of underlined faces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2207 (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
2208 ;; 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
2209 ;; `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
2210 (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
2211 (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
2212 (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
2213 (and (frame-live-p woman-frame) woman-frame)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2214
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2215 ;; Set syntax and display tables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2216 (set-syntax-table woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2217 (woman-set-buffer-display-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2218
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2219 ;; Based loosely on a suggestion by Theodore Jump:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2220 (if (or woman-fill-frame
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2221 (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
2222 (setq woman-fill-column (- (window-width) woman-default-indent)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2223
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2224 ;; Check for preprocessor requests:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2225 (goto-char from)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2226 (if (looking-at "'\\\\\"[ \t]*\\([a-z]+\\)")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2227 (let ((letters (append (match-string 1) nil)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2228 (if (memq ?t letters)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2229 (setq woman-emulate-tbl t
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2230 letters (delete ?t letters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2231 (if letters
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2232 (WoMan-warn "Unhandled preprocessor request letters %s"
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2233 (concat letters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2234 (woman-delete-line 1)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2235
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2236 (woman-pre-process-region from nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2237 ;; Process ignore requests, macro definitions,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2238 ;; conditionals and switch source requests:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2239 (woman0-roff-buffer from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2240
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2241 ;; Process \k escapes BEFORE changing tab width (?):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2242 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2243 (woman-mark-horizonal-position)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2244
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2245 ;; Set buffer-local variables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2246 (setq fill-column woman-fill-column
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2247 tab-width woman-tab-width)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2248
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2249 ;; Hide unpaddable and digit-width spaces \(space) and \0:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2250 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2251 (while (re-search-forward "\\\\[ 0]" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2252 (replace-match woman-unpadded-space-string t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2253
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2254 ;; Discard optional hyphen \%; concealed newlines \<newline>;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2255 ;; point-size change function \sN,\s+N, \s-N:
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 "\\\\\\([%\n]\\|s[-+]?[0-9]+\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2258 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2259
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2260 ;; BEWARE: THIS SHOULD PROBABLY ALL BE DONE MUCH LATER!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2261 ;; Process trivial escapes \-, \`, \.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2262 ;; (\' must be done after tab processing!):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2263 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2264 (while (re-search-forward "\\\\\\([-`.]\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2265 (replace-match "\\1"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2266 ;; NB: Must keep ALL zero-width characters \&, \|, and \^ until
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2267 ;; ALL requests processed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2268
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2269 ;; Process no-break requests and macros (including font-change macros):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2270 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2271 (woman1-roff-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2272
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2273 ;; Process strings and special character escapes \(xx:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2274 ;; (Must do this BEFORE fontifying!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2275 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2276 (woman-strings)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2277 ;; Special chars moved after translation in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2278 ;; `woman2-process-escapes' (for pic.1):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2279 ; (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2280 ; (woman-special-characters)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2281
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2282 ;; Process standard font-change requests and escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2283 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2284 (woman-change-fonts)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2285
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2286 ;; 1/2 em vertical motion \d, \u and general local vertical motion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2287 ;; \v'+/-N' simulated using TeX ^ and _ symbols for now.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2288 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2289 (let ((first t)) ; assume no nesting!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2290 (while (re-search-forward "\\\\\\([du]\\|v'[^']*'\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2291 (let* ((esc (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2292 (repl (if (or (= (aref esc 0) ?u)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2293 (and (>= (length esc) 2) (= (aref esc 2) ?-)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2294 "^" "_")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2295 (cond (first
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2296 (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
2297 (put-text-property (1- (point)) (point) 'face 'woman-addition)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2298 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2299 "Initial vertical motion escape \\%s simulated" esc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2300 (WoMan-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2301 " by TeX `%s' in woman-addition-face!" repl))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2302 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2303 (woman-delete-match 0)
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 "Terminal vertical motion escape \\%s ignored!" esc)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2306 (setq first (not first))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2307 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2308
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2309 ; ;; \h'+/-N' local horizontal motion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2310 ; ;; N may include width escape \w'...'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2311 ; ;; Implement arbitrary forward motion and non-overlapping backward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2312 ; ;; motion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2313 ; (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2314 ; (while (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2315 ; ;; Delimiter can be a special char escape sequence \(.. or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2316 ; ;; a single normal char (usually '):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2317 ; "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2318 ; nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2319 ; (let ((from (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2320 ; (delim (regexp-quote (match-string 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2321 ; (absolute (match-string 2)) ; absolute position?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2322 ; (N (woman-parse-numeric-arg)) ; distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2323 ; to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2324 ; msg) ; for warning
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2325 ; (if (not (looking-at delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2326 ; ;; Warn but leave escape in buffer unprocessed:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2327 ; (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2328 ; "Local horizontal motion (%s) delimiter error!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2329 ; (buffer-substring from (1+ (point)))) ; point at end of arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2330 ; (setq to (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2331 ; ;; For possible warning -- save before deleting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2332 ; msg (buffer-substring from to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2333 ; (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2334 ; (if absolute ; make relative
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2335 ; (setq N (- N (current-column))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2336 ; (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2337 ; ;; Move forward by inserting hard spaces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2338 ; (insert-char woman-unpadded-space-char N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2339 ; ;; Move backwards by deleting space,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2340 ; ;; first backwards then forwards:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2341 ; (while (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2342 ; (<= (setq N (1+ N)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2343 ; (cond ((memq (preceding-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2344 ; (delete-backward-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2345 ; ((memq (following-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2346 ; (delete-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2347 ; (t nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2348 ; (if (<= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2349 ; (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2350 ; "Negative horizontal motion (%s) would overwrite!" msg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2351 ; ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2352
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2353 ;; Process formatting macros
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2354 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2355 (woman2-roff-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2356
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2357 ;; Go back and process negative vertical space if necessary:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2358 (if woman-negative-vertical-space
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2359 (woman-negative-vertical-space from))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2360
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2361 (if woman-preserve-ascii
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2362 ;; Re-instate escaped escapes to just `\' and unpaddable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2363 ;; spaces to just `space', without inheriting any text
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2364 ;; properties. This is not necessary, UNLESS the buffer is to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2365 ;; be saved as ASCII.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2366 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2367 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2368 (while (search-forward woman-escaped-escape-string nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2369 (delete-char -1) (insert ?\\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2370 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2371 (while (search-forward woman-unpadded-space-string nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2372 (delete-char -1) (insert ?\ ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2373 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2374
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2375 ;; Must return the new end of file if used in format-alist.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2376 (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2377
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2378 (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
2379 "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
2380 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
2381 Preserves location of `point'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2382 ;; Moved from `woman-decode-region' for version 0.50.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2383 ;; N may include width escape \w'...' (but may already be processed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2384 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2385 (while (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2386 ;; Delimiter can be a special char escape sequence \(.. or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2387 ;; a single normal char (usually '):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2388 "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2389 to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2390 (let ((from (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2391 (delim (regexp-quote (match-string 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2392 (absolute (match-string 2)) ; absolute position?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2393 (N (woman-parse-numeric-arg)) ; distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2394 to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2395 msg) ; for warning
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2396 (if (not (looking-at delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2397 ;; Warn but leave escape in buffer unprocessed:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2398 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2399 "Local horizontal motion (%s) delimiter error!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2400 (buffer-substring from (1+ (point)))) ; point at end of arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2401 (setq to (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2402 ;; For possible warning -- save before deleting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2403 msg (buffer-substring from to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2404 (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2405 (if absolute ; make relative
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2406 (setq N (- N (current-column))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2407 (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2408 ;; Move forward by inserting hard spaces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2409 (insert-char woman-unpadded-space-char N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2410 ;; Move backwards by deleting space,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2411 ;; first backwards then forwards:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2412 (while (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2413 (<= (setq N (1+ N)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2414 (cond ((memq (preceding-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2415 (delete-backward-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2416 ((memq (following-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2417 (delete-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2418 (t nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2419 (if (<= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2420 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2421 "Negative horizontal motion (%s) would overwrite!" msg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2422 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2423 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2424
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2425
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2426
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2427 ;; 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
2428 ;; 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
2429 ;; expansions.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2430
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2431 (defvar woman0-if-to) ; marker bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2432 (defvar woman0-macro-alist) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2433 (defvar woman0-search-regex) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2434 (defvar woman0-search-regex-start ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2435 "^[.'][ \t]*\\(ig\\|if\\|ie\\|el\\|so\\|rn\\|de\\|am")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2436 (defconst woman0-search-regex-end "\\)\\([ \t]+\\|$\\)")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2437 ;; May need other terminal characters, e.g. \, but NOT \n!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2438 ;; Alternatively, force maximal match (Posix?)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2439
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2440 (defvar woman0-rename-alist) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2441
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2442 (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
2443 "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
2444 Start at FROM and re-scan new text as appropriate."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2445 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2446 (let ((woman0-if-to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2447 request woman0-macro-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2448 (woman0-search-regex-start woman0-search-regex-start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2449 (woman0-search-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2450 (concat woman0-search-regex-start woman0-search-regex-end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2451 woman0-rename-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2452 (while (re-search-forward woman0-search-regex nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2453 (setq request (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2454 (cond ((string= request "ig") (woman0-ig))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2455 ((string= request "if") (woman0-if "if"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2456 ((string= request "ie") (woman0-if "ie"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2457 ((string= request "el") (woman0-el))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2458 ((string= request "so") (woman0-so))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2459 ((string= request "rn") (woman0-rn))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2460 ((string= request "de") (woman0-de))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2461 ((string= request "am") (woman0-de 'append))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2462 (t (woman0-macro request))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2463 (set-marker woman0-if-to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2464 (woman0-rename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2465 ;; Should now re-run `woman0-roff-buffer' if any renaming was
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2466 ;; done, but let's just hope this is not necessary for now!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2467 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2468
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2469 (defun woman0-ig ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2470 ".ig yy -- Discard input up to `.yy', which defaults to `..')."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2471 ;; The terminal request MUST begin with . (not ')!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2472 (looking-at "\\(\\S +\\)?")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2473 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2474 (let ((yy (or (match-string 1) "."))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2475 (from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2476 (if (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2477 (concat "^\\.[ \t]*" (regexp-quote yy) ".*\n") nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2478 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2479 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2480 "ig request ignored -- terminator `.%s' not found!" yy)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2481 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2482 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2483
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2484 (defsubst woman0-process-escapes (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2485 "Process escapes within an if/ie condition between FROM and TO."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2486 (woman-strings to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2487 (goto-char from) ; necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2488 ;; Strip font-change escapes:
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2489 (while (re-search-forward "\\\\f\\(\\[[^]]+\\]\\|(..\\|.\\)" to t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2490 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2491 (goto-char from) ; necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2492 (woman2-process-escapes to 'numeric))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2493
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2494 (defun woman0-if (request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2495 ".if/ie c anything -- Discard unless c evaluates to true.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2496 Remember condition for use by a subsequent `.el'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2497 REQUEST is the invoking directive without the leading dot."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2498 ;; c evaluates to a one-character built-in condition name or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2499 ;; 'string1'string2' or a number > 0, prefix ! negates.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2500 ;; \{ ... \} for multi-line use.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2501 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2502 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2503 ;; (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2504 ;; Process escapes in condition:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2505 (let ((from (point)) negated n (c 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2506 (set-marker woman0-if-to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2507 (save-excursion (skip-syntax-forward "^ ") (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2508 ;; Process condition:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2509 (if (setq negated (= (following-char) ?!)) (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2510 (cond
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2511 ;; ((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
2512 ;; ((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
2513 ((looking-at "[ntoe]")
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2514 (setq c (memq (following-char) woman-if-conditions-true)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2515 ;; Unrecognised letter so reject:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2516 ((looking-at "[A-Za-z]") (setq c nil)
63509
f890545a138d (woman-ignore, woman0-if): Fix spelling in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 63365
diff changeset
2517 (WoMan-warn "%s %s -- unrecognized condition name rejected!"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2518 request (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2519 ;; Accept strings if identical:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2520 ((save-restriction
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2521 (narrow-to-region from woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2522 ;; String delimiter can be any non-numeric character,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2523 ;; including a special character escape:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2524 (looking-at "\\(\\\\(..\\|[^0-9]\\)\\(.*\\)\\1\\(.*\\)\\1\\'"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2525 (let ((end1 (copy-marker (match-end 2)))) ; end of first string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2526 ;; Delete 2nd and 3rd delimiters to avoid processing them:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2527 (delete-region (match-end 3) woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2528 (delete-region (match-end 2) (match-beginning 3))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2529 (goto-char (match-end 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2530 (woman0-process-escapes (point) woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2531 (setq c (string= (buffer-substring (point) end1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2532 (buffer-substring end1 woman0-if-to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2533 (set-marker end1 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2534 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2535 ;; Accept numeric value if > 0:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2536 ((numberp (setq n (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2537 (woman0-process-escapes from woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2538 (woman-parse-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2539 (setq c (> n 0))
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 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2542 (if (eq c 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2543 (woman-if-ignore woman0-if-to request) ; ERROR!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2544 (woman-if-body request woman0-if-to (eq c negated)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2545 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2546
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2547 (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
2548 "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
2549 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
2550 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
2551 If DELETE is non-nil then delete from point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2552 ;; Assume concealed newlines already processed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2553 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2554 (if to (delete-region (point) to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2555 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2556 (cond (;;(looking-at "[^{\n]*\\\\{\\s *") ; multi-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2557 ;; allow escaped newlines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2558 (looking-at "[^{\n]*\\(\\\\\n\\)*\\\\{\\s *\\(\\\\\n\\)*") ; multi-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2559 ;; including preceding .if(s) and following newline
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2560 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2561 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2562 ;; Allow for nested \{ ... \} -- BUT BEWARE that this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2563 ;; algorithm only supports one level of nesting!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2564 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2565 (and (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2566 ;; "\\(\\\\{\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2567 ;; Interpret bogus `el \}' as `el \{',
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2568 ;; especially for Tcl/Tk man pages:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2569 "\\(\\\\{\\|el[ \t]*\\\\}\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2570 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2571 (re-search-forward "\\\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2572 (delete-region (if delete from (match-beginning 0)) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2573 (if (looking-at "^$") (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2574 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2575 (delete (woman-delete-line 1)) ; single-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2576 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2577 ;; Process matching .el anything:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2578 (cond ((string= request "ie")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2579 ;; Discard unless previous .ie c `evaluated to false'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2580 (cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2581 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2582 (woman-if-body "el" nil (not delete)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2583 ;; Got here after processing a single-line `.ie' as a body
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2584 ;; clause to be discarded:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2585 ((string= request "el")
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 t))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2589 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2590 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2591 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2592
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2593 (defun woman0-el ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2594 "Isolated .el request -- should not happen!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2595 (WoMan-warn "el request without matching `ie' rejected!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2596 (cond (woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2597 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2598 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2599 (woman-if-body "el" nil t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2600 (t ; Ignore -- leave in buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2601 ;; This does not work too well, but it's only for debugging!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2602 (skip-chars-forward "^ \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2603 (if (looking-at "[ \t]*\\{") (search-forward "\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2604 (forward-line 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2605
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2606 (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
2607 "Ignore but warn about an if request ending at TO, named REQUEST."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2608 (WoMan-warn-ignored request "ignored -- condition not handled!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2609 (if woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2610 (woman-if-body request to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2611 ;; Ignore -- leave in buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2612 ;; This does not work too well, but it's only for debugging!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2613 (skip-chars-forward "^ \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2614 (if (looking-at "[ \t]*\\{") (search-forward "\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2615 (forward-line 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2616
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2617 (defun woman0-so ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2618 ".so filename -- Switch source file. `.so' requests may be nested."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2619 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2620 ;; (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2621 (let* ((beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2622 (end (progn (woman-forward-arg 'unquote) (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2623 (name (buffer-substring beg end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2624 (filename name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2625 ;; If the specified file does not exist in this ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2626 (or (file-exists-p filename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2627 ;; or the parent directory ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2628 (file-exists-p
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2629 (setq filename (concat "../" name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2630 ;; then use the WoMan search mechanism to find the filename ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2631 (setq filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2632 (woman-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2633 (file-name-sans-extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2634 (file-name-nondirectory name))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2635 ;; Cannot find the file, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2636 (kill-buffer (current-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2637 (error "File `%s' not found" name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2638 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2639 (woman-delete-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2640 (let ((from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2641 (to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2642 (length (woman-insert-file-contents filename 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2643 (set-marker to (+ from length))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2644 (woman-pre-process-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2645 (set-marker to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2646 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2647 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2648
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2649
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2650 ;;; Process macro definitions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2651
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2652 (defun woman0-rn ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2653 "Process .rn xx yy -- rename macro xx to yy."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2654 ;; For now, done backwards AFTER all macro expansion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2655 ;; Should also allow requests and strings to be renamed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2656 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2657 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2658 (let* ((beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2659 (end (progn (woman-forward-arg 'unquote 'concat) (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2660 (old (buffer-substring beg end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2661 new)
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 (setq beg (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2665 end (progn (woman-forward-arg 'unquote) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2666 new (buffer-substring beg end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2667 woman0-rename-alist (cons (cons new old) woman0-rename-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2668 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2669 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2670
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2671 (defun woman0-rename ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2672 "Effect renaming required by .rn requests."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2673 ;; For now, do this backwards AFTER all macro expansion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2674 (while woman0-rename-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2675 (let* ((new (car woman0-rename-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2676 (old (cdr new))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2677 (new (car new)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2678 (setq woman0-rename-alist (cdr woman0-rename-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2679 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2680 (setq new (concat "^[.'][ \t]*" (regexp-quote new)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2681 (setq old (concat "." old))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2682 (while (re-search-forward new nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2683 (replace-match old nil t)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2684
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2685 (defconst woman-unescape-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2686 (concat woman-escaped-escape-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2687 "\\(" woman-escaped-escape-string "\\)?"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2688
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2689 (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
2690 "Replace escape sequences in the body of MACRO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2691 Replaces || by |, but | by \, where | denotes the internal escape."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2692 (let (start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2693 (while (setq start (string-match woman-unescape-regex macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2694 (setq macro
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2695 (if (match-string 1 macro)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2696 (replace-match "" t t macro 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2697 (replace-match "\\" t t macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2698 start (1+ start)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2699 macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2700
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2701 (defun woman0-de (&optional append)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2702 "Process .de/am xx yy -- (re)define/append macro xx; end at `..'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2703 \(Should be up to call of yy, which defaults to `.')
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2704 Optional argument APPEND, if non-nil, means append macro."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2705 ;; Modelled on woman-strings. BEWARE: Processing of .am is a hack!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2706 ;; Add support for .rm?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2707 ;; (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2708 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2709 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2710 (looking-at "[^ \t\n]+") ; macro name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2711 (let* ((macro (match-string 0)) from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2712 (previous (assoc macro woman0-macro-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2713 (if (not previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2714 (setq woman0-search-regex-start
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2715 (concat woman0-search-regex-start "\\|" (regexp-quote macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2716 woman0-search-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2717 (concat woman0-search-regex-start woman0-search-regex-end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2718 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2719 ;; Macro body runs from start of next line to line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2720 ;; beginning with `..'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2721 ;; The terminal request MUST begin with `.' (not ')!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2722 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2723 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2724 (re-search-forward "^\\.[ \t]*\\.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2725 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2726 (let ((body (woman-unescape (buffer-substring from (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2727 (if (and append previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2728 (setq previous (cdr previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2729 body (concat body (cdr previous))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2730 append (car previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2731 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2732 (setq macro (cons macro (cons append body))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2733 ;; This should be an update, but consing a new string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2734 ;; onto the front of the alist has the same effect:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2735 (setq woman0-macro-alist (cons macro woman0-macro-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2736 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2737 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2738 (backward-char) ; return to end of .de/am line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2739 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2740 (beginning-of-line) ; delete .de/am line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2741 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2742
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2743 (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
2744 "Process the macro call named REQUEST."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2745 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2746 (let ((macro (assoc request woman0-macro-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2747 (if macro
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2748 (woman-interpolate-macro (cdr macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2749 ;; SHOULD DELETE THE UNINTERPRETED REQUEST!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2750 ;; Output this message once only per call (cf. strings)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2751 (WoMan-warn "Undefined macro %s not interpolated!" request))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2752
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2753 (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
2754 "Interpolate (.de) or append (.am) expansion of MACRO into the buffer."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2755 ;; Could make this more efficient by checking which arguments are
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2756 ;; actually used in the expansion!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2757 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2758 ;; Process arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2759 (let ((argno 0) (append (car macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2760 argno-string formal-arg from actual-arg start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2761 (setq macro (cdr macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2762 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2763 ;; Get next actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2764 (setq argno (1+ argno))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2765 (setq argno-string (format "%d" argno))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2766 (setq formal-arg (concat "\\\\\\$" argno-string)) ; regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2767 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2768 (woman-forward-arg 'unquote 'noskip)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2769 (setq actual-arg (buffer-substring from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2770 (skip-chars-forward " \t") ; now skip following whitespace!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2771 ;; Replace formal arg with actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2772 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2773 (while (setq start (string-match formal-arg macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2774 (setq macro (replace-match actual-arg t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2775 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2776 ;; Delete any remaining formal arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2777 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2778 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2779 (setq start (string-match "\\\\\\$." macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2780 (setq macro (replace-match "" t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2781 ;; Replace .$ number register with actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2782 ;; (Do this properly via register mechanism later!)
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 "\\\\n(\\.\\$" macro start)) ; regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2786 (setq macro (replace-match argno-string t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2787 (if append
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2788 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2789 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2790 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2791 (save-excursion ; leave point at start of new text
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2792 (insert macro))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2793
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2794
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2795 ;;; Process strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2796
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2797 (defun woman-match-name ()
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2798 "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
2799 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
2800 special characters."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2801 (cond ((= (following-char) ?\[ )
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2802 (forward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2803 (re-search-forward "[^]]+")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2804 (forward-char)) ; skip closing ]
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2805 ((= (following-char) ?\( )
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2806 (forward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2807 (re-search-forward ".."))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2808 (t (re-search-forward "."))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2809
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2810 (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
2811 "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
2812 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
2813 interpolated by `\*x' and `\*(xx' escapes."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2814 ;; Add support for .as and .rm?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2815 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2816 ;; Find .ds requests and \* escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2817 (re-search-forward "\\(^[.'][ \t]*ds\\)\\|\\\\\\*" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2818 (cond ((match-string 1) ; .ds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2819 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2820 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2821 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2822 (re-search-forward "[^ \t\n]+")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2823 (let ((string (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2824 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2825 ; (setq string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2826 ; (cons string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2827 ; ;; hack (?) for CGI.man!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2828 ; (cond ((looking-at "\"\"") "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2829 ; ((looking-at ".*") (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2830 ; ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2831 ;; Above hack causes trouble in arguments!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2832 (looking-at ".*")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2833 (setq string (cons string (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2834 ;; This should be an update, but consing a new string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2835 ;; onto the front of the alist has the same effect:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2836 (setq woman-string-alist (cons string woman-string-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2837 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2838 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2839 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2840 (t ; \*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2841 (let ((beg (match-beginning 0)))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2842 (woman-match-name)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2843 (let* ((stringname (match-string 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2844 (string (assoc stringname woman-string-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2845 (cond (string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2846 (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2847 ;; Temporary hack in case string starts with a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2848 ;; control character:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2849 (if (bolp) (insert-before-markers "\\&"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2850 (insert-before-markers (cdr string)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2851 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2852 (WoMan-warn "Undefined string %s not interpolated!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2853 stringname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2854 (cond (woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2855 ;; Output above message once only per call
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2856 (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2857 (setq woman-string-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2858 (cons (cons stringname "")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2859 woman-string-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2860 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2861 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2862 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2863 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2864
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2865
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2866 ;;; Process special character escapes \(xx:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2867
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2868 (defconst woman-special-characters
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2869 ;; To be built heuristically as required!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2870 ;; MUST insert all characters as strings for correct conversion to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2871 ;; multibyte representation!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2872 '(("em" "--" "\276" . t) ; 3/4 Em dash
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2873 ("bu" "*" "\267" . t) ; bullet
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2874 ("fm" "'") ; foot mark
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2875 ("co" "(C)" "\251") ; copyright
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2876
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2877 ("pl" "+" "+" . t) ; math plus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2878 ("mi" "-" "-" . t) ; math minus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2879 ("**" "*" "*" . t) ; math star
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2880 ("aa" "'" "\242" . t) ; acute accent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2881 ("ul" "_") ; underrule
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2882
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2883 ("*S" "Sigma" "S" . t) ; Sigma
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2884
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2885 (">=" ">=" "\263" . t) ; >=
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2886 ("<=" "<=" "\243" . t) ; <=
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2887 ("->" "->" "\256" . t) ; right arrow
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2888 ("<-" "<-" "\254" . t) ; left arrow
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2889 ("mu" " x " "\264" . t) ; multiply
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2890 ("+-" "+/-" "\261" . t) ; plus-minus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2891 ("bv" "|") ; bold vertical
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2892
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2893 ;; groff etc. extensions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2894 ("lq" "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2895 ("rq" "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2896 ("aq" "'")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2897 ("ha" "^")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2898 ("ti" "~")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2899 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2900 "Alist of special character codes with ASCII and extended-font equivalents.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2901 Each alist elements has the form
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2902 (input-string ascii-string extended-font-string . use-symbol-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2903 where
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2904 * `\\(input-string' is the ?roff encoding,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2905 * `ascii-string' is the (multi-character) ASCII simulation,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2906 * `extended-font-string' is the single-character string representing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2907 the character position in the extended 256-character font, and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2908 * `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
2909 i.e. omitted, to indicate use of the default font.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2910 Any element may be nil. Avoid control character codes (0 to \\37, \\180
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2911 to \\237) in `extended-font-string' for now, since they can be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2912 displayed only with a modified display table.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2913
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2914 Use the WoMan command `woman-display-extended-fonts' or a character
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2915 map accessory to help construct this alist.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2916
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2917 (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
2918 "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
2919 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
2920 (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
2921 (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
2922 (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
2923 t)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2924
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2925 (defun woman-special-characters (to)
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2926 "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
2927 \(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
2928 (while (re-search-forward "\\\\\\(?:(\\(..\\)\\|\\[\\([[^]]+\\)\\]\\)" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2929 (let* ((name (or (match-string-no-properties 1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2930 (match-string-no-properties 2)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2931 (replacement (assoc name woman-special-characters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2932 (unless
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2933 (and
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2934 replacement
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2935 (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
2936 (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
2937 ;; Need symbol font:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2938 (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
2939 (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
2940 'woman-symbol))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2941 ;; Need extended font:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2942 (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
2943 (woman-replace-match (nth 2 replacement))))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2944 ((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
2945 (woman-replace-match (cadr replacement)))))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2946 (WoMan-warn (concat "Special character "
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2947 (if (match-string 1) "\\(%s" "\\[%s]")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2948 " not interpolated!") name)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2949 (if woman-ignore (woman-delete-match 0))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2950 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2951
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2952 (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
2953 "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
2954 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
2955 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
2956 Useful for constructing the alist variable `woman-special-characters'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2957 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2958 (with-output-to-temp-buffer "*WoMan Extended Font Map*"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2959 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2960 (set-buffer standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2961 (let ((i 32))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2962 (while (< i 256)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2963 (insert (format "\\%03o " i) (string i) " " (string i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2964 (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
2965 'face 'woman-symbol)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2966 (insert " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2967 (setq i (1+ i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2968 (when (= i 128) (setq i 160) (insert "\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2969 (if (zerop (% i 8)) (insert "\n")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2970 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2971 (print-help-return-message)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2972
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2973
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2974 ;;; Formatting macros that do not cause a break:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2975
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2976 (defvar request) ; Bound locally by woman1-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2977 (defvar unquote) ; Bound locally by woman1-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2978
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2979 (defun woman-unquote (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2980 "Delete any double-quote characters between point and TO.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2981 Leave point at TO (which should be a marker)."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2982 (let (in-quote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2983 (while (search-forward "\"" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2984 (if (and in-quote (looking-at "\""))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2985 ;; Repeated double-quote represents single double-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2986 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2987 (if (or in-quote (looking-at ".*\"")) ; paired
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2988 (delete-char -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2989 (setq in-quote (not in-quote))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2990 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2991 (if in-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2992 (WoMan-warn "Unpaired \" in .%s arguments." request))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2993 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2994
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2995 (defsubst woman-unquote-args ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2996 "Delete any double-quote characters up to the end of the line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2997 (woman-unquote (save-excursion (end-of-line) (point-marker))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2998
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2999 (defun woman1-roff-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3000 "Process non-breaking requests."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3001 (let ((case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3002 request fn unquote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3003 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3004 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3005 (re-search-forward woman-request-regexp nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3006 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3007 ;; Construct woman function to call:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3008 ((setq fn (intern-soft
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3009 (concat "woman1-"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3010 (setq request (match-string 1)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3011 (if (get fn 'notfont) ; not a font-change request
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3012 (funcall fn)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3013 ;; Delete request or macro name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3014 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3015 ;; If no args then apply to next line else unquote args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3016 ;; (unquote is used by called function):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3017 (setq unquote (not (eolp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3018 (if (eolp) (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3019 ; ;; Hide leading control character in unquoted argument:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3020 ; (cond ((memq (following-char) '(?. ?'))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3021 ; (insert "\\&")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3022 ; (beginning-of-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3023 ;; Call the appropriate function:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3024 (funcall fn)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3025 ;; Hide leading control character in quoted argument (only):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3026 (if (and unquote (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 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3029 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3030
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3031 ;;; Font-changing macros:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3032
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3033 (defun woman1-B ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3034 ".B -- Set words of current line in bold font."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3035 (woman1-B-or-I ".ft B\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3036
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3037 (defun woman1-I ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3038 ".I -- Set words of current line in italic font."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3039 (woman1-B-or-I ".ft I\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3040
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3041 (defun woman1-B-or-I (B-or-I)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3042 ".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
3043 B-OR-I is the appropriate complete control line."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3044 ;; Should NOT concatenate the arguments!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3045 (insert B-or-I) ; because it might be a control line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3046 ;; Return to bol to process .SM/.B, .B/.if etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3047 ;; or start of first arg to hide leading control char.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3048 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3049 (if unquote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3050 (woman-unquote-args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3051 (while (looking-at "^[.']") (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3052 (end-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3053 (delete-horizontal-space))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3054 (insert "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3055
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3056 (defun woman1-SM ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3057 ".SM -- Set the current line in small font, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3058 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3059
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3060 (defalias 'woman1-SB 'woman1-B)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3061 ;; .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
3062 ;; (This is what /usr/local/share/groff/tmac/tmac.an does. The
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3063 ;; Linux man.7 is wrong about this!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3064
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3065 (defun woman1-BI ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3066 ".BI -- Join words of current line alternating bold and italic fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3067 (woman1-alt-fonts (list "\\fB" "\\fI")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3068
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3069 (defun woman1-BR ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3070 ".BR -- Join words of current line alternating bold and Roman fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3071 (woman1-alt-fonts (list "\\fB" "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3072
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3073 (defun woman1-IB ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3074 ".IB -- Join words of current line alternating italic and bold fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3075 (woman1-alt-fonts (list "\\fI" "\\fB")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3076
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3077 (defun woman1-IR ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3078 ".IR -- Join words of current line alternating italic and Roman fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3079 (woman1-alt-fonts (list "\\fI" "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3080
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3081 (defun woman1-RB ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3082 ".RB -- Join words of current line alternating Roman and bold fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3083 (woman1-alt-fonts (list "\\fR" "\\fB")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3084
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3085 (defun woman1-RI ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3086 ".RI -- Join words of current line alternating Roman and italic fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3087 (woman1-alt-fonts (list "\\fR" "\\fI")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3088
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3089 (defun woman1-alt-fonts (fonts)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3090 "Join words using alternating fonts in FONTS, which MUST be a dynamic list."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3091 (nconc fonts fonts) ; circular list!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3092 (insert (car fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3093 ;; Return to start of first arg to hide leading control char:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3094 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3095 (setq fonts (cdr fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3096 (woman-forward-arg unquote 'concat) ; unquote is bound above
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3097 (while (not (eolp))
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 (setq fonts (cdr fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3100 (woman-forward-arg unquote 'concat)) ; unquote is bound above
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3101 (insert "\\fR")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3102 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3103
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3104 (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
3105 "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
3106 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
3107 If optional arg CONCAT is non-nil then join arguments."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3108 (if (eq (following-char) ?\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3109 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3110 (if unquote (delete-char 1) (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3111 (re-search-forward "\"\\|$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3112 ;; Repeated double-quote represents single double-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3113 (while (eq (following-char) ?\") ; paired
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3114 (if unquote (delete-char 1) (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3115 (re-search-forward "\"\\|$"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3116 (if (eq (preceding-char) ?\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3117 (if unquote (delete-backward-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3118 (WoMan-warn "Unpaired \" in .%s arguments." request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3119 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3120 ;; (re-search-forward "[^\\\n] \\|$") ; inconsistent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3121 (skip-syntax-forward "^ "))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3122 (cond ((null concat) (skip-chars-forward " \t")) ; don't skip eol!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3123 ((eq concat 'noskip)) ; do not skip following whitespace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3124 (t (woman-delete-following-space)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3125 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3126
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3127
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3128 ;; 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
3129 ;; 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
3130 ;; and further processing.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3131
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3132 (put 'woman1-TP 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3133 (defun woman1-TP ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3134 ".TP -- After tag line, reset font to Roman for paragraph body."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3135 ;; Same for .IP, but forward only 1 line?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3136 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3137 ;; May be an `irrelevant' control line in the way, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3138 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3139 (forward-line (if (looking-at "\\.\\S-+[ \t]*$") 2 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3140 ;; May be looking at control line, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3141 (insert ".ft R\n")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3142
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3143 (put 'woman1-ul 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3144 (defun woman1-ul ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3145 ".ul N -- Underline (italicize) the next N input lines, default N = 1."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3146 (let ((N (if (eolp) 1 (woman-parse-numeric-arg)))) ; woman-get-numeric-arg ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3147 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3148 (insert ".ft I\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3149 (forward-line N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3150 (insert ".ft R\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3151 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3152
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3153 ;;; Other non-breaking requests:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3154
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3155 ;; Hyphenation
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3156 ;; Warnings commented out.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3157
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3158 (put 'woman1-nh 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3159 (defun woman1-nh ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3160 ".nh -- No hyphenation, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3161 ;; Must be handled here to avoid breaking!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3162 ;; (WoMan-log-1 ".nh request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3163 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3164
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3165 (put 'woman1-hy 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3166 (defun woman1-hy ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3167 ".hy N -- Set hyphenation mode to N, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3168 ;; (WoMan-log-1 ".hy 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-hc 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3172 (defun woman1-hc ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3173 ".hc c -- Set hyphenation character to c, i.e. delete it!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3174 (let ((c (char-to-string (following-char))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3175 ;; (WoMan-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3176 ;; "Hyphenation character %s deleted -- hyphenation not supported!" c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3177 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3178 (setq c (concat "\\(" c "\\)\\|^[.'][ \t]*hc"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3179 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3180 (while (and (re-search-forward c nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3181 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3182 (delete-char -1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3183 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3184
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3185 (put 'woman1-hw 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3186 (defun woman1-hw ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3187 ".hw words -- Set hyphenation exception words, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3188 ;; (WoMan-log-1 ".hw request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3189 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3190
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3191 ;;; Other non-breaking requests correctly ignored by nroff:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3192
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3193 (put 'woman1-ps 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3194 (defalias 'woman1-ps 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3195 ;; .ps -- Point size -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3196
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3197 (put 'woman1-ss 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3198 (defalias 'woman1-ss 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3199 ;; .ss -- Space-character size -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3200
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3201 (put 'woman1-cs 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3202 (defalias 'woman1-cs 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3203 ;; .cs -- Constant character space (width) mode -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3204
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3205 (put 'woman1-ne 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3206 (defalias 'woman1-ne 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3207 ;; .ne -- Need vertical space -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3208
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3209 (put 'woman1-vs 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3210 (defalias 'woman1-vs 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3211 ;; .vs -- Vertical base line spacing -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3212
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3213 (put 'woman1-bd 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3214 (defalias 'woman1-bd 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3215 ;; .bd -- Embolden font -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3216
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3217 ;;; Non-breaking SunOS-specific macros:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3218
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3219 (defun woman1-TX ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3220 ".TX t p -- Resolve SunOS abbrev t and join to p (usually punctuation)."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3221 (insert "SunOS ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3222 (woman-forward-arg 'unquote 'concat))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3223
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3224 (put 'woman1-IX 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3225 (defalias 'woman1-IX 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3226 ;; .IX -- Index macro, for Sun internal use -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3227
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3228
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3229 ;;; Direct font selection:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3230
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3231 (defconst woman-font-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3232 '(("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
3233 ("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
3234 ("B" . woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3235 ("P" . previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3236 ("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
3237 ("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
3238 ("3" . woman-bold) ; used in bash.1
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3239 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3240 "Alist of ?roff font indicators and woman font variables and names.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3241
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3242 (defun woman-change-fonts ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3243 "Process font changes."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3244 ;; ***** NEEDS REVISING IF IT WORKS OK *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3245 ;; 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
3246 ;; Should .SH/.SS reset font?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3247 ;; Font size setting macros (?) should reset font.
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3248 (let ((font-alist woman-font-alist) ; for local updating
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3249 (previous-pos (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3250 (previous-font 'default)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3251 (current-font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3252 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3253 ;; Find font requests, paragraph macros and font escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3254 (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3255 "^[.'][ \t]*\\(\\(\\ft\\)\\|\\(.P\\)\\)\\|\\(\\\\f\\)" nil 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3256 (let (font beg notfont)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3257 ;; Match font indicator and leave point at end of sequence:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3258 (cond ((match-string 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3259 ;; .ft request found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3260 (setq beg (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3261 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3262 (if (eolp) ; default is previous font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3263 (setq font previous-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3264 (looking-at "[^ \t\n]+"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3265 (forward-line)) ; end of control line and \n
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3266 ((match-string 3)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3267 ;; Macro that resets font found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3268 (setq font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3269 ((match-string 4)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3270 ;; \f escape found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3271 (setq beg (match-beginning 0))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3272 (woman-match-name))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3273 (t (setq notfont t)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3274 (if notfont
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3275 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3276 ;; Get font name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3277 (or font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3278 (let ((fontstring (match-string 0)))
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3279 (setq font (assoc fontstring font-alist)
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3280 ;; NB: font-alist contains VARIABLE NAMES.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3281 font (if font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3282 (cdr font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3283 (WoMan-warn "Unknown font %s." fontstring)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3284 ;; Output this message once only per call ...
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3285 (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
3286 (cons (cons fontstring 'woman-unknown)
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3287 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
3288 'woman-unknown)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3289 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3290 ;; Delete font control line or escape sequence:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3291 (cond (beg (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3292 (if (eq font 'previous) (setq font previous-font))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3293 (woman-set-face previous-pos (point) current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3294 (if beg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3295 ;; Explicit font control
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3296 (setq previous-pos (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3297 previous-font current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3298 ;; Macro that resets font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3299 ;; (forward-line) ; DOES NOT WORK! but unnecessary?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3300 ;; Must process font changes in any paragraph tag!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3301 (setq previous-pos (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3302 previous-font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3303 (setq current-font font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3304 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3305 ;; Set font after last request up to eob:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3306 (woman-set-face previous-pos (point) current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3307 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3308
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3309 (defun woman-set-face (from to face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3310 "Set the face of the text from FROM to TO to face FACE.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3311 Ignore the default face and underline only word characters."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3312 (or (eq face 'default) ; ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3313 (not woman-fontify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3314 (if (face-underline-p face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3315 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3316 (let ((face-no-ul (intern (concat (symbol-name face) "-no-ul"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3317 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3318 (while (< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3319 (skip-syntax-forward "w" to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3320 (put-text-property from (point) 'face face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3321 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3322 (skip-syntax-forward "^w" to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3323 (put-text-property from (point) 'face face-no-ul)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3324 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3325 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3326 (put-text-property from to 'face face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3327 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3328
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3329
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3330 ;;; Output translation:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3331
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3332 (defvar translations nil) ; Also bound locally by woman2-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3333 ;; A list of the form (\"[ace]\" (a . b) (c . d) (e . ?\ )) or nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3334
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3335 (defun woman-get-next-char ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3336 "Return and delete next char in buffer, including special chars."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3337 (if ;;(looking-at "\\\\(\\(..\\)")
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3338 ;; Match special \(xx and strings \*[xxx], \*(xx, \*x:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3339 (looking-at "\\\\\\((..\\|\\*\\(\\[[^]]+\\]\\|(..\\|.\\)\\)")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3340 (prog1 (match-string 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3341 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3342 (prog1 (char-to-string (following-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3343 (delete-char 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3344
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3345 (defun woman2-tr (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3346 ".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
3347 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
3348 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3349 ;; This should be an update, but consing onto the front of the alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3350 ;; has the same effect and match duplicates should not matter.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3351 ;; Initialize translation data structures:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3352 (let ((matches (car translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3353 (alist (cdr translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3354 a b)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3355 ;; `matches' must be a string:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3356 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3357 (concat (if matches (substring matches 1 -1)) "]"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3358 ;; Process .tr arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3359 (while (not (eolp)) ; (looking-at "[ \t]*$") ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3360 (setq a (woman-get-next-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3361 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3362 (setq b " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3363 (setq b (woman-get-next-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3364 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3365 (if (= (length a) 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3366 (concat a matches)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3367 (concat matches "\\|\\" a))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3368 alist (cons (cons a b) alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3369 (delete-char 1) ; no blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3370 ;; Rebuild translations list:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3371 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3372 (if (= (string-to-char matches) ?\])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3373 (substring matches 3)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3374 (concat "[" matches))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3375 translations (cons matches alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3376 ;; Format any following text:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3377 (woman2-format-paragraphs to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3378 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3379
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3380 (defsubst woman-translate (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3381 "Translate up to marker TO. Do this last of all transformations."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3382 (if translations
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3383 (let ((matches (car translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3384 (alist (cdr translations)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3385 (while (re-search-forward matches to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3386 ;; Done like this to retain text properties and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3387 ;; support translation of special characters:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3388 (insert-before-markers-and-inherit
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3389 (cdr (assoc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3390 (buffer-substring-no-properties
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3391 (match-beginning 0) (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3392 alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3393 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3394 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3395
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3396
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3397 ;;; Registers:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3398
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3399 (defvar woman-registers ; these are all read-only
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3400 '((".H" 24) (".V" 48) ; resolution in basic units
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3401 (".g" 0) ; not groff
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3402 ;; (Iff emulating groff need to implement groff italic correction
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3403 ;; \/, e.g. for pic.1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3404 (".i" left-margin) ; current indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3405 (".j" woman-adjust) ; current adjustment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3406 (".l" fill-column) ; current line length
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3407 (".s" 12) ; current point size
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3408 (".u" (if woman-nofill 0 1)) ; 1/0 in fill/nofill mode
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3409 (".v" 48) ; current vertical line spacing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3410 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3411 "Register alist: the key is the register name as a string.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3412 Each element has the form (KEY VALUE . INC) -- inc may be nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3413 Also bound locally in `woman2-roff-buffer'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3414
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3415 (defun woman-mark-horizonal-position ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3416 "\\kx -- Store current horizontal position in INPUT LINE in register x."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3417 (while (re-search-forward "\\\\k\\(.\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3418 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3419 (setq woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3420 (cons (list (match-string 1) (current-column))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3421 woman-registers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3422 (woman-delete-match 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3423
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3424 (defsubst woman2-process-escapes-to-eol (&optional numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3425 "Process remaining escape sequences up to eol.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3426 Handle numeric arguments specially if optional argument NUMERIC is non-nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3427 (woman2-process-escapes
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3428 (save-excursion (end-of-line) (point-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3429 numeric))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3430
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3431 (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
3432 ".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
3433 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
3434 Format paragraphs upto TO. (Breaks, but should not!)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3435 (let* ((name (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3436 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3437 (progn (skip-syntax-forward "^ ") (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3438 (pm (progn ; increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3439 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3440 (when (memq (char-after) '(?+ ?-))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3441 (forward-char) (char-before))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3442 (value (if (eolp) ; no value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3443 nil ; to be interpreted as zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3444 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3445 (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3446 (inc (progn ; auto-increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3447 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3448 (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 (woman-parse-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3451 (oldvalue (assoc name woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3452 (when oldvalue
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3453 (setq oldvalue (cdr oldvalue)) ; (value . inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3454 (unless inc (setq inc (cdr oldvalue))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3455 (cond ((null value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3456 (setq value 0) ; correct?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3457 (WoMan-warn "nr %s -- null value assigned as zero!" name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3458 ((symbolp value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3459 (setq value (list 'quote value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3460 (if pm ; increment old value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3461 (setq oldvalue (if oldvalue (car oldvalue) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3462 value (if (eq pm ?+)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3463 (+ oldvalue value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3464 (- oldvalue value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3465 (setq woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3466 (cons (cons name (cons value inc)) woman-registers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3467 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3468 (woman2-format-paragraphs to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3469
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3470
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3471 ;;; Numeric (and "non-text") request arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3472
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3473 (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
3474 "Get the value of a numeric argument at or after point.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3475 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
3476 Assumes 10 characters per inch. Does not move point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3477 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3478 (save-excursion (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3479
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3480 (defun woman-parse-numeric-arg ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3481 "Get the value of a numeric expression at or after point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3482 Unlike `woman-get-numeric-arg', leaves point after the argument.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3483 The expression may be an argument in quotes."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3484 (if (= (following-char) ?\") (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3485 ;; Allow leading +/-:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3486 (let ((value (if (looking-at "[+-]") 0 (woman-parse-numeric-value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3487 op)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3488 (while (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3489 ((looking-at "[+-/*%]") ; arithmetic operators
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3490 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3491 (setq op (intern-soft (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3492 (setq value (funcall op value (woman-parse-numeric-value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3493 ((looking-at "[<=>]=?") ; relational operators
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3494 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3495 (setq op (or (intern-soft (match-string 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3496 (intern-soft "=")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3497 (setq value (if (funcall op value (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3498 1 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3499 ((memq (setq op (following-char)) '(?& ?:)) ; Boolean and / or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3500 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3501 (setq value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3502 ;; and / or are special forms, not functions, in ELisp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3503 (if (eq op ?&)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3504 ;; and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3505 (if (> value 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3506 (if (> (woman-parse-numeric-value) 0) 1 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3507 ;; skip second operand
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3508 (prog1 0 (woman-parse-numeric-value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3509 ;; or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3510 (if (> value 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3511 ;; skip second operand
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3512 (prog1 1 (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3513 (if (> (woman-parse-numeric-value) 0) 1 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3514 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3515 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3516 ; (if (looking-at "[ \t\nRC\)\"]") ; R, C are tab types
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3517 ; ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3518 ; (WoMan-warn "Unimplemented numerical operator `%c' in %s"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3519 ; (following-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3520 ; (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3521 ; (save-excursion (beginning-of-line) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3522 ; (save-excursion (end-of-line) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3523 ; (skip-syntax-forward "^ "))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3524 value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3525 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3526
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3527 (defun woman-parse-numeric-value ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3528 "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
3529 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
3530 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
3531 expression in parentheses. Leaves point after the value."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3532 ;; Must replace every \' by some different single character first
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3533 ;; before calling this function by calling
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3534 ;; (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3535 (if (eq (following-char) ?\()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3536 ;; Treat parenthesized expression as a single value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3537 (let (n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3538 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3539 (setq n (woman-parse-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3540 (skip-syntax-forward " ")
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 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3543 (WoMan-warn "Parenthesis confusion in numeric expression!"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3544 n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3545 (let ((n (cond ((looking-at "[-+]?[.0-9]+") ; single number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3546 ;; currently needed to set match-end, even though
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3547 ;; string-to-number returns 0 if number not parsed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3548 (string-to-number (match-string 0)))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3549 ((looking-at "\\\\n\\([-+]\\)?\\(?:\
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3550 \\[\\([^]]+\\)\\]\\|\(\\(..\\)\\|\\(.\\)\\)")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3551 ;; interpolate number register, maybe auto-incremented
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3552 (let* ((pm (match-string-no-properties 1))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3553 (name (or (match-string-no-properties 2)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3554 (match-string-no-properties 3)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3555 (match-string-no-properties 4)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3556 (value (assoc name woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3557 (if value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3558 (let (inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3559 (setq value (cdr value) ; (value . inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3560 inc (cdr value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3561 ;; eval internal (.X) registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3562 ;; stored as lisp variable names:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3563 value (eval (car value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3564 (if (and pm inc) ; auto-increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3565 (setq value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3566 (funcall (intern-soft pm) value inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3567 woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3568 (cons (cons name (cons value inc))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3569 woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3570 value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3571 (WoMan-warn "Undefined register %s defaulted to 0."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3572 name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3573 0) ; default to zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3574 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3575 ((re-search-forward
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3576 ;; Delimiter can be special char escape \[xxx],
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3577 ;; \(xx or single normal char (usually '):
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3578 "\\=\\\\w\\(\\\\\\[[^]]+\\]\\|\\\\(..\\|.\\)" nil t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3579 (let ((from (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3580 (delim (regexp-quote (match-string 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3581 (if (re-search-forward delim nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3582 ;; Return width of string:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3583 (- (match-beginning 0) from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3584 (WoMan-warn "Width escape delimiter error!"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3585 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3586 (if (null n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3587 ;; ERROR -- should handle this better!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3588 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3589 (WoMan-warn "Numeric/register argument error: %s"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3590 (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3591 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3592 (save-excursion (end-of-line) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3593 (skip-syntax-forward "^ ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3594 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3595 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3596 ;; Check for scale factor:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3597 (if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3598 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3599 ((looking-at "\\s ") nil) ; stay put!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3600 ((looking-at "[mnuv]")) ; ignore for now
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3601 ((looking-at "i") (setq n (* n 10))) ; inch
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3602 ((looking-at "c") (setq n (* n 3.9))) ; cm
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3603 ((looking-at "P") (setq n (* n 1.7))) ; Pica
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3604 ((looking-at "p") (setq n (* n 0.14))) ; point
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3605 ;; NB: May be immediately followed by + or -, etc.,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3606 ;; in which case do nothing and return nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3607 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3608 (goto-char (match-end 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3609 (if (numberp n) (round n) n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3610 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3611
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3612
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3613 ;;; VERTICAL FORMATTING -- Formatting macros that cause a break:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3614
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3615 ;; Vertical spacing philosophy:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3616 ;; 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
3617 ;; vertical space only before text, as required.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3618
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3619 (defun woman2-roff-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3620 "Process breaks. Format paragraphs and headings."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3621 (let ((case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3622 (to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3623 (canonically-space-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3624 (symbol-function 'canonically-space-region))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3625 (insert-and-inherit (symbol-function 'insert-and-inherit))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3626 (set-text-properties (symbol-function 'set-text-properties))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3627 (woman-registers woman-registers)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3628 fn request translations
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3629 tab-stop-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3630 ;; ?roff does not squeeze multiple spaces, but does fill, so...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3631 (fset 'canonically-space-region 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3632 ;; Try to avoid spaces inheriting underlines from preceding text!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3633 (fset 'insert-and-inherit (symbol-function 'insert))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3634 (fset 'set-text-properties 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3635 (unwind-protect
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3636 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3637 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3638 (re-search-forward woman-request-regexp nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3639 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3640 ;; Construct woman function to call:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3641 ((setq fn (intern-soft
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3642 (concat "woman2-"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3643 (setq request (match-string 1)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3644 ;; Delete request or macro name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3645 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3646 ;; Unrecognised request:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3647 ((prog1 nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3648 ;; (WoMan-warn ".%s request ignored!" request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3649 (WoMan-warn-ignored request "ignored!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3650 ;; (setq fn 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3651 ;; AVOID LEAVING A BLANK LINE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3652 ;; (setq fn 'woman2-format-paragraphs)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3653 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3654 ;; .LP assumes it is at eol and leaves a (blank) line,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3655 ;; so leave point at end of line before paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3656 ((or (looking-at "[ \t]*$") ; no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3657 woman-ignore) ; ignore all
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3658 ;; (beginning-of-line) (kill-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3659 ;; AVOID LEAVING A BLANK LINE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3660 (beginning-of-line) (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3661 (t (end-of-line) (insert ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3662 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3663 (if (not (or fn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3664 (and (not (memq (following-char) '(?. ?')))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3665 (setq fn 'woman2-format-paragraphs))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3666 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3667 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3668 (set-marker to (woman-find-next-control-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3669 ;; Call the appropriate function:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3670 (funcall fn to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3671 (if (not (eobp)) ; This should not happen, but ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3672 (woman2-format-paragraphs (point-max-marker) woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3673 (fset 'canonically-space-region canonically-space-region)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3674 (fset 'set-text-properties set-text-properties)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3675 (fset 'insert-and-inherit insert-and-inherit)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3676 (set-marker to nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3677
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3678 (defun woman-find-next-control-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3679 "Find and return start of next control line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3680 ; (let ((to (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3681 ; (re-search-forward "^\\." nil t))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3682 ; (if to (1- to) (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3683 (let (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3684 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3685 ;; Must handle
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3686 ;; ...\c
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3687 ;; .br (and other requests?)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3688 ;; by deleting both the \c and the following request.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3689 ;; BEWARE THAT THIS CODE MAY BE UNRELIABLE!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3690 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3691 (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3692 (setq to (re-search-forward "\\(\\\\c\\)?\n[.']" nil t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3693 (match-string 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3694 (looking-at "br"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3695 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3696 (woman-delete-line 2)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3697 (if to (1- to) (point-max))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3698
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3699 (defun woman2-PD (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3700 ".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
3701 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
3702 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3703 ;; .ie \\n[.$] .nr PD (v;\\$1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3704 ;; .el .nr PD .4v>?\n[.V]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3705 (woman-set-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3706 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3707
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3708 (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
3709 "Set the interparagraph distance from a .PD request at point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3710 (setq woman-interparagraph-distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3711 (if (eolp) 1 (woman-get-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3712 ;; Should allow .PD 0 to set zero line spacing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3713 (woman-delete-line 1)) ; ignore remaining args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3714
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3715 (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
3716 "Set variable `woman-leave-blank-lines' from `woman-interparagraph-distance'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3717 ; (if (> woman-interparagraph-distance 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3718 ; (forward-line 1) ; leave 1 blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3719 ; (woman-delete-line 1)) ; do not leave blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3720 (setq woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3721 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3722
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3723 (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
3724 ".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
3725 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
3726 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
3727 \(Should set prevailing indent and tabs to 5.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3728 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3729 (insert ?\()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3730 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3731 (insert ?\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3732 (let ((start (point)) here)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3733 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3734 (cond ((looking-at "\"\"[ \t]")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3735 (delete-char 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3736 ;; (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3737 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3738 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3739 (setq here (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3740 (insert " -- ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3741 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3742 ;; Delete repeated arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3743 (if (string-match (buffer-substring here (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3744 (buffer-substring start here))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3745 (delete-region here (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3746 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3747 ;; Embolden heading (point is at end of heading):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3748 (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
3749 (save-excursion (beginning-of-line) (point)) (point) 'woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3750 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3751 (delete-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3752 (setq woman-left-margin woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3753 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3754 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3755
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3756 (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
3757 ".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
3758 Format paragraphs upto TO. Set prevailing indent to 5."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3759 (if (eolp) ; If no args then
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3760 (delete-char 1) ; apply to next line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3761 (woman-unquote-args) ; else unquote to end of heading
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3762 (beginning-of-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3763 (woman2-process-escapes-to-eol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3764 (woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3765 (setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3766 ;; Optionally embolden heading (point is at beginning of heading):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3767 (if woman-bold-headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3768 (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
3769 (point) (save-excursion (end-of-line) (point)) 'woman-bold))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3770 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3771 (setq woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3772 woman-nofill nil) ; fill output lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3773 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3774 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3775
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3776 (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
3777 ".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
3778 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3779 (if (eolp) ; If no args then
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3780 (delete-char 1)) ; apply to next line.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3781 (insert " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3782 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3783 (woman2-SH to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3784
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3785 (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
3786 ".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
3787 Leave 1 blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3788 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3789 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3790 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3791 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3792
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3793 (defalias 'woman2-PP 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3794 (defalias 'woman2-P 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3795
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3796 (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
3797 ".ns -- Turn on no-space mode. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3798 ;; Should not cause a break!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3799 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3800 (setq woman-nospace t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3801 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3802
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3803 (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
3804 ".rs -- Turn off no-space mode. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3805 ;; Should not cause a break!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3806 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3807 (setq woman-nospace nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3808 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3809
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3810 (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
3811 ".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
3812 (let ((N (if (eolp) 1 (woman-get-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3813 (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3814 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3815 (setq woman-negative-vertical-space t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3816 (insert ".sp ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3817 (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3818 (setq woman-leave-blank-lines N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3819 (woman2-format-paragraphs to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3820
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3821 (defun woman-negative-vertical-space (from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3822 ".sp N with N < 0 => overlap following with preceding lines at FROM."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3823 ;; Run by woman-decode-region if necessary -- not usually required.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3824 (WoMan-warn "Negative vertical spacing support is experimental!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3825 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3826 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3827 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3828 (re-search-forward "^\\.sp " nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3829 (let ((N (woman-get-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3830 overlap overwritten)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3831 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3832 (setq from (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3833 overlap (buffer-substring from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3834 (progn (forward-line (- N)) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3835 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3836 (forward-line N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3837 (let ((imax (length overlap))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3838 (i 0) c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3839 (while (< i imax)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3840 (setq c (aref overlap i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3841 (cond ((eq c ?\n) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3842 (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3843 ((eolp) ; extend line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3844 ;; Insert character INCLUDING TEXT PROPERTIES:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3845 ;; (insert (substring overlap i (1+ i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3846 (let ((eol (string-match "\n" overlap i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3847 (insert (substring overlap i eol))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3848 (setq i (or eol imax)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3849 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3850 ((eq c ?\ ) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3851 (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3852 ((eq c ?\t) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3853 (if (eq (following-char) ?\t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3854 (forward-char) ; both tabs, just skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3855 (let ((i woman-tab-width))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3856 (while (> i 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3857 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3858 (insert ?\ ) ; extend line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3859 (forward-char)) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3860 (setq i (1- i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3861 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3862 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3863 (if (or (eq (following-char) ?\ ) ; overwrite OK
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3864 overwritten) ; warning only once per ".sp -"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3865 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3866 (setq overwritten t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3867 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3868 "Character(s) overwritten by negative vertical spacing in line %d"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3869 (count-lines 1 (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3870 (delete-char 1) (insert (substring overlap i (1+ i)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3871 (setq i (1+ i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3872 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3873 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3874
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3875
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3876 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3877 ;; The following function should probably do ALL width and number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3878 ;; register interpolation.
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 (defun woman2-process-escapes (to &optional numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3882 "Process remaining escape sequences up to marker TO, preserving point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3883 Optional argument NUMERIC, if non-nil, means the argument is numeric."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3884 ;; The first two cases below could be merged (maybe)!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3885 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3886 ;; Discard zero width filler character used to hide leading dots
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3887 ;; and zero width characters \|, \^:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3888 (while (re-search-forward "\\\\[&|^]" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3889 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3890 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3891 ;; Interrupt text processing -- CONTINUE current text with the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3892 ;; next text line (after any control lines, unless processing to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3893 ;; eol):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3894 (while (re-search-forward "\\\\c.*\n?" 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 ;; but do not delete the final newline ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3897 (if (and (or (eobp) (= (point) to)) (not (bolp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3898 (insert-before-markers ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3899 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3900 (woman-translate to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3901 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3902 (woman-special-characters to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3903 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3904 ;; Printable version of the current escape character, ASSUMED to be `\'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3905 ;; This must be done LAST of all escape processing!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3906 ;; Done like this to preserve any text properties of the `\'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3907 (while (search-forward "\\" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3908 (let ((c (following-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3909 (cond ((eq c ?') ; \' -> '
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3910 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3911 (cond (numeric ; except in numeric args, \' -> `
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3912 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3913 (insert ?`))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3914 ((eq c ?\( )) ; uninterpreted special character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3915 ; \(.. -- do nothing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3916 ((eq c ?t) ; non-interpreted tab \t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3917 (delete-char 1)
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 "\t"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3920 ((and numeric
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3921 (memq c '(?w ?n ?h)))) ; leave \w, \n, \h (?????)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3922 ((eq c ?l) (woman-horizontal-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3923 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3924 ;; \? -> ? where ? is any remaining character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3925 (WoMan-warn "Escape ignored: \\%c -> %c" c c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3926 (delete-char -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3927 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3928 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3929 ;; Process non-default tab settings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3930 (cond (tab-stop-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3931 (while (search-forward "\t" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3932 (woman-tab-to-tab-stop))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3933 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3934
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3935 ;; Must replace \' by something before processing \w, done above.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3936
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3937 ;; Replace all `\w' and `\n' escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3938 ;; (This may be a bit too recursive!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3939 (while (re-search-forward "\\\\[nw]" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3940 (let ((from (match-beginning 0)) N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3941 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3942 (setq N (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3943 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3944 ;; Interpolate value:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3945 (insert-before-markers (number-to-string N))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3946 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3947
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3948 (defun woman-horizontal-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3949 "\\l'Nc' -- Draw a horizontal line of length N using character c, default _."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3950 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3951 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3952 (looking-at "\\(.\\)\\(.*\\)\\1")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3953 (let ((to (make-marker)) from N c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3954 (set-marker to (match-end 2))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3955 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3956 (setq from (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3957 N (woman-parse-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3958 (setq c (if (< (point) to) (following-char) ?_))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3959 (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3960 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3961 (set-marker to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3962 (insert (make-string N c))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3963 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3964
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3965 ;;; 4. Text Filling, Adjusting, and Centering
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3966
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3967 (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
3968 ".br -- Break. Leave no blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3969 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3970 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3971
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3972 (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
3973 ".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
3974 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3975 (setq woman-nofill nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3976 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3977 ;; Preserve any final blank line in the nofill region:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3978 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3979 (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3980 (if (looking-at "[ \t]*$") (setq woman-leave-blank-lines 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3981 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3982
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3983 (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
3984 ".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
3985 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
3986 for the current line length. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3987 (setq woman-nofill t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3988 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3989 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3990
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3991 (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
3992 ".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
3993 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
3994 Format paragraphs upto TO. (Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3995 ;; c = l -- left, r -- right, c -- center, b or n -- both,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3996 ;; absent -- unchanged. Initial mode adj,both.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3997 (setq woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3998 (cond ((eolp) woman-adjust-previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3999 ((eq (following-char) ?l) woman-adjust-left)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4000 ((eq (following-char) ?r) woman-adjust-right)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4001 ((eq (following-char) ?c) woman-adjust-center)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4002 ((memq (following-char) '(?b ?n)) woman-adjust-both)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4003 (t (woman-get-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4004 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4005 woman-justify (nth woman-adjust woman-justify-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4006 (woman-delete-line 1) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4007 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4008
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4009 (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
4010 ".na -- No adjusting. Format paragraphs upto TO.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4011 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4012 (setq woman-adjust-previous woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4013 woman-justify-previous woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4014 woman-adjust woman-adjust-left ; fill but do not adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4015 woman-justify (nth woman-adjust woman-justify-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4016 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4017 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4018
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4019 ;;; The main formatting functions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4020
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4021 (defun woman-leave-blank-lines (&optional leave)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4022 "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
4023 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
4024 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
4025 non-nil and non-zero."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4026 ;; ***** It may suffice to delete only lines ABOVE point! *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4027 ;; NOTE: Function arguments are evaluated left to right
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4028 ;; (*note (elisp)Function Forms::.).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4029 (delete-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4030 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4031 (if (not (eq (skip-syntax-backward " ") 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4032 (forward-line)) ; forward-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4033 (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4034 (progn (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4035 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4036 (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4037 (if woman-nospace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4038 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4039 (if (or (null leave) (eq leave 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4040 ;; output any `pending' vertical space ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4041 (setq leave woman-leave-blank-lines))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4042 (if (and leave (> leave 0)) (insert-before-markers ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4043 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4044 (setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4045 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4046
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4047 ;; `fill-region-as-paragraph' in `fill.el' appears to be the principal
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4048 ;; text filling function, so that is what I use here.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4049
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4050 (defvar woman-temp-indent 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 (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
4053 "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
4054 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
4055 If `woman-nofill' is non-nil then indent without filling or adjusting."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4056 ;; Blank space should only ever be output before text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4057 (if new-left (setq left-margin new-left))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4058 (if (looking-at "^\\s *$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4059 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4060 (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4061 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4062 ;; Successive control lines are sufficiently common to be worth a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4063 ;; special case (maybe):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4064 (if (>= (point) to) ; >= as a precaution!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4065 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4066 ;; (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4067 (woman-reset-nospace)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4068 ;; (woman2-process-escapes to) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4069 (woman2-process-escapes to 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4070 (if woman-nofill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4071 ;; Indent without filling or adjusting ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4072 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4073 (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4074 (cond (woman-temp-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4075 (indent-to woman-temp-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4076 (forward-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4077 (indent-rigidly (point) to left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4078 (woman-horizontal-escapes to)) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4079 ;; Fill and justify ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4080 ;; Blank lines and initial spaces cause a break.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4081 ; (cond ((and (= (point) to) (not (looking-at ".nf"))) ; Yuk!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4082 ; ;; No text after a request that caused a break, so delete
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4083 ; ;; any spurious blank line left:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4084 ; (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4085 ; (if (looking-at "^\\s *$") (kill-line) (forward-line))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4086 (while (< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4087 (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4088 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4089 ;; Indent first lin of paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4090 (indent-to (or woman-temp-indent left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4091 (woman-horizontal-escapes to) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4092 ;; Find the beginning of the next paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4093 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4094 ; (if (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4095 ; ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4096 ; (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4097 ; (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4098 ; (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4099 ; (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4100 ; (setq woman-leave-blank-lines nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4101 (and (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4102 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4103 (eolp)
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 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4107 ;; If a single short line then just leave it.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4108 ;; This is necessary to preserve some table layouts.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4109 ;; PROBABLY NOT NECESSARY WITH SQUEEZE MODIFICATION !!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4110 (if (or (> (count-lines from (point)) 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4111 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4112 (backward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4113 (> (current-column) fill-column)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4114 ;; ?roff does not squeeze multiple spaces
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4115 ;; (fill-region-as-paragraph from (point) woman-justify t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4116 ;; NOSQUEEZE has no effect if JUSTIFY is full, so
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4117 ;; redefine canonically-space-region, see above.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4118 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4119 ;; Needs a re-write of the paragraph formatter to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4120 ;; avoid this nonsense to handle temporary indents!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4121 (if (and woman-temp-indent (< woman-temp-indent left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4122 (let ((left-margin woman-temp-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4123 (fill-region-as-paragraph from (point) woman-justify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4124 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4125 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4126 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4127 (setq from (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4128 (fill-region-as-paragraph from (point) woman-justify))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4129 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4130 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4131 ;; Delete all but 1 trailing blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4132 ;;(woman-leave-blank-lines 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4133 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4134 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4135 (setq woman-temp-indent nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4136 ;; Non-white-space text has been processed, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4137 ;;(setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4138 ))
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 ;;; Tagged, indented and hanging paragraphs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4142
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4143 (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
4144 ".TP i -- Set prevailing indent to i. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4145 Begin indented paragraph with hanging tag given by next text line.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4146 If tag doesn't fit, place it on a separate line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4147 (let ((i (woman2-get-prevailing-indent)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4148 (woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4149 (woman2-tagged-paragraph to i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4150
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4151 (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
4152 ".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
4153 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4154 (if (eolp) ; no args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4155 ;; Like LP without resetting prevailing indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4156 (woman2-format-paragraphs to (+ woman-left-margin
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4157 woman-prevailing-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4158 (woman-forward-arg 'unquote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4159 (let ((i (woman2-get-prevailing-indent 'leave-eol)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4160 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4161 (woman-leave-blank-lines) ; must be here,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4162 (woman2-tagged-paragraph to i))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4163
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4164 (defun woman-find-next-control-line-carefully ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4165 "Find and return start of next control line, even if already there!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4166 (if (looking-at "^[.']")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4167 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4168 (woman-find-next-control-line)))
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 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
4171 "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
4172 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
4173 Format paragraphs upto TO. Set prevailing indent to I."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4174 (if (not (looking-at "\\s *$")) ; non-empty tag
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4175 (setq woman-leave-blank-lines nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4176
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4177 ;; Temporary hack for bash.1 and groff_mmse.7 until code is revised
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4178 ;; to process all requests uniformly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4179 (cond ((and (= (point) to) (looking-at "^[.'][ \t]*\\(PD\\|br\\|ta\\) *"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4180 (if (string= (match-string 1) "br")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4181 (woman-delete-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4182 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4183 (if (string= (match-string 1) "ta") ; for GetInt.3
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4184 (woman2-ta to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4185 (woman-set-interparagraph-distance)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4186 (set-marker to (woman-find-next-control-line-carefully))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4187 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4188
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4189 (let ((tag (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4190 (woman-reset-nospace)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4191 ;; Format the tag:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4192 (woman2-process-escapes-to-eol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4193 ;; TIDY UP THE FOLLOWING CODE
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4194 ;; (indent-to woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4195 (setq left-margin woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4196 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4197 (fill-region-as-paragraph (save-excursion (forward-line -1) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4198 (point) woman-justify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4199
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4200 ;; Temporary hack for bash.1 until all requests processed uniformly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4201 (cond ((and (= (point) to) (looking-at "^[.'][ \t]*PD *"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4202 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4203 (woman-set-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4204 (set-marker to (woman-find-next-control-line-carefully))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4205 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4206
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4207 ;; Format the paragraph body, if there is one! Set indented left
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4208 ;; margin anyway, because the paragraph body may begin with a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4209 ;; control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4210 (setq left-margin (+ woman-left-margin i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4211 (cond ((< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4212 (woman2-format-paragraphs to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4213 (goto-char tag) (end-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4214 (cond ((> (setq i (- left-margin (current-column))) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4215 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4216 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4217 ;; Necessary to avoid spaces inheriting underlines.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4218 ;; Cannot simply delete (current-column) whitespace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4219 ;; characters because some may be tabs!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4220 (while (> i 0) (insert ? ) (setq i (1- i)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4221 (goto-char to) ; necessary ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4222 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4223 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4224
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4225 (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
4226 ".HP i -- Set prevailing indent to i. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4227 Begin paragraph with hanging indent."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4228 (let ((i (woman2-get-prevailing-indent)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4229 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4230 (setq woman-temp-indent woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4231 (woman2-format-paragraphs to (+ woman-left-margin i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4232 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4233
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4234 (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
4235 "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
4236 If no argument then return the existing prevailing indent.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4237 Delete line from point and eol unless LEAVE-EOL is non-nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4238 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4239 (or leave-eol (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4240 (let ((i (woman-get-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4241 (woman-delete-line) (or leave-eol (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4242 ;; i = 0 if the argument was not a number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4243 (if (> i 0) (setq woman-prevailing-indent i))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4244 woman-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4245
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4246 (defmacro woman-push (value stack)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4247 "Push VALUE onto STACK."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4248 `(setq ,stack (cons ,value ,stack)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4249
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4250 (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
4251 "Pop into VARIABLE the value at the top of STACK.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4252 Allow for mismatched requests!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4253 `(if ,stack
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4254 (setq ,variable (car ,stack)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4255 ,stack (cdr ,stack))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4256
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4257 (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
4258 ".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
4259 Set prevailing indent to 5 for nested indents. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4260 (woman-push woman-left-margin woman-RS-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4261 (woman-push woman-prevailing-indent woman-RS-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4262 (setq woman-left-margin (+ woman-left-margin
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4263 (woman2-get-prevailing-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4264 woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4265 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4266
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4267 (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
4268 ".RE -- End of relative indent. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4269 Set prevailing indent to amount of starting .RS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4270 (woman-pop woman-left-margin woman-RS-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4271 (woman-pop woman-prevailing-indent woman-RS-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4272 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4273 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4274
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4275
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4276 ;;; Line Length and Indenting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4277
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4278 (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
4279 "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
4280 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
4281 otherwise set PREVIOUS. Delete the whole remaining control line."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4282 (if (eolp) ; space already skipped
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4283 (set arg (if previous (eval previous) 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4284 (if previous (set previous (eval arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4285 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4286 (let ((pm (if (looking-at "[+-]")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4287 (prog1 (following-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4288 (forward-char 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4289 (i (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4290 (cond ((null pm) (set arg i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4291 ((= pm ?+) (set arg (+ (eval arg) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4292 ((= pm ?-) (set arg (- (eval arg) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4293 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4294 (beginning-of-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4295 (woman-delete-line 1)) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4296
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4297 ;; NEED TO RATIONALIZE NAMES FOR PREVIOUS VALUES!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4298 (defvar woman-ll-fill-column woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4299 (defvar woman-in-left-margin woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4300
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4301 (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
4302 ".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
4303 Format paragraphs upto TO. (Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4304 (woman-set-arg 'fill-column 'woman-ll-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4305 (woman2-format-paragraphs to))
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-in (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4308 ".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
4309 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4310 (woman-set-arg 'left-margin 'woman-in-left-margin)
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-ti (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4314 ".ti +/-N -- Temporary indent. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4315 ;; Ignore if no argument.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4316 ;; Indent next output line only wrt current indent.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4317 ;; Current indent is not changed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4318 (setq woman-temp-indent left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4319 (woman-set-arg 'woman-temp-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4320 (woman2-format-paragraphs to nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4321
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4322
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4323 ;;; Tabs, Leaders, and Fields:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4324
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4325 (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
4326 ".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
4327 \(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
4328 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
4329 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4330 (setq tab-stop-list nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4331 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4332 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4333 (let ((tab-stop 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4334 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4335 (let ((plus (cond ((eq (following-char) ?+) (forward-char 1) t)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4336 (i (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4337 (setq tab-stop (if plus (+ tab-stop i) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4338 (if (memq (following-char) '(?R ?C))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4339 (setq tab-stop (cons tab-stop (following-char))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4340 (setq tab-stop-list (cons tab-stop tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4341 (skip-syntax-forward "^ ") ; skip following R, C, `;', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4342 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4343 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4344 (woman-delete-line 1) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4345 (setq tab-stop-list (reverse tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4346 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4347
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4348 (defsubst woman-get-tab-stop (tab-stop-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4349 "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
4350 (if (consp tab-stop-list) (car tab-stop-list) tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4351
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4352 (defun woman-tab-to-tab-stop ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4353 "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
4354 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
4355 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
4356 ;; Based on tab-to-tab-stop in indent.el.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4357 ;; R & C tabs probably not quite right!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4358 (delete-backward-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4359 (let ((tabs tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4360 (while (and tabs (>= (current-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4361 (woman-get-tab-stop (car tabs))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4362 (setq tabs (cdr tabs)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4363 (if tabs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4364 (let* ((tab (car tabs))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4365 (type (and (consp tab) (cdr tab)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4366 eol n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4367 (if type
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4368 (setq tab (woman-get-tab-stop tab)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4369 eol (save-excursion (end-of-line) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4370 n (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4371 (search-forward "\t" eol t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4372 n (- (if n (1- n) eol) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4373 tab (- tab (if (eq type ?C) (/ n 2) n))) )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4374 (setq n (- tab (current-column)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4375 (while (> n 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4376 (insert ?\ )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4377 (setq n (1- n))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4378 (insert ?\ ))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4379
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4380 (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
4381 ".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
4382 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4383 ;; Currently just terminates special tab processing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4384 (setq tab-stop-list nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4385 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4386 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4387
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4388 (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
4389 ".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
4390 Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4391 A VERY FIRST ATTEMPT to make fields at least readable!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4392 Needs doing properly!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4393 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4394 (woman-delete-whole-line) ; ignore!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4395 (let ((delim (following-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4396 (pad ?\ ) end) ; pad defaults to space
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4397 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4398 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4399 (or (eolp) (setq pad (following-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4400 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4401 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4402 (if (re-search-forward "^[.'][ \t]*fc\\s " nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4403 (setq end (match-beginning 0))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4404 ;; A field is contained between a pair of field delimiter
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4405 ;; characters and consists of sub-strings separated by padding
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4406 ;; indicator characters:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4407 (setq delim (string delim ?[ ?^ delim ?] ?* delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4408 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4409 (while (re-search-forward delim end t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4410 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4411 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4412 (insert woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4413 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4414 (delete-backward-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4415 (insert-before-markers woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4416 (subst-char-in-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4417 (match-beginning 0) (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4418 pad woman-unpadded-space-char t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4419 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4420 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4421 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4422
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4423
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4424 ;;; Preliminary table support (.TS/.TE)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4425
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4426 (defun woman2-TS (to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4427 ".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
4428 Format paragraphs upto TO."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4429 ;; 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
4430 (woman-delete-line 1) ; ignore any arguments
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4431 (when woman-emulate-tbl
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4432 ;; 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
4433 ;; 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
4434 ;; a semicolon. Currently, just delete it:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4435 (if (looking-at ".*;[ \t]*$") (woman-delete-line 1)) ;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4436 ;; 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
4437 ;; 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
4438 (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
4439 (woman-delete-line 1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4440 ;; 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
4441 (let ((start (point)) (col 1))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4442 (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
4443 ;; Find current column width:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4444 (while (< (point) to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4445 (when (search-forward "\t" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4446 (backward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4447 (if (> (current-column) col) (setq col (current-column))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4448 (forward-line))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4449 ;; Align current column:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4450 (goto-char start)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4451 (setq col (+ col 3)) ; intercolumn space
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4452 (while (< (point) to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4453 (when (search-forward "\t" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4454 (delete-char -1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4455 (insert-char ?\ (- col (current-column))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4456 (forward-line))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4457 (goto-char start))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4458 ;; 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
4459 (setq woman-nofill t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4460 (woman2-format-paragraphs to))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4461
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4462 (defalias 'woman2-TE 'woman2-fi)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4463 ;; ".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
4464 ;; Turn filling and adjusting back on.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4465
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4466
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4467 ;;; WoMan message logging:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4468
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4469 ;; 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
4470 ;; by Jamie Zawinski <jwz@lucid.com> & Hallvard Furuseth <hbf@ulrik.uio.no>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4471
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4472 (defvar WoMan-current-file nil) ; bound in woman-really-find-file
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4473 (defvar WoMan-Log-header-point-max nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4474
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4475 (defun WoMan-log-begin ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4476 "Log the beginning of formatting in *WoMan-Log*."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4477 (let ((WoMan-current-buffer (buffer-name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4478 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4479 (set-buffer (get-buffer-create "*WoMan-Log*"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4480 (or (eq major-mode 'view-mode) (view-mode 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4481 (setq buffer-read-only nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4482 (goto-char (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4483 (insert "\n\^L\nFormatting "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4484 (if (stringp WoMan-current-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4485 (concat "file " WoMan-current-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4486 (concat "buffer " WoMan-current-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4487 " at " (current-time-string) "\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4488 (setq WoMan-Log-header-point-max (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4489 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4490
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4491 (defun WoMan-log (format &rest args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4492 "Log a message out of FORMAT control string and optional ARGS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4493 (WoMan-log-1 (apply 'format format args)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4494
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4495 (defun WoMan-warn (format &rest args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4496 "Log a warning message out of FORMAT control string and optional ARGS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4497 (setq format (apply 'format format args))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4498 (WoMan-log-1 (concat "** " format)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4499
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4500 (defun WoMan-warn-ignored (request ignored)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4501 "Log a warning message about ignored directive REQUEST.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4502 IGNORED is a string appended to the log message."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4503 (let ((tail
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4504 (buffer-substring (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4505 (save-excursion (end-of-line) (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4506 (if (and (> (length tail) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4507 (/= (string-to-char tail) ?\ ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4508 (setq tail (concat " " tail)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4509 (WoMan-log-1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4510 (concat "** " request tail " request " ignored))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4511
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4512 (defun WoMan-log-end (time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4513 "Log the end of formatting in *WoMan-Log*.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4514 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
4515 with the message."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4516 (WoMan-log-1 (format "Formatting time %d seconds." time) 'end))
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-1 (string &optional end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4519 "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
4520 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
4521 logging the message."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4522 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4523 (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
4524 (setq buffer-read-only nil)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4525 (goto-char (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4526 (or end (insert " ")) (insert string "\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4527 (if end
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4528 (setq buffer-read-only t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4529 (if woman-show-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4530 (select-window ; to return to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4531 (prog1 (selected-window) ; WoMan window
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4532 (select-window (display-buffer (current-buffer)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4533 (cond (WoMan-Log-header-point-max
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4534 (goto-char WoMan-Log-header-point-max)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4535 (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4536 (recenter 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4537 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4538 nil) ; for woman-file-readable-p etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4539
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4540 (provide 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4541
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 50404
diff changeset
4542 ;;; arch-tag: eea35e90-552f-4712-a94b-d9ffd3db7651
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4543 ;;; woman.el ends here