annotate lisp/woman.el @ 76022:e892213b9815

(w32_set_scroll_bar_thumb): Don't resize scroll-bar handle while dragging, except when we get close to eob. Fix position and size calculations so we don't scroll backwards just by clicking on the handle.
author Kim F. Storm <storm@cua.dk>
date Mon, 19 Feb 2007 14:45:39 +0000
parents e3694f1cb928
children 00517eb235fd 95d0cdf160ea
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
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 73374
diff changeset
3 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005,
75347
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 75076
diff changeset
4 ;; 2006, 2007 Free Software Foundation, Inc.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
5
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
6 ;; 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
7 ;; Maintainer: FSF
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
8 ;; Keywords: help, unix
56256
72d8528b9070 Update Eli's email address.
Eli Zaretskii <eliz@gnu.org>
parents: 55895
diff changeset
9 ;; 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
10 ;; Version: see `woman-version'
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
11 ;; URL: http://centaur.maths.qmul.ac.uk/Emacs/WoMan/
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
12
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
13 ;; This file is part of GNU Emacs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
14
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is free software; you can redistribute it and/or modify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
16 ;; it under the terms of the GNU General Public License as published by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
17 ;; the Free Software Foundation; either version 2, or (at your option)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
18 ;; any later version.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
19
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
20 ;; GNU Emacs is distributed in the hope that it will be useful,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
23 ;; GNU General Public License for more details.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
24
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
25 ;; You should have received a copy of the GNU General Public License
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
26 ;; 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
27 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63509
diff changeset
28 ;; Boston, MA 02110-1301, USA.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
29
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
30 ;;; Commentary:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
31
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
32 ;; WoMan implements a subset of the formatting performed by the Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
33 ;; `man' (or `manual-entry') command to format a UN*X manual `page'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
34 ;; for display, but without calling any external programs. It is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
35 ;; intended to emulate the whole of the -man macro package, plus those
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
36 ;; ?roff requests that are most commonly used in man pages. However,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
37 ;; the emulation is modified to include the reformatting done by the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
38 ;; Emacs `man' command. No hyphenation is performed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
39
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
40 ;; Advantages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
41
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
42 ;; Much more direct, does not require any external programs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
43 ;; Supports completion on man page names.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
44
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
45 ;; Disadvantages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
46
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
47 ;; Not a complete emulation. Currently no support for eqn or tbl.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
48 ;; Slightly slower for large man pages (but usually faster for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
49 ;; small- and medium-size pages).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
50
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
51 ;; This browser works quite well on simple well-written man files. It
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
52 ;; works less well on idiosyncratic files that `break the rules' or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
53 ;; use the more obscure ?roff requests directly. Current test results
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
54 ;; are available in the file woman.status.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
55
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
56 ;; WoMan supports the use of compressed man files via
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
57 ;; `auto-compression-mode' by turning it on if necessary. But you may
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
58 ;; need to adjust the user option `woman-file-compression-regexp'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
59
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
60 ;; Read on for (currently) the only documentation for WoMan!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
61
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
62 ;; See also the documentation for the WoMan interactive commands and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
63 ;; user option variables, all of which begin with the prefix `woman-'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
64 ;; This can be done most easily by loading WoMan and then running the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
65 ;; command `woman-mini-help', or selecting the WoMan menu option `Mini
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
66 ;; Help' when WoMan is running.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
67
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
68 ;; WoMan is still under development! Please let me know what doesn't
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
69 ;; work -- I am adding and improving functionality as testing shows
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
70 ;; that it is necessary. See below for guidance on reporting bugs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
71
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
72 ;; Recommended use
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
73 ;; ===============
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
74
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
75 ;; Put this in your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
76 ;; (autoload 'woman "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
77 ;; "Decode and browse a UN*X man page." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
78 ;; (autoload 'woman-find-file "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
79 ;; "Find, decode and browse a specific UN*X man-page file." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
80
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
81 ;; Then either (1 -- *RECOMMENDED*): If the `MANPATH' environment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
82 ;; variable is set then WoMan will use it; otherwise you may need to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
83 ;; reset the Lisp variable `woman-manpath', and you may also want to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
84 ;; set the Lisp variable `woman-path'. Please see the online
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
85 ;; documentation for these variables. Now you can execute the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
86 ;; extended command `woman', enter or select a manual entry topic,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
87 ;; using completion, and if necessary select a filename, using
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
88 ;; completion. By default, WoMan suggests the word nearest to the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
89 ;; cursor in the current buffer as the topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
90
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
91 ;; Or (2): Execute the extended command `woman-find-file' and enter a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
92 ;; filename, using completion. This mode of execution may be useful
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
93 ;; for temporary files outside the standard UN*X manual directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
94 ;; structure.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
95
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
96 ;; Or (3): Put the next two sexpr's in your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
97 ;; (autoload 'woman-dired-find-file "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
98 ;; "In dired, run the WoMan man-page browser on this file." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
99 ;; (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
100 ;; (lambda ()
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
101 ;; (define-key dired-mode-map "W" 'woman-dired-find-file)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
102 ;; and open the directory containing the man page file using dired,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
103 ;; put the cursor on the file, and press `W'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
104
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
105 ;; In each case, the result should (!) be a buffer in Man mode showing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
106 ;; a formatted manual entry. When called from WoMan, Man mode should
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
107 ;; work as advertised, but modified where necessary in the context of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
108 ;; WoMan. (However, `Man' will still invoke the standard Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
109 ;; manual-browsing facility rather than `WoMan' -- this is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
110 ;; intentional!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
111
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
112 ;; (By default, WoMan will automatically define the dired keys "W" and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
113 ;; "w" when it loads, but only if they are not already defined. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
114 ;; behaviour is controlled by the user option `woman-dired-keys'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
115 ;; Note that the `dired-x' (dired extra) package binds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
116 ;; `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
117 ;; Davidson), although "W" appears to be really unused. The `dired-x'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
118 ;; package will over-write the WoMan binding to "w", whereas (by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
119 ;; default) WoMan will not overwrite the `dired-x' binding.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
120
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
121 ;; The following is based on suggestions by Guy Gascoigne-Piggford and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
122 ;; Juanma Barranquero. If you really want to square the man-woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
123 ;; circle then you might care to define the following bash function in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
124 ;; .bashrc:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
125
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
126 ;; man() { gnudoit -q '(raise-frame (selected-frame)) (woman' \"$1\" ')' ; }
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
127
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
128 ;; If you use Microsoft COMMAND.COM then you can create a file called
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
129 ;; man.bat somewhere in your path containing the two lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
130
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
131 ;; @echo off
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
132 ;; gnudoit -q (raise-frame (selected-frame)) (woman \"%1\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
133
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
134 ;; 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
135 ;; Start menu) just execute
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
136
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
137 ;; man man_page_name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
138
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
139
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
140 ;; 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
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
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
143 ;; 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
144 ;; 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
145 ;; 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
146 ;; 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
147 ;; `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
148 ;; 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
149
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
150 ;; 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
151 ;; which may be useful to provide special private key bindings, e.g.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
152
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
153 ;; (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
154 ;; (lambda ()
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
155 ;; (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
156 ;; (let ((woman-use-topic-at-point t))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
157 ;; (woman)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
158
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
159
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
160 ;; Customization, Hooks and Imenu
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
161 ;; ==============================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
162
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
163 ;; WoMan supports the GNU Emacs 20+ customization facility, and puts
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
164 ;; a customization group called `WoMan' in the `Help' group under the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
165 ;; top-level `Emacs' group. In order to be able to customize WoMan
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
166 ;; without first loading it, add the following sexp to your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
167
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
168 ;; (defgroup woman nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
169 ;; "Browse UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
170 ;; :tag "WoMan" :group 'help :load "woman")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
171
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
172
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
173 ;; WoMan currently runs two hooks: `woman-pre-format-hook' immediately
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
174 ;; before formatting a buffer and `woman-post-format-hook' immediately
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
175 ;; after formatting a buffer. These hooks can be used for special
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
176 ;; customizations that require code to be executed, etc., although
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
177 ;; most customization should be possible by setting WoMan user option
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
178 ;; variables, e.g. in `.emacs' and should NOT require the use of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
179 ;; hooks. `woman-pre-format-hook' might be appropriate for face
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
180 ;; customization, whereas `woman-post-format-hook' might be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
181 ;; appropriate for installing a dynamic menu using `imenu' (although
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
182 ;; it is better to use the built-in WoMan imenu support).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
183
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
184 ;; The WoMan menu provides an option to make a contents menu for the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
185 ;; current man page (using imenu). Alternatively, if you set the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
186 ;; variable `woman-imenu' to `t' then WoMan will do it automatically
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
187 ;; for every man page. The menu title is the value of the variable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
188 ;; `woman-imenu-title', which is "CONTENTS" by default. By default,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
189 ;; the menu shows manual sections and subsections, but you can change
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
190 ;; this by changing the value of `woman-imenu-generic-expression'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
191 ;; This facility is not yet widely tested and may be fooled by obscure
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
192 ;; man pages that `break the rules'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
193
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
194 ;; WoMan is configured not to replace spaces in an imenu *Completion*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
195 ;; buffer. For further documentation of the use of imenu, such as
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
196 ;; menu sorting, see the source file imenu.el, which is distributed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
197 ;; with GNU Emacs.
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
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
201 ;; Howard Melman made (essentially) the following suggestions, which
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
202 ;; are slightly different from the expression that I currently use.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
203 ;; You may prefer one of Howard's suggestions, which I think assume
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
204 ;; that `case-fold-search' is `t' (which it is by default):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
205
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
206 ;; (setq woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
207 ;; '((nil "^\\( \\)?\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 2)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
208
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
209 ;; 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
210 ;; name hierarchy. If you just want .SH in the imenu then use:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
211
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
212 ;; (setq woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
213 ;; '((nil "^\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 1)))
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
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
218 ;; Vertical spacing and blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
219 ;; ================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
220
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
221 ;; The number of consecutive blank lines in the formatted buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
222 ;; 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
223 ;; .sp 1 (p. 14). Current policy is to output vertical space only
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
224 ;; immediately before text is output.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
225
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
226
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
227 ;; Horizontal and vertical spacing and resolution
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
228 ;; ==============================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
229
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
230 ;; WoMan currently assumes 10 characters per inch horizontally, hence
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
231 ;; a horizontal resolution of 24 basic units, and 5 lines per inch
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
232 ;; vertically, hence a vertical resolution of 48 basic units. (nroff
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
233 ;; uses 240 per inch).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
234
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
235
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
236 ;; The *WoMan-Log* buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
237 ;; ======================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
238
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
239 ;; This is modelled on the byte-compiler. It logs all files formatted
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
240 ;; by WoMan, and if WoMan finds anything that it cannot handle then it
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
241 ;; writes a warning to this buffer. If the variable `woman-show-log'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
242 ;; is non-nil (by default it is `nil') then WoMan automatically
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
243 ;; displays this buffer. Many WoMan warnings can be completely
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
244 ;; ignored, because they are reporting the fact that WoMan has ignored
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
245 ;; requests that it is correct to ignore. In some future version this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
246 ;; level of paranoia will be reduced, but not until WoMan is more
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
247 ;; reliable. At present, all warnings should be treated with some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
248 ;; suspicion. Uninterpreted escape sequences are also logged (in some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
249 ;; cases).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
250
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
251 ;; Uninterpreted ?roff requests can optionally be left in the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
252 ;; formatted buffer to indicate precisely where they occur by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
253 ;; resetting the variable `woman-ignore' to `nil' (by default it is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
254 ;; `t').
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
255
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
256 ;; Automatic initiation of woman decoding
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
257
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
258 ;; (Probably not a good idea. If you use it, be careful!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
259
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
260 ;; Put something like this in your .emacs. The call to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
261 ;; set-visited-file-name is to avoid font-locking triggered by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
262 ;; automatic major mode selection.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
263
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
264 ;; (autoload 'woman-decode-region "woman")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
265
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
266 ;; (setq format-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
267 ;; (cons
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
268 ;; '(man "UN*X man-page source format" "\\.\\(TH\\|ig\\) "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
269 ;; 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
270 ;; (lambda (arg)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
271 ;; 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
272 ;; (file-name-sans-extension buffer-file-name)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
273 ;; format-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
274
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
275
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
276 ;; Reporting Bugs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
277 ;; ==============
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
278
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
279 ;; If WoMan fails completely, or formats a file incorrectly
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
280 ;; (i.e. obviously wrongly or significantly differently from man) or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
281 ;; inelegantly, then please
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
282
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
283 ;; (a) check that you are running the latest version of woman.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
284 ;; available from my web site (see above),
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
285
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
286 ;; (b) check that the problem is not already described in the file
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
287 ;; woman.status, also available from my web site.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
288
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
289 ;; 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
290 ;; the *WoMan-Log* buffer relating to the problem file, together with
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
291 ;; a brief description of the problem. Please indicate where you got
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
292 ;; 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
293 ;; Thanks. (There is at present no automated bug-reporting facility
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
294 ;; for WoMan.)
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
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
298 ;; NOTE:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
299
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
300 ;; CASE-DEPENDENCE OF FILENAMES. By default, WoMan ignores case in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
301 ;; file pathnames only when it seems appropriate. MS-Windows users
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
302 ;; who want complete case independence should set the NTEmacs variable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
303 ;; `w32-downcase-file-names' to `t' and use all lower case when
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
304 ;; setting WoMan file paths.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
305
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
306 ;; (1) INCOMPATIBLE CHANGE! WoMan no longer uses a persistent topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
307 ;; cache by default. (It caused too much confusion!) Explicitly set
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
308 ;; the variable `woman-cache-filename' to save the cache between Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
309 ;; sessions. This is recommended only if the command `woman' is too
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
310 ;; 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
311 ;; builds its cache in main memory, which MAY be VERY slow.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
312
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
313 ;; (2) The user option `woman-cache-level' controls the amount of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
314 ;; information cached (in main memory and, optionally, saved to disc).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
315
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
316 ;; (3) UPDATING THE CACHE. A prefix argument always causes the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
317 ;; `woman' command (only) to rebuild its topic cache, and to re-save
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
318 ;; it to `woman-cache-filename' if this variable has a non-nil value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
319 ;; This is necessary if the NAMES (not contents) of any of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
320 ;; directories or files in the paths specified by `woman-manpath' or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
321 ;; `woman-path' change. If WoMan user options that affect the cache
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
322 ;; are changed then WoMan will automatically update its cache file on
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
323 ;; 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
324 ;; session.
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
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
329 ;; TO DO
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
330 ;; =====
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
331
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
332 ;; Reconsider case sensitivity of file names.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
333 ;; MUST PROCESS .if, .nr IN ORDER ENCOUNTERED IN FILE! (rcsfile, mf).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
334 ;; Allow general delimiter in `\v', cf. `\h'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
335 ;; Improve major-mode documentation.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
336 ;; 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
337 ;; 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
338 ;; Emulate some preprocessor support for eqn (.EQ/.EN)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
339 ;; Re-write filling and adjusting code!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
340 ;; Allow word wrap at comma (for long option lists)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
341 ;; Buffer list handling not quite right.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
342 ;; Make 10 or 12 pitch (cpi) optional -- 12 => ll = 78
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
343 ;; Use unpaddable space for tabbing?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
344 ;; Tidy up handling of fonts when filling and adjusting
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
345 ;; -- see text/text properties?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
346 ;; Improve speed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
347 ;; Add font-lock support (for quoted strings, etc.)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
348 ;; Optionally save large files in enriched format?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
349 ;; Add apropos facility by searching NAME (?) entry in man files?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
350 ;; Documentation -- optional auto-display of formatted WoMan man page?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
351 ;; Implement a bug reporter?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
352 ;; Support diversion and traps (to some extent) - for Tcl/tk pages?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
353 ;; 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
354 ;; Fix .fc properly?
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
355
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
356
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
357 ;; Implementation strategy [this description is now well out of date!]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
358 ;; -- three main passes, each to process respectively:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
359
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
360 ;; 1) non-breaking `.' requests including font macros
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
361 ;; 2) \ escape sequences, mainly special characters and font changes
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
362 ;; 3) breaking `.' requests, mainly filling and justification
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
363
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
364 ;; For each pass, a control function finds and pre-processes the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
365 ;; escape or request and then calls the appropriate function to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
366 ;; perform the required formatting. Based originally on enriched.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
367 ;; and format.el.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
368
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
369 ;; 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
370 ;; 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
371 ;; http://cm.bell-labs.com/7thEdMan/
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
372
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
373
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
374 ;; Acknowledgements
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
375 ;; ================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
376
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
377 ;; For Heather, Kathryn and Madelyn, the women in my life
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
378 ;; (although they will probably never use it)!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
379
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
380 ;; I also thank the following for helpful suggestions, bug reports,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
381 ;; code fragments, general interest, etc.:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
382 ;; Jari Aalto <jari.aalto@cs.tpu.fi>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
383 ;; Dean Andrews <dean@dra.com>
69813
a77e27984bb1 (WoMan-xref-man-page): Fix call to `substring'.
Juanma Barranquero <lekktu@gmail.com>
parents: 69793
diff changeset
384 ;; Juanma Barranquero <lekktu@gmail.com>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
385 ;; Karl Berry <kb@cs.umb.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
386 ;; Jim Chapman <jchapman@netcomuk.co.uk>
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
387 ;; Kin Cho <kin@neoscale.com>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
388 ;; Frederic Corne <frederic.corne@erli.fr>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
389 ;; Peter Craft <craft@alacritech.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
390 ;; Charles Curley <ccurley@trib.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
391 ;; Jim Davidson <jdavidso@teknowledge.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
392 ;; Kevin D'Elia <Kevin.DElia@mci.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
393 ;; John Fitch <jpff@maths.bath.ac.uk>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
394 ;; Hans Frosch <jwfrosch@rish.b17c.ingr.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
395 ;; Guy Gascoigne-Piggford <ggp@informix.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
396 ;; Brian Gorka <gorkab@sanchez.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
397 ;; Nicolai Henriksen <nhe@lyngso-industri.dk>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
398 ;; Thomas Herchenroeder <the@software-ag.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
399 ;; Alexander Hinds <ahinds@thegrid.net>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
400 ;; Stefan Hornburg <sth@hacon.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
401 ;; Theodore Jump <tjump@cais.com>
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
402 ;; David Kastrup <dak@gnu.org>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
403 ;; Paul Kinnucan <paulk@mathworks.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
404 ;; Jonas Linde <jonas@init.se>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
405 ;; Andrew McRae <andrewm@optimation.co.nz>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
406 ;; Howard Melman <howard@silverstream.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
407 ;; Dennis Pixton <dennis@math.binghamton.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
408 ;; T. V. Raman <raman@Adobe.COM>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
409 ;; Bruce Ravel <bruce.ravel@nist.gov>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
410 ;; Benjamin Riefenstahl <benny@crocodial.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
411 ;; Kevin Ruland <kruland@seistl.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
412 ;; Tom Schutter <tom@platte.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
413 ;; Wei-Xue Shi <wxshi@ma.neweb.ne.jp>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
414 ;; Fabio Somenzi <fabio@joplin.colorado.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
415 ;; Karel Sprenger <ks@ic.uva.nl>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
416 ;; Chris Szurgot <szurgot@itribe.net>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
417 ;; 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
418 ;; Arrigo Triulzi <arrigo@maths.qmw.ac.uk>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
419 ;; Geoff Voelker <voelker@cs.washington.edu>
65392
476c6d40ab50 Fix my email address.
Eli Zaretskii <eliz@gnu.org>
parents: 65380
diff changeset
420 ;; Eli Zaretskii <eliz@gnu.org>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
421
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
422
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
423 ;;; Code:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
424
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
425 (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
426
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
427 (require 'man)
66177
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
428 (require 'button)
69813
a77e27984bb1 (WoMan-xref-man-page): Fix call to `substring'.
Juanma Barranquero <lekktu@gmail.com>
parents: 69793
diff changeset
429 (define-button-type 'WoMan-xref-man-page
66177
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
430 :supertype 'Man-abstract-xref-man-page
69793
93d87ad179a4 * man.el (Man-mode-map): Restore the \r binding.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68651
diff changeset
431 'func (lambda (arg)
93d87ad179a4 * man.el (Man-mode-map): Restore the \r binding.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68651
diff changeset
432 (woman
93d87ad179a4 * man.el (Man-mode-map): Restore the \r binding.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68651
diff changeset
433 ;; `woman' cannot deal with arguments that contain a
93d87ad179a4 * man.el (Man-mode-map): Restore the \r binding.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68651
diff changeset
434 ;; section name, like close(2), so strip the section name.
93d87ad179a4 * man.el (Man-mode-map): Restore the \r binding.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68651
diff changeset
435 (if (string-match Man-reference-regexp arg)
69813
a77e27984bb1 (WoMan-xref-man-page): Fix call to `substring'.
Juanma Barranquero <lekktu@gmail.com>
parents: 69793
diff changeset
436 (substring arg 0 (match-end 1))
69793
93d87ad179a4 * man.el (Man-mode-map): Restore the \r binding.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 68651
diff changeset
437 arg))))
66177
bd98d8a37303 * woman.el (WoMan-xref-man-page): New button type derived
Masatake YAMATO <jet@gyve.org>
parents: 65680
diff changeset
438
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
439 (eval-when-compile ; to avoid compiler warnings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
440 (require 'dired)
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
441 (require 'cl)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
442 (require 'apropos))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
443
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
444 (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
445 "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
446 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
447 ;; 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
448 ;; More concise implementation than the recursive one. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
449 (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
450
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
451 (defun woman-parse-colon-path (paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
452 "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
453 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
454 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
455 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
456 `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
457 ;; 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
458 ;; 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
459 ;; 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
460 (if (memq system-type '(windows-nt ms-dos))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
461 (cond ((null paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
462 (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
463 ((string-match ";" paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
464 ;; Assume DOS-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
465 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
466 (lambda (x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
467 (if x
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
468 (list x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
469 (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
470 (parse-colon-path paths)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
471 ((string-match "\\`[a-zA-Z]:" paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
472 ;; Assume single DOS-style path...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
473 paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
474 (t
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
475 ;; Assume UNIX/Cygwin-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
476 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
477 (lambda (x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
478 (mapcar 'woman-Cyg-to-Win
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
479 (if x (list x) (woman-parse-man.conf))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
480 (let ((path-separator ":"))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
481 (parse-colon-path paths)))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
482 ;; Assume host-default-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
483 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
484 (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
485 (parse-colon-path (or paths "")))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
486
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
487 (defun woman-Cyg-to-Win (file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
488 "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
489 ;; Code taken from w32-symlinks.el
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
490 (if (eq (aref file 0) ?/)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
491 ;; 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
492 (condition-case nil
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
493 (with-temp-buffer
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
494 ;; cygpath -m file
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
495 (call-process "cygpath" nil t nil "-m" file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
496 (buffer-substring 1 (buffer-size)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
497 (error
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
498 ;; Assume no `cygpath' program available.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
499 ;; 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
500 (when (string-match "\\`\\(/cygdrive\\|/\\)?/./" file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
501 (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
502 (setq file (substring file (match-end 1))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
503 (aset file 0 (aref file 1)) ; /x/ -> xx/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
504 (aset file 1 ?:)) ; xx/ -> x:/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
505 file))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
506 file))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
507
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
508
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
509 ;;; User options:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
510
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
511 ;; NB: Group identifiers must be lowercase!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
512
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
513 (defgroup woman nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
514 "Browse UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
515 :tag "WoMan"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
516 :group 'help)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
517
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
518 (defcustom woman-show-log nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
519 "*If non-nil then show the *WoMan-Log* buffer if appropriate.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
520 I.e. if any warning messages are written to it. Default is nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
521 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
522 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
523
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
524 (defcustom woman-pre-format-hook nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
525 "*Hook run by WoMan immediately before formatting a buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
526 Change only via `Customization' or the function `add-hook'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
527 :type 'hook
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
528 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
529
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
530 (defcustom woman-post-format-hook nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
531 "*Hook run by WoMan immediately after formatting a buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
532 Change only via `Customization' or the function `add-hook'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
533 :type 'hook
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
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
536
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
537 ;; Interface options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
538
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
539 (defgroup woman-interface nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
540 "Interface options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
541 :tag "WoMan Interface"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
542 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
543
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
544 (defcustom woman-man.conf-path
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
545 (let ((path '("/usr/lib" "/etc")))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
546 (if (eq system-type 'windows-nt)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
547 (mapcar 'woman-Cyg-to-Win path)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
548 path))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
549 "*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
550 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
551 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
552 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
553 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
554 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
555 :type '(repeat string)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
556 :group 'woman-interface)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
557
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
558 (defun woman-parse-man.conf ()
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
559 "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
560 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
561 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
562 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
563 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
564 or
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
565 MANDATORY_MANPATH /usr/man
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
566 or
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
567 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
568 ;; 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
569 (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
570 file manpath)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
571 (while (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
572 path
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
573 (not (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
574 (file-readable-p (setq file (car path)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
575 ;; 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
576 (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
577 (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
578 (setq file
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
579 (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
580 (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
581 ;; 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
582 (with-temp-buffer
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
583 (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
584 (while (re-search-forward
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
585 ;; `\(?: ... \)' is a "shy group"
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
586 "\
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
587 ^[ \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
588 (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
589 manpath))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
590 ))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
591 (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
592 (nreverse manpath)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
593
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
594 (defcustom woman-manpath
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
595 (or (woman-parse-colon-path (getenv "MANPATH"))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
596 '("/usr/man" "/usr/share/man" "/usr/local/man"))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
597 "*List of DIRECTORY TREES to search for UN*X manual files.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
598 Each element should be the name of a directory that contains
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
599 subdirectories of the form `man?', or more precisely subdirectories
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
600 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
601 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
602
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
603 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
604 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
605 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
606 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
607 denotes the default list.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
608
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
609 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
610 e.g. $HOME, $EMACSDATA, $emacs_dir) are evaluated first but each
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
611 element must evaluate to a SINGLE directory name. Trailing `/'s are
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
612 ignored. (Specific directories in `woman-path' are also searched.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
613
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
614 Microsoft platforms:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
615 I recommend including drive letters explicitly, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
616
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
617 (\"C:/Cygwin/usr/man/\" \"C:/Cygwin/usr/local/man\").
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
618
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
619 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
620 separated or UN*X/Cygwin colon-separated syntax (but not mixed)."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
621 :type '(repeat string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
622 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
623
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
624 (defcustom woman-manpath-man-regexp "[Mm][Aa][Nn]"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
625 "Regexp to match man directories UNDER `woman-manpath' directories.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
626 These normally have names of the form `man?'. Its default value is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
627 \"[Mm][Aa][Nn]\", which is case-insensitive mainly for the benefit of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
628 Microsoft platforms. Its purpose is to avoid `cat?', `.', `..', etc."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
629 ;; Based on a suggestion by Wei-Xue Shi.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
630 :type 'string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
631 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
632
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
633 (defcustom woman-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
634 (if (eq system-type 'ms-dos) '("$DJDIR/info" "$DJDIR/man/cat[1-9onlp]"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
635 "*List of SPECIFIC DIRECTORIES to search for UN*X manual files.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
636 For example
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
637
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
638 (\"/emacs/etc\").
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
639
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
640 These directories are searched in addition to the directory trees
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
641 specified in `woman-manpath'. Each element should be a directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
642 string or nil, which represents the current directory when the path is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
643 expanded and cached. However, the last component (only) of each
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
644 directory string is treated as a regexp \(Emacs, not shell) and the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
645 string is expanded into a list of matching directories. Non-directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
646 and unreadable files are ignored. The default value is nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
647
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
648 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
649 e.g. $HOME, $EMACSDATA, $emacs_dir) are evaluated first but each
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
650 element must evaluate to a SINGLE directory name (regexp, see above).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
651 For example
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
652
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
653 (\"$EMACSDATA\") [or equivalently (\"$emacs_dir/etc\")].
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
654
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
655 Trailing `/'s are discarded. (The directory trees in `woman-manpath'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
656 are also searched.) On Microsoft platforms I recommend including
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
657 drive letters explicitly."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
658 :type '(repeat (choice string (const nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
659 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
660
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
661 (defcustom woman-cache-level 2
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
662 "*The level of topic caching.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
663 1 - cache only the topic and directory lists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
664 (the only level before version 0.34 - only for compatibility);
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
665 2 - cache also the directories for each topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
666 (faster, without using much more memory);
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
667 3 - cache also the actual filenames for each topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
668 (fastest, but uses twice as much memory).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
669 The default value is currently 2, a good general compromise.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
670 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
671 particularly beneficial with large remote-mounted man directories.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
672 Run the `woman' command with a prefix argument or delete the cache
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
673 file `woman-cache-filename' for a change to take effect.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
674 \(Values < 1 behave like 1; values > 3 behave like 3.)"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
675 :type '(choice (const :tag "Minimal" 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
676 (const :tag "Default" 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
677 (const :tag "Maximal" 3))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
678 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
679
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
680 (defcustom woman-cache-filename nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
681 "*The full pathname of the WoMan directory and topic cache file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
682 It is used to save and restore the cache between sessions. This is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
683 especially useful with remote-mounted man page files! The default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
684 value of nil suppresses this action. The `standard' non-nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
685 filename is \"~/.wmncach.el\". Remember that a prefix argument forces
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
686 the `woman' command to update and re-write the cache."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
687 :type '(choice (const :tag "None" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
688 (const :tag "~/.wmncach.el" "~/.wmncach.el")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
689 file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
690 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
691
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
692 (defcustom woman-dired-keys t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
693 "*List of `dired' mode keys to define to run WoMan on current file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
694 E.g. '(\"w\" \"W\"), or any non-null atom to automatically define
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
695 \"w\" and \"W\" if they are unbound, or nil to do nothing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
696 Default is t."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
697 :type '(choice (const :tag "None" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
698 (repeat string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
699 (other :tag "Auto" t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
700 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
701
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
702 (defcustom woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
703 '((nil "\n\\([A-Z].*\\)" 1) ; SECTION, but not TITLE
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
704 ("*Subsections*" "^ \\([A-Z].*\\)" 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
705 "*Imenu support for Sections and Subsections.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
706 An alist with elements of the form (MENU-TITLE REGEXP INDEX) --
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
707 see the documentation for `imenu-generic-expression'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
708 :type 'sexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
709 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
710
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
711 (defcustom woman-imenu nil
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
712 "*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
713 It does this by calling `imenu-add-to-menubar'. Default is nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
714 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
715 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
716
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
717 (defcustom woman-imenu-title "CONTENTS"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
718 "*The title to use if WoMan adds a Contents menu to the menubar.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
719 Default is \"CONTENTS\"."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
720 :type 'string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
721 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
722
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
723 (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
724 ;; `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
725 ;; in which case its global value does not get defined.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
726 ;; `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
727 "*Default value for `woman-use-topic-at-point'."
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
65428
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
732 (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
733 "*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
734 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
735 without interactive confirmation, if it exists as a topic."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
736 :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
737 (const :tag "No" nil))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
738 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
739
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
740 (defvar woman-file-regexp nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
741 "Regexp used to select (possibly compressed) man source files, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
742 \"\\.\\([0-9lmnt]\\w*\\)\\(\\.\\(g?z\\|bz2\\)\\)?\\'\".
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
743 Built automatically from the customizable user options
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
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
746 (defvar woman-uncompressed-file-regexp) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
747 (defvar woman-file-compression-regexp) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
748
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
749 (defun set-woman-file-regexp (symbol value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
750 "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
751 Used as :set cookie by Customize when customizing the user options
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
752 `woman-uncompressed-file-regexp' and `woman-file-compression-regexp'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
753 (set-default symbol value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
754 (and (boundp 'woman-uncompressed-file-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
755 (boundp 'woman-file-compression-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
756 (setq woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
757 (concat woman-uncompressed-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
758 "\\("
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
759 (substring woman-file-compression-regexp 0 -2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
760 "\\)?\\'"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
761
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
762 (defcustom woman-uncompressed-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
763 "\\.\\([0-9lmnt]\\w*\\)" ; disallow no extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
764 "*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
765 Regexp used to select man source files (ignoring any compression extension).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
766
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
767 The SysV standard man pages use two character suffixes, and this is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
768 becoming more common in the GNU world. For example, the man pages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
769 in the ncurses package include `toe.1m', `form.3x', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
770
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
771 Note: an optional compression regexp will be appended, so this regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
772 MUST NOT end with any kind of string terminator such as $ or \\'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
773 :type 'regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
774 :set 'set-woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
775 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
776
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
777 (defcustom woman-file-compression-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
778 "\\.\\(g?z\\|bz2\\)\\'"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
779 "*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
780 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
781 decompressors are available and handled by auto-compression mode,
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
782 e.g. \"\\\\.\\\\(g?z\\\\|bz2\\\\)\\\\'\" for `gzip' or `bzip2'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
783 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
784 ;; 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
785 ;; `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
786 ;; 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
787 ;; not loaded by default!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
788 :type 'regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
789 :set 'set-woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
790 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
791
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
792 (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
793 (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
794 (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
795 "*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
796 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
797 :type 'boolean
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
798 :group 'woman-interface)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
799
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
800
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
801 ;; Formatting options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
802
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
803 (defgroup woman-formatting nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
804 "Formatting options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
805 :tag "WoMan Formatting"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
806 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
807
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
808 (defcustom woman-fill-column 65
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
809 "*Right margin for formatted text -- default is 65."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
810 :type 'integer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
811 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
812
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
813 (defcustom woman-fill-frame nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
814 ;; Based loosely on a suggestion by Theodore Jump:
54516
796bcfb5fa61 (woman-fill-frame): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 54385
diff changeset
815 "*If non-nil then most of the window width is used."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
816 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
817 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
818
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
819 (defcustom woman-default-indent 5
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
820 "*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
821 Set this variable to 7 to emulate GNU man formatting."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
822 :type 'integer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
823 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
824
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
825 (defcustom woman-bold-headings t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
826 "*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
827 Heading emboldening is NOT standard `man' behavior."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
828 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
829 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
830
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
831 (defcustom woman-ignore t
63509
f890545a138d (woman-ignore, woman0-if): Fix spelling in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 63365
diff changeset
832 "*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
833 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
834 the buffer, which may aid debugging."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
835 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
836 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
837
54385
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
838 (defcustom woman-preserve-ascii t
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
839 "*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
840 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
841 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
842 `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
843 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
844 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
845 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
846 ;; This option should probably be removed!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
847 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
848 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
849
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
850 (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
851 "*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
852 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
853 \(Add groff later?)"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
854 :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
855 :group 'woman-formatting)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
856
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
857
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
858 ;; Faces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
859
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
860 (defgroup woman-faces nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
861 "Face options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
862 :tag "WoMan Faces"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
863 :group 'woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
864 :group 'faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
865
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
866 (defcustom woman-fontify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
867 (or (and (fboundp 'display-color-p) (display-color-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
868 (and (fboundp 'display-graphic-p) (display-graphic-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
869 (x-display-color-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
870 "*If non-nil then WoMan assumes that face support is available.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
871 It defaults to a non-nil value if the display supports either colors
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
872 or different fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
873 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
874 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
875
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
876 ;; 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
877 ;; 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
878 ;; 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
879 (defface woman-italic
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
880 `((((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
881 (: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
882 (((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
883 (((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
884 "Face for italic font in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
885 :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
886 ;; 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
887 (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
888
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
889 (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
890 '((((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
891 (((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
892 (((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
893 "Face for bold font in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
894 :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
895 ;; 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
896 (put 'woman-bold-face 'face-alias 'woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
897
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
898 ;; 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
899 ;; 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
900 ;; 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
901 (defface woman-unknown
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
902 '((((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
903 (((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
904 (((background dark)) (:foreground "cyan")))
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
905 "Face for all unknown fonts in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
906 :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
907 ;; 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
908 (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
909
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
910 (defface woman-addition
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
911 '((t (:foreground "orange")))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
912 "Face for all WoMan additions to man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
913 :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
914 ;; 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
915 (put 'woman-addition-face 'face-alias 'woman-addition)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
916
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
917 (defun woman-default-faces ()
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
918 "Set foreground colors of italic and bold faces to their default values."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
919 (interactive)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
920 (face-spec-set 'woman-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
921 (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
922
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
923 (defun woman-monochrome-faces ()
63264
5b60124f1c0a (woman-bold-headings, woman-ignore, woman-default-faces,
Juanma Barranquero <lekktu@gmail.com>
parents: 63199
diff changeset
924 "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
925 This is usually either black or white."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
926 (interactive)
63199
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
927 (set-face-foreground 'woman-italic 'unspecified)
6d9a2cf91f62 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-370
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
928 (set-face-foreground 'woman-bold 'unspecified))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
929
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
930 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
931 ;; 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
932 (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
933 (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
934 "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
935
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
936 (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
937 "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
938 (let (symbol-fonts)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
939 ;; 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
940 ;; 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
941 (while fonts
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
942 (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
943 (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
944 (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
945 (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
946 symbol-fonts))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
947
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
948 (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
949 (make-face 'woman-symbol)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
950
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
951 ;; 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
952 ;; avoid unnecessarily upsetting the line spacing in NTEmacs 20.5!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
953
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
954 (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
955 "*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
956 :type 'boolean
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
957 :group 'woman-faces)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
958
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
959 (defcustom woman-use-symbol-font nil
65393
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
960 "*If non-nil then may use the symbol font.
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
961 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
962 \(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
963 :type 'boolean
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
964 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
965
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
966 (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
967 (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
968 (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
969 "Symbol font(s), preferably same size as default when WoMan was loaded.")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
970
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
971 (defcustom woman-symbol-font (car woman-symbol-font-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
972 "*A string describing the symbol font to use for special characters.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
973 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
974 Under MS-Windows, the default is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
975 \"-*-Symbol-normal-r-*-*-*-*-96-96-p-*-ms-symbol\"."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
976 :type `(choice
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
977 ,@(mapcar (lambda (x) (list 'const x))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
978 woman-symbol-font-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
979 string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
980 :group 'woman-faces)
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
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
984 ;; 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
985 (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
986 (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
987 (defvar woman-symbol-font nil)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
988 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
989
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
990
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
991 ;;; Internal variables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
992
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
993 (defconst woman-justify-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
994 '(left right center full)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
995 "Justify styles for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
996 (defconst woman-adjust-left 0 ; == adjust off, noadjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
997 "Adjustment indicator `l' -- adjust left margin only.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
998 (defconst woman-adjust-right 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
999 "Adjustment indicator `r' -- adjust right margin only.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1000 (defconst woman-adjust-center 2
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1001 "Adjustment indicator `c' -- center.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1002 (defconst woman-adjust-both 3 ; default -- adj,both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1003 "Adjustment indicator `b' or `n' -- adjust both margins.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1004
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1005 (defvar woman-adjust woman-adjust-both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1006 "Current adjustment number-register value.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1007 (defvar woman-adjust-previous woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1008 "Previous adjustment number-register value.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1009 (defvar woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1010 (nth woman-adjust woman-justify-list) ; use vector?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1011 "Current justification style for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1012 (defvar woman-justify-previous woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1013 "Previous justification style for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1014
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1015 (defvar woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1016 "Current left margin.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1017 (defvar woman-prevailing-indent woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1018 "Current prevailing indent.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1019 (defvar woman-interparagraph-distance 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1020 "Interparagraph distance in lines.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1021 Set by .PD; used by .SH, .SS, .TP, .LP, .PP, .P, .IP, .HP.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1022 (defvar woman-leave-blank-lines nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1023 "Blank lines to leave as vertical space.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1024 (defconst woman-tab-width 5
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1025 "Default tab width set by -man macros.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1026 (defvar woman-nofill nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1027 "Current fill mode: nil for filling.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1028 (defvar woman-RS-left-margin nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1029 "Left margin stack for nested use of `.RS/.RE'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1030 (defvar woman-RS-prevailing-indent nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1031 "Prevailing indent stack for nested use of `.RS/.RE'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1032 (defvar woman-nospace nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1033 "Current no-space mode: nil for normal spacing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1034 Set by `.ns' request; reset by any output or `.rs' request")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1035
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1036 (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
1037 "Set `woman-nospace' to nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1038 (setq woman-nospace nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1039
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1040 (defconst woman-request-regexp "^[.'][ \t]*\\(\\S +\\) *"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1041 ;; Was "^\\.[ \t]*\\([a-z0-9]+\\) *" but cvs.1 uses a macro named
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1042 ;; "`" and CGI.man uses a macro named "''"!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1043 ;; CGI.man uses ' as control character in places -- it *should*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1044 ;; suppress breaks!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1045 ;; Could end with "\\( +\\|$\\)" instead of " *"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1046 "Regexp to match a ?roff request plus trailing white space.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1047
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1048 (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
1049 "Buffer-local: set to true if function `woman-imenu' has been called.")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1050 (make-variable-buffer-local 'woman-imenu-done)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1051
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1052 ;; From imenu.el -- needed when reformatting a file in its old buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1053 ;; The latest buffer index used to update the menu bar menu.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1054 (eval-when-compile
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1055 (require 'imenu))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1056 (make-variable-buffer-local 'imenu--last-menubar-index-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1057
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1058 (defvar woman-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
1059 "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
1060 Each element is of the form (FILE-NAME . BUFFER-NAME).")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1061
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1062 (defvar woman-buffer-number 0
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1063 "Ordinal number of current buffer entry in `woman-buffer-alist'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1064 The ordinal numbers start from 0.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1065
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1066 (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
1067 "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
1068 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
1069 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
1070
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1071
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1072 ;;; Specialized utility functions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1073
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1074 ;;; Fast deletion without saving on the kill ring (cf. simple.el):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1075
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1076 (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
1077 "Delete rest of current line; if all blank then delete thru newline.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1078 With a numeric argument ARG, delete that many lines from point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1079 Negative arguments delete lines backward."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1080 ;; This is a non-interactive version of kill-line in simple.el that
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1081 ;; deletes instead of killing and assumes kill-whole-line is nil,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1082 ;; which is essential!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1083 (delete-region (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1084 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1085 (if arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1086 (forward-line arg)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1087 (if (eobp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1088 (signal 'end-of-buffer nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1089 (if (looking-at "[ \t]*$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1090 (forward-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1091 (end-of-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1092 (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1093
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1094 (defsubst woman-delete-whole-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1095 "Delete current line from beginning including eol."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1096 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1097 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1098
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1099 (defsubst woman-delete-following-space ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1100 "Delete all spaces and tabs FOLLOWING point (cf. `delete-horizontal-space')."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1101 ;; cf. delete-horizontal-space in simple.el:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1102 (delete-region (point) (progn (skip-chars-forward " \t") (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1103
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1104 (defsubst woman-delete-match (subexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1105 "Delete subexpression SUBEXP of buffer text matched by last search."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1106 (delete-region (match-beginning subexp) (match-end subexp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1107
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1108 ;; delete-char does not kill by default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1109 ;; delete-backward-char does not kill by default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1110 ;; delete-horizontal-space does not kill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1111 ;; delete-blank-lines does not kill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1112
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1113
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1114 ;;; File handling:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1115
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1116 (defvar woman-expanded-directory-path nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1117 "Expanded directory list cache. Resetting to nil forces update.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1118
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1119 (defvar woman-topic-all-completions nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1120 "Expanded topic alist cache. Resetting to nil forces update.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1121
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1122 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1123 (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
1124 "Browse UN*X man page for TOPIC (Without using external Man program).
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1125 The major browsing mode used is essentially the standard Man mode.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1126 Choose the filename for the man page using completion, based on the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1127 topic selected from the directories specified in `woman-manpath' and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1128 `woman-path'. The directory expansions and topics are cached for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1129 speed, but a non-nil interactive argument forces the caches to be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1130 updated (e.g. to re-interpret the current directory).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1131
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1132 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
1133 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
1134 (interactive (list nil current-prefix-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1135 ;; 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
1136 (if (or (not (stringp topic)) (string-match "\\S " topic))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1137 (let ((file-name (woman-file-name topic re-cache)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1138 (if file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1139 (woman-find-file file-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1140 (message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1141 "WoMan Error: No matching manual files found in search path")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1142 (ding))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1143 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1144 (message "WoMan Error: No topic specified in non-interactive call")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1145 (ding))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1146 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1147
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1148 ;; Allow WoMan to be called via the standard Help menu:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1149 (define-key-after menu-bar-manuals-menu [woman]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1150 '(menu-item "Read Man Page (WoMan)..." woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1151 :help "Man-page documentation Without Man") t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1152
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1153 (defvar woman-cached-data nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1154 "A list of cached data used to determine cache validity.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1155 Set from the cache by `woman-read-directory-cache'.")
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-cached-data ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1158 "Generate a list of data used to determine cache validity.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1159 Called both to generate and to check the cache!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1160 ;; Must use substituted paths because values of env vars may change!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1161 (list woman-cache-level
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1162 (mapcar 'substitute-in-file-name woman-manpath)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1163 (mapcar 'substitute-in-file-name woman-path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1164
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1165 (defun woman-read-directory-cache ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1166 "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
1167 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
1168 Return t if the file exists, nil otherwise."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1169 (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1170 woman-cache-filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1171 (load woman-cache-filename t nil t) ; file exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1172 (equal woman-cached-data (woman-cached-data)))) ; cache valid
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1173
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1174 (defun woman-write-directory-cache ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1175 "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
1176 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
1177 (if woman-cache-filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1178 (save-excursion ; to restore current buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1179 ;; Make a temporary buffer; name starting with space "hides" it.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1180 (let ((standard-output
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1181 (set-buffer (generate-new-buffer "WoMan tmp buffer")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1182 (backup-inhibited t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1183 ;; (switch-to-buffer standard-output t) ; only for debugging
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1184 (buffer-disable-undo standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1185 (princ
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1186 ";;; WoMan directory and topic cache -- generated automatically\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1187 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1188 ;; For data validity check:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1189 `(setq woman-cached-data ',(woman-cached-data)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1190 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1191 `(setq woman-expanded-directory-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1192 ',woman-expanded-directory-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1193 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1194 `(setq woman-topic-all-completions
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1195 ',woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1196 (write-file woman-cache-filename) ; write CURRENT buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1197 (kill-buffer standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1198 ))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1199
72620
70dd4b1e1daf (woman-topic-history): Change defvar to defvaralias
Juri Linkov <juri@jurta.org>
parents: 72564
diff changeset
1200 (defvaralias 'woman-topic-history 'Man-topic-history)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1201 (defvar woman-file-history nil "File-name read history.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1202
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1203 (defun woman-file-name (topic &optional re-cache)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1204 "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
1205 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
1206 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
1207 `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
1208 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
1209 cache to be re-read."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1210 ;; Handle the caching of the directory and topic lists:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1211 (if (and (not re-cache)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1212 (or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1213 (and woman-expanded-directory-path woman-topic-all-completions)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1214 (woman-read-directory-cache)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1215 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1216 (message "Building list of manual directory expansions...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1217 (setq woman-expanded-directory-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1218 (woman-expand-directory-path woman-manpath woman-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1219 (message "Building completion list of all manual topics...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1220 (setq woman-topic-all-completions
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1221 (woman-topic-all-completions woman-expanded-directory-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1222 (woman-write-directory-cache))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1223 ;; There is a problem in that I want to offer case-insensitive
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1224 ;; completions, but to return only a case-sensitive match. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1225 ;; does not seem to work properly by default, so I re-do the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1226 ;; completion if necessary.
65380
71481859776b (woman-file-name): Provide a default, not initial input.
Richard M. Stallman <rms@gnu.org>
parents: 65359
diff changeset
1227 (let (files
71481859776b (woman-file-name): Provide a default, not initial input.
Richard M. Stallman <rms@gnu.org>
parents: 65359
diff changeset
1228 (default (current-word)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1229 (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
1230 (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
1231 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
1232 ;; 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
1233 (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
1234 (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
1235 (test-completion topic woman-topic-all-completions))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1236 (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
1237 (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
1238 (default
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1239 (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
1240 (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
1241 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
1242 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
1243 (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
1244 (if default
65680
ed770a0a7846 2005-09-24 Emilio C. Lopes <eclig@gmx.net>
Romain Francoise <romain@orebokech.com>
parents: 65582
diff changeset
1245 (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
1246 "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
1247 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
1248 nil
25502a355957 (woman-topic-at-point-default): Renamed to woman-use-topic-at-point-default.
Eli Zaretskii <eliz@gnu.org>
parents: 65393
diff changeset
1249 '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
1250 default))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1251 ;; Note that completing-read always returns a string.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1252 (if (= (length topic) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1253 nil ; no topic, so no file!
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 ((setq files (woman-file-name-all-completions topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1256 ;; Complete topic more carefully, i.e. use the completion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1257 ;; rather than the string entered by the user:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1258 ((setq files (all-completions topic woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1259 (while (/= (length topic) (length (car files)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1260 (setq files (cdr files)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1261 (setq files (woman-file-name-all-completions (car files)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1262 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1263 ((null files) nil) ; no file found for topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1264 ((null (cdr files)) (car (car files))) ; only 1 file for topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1265 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1266 ;; Multiple files for topic, so must select 1.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1267 ;; Unread the command event (TAB = ?\t = 9) that runs the command
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1268 ;; `minibuffer-complete' in order to automatically complete the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1269 ;; minibuffer contents as far as possible.
65393
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
1270 (setq unread-command-events '(9)) ; and delete any type-ahead!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1271 (completing-read "Manual file: " files nil 1
65393
ff96330a04d3 Format- and whitespace-related changes.
Eli Zaretskii <eliz@gnu.org>
parents: 65392
diff changeset
1272 (try-completion "" files) 'woman-file-history))))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1273
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1274 (defun woman-select (predicate list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1275 "Select unique elements for which PREDICATE is true in LIST.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1276 \(Note that this function changes the value of LIST.)"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1277 ;; Intended to be fast by avoiding recursion and list copying.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1278 (while (and list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1279 (or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1280 (member (car list) (cdr list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1281 (not (funcall predicate (car list)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1282 (setq list (cdr list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1283 (if list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1284 (let ((newlist list) cdr_list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1285 (while (setq cdr_list (cdr list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1286 (if (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1287 (not (member (car cdr_list) (cdr cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1288 (funcall predicate (car cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1289 (setq list cdr_list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1290 (setcdr list (cdr cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1291 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1292 newlist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1293
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1294 (defun woman-file-readable-p (dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1295 "Return t if DIR is readable, otherwise log a warning."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1296 (or (file-readable-p dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1297 (WoMan-warn "Ignoring unreadable `manpath' directory tree `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1298
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1299 (defun woman-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
1300 "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
1301 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
1302 directory HEAD, or the current directory if HEAD is nil, that match the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1303 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
1304 (or (directory-files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1305 (or head (directory-file-name default-directory)) ; was "."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1306 t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1307 (file-name-nondirectory dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1308 (WoMan-warn "No directories match `woman-path' entry `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1309
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1310 (defun woman-file-accessible-directory-p (dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1311 "Return t if DIR is accessible, otherwise log a warning."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1312 (or (file-accessible-directory-p dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1313 (WoMan-warn "Ignoring inaccessible `man-page' directory `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1314
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1315 (defun woman-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
1316 "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
1317 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
1318 WOMAN-PATH should be a list of specific manual directory regexps.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1319 Ignore any paths that are unreadable or not directories."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1320 ;; Allow each path to be a single string or a list of strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1321 (if (not (listp woman-manpath)) (setq woman-manpath (list woman-manpath)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1322 (if (not (listp woman-path)) (setq woman-path (list woman-path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1323 (let (dir head dirs)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1324 (while woman-manpath
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1325 (setq dir (car woman-manpath)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1326 woman-manpath (cdr woman-manpath))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1327 (if (and dir (woman-file-readable-p dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1328 ;; NB: `parse-colon-path' creates null elements for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1329 ;; redundant (semi-)colons and trailing `/'s!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1330 ;; If does not actually matter here if dir ends with `/'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1331 ;; Need regexp "man" here to avoid "cat?", `.', `..', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1332 (setq dir (woman-canonicalize-dir dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1333 dirs (nconc dirs (directory-files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1334 dir t woman-manpath-man-regexp)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1335 (while woman-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1336 (setq dir (car woman-path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1337 woman-path (cdr woman-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1338 (if (or (null dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1339 (null (setq dir (woman-canonicalize-dir dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1340 head (file-name-directory dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1341 (woman-file-readable-p head))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1342 (setq dirs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1343 (if dir
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1344 (nconc dirs (woman-directory-files head dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1345 (cons (directory-file-name default-directory) dirs))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1346 ;; was "." -- at head of list for later filtering
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1347 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1348 (woman-select 'woman-file-accessible-directory-p dirs)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1349
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1350 (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
1351 "Canonicalize the directory name DIR.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1352 Any UN*X-style environment variables are evaluated first."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1353 (setq dir (expand-file-name (substitute-in-file-name dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1354 ;; A path that ends with / matches all directories in it,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1355 ;; including `.' and `..', so remove any trailing / !!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1356 (if (string= (substring dir -1) "/")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1357 (setq dir (substring dir 0 -1)))
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 47978
diff changeset
1358 (if (memq system-type '(windows-nt ms-dos cygwin)) ; what else?
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1359 ;; Match capitalization used by `file-name-directory':
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1360 (setq dir (concat (file-name-directory dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1361 (file-name-nondirectory dir))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1362 dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1363
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1364 (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
1365 "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
1366 If DIR is `.' it is first replaced by the current directory."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1367 (not (member dir path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1368
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1369 (defun woman-topic-all-completions (path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1370 "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
1371 The cdr of each alist element is the path-index / filename."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1372 ;; Support 3 levels of caching: each element of the alist `files'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1373 ;; will be a list of the first `woman-cache-level' elements of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1374 ;; following list: (topic path-index filename). This alist `files'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1375 ;; is re-processed by `woman-topic-all-completions-merge'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1376 (let (dir files (path-index 0)) ; indexing starts at zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1377 (while path
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1378 (setq dir (pop path))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1379 (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
1380 (push (woman-topic-all-completions-1 dir path-index)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1381 files))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1382 (setq path-index (1+ path-index)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1383 ;; Uniquefy topics:
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1384 ;; Concate all lists with a single nconc call to
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1385 ;; avoid retraversing the first lists repeatedly -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1386 (woman-topic-all-completions-merge
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1387 (apply #'nconc files))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1388
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1389 (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
1390 "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
1391 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
1392 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
1393 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
1394 \(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
1395 ;; 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
1396 ;; 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
1397 ;; 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
1398 ;; 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
1399 ;; anyway, i.e. it is a user error!
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1400 ;;
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1401 ;; 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
1402 (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
1403 ;; Make an explicit regexp for stripping extension and
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1404 ;; compression extension: file-name-sans-extension is a
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1405 ;; far too costly function. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1406 (ext (format "\\(\\.[^.\\/]*\\)?\\(%s\\)?\\'"
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1407 woman-file-compression-regexp)))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1408 ;; 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
1409 ;; penalty of binding function arguments. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1410 (dolist (file lst newlst)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1411 (push
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1412 (cons
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1413 (if (string-match ext file)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1414 (substring file 0 (match-beginning 0))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1415 file)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1416 (and (> woman-cache-level 1)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1417 (cons
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1418 path-index
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1419 (and (> woman-cache-level 2)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1420 (list file)))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1421 newlst))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1422
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1423 (defun woman-topic-all-completions-merge (alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1424 "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
1425 Also make each path-info component into a list.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1426 \(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
1427 ;; Replaces unreadably "optimized" O(n^2) implementation.
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1428 ;; Instead we use sorting to merge stuff efficiently. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1429 (let (elt newalist)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1430 ;; Sort list into reverse order
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1431 (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
1432 ;; merge duplicate keys.
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1433 (if (> woman-cache-level 1)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1434 (while alist
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1435 (setq elt (pop alist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1436 (if (equal (car elt) (caar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1437 (unless (member (cdr elt) (cdar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1438 (setcdr (car newalist) (cons (cdr elt)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1439 (cdar newalist))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1440 (setcdr elt (list (cdr elt)))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1441 (push elt newalist)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1442 ;; 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
1443 (while alist
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1444 (setq elt (pop alist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1445 (unless (equal (car elt) (caar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1446 (push elt newalist))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1447 newalist))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1448
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1449 (defun woman-file-name-all-completions (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1450 "Return an alist of the files in all man directories that match TOPIC."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1451 ;; Support 3 levels of caching: each element of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1452 ;; woman-topic-all-completions is a list of one of the forms:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1453 ;; (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1454 ;; (topic (path-index) (path-index) ... )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1455 ;; (topic (path-index filename) (path-index filename) ... )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1456 ;; where the are no duplicates in the value lists.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1457 ;; Topic must match first `word' of filename, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1458 (let ((topic-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1459 (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1460 "\\`" (regexp-quote topic) ; first `word'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1461 "\\(\\..+\\)*" ; optional subsequent `words'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1462 woman-file-regexp)) ; extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1463 (topics woman-topic-all-completions)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1464 (path woman-expanded-directory-path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1465 dir files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1466 (if (cdr (car topics))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1467 ;; Use cached path-info to locate files for each topic:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1468 (let ((path-info (cdr (assoc topic topics)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1469 filename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1470 (while path-info
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1471 (setq dir (nth (car (car path-info)) path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1472 filename (car (cdr (car path-info)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1473 path-info (cdr path-info)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1474 files (nconc files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1475 ;; Find the actual file name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1476 (if filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1477 (list (concat dir "/" filename))
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 ;; Search path for the files for each topic:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1481 (while path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1482 (setq dir (car path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1483 path (cdr path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1484 (if (woman-not-member dir path) ; use each directory only once!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1485 (setq files (nconc files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1486 (directory-files dir t topic-regexp))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1487 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1488 (mapcar 'list files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1489 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1490
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1491
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1492 ;;; dired support
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1493
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1494 (defun woman-dired-define-key (key)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1495 "Bind the argument KEY to the command `woman-dired-find-file'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1496 (define-key dired-mode-map key 'woman-dired-find-file))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1497
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1498 (defsubst woman-dired-define-key-maybe (key)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1499 "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
1500 (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
1501 (null (lookup-key dired-mode-map key)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1502 (woman-dired-define-key key)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1503
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1504 (defun woman-dired-define-keys ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1505 "Define dired keys to run WoMan according to `woman-dired-keys'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1506 (if woman-dired-keys
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1507 (if (listp woman-dired-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1508 (mapcar 'woman-dired-define-key woman-dired-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1509 (woman-dired-define-key-maybe "w")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1510 (woman-dired-define-key-maybe "W")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1511 (define-key-after (lookup-key dired-mode-map [menu-bar immediate])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1512 [woman] '("Read Man Page (WoMan)" . woman-dired-find-file) 'view))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1513
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1514 (if (featurep 'dired)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1515 (woman-dired-define-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1516 (add-hook 'dired-mode-hook 'woman-dired-define-keys))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1517
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1518 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1519 (defun woman-dired-find-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1520 "In dired, run the WoMan man-page browser on this file."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1521 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1522 ;; dired-get-filename is defined in dired.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1523 (woman-find-file (dired-get-filename)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1524
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1525
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1526 ;;; tar-mode support
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1527
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1528 (defun woman-tar-extract-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1529 "In tar mode, run the WoMan man-page browser on this file."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1530 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1531 (or (eq major-mode 'tar-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1532 (error "`woman-tar-extract-file' can be used only in `tar-mode'"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1533 (buffer-disable-undo)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1534 (let (global-font-lock-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1535 (funcall (symbol-function 'tar-extract)) ; defined in tar-mode
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1536 (let ((WoMan-current-file buffer-file-name)) ; used for message logging
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1537 (rename-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1538 (woman-make-bufname (file-name-nondirectory buffer-file-name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1539 (woman-process-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1540 (goto-char (point-min)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1541
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1542 ;; There is currently no `tar-mode-hook' so use ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1543 (eval-after-load "tar-mode"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1544 '(progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1545 (define-key tar-mode-map "w" 'woman-tar-extract-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1546 (define-key-after (lookup-key tar-mode-map [menu-bar immediate])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1547 [woman] '("Read Man Page (WoMan)" . woman-tar-extract-file) 'view)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1548
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1549
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1550 (defvar woman-last-file-name nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1551 "The full pathname of the last file formatted by WoMan.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1552
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1553 (defun woman-reformat-last-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1554 "Reformat last file, e.g. after changing fill column."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1555 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1556 (if woman-last-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1557 (woman-find-file woman-last-file-name t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1558 (call-interactively 'woman-find-file)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1559
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1560 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1561 (defun woman-find-file (file-name &optional reformat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1562 "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
1563 Use existing buffer if possible; reformat only if prefix arg given.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1564 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
1565 of an existing WoMan buffer formatted earlier.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1566 No external programs are used, except that `gunzip' will be used to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1567 decompress the file if appropriate. See the documentation for the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1568 `woman' command for further details."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1569 (interactive "fBrowse UN*X manual file: \nP")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1570 (setq woman-last-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1571 (setq file-name (expand-file-name file-name))) ; to canonicalize
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1572 (let ((alist-tail woman-buffer-alist) exists)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1573 (setq woman-buffer-number 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1574 (while (and alist-tail (not (string= file-name (car (car alist-tail)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1575 (setq alist-tail (cdr alist-tail)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1576 woman-buffer-number (1+ woman-buffer-number)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1577 (or (and (setq exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1578 (and alist-tail (WoMan-find-buffer))) ; buffer exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1579 (not reformat))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1580 ;; Format new buffer or reformat current buffer:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1581 (let* ((bufname (file-name-nondirectory file-name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1582 (case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1583 (compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1584 (not (not (string-match woman-file-compression-regexp bufname)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1585 (if compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1586 (setq bufname (file-name-sans-extension bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1587 (setq bufname (if exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1588 (buffer-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1589 (woman-make-bufname bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1590 (woman-really-find-file file-name compressed bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1591 (or exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1592 (setq woman-buffer-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1593 (cons (cons file-name bufname) woman-buffer-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1594 woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1595 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1596 (Man-build-section-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1597 (Man-build-references-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1598 (goto-char (point-min)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1599
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1600 (defun woman-make-bufname (bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1601 "Create an unambiguous buffer name from BUFNAME."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1602 (let ((dot (string-match "\\." bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1603 (if dot (setq bufname (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1604 (substring bufname (1+ dot)) " "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1605 (substring bufname 0 dot))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1606 (generate-new-buffer-name ; ensure uniqueness
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1607 (concat "*WoMan " bufname "*"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1608
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1609 (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
1610 "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
1611
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1612 (defun woman-really-find-file (filename compressed bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1613 "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
1614 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
1615 the file if necessary. Set buffer name BUFNAME and major mode.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1616 Do not call directly!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1617 (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
1618 (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
1619 (select-frame
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1620 (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
1621 (setq woman-frame (make-frame)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1622 (switch-to-buffer (get-buffer-create bufname))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1623 (buffer-disable-undo)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1624 (setq buffer-read-only nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1625 (erase-buffer) ; NEEDED for reformat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1626 (woman-insert-file-contents filename compressed)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1627 ;; Set buffer's default directory to that of the file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1628 (setq default-directory (file-name-directory filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1629 (set (make-local-variable 'backup-inhibited) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1630 (set-visited-file-name "")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1631 (woman-process-buffer)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1632
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1633 (defun woman-process-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1634 "The second half of `woman-really-find-file'!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1635 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1636 ;; Check (crudely) that this really is likely to be in UN*X
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1637 ;; man-page source format, assuming we are at point-min:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1638 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1639 (if (re-search-forward "^[.']" 1000 t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1640 (woman-decode-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1641 (message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1642 "File appears to be pre-formatted -- using source file may be better.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1643 (woman-man-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1644 (woman-mode))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1645
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1646 (defun woman-man-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1647 "Post-process an nroff-preformatted man buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1648 ;; Kill all leading whitespace:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1649 (if (looking-at "\\s-+") (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1650 ;; Delete all page footer/header pairs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1651 (re-search-forward ".*") ; match header
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1652 ;; Footer conventionally has page number at right, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1653 (let ((regex (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1654 "^.*[0-9]\n\\s-*" ; footer and following blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1655 (regexp-quote (match-string 0)) ; header
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1656 "\\s-*\n"))) ; following blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1657 (while (re-search-forward regex nil 1) ; finish at eob
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1658 (woman-delete-match 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1659 ;; Delete last text line (footer) and all following blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1660 (re-search-backward "\\S-")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1661 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1662 (if (looking-at ".*[0-9]$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1663 (delete-region (point) (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1664
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1665 ;; Squeeze multiple blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1666 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1667 (while (re-search-forward "^[ \t]*\n\\([ \t]*\n\\)+" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1668 (replace-match "\n" t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1669
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1670 ;; 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
1671 ;; (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
1672 (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
1673 ;; Multibyte characters exist.
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1674 (progn
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1675 (goto-char (point-min))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1676 (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
1677 (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
1678 (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
1679 (goto-char (point-min))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1680 (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
1681 (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
1682 (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
1683
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1684 ;; Interpret overprinting to indicate bold face:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1685 (goto-char (point-min))
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1686 (while (re-search-forward "\\(.\\)\\(\\(+\\1\\)+\\)" nil t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1687 (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
1688 (woman-set-face (1- (point)) (point) 'woman-bold))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1689
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1690 ;; Interpret underlining to indicate italic face:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1691 ;; (Must be AFTER emboldening to interpret bold _ correctly!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1692 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1693 (while (search-forward "_" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1694 (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
1695 (woman-set-face (point) (1+ (point)) 'woman-italic))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1696
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1697 ;; Leave any other uninterpreted ^H's in the buffer for now! (They
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1698 ;; might indicate composite special characters, which could be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1699 ;; interpreted if I knew what to expect.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1700
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1701 ;; Optionally embolden section and subsection headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1702 ;; (cf. `woman-imenu-generic-expression'):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1703 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1704 (woman-bold-headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1705 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1706 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1707 (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
1708 (woman-set-face (match-beginning 2) (match-end 2) 'woman-bold))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1709 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1710
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1711 (defun woman-insert-file-contents (filename compressed)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1712 "Insert file FILENAME into the current buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1713 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
1714 then turn on auto-compression mode to decompress the file.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1715 Leave point at end of new text. Return length of inserted text."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1716 ;; 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
1717 ;; start in 19.34!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1718 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1719 (let ((case-fold-search t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1720 ;; Co-operate with auto-compression mode:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1721 (if (and compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1722 (or (eq compressed t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1723 (string-match woman-file-compression-regexp filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1724 ;; (not auto-compression-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1725 (not (rassq 'jka-compr-handler file-name-handler-alist)) )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1726 ;; (error "Compressed file requires Auto File Decompression turned on")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1727 (auto-compression-mode 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1728 (nth 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1729 (condition-case ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1730 (insert-file-contents filename nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1731 (file-error
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1732 ;; Run find-file-not-found-hooks until one returns non-nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1733 ;; (run-hook-with-args-until-success 'find-file-not-found-hooks)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1734 (insert "\n***** File " filename " not found! *****\n\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1735 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1736 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1737
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1738
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1739 ;;; Major mode (Man) interface:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1740
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1741 (defvar woman-mode-map nil "Keymap for woman mode.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1742
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1743 (unless woman-mode-map
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1744 (setq woman-mode-map (make-sparse-keymap))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1745 (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
1746
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1747 (define-key woman-mode-map "R" 'woman-reformat-last-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1748 (define-key woman-mode-map "w" 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1749 (define-key woman-mode-map "\en" 'WoMan-next-manpage)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1750 (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
1751 (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
1752
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1753 ;; We don't need to call `man' when we are in `woman-mode'.
72564
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1754 (define-key woman-mode-map [remap man] 'woman)
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1755 (define-key woman-mode-map [remap man-follow] 'woman-follow))
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1756
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1757 (defun woman-follow (topic)
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1758 "Get a Un*x manual page of the item under point and put it in a buffer."
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1759 (interactive (list (Man-default-man-entry)))
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1760 (if (or (not topic)
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1761 (string= topic ""))
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1762 (error "No item under point")
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1763 (woman (if (string-match Man-reference-regexp topic)
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1764 (substring topic 0 (match-end 1))
976ef29e497e * woman.el (woman-follow): New function, based on `man-follow'.
Chong Yidong <cyd@stupidchicken.com>
parents: 69813
diff changeset
1765 topic))))
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1766
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1767 (defun woman-follow-word (event)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1768 "Run WoMan with word under mouse as topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1769 Argument EVENT is the invoking mouse event."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1770 (interactive "e") ; mouse event
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1771 (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
1772 (woman (or (current-word t) "")))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1773
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1774 ;; 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
1775 (easy-menu-define
bab60576e8ec (woman-menu): Add a comment about the last change.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45209
diff changeset
1776 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
1777 ;; 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
1778 ;; find-function-search-for-symbol work. -- rost
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1779 woman-mode-map
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1780 "WoMan Menu"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1781 `("WoMan"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1782 ["WoMan..." woman t] ; [NAME CALLBACK ENABLE]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1783 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1784 ["Next Section" Man-next-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1785 ["Previous Section" Man-previous-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1786 ["Goto Section..." Man-goto-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1787 ["Goto See-Also Section" Man-goto-see-also-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1788 ["Follow Reference..." Man-follow-manual-reference t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1789 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1790 ["Previous WoMan Buffer" WoMan-previous-manpage t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1791 ["Next WoMan Buffer" WoMan-next-manpage t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1792 ["Bury WoMan Buffer" Man-quit t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1793 ["Kill WoMan Buffer" Man-kill t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1794 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1795 ;; ["Toggle Fill Frame Width" woman-toggle-fill-frame t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1796 ["Use Full Frame Width" woman-toggle-fill-frame
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1797 :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
1798 ["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
1799 ["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
1800 ["Use Default Main Faces" woman-default-faces t]
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1801 ["Make Contents Menu" (woman-imenu t) (not woman-imenu-done)]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1802 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1803 ["Describe (Wo)Man Mode" describe-mode t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1804 ["Mini Help" woman-mini-help t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1805 ,@(if (fboundp 'customize-group)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1806 '(["Customize..." (customize-group 'woman) t]))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1807 ["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
1808 "--"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1809 ("Advanced"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1810 ["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
1811 ["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
1812 ["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
1813 :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
1814 :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
1815 ["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
1816 :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
1817 :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
1818 ["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
1819 :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
1820 :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
1821 "--"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1822 "Emulation"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1823 ["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
1824 :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
1825 ["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
1826 :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
1827 )
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1828 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1829
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1830 (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
1831 "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
1832 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1833 (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
1834 (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
1835
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1836 (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
1837 "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
1838 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1839 (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
1840 (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
1841
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1842 (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
1843 "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
1844 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1845 (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
1846 (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
1847
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1848 (put 'woman-mode 'mode-class 'special)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1849
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1850 (defun woman-mode ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1851 "Turn on (most of) Man mode to browse a buffer formatted by WoMan.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1852 WoMan is an ELisp emulation of much of the functionality of the Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1853 `man' command running the standard UN*X man and ?roff programs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1854 WoMan author: F.J.Wright@Maths.QMW.ac.uk
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1855 WoMan version: see `woman-version'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1856 See `Man-mode' for additional details."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1857 (let ((Man-build-page-list (symbol-function 'Man-build-page-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1858 (Man-strip-page-headers (symbol-function 'Man-strip-page-headers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1859 (Man-unindent (symbol-function 'Man-unindent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1860 (Man-goto-page (symbol-function 'Man-goto-page)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1861 ;; Prevent inappropriate operations:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1862 (fset 'Man-build-page-list 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1863 (fset 'Man-strip-page-headers 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1864 (fset 'Man-unindent 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1865 (fset 'Man-goto-page 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1866 (unwind-protect
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1867 (delay-mode-hooks (Man-mode))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1868 ;; Restore the status quo:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1869 (fset 'Man-build-page-list Man-build-page-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1870 (fset 'Man-strip-page-headers Man-strip-page-headers)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1871 (fset 'Man-unindent Man-unindent)
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1872 (fset 'Man-goto-page Man-goto-page)))
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1873 (setq major-mode 'woman-mode
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1874 mode-name "WoMan")
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1875 ;; 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
1876 ;; not have pages)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1877 (kill-local-variable 'mode-line-buffer-identification)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1878 (use-local-map woman-mode-map)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1879 ;; Imenu support:
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1880 (set (make-local-variable 'imenu-generic-expression)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1881 ;; `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
1882 woman-imenu-generic-expression)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1883 (set (make-local-variable 'imenu-space-replacement) " ")
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1884 ;; For reformat ...
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1885 ;; 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
1886 (setq imenu--last-menubar-index-alist nil)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1887 ;; necessary to avoid re-installing the same imenu:
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1888 (setq woman-imenu-done nil)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1889 (if woman-imenu (woman-imenu))
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1890 (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
1891 (Man-highlight-references 'WoMan-xref-man-page))
63365
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1892 (set-buffer-modified-p nil)
2ea9fa348c21 (woman-mode-line-format): Delete constant.
Lute Kamstra <lute@gnu.org>
parents: 63264
diff changeset
1893 (run-mode-hooks 'woman-mode-hook))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1894
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1895 (defun woman-imenu (&optional redraw)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1896 "Add a \"Contents\" menu to the menubar.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1897 Optional argument REDRAW, if non-nil, forces mode line to be updated."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1898 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1899 (if woman-imenu-done
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1900 ;; This is PRIMARILY to avoid a bug in imenu-add-to-menubar that
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1901 ;; 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
1902 ;; in the same buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1903 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1904 (setq woman-imenu-done t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1905 (imenu-add-to-menubar woman-imenu-title)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1906 (if redraw (force-mode-line-update))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1907
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1908 (defun woman-toggle-fill-frame ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1909 "Toggle formatting to fill (most of) the width of the current frame."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1910 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1911 (setq woman-fill-frame (not woman-fill-frame))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1912 (message "Woman fill column set to %s."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1913 (if woman-fill-frame "frame width" woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1914 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1915
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1916 (defun woman-mini-help ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1917 "Display WoMan commands and user options in an `apropos' buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1918 ;; Based on apropos-command in apropos.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1919 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1920 (require 'apropos)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1921 (let ((message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1922 (let ((standard-output (get-buffer-create "*Apropos*")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1923 (print-help-return-message 'identity))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1924 (setq apropos-accumulator
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1925 (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
1926 (lambda (symbol)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1927 (or (commandp symbol)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1928 (user-variable-p symbol)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1929 ;; Filter out any inhibited symbols:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1930 (let ((tem apropos-accumulator))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1931 (while tem
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1932 (if (get (car tem) 'apropos-inhibit)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1933 (setq apropos-accumulator (delq (car tem) apropos-accumulator)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1934 (setq tem (cdr tem))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1935 ;; Find documentation strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1936 (let ((p apropos-accumulator)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1937 doc symbol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1938 (while p
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1939 (setcar p (list ; must have 3 elements:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1940 (setq symbol (car p)) ; 1. name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1941 (if (functionp symbol) ; 2. command doc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1942 (if (setq doc (documentation symbol t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1943 (substring doc 0 (string-match "\n" doc))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1944 "(not documented)"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1945 (if (user-variable-p symbol) ; 3. variable doc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1946 (if (setq doc (documentation-property
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1947 symbol 'variable-documentation t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1948 (substring doc 0 (string-match "\n" doc))))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1949 (setq p (cdr p))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1950 ;; Output the result:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1951 (and (apropos-print t nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1952 message
65582
4d1085b02d64 Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents: 65428
diff changeset
1953 (message "%s" message))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1954
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1955
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1956 (defun WoMan-getpage-in-background (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1957 "Use TOPIC to start WoMan from `Man-follow-manual-reference'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1958 ;; topic is a string, generally of the form "section topic"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1959 (let ((s (string-match " " topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1960 (if s (setq topic (substring topic (1+ s))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1961 (woman topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1962
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1963 (defvar WoMan-Man-start-time nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1964 "Used to record formatting time used by the `man' command.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1965
65359
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1966 ;; 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
1967 ;; 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
1968 ;; 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
1969 ;; 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
1970 ;; `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
1971 ;; 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
1972 ;; 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
1973
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1974 ;; (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
1975 ;; (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
1976 ;; "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
1977 ;; 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
1978 ;; (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
1979 ;; (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
1980 ;; (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
1981 ;; ;; Initiates man processing
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1982 ;; (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
1983 ;; ad-do-it))
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1984
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1985 ;; (defadvice Man-bgproc-sentinel
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1986 ;; (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
1987 ;; ;; Terminates man processing
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1988 ;; "Report formatting time."
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1989 ;; (let* ((time (current-time))
71de05246686 * woman.el (top): Remap `man' command by `woman' in
Michael Albinus <michael.albinus@gmx.de>
parents: 64762
diff changeset
1990 ;; (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
1991 ;; (- (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
1992 ;; (message "Man formatting done in %d seconds" time)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1993
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1994
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1995 ;;; Buffer handling:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1996
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1997 (defun WoMan-previous-manpage ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1998 "Find the previous WoMan buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1999 ;; Assumes currently in a WoMan buffer!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2000 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2001 (WoMan-find-buffer) ; find current existing buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2002 (if (null (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2003 (error "No previous WoMan buffer"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2004 (if (>= (setq woman-buffer-number (1+ woman-buffer-number))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2005 (length woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2006 (setq woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2007 (if (WoMan-find-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2008 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2009 (if (< (setq woman-buffer-number (1- woman-buffer-number)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2010 (setq woman-buffer-number (1- (length woman-buffer-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2011 (WoMan-previous-manpage)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2012
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2013 (defun WoMan-next-manpage ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2014 "Find the next WoMan buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2015 ;; Assumes currently in a WoMan buffer!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2016 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2017 (WoMan-find-buffer) ; find current existing buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2018 (if (null (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2019 (error "No next WoMan buffer"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2020 (if (< (setq woman-buffer-number (1- woman-buffer-number)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2021 (setq woman-buffer-number (1- (length woman-buffer-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2022 (if (WoMan-find-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2023 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2024 (WoMan-next-manpage)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2025
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2026 (defun WoMan-find-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2027 "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
2028 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
2029 alist in `woman-buffer-alist' and return nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2030 (if (zerop woman-buffer-number)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2031 (let ((buffer (get-buffer (cdr (car woman-buffer-alist)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2032 (if buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2033 (switch-to-buffer buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2034 ;; Delete alist element:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2035 (setq woman-buffer-alist (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2036 nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2037 (let* ((prev-ptr (nthcdr (1- woman-buffer-number) woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2038 (buffer (get-buffer (cdr (car (cdr prev-ptr))))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2039 (if buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2040 (switch-to-buffer buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2041 ;; Delete alist element:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2042 (setcdr prev-ptr (cdr (cdr prev-ptr)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2043 (if (>= woman-buffer-number (length woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2044 (setq woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2045 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2046 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2047
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2048
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2049 ;;; Syntax and display tables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2050
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2051 (defconst woman-escaped-escape-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2052 ;; An arbitrary unused control character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2053 "Internal character representation of escaped escape characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2054 (defconst woman-escaped-escape-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2055 (char-to-string woman-escaped-escape-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2056 "Internal string representation of escaped escape characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2057
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2058 (defconst woman-unpadded-space-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2059 ;; An arbitrary unused control character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2060 "Internal character representation of unpadded space characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2061 (defconst woman-unpadded-space-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2062 (char-to-string woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2063 "Internal string representation of unpadded space characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2064
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2065 (defvar woman-syntax-table nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2066 "Syntax table to support special characters used internally by WoMan.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2067
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2068 (if woman-syntax-table
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2069 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2070 (setq woman-syntax-table (make-syntax-table))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2071 ;; The following internal chars must NOT have whitespace syntax:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2072 (modify-syntax-entry woman-unpadded-space-char "." woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2073 (modify-syntax-entry woman-escaped-escape-char "." woman-syntax-table)
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 (defun woman-set-buffer-display-table ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2077 "Set up a display table for a WoMan buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2078 This display table is used for displaying internal special characters, but
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2079 does not interfere with any existing display table, e.g. for displaying
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2080 European characters."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2081 (setq buffer-display-table
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2082 ;; The following test appears to be necessary on some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2083 ;; non-Windows platforms, e.g. Solaris 2.6 when running on a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2084 ;; tty. Thanks to T. V. Raman <raman@Adobe.COM>.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2085 ;; The MS-DOS terminal also sets standard-display-table to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2086 ;; a non-nil value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2087 (if standard-display-table ; default is nil !!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2088 (copy-sequence standard-display-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2089 (make-display-table)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2090 ;; Display the following internal chars correctly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2091 (aset buffer-display-table woman-unpadded-space-char [?\ ])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2092 (aset buffer-display-table woman-escaped-escape-char [?\\]))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2093
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2094
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2095 ;;; The main decoding driver:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2096
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2097 (defvar font-lock-mode) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2098
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2099 (defun woman-decode-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2100 "Decode a buffer in UN*X man-page source format.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2101 No external programs are used."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2102 (interactive) ; mainly for testing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2103 (WoMan-log-begin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2104 (run-hooks 'woman-pre-format-hook)
74875
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2105
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2106 ;; look for macro sets that woman cannot handle:
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2107 (goto-char (point-min))
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2108 (let ((case-fold-search nil))
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2109 (unless (and (re-search-forward "^\\.SH[ \n]" (point-max) t)
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2110 (progn (goto-char (point-min))
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2111 (re-search-forward "^\\.TH[ \n]" (point-max) t))
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2112 (progn (goto-char (point-min))
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2113 (not (re-search-forward "^\\.\\([pnil]p\\|sh\\)[ \n]"
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2114 (point-max) t))))
75076
fcae879bd347 (woman-decode-buffer): Clarify error message.
Richard M. Stallman <rms@gnu.org>
parents: 74875
diff changeset
2115 (error "WoMan can only format man pages written with the usual `-man' macros")))
74875
26507757f962 (woman-decode-buffer): Signal error for alien macro sets. Suggested
Chong Yidong <cyd@stupidchicken.com>
parents: 74442
diff changeset
2116
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2117 (and (boundp 'font-lock-mode) font-lock-mode (font-lock-mode -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2118 ;; (fundamental-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2119 (let ((start-time (current-time)) ; (HIGH LOW MICROSEC)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2120 time) ; HIGH * 2**16 + LOW seconds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2121 (message "WoMan formatting buffer...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2122 ; (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2123 ; (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2124 ; ((re-search-forward "^\\.[ \t]*TH" nil t) ; wrong format if not found?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2125 ; (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2126 ; (delete-region (point-min) (point))) ; potentially dangerous!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2127 ; (t (message "WARNING: .TH request not found -- not man-page format?")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2128 (woman-decode-region (point-min) (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2129 (setq time (current-time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2130 time (+ (* (- (car time) (car start-time)) 65536)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2131 (- (cadr time) (cadr start-time))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2132 (message "WoMan formatting buffer...done in %d seconds" time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2133 (WoMan-log-end time))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2134 (run-hooks 'woman-post-format-hook))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2135
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2136 (defvar woman-string-alist ; rebound in woman-decode-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2137 '(("S" . "") ("R" . "(Reg.)") ("Tm" . "(TM)")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2138 ("lq" . "\"") ("rq" . "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2139 ("''" . "\"") ; needed for gcc.1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2140 (".T" . "") ; output device from -T option?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2141 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2142 "Alist of strings predefined in the -man macro package `tmac.an'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2143
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2144 (defvar woman-negative-vertical-space nil ; rebound in woman-decode-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2145 "Set to t if .sp N with N < 0 encountered.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2146
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2147 (defun woman-pre-process-region (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2148 "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
2149 To be called on original buffer and any .so insertions."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2150 ;; Hide escaped escapes \\ and printable escapes \e very early
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2151 ;; (to be re-instated as just \ very late!):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2152 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2153 ;; .eo turns off escape character processing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2154 (while (re-search-forward "\\(\\\\[\\e]\\)\\|^\\.eo" to t) ; \\
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2155 (if (match-string 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2156 (replace-match woman-escaped-escape-string t t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2157 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2158 ;; .ec turns on escape character processing (and sets the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2159 ;; escape character to its argument, if any, which I'm ignoring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2160 ;; for now!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2161 (while (and (re-search-forward "\\(\\\\\\)\\|^\\.ec" to t) ; \
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2162 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2163 (replace-match woman-escaped-escape-string t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2164 ;; ***** Need test for .ec arg and warning here! *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2165 (woman-delete-whole-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2166
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2167 ;; Delete comments .\"<anything>, \"<anything> and null requests.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2168 ;; (However, should null . requests cause a break?)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2169 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2170 (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
2171 (woman-delete-match 0)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2172
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2173 (defun woman-non-underline-faces ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2174 "Prepare non-underlined versions of underlined faces."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2175 (let ((face-list (face-list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2176 (while face-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2177 (let* ((face (car face-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2178 (face-name (symbol-name face)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2179 (if (and (string-match "\\`woman-" face-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2180 (face-underline-p face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2181 (let ((face-no-ul (intern (concat face-name "-no-ul"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2182 (copy-face face face-no-ul)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2183 (set-face-underline-p face-no-ul nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2184 (setq face-list (cdr face-list)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2185
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2186 ;; Preprocessors
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2187 ;; =============
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2188
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2189 ;; 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
2190 ;; 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
2191
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2192 ;; 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
2193 ;; 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
2194 ;; 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
2195 ;; first line must resemble
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2196 ;;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2197 ;; '\" <string>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2198 ;;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2199 ;; 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
2200 ;; 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
2201 ;; 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
2202 ;; 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
2203 ;; 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
2204 ;; (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
2205 ;; 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
2206
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2207 (defvar woman-emulate-tbl nil
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2208 "True if WoMan should emulate the tbl preprocessor.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2209 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
2210 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
2211
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2212 (defun woman-decode-region (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2213 "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
2214 ;; Suitable for use in format-alist.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2215 ;; But this requires care to control major mode implied font locking.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2216 ;; Must return the new end of file. See format.el for details.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2217 ;; NB: The `to' argument is bogus: it is not currently used, and if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2218 ;; it were it would need to be a marker rather than a position!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2219 ;; First force the correct environment:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2220 (let ((case-fold-search nil) ; This is necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2221 (woman-string-alist woman-string-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2222 (woman-fill-column woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2223 woman-negative-vertical-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2224 (setq woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2225 woman-prevailing-indent woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2226 woman-interparagraph-distance 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2227 woman-leave-blank-lines nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2228 woman-RS-left-margin nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2229 woman-RS-prevailing-indent nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2230 woman-adjust woman-adjust-both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2231 woman-justify (nth woman-adjust woman-justify-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2232 woman-nofill nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2233
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2234 (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
2235 (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
2236
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2237 ;; Prepare non-underlined versions of underlined faces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2238 (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
2239 ;; 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
2240 ;; `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
2241 (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
2242 (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
2243 (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
2244 (and (frame-live-p woman-frame) woman-frame)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2245
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2246 ;; Set syntax and display tables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2247 (set-syntax-table woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2248 (woman-set-buffer-display-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2249
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2250 ;; Based loosely on a suggestion by Theodore Jump:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2251 (if (or woman-fill-frame
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2252 (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
2253 (setq woman-fill-column (- (window-width) woman-default-indent)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2254
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2255 ;; Check for preprocessor requests:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2256 (goto-char from)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2257 (if (looking-at "'\\\\\"[ \t]*\\([a-z]+\\)")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2258 (let ((letters (append (match-string 1) nil)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2259 (if (memq ?t letters)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2260 (setq woman-emulate-tbl t
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2261 letters (delete ?t letters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2262 (if letters
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2263 (WoMan-warn "Unhandled preprocessor request letters %s"
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2264 (concat letters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2265 (woman-delete-line 1)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2266
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2267 (woman-pre-process-region from nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2268 ;; Process ignore requests, macro definitions,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2269 ;; conditionals and switch source requests:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2270 (woman0-roff-buffer from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2271
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2272 ;; Process \k escapes BEFORE changing tab width (?):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2273 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2274 (woman-mark-horizonal-position)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2275
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2276 ;; Set buffer-local variables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2277 (setq fill-column woman-fill-column
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2278 tab-width woman-tab-width)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2279
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2280 ;; Hide unpaddable and digit-width spaces \(space) and \0:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2281 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2282 (while (re-search-forward "\\\\[ 0]" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2283 (replace-match woman-unpadded-space-string t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2284
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2285 ;; Discard optional hyphen \%; concealed newlines \<newline>;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2286 ;; point-size change function \sN,\s+N, \s-N:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2287 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2288 (while (re-search-forward "\\\\\\([%\n]\\|s[-+]?[0-9]+\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2289 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2290
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2291 ;; BEWARE: THIS SHOULD PROBABLY ALL BE DONE MUCH LATER!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2292 ;; Process trivial escapes \-, \`, \.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2293 ;; (\' must be done after tab processing!):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2294 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2295 (while (re-search-forward "\\\\\\([-`.]\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2296 (replace-match "\\1"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2297 ;; NB: Must keep ALL zero-width characters \&, \|, and \^ until
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2298 ;; ALL requests processed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2299
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2300 ;; Process no-break requests and macros (including font-change macros):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2301 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2302 (woman1-roff-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2303
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2304 ;; Process strings and special character escapes \(xx:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2305 ;; (Must do this BEFORE fontifying!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2306 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2307 (woman-strings)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2308 ;; Special chars moved after translation in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2309 ;; `woman2-process-escapes' (for pic.1):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2310 ; (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2311 ; (woman-special-characters)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2312
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2313 ;; Process standard font-change requests and escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2314 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2315 (woman-change-fonts)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2316
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2317 ;; 1/2 em vertical motion \d, \u and general local vertical motion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2318 ;; \v'+/-N' simulated using TeX ^ and _ symbols for now.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2319 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2320 (let ((first t)) ; assume no nesting!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2321 (while (re-search-forward "\\\\\\([du]\\|v'[^']*'\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2322 (let* ((esc (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2323 (repl (if (or (= (aref esc 0) ?u)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2324 (and (>= (length esc) 2) (= (aref esc 2) ?-)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2325 "^" "_")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2326 (cond (first
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2327 (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
2328 (put-text-property (1- (point)) (point) 'face 'woman-addition)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2329 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2330 "Initial vertical motion escape \\%s simulated" esc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2331 (WoMan-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2332 " by TeX `%s' in woman-addition-face!" repl))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2333 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2334 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2335 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2336 "Terminal vertical motion escape \\%s ignored!" esc)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2337 (setq first (not first))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2338 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2339
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2340 ; ;; \h'+/-N' local horizontal motion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2341 ; ;; N may include width escape \w'...'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2342 ; ;; Implement arbitrary forward motion and non-overlapping backward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2343 ; ;; motion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2344 ; (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2345 ; (while (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2346 ; ;; Delimiter can be a special char escape sequence \(.. or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2347 ; ;; a single normal char (usually '):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2348 ; "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2349 ; nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2350 ; (let ((from (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2351 ; (delim (regexp-quote (match-string 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2352 ; (absolute (match-string 2)) ; absolute position?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2353 ; (N (woman-parse-numeric-arg)) ; distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2354 ; to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2355 ; msg) ; for warning
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2356 ; (if (not (looking-at delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2357 ; ;; Warn but leave escape in buffer unprocessed:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2358 ; (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2359 ; "Local horizontal motion (%s) delimiter error!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2360 ; (buffer-substring from (1+ (point)))) ; point at end of arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2361 ; (setq to (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2362 ; ;; For possible warning -- save before deleting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2363 ; msg (buffer-substring from to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2364 ; (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2365 ; (if absolute ; make relative
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2366 ; (setq N (- N (current-column))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2367 ; (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2368 ; ;; Move forward by inserting hard spaces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2369 ; (insert-char woman-unpadded-space-char N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2370 ; ;; Move backwards by deleting space,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2371 ; ;; first backwards then forwards:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2372 ; (while (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2373 ; (<= (setq N (1+ N)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2374 ; (cond ((memq (preceding-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2375 ; (delete-backward-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2376 ; ((memq (following-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2377 ; (delete-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2378 ; (t nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2379 ; (if (<= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2380 ; (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2381 ; "Negative horizontal motion (%s) would overwrite!" msg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2382 ; ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2383
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2384 ;; Process formatting macros
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2385 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2386 (woman2-roff-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2387
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2388 ;; Go back and process negative vertical space if necessary:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2389 (if woman-negative-vertical-space
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2390 (woman-negative-vertical-space from))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2391
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2392 (if woman-preserve-ascii
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2393 ;; Re-instate escaped escapes to just `\' and unpaddable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2394 ;; spaces to just `space', without inheriting any text
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2395 ;; properties. This is not necessary, UNLESS the buffer is to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2396 ;; be saved as ASCII.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2397 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2398 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2399 (while (search-forward woman-escaped-escape-string nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2400 (delete-char -1) (insert ?\\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2401 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2402 (while (search-forward woman-unpadded-space-string nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2403 (delete-char -1) (insert ?\ ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2404 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2405
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2406 ;; Must return the new end of file if used in format-alist.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2407 (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2408
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2409 (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
2410 "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
2411 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
2412 Preserves location of `point'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2413 ;; Moved from `woman-decode-region' for version 0.50.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2414 ;; N may include width escape \w'...' (but may already be processed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2415 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2416 (while (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2417 ;; Delimiter can be a special char escape sequence \(.. or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2418 ;; a single normal char (usually '):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2419 "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2420 to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2421 (let ((from (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2422 (delim (regexp-quote (match-string 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2423 (absolute (match-string 2)) ; absolute position?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2424 (N (woman-parse-numeric-arg)) ; distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2425 to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2426 msg) ; for warning
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2427 (if (not (looking-at delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2428 ;; Warn but leave escape in buffer unprocessed:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2429 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2430 "Local horizontal motion (%s) delimiter error!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2431 (buffer-substring from (1+ (point)))) ; point at end of arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2432 (setq to (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2433 ;; For possible warning -- save before deleting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2434 msg (buffer-substring from to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2435 (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2436 (if absolute ; make relative
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2437 (setq N (- N (current-column))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2438 (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2439 ;; Move forward by inserting hard spaces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2440 (insert-char woman-unpadded-space-char N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2441 ;; Move backwards by deleting space,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2442 ;; first backwards then forwards:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2443 (while (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2444 (<= (setq N (1+ N)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2445 (cond ((memq (preceding-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2446 (delete-backward-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2447 ((memq (following-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2448 (delete-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2449 (t nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2450 (if (<= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2451 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2452 "Negative horizontal motion (%s) would overwrite!" msg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2453 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2454 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2455
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2456
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2457
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2458 ;; 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
2459 ;; 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
2460 ;; expansions.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2461
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2462 (defvar woman0-if-to) ; marker bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2463 (defvar woman0-macro-alist) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2464 (defvar woman0-search-regex) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2465 (defvar woman0-search-regex-start ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2466 "^[.'][ \t]*\\(ig\\|if\\|ie\\|el\\|so\\|rn\\|de\\|am")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2467 (defconst woman0-search-regex-end "\\)\\([ \t]+\\|$\\)")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2468 ;; May need other terminal characters, e.g. \, but NOT \n!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2469 ;; Alternatively, force maximal match (Posix?)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2470
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2471 (defvar woman0-rename-alist) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2472
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2473 (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
2474 "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
2475 Start at FROM and re-scan new text as appropriate."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2476 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2477 (let ((woman0-if-to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2478 request woman0-macro-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2479 (woman0-search-regex-start woman0-search-regex-start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2480 (woman0-search-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2481 (concat woman0-search-regex-start woman0-search-regex-end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2482 woman0-rename-alist)
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
2483 (set-marker-insertion-type woman0-if-to t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2484 (while (re-search-forward woman0-search-regex nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2485 (setq request (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2486 (cond ((string= request "ig") (woman0-ig))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2487 ((string= request "if") (woman0-if "if"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2488 ((string= request "ie") (woman0-if "ie"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2489 ((string= request "el") (woman0-el))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2490 ((string= request "so") (woman0-so))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2491 ((string= request "rn") (woman0-rn))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2492 ((string= request "de") (woman0-de))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2493 ((string= request "am") (woman0-de 'append))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2494 (t (woman0-macro request))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2495 (set-marker woman0-if-to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2496 (woman0-rename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2497 ;; Should now re-run `woman0-roff-buffer' if any renaming was
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2498 ;; done, but let's just hope this is not necessary for now!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2499 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2500
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2501 (defun woman0-ig ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2502 ".ig yy -- Discard input up to `.yy', which defaults to `..')."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2503 ;; The terminal request MUST begin with . (not ')!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2504 (looking-at "\\(\\S +\\)?")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2505 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2506 (let ((yy (or (match-string 1) "."))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2507 (from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2508 (if (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2509 (concat "^\\.[ \t]*" (regexp-quote yy) ".*\n") nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2510 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2511 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2512 "ig request ignored -- terminator `.%s' not found!" yy)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2513 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2514 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2515
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2516 (defsubst woman0-process-escapes (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2517 "Process escapes within an if/ie condition between FROM and TO."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2518 (woman-strings to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2519 (goto-char from) ; necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2520 ;; Strip font-change escapes:
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2521 (while (re-search-forward "\\\\f\\(\\[[^]]+\\]\\|(..\\|.\\)" to t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2522 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2523 (goto-char from) ; necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2524 (woman2-process-escapes to 'numeric))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2525
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2526 (defun woman0-if (request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2527 ".if/ie c anything -- Discard unless c evaluates to true.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2528 Remember condition for use by a subsequent `.el'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2529 REQUEST is the invoking directive without the leading dot."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2530 ;; c evaluates to a one-character built-in condition name or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2531 ;; 'string1'string2' or a number > 0, prefix ! negates.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2532 ;; \{ ... \} for multi-line use.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2533 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2534 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2535 ;; (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2536 ;; Process escapes in condition:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2537 (let ((from (point)) negated n (c 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2538 (set-marker woman0-if-to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2539 (save-excursion (skip-syntax-forward "^ ") (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2540 ;; Process condition:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2541 (if (setq negated (= (following-char) ?!)) (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2542 (cond
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2543 ;; ((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
2544 ;; ((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
2545 ((looking-at "[ntoe]")
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2546 (setq c (memq (following-char) woman-if-conditions-true)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2547 ;; Unrecognised letter so reject:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2548 ((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
2549 (WoMan-warn "%s %s -- unrecognized condition name rejected!"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2550 request (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2551 ;; Accept strings if identical:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2552 ((save-restriction
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2553 (narrow-to-region from woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2554 ;; String delimiter can be any non-numeric character,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2555 ;; including a special character escape:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2556 (looking-at "\\(\\\\(..\\|[^0-9]\\)\\(.*\\)\\1\\(.*\\)\\1\\'"))
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
2557 (let ((end1 (copy-marker (match-end 2) t))) ; End of first string.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2558 ;; Delete 2nd and 3rd delimiters to avoid processing them:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2559 (delete-region (match-end 3) woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2560 (delete-region (match-end 2) (match-beginning 3))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2561 (goto-char (match-end 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2562 (woman0-process-escapes (point) woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2563 (setq c (string= (buffer-substring (point) end1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2564 (buffer-substring end1 woman0-if-to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2565 (set-marker end1 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2566 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2567 ;; Accept numeric value if > 0:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2568 ((numberp (setq n (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2569 (woman0-process-escapes from woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2570 (woman-parse-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2571 (setq c (> n 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2572 (goto-char from))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2573 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2574 (if (eq c 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2575 (woman-if-ignore woman0-if-to request) ; ERROR!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2576 (woman-if-body request woman0-if-to (eq c negated)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2577 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2578
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2579 (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
2580 "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
2581 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
2582 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
2583 If DELETE is non-nil then delete from point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2584 ;; Assume concealed newlines already processed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2585 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2586 (if to (delete-region (point) to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2587 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2588 (cond (;;(looking-at "[^{\n]*\\\\{\\s *") ; multi-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2589 ;; allow escaped newlines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2590 (looking-at "[^{\n]*\\(\\\\\n\\)*\\\\{\\s *\\(\\\\\n\\)*") ; multi-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2591 ;; including preceding .if(s) and following newline
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2592 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2593 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2594 ;; Allow for nested \{ ... \} -- BUT BEWARE that this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2595 ;; algorithm only supports one level of nesting!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2596 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2597 (and (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2598 ;; "\\(\\\\{\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2599 ;; Interpret bogus `el \}' as `el \{',
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2600 ;; especially for Tcl/Tk man pages:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2601 "\\(\\\\{\\|el[ \t]*\\\\}\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2602 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2603 (re-search-forward "\\\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2604 (delete-region (if delete from (match-beginning 0)) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2605 (if (looking-at "^$") (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2606 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2607 (delete (woman-delete-line 1)) ; single-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2608 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2609 ;; Process matching .el anything:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2610 (cond ((string= request "ie")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2611 ;; Discard unless previous .ie c `evaluated to false'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2612 (cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2613 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2614 (woman-if-body "el" nil (not delete)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2615 ;; Got here after processing a single-line `.ie' as a body
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2616 ;; clause to be discarded:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2617 ((string= request "el")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2618 (cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2619 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2620 (woman-if-body "el" nil t))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2621 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2622 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2623 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2624
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2625 (defun woman0-el ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2626 "Isolated .el request -- should not happen!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2627 (WoMan-warn "el request without matching `ie' rejected!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2628 (cond (woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2629 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2630 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2631 (woman-if-body "el" nil t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2632 (t ; Ignore -- leave in buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2633 ;; This does not work too well, but it's only for debugging!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2634 (skip-chars-forward "^ \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2635 (if (looking-at "[ \t]*\\{") (search-forward "\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2636 (forward-line 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2637
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2638 (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
2639 "Ignore but warn about an if request ending at TO, named REQUEST."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2640 (WoMan-warn-ignored request "ignored -- condition not handled!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2641 (if woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2642 (woman-if-body request to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2643 ;; Ignore -- leave in buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2644 ;; This does not work too well, but it's only for debugging!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2645 (skip-chars-forward "^ \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2646 (if (looking-at "[ \t]*\\{") (search-forward "\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2647 (forward-line 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2648
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2649 (defun woman0-so ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2650 ".so filename -- Switch source file. `.so' requests may be nested."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2651 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2652 ;; (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2653 (let* ((beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2654 (end (progn (woman-forward-arg 'unquote) (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2655 (name (buffer-substring beg end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2656 (filename name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2657 ;; If the specified file does not exist in this ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2658 (or (file-exists-p filename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2659 ;; or the parent directory ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2660 (file-exists-p
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2661 (setq filename (concat "../" name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2662 ;; then use the WoMan search mechanism to find the filename ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2663 (setq filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2664 (woman-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2665 (file-name-sans-extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2666 (file-name-nondirectory name))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2667 ;; Cannot find the file, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2668 (kill-buffer (current-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2669 (error "File `%s' not found" name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2670 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2671 (woman-delete-line 1)
73060
5d2e9706764f (woman0-so): Use `let*', not `let'.
Juanma Barranquero <lekktu@gmail.com>
parents: 73059
diff changeset
2672 (let* ((from (point))
5d2e9706764f (woman0-so): Use `let*', not `let'.
Juanma Barranquero <lekktu@gmail.com>
parents: 73059
diff changeset
2673 (length (woman-insert-file-contents filename 0))
5d2e9706764f (woman0-so): Use `let*', not `let'.
Juanma Barranquero <lekktu@gmail.com>
parents: 73059
diff changeset
2674 (to (copy-marker (+ from length) t)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2675 (woman-pre-process-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2676 (set-marker to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2677 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2678 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2679
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2680
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2681 ;;; Process macro definitions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2682
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2683 (defun woman0-rn ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2684 "Process .rn xx yy -- rename macro xx to yy."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2685 ;; For now, done backwards AFTER all macro expansion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2686 ;; Should also allow requests and strings to be renamed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2687 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2688 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2689 (let* ((beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2690 (end (progn (woman-forward-arg 'unquote 'concat) (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2691 (old (buffer-substring beg end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2692 new)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2693 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2694 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2695 (setq beg (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2696 end (progn (woman-forward-arg 'unquote) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2697 new (buffer-substring beg end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2698 woman0-rename-alist (cons (cons new old) woman0-rename-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2699 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2700 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2701
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2702 (defun woman0-rename ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2703 "Effect renaming required by .rn requests."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2704 ;; For now, do this backwards AFTER all macro expansion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2705 (while woman0-rename-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2706 (let* ((new (car woman0-rename-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2707 (old (cdr new))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2708 (new (car new)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2709 (setq woman0-rename-alist (cdr woman0-rename-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2710 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2711 (setq new (concat "^[.'][ \t]*" (regexp-quote new)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2712 (setq old (concat "." old))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2713 (while (re-search-forward new nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2714 (replace-match old nil t)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2715
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2716 (defconst woman-unescape-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2717 (concat woman-escaped-escape-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2718 "\\(" woman-escaped-escape-string "\\)?"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2719
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2720 (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
2721 "Replace escape sequences in the body of MACRO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2722 Replaces || by |, but | by \, where | denotes the internal escape."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2723 (let (start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2724 (while (setq start (string-match woman-unescape-regex macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2725 (setq macro
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2726 (if (match-string 1 macro)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2727 (replace-match "" t t macro 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2728 (replace-match "\\" t t macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2729 start (1+ start)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2730 macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2731
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2732 (defun woman0-de (&optional append)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2733 "Process .de/am xx yy -- (re)define/append macro xx; end at `..'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2734 \(Should be up to call of yy, which defaults to `.')
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2735 Optional argument APPEND, if non-nil, means append macro."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2736 ;; Modelled on woman-strings. BEWARE: Processing of .am is a hack!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2737 ;; Add support for .rm?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2738 ;; (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2739 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2740 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2741 (looking-at "[^ \t\n]+") ; macro name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2742 (let* ((macro (match-string 0)) from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2743 (previous (assoc macro woman0-macro-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2744 (if (not previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2745 (setq woman0-search-regex-start
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2746 (concat woman0-search-regex-start "\\|" (regexp-quote macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2747 woman0-search-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2748 (concat woman0-search-regex-start woman0-search-regex-end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2749 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2750 ;; Macro body runs from start of next line to line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2751 ;; beginning with `..'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2752 ;; The terminal request MUST begin with `.' (not ')!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2753 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2754 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2755 (re-search-forward "^\\.[ \t]*\\.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2756 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2757 (let ((body (woman-unescape (buffer-substring from (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2758 (if (and append previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2759 (setq previous (cdr previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2760 body (concat body (cdr previous))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2761 append (car previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2762 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2763 (setq macro (cons macro (cons append body))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2764 ;; This should be an update, but consing a new string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2765 ;; onto the front of the alist has the same effect:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2766 (setq woman0-macro-alist (cons macro woman0-macro-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2767 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2768 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2769 (backward-char) ; return to end of .de/am line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2770 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2771 (beginning-of-line) ; delete .de/am line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2772 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2773
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2774 (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
2775 "Process the macro call named REQUEST."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2776 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2777 (let ((macro (assoc request woman0-macro-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2778 (if macro
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2779 (woman-interpolate-macro (cdr macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2780 ;; SHOULD DELETE THE UNINTERPRETED REQUEST!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2781 ;; Output this message once only per call (cf. strings)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2782 (WoMan-warn "Undefined macro %s not interpolated!" request))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2783
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2784 (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
2785 "Interpolate (.de) or append (.am) expansion of MACRO into the buffer."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2786 ;; Could make this more efficient by checking which arguments are
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2787 ;; actually used in the expansion!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2788 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2789 ;; Process arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2790 (let ((argno 0) (append (car macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2791 argno-string formal-arg from actual-arg start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2792 (setq macro (cdr macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2793 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2794 ;; Get next actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2795 (setq argno (1+ argno))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2796 (setq argno-string (format "%d" argno))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2797 (setq formal-arg (concat "\\\\\\$" argno-string)) ; regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2798 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2799 (woman-forward-arg 'unquote 'noskip)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2800 (setq actual-arg (buffer-substring from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2801 (skip-chars-forward " \t") ; now skip following whitespace!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2802 ;; Replace formal arg with actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2803 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2804 (while (setq start (string-match formal-arg macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2805 (setq macro (replace-match actual-arg t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2806 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2807 ;; Delete any remaining formal arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2808 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2809 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2810 (setq start (string-match "\\\\\\$." macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2811 (setq macro (replace-match "" t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2812 ;; Replace .$ number register with actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2813 ;; (Do this properly via register mechanism later!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2814 (setq start nil)
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 (setq start (string-match "\\\\n(\\.\\$" macro start)) ; regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2817 (setq macro (replace-match argno-string t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2818 (if append
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2819 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2820 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2821 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2822 (save-excursion ; leave point at start of new text
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2823 (insert macro))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2824
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2825
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2826 ;;; Process strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2827
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2828 (defun woman-match-name ()
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2829 "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
2830 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
2831 special characters."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2832 (cond ((= (following-char) ?\[ )
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2833 (forward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2834 (re-search-forward "[^]]+")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2835 (forward-char)) ; skip closing ]
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2836 ((= (following-char) ?\( )
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2837 (forward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2838 (re-search-forward ".."))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2839 (t (re-search-forward "."))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2840
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2841 (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
2842 "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
2843 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
2844 interpolated by `\*x' and `\*(xx' escapes."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2845 ;; Add support for .as and .rm?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2846 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2847 ;; Find .ds requests and \* escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2848 (re-search-forward "\\(^[.'][ \t]*ds\\)\\|\\\\\\*" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2849 (cond ((match-string 1) ; .ds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2850 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2851 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2852 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2853 (re-search-forward "[^ \t\n]+")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2854 (let ((string (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2855 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2856 ; (setq string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2857 ; (cons string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2858 ; ;; hack (?) for CGI.man!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2859 ; (cond ((looking-at "\"\"") "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2860 ; ((looking-at ".*") (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2861 ; ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2862 ;; Above hack causes trouble in arguments!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2863 (looking-at ".*")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2864 (setq string (cons string (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2865 ;; This should be an update, but consing a new string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2866 ;; onto the front of the alist has the same effect:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2867 (setq woman-string-alist (cons string woman-string-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2868 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2869 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2870 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2871 (t ; \*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2872 (let ((beg (match-beginning 0)))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2873 (woman-match-name)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2874 (let* ((stringname (match-string 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2875 (string (assoc stringname woman-string-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2876 (cond (string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2877 (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2878 ;; Temporary hack in case string starts with a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2879 ;; control character:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2880 (if (bolp) (insert-before-markers "\\&"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2881 (insert-before-markers (cdr string)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2882 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2883 (WoMan-warn "Undefined string %s not interpolated!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2884 stringname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2885 (cond (woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2886 ;; Output above message once only per call
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2887 (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2888 (setq woman-string-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2889 (cons (cons stringname "")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2890 woman-string-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2891 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2892 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2893 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2894 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2895
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2896
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2897 ;;; Process special character escapes \(xx:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2898
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2899 (defconst woman-special-characters
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2900 ;; To be built heuristically as required!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2901 ;; MUST insert all characters as strings for correct conversion to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2902 ;; multibyte representation!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2903 '(("em" "--" "\276" . t) ; 3/4 Em dash
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2904 ("bu" "*" "\267" . t) ; bullet
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2905 ("fm" "'") ; foot mark
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2906 ("co" "(C)" "\251") ; copyright
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2907
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2908 ("pl" "+" "+" . t) ; math plus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2909 ("mi" "-" "-" . t) ; math minus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2910 ("**" "*" "*" . t) ; math star
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2911 ("aa" "'" "\242" . t) ; acute accent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2912 ("ul" "_") ; underrule
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2913
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2914 ("*S" "Sigma" "S" . t) ; Sigma
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2915
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2916 (">=" ">=" "\263" . t) ; >=
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2917 ("<=" "<=" "\243" . t) ; <=
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2918 ("->" "->" "\256" . t) ; right arrow
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2919 ("<-" "<-" "\254" . t) ; left arrow
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2920 ("mu" " x " "\264" . t) ; multiply
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2921 ("+-" "+/-" "\261" . t) ; plus-minus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2922 ("bv" "|") ; bold vertical
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2923
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2924 ;; groff etc. extensions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2925 ("lq" "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2926 ("rq" "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2927 ("aq" "'")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2928 ("ha" "^")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2929 ("ti" "~")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2930 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2931 "Alist of special character codes with ASCII and extended-font equivalents.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2932 Each alist elements has the form
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2933 (input-string ascii-string extended-font-string . use-symbol-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2934 where
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2935 * `\\(input-string' is the ?roff encoding,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2936 * `ascii-string' is the (multi-character) ASCII simulation,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2937 * `extended-font-string' is the single-character string representing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2938 the character position in the extended 256-character font, and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2939 * `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
2940 i.e. omitted, to indicate use of the default font.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2941 Any element may be nil. Avoid control character codes (0 to \\37, \\180
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2942 to \\237) in `extended-font-string' for now, since they can be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2943 displayed only with a modified display table.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2944
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2945 Use the WoMan command `woman-display-extended-fonts' or a character
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2946 map accessory to help construct this alist.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2947
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2948 (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
2949 "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
2950 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
2951 (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
2952 (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
2953 (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
2954 t)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2955
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2956 (defun woman-special-characters (to)
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2957 "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
2958 \(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
2959 (while (re-search-forward "\\\\\\(?:(\\(..\\)\\|\\[\\([[^]]+\\)\\]\\)" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2960 (let* ((name (or (match-string-no-properties 1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2961 (match-string-no-properties 2)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2962 (replacement (assoc name woman-special-characters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2963 (unless
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2964 (and
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2965 replacement
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2966 (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
2967 (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
2968 ;; Need symbol font:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2969 (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
2970 (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
2971 'woman-symbol))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2972 ;; Need extended font:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2973 (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
2974 (woman-replace-match (nth 2 replacement))))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2975 ((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
2976 (woman-replace-match (cadr replacement)))))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2977 (WoMan-warn (concat "Special character "
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2978 (if (match-string 1) "\\(%s" "\\[%s]")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2979 " not interpolated!") name)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2980 (if woman-ignore (woman-delete-match 0))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2981 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2982
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2983 (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
2984 "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
2985 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
2986 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
2987 Useful for constructing the alist variable `woman-special-characters'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2988 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2989 (with-output-to-temp-buffer "*WoMan Extended Font Map*"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2990 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2991 (set-buffer standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2992 (let ((i 32))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2993 (while (< i 256)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2994 (insert (format "\\%03o " i) (string i) " " (string i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2995 (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
2996 'face 'woman-symbol)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2997 (insert " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2998 (setq i (1+ i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2999 (when (= i 128) (setq i 160) (insert "\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3000 (if (zerop (% i 8)) (insert "\n")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3001 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3002 (print-help-return-message)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3003
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3004
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3005 ;;; Formatting macros that do not cause a break:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3006
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3007 (defvar request) ; Bound locally by woman1-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3008 (defvar unquote) ; Bound locally by woman1-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3009
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3010 (defun woman-unquote (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3011 "Delete any double-quote characters between point and TO.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3012 Leave point at TO (which should be a marker)."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3013 (let (in-quote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3014 (while (search-forward "\"" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3015 (if (and in-quote (looking-at "\""))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3016 ;; Repeated double-quote represents single double-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3017 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3018 (if (or in-quote (looking-at ".*\"")) ; paired
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3019 (delete-char -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3020 (setq in-quote (not in-quote))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3021 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3022 (if in-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3023 (WoMan-warn "Unpaired \" in .%s arguments." request))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3024 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3025
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3026 (defsubst woman-unquote-args ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3027 "Delete any double-quote characters up to the end of the line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3028 (woman-unquote (save-excursion (end-of-line) (point-marker))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3029
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3030 (defun woman1-roff-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3031 "Process non-breaking requests."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3032 (let ((case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3033 request fn unquote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3034 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3035 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3036 (re-search-forward woman-request-regexp nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3037 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3038 ;; Construct woman function to call:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3039 ((setq fn (intern-soft
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3040 (concat "woman1-"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3041 (setq request (match-string 1)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3042 (if (get fn 'notfont) ; not a font-change request
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3043 (funcall fn)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3044 ;; Delete request or macro name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3045 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3046 ;; If no args then apply to next line else unquote args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3047 ;; (unquote is used by called function):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3048 (setq unquote (not (eolp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3049 (if (eolp) (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3050 ; ;; Hide leading control character in unquoted argument:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3051 ; (cond ((memq (following-char) '(?. ?'))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3052 ; (insert "\\&")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3053 ; (beginning-of-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3054 ;; Call the appropriate function:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3055 (funcall fn)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3056 ;; Hide leading control character in quoted argument (only):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3057 (if (and unquote (memq (following-char) '(?. ?')))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3058 (insert "\\&"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3059 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3060 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3061
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3062 ;;; Font-changing macros:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3063
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3064 (defun woman1-B ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3065 ".B -- Set words of current line in bold font."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3066 (woman1-B-or-I ".ft B\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3067
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3068 (defun woman1-I ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3069 ".I -- Set words of current line in italic font."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3070 (woman1-B-or-I ".ft I\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3071
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3072 (defun woman1-B-or-I (B-or-I)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3073 ".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
3074 B-OR-I is the appropriate complete control line."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3075 ;; Should NOT concatenate the arguments!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3076 (insert B-or-I) ; because it might be a control line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3077 ;; Return to bol to process .SM/.B, .B/.if etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3078 ;; or start of first arg to hide leading control char.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3079 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3080 (if unquote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3081 (woman-unquote-args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3082 (while (looking-at "^[.']") (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3083 (end-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3084 (delete-horizontal-space))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3085 (insert "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3086
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3087 (defun woman1-SM ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3088 ".SM -- Set the current line in small font, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3089 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3090
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3091 (defalias 'woman1-SB 'woman1-B)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3092 ;; .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
3093 ;; (This is what /usr/local/share/groff/tmac/tmac.an does. The
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3094 ;; Linux man.7 is wrong about this!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3095
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3096 (defun woman1-BI ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3097 ".BI -- Join words of current line alternating bold and italic fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3098 (woman1-alt-fonts (list "\\fB" "\\fI")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3099
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3100 (defun woman1-BR ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3101 ".BR -- Join words of current line alternating bold and Roman fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3102 (woman1-alt-fonts (list "\\fB" "\\fR")))
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 woman1-IB ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3105 ".IB -- Join words of current line alternating italic and bold fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3106 (woman1-alt-fonts (list "\\fI" "\\fB")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3107
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3108 (defun woman1-IR ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3109 ".IR -- Join words of current line alternating italic and Roman fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3110 (woman1-alt-fonts (list "\\fI" "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3111
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3112 (defun woman1-RB ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3113 ".RB -- Join words of current line alternating Roman and bold fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3114 (woman1-alt-fonts (list "\\fR" "\\fB")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3115
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3116 (defun woman1-RI ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3117 ".RI -- Join words of current line alternating Roman and italic fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3118 (woman1-alt-fonts (list "\\fR" "\\fI")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3119
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3120 (defun woman1-alt-fonts (fonts)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3121 "Join words using alternating fonts in FONTS, which MUST be a dynamic list."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3122 (nconc fonts fonts) ; circular list!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3123 (insert (car fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3124 ;; Return to start of first arg to hide leading control char:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3125 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3126 (setq fonts (cdr fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3127 (woman-forward-arg unquote 'concat) ; unquote is bound above
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3128 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3129 (insert (car fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3130 (setq fonts (cdr fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3131 (woman-forward-arg unquote 'concat)) ; unquote is bound above
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3132 (insert "\\fR")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3133 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3134
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3135 (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
3136 "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
3137 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
3138 If optional arg CONCAT is non-nil then join arguments."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3139 (if (eq (following-char) ?\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3140 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3141 (if unquote (delete-char 1) (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3142 (re-search-forward "\"\\|$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3143 ;; Repeated double-quote represents single double-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3144 (while (eq (following-char) ?\") ; paired
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3145 (if unquote (delete-char 1) (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3146 (re-search-forward "\"\\|$"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3147 (if (eq (preceding-char) ?\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3148 (if unquote (delete-backward-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3149 (WoMan-warn "Unpaired \" in .%s arguments." request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3150 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3151 ;; (re-search-forward "[^\\\n] \\|$") ; inconsistent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3152 (skip-syntax-forward "^ "))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3153 (cond ((null concat) (skip-chars-forward " \t")) ; don't skip eol!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3154 ((eq concat 'noskip)) ; do not skip following whitespace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3155 (t (woman-delete-following-space)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3156 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3157
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3158
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3159 ;; 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
3160 ;; 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
3161 ;; and further processing.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3162
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3163 (put 'woman1-TP 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3164 (defun woman1-TP ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3165 ".TP -- After tag line, reset font to Roman for paragraph body."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3166 ;; Same for .IP, but forward only 1 line?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3167 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3168 ;; May be an `irrelevant' control line in the way, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3169 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3170 (forward-line (if (looking-at "\\.\\S-+[ \t]*$") 2 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3171 ;; May be looking at control line, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3172 (insert ".ft R\n")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3173
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3174 (put 'woman1-ul 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3175 (defun woman1-ul ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3176 ".ul N -- Underline (italicize) the next N input lines, default N = 1."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3177 (let ((N (if (eolp) 1 (woman-parse-numeric-arg)))) ; woman-get-numeric-arg ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3178 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3179 (insert ".ft I\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3180 (forward-line N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3181 (insert ".ft R\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3182 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3183
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3184 ;;; Other non-breaking requests:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3185
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3186 ;; Hyphenation
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3187 ;; Warnings commented out.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3188
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3189 (put 'woman1-nh 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3190 (defun woman1-nh ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3191 ".nh -- No hyphenation, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3192 ;; Must be handled here to avoid breaking!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3193 ;; (WoMan-log-1 ".nh request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3194 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3195
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3196 (put 'woman1-hy 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3197 (defun woman1-hy ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3198 ".hy N -- Set hyphenation mode to N, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3199 ;; (WoMan-log-1 ".hy request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3200 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3201
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3202 (put 'woman1-hc 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3203 (defun woman1-hc ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3204 ".hc c -- Set hyphenation character to c, i.e. delete it!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3205 (let ((c (char-to-string (following-char))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3206 ;; (WoMan-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3207 ;; "Hyphenation character %s deleted -- hyphenation not supported!" c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3208 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3209 (setq c (concat "\\(" c "\\)\\|^[.'][ \t]*hc"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3210 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3211 (while (and (re-search-forward c nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3212 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3213 (delete-char -1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3214 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3215
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3216 (put 'woman1-hw 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3217 (defun woman1-hw ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3218 ".hw words -- Set hyphenation exception words, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3219 ;; (WoMan-log-1 ".hw request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3220 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3221
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3222 ;;; Other non-breaking requests correctly ignored by nroff:
28832
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-ps 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3225 (defalias 'woman1-ps 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3226 ;; .ps -- Point size -- 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 (put 'woman1-ss 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3229 (defalias 'woman1-ss 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3230 ;; .ss -- Space-character size -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3231
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3232 (put 'woman1-cs 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3233 (defalias 'woman1-cs 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3234 ;; .cs -- Constant character space (width) mode -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3235
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3236 (put 'woman1-ne 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3237 (defalias 'woman1-ne 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3238 ;; .ne -- Need vertical space -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3239
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3240 (put 'woman1-vs 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3241 (defalias 'woman1-vs 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3242 ;; .vs -- Vertical base line spacing -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3243
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3244 (put 'woman1-bd 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3245 (defalias 'woman1-bd 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3246 ;; .bd -- Embolden font -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3247
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3248 ;;; Non-breaking SunOS-specific macros:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3249
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3250 (defun woman1-TX ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3251 ".TX t p -- Resolve SunOS abbrev t and join to p (usually punctuation)."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3252 (insert "SunOS ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3253 (woman-forward-arg 'unquote 'concat))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3254
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3255 (put 'woman1-IX 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3256 (defalias 'woman1-IX 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3257 ;; .IX -- Index macro, for Sun internal use -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3258
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3259
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3260 ;;; Direct font selection:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3261
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3262 (defconst woman-font-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3263 '(("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
3264 ("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
3265 ("B" . woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3266 ("P" . previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3267 ("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
3268 ("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
3269 ("3" . woman-bold) ; used in bash.1
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3270 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3271 "Alist of ?roff font indicators and woman font variables and names.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3272
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3273 (defun woman-change-fonts ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3274 "Process font changes."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3275 ;; ***** NEEDS REVISING IF IT WORKS OK *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3276 ;; 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
3277 ;; Should .SH/.SS reset font?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3278 ;; Font size setting macros (?) should reset font.
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3279 (let ((font-alist woman-font-alist) ; for local updating
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3280 (previous-pos (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3281 (previous-font 'default)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3282 (current-font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3283 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3284 ;; Find font requests, paragraph macros and font escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3285 (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3286 "^[.'][ \t]*\\(\\(\\ft\\)\\|\\(.P\\)\\)\\|\\(\\\\f\\)" nil 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3287 (let (font beg notfont)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3288 ;; Match font indicator and leave point at end of sequence:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3289 (cond ((match-string 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3290 ;; .ft request found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3291 (setq beg (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3292 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3293 (if (eolp) ; default is previous font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3294 (setq font previous-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3295 (looking-at "[^ \t\n]+"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3296 (forward-line)) ; end of control line and \n
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3297 ((match-string 3)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3298 ;; Macro that resets font found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3299 (setq font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3300 ((match-string 4)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3301 ;; \f escape found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3302 (setq beg (match-beginning 0))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3303 (woman-match-name))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3304 (t (setq notfont t)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3305 (if notfont
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3306 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3307 ;; Get font name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3308 (or font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3309 (let ((fontstring (match-string 0)))
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3310 (setq font (assoc fontstring font-alist)
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3311 ;; NB: font-alist contains VARIABLE NAMES.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3312 font (if font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3313 (cdr font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3314 (WoMan-warn "Unknown font %s." fontstring)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3315 ;; Output this message once only per call ...
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3316 (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
3317 (cons (cons fontstring 'woman-unknown)
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3318 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
3319 'woman-unknown)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3320 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3321 ;; Delete font control line or escape sequence:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3322 (cond (beg (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3323 (if (eq font 'previous) (setq font previous-font))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3324 (woman-set-face previous-pos (point) current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3325 (if beg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3326 ;; Explicit font control
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3327 (setq previous-pos (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3328 previous-font current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3329 ;; Macro that resets font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3330 ;; (forward-line) ; DOES NOT WORK! but unnecessary?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3331 ;; Must process font changes in any paragraph tag!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3332 (setq previous-pos (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3333 previous-font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3334 (setq current-font font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3335 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3336 ;; Set font after last request up to eob:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3337 (woman-set-face previous-pos (point) current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3338 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3339
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3340 (defun woman-set-face (from to face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3341 "Set the face of the text from FROM to TO to face FACE.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3342 Ignore the default face and underline only word characters."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3343 (or (eq face 'default) ; ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3344 (not woman-fontify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3345 (if (face-underline-p face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3346 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3347 (let ((face-no-ul (intern (concat (symbol-name face) "-no-ul"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3348 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3349 (while (< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3350 (skip-syntax-forward "w" to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3351 (put-text-property from (point) 'face face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3352 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3353 (skip-syntax-forward "^w" to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3354 (put-text-property from (point) 'face face-no-ul)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3355 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3356 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3357 (put-text-property from to 'face face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3358 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3359
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3360
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3361 ;;; Output translation:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3362
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3363 (defvar translations nil) ; Also bound locally by woman2-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3364 ;; A list of the form (\"[ace]\" (a . b) (c . d) (e . ?\ )) or nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3365
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3366 (defun woman-get-next-char ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3367 "Return and delete next char in buffer, including special chars."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3368 (if ;;(looking-at "\\\\(\\(..\\)")
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3369 ;; Match special \(xx and strings \*[xxx], \*(xx, \*x:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3370 (looking-at "\\\\\\((..\\|\\*\\(\\[[^]]+\\]\\|(..\\|.\\)\\)")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3371 (prog1 (match-string 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3372 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3373 (prog1 (char-to-string (following-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3374 (delete-char 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3375
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3376 (defun woman2-tr (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3377 ".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
3378 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
3379 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3380 ;; This should be an update, but consing onto the front of the alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3381 ;; has the same effect and match duplicates should not matter.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3382 ;; Initialize translation data structures:
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 a b)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3386 ;; `matches' must be a string:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3387 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3388 (concat (if matches (substring matches 1 -1)) "]"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3389 ;; Process .tr arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3390 (while (not (eolp)) ; (looking-at "[ \t]*$") ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3391 (setq a (woman-get-next-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3392 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3393 (setq b " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3394 (setq b (woman-get-next-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3395 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3396 (if (= (length a) 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3397 (concat a matches)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3398 (concat matches "\\|\\" a))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3399 alist (cons (cons a b) alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3400 (delete-char 1) ; no blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3401 ;; Rebuild translations list:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3402 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3403 (if (= (string-to-char matches) ?\])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3404 (substring matches 3)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3405 (concat "[" matches))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3406 translations (cons matches alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3407 ;; Format any following text:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3408 (woman2-format-paragraphs to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3409 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3410
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3411 (defsubst woman-translate (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3412 "Translate up to marker TO. Do this last of all transformations."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3413 (if translations
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3414 (let ((matches (car translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3415 (alist (cdr translations)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3416 (while (re-search-forward matches to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3417 ;; Done like this to retain text properties and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3418 ;; support translation of special characters:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3419 (insert-before-markers-and-inherit
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3420 (cdr (assoc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3421 (buffer-substring-no-properties
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3422 (match-beginning 0) (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3423 alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3424 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3425 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3426
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3427
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3428 ;;; Registers:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3429
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3430 (defvar woman-registers ; these are all read-only
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3431 '((".H" 24) (".V" 48) ; resolution in basic units
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3432 (".g" 0) ; not groff
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3433 ;; (Iff emulating groff need to implement groff italic correction
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3434 ;; \/, e.g. for pic.1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3435 (".i" left-margin) ; current indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3436 (".j" woman-adjust) ; current adjustment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3437 (".l" fill-column) ; current line length
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3438 (".s" 12) ; current point size
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3439 (".u" (if woman-nofill 0 1)) ; 1/0 in fill/nofill mode
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3440 (".v" 48) ; current vertical line spacing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3441 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3442 "Register alist: the key is the register name as a string.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3443 Each element has the form (KEY VALUE . INC) -- inc may be nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3444 Also bound locally in `woman2-roff-buffer'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3445
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3446 (defun woman-mark-horizonal-position ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3447 "\\kx -- Store current horizontal position in INPUT LINE in register x."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3448 (while (re-search-forward "\\\\k\\(.\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3449 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3450 (setq woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3451 (cons (list (match-string 1) (current-column))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3452 woman-registers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3453 (woman-delete-match 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3454
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3455 (defsubst woman2-process-escapes-to-eol (&optional numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3456 "Process remaining escape sequences up to eol.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3457 Handle numeric arguments specially if optional argument NUMERIC is non-nil."
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3458 (woman2-process-escapes (copy-marker (line-end-position) t) numeric))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3459
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3460 (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
3461 ".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
3462 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
3463 Format paragraphs upto TO. (Breaks, but should not!)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3464 (let* ((name (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3465 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3466 (progn (skip-syntax-forward "^ ") (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3467 (pm (progn ; increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3468 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3469 (when (memq (char-after) '(?+ ?-))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3470 (forward-char) (char-before))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3471 (value (if (eolp) ; no value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3472 nil ; to be interpreted as zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3473 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3474 (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3475 (inc (progn ; auto-increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3476 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3477 (if (eolp) ; no value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3478 nil ; to be interpreted as zero ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3479 (woman-parse-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3480 (oldvalue (assoc name woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3481 (when oldvalue
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3482 (setq oldvalue (cdr oldvalue)) ; (value . inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3483 (unless inc (setq inc (cdr oldvalue))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3484 (cond ((null value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3485 (setq value 0) ; correct?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3486 (WoMan-warn "nr %s -- null value assigned as zero!" name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3487 ((symbolp value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3488 (setq value (list 'quote value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3489 (if pm ; increment old value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3490 (setq oldvalue (if oldvalue (car oldvalue) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3491 value (if (eq pm ?+)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3492 (+ oldvalue value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3493 (- oldvalue value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3494 (setq woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3495 (cons (cons name (cons value inc)) woman-registers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3496 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3497 (woman2-format-paragraphs to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3498
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3499
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3500 ;;; Numeric (and "non-text") request arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3501
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3502 (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
3503 "Get the value of a numeric argument at or after point.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3504 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
3505 Assumes 10 characters per inch. Does not move point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3506 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3507 (save-excursion (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3508
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3509 (defun woman-parse-numeric-arg ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3510 "Get the value of a numeric expression at or after point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3511 Unlike `woman-get-numeric-arg', leaves point after the argument.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3512 The expression may be an argument in quotes."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3513 (if (= (following-char) ?\") (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3514 ;; Allow leading +/-:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3515 (let ((value (if (looking-at "[+-]") 0 (woman-parse-numeric-value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3516 op)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3517 (while (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3518 ((looking-at "[+-/*%]") ; arithmetic operators
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3519 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3520 (setq op (intern-soft (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3521 (setq value (funcall op value (woman-parse-numeric-value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3522 ((looking-at "[<=>]=?") ; relational operators
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3523 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3524 (setq op (or (intern-soft (match-string 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3525 (intern-soft "=")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3526 (setq value (if (funcall op value (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3527 1 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3528 ((memq (setq op (following-char)) '(?& ?:)) ; Boolean and / or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3529 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3530 (setq value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3531 ;; and / or are special forms, not functions, in ELisp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3532 (if (eq op ?&)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3533 ;; and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3534 (if (> value 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3535 (if (> (woman-parse-numeric-value) 0) 1 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3536 ;; skip second operand
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3537 (prog1 0 (woman-parse-numeric-value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3538 ;; or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3539 (if (> value 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3540 ;; skip second operand
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3541 (prog1 1 (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3542 (if (> (woman-parse-numeric-value) 0) 1 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3543 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3544 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3545 ; (if (looking-at "[ \t\nRC\)\"]") ; R, C are tab types
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3546 ; ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3547 ; (WoMan-warn "Unimplemented numerical operator `%c' in %s"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3548 ; (following-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3549 ; (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3550 ; (save-excursion (beginning-of-line) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3551 ; (save-excursion (end-of-line) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3552 ; (skip-syntax-forward "^ "))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3553 value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3554 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3555
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3556 (defun woman-parse-numeric-value ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3557 "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
3558 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
3559 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
3560 expression in parentheses. Leaves point after the value."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3561 ;; Must replace every \' by some different single character first
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3562 ;; before calling this function by calling
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3563 ;; (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3564 (if (eq (following-char) ?\()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3565 ;; Treat parenthesized expression as a single value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3566 (let (n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3567 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3568 (setq n (woman-parse-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3569 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3570 (if (eq (following-char) ?\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3571 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3572 (WoMan-warn "Parenthesis confusion in numeric expression!"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3573 n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3574 (let ((n (cond ((looking-at "[-+]?[.0-9]+") ; single number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3575 ;; currently needed to set match-end, even though
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3576 ;; string-to-number returns 0 if number not parsed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3577 (string-to-number (match-string 0)))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3578 ((looking-at "\\\\n\\([-+]\\)?\\(?:\
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3579 \\[\\([^]]+\\)\\]\\|\(\\(..\\)\\|\\(.\\)\\)")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3580 ;; interpolate number register, maybe auto-incremented
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3581 (let* ((pm (match-string-no-properties 1))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3582 (name (or (match-string-no-properties 2)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3583 (match-string-no-properties 3)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3584 (match-string-no-properties 4)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3585 (value (assoc name woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3586 (if value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3587 (let (inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3588 (setq value (cdr value) ; (value . inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3589 inc (cdr value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3590 ;; eval internal (.X) registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3591 ;; stored as lisp variable names:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3592 value (eval (car value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3593 (if (and pm inc) ; auto-increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3594 (setq value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3595 (funcall (intern-soft pm) value inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3596 woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3597 (cons (cons name (cons value inc))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3598 woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3599 value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3600 (WoMan-warn "Undefined register %s defaulted to 0."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3601 name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3602 0) ; default to zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3603 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3604 ((re-search-forward
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3605 ;; Delimiter can be special char escape \[xxx],
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3606 ;; \(xx or single normal char (usually '):
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3607 "\\=\\\\w\\(\\\\\\[[^]]+\\]\\|\\\\(..\\|.\\)" nil t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3608 (let ((from (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3609 (delim (regexp-quote (match-string 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3610 (if (re-search-forward delim nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3611 ;; Return width of string:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3612 (- (match-beginning 0) from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3613 (WoMan-warn "Width escape delimiter error!"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3614 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3615 (if (null n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3616 ;; ERROR -- should handle this better!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3617 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3618 (WoMan-warn "Numeric/register argument error: %s"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3619 (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3620 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3621 (save-excursion (end-of-line) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3622 (skip-syntax-forward "^ ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3623 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3624 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3625 ;; Check for scale factor:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3626 (if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3627 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3628 ((looking-at "\\s ") nil) ; stay put!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3629 ((looking-at "[mnuv]")) ; ignore for now
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3630 ((looking-at "i") (setq n (* n 10))) ; inch
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3631 ((looking-at "c") (setq n (* n 3.9))) ; cm
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3632 ((looking-at "P") (setq n (* n 1.7))) ; Pica
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3633 ((looking-at "p") (setq n (* n 0.14))) ; point
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3634 ;; NB: May be immediately followed by + or -, etc.,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3635 ;; in which case do nothing and return nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3636 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3637 (goto-char (match-end 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3638 (if (numberp n) (round n) n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3639 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3640
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3641
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3642 ;;; VERTICAL FORMATTING -- Formatting macros that cause a break:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3643
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3644 ;; Vertical spacing philosophy:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3645 ;; 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
3646 ;; vertical space only before text, as required.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3647
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3648 (defun woman2-roff-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3649 "Process breaks. Format paragraphs and headings."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3650 (let ((case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3651 (to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3652 (canonically-space-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3653 (symbol-function 'canonically-space-region))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3654 (insert-and-inherit (symbol-function 'insert-and-inherit))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3655 (set-text-properties (symbol-function 'set-text-properties))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3656 (woman-registers woman-registers)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3657 fn request translations
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3658 tab-stop-list)
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3659 (set-marker-insertion-type to t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3660 ;; ?roff does not squeeze multiple spaces, but does fill, so...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3661 (fset 'canonically-space-region 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3662 ;; Try to avoid spaces inheriting underlines from preceding text!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3663 (fset 'insert-and-inherit (symbol-function 'insert))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3664 (fset 'set-text-properties 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3665 (unwind-protect
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3666 (while
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 (re-search-forward woman-request-regexp nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3669 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3670 ;; Construct woman function to call:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3671 ((setq fn (intern-soft
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3672 (concat "woman2-"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3673 (setq request (match-string 1)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3674 ;; Delete request or macro name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3675 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3676 ;; Unrecognised request:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3677 ((prog1 nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3678 ;; (WoMan-warn ".%s request ignored!" request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3679 (WoMan-warn-ignored request "ignored!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3680 ;; (setq fn 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3681 ;; AVOID LEAVING A BLANK LINE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3682 ;; (setq fn 'woman2-format-paragraphs)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3683 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3684 ;; .LP assumes it is at eol and leaves a (blank) line,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3685 ;; so leave point at end of line before paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3686 ((or (looking-at "[ \t]*$") ; no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3687 woman-ignore) ; ignore all
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3688 ;; (beginning-of-line) (kill-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3689 ;; AVOID LEAVING A BLANK LINE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3690 (beginning-of-line) (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3691 (t (end-of-line) (insert ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3692 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3693 (if (not (or fn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3694 (and (not (memq (following-char) '(?. ?')))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3695 (setq fn 'woman2-format-paragraphs))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3696 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3697 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3698 (set-marker to (woman-find-next-control-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3699 ;; Call the appropriate function:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3700 (funcall fn to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3701 (if (not (eobp)) ; This should not happen, but ...
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3702 (woman2-format-paragraphs (copy-marker (point-max) t)
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3703 woman-left-margin))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3704 (fset 'canonically-space-region canonically-space-region)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3705 (fset 'set-text-properties set-text-properties)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3706 (fset 'insert-and-inherit insert-and-inherit)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3707 (set-marker to nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3708
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3709 (defun woman-find-next-control-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3710 "Find and return start of next control line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3711 ; (let ((to (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3712 ; (re-search-forward "^\\." nil t))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3713 ; (if to (1- to) (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3714 (let (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3715 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3716 ;; Must handle
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3717 ;; ...\c
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3718 ;; .br (and other requests?)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3719 ;; by deleting both the \c and the following request.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3720 ;; BEWARE THAT THIS CODE MAY BE UNRELIABLE!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3721 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3722 (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3723 (setq to (re-search-forward "\\(\\\\c\\)?\n[.']" nil t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3724 (match-string 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3725 (looking-at "br"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3726 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3727 (woman-delete-line 2)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3728 (if to (1- to) (point-max))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3729
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3730 (defun woman2-PD (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3731 ".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
3732 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
3733 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3734 ;; .ie \\n[.$] .nr PD (v;\\$1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3735 ;; .el .nr PD .4v>?\n[.V]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3736 (woman-set-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3737 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3738
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3739 (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
3740 "Set the interparagraph distance from a .PD request at point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3741 (setq woman-interparagraph-distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3742 (if (eolp) 1 (woman-get-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3743 ;; Should allow .PD 0 to set zero line spacing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3744 (woman-delete-line 1)) ; ignore remaining args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3745
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3746 (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
3747 "Set variable `woman-leave-blank-lines' from `woman-interparagraph-distance'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3748 ; (if (> woman-interparagraph-distance 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3749 ; (forward-line 1) ; leave 1 blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3750 ; (woman-delete-line 1)) ; do not leave blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3751 (setq woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3752 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3753
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3754 (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
3755 ".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
3756 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
3757 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
3758 \(Should set prevailing indent and tabs to 5.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3759 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3760 (insert ?\()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3761 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3762 (insert ?\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3763 (let ((start (point)) here)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3764 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3765 (cond ((looking-at "\"\"[ \t]")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3766 (delete-char 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3767 ;; (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3768 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3769 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3770 (setq here (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3771 (insert " -- ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3772 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3773 ;; Delete repeated arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3774 (if (string-match (buffer-substring here (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3775 (buffer-substring start here))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3776 (delete-region here (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3777 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3778 ;; Embolden heading (point is at end of heading):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3779 (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
3780 (save-excursion (beginning-of-line) (point)) (point) 'woman-bold)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3781 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3782 (delete-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3783 (setq woman-left-margin woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3784 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3785 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3786
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3787 (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
3788 ".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
3789 Format paragraphs upto TO. Set prevailing indent to 5."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3790 (if (eolp) ; If no args then
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3791 (delete-char 1) ; apply to next line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3792 (woman-unquote-args) ; else unquote to end of heading
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3793 (beginning-of-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3794 (woman2-process-escapes-to-eol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3795 (woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3796 (setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3797 ;; Optionally embolden heading (point is at beginning of heading):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3798 (if woman-bold-headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3799 (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
3800 (point) (save-excursion (end-of-line) (point)) 'woman-bold))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3801 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3802 (setq woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3803 woman-nofill nil) ; fill output lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3804 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3805 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3806
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3807 (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
3808 ".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
3809 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3810 (if (eolp) ; If no args then
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3811 (delete-char 1)) ; apply to next line.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3812 (insert " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3813 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3814 (woman2-SH to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3815
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3816 (defun woman2-LP (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3817 ".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
3818 Leave 1 blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3819 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3820 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3821 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3822 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3823
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3824 (defalias 'woman2-PP 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3825 (defalias 'woman2-P 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3826
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3827 (defun 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
3828 ".ns -- Turn on no-space mode. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3829 ;; Should not cause a break!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3830 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3831 (setq woman-nospace t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3832 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3833
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3834 (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
3835 ".rs -- Turn off no-space mode. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3836 ;; Should not cause a break!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3837 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3838 (setq woman-nospace nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3839 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3840
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3841 (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
3842 ".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
3843 (let ((N (if (eolp) 1 (woman-get-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3844 (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3845 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3846 (setq woman-negative-vertical-space t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3847 (insert ".sp ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3848 (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3849 (setq woman-leave-blank-lines N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3850 (woman2-format-paragraphs to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3851
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3852 (defun woman-negative-vertical-space (from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3853 ".sp N with N < 0 => overlap following with preceding lines at FROM."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3854 ;; Run by woman-decode-region if necessary -- not usually required.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3855 (WoMan-warn "Negative vertical spacing support is experimental!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3856 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3857 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3858 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3859 (re-search-forward "^\\.sp " nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3860 (let ((N (woman-get-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3861 overlap overwritten)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3862 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3863 (setq from (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3864 overlap (buffer-substring from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3865 (progn (forward-line (- N)) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3866 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3867 (forward-line N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3868 (let ((imax (length overlap))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3869 (i 0) c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3870 (while (< i imax)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3871 (setq c (aref overlap i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3872 (cond ((eq c ?\n) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3873 (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3874 ((eolp) ; extend line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3875 ;; Insert character INCLUDING TEXT PROPERTIES:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3876 ;; (insert (substring overlap i (1+ i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3877 (let ((eol (string-match "\n" overlap i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3878 (insert (substring overlap i eol))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3879 (setq i (or eol imax)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3880 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3881 ((eq c ?\ ) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3882 (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3883 ((eq c ?\t) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3884 (if (eq (following-char) ?\t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3885 (forward-char) ; both tabs, just skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3886 (let ((i woman-tab-width))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3887 (while (> i 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3888 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3889 (insert ?\ ) ; extend line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3890 (forward-char)) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3891 (setq i (1- i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3892 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3893 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3894 (if (or (eq (following-char) ?\ ) ; overwrite OK
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3895 overwritten) ; warning only once per ".sp -"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3896 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3897 (setq overwritten t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3898 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3899 "Character(s) overwritten by negative vertical spacing in line %d"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3900 (count-lines 1 (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3901 (delete-char 1) (insert (substring overlap i (1+ i)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3902 (setq i (1+ i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3903 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3904 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3905
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3906
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3907 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3908 ;; The following function should probably do ALL width and number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3909 ;; register interpolation.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3910 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3911
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3912 (defun woman2-process-escapes (to &optional numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3913 "Process remaining escape sequences up to marker TO, preserving point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3914 Optional argument NUMERIC, if non-nil, means the argument is numeric."
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3915 (assert (and (markerp to) (marker-insertion-type to)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3916 ;; The first two cases below could be merged (maybe)!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3917 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3918 ;; Discard zero width filler character used to hide leading dots
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3919 ;; and zero width characters \|, \^:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3920 (while (re-search-forward "\\\\[&|^]" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3921 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3922 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3923 ;; Interrupt text processing -- CONTINUE current text with the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3924 ;; next text line (after any control lines, unless processing to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3925 ;; eol):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3926 (while (re-search-forward "\\\\c.*\n?" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3927 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3928 ;; but do not delete the final newline ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3929 (if (and (or (eobp) (= (point) to)) (not (bolp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3930 (insert-before-markers ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3931 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3932 (woman-translate to)
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 (woman-special-characters to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3935 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3936 ;; Printable version of the current escape character, ASSUMED to be `\'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3937 ;; This must be done LAST of all escape processing!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3938 ;; Done like this to preserve any text properties of the `\'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3939 (while (search-forward "\\" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3940 (let ((c (following-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3941 (cond ((eq c ?') ; \' -> '
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3942 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3943 (cond (numeric ; except in numeric args, \' -> `
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3944 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3945 (insert ?`))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3946 ((eq c ?\( )) ; uninterpreted special character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3947 ; \(.. -- do nothing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3948 ((eq c ?t) ; non-interpreted tab \t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3949 (delete-char 1)
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 (insert "\t"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3952 ((and numeric
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3953 (memq c '(?w ?n ?h)))) ; leave \w, \n, \h (?????)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3954 ((eq c ?l) (woman-horizontal-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3955 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3956 ;; \? -> ? where ? is any remaining character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3957 (WoMan-warn "Escape ignored: \\%c -> %c" c c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3958 (delete-char -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3959 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3960 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3961 ;; Process non-default tab settings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3962 (cond (tab-stop-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3963 (while (search-forward "\t" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3964 (woman-tab-to-tab-stop))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3965 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3966
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3967 ;; Must replace \' by something before processing \w, done above.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3968
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3969 ;; Replace all `\w' and `\n' escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3970 ;; (This may be a bit too recursive!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3971 (while (re-search-forward "\\\\[nw]" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3972 (let ((from (match-beginning 0)) N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3973 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3974 (setq N (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3975 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3976 ;; Interpolate value:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3977 (insert-before-markers (number-to-string N))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3978 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3979
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3980 (defun woman-horizontal-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3981 "\\l'Nc' -- Draw a horizontal line of length N using character c, default _."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3982 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3983 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3984 (looking-at "\\(.\\)\\(.*\\)\\1")
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3985 (forward-char 1)
73060
5d2e9706764f (woman0-so): Use `let*', not `let'.
Juanma Barranquero <lekktu@gmail.com>
parents: 73059
diff changeset
3986 (let* ((to (match-end 2))
73059
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3987 (from (match-beginning 0))
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3988 (N (woman-parse-numeric-arg))
1837e6621075 Make sure all the end-of-region markers we use have
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 72620
diff changeset
3989 (c (if (< (point) to) (following-char) ?_)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3990 (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3991 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3992 (insert (make-string N c))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3993 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3994
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3995 ;;; 4. Text Filling, Adjusting, and Centering
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3996
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3997 (defun woman2-br (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3998 ".br -- Break. Leave no blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3999 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4000 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4001
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4002 (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
4003 ".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
4004 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4005 (setq woman-nofill nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4006 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4007 ;; Preserve any final blank line in the nofill region:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4008 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4009 (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4010 (if (looking-at "[ \t]*$") (setq woman-leave-blank-lines 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4011 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4012
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4013 (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
4014 ".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
4015 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
4016 for the current line length. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4017 (setq woman-nofill t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4018 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4019 (woman2-format-paragraphs to))
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 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
4022 ".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
4023 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
4024 Format paragraphs upto TO. (Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4025 ;; c = l -- left, r -- right, c -- center, b or n -- both,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4026 ;; absent -- unchanged. Initial mode adj,both.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4027 (setq woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4028 (cond ((eolp) woman-adjust-previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4029 ((eq (following-char) ?l) woman-adjust-left)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4030 ((eq (following-char) ?r) woman-adjust-right)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4031 ((eq (following-char) ?c) woman-adjust-center)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4032 ((memq (following-char) '(?b ?n)) woman-adjust-both)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4033 (t (woman-get-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4034 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4035 woman-justify (nth woman-adjust woman-justify-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4036 (woman-delete-line 1) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4037 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4038
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4039 (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
4040 ".na -- No adjusting. Format paragraphs upto TO.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4041 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4042 (setq woman-adjust-previous woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4043 woman-justify-previous woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4044 woman-adjust woman-adjust-left ; fill but do not adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4045 woman-justify (nth woman-adjust woman-justify-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4046 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4047 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4048
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4049 ;;; The main formatting functions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4050
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4051 (defun woman-leave-blank-lines (&optional leave)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4052 "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
4053 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
4054 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
4055 non-nil and non-zero."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4056 ;; ***** It may suffice to delete only lines ABOVE point! *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4057 ;; NOTE: Function arguments are evaluated left to right
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4058 ;; (*note (elisp)Function Forms::.).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4059 (delete-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4060 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4061 (if (not (eq (skip-syntax-backward " ") 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4062 (forward-line)) ; forward-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4063 (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4064 (progn (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4065 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4066 (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4067 (if woman-nospace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4068 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4069 (if (or (null leave) (eq leave 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4070 ;; output any `pending' vertical space ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4071 (setq leave woman-leave-blank-lines))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4072 (if (and leave (> leave 0)) (insert-before-markers ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4073 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4074 (setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4075 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4076
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4077 ;; `fill-region-as-paragraph' in `fill.el' appears to be the principal
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4078 ;; text filling function, so that is what I use here.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4079
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4080 (defvar woman-temp-indent nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4081
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4082 (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
4083 "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
4084 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
4085 If `woman-nofill' is non-nil then indent without filling or adjusting."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4086 ;; Blank space should only ever be output before text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4087 (if new-left (setq left-margin new-left))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4088 (if (looking-at "^\\s *$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4089 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4090 (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4091 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4092 ;; Successive control lines are sufficiently common to be worth a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4093 ;; special case (maybe):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4094 (if (>= (point) to) ; >= as a precaution!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4095 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4096 ;; (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4097 (woman-reset-nospace)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4098 ;; (woman2-process-escapes to) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4099 (woman2-process-escapes to 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4100 (if woman-nofill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4101 ;; Indent without filling or adjusting ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4102 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4103 (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4104 (cond (woman-temp-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4105 (indent-to woman-temp-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4106 (forward-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4107 (indent-rigidly (point) to left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4108 (woman-horizontal-escapes to)) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4109 ;; Fill and justify ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4110 ;; Blank lines and initial spaces cause a break.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4111 ; (cond ((and (= (point) to) (not (looking-at ".nf"))) ; Yuk!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4112 ; ;; No text after a request that caused a break, so delete
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4113 ; ;; any spurious blank line left:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4114 ; (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4115 ; (if (looking-at "^\\s *$") (kill-line) (forward-line))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4116 (while (< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4117 (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4118 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4119 ;; Indent first lin of paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4120 (indent-to (or woman-temp-indent left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4121 (woman-horizontal-escapes to) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4122 ;; Find the beginning of the next paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4123 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4124 ; (if (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4125 ; ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4126 ; (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4127 ; (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4128 ; (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4129 ; (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4130 ; (setq woman-leave-blank-lines nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4131 (and (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4132 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4133 (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4134 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4135 (setq woman-leave-blank-lines 1))
73374
959e3f79c94d * woman.el (woman2-format-paragraphs): Avoid infinite loop in case
Chong Yidong <cyd@stupidchicken.com>
parents: 73060
diff changeset
4136 ;; This shouldn't happen, but in case it does (e.g. for
959e3f79c94d * woman.el (woman2-format-paragraphs): Avoid infinite loop in case
Chong Yidong <cyd@stupidchicken.com>
parents: 73060
diff changeset
4137 ;; badly-formatted manfiles with no terminating newline),
959e3f79c94d * woman.el (woman2-format-paragraphs): Avoid infinite loop in case
Chong Yidong <cyd@stupidchicken.com>
parents: 73060
diff changeset
4138 ;; avoid an infinite loop.
959e3f79c94d * woman.el (woman2-format-paragraphs): Avoid infinite loop in case
Chong Yidong <cyd@stupidchicken.com>
parents: 73060
diff changeset
4139 (unless (and (eolp) (eobp))
959e3f79c94d * woman.el (woman2-format-paragraphs): Avoid infinite loop in case
Chong Yidong <cyd@stupidchicken.com>
parents: 73060
diff changeset
4140 (beginning-of-line))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4141 ;; If a single short line then just leave it.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4142 ;; This is necessary to preserve some table layouts.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4143 ;; PROBABLY NOT NECESSARY WITH SQUEEZE MODIFICATION !!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4144 (if (or (> (count-lines from (point)) 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4145 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4146 (backward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4147 (> (current-column) fill-column)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4148 ;; ?roff does not squeeze multiple spaces
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4149 ;; (fill-region-as-paragraph from (point) woman-justify t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4150 ;; NOSQUEEZE has no effect if JUSTIFY is full, so
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4151 ;; redefine canonically-space-region, see above.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4152 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4153 ;; Needs a re-write of the paragraph formatter to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4154 ;; avoid this nonsense to handle temporary indents!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4155 (if (and woman-temp-indent (< woman-temp-indent left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4156 (let ((left-margin woman-temp-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4157 (fill-region-as-paragraph from (point) woman-justify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4158 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4159 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4160 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4161 (setq from (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4162 (fill-region-as-paragraph from (point) woman-justify))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4163 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4164 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4165 ;; Delete all but 1 trailing blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4166 ;;(woman-leave-blank-lines 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4167 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4168 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4169 (setq woman-temp-indent nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4170 ;; Non-white-space text has been processed, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4171 ;;(setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4172 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4173
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4174
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4175 ;;; Tagged, indented and hanging paragraphs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4176
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4177 (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
4178 ".TP i -- Set prevailing indent to i. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4179 Begin indented paragraph with hanging tag given by next text line.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4180 If tag doesn't fit, place it on a separate line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4181 (let ((i (woman2-get-prevailing-indent)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4182 (woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4183 (woman2-tagged-paragraph to i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4184
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4185 (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
4186 ".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
4187 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4188 (if (eolp) ; no args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4189 ;; Like LP without resetting prevailing indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4190 (woman2-format-paragraphs to (+ woman-left-margin
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4191 woman-prevailing-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4192 (woman-forward-arg 'unquote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4193 (let ((i (woman2-get-prevailing-indent 'leave-eol)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4194 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4195 (woman-leave-blank-lines) ; must be here,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4196 (woman2-tagged-paragraph to i))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4197
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4198 (defun woman-find-next-control-line-carefully ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4199 "Find and return start of next control line, even if already there!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4200 (if (looking-at "^[.']")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4201 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4202 (woman-find-next-control-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4203
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4204 (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
4205 "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
4206 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
4207 Format paragraphs upto TO. Set prevailing indent to I."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4208 (if (not (looking-at "\\s *$")) ; non-empty tag
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4209 (setq woman-leave-blank-lines nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4210
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4211 ;; Temporary hack for bash.1 and groff_mmse.7 until code is revised
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4212 ;; to process all requests uniformly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4213 (cond ((and (= (point) to) (looking-at "^[.'][ \t]*\\(PD\\|br\\|ta\\) *"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4214 (if (string= (match-string 1) "br")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4215 (woman-delete-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4216 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4217 (if (string= (match-string 1) "ta") ; for GetInt.3
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4218 (woman2-ta to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4219 (woman-set-interparagraph-distance)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4220 (set-marker to (woman-find-next-control-line-carefully))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4221 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4222
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4223 (let ((tag (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4224 (woman-reset-nospace)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4225 ;; Format the tag:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4226 (woman2-process-escapes-to-eol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4227 ;; TIDY UP THE FOLLOWING CODE
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4228 ;; (indent-to woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4229 (setq left-margin woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4230 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4231 (fill-region-as-paragraph (save-excursion (forward-line -1) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4232 (point) woman-justify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4233
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4234 ;; Temporary hack for bash.1 until all requests processed uniformly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4235 (cond ((and (= (point) to) (looking-at "^[.'][ \t]*PD *"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4236 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4237 (woman-set-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4238 (set-marker to (woman-find-next-control-line-carefully))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4239 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4240
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4241 ;; Format the paragraph body, if there is one! Set indented left
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4242 ;; margin anyway, because the paragraph body may begin with a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4243 ;; control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4244 (setq left-margin (+ woman-left-margin i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4245 (cond ((< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4246 (woman2-format-paragraphs to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4247 (goto-char tag) (end-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4248 (cond ((> (setq i (- left-margin (current-column))) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4249 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4250 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4251 ;; Necessary to avoid spaces inheriting underlines.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4252 ;; Cannot simply delete (current-column) whitespace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4253 ;; characters because some may be tabs!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4254 (while (> i 0) (insert ? ) (setq i (1- i)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4255 (goto-char to) ; necessary ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4256 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4257 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4258
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4259 (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
4260 ".HP i -- Set prevailing indent to i. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4261 Begin paragraph with hanging indent."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4262 (let ((i (woman2-get-prevailing-indent)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4263 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4264 (setq woman-temp-indent woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4265 (woman2-format-paragraphs to (+ woman-left-margin i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4266 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4267
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4268 (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
4269 "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
4270 If no argument then return the existing prevailing indent.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4271 Delete line from point and eol unless LEAVE-EOL is non-nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4272 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4273 (or leave-eol (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4274 (let ((i (woman-get-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4275 (woman-delete-line) (or leave-eol (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4276 ;; i = 0 if the argument was not a number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4277 (if (> i 0) (setq woman-prevailing-indent i))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4278 woman-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4279
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4280 (defmacro woman-push (value stack)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4281 "Push VALUE onto STACK."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4282 `(setq ,stack (cons ,value ,stack)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4283
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4284 (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
4285 "Pop into VARIABLE the value at the top of STACK.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4286 Allow for mismatched requests!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4287 `(if ,stack
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4288 (setq ,variable (car ,stack)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4289 ,stack (cdr ,stack))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4290
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4291 (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
4292 ".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
4293 Set prevailing indent to 5 for nested indents. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4294 (woman-push woman-left-margin woman-RS-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4295 (woman-push woman-prevailing-indent woman-RS-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4296 (setq woman-left-margin (+ woman-left-margin
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4297 (woman2-get-prevailing-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4298 woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4299 (woman2-format-paragraphs to 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-RE (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4302 ".RE -- End of relative indent. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4303 Set prevailing indent to amount of starting .RS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4304 (woman-pop woman-left-margin woman-RS-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4305 (woman-pop woman-prevailing-indent woman-RS-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4306 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4307 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4308
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4309
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4310 ;;; Line Length and Indenting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4311
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4312 (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
4313 "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
4314 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
4315 otherwise set PREVIOUS. Delete the whole remaining control line."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4316 (if (eolp) ; space already skipped
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4317 (set arg (if previous (eval previous) 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4318 (if previous (set previous (eval arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4319 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4320 (let ((pm (if (looking-at "[+-]")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4321 (prog1 (following-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4322 (forward-char 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4323 (i (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4324 (cond ((null pm) (set arg i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4325 ((= pm ?+) (set arg (+ (eval arg) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4326 ((= pm ?-) (set arg (- (eval arg) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4327 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4328 (beginning-of-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4329 (woman-delete-line 1)) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4330
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4331 ;; NEED TO RATIONALIZE NAMES FOR PREVIOUS VALUES!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4332 (defvar woman-ll-fill-column woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4333 (defvar woman-in-left-margin woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4334
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4335 (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
4336 ".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
4337 Format paragraphs upto TO. (Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4338 (woman-set-arg 'fill-column 'woman-ll-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4339 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4340
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4341 (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
4342 ".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
4343 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4344 (woman-set-arg 'left-margin 'woman-in-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4345 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4346
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4347 (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
4348 ".ti +/-N -- Temporary indent. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4349 ;; Ignore if no argument.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4350 ;; Indent next output line only wrt current indent.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4351 ;; Current indent is not changed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4352 (setq woman-temp-indent left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4353 (woman-set-arg 'woman-temp-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4354 (woman2-format-paragraphs to nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4355
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4356
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4357 ;;; Tabs, Leaders, and Fields:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4358
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4359 (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
4360 ".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
4361 \(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
4362 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
4363 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4364 (setq tab-stop-list nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4365 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4366 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4367 (let ((tab-stop 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4368 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4369 (let ((plus (cond ((eq (following-char) ?+) (forward-char 1) t)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4370 (i (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4371 (setq tab-stop (if plus (+ tab-stop i) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4372 (if (memq (following-char) '(?R ?C))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4373 (setq tab-stop (cons tab-stop (following-char))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4374 (setq tab-stop-list (cons tab-stop tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4375 (skip-syntax-forward "^ ") ; skip following R, C, `;', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4376 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4377 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4378 (woman-delete-line 1) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4379 (setq tab-stop-list (reverse tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4380 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4381
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4382 (defsubst woman-get-tab-stop (tab-stop-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4383 "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
4384 (if (consp tab-stop-list) (car tab-stop-list) tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4385
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4386 (defun woman-tab-to-tab-stop ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4387 "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
4388 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
4389 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
4390 ;; Based on tab-to-tab-stop in indent.el.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4391 ;; R & C tabs probably not quite right!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4392 (delete-backward-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4393 (let ((tabs tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4394 (while (and tabs (>= (current-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4395 (woman-get-tab-stop (car tabs))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4396 (setq tabs (cdr tabs)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4397 (if tabs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4398 (let* ((tab (car tabs))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4399 (type (and (consp tab) (cdr tab)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4400 eol n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4401 (if type
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4402 (setq tab (woman-get-tab-stop tab)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4403 eol (save-excursion (end-of-line) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4404 n (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4405 (search-forward "\t" eol t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4406 n (- (if n (1- n) eol) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4407 tab (- tab (if (eq type ?C) (/ n 2) n))) )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4408 (setq n (- tab (current-column)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4409 (while (> n 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4410 (insert ?\ )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4411 (setq n (1- n))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4412 (insert ?\ ))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4413
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4414 (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
4415 ".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
4416 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4417 ;; Currently just terminates special tab processing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4418 (setq tab-stop-list nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4419 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4420 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4421
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4422 (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
4423 ".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
4424 Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4425 A VERY FIRST ATTEMPT to make fields at least readable!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4426 Needs doing properly!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4427 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4428 (woman-delete-whole-line) ; ignore!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4429 (let ((delim (following-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4430 (pad ?\ ) end) ; pad defaults to space
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4431 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4432 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4433 (or (eolp) (setq pad (following-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4434 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4435 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4436 (if (re-search-forward "^[.'][ \t]*fc\\s " nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4437 (setq end (match-beginning 0))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4438 ;; A field is contained between a pair of field delimiter
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4439 ;; characters and consists of sub-strings separated by padding
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4440 ;; indicator characters:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4441 (setq delim (string delim ?[ ?^ delim ?] ?* delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4442 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4443 (while (re-search-forward delim end t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4444 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4445 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4446 (insert woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4447 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4448 (delete-backward-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4449 (insert-before-markers woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4450 (subst-char-in-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4451 (match-beginning 0) (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4452 pad woman-unpadded-space-char t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4453 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4454 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4455 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4456
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4457
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4458 ;;; Preliminary table support (.TS/.TE)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4459
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4460 (defun woman2-TS (to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4461 ".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
4462 Format paragraphs upto TO."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4463 ;; 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
4464 (woman-delete-line 1) ; ignore any arguments
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4465 (when woman-emulate-tbl
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4466 ;; 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
4467 ;; 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
4468 ;; a semicolon. Currently, just delete it:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4469 (if (looking-at ".*;[ \t]*$") (woman-delete-line 1)) ;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4470 ;; 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
4471 ;; 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
4472 (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
4473 (woman-delete-line 1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4474 ;; 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
4475 (let ((start (point)) (col 1))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4476 (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
4477 ;; Find current column width:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4478 (while (< (point) to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4479 (when (search-forward "\t" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4480 (backward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4481 (if (> (current-column) col) (setq col (current-column))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4482 (forward-line))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4483 ;; Align current column:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4484 (goto-char start)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4485 (setq col (+ col 3)) ; intercolumn space
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4486 (while (< (point) to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4487 (when (search-forward "\t" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4488 (delete-char -1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4489 (insert-char ?\ (- col (current-column))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4490 (forward-line))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4491 (goto-char start))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4492 ;; 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
4493 (setq woman-nofill t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4494 (woman2-format-paragraphs to))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4495
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4496 (defalias 'woman2-TE 'woman2-fi)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4497 ;; ".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
4498 ;; Turn filling and adjusting back on.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4499
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4500
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4501 ;;; WoMan message logging:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4502
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4503 ;; 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
4504 ;; by Jamie Zawinski <jwz@lucid.com> & Hallvard Furuseth <hbf@ulrik.uio.no>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4505
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4506 (defvar WoMan-current-file nil) ; bound in woman-really-find-file
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4507 (defvar WoMan-Log-header-point-max nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4508
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4509 (defun WoMan-log-begin ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4510 "Log the beginning of formatting in *WoMan-Log*."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4511 (let ((WoMan-current-buffer (buffer-name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4512 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4513 (set-buffer (get-buffer-create "*WoMan-Log*"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4514 (or (eq major-mode 'view-mode) (view-mode 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4515 (setq buffer-read-only nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4516 (goto-char (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4517 (insert "\n\^L\nFormatting "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4518 (if (stringp WoMan-current-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4519 (concat "file " WoMan-current-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4520 (concat "buffer " WoMan-current-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4521 " at " (current-time-string) "\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4522 (setq WoMan-Log-header-point-max (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4523 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4524
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4525 (defun WoMan-log (format &rest args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4526 "Log a message out of FORMAT control string and optional ARGS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4527 (WoMan-log-1 (apply 'format format args)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4528
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4529 (defun WoMan-warn (format &rest args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4530 "Log a warning message out of FORMAT control string and optional ARGS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4531 (setq format (apply 'format format args))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4532 (WoMan-log-1 (concat "** " format)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4533
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4534 (defun WoMan-warn-ignored (request ignored)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4535 "Log a warning message about ignored directive REQUEST.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4536 IGNORED is a string appended to the log message."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4537 (let ((tail
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4538 (buffer-substring (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4539 (save-excursion (end-of-line) (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4540 (if (and (> (length tail) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4541 (/= (string-to-char tail) ?\ ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4542 (setq tail (concat " " tail)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4543 (WoMan-log-1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4544 (concat "** " request tail " request " ignored))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4545
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4546 (defun WoMan-log-end (time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4547 "Log the end of formatting in *WoMan-Log*.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4548 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
4549 with the message."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4550 (WoMan-log-1 (format "Formatting time %d seconds." time) 'end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4551
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4552 (defun WoMan-log-1 (string &optional end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4553 "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
4554 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
4555 logging the message."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4556 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4557 (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
4558 (setq buffer-read-only nil)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4559 (goto-char (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4560 (or end (insert " ")) (insert string "\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4561 (if end
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4562 (setq buffer-read-only t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4563 (if woman-show-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4564 (select-window ; to return to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4565 (prog1 (selected-window) ; WoMan window
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4566 (select-window (display-buffer (current-buffer)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4567 (cond (WoMan-Log-header-point-max
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4568 (goto-char WoMan-Log-header-point-max)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4569 (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4570 (recenter 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4571 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4572 nil) ; for woman-file-readable-p etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4573
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4574 (provide 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4575
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 50404
diff changeset
4576 ;;; arch-tag: eea35e90-552f-4712-a94b-d9ffd3db7651
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4577 ;;; woman.el ends here