annotate lisp/woman.el @ 56905:661d52db56de

(isearch-toggle-regexp): Set `isearch-success' and `isearch-adjusted' to `t'. (isearch-toggle-case-fold): Set `isearch-success' to `t'. (isearch-message-prefix): Add "pending" for isearch-adjusted. (isearch-other-meta-char): Restore isearch-point unconditionally. (isearch-query-replace): Add new arg `regexp-flag' and use it. Set point to start of match if region is not active in transient mark mode (to include the current match to region boundaries). Push the search string to `query-replace-from-history-variable'. Add prompt "Query replace regexp" for isearch-regexp. Add region beginning/end as last arguments of `perform-replace.' (isearch-query-replace-regexp): Replace code by the call to `isearch-query-replace' with arg `t'.
author Juri Linkov <juri@jurta.org>
date Fri, 03 Sep 2004 20:32:57 +0000
parents 72d8528b9070
children c61ee1c7b2e8 59dcbfe97385
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
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
3 ;; Copyright (C) 2000, 2002, 2004 Free Software Foundation, Inc.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
5 ;; Author: Francis J. Wright <F.J.Wright@qmul.ac.uk>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
6 ;; Maintainer: Francis J. Wright <F.J.Wright@qmul.ac.uk>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
7 ;; Keywords: help, unix
56256
72d8528b9070 Update Eli's email address.
Eli Zaretskii <eliz@gnu.org>
parents: 55895
diff changeset
8 ;; Adapted-By: Eli Zaretskii <eliz@gnu.org>
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38112
diff changeset
9 ;; Version: see `woman-version'
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
10 ;; URL: http://centaur.maths.qmul.ac.uk/Emacs/WoMan/
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
11
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
12 ;; This file is part of GNU Emacs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
13
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
14 ;; GNU Emacs is free software; you can redistribute it and/or modify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
16 ;; the Free Software Foundation; either version 2, or (at your option)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
17 ;; any later version.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
18
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
22 ;; GNU General Public License for more details.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
23
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
24 ;; You should have received a copy of the GNU General Public License
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
25 ;; along with GNU Emacs; see the file COPYING. If not, write to the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
26 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
27 ;; Boston, MA 02111-1307, USA.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
28
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
29 ;;; Commentary:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
30
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
31 ;; WoMan implements a subset of the formatting performed by the Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
32 ;; `man' (or `manual-entry') command to format a UN*X manual `page'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
33 ;; for display, but without calling any external programs. It is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
34 ;; intended to emulate the whole of the -man macro package, plus those
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
35 ;; ?roff requests that are most commonly used in man pages. However,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
36 ;; the emulation is modified to include the reformatting done by the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
37 ;; Emacs `man' command. No hyphenation is performed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
38
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
39 ;; Advantages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
40
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
41 ;; Much more direct, does not require any external programs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
42 ;; Supports completion on man page names.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
43
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
44 ;; Disadvantages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
45
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
46 ;; Not a complete emulation. Currently no support for eqn or tbl.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
47 ;; Slightly slower for large man pages (but usually faster for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
48 ;; small- and medium-size pages).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
49
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
50 ;; This browser works quite well on simple well-written man files. It
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
51 ;; works less well on idiosyncratic files that `break the rules' or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
52 ;; use the more obscure ?roff requests directly. Current test results
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
53 ;; are available in the file woman.status.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
54
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
55 ;; WoMan supports the use of compressed man files via
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
56 ;; `auto-compression-mode' by turning it on if necessary. But you may
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
57 ;; need to adjust the user option `woman-file-compression-regexp'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
58
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
59 ;; Read on for (currently) the only documentation for WoMan!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
60
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
61 ;; See also the documentation for the WoMan interactive commands and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
62 ;; user option variables, all of which begin with the prefix `woman-'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
63 ;; This can be done most easily by loading WoMan and then running the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
64 ;; command `woman-mini-help', or selecting the WoMan menu option `Mini
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
65 ;; Help' when WoMan is running.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
66
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
67 ;; WoMan is still under development! Please let me know what doesn't
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
68 ;; work -- I am adding and improving functionality as testing shows
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
69 ;; that it is necessary. See below for guidance on reporting bugs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
70
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
71 ;; Recommended use
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
72 ;; ===============
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
73
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
74 ;; Put this in your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
75 ;; (autoload 'woman "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
76 ;; "Decode and browse a UN*X man page." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
77 ;; (autoload 'woman-find-file "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
78 ;; "Find, decode and browse a specific UN*X man-page file." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
79
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
80 ;; Then either (1 -- *RECOMMENDED*): If the `MANPATH' environment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
81 ;; variable is set then WoMan will use it; otherwise you may need to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
82 ;; reset the Lisp variable `woman-manpath', and you may also want to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
83 ;; set the Lisp variable `woman-path'. Please see the online
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
84 ;; documentation for these variables. Now you can execute the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
85 ;; extended command `woman', enter or select a manual entry topic,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
86 ;; using completion, and if necessary select a filename, using
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
87 ;; completion. By default, WoMan suggests the word nearest to the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
88 ;; cursor in the current buffer as the topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
89
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
90 ;; Or (2): Execute the extended command `woman-find-file' and enter a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
91 ;; filename, using completion. This mode of execution may be useful
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
92 ;; for temporary files outside the standard UN*X manual directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
93 ;; structure.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
94
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
95 ;; Or (3): Put the next two sexpr's in your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
96 ;; (autoload 'woman-dired-find-file "woman"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
97 ;; "In dired, run the WoMan man-page browser on this file." t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
98 ;; (add-hook 'dired-mode-hook
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
99 ;; (lambda ()
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
100 ;; (define-key dired-mode-map "W" 'woman-dired-find-file)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
101 ;; and open the directory containing the man page file using dired,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
102 ;; put the cursor on the file, and press `W'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
103
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
104 ;; In each case, the result should (!) be a buffer in Man mode showing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
105 ;; a formatted manual entry. When called from WoMan, Man mode should
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
106 ;; work as advertised, but modified where necessary in the context of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
107 ;; WoMan. (However, `Man' will still invoke the standard Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
108 ;; manual-browsing facility rather than `WoMan' -- this is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
109 ;; intentional!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
110
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
111 ;; (By default, WoMan will automatically define the dired keys "W" and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
112 ;; "w" when it loads, but only if they are not already defined. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
113 ;; behaviour is controlled by the user option `woman-dired-keys'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
114 ;; Note that the `dired-x' (dired extra) package binds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
115 ;; `dired-copy-filename-as-kill' to the key "w" (as pointed out by Jim
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
116 ;; Davidson), although "W" appears to be really unused. The `dired-x'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
117 ;; package will over-write the WoMan binding to "w", whereas (by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
118 ;; default) WoMan will not overwrite the `dired-x' binding.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
119
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
120 ;; The following is based on suggestions by Guy Gascoigne-Piggford and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
121 ;; Juanma Barranquero. If you really want to square the man-woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
122 ;; circle then you might care to define the following bash function in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
123 ;; .bashrc:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
124
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
125 ;; man() { gnudoit -q '(raise-frame (selected-frame)) (woman' \"$1\" ')' ; }
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
126
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
127 ;; If you use Microsoft COMMAND.COM then you can create a file called
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
128 ;; man.bat somewhere in your path containing the two lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
129
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
130 ;; @echo off
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
131 ;; gnudoit -q (raise-frame (selected-frame)) (woman \"%1\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
132
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
133 ;; and then (e.g. from a command prompt or the Run... option in the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
134 ;; Start menu) just execute
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
135
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
136 ;; man man_page_name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
137
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
138
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
139 ;; Using the `word at point' as a topic suggestion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
140 ;; ===============================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
141
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
142 ;; By default, the `woman' command uses the word nearest to point in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
143 ;; the current buffer as a suggestion for the topic to look up. The
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
144 ;; topic must be confirmed or edited in the minibuffer. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
145 ;; suggestion can be turned off, or `woman' can use the suggested
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
146 ;; topic without confirmation* if possible, by setting the user-option
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
147 ;; `woman-topic-at-point' to nil or t respectively. (Its default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
148 ;; value is neither nil nor t, meaning ask for confirmation.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
149
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
150 ;; [* Thanks to Benjamin Riefenstahl for suggesting this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
151 ;; functionality.]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
152
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
153 ;; The variable `woman-topic-at-point' can be rebound locally, which
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
154 ;; may be useful to provide special private key bindings, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
155
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
156 ;; (global-set-key "\C-cw"
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
157 ;; (lambda ()
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
158 ;; (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
159 ;; (let ((woman-topic-at-point t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
160 ;; (woman)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
161
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
162
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
163 ;; Customization, Hooks and Imenu
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
164 ;; ==============================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
165
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
166 ;; WoMan supports the GNU Emacs 20+ customization facility, and puts
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
167 ;; a customization group called `WoMan' in the `Help' group under the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
168 ;; top-level `Emacs' group. In order to be able to customize WoMan
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
169 ;; without first loading it, add the following sexp to your .emacs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
170
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
171 ;; (defgroup woman nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
172 ;; "Browse UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
173 ;; :tag "WoMan" :group 'help :load "woman")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
174
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
175
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
176 ;; WoMan currently runs two hooks: `woman-pre-format-hook' immediately
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
177 ;; before formatting a buffer and `woman-post-format-hook' immediately
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
178 ;; after formatting a buffer. These hooks can be used for special
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
179 ;; customizations that require code to be executed, etc., although
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
180 ;; most customization should be possible by setting WoMan user option
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
181 ;; variables, e.g. in `.emacs' and should NOT require the use of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
182 ;; hooks. `woman-pre-format-hook' might be appropriate for face
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
183 ;; customization, whereas `woman-post-format-hook' might be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
184 ;; appropriate for installing a dynamic menu using `imenu' (although
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
185 ;; it is better to use the built-in WoMan imenu support).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
186
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
187 ;; The WoMan menu provides an option to make a contents menu for the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
188 ;; current man page (using imenu). Alternatively, if you set the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
189 ;; variable `woman-imenu' to `t' then WoMan will do it automatically
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
190 ;; for every man page. The menu title is the value of the variable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
191 ;; `woman-imenu-title', which is "CONTENTS" by default. By default,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
192 ;; the menu shows manual sections and subsections, but you can change
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
193 ;; this by changing the value of `woman-imenu-generic-expression'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
194 ;; This facility is not yet widely tested and may be fooled by obscure
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
195 ;; man pages that `break the rules'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
196
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
197 ;; WoMan is configured not to replace spaces in an imenu *Completion*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
198 ;; buffer. For further documentation of the use of imenu, such as
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
199 ;; menu sorting, see the source file imenu.el, which is distributed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
200 ;; with GNU Emacs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
201
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
202 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
203
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
204 ;; Howard Melman made (essentially) the following suggestions, which
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
205 ;; are slightly different from the expression that I currently use.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
206 ;; You may prefer one of Howard's suggestions, which I think assume
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
207 ;; that `case-fold-search' is `t' (which it is by default):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
208
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
209 ;; (setq woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
210 ;; '((nil "^\\( \\)?\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 2)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
211
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
212 ;; will give support for .SH and .SS, though it won't show the heading
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
213 ;; name hierarchy. If you just want .SH in the imenu then use:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
214
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
215 ;; (setq woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
216 ;; '((nil "^\\([A-Z][A-Z ]+[A-Z]\\)[ \t]*$" 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
217
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
218 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
219
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
220
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
221 ;; Vertical spacing and blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
222 ;; ================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
223
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
224 ;; The number of consecutive blank lines in the formatted buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
225 ;; should be either 0 or 1. A blank line should leave a space like
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
226 ;; .sp 1 (p. 14). Current policy is to output vertical space only
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
227 ;; immediately before text is output.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
228
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
229
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
230 ;; Horizontal and vertical spacing and resolution
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
231 ;; ==============================================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
232
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
233 ;; WoMan currently assumes 10 characters per inch horizontally, hence
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
234 ;; a horizontal resolution of 24 basic units, and 5 lines per inch
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
235 ;; vertically, hence a vertical resolution of 48 basic units. (nroff
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
236 ;; uses 240 per inch).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
237
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
238
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
239 ;; The *WoMan-Log* buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
240 ;; ======================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
241
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
242 ;; This is modelled on the byte-compiler. It logs all files formatted
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
243 ;; by WoMan, and if WoMan finds anything that it cannot handle then it
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
244 ;; writes a warning to this buffer. If the variable `woman-show-log'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
245 ;; is non-nil (by default it is `nil') then WoMan automatically
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
246 ;; displays this buffer. Many WoMan warnings can be completely
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
247 ;; ignored, because they are reporting the fact that WoMan has ignored
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
248 ;; requests that it is correct to ignore. In some future version this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
249 ;; level of paranoia will be reduced, but not until WoMan is more
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
250 ;; reliable. At present, all warnings should be treated with some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
251 ;; suspicion. Uninterpreted escape sequences are also logged (in some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
252 ;; cases).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
253
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
254 ;; Uninterpreted ?roff requests can optionally be left in the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
255 ;; formatted buffer to indicate precisely where they occur by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
256 ;; resetting the variable `woman-ignore' to `nil' (by default it is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
257 ;; `t').
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
258
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
259 ;; Automatic initiation of woman decoding
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
260
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
261 ;; (Probably not a good idea. If you use it, be careful!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
262
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
263 ;; Put something like this in your .emacs. The call to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
264 ;; set-visited-file-name is to avoid font-locking triggered by
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
265 ;; automatic major mode selection.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
266
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
267 ;; (autoload 'woman-decode-region "woman")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
268
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
269 ;; (setq format-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
270 ;; (cons
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
271 ;; '(man "UN*X man-page source format" "\\.\\(TH\\|ig\\) "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
272 ;; woman-decode-region nil nil
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
273 ;; (lambda (arg)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
274 ;; set-visited-file-name
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
275 ;; (file-name-sans-extension buffer-file-name)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
276 ;; format-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
277
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
278
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
279 ;; Reporting Bugs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
280 ;; ==============
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
281
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
282 ;; If WoMan fails completely, or formats a file incorrectly
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
283 ;; (i.e. obviously wrongly or significantly differently from man) or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
284 ;; inelegantly, then please
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
285
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
286 ;; (a) check that you are running the latest version of woman.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
287 ;; available from my web site (see above),
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
288
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
289 ;; (b) check that the problem is not already described in the file
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
290 ;; woman.status, also available from my web site.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
291
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
292 ;; If both of the above are true then please email me the entry from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
293 ;; the *WoMan-Log* buffer relating to the problem file, together with
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
294 ;; a brief description of the problem. Please indicate where you got
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
295 ;; the source file from, but do not send it to me unless I ask you to!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
296 ;; Thanks. (There is at present no automated bug-reporting facility
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
297 ;; for WoMan.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
298
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
299 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
300
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
301 ;; NOTE:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
302
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
303 ;; CASE-DEPENDENCE OF FILENAMES. By default, WoMan ignores case in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
304 ;; file pathnames only when it seems appropriate. MS-Windows users
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
305 ;; who want complete case independence should set the NTEmacs variable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
306 ;; `w32-downcase-file-names' to `t' and use all lower case when
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
307 ;; setting WoMan file paths.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
308
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
309 ;; (1) INCOMPATIBLE CHANGE! WoMan no longer uses a persistent topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
310 ;; cache by default. (It caused too much confusion!) Explicitly set
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
311 ;; the variable `woman-cache-filename' to save the cache between Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
312 ;; sessions. This is recommended only if the command `woman' is too
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
313 ;; slow the first time that it is run in an Emacs session, while it
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
314 ;; builds its cache in main memory, which MAY be VERY slow.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
315
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
316 ;; (2) The user option `woman-cache-level' controls the amount of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
317 ;; information cached (in main memory and, optionally, saved to disc).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
318
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
319 ;; (3) UPDATING THE CACHE. A prefix argument always causes the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
320 ;; `woman' command (only) to rebuild its topic cache, and to re-save
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
321 ;; it to `woman-cache-filename' if this variable has a non-nil value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
322 ;; This is necessary if the NAMES (not contents) of any of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
323 ;; directories or files in the paths specified by `woman-manpath' or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
324 ;; `woman-path' change. If WoMan user options that affect the cache
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
325 ;; are changed then WoMan will automatically update its cache file on
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
326 ;; disc (if one is in use) the next time it is run in a new Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
327 ;; session.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
328
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
329 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
330
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
331
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
332 ;; TO DO
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
333 ;; =====
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
334
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
335 ;; Reconsider case sensitivity of file names.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
336 ;; MUST PROCESS .if, .nr IN ORDER ENCOUNTERED IN FILE! (rcsfile, mf).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
337 ;; Allow general delimiter in `\v', cf. `\h'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
338 ;; Improve major-mode documentation.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
339 ;; Pre-process conditionals in macro bodies if possible for speed?
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
340 ;; Emulate more complete preprocessor support for tbl (.TS/.TE)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
341 ;; Emulate some preprocessor support for eqn (.EQ/.EN)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
342 ;; Re-write filling and adjusting code!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
343 ;; Allow word wrap at comma (for long option lists)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
344 ;; Buffer list handling not quite right.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
345 ;; Make 10 or 12 pitch (cpi) optional -- 12 => ll = 78
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
346 ;; Use unpaddable space for tabbing?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
347 ;; Tidy up handling of fonts when filling and adjusting
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
348 ;; -- see text/text properties?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
349 ;; Improve speed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
350 ;; Add font-lock support (for quoted strings, etc.)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
351 ;; Optionally save large files in enriched format?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
352 ;; Add apropos facility by searching NAME (?) entry in man files?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
353 ;; Documentation -- optional auto-display of formatted WoMan man page?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
354 ;; Implement a bug reporter?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
355 ;; Support diversion and traps (to some extent) - for Tcl/tk pages?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
356 ;; Add a menu of WoMan buffers?
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
357 ;; Fix .fc properly?
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
358
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
359
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
360 ;; Implementation strategy [this description is now well out of date!]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
361 ;; -- three main passes, each to process respectively:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
362
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
363 ;; 1) non-breaking `.' requests including font macros
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
364 ;; 2) \ escape sequences, mainly special characters and font changes
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
365 ;; 3) breaking `.' requests, mainly filling and justification
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
366
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
367 ;; For each pass, a control function finds and pre-processes the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
368 ;; escape or request and then calls the appropriate function to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
369 ;; perform the required formatting. Based originally on enriched.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
370 ;; and format.el.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
371
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
372 ;; The background information that made this project possible is
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
373 ;; freely available courtesy of Bell Labs from
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
374 ;; http://cm.bell-labs.com/7thEdMan/
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
375
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
376
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
377 ;; Acknowledgements
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
378 ;; ================
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
379
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
380 ;; For Heather, Kathryn and Madelyn, the women in my life
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
381 ;; (although they will probably never use it)!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
382
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
383 ;; I also thank the following for helpful suggestions, bug reports,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
384 ;; code fragments, general interest, etc.:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
385 ;; Jari Aalto <jari.aalto@cs.tpu.fi>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
386 ;; Dean Andrews <dean@dra.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
387 ;; Juanma Barranquero <barranquero@laley-actualidad.es>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
388 ;; Karl Berry <kb@cs.umb.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
389 ;; Jim Chapman <jchapman@netcomuk.co.uk>
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
390 ;; Kin Cho <kin@neoscale.com>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
391 ;; Frederic Corne <frederic.corne@erli.fr>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
392 ;; Peter Craft <craft@alacritech.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
393 ;; Charles Curley <ccurley@trib.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
394 ;; Jim Davidson <jdavidso@teknowledge.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
395 ;; Kevin D'Elia <Kevin.DElia@mci.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
396 ;; John Fitch <jpff@maths.bath.ac.uk>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
397 ;; Hans Frosch <jwfrosch@rish.b17c.ingr.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
398 ;; Guy Gascoigne-Piggford <ggp@informix.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
399 ;; Brian Gorka <gorkab@sanchez.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
400 ;; Nicolai Henriksen <nhe@lyngso-industri.dk>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
401 ;; Thomas Herchenroeder <the@software-ag.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
402 ;; Alexander Hinds <ahinds@thegrid.net>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
403 ;; Stefan Hornburg <sth@hacon.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
404 ;; Theodore Jump <tjump@cais.com>
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
405 ;; David Kastrup <dak@gnu.org>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
406 ;; Paul Kinnucan <paulk@mathworks.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
407 ;; Jonas Linde <jonas@init.se>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
408 ;; Andrew McRae <andrewm@optimation.co.nz>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
409 ;; Howard Melman <howard@silverstream.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
410 ;; Dennis Pixton <dennis@math.binghamton.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
411 ;; T. V. Raman <raman@Adobe.COM>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
412 ;; Bruce Ravel <bruce.ravel@nist.gov>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
413 ;; Benjamin Riefenstahl <benny@crocodial.de>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
414 ;; Kevin Ruland <kruland@seistl.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
415 ;; Tom Schutter <tom@platte.com>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
416 ;; Wei-Xue Shi <wxshi@ma.neweb.ne.jp>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
417 ;; Fabio Somenzi <fabio@joplin.colorado.edu>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
418 ;; Karel Sprenger <ks@ic.uva.nl>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
419 ;; Chris Szurgot <szurgot@itribe.net>
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
420 ;; Paul A. Thompson <pat@po.cwru.edu>
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
421 ;; Arrigo Triulzi <arrigo@maths.qmw.ac.uk>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
422 ;; Geoff Voelker <voelker@cs.washington.edu>
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
423 ;; Eli Zaretskii <eliz@is.elta.co.il>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
424
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
425 ;;; History:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
426 ;; For recent change log see end of file.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
427
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
428
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
429 ;;; Code:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
430
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
431 (defvar woman-version "0.551 (beta)" "WoMan version information.")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
432
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
433 (require 'man)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
434 (eval-when-compile ; to avoid compiler warnings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
435 (require 'dired)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
436 (require 'apropos))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
437
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
438 (defun woman-mapcan (fn x)
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
439 "Return concatenated list of FN applied to successive `car' elements of X.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
440 FN must return a list, cons or nil. Useful for splicing into a list."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
441 ;; Based on the Standard Lisp function MAPCAN but with args swapped!
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
442 ;; More concise implementation than the recursive one. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
443 (apply #'nconc (mapcar fn x)))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
444
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
445 (defun woman-parse-colon-path (paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
446 "Explode search path string PATHS into a list of directory names.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
447 Allow Cygwin colon-separated search paths on Microsoft platforms.
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
448 Replace null components by calling `woman-parse-man.conf'.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
449 As a special case, if PATHS is nil then replace it by calling
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
450 `woman-parse-man.conf'."
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
451 ;; Based on suggestions by Jari Aalto and Eli Zaretskii.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
452 ;; parse-colon-path returns nil for a null path component and
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
453 ;; an empty substring of MANPATH denotes the default list.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
454 (if (memq system-type '(windows-nt ms-dos))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
455 (cond ((null paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
456 (mapcar 'woman-Cyg-to-Win (woman-parse-man.conf)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
457 ((string-match ";" paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
458 ;; Assume DOS-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
459 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
460 (lambda (x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
461 (if x
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
462 (list x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
463 (mapcar 'woman-Cyg-to-Win (woman-parse-man.conf))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
464 (parse-colon-path paths)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
465 ((string-match "\\`[a-zA-Z]:" paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
466 ;; Assume single DOS-style path...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
467 paths)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
468 (t
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
469 ;; Assume UNIX/Cygwin-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
470 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
471 (lambda (x)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
472 (mapcar 'woman-Cyg-to-Win
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
473 (if x (list x) (woman-parse-man.conf))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
474 (let ((path-separator ":"))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
475 (parse-colon-path paths)))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
476 ;; Assume host-default-style path-list...
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
477 (woman-mapcan ; splice list into list
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
478 (lambda (x) (if x (list x) (woman-parse-man.conf)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
479 (parse-colon-path (or paths "")))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
480
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
481 (defun woman-Cyg-to-Win (file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
482 "Convert an absolute filename FILE from Cygwin to Windows form."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
483 ;; Code taken from w32-symlinks.el
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
484 (if (eq (aref file 0) ?/)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
485 ;; Try to use Cygwin mount table via `cygpath.exe'.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
486 (condition-case nil
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
487 (with-temp-buffer
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
488 ;; cygpath -m file
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
489 (call-process "cygpath" nil t nil "-m" file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
490 (buffer-substring 1 (buffer-size)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
491 (error
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
492 ;; Assume no `cygpath' program available.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
493 ;; Hack /cygdrive/x/ or /x/ or (obsolete) //x/ to x:/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
494 (when (string-match "\\`\\(/cygdrive\\|/\\)?/./" file)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
495 (if (match-string 1) ; /cygdrive/x/ or //x/ -> /x/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
496 (setq file (substring file (match-end 1))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
497 (aset file 0 (aref file 1)) ; /x/ -> xx/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
498 (aset file 1 ?:)) ; xx/ -> x:/
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
499 file))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
500 file))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
501
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
502
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
503 ;;; User options:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
504
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
505 ;; NB: Group identifiers must be lowercase!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
506
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
507 (defgroup woman nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
508 "Browse UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
509 :tag "WoMan"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
510 :group 'help)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
511
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
512 (defcustom woman-show-log nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
513 "*If non-nil then show the *WoMan-Log* buffer if appropriate.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
514 I.e. if any warning messages are written to it. Default is nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
515 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
516 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
517
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
518 (defcustom woman-pre-format-hook nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
519 "*Hook run by WoMan immediately before formatting a buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
520 Change only via `Customization' or the function `add-hook'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
521 :type 'hook
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
522 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
523
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
524 (defcustom woman-post-format-hook nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
525 "*Hook run by WoMan immediately after formatting a buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
526 Change only via `Customization' or the function `add-hook'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
527 :type 'hook
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
528 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
529
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
530
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
531 ;; Interface options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
532
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
533 (defgroup woman-interface nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
534 "Interface options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
535 :tag "WoMan Interface"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
536 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
537
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
538 (defcustom woman-man.conf-path
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
539 (let ((path '("/usr/lib" "/etc")))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
540 (if (eq system-type 'windows-nt)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
541 (mapcar 'woman-Cyg-to-Win path)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
542 path))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
543 "*List of dirs to search and/or files to try for man config file.
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
544 A trailing separator (`/' for UNIX etc.) on directories is optional,
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
545 and the filename is used if a directory specified is the first to
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
546 contain the strings \"man\" and \".conf\" (in that order).
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
547 If MANPATH is not set but a config file is found then it is parsed
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
548 instead to provide a default value for `woman-manpath'."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
549 :type '(repeat string)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
550 :group 'woman-interface)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
551
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
552 (defun woman-parse-man.conf ()
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
553 "Parse if possible configuration file for man command.
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
554 Used only if MANPATH is not set or contains null components.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
555 Look in `woman-man.conf-path' and return a value for `woman-manpath'.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
556 Concatenate data from all lines in the config file of the form
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
557 MANPATH /usr/man
30018
c7243fc7bcb6 (woman-man.conf-path): Explicitly include the debian man-db config file
Miles Bader <miles@gnu.org>
parents: 29669
diff changeset
558 or
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
559 MANDATORY_MANPATH /usr/man
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
560 or
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
561 OPTIONAL_MANPATH /usr/man"
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
562 ;; Functionality suggested by Charles Curley.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
563 (let ((path woman-man.conf-path)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
564 file manpath)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
565 (while (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
566 path
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
567 (not (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
568 (file-readable-p (setq file (car path)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
569 ;; If not a file then find the file:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
570 (or (not (file-directory-p file))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
571 (and
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
572 (setq file
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
573 (directory-files file t "man.*\\.conf" t))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
574 (file-readable-p (setq file (car file)))))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
575 ;; Parse the file -- if no MANPATH data ignore it:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
576 (with-temp-buffer
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
577 (insert-file-contents file)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
578 (while (re-search-forward
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
579 ;; `\(?: ... \)' is a "shy group"
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
580 "\
54301
7caa4944980e (woman-man.conf-path): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 52567
diff changeset
581 ^[ \t]*\\(?:MANDATORY_\\|OPTIONAL_\\)?MANPATH[ \t]+\\(\\S-+\\)" nil t)
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
582 (setq manpath (cons (match-string 1) manpath)))
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
583 manpath))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
584 ))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
585 (setq path (cdr path)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
586 (nreverse manpath)))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
587
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
588 (defcustom woman-manpath
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
589 (or (woman-parse-colon-path (getenv "MANPATH"))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
590 '("/usr/man" "/usr/share/man" "/usr/local/man"))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
591 "*List of DIRECTORY TREES to search for UN*X manual files.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
592 Each element should be the name of a directory that contains
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
593 subdirectories of the form `man?', or more precisely subdirectories
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
594 selected by the value of `woman-manpath-man-regexp'. Non-directory
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
595 and unreadable files are ignored.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
596
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
597 If not set then the environment variable MANPATH is used. If no such
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
598 environment variable is found, the default list is determined by
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
599 consulting the man configuration file if found, which is determined by
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
600 the user option `woman-man.conf-path'. An empty substring of MANPATH
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
601 denotes the default list.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
602
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
603 Any environment variables (names must have the UN*X-style form $NAME,
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
604 e.g. $HOME, $EMACSDATA, $emacs_dir) are evaluated first but each
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
605 element must evaluate to a SINGLE directory name. Trailing `/'s are
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
606 ignored. (Specific directories in `woman-path' are also searched.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
607
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
608 Microsoft platforms:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
609 I recommend including drive letters explicitly, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
610
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
611 (\"C:/Cygwin/usr/man/\" \"C:/Cygwin/usr/local/man\").
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
612
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
613 The MANPATH environment variable may be set using DOS semi-colon-
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
614 separated or UN*X/Cygwin colon-separated syntax (but not mixed)."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
615 :type '(repeat string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
616 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
617
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
618 (defcustom woman-manpath-man-regexp "[Mm][Aa][Nn]"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
619 "Regexp to match man directories UNDER `woman-manpath' directories.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
620 These normally have names of the form `man?'. Its default value is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
621 \"[Mm][Aa][Nn]\", which is case-insensitive mainly for the benefit of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
622 Microsoft platforms. Its purpose is to avoid `cat?', `.', `..', etc."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
623 ;; Based on a suggestion by Wei-Xue Shi.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
624 :type 'string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
625 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
626
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
627 (defcustom woman-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
628 (if (eq system-type 'ms-dos) '("$DJDIR/info" "$DJDIR/man/cat[1-9onlp]"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
629 "*List of SPECIFIC DIRECTORIES to search for UN*X manual files.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
630 For example
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
631
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
632 (\"/emacs/etc\").
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
633
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
634 These directories are searched in addition to the directory trees
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
635 specified in `woman-manpath'. Each element should be a directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
636 string or nil, which represents the current directory when the path is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
637 expanded and cached. However, the last component (only) of each
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
638 directory string is treated as a regexp \(Emacs, not shell) and the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
639 string is expanded into a list of matching directories. Non-directory
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
640 and unreadable files are ignored. The default value is nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
641
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
642 Any environment variables (which must have the UN*X-style form $NAME,
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
643 e.g. $HOME, $EMACSDATA, $emacs_dir) are evaluated first but each
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
644 element must evaluate to a SINGLE directory name (regexp, see above).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
645 For example
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
646
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
647 (\"$EMACSDATA\") [or equivalently (\"$emacs_dir/etc\")].
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
648
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
649 Trailing `/'s are discarded. (The directory trees in `woman-manpath'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
650 are also searched.) On Microsoft platforms I recommend including
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
651 drive letters explicitly."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
652 :type '(repeat (choice string (const nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
653 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
654
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
655 (defcustom woman-cache-level 2
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
656 "*The level of topic caching.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
657 1 - cache only the topic and directory lists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
658 (the only level before version 0.34 - only for compatibility);
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
659 2 - cache also the directories for each topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
660 (faster, without using much more memory);
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
661 3 - cache also the actual filenames for each topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
662 (fastest, but uses twice as much memory).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
663 The default value is currently 2, a good general compromise.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
664 If the `woman' command is slow to find files then try 3, which may be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
665 particularly beneficial with large remote-mounted man directories.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
666 Run the `woman' command with a prefix argument or delete the cache
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
667 file `woman-cache-filename' for a change to take effect.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
668 \(Values < 1 behave like 1; values > 3 behave like 3.)"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
669 :type '(choice (const :tag "Minimal" 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
670 (const :tag "Default" 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
671 (const :tag "Maximal" 3))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
672 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
673
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
674 (defcustom woman-cache-filename nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
675 "*The full pathname of the WoMan directory and topic cache file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
676 It is used to save and restore the cache between sessions. This is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
677 especially useful with remote-mounted man page files! The default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
678 value of nil suppresses this action. The `standard' non-nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
679 filename is \"~/.wmncach.el\". Remember that a prefix argument forces
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
680 the `woman' command to update and re-write the cache."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
681 :type '(choice (const :tag "None" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
682 (const :tag "~/.wmncach.el" "~/.wmncach.el")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
683 file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
684 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
685
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
686 (defcustom woman-dired-keys t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
687 "*List of `dired' mode keys to define to run WoMan on current file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
688 E.g. '(\"w\" \"W\"), or any non-null atom to automatically define
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
689 \"w\" and \"W\" if they are unbound, or nil to do nothing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
690 Default is t."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
691 :type '(choice (const :tag "None" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
692 (repeat string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
693 (other :tag "Auto" t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
694 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
695
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
696 (defcustom woman-imenu-generic-expression
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
697 '((nil "\n\\([A-Z].*\\)" 1) ; SECTION, but not TITLE
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
698 ("*Subsections*" "^ \\([A-Z].*\\)" 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
699 "*Imenu support for Sections and Subsections.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
700 An alist with elements of the form (MENU-TITLE REGEXP INDEX) --
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
701 see the documentation for `imenu-generic-expression'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
702 :type 'sexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
703 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
704
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
705 (defcustom woman-imenu nil
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
706 "*If non-nil then WoMan adds a Contents menu to the menubar.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
707 It does this by calling `imenu-add-to-menubar'. Default is nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
708 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
709 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
710
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
711 (defcustom woman-imenu-title "CONTENTS"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
712 "*The title to use if WoMan adds a Contents menu to the menubar.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
713 Default is \"CONTENTS\"."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
714 :type 'string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
715 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
716
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
717 (defcustom woman-topic-at-point-default 'confirm
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
718 ;; `woman-topic-at-point' may be let-bound when woman is loaded, in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
719 ;; which case its global value does not get defined.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
720 ;; `woman-file-name' sets it to this value if it is unbound.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
721 "*Default value for `woman-topic-at-point'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
722 :type '(choice (const :tag "Yes" t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
723 (const :tag "No" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
724 (other :tag "Confirm" confirm))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
725 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
726
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
727 (defcustom woman-topic-at-point woman-topic-at-point-default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
728 "*Controls use by `woman' of `word at point' as a topic suggestion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
729 If non-nil then the `woman' command uses the word at point as an
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
730 initial topic suggestion when it reads a topic from the minibuffer; if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
731 t then the `woman' command uses the word at point WITHOUT
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
732 INTERACTIVE CONFIRMATION if it exists as a topic. The default value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
733 is `confirm', meaning suggest a topic and ask for confirmation."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
734 :type '(choice (const :tag "Yes" t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
735 (const :tag "No" nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
736 (other :tag "Confirm" confirm))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
737 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
738
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
739 (defvar woman-file-regexp nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
740 "Regexp used to select (possibly compressed) man source files, e.g.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
741 \"\\.\\([0-9lmnt]\\w*\\)\\(\\.\\(g?z\\|bz2\\)\\)?\\'\".
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
742 Built automatically from the customizable user options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
743 `woman-uncompressed-file-regexp' and `woman-file-compression-regexp'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
744
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
745 (defvar woman-uncompressed-file-regexp) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
746 (defvar woman-file-compression-regexp) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
747
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
748 (defun set-woman-file-regexp (symbol value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
749 "Bind SYMBOL to VALUE and set `woman-file-regexp' as per user customizations.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
750 Used as :set cookie by Customize when customizing the user options
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
751 `woman-uncompressed-file-regexp' and `woman-file-compression-regexp'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
752 (set-default symbol value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
753 (and (boundp 'woman-uncompressed-file-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
754 (boundp 'woman-file-compression-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
755 (setq woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
756 (concat woman-uncompressed-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
757 "\\("
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
758 (substring woman-file-compression-regexp 0 -2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
759 "\\)?\\'"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
760
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
761 (defcustom woman-uncompressed-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
762 "\\.\\([0-9lmnt]\\w*\\)" ; disallow no extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
763 "*Do not change this unless you are sure you know what you are doing!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
764 Regexp used to select man source files (ignoring any compression extension).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
765
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
766 The SysV standard man pages use two character suffixes, and this is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
767 becoming more common in the GNU world. For example, the man pages
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
768 in the ncurses package include `toe.1m', `form.3x', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
769
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
770 Note: an optional compression regexp will be appended, so this regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
771 MUST NOT end with any kind of string terminator such as $ or \\'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
772 :type 'regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
773 :set 'set-woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
774 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
775
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
776 (defcustom woman-file-compression-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
777 "\\.\\(g?z\\|bz2\\)\\'"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
778 "*Do not change this unless you are sure you know what you are doing!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
779 Regexp used to match compressed man file extensions for which
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
780 decompressors are available and handled by auto-compression mode,
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
781 e.g. \"\\\\.\\\\(g?z\\\\|bz2\\\\)\\\\'\" for `gzip' or `bzip2'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
782 Should begin with \\. and end with \\' and MUST NOT be optional."
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
783 ;; Should be compatible with car of
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
784 ;; `jka-compr-file-name-handler-entry', but that is unduly
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
785 ;; complicated, includes an inappropriate extension (.tgz) and is
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
786 ;; not loaded by default!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
787 :type 'regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
788 :set 'set-woman-file-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
789 :group 'woman-interface)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
790
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
791 (defcustom woman-use-own-frame ; window-system
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
792 (or (and (fboundp 'display-graphic-p) (display-graphic-p)) ; Emacs 21
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
793 (memq window-system '(x w32))) ; Emacs 20
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
794 "*If non-nil then use a dedicated frame for displaying WoMan windows.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
795 Only useful when run on a graphic display such as X or MS-Windows."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
796 :type 'boolean
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
797 :group 'woman-interface)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
798
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
799
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
800 ;; Formatting options
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
801
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
802 (defgroup woman-formatting nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
803 "Formatting options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
804 :tag "WoMan Formatting"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
805 :group 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
806
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
807 (defcustom woman-fill-column 65
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
808 "*Right margin for formatted text -- default is 65."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
809 :type 'integer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
810 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
811
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
812 (defcustom woman-fill-frame nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
813 ;; Based loosely on a suggestion by Theodore Jump:
54516
796bcfb5fa61 (woman-fill-frame): Doc fix.
Juri Linkov <juri@jurta.org>
parents: 54385
diff changeset
814 "*If non-nil then most of the window width is used."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
815 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
816 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
817
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
818 (defcustom woman-default-indent 5
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
819 "*Default prevailing indent set by -man macros -- default is 5.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
820 Set this variable to 7 to emulate GNU man formatting."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
821 :type 'integer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
822 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
823
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
824 (defcustom woman-bold-headings t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
825 "*If non-nil then embolden section and subsection headings. Default is t.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
826 Heading emboldening is NOT standard `man' behaviour."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
827 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
828 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
829
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
830 (defcustom woman-ignore t
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
831 "*If non-nil then unrecognised requests etc. are ignored. Default is t.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
832 This gives the standard ?roff behaviour. If nil then they are left in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
833 the buffer, which may aid debugging."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
834 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
835 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
836
54385
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
837 (defcustom woman-preserve-ascii t
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
838 "*If non-nil, preserve ASCII characters in the WoMan buffer.
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
839 Otherwise, to save time, some backslashes and spaces may be
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
840 represented differently (as the values of the variables
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
841 `woman-escaped-escape-char' and `woman-unpadded-space-char'
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
842 respectively) so that the buffer content is strictly wrong even though
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
843 it should display correctly. This should be irrelevant unless the
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
844 buffer text is searched, copied or saved to a file."
d8314f01e053 (woman-preserve-ascii): Default value changed to t and
Eli Zaretskii <eliz@gnu.org>
parents: 54301
diff changeset
845 ;; This option should probably be removed!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
846 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
847 :group 'woman-formatting)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
848
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
849 (defcustom woman-emulation 'nroff
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
850 "*WoMan emulation, currently either nroff or troff. Default is nroff.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
851 Troff emulation is experimental and largely untested.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
852 \(Add groff later?)"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
853 :type '(choice (const nroff) (const troff))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
854 :group 'woman-formatting)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
855
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
856
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
857 ;; Faces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
858
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
859 (defgroup woman-faces nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
860 "Face options for browsing UNIX manual pages `wo (without) man'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
861 :tag "WoMan Faces"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
862 :group 'woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
863 :group 'faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
864
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
865 (defcustom woman-fontify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
866 (or (and (fboundp 'display-color-p) (display-color-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
867 (and (fboundp 'display-graphic-p) (display-graphic-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
868 (x-display-color-p))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
869 "*If non-nil then WoMan assumes that face support is available.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
870 It defaults to a non-nil value if the display supports either colors
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
871 or different fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
872 :type 'boolean
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
873 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
874
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
875 ;; This is overkill! Troff uses just italic; Nroff uses just underline.
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
876 ;; You should probably select either italic or underline as you prefer, but
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
877 ;; not both, although italic and underline work together perfectly well!
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
878 (defface woman-italic-face
42452
0cfd64a10789 (ps-font-lock-face-attributes): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 39653
diff changeset
879 `((((background light)) (:slant italic :underline t :foreground "red"))
0cfd64a10789 (ps-font-lock-face-attributes): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 39653
diff changeset
880 (((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
881 "Face for italic font in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
882 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
883
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
884 (defface woman-bold-face
42452
0cfd64a10789 (ps-font-lock-face-attributes): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 39653
diff changeset
885 '((((background light)) (:weight bold :foreground "blue"))
0cfd64a10789 (ps-font-lock-face-attributes): Use :weight and :slant.
Richard M. Stallman <rms@gnu.org>
parents: 39653
diff changeset
886 (((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
887 "Face for bold font in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
888 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
889
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
890 ;; Brown is a good compromise: it is distinguishable from the default
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
891 ;; but not enough so to make font errors look terrible. (Files that use
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
892 ;; non-standard fonts seem to do so badly or in idiosyncratic ways!)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
893 (defface woman-unknown-face
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
894 '((((background light)) (:foreground "brown"))
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
895 (((background dark)) (:foreground "cyan")))
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
896 "Face for all unknown fonts in man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
897 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
898
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
899 (defface woman-addition-face
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
900 '((t (:foreground "orange")))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
901 "Face for all WoMan additions to man pages."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
902 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
903
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
904 (defun woman-default-faces ()
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
905 "Set foreground colours of italic and bold faces to their default values."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
906 (interactive)
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
907 (face-spec-set 'woman-italic-face
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
908 (face-user-default-spec 'woman-italic-face))
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
909 (face-spec-set 'woman-bold-face (face-user-default-spec 'woman-bold-face)))
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
910
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
911 (defun woman-monochrome-faces ()
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
912 "Set foreground colours of italic and bold faces to that of the default face.
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
913 This is usually either black or white."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
914 (interactive)
32759
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
915 (set-face-foreground 'woman-italic-face 'unspecified)
71a6a11c10d0 (woman-italic-face, woman-bold-face, woman-unknown-face):
Miles Bader <miles@gnu.org>
parents: 30018
diff changeset
916 (set-face-foreground 'woman-bold-face 'unspecified))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
917
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
918 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
919 ;; 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
920 (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
921 (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
922 "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
923
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
924 (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
925 "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
926 (let (symbol-fonts)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
927 ;; 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
928 ;; 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
929 (while fonts
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
930 (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
931 (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
932 (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
933 (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
934 symbol-fonts))
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 (when woman-font-support
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
937 (make-face 'woman-symbol-face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
938
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
939 ;; 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
940 ;; avoid unnecessarily upsetting the line spacing in NTEmacs 20.5!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
941
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
942 (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
943 "*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
944 :type 'boolean
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
945 :group 'woman-faces)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
946
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
947 (defcustom woman-use-symbol-font nil
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
948 "*If non-nil then may use the symbol font. It is off by default,
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
949 mainly because it may change the line spacing (in NTEmacs 20.5)."
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
950 :type 'boolean
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
951 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
952
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
953 (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
954 (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
955 (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
956 "Symbol font(s), preferably same size as default when WoMan was loaded.")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
957
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
958 (defcustom woman-symbol-font (car woman-symbol-font-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
959 "*A string describing the symbol font to use for special characters.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
960 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
961 Under MS-Windows, the default is
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
962 \"-*-Symbol-normal-r-*-*-*-*-96-96-p-*-ms-symbol\"."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
963 :type `(choice
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
964 ,@(mapcar (lambda (x) (list 'const x))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
965 woman-symbol-font-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
966 string)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
967 :group 'woman-faces)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
968
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
969 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
970
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
971 ;; 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
972 (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
973 (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
974 (defvar woman-symbol-font nil)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
975 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
976
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
977
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
978 ;;; Internal variables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
979
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
980 (defconst woman-justify-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
981 '(left right center full)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
982 "Justify styles for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
983 (defconst woman-adjust-left 0 ; == adjust off, noadjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
984 "Adjustment indicator `l' -- adjust left margin only.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
985 (defconst woman-adjust-right 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
986 "Adjustment indicator `r' -- adjust right margin only.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
987 (defconst woman-adjust-center 2
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
988 "Adjustment indicator `c' -- center.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
989 (defconst woman-adjust-both 3 ; default -- adj,both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
990 "Adjustment indicator `b' or `n' -- adjust both margins.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
991
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
992 (defvar woman-adjust woman-adjust-both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
993 "Current adjustment number-register value.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
994 (defvar woman-adjust-previous woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
995 "Previous adjustment number-register value.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
996 (defvar woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
997 (nth woman-adjust woman-justify-list) ; use vector?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
998 "Current justification style for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
999 (defvar woman-justify-previous woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1000 "Previous justification style for `fill-region-as-paragraph'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1001
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1002 (defvar woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1003 "Current left margin.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1004 (defvar woman-prevailing-indent woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1005 "Current prevailing indent.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1006 (defvar woman-interparagraph-distance 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1007 "Interparagraph distance in lines.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1008 Set by .PD; used by .SH, .SS, .TP, .LP, .PP, .P, .IP, .HP.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1009 (defvar woman-leave-blank-lines nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1010 "Blank lines to leave as vertical space.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1011 (defconst woman-tab-width 5
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1012 "Default tab width set by -man macros.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1013 (defvar woman-nofill nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1014 "Current fill mode: nil for filling.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1015 (defvar woman-RS-left-margin nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1016 "Left margin stack for nested use of `.RS/.RE'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1017 (defvar woman-RS-prevailing-indent nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1018 "Prevailing indent stack for nested use of `.RS/.RE'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1019 (defvar woman-nospace nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1020 "Current no-space mode: nil for normal spacing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1021 Set by `.ns' request; reset by any output or `.rs' request")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1022
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1023 (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
1024 "Set `woman-nospace' to nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1025 (setq woman-nospace nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1026
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1027 (defconst woman-mode-line-format
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1028 ;; This is essentially the Man-mode format with page numbers removed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1029 ;; and line numbers added. (Online documents do not have pages, but
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1030 ;; they do have lines!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1031 '("-" mode-line-mule-info mode-line-modified
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1032 mode-line-frame-identification mode-line-buffer-identification
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1033 " " global-mode-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1034 " %[(WoMan" mode-line-process minor-mode-alist ")%]--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1035 (line-number-mode "L%l--")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1036 (-3 . "%p") "-%-")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1037 "Mode line format for WoMan buffer.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1038
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1039 (defconst woman-request-regexp "^[.'][ \t]*\\(\\S +\\) *"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1040 ;; Was "^\\.[ \t]*\\([a-z0-9]+\\) *" but cvs.1 uses a macro named
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1041 ;; "`" and CGI.man uses a macro named "''"!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1042 ;; CGI.man uses ' as control character in places -- it *should*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1043 ;; suppress breaks!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1044 ;; Could end with "\\( +\\|$\\)" instead of " *"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1045 "Regexp to match a ?roff request plus trailing white space.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1046
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1047 (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
1048 "Buffer-local: set to true if function `woman-imenu' has been called.")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1049 (make-variable-buffer-local 'woman-imenu-done)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1050
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1051 ;; From imenu.el -- needed when reformatting a file in its old buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1052 ;; The latest buffer index used to update the menu bar menu.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1053 (eval-when-compile
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1054 (require 'imenu))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1055 (make-variable-buffer-local 'imenu--last-menubar-index-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1056
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1057 (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
1058 "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
1059 Each element is of the form (FILE-NAME . BUFFER-NAME).")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1060
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1061 (defvar woman-buffer-number 0
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1062 "Ordinal number of current buffer entry in `woman-buffer-alist'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1063 The ordinal numbers start from 0.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1064
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1065 (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
1066 "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
1067 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
1068 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
1069
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1070
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1071 ;;; Specialized utility functions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1072
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1073 ;;; Fast deletion without saving on the kill ring (cf. simple.el):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1074
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1075 (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
1076 "Delete rest of current line; if all blank then delete thru newline.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1077 With a numeric argument ARG, delete that many lines from point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1078 Negative arguments delete lines backward."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1079 ;; This is a non-interactive version of kill-line in simple.el that
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1080 ;; deletes instead of killing and assumes kill-whole-line is nil,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1081 ;; which is essential!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1082 (delete-region (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1083 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1084 (if arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1085 (forward-line arg)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1086 (if (eobp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1087 (signal 'end-of-buffer nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1088 (if (looking-at "[ \t]*$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1089 (forward-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1090 (end-of-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1091 (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1092
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1093 (defsubst woman-delete-whole-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1094 "Delete current line from beginning including eol."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1095 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1096 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1097
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1098 (defsubst woman-delete-following-space ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1099 "Delete all spaces and tabs FOLLOWING point (cf. `delete-horizontal-space')."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1100 ;; cf. delete-horizontal-space in simple.el:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1101 (delete-region (point) (progn (skip-chars-forward " \t") (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1102
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1103 (defsubst woman-delete-match (subexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1104 "Delete subexpression SUBEXP of buffer text matched by last search."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1105 (delete-region (match-beginning subexp) (match-end subexp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1106
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1107 ;; delete-char does not kill by default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1108 ;; delete-backward-char does not kill by default
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1109 ;; delete-horizontal-space does not kill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1110 ;; delete-blank-lines does not kill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1111
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1112
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1113 ;;; File handling:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1114
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1115 (defvar woman-expanded-directory-path nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1116 "Expanded directory list cache. Resetting to nil forces update.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1117
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1118 (defvar woman-topic-all-completions nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1119 "Expanded topic alist cache. Resetting to nil forces update.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1120
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1121 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1122 (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
1123 "Browse UN*X man page for TOPIC (Without using external Man program).
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1124 The major browsing mode used is essentially the standard Man mode.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1125 Choose the filename for the man page using completion, based on the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1126 topic selected from the directories specified in `woman-manpath' and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1127 `woman-path'. The directory expansions and topics are cached for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1128 speed, but a non-nil interactive argument forces the caches to be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1129 updated (e.g. to re-interpret the current directory).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1130
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1131 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
1132 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
1133 (interactive (list nil current-prefix-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1134 ;; The following test is for non-interactive calls via gnudoit etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1135 (if (or (interactive-p) (not (stringp topic)) (string-match "\\S " topic))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1136 (let ((file-name (woman-file-name topic re-cache)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1137 (if file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1138 (woman-find-file file-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1139 (message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1140 "WoMan Error: No matching manual files found in search path")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1141 (ding))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1142 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1143 (message "WoMan Error: No topic specified in non-interactive call")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1144 (ding))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1145 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1146
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1147 ;; Allow WoMan to be called via the standard Help menu:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1148 (define-key-after menu-bar-manuals-menu [woman]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1149 '(menu-item "Read Man Page (WoMan)..." woman
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1150 :help "Man-page documentation Without Man") t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1151
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1152 (defvar woman-cached-data nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1153 "A list of cached data used to determine cache validity.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1154 Set from the cache by `woman-read-directory-cache'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1155
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1156 (defun woman-cached-data ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1157 "Generate a list of data used to determine cache validity.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1158 Called both to generate and to check the cache!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1159 ;; Must use substituted paths because values of env vars may change!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1160 (list woman-cache-level
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1161 (mapcar 'substitute-in-file-name woman-manpath)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1162 (mapcar 'substitute-in-file-name woman-path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1163
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1164 (defun woman-read-directory-cache ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1165 "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
1166 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
1167 Return t if the file exists, nil otherwise."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1168 (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1169 woman-cache-filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1170 (load woman-cache-filename t nil t) ; file exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1171 (equal woman-cached-data (woman-cached-data)))) ; cache valid
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1172
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1173 (defun woman-write-directory-cache ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1174 "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
1175 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
1176 (if woman-cache-filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1177 (save-excursion ; to restore current buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1178 ;; Make a temporary buffer; name starting with space "hides" it.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1179 (let ((standard-output
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1180 (set-buffer (generate-new-buffer "WoMan tmp buffer")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1181 (backup-inhibited t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1182 ;; (switch-to-buffer standard-output t) ; only for debugging
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1183 (buffer-disable-undo standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1184 (princ
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1185 ";;; WoMan directory and topic cache -- generated automatically\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1186 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1187 ;; For data validity check:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1188 `(setq woman-cached-data ',(woman-cached-data)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1189 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1190 `(setq woman-expanded-directory-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1191 ',woman-expanded-directory-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1192 (print
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1193 `(setq woman-topic-all-completions
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1194 ',woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1195 (write-file woman-cache-filename) ; write CURRENT buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1196 (kill-buffer standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1197 ))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1198
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1199 (defvar woman-topic-history nil "Topic read history.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1200 (defvar woman-file-history nil "File-name read history.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1201
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1202 (defun woman-file-name (topic &optional re-cache)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1203 "Get the name of the UN*X man-page file describing a chosen TOPIC.
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1204 When `woman' is called interactively, the word at point may be used as
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1205 the topic or initial topic suggestion, subject to the value of the
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1206 user option `woman-topic-at-point'. Return nil if no file can be found.
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1207 Optional argument RE-CACHE, if non-nil, forces the cache to be re-read."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1208 ;; Handle the caching of the directory and topic lists:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1209 (if (and (not re-cache)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1210 (or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1211 (and woman-expanded-directory-path woman-topic-all-completions)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1212 (woman-read-directory-cache)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1213 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1214 (message "Building list of manual directory expansions...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1215 (setq woman-expanded-directory-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1216 (woman-expand-directory-path woman-manpath woman-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1217 (message "Building completion list of all manual topics...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1218 (setq woman-topic-all-completions
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1219 (woman-topic-all-completions woman-expanded-directory-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1220 (woman-write-directory-cache))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1221 ;; There is a problem in that I want to offer case-insensitive
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1222 ;; completions, but to return only a case-sensitive match. This
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1223 ;; does not seem to work properly by default, so I re-do the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1224 ;; completion if necessary.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1225 (let (files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1226 (or (stringp topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1227 (and (eq t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1228 (if (boundp 'woman-topic-at-point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1229 woman-topic-at-point
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1230 ;; Was let-bound when file loaded, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1231 (setq woman-topic-at-point woman-topic-at-point-default)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1232 (setq topic
52567
22ddccd48cc0 (woman-file-name, woman-follow-word):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1233 (or (current-word t) "")) ; only within or adjacent to word
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1234 (assoc topic woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1235 (setq topic
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1236 (completing-read
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1237 "Manual entry: "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1238 woman-topic-all-completions nil 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1239 ;; Initial input suggestion (was nil), with
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1240 ;; cursor at left ready to kill suggestion!:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1241 (and woman-topic-at-point
52567
22ddccd48cc0 (woman-file-name, woman-follow-word):
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
1242 (cons (or (current-word) "") 0)) ; nearest word
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1243 'woman-topic-history)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1244 ;; Note that completing-read always returns a string.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1245 (if (= (length topic) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1246 nil ; no topic, so no file!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1247 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1248 ((setq files (woman-file-name-all-completions topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1249 ;; Complete topic more carefully, i.e. use the completion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1250 ;; rather than the string entered by the user:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1251 ((setq files (all-completions topic woman-topic-all-completions))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1252 (while (/= (length topic) (length (car files)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1253 (setq files (cdr files)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1254 (setq files (woman-file-name-all-completions (car files)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1255 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1256 ((null files) nil) ; no file found for topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1257 ((null (cdr files)) (car (car files))) ; only 1 file for topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1258 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1259 ;; Multiple files for topic, so must select 1.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1260 ;; Unread the command event (TAB = ?\t = 9) that runs the command
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1261 ;; `minibuffer-complete' in order to automatically complete the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1262 ;; minibuffer contents as far as possible.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1263 (setq unread-command-events '(9)) ; and delete any type-ahead!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1264 (completing-read "Manual file: " files nil 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1265 (try-completion "" files) 'woman-file-history)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1266 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1267
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1268 (defun woman-select (predicate list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1269 "Select unique elements for which PREDICATE is true in LIST.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1270 \(Note that this function changes the value of LIST.)"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1271 ;; Intended to be fast by avoiding recursion and list copying.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1272 (while (and list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1273 (or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1274 (member (car list) (cdr list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1275 (not (funcall predicate (car list)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1276 (setq list (cdr list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1277 (if list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1278 (let ((newlist list) cdr_list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1279 (while (setq cdr_list (cdr list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1280 (if (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1281 (not (member (car cdr_list) (cdr cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1282 (funcall predicate (car cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1283 (setq list cdr_list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1284 (setcdr list (cdr cdr_list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1285 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1286 newlist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1287
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1288 (defun woman-file-readable-p (dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1289 "Return t if DIR is readable, otherwise log a warning."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1290 (or (file-readable-p dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1291 (WoMan-warn "Ignoring unreadable `manpath' directory tree `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1292
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1293 (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
1294 "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
1295 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
1296 directory HEAD, or the current directory if HEAD is nil, that match the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1297 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
1298 (or (directory-files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1299 (or head (directory-file-name default-directory)) ; was "."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1300 t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1301 (file-name-nondirectory dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1302 (WoMan-warn "No directories match `woman-path' entry `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1303
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1304 (defun woman-file-accessible-directory-p (dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1305 "Return t if DIR is accessible, otherwise log a warning."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1306 (or (file-accessible-directory-p dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1307 (WoMan-warn "Ignoring inaccessible `man-page' directory `%s'!" dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1308
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1309 (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
1310 "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
1311 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
1312 WOMAN-PATH should be a list of specific manual directory regexps.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1313 Ignore any paths that are unreadable or not directories."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1314 ;; Allow each path to be a single string or a list of strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1315 (if (not (listp woman-manpath)) (setq woman-manpath (list woman-manpath)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1316 (if (not (listp woman-path)) (setq woman-path (list woman-path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1317 (let (dir head dirs)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1318 (while woman-manpath
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1319 (setq dir (car woman-manpath)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1320 woman-manpath (cdr woman-manpath))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1321 (if (and dir (woman-file-readable-p dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1322 ;; NB: `parse-colon-path' creates null elements for
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1323 ;; redundant (semi-)colons and trailing `/'s!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1324 ;; If does not actually matter here if dir ends with `/'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1325 ;; Need regexp "man" here to avoid "cat?", `.', `..', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1326 (setq dir (woman-canonicalize-dir dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1327 dirs (nconc dirs (directory-files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1328 dir t woman-manpath-man-regexp)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1329 (while woman-path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1330 (setq dir (car woman-path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1331 woman-path (cdr woman-path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1332 (if (or (null dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1333 (null (setq dir (woman-canonicalize-dir dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1334 head (file-name-directory dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1335 (woman-file-readable-p head))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1336 (setq dirs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1337 (if dir
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1338 (nconc dirs (woman-directory-files head dir))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1339 (cons (directory-file-name default-directory) dirs))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1340 ;; was "." -- at head of list for later filtering
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1341 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1342 (woman-select 'woman-file-accessible-directory-p dirs)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1343
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1344 (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
1345 "Canonicalize the directory name DIR.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1346 Any UN*X-style environment variables are evaluated first."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1347 (setq dir (expand-file-name (substitute-in-file-name dir)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1348 ;; A path that ends with / matches all directories in it,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1349 ;; including `.' and `..', so remove any trailing / !!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1350 (if (string= (substring dir -1) "/")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1351 (setq dir (substring dir 0 -1)))
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 47978
diff changeset
1352 (if (memq system-type '(windows-nt ms-dos cygwin)) ; what else?
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1353 ;; Match capitalization used by `file-name-directory':
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1354 (setq dir (concat (file-name-directory dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1355 (file-name-nondirectory dir))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1356 dir)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1357
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1358 (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
1359 "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
1360 If DIR is `.' it is first replaced by the current directory."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1361 (not (member dir path)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1362
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1363 (defun woman-topic-all-completions (path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1364 "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
1365 The cdr of each alist element is the path-index / filename."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1366 ;; Support 3 levels of caching: each element of the alist `files'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1367 ;; will be a list of the first `woman-cache-level' elements of the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1368 ;; following list: (topic path-index filename). This alist `files'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1369 ;; is re-processed by `woman-topic-all-completions-merge'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1370 (let (dir files (path-index 0)) ; indexing starts at zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1371 (while path
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1372 (setq dir (pop path))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1373 (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
1374 (push (woman-topic-all-completions-1 dir path-index)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1375 files))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1376 (setq path-index (1+ path-index)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1377 ;; Uniquefy topics:
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1378 ;; Concate all lists with a single nconc call to
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1379 ;; avoid retraversing the first lists repeatedly -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1380 (woman-topic-all-completions-merge
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1381 (apply #'nconc files))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1382
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1383 (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
1384 "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
1385 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
1386 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
1387 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
1388 \(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
1389 ;; 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
1390 ;; 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
1391 ;; 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
1392 ;; 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
1393 ;; anyway, i.e. it is a user error!
55895
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1394 ;;
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1395 ;; 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
1396 (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
1397 ;; Make an explicit regexp for stripping extension and
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1398 ;; compression extension: file-name-sans-extension is a
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1399 ;; far too costly function. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1400 (ext (format "\\(\\.[^.\\/]*\\)?\\(%s\\)?\\'"
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1401 woman-file-compression-regexp)))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1402 ;; 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
1403 ;; penalty of binding function arguments. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1404 (dolist (file lst newlst)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1405 (push
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1406 (cons
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1407 (if (string-match ext file)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1408 (substring file 0 (match-beginning 0))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1409 file)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1410 (and (> woman-cache-level 1)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1411 (cons
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1412 path-index
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1413 (and (> woman-cache-level 2)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1414 (list file)))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1415 newlst))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1416
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1417 (defun woman-topic-all-completions-merge (alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1418 "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
1419 Also make each path-info component into a list.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1420 \(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
1421 ;; Replaces unreadably "optimized" O(n^2) implementation.
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1422 ;; Instead we use sorting to merge stuff efficiently. -- dak
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1423 (let (elt newalist)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1424 ;; Sort list into reverse order
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1425 (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
1426 ;; merge duplicate keys.
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1427 (if (> woman-cache-level 1)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1428 (while alist
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1429 (setq elt (pop alist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1430 (if (equal (car elt) (caar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1431 (unless (member (cdr elt) (cdar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1432 (setcdr (car newalist) (cons (cdr elt)
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1433 (cdar newalist))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1434 (setcdr elt (list (cdr elt)))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1435 (push elt newalist)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1436 ;; 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
1437 (while alist
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1438 (setq elt (pop alist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1439 (unless (equal (car elt) (caar newalist))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1440 (push elt newalist))))
576e3038e554 (woman-mapcan): More concise code.
David Kastrup <dak@gnu.org>
parents: 54604
diff changeset
1441 newalist))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1442
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1443 (defun woman-file-name-all-completions (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1444 "Return an alist of the files in all man directories that match TOPIC."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1445 ;; Support 3 levels of caching: each element of
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1446 ;; woman-topic-all-completions is a list of one of the forms:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1447 ;; (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1448 ;; (topic (path-index) (path-index) ... )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1449 ;; (topic (path-index filename) (path-index filename) ... )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1450 ;; where the are no duplicates in the value lists.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1451 ;; Topic must match first `word' of filename, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1452 (let ((topic-regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1453 (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1454 "\\`" (regexp-quote topic) ; first `word'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1455 "\\(\\..+\\)*" ; optional subsequent `words'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1456 woman-file-regexp)) ; extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1457 (topics woman-topic-all-completions)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1458 (path woman-expanded-directory-path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1459 dir files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1460 (if (cdr (car topics))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1461 ;; Use cached path-info to locate files for each topic:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1462 (let ((path-info (cdr (assoc topic topics)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1463 filename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1464 (while path-info
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1465 (setq dir (nth (car (car path-info)) path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1466 filename (car (cdr (car path-info)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1467 path-info (cdr path-info)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1468 files (nconc files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1469 ;; Find the actual file name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1470 (if filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1471 (list (concat dir "/" filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1472 (directory-files dir t topic-regexp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1473 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1474 ;; Search path for the files for each topic:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1475 (while path
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1476 (setq dir (car path)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1477 path (cdr path))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1478 (if (woman-not-member dir path) ; use each directory only once!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1479 (setq files (nconc files
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1480 (directory-files dir t topic-regexp))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1481 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1482 (mapcar 'list files)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1483 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1484
29147
eea914233f47 New version from Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk>:
Eli Zaretskii <eliz@gnu.org>
parents: 29074
diff changeset
1485
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1486 ;;; dired support
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1487
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1488 (defun woman-dired-define-key (key)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1489 "Bind the argument KEY to the command `woman-dired-find-file'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1490 (define-key dired-mode-map key 'woman-dired-find-file))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1491
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1492 (defsubst woman-dired-define-key-maybe (key)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1493 "If KEY is undefined in Dired, bind it to command `woman-dired-find-file'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1494 (if (eq (lookup-key dired-mode-map key) 'undefined)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1495 (woman-dired-define-key key)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1496
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1497 (defun woman-dired-define-keys ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1498 "Define dired keys to run WoMan according to `woman-dired-keys'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1499 (if woman-dired-keys
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1500 (if (listp woman-dired-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1501 (mapcar 'woman-dired-define-key woman-dired-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1502 (woman-dired-define-key-maybe "w")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1503 (woman-dired-define-key-maybe "W")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1504 (define-key-after (lookup-key dired-mode-map [menu-bar immediate])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1505 [woman] '("Read Man Page (WoMan)" . woman-dired-find-file) 'view))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1506
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1507 (if (featurep 'dired)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1508 (woman-dired-define-keys)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1509 (add-hook 'dired-mode-hook 'woman-dired-define-keys))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1510
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1511 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1512 (defun woman-dired-find-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1513 "In dired, run the WoMan man-page browser on this file."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1514 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1515 ;; dired-get-filename is defined in dired.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1516 (woman-find-file (dired-get-filename)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1517
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1518
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1519 ;;; tar-mode support
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1520
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1521 (defun woman-tar-extract-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1522 "In tar mode, run the WoMan man-page browser on this file."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1523 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1524 (or (eq major-mode 'tar-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1525 (error "`woman-tar-extract-file' can be used only in `tar-mode'"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1526 (buffer-disable-undo)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1527 (let (global-font-lock-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1528 (funcall (symbol-function 'tar-extract)) ; defined in tar-mode
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1529 (let ((WoMan-current-file buffer-file-name)) ; used for message logging
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1530 (rename-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1531 (woman-make-bufname (file-name-nondirectory buffer-file-name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1532 (woman-process-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1533 (goto-char (point-min)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1534
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1535 ;; There is currently no `tar-mode-hook' so use ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1536 (eval-after-load "tar-mode"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1537 '(progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1538 (define-key tar-mode-map "w" 'woman-tar-extract-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1539 (define-key-after (lookup-key tar-mode-map [menu-bar immediate])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1540 [woman] '("Read Man Page (WoMan)" . woman-tar-extract-file) 'view)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1541
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1542
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1543 (defvar woman-last-file-name nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1544 "The full pathname of the last file formatted by WoMan.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1545
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1546 (defun woman-reformat-last-file ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1547 "Reformat last file, e.g. after changing fill column."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1548 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1549 (if woman-last-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1550 (woman-find-file woman-last-file-name t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1551 (call-interactively 'woman-find-file)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1552
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1553 ;;;###autoload
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1554 (defun woman-find-file (file-name &optional reformat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1555 "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
1556 Use existing buffer if possible; reformat only if prefix arg given.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1557 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
1558 of an existing WoMan buffer formatted earlier.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1559 No external programs are used, except that `gunzip' will be used to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1560 decompress the file if appropriate. See the documentation for the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1561 `woman' command for further details."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1562 (interactive "fBrowse UN*X manual file: \nP")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1563 (setq woman-last-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1564 (setq file-name (expand-file-name file-name))) ; to canonicalize
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1565 (let ((alist-tail woman-buffer-alist) exists)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1566 (setq woman-buffer-number 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1567 (while (and alist-tail (not (string= file-name (car (car alist-tail)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1568 (setq alist-tail (cdr alist-tail)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1569 woman-buffer-number (1+ woman-buffer-number)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1570 (or (and (setq exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1571 (and alist-tail (WoMan-find-buffer))) ; buffer exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1572 (not reformat))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1573 ;; Format new buffer or reformat current buffer:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1574 (let* ((bufname (file-name-nondirectory file-name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1575 (case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1576 (compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1577 (not (not (string-match woman-file-compression-regexp bufname)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1578 (if compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1579 (setq bufname (file-name-sans-extension bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1580 (setq bufname (if exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1581 (buffer-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1582 (woman-make-bufname bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1583 (woman-really-find-file file-name compressed bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1584 (or exists
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1585 (setq woman-buffer-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1586 (cons (cons file-name bufname) woman-buffer-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1587 woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1588 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1589 (Man-build-section-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1590 (Man-build-references-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1591 (goto-char (point-min)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1592
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1593 (defun woman-make-bufname (bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1594 "Create an unambiguous buffer name from BUFNAME."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1595 (let ((dot (string-match "\\." bufname)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1596 (if dot (setq bufname (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1597 (substring bufname (1+ dot)) " "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1598 (substring bufname 0 dot))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1599 (generate-new-buffer-name ; ensure uniqueness
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1600 (concat "*WoMan " bufname "*"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1601
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1602 (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
1603 "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
1604
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1605 (defun woman-really-find-file (filename compressed bufname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1606 "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
1607 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
1608 the file if necessary. Set buffer name BUFNAME and major mode.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1609 Do not call directly!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1610 (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
1611 (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
1612 (select-frame
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1613 (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
1614 (setq woman-frame (make-frame)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1615 (switch-to-buffer (get-buffer-create bufname))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1616 (buffer-disable-undo)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1617 (setq buffer-read-only nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1618 (erase-buffer) ; NEEDED for reformat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1619 (woman-insert-file-contents filename compressed)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1620 ;; Set buffer's default directory to that of the file.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1621 (setq default-directory (file-name-directory filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1622 (set (make-local-variable 'backup-inhibited) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1623 (set-visited-file-name "")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1624 (woman-process-buffer)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1625
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1626 (defun woman-process-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1627 "The second half of `woman-really-find-file'!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1628 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1629 ;; Check (crudely) that this really is likely to be in UN*X
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1630 ;; man-page source format, assuming we are at point-min:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1631 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1632 (if (re-search-forward "^[.']" 1000 t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1633 (woman-decode-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1634 (message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1635 "File appears to be pre-formatted -- using source file may be better.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1636 (woman-man-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1637 (woman-mode))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1638
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1639 (defun woman-man-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1640 "Post-process an nroff-preformatted man buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1641 ;; Kill all leading whitespace:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1642 (if (looking-at "\\s-+") (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1643 ;; Delete all page footer/header pairs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1644 (re-search-forward ".*") ; match header
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1645 ;; Footer conventionally has page number at right, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1646 (let ((regex (concat
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1647 "^.*[0-9]\n\\s-*" ; footer and following blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1648 (regexp-quote (match-string 0)) ; header
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1649 "\\s-*\n"))) ; following blank lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1650 (while (re-search-forward regex nil 1) ; finish at eob
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1651 (woman-delete-match 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1652 ;; Delete last text line (footer) and all following blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1653 (re-search-backward "\\S-")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1654 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1655 (if (looking-at ".*[0-9]$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1656 (delete-region (point) (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1657
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1658 ;; Squeeze multiple blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1659 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1660 (while (re-search-forward "^[ \t]*\n\\([ \t]*\n\\)+" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1661 (replace-match "\n" t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1662
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1663 ;; 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
1664 ;; (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
1665 (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
1666 ;; Multibyte characters exist.
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1667 (progn
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1668 (goto-char (point-min))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1669 (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
1670 (backward-delete-char 4)
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1671 (woman-set-face (point) (1+ (point)) 'woman-italic-face))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1672 (goto-char (point-min))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1673 (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
1674 (backward-delete-char 4)
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1675 (woman-set-face (1- (point)) (point) 'woman-italic-face))))
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1676
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1677 ;; Interpret overprinting to indicate bold face:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1678 (goto-char (point-min))
29669
50fecf68aa38 (woman-man-buffer): Fix bold and underlined CJK
Eli Zaretskii <eliz@gnu.org>
parents: 29147
diff changeset
1679 (while (re-search-forward "\\(.\\)\\(\\(+\\1\\)+\\)" nil t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1680 (woman-delete-match 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1681 (woman-set-face (1- (point)) (point) 'woman-bold-face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1682
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1683 ;; Interpret underlining to indicate italic face:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1684 ;; (Must be AFTER emboldening to interpret bold _ correctly!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1685 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1686 (while (search-forward "_" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1687 (delete-char -2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1688 (woman-set-face (point) (1+ (point)) 'woman-italic-face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1689
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1690 ;; Leave any other uninterpreted ^H's in the buffer for now! (They
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1691 ;; might indicate composite special characters, which could be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1692 ;; interpreted if I knew what to expect.)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1693
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1694 ;; Optionally embolden section and subsection headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1695 ;; (cf. `woman-imenu-generic-expression'):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1696 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1697 (woman-bold-headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1698 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1699 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1700 (while (re-search-forward "^\\( \\)?\\([A-Z].*\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1701 (woman-set-face (match-beginning 2) (match-end 2) 'woman-bold-face))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1702 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1703
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1704 (defun woman-insert-file-contents (filename compressed)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1705 "Insert file FILENAME into the current buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1706 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
1707 then turn on auto-compression mode to decompress the file.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1708 Leave point at end of new text. Return length of inserted text."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1709 ;; 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
1710 ;; start in 19.34!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1711 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1712 (let ((case-fold-search t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1713 ;; Co-operate with auto-compression mode:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1714 (if (and compressed
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1715 (or (eq compressed t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1716 (string-match woman-file-compression-regexp filename))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1717 ;; (not auto-compression-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1718 (not (rassq 'jka-compr-handler file-name-handler-alist)) )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1719 ;; (error "Compressed file requires Auto File Decompression turned on")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1720 (auto-compression-mode 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1721 (nth 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1722 (condition-case ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1723 (insert-file-contents filename nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1724 (file-error
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1725 ;; Run find-file-not-found-hooks until one returns non-nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1726 ;; (run-hook-with-args-until-success 'find-file-not-found-hooks)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1727 (insert "\n***** File " filename " not found! *****\n\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1728 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1729 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1730
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1731
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1732 ;;; Major mode (Man) interface:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1733
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1734 (defvar woman-mode-map nil "Keymap for woman mode.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1735
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1736 (if woman-mode-map
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1737 ()
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1738 ;; Set up the keymap, mostly inherited from Man-mode-map. Normally
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1739 ;; button-buffer-map is used as a parent keymap, but we can't have two
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1740 ;; parents, so we just copy it.
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1741 (setq woman-mode-map (copy-keymap button-buffer-map))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1742 (set-keymap-parent woman-mode-map Man-mode-map)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1743 ;; Above two lines were
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1744 ;; (setq woman-mode-map (cons 'keymap Man-mode-map))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1745 (define-key woman-mode-map "R" 'woman-reformat-last-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1746 (define-key woman-mode-map "w" 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1747 (define-key woman-mode-map "\en" 'WoMan-next-manpage)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1748 (define-key woman-mode-map "\ep" 'WoMan-previous-manpage)
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1749 (define-key woman-mode-map [M-mouse-2] 'woman-follow-word))
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1750
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1751 (defun woman-follow-word (event)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1752 "Run WoMan with word under mouse as topic.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1753 Argument EVENT is the invoking mouse event."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1754 (interactive "e") ; mouse event
39653
b36d97729582 (woman-mode-map): Copy button-buffer-map instead of
Miles Bader <miles@gnu.org>
parents: 38436
diff changeset
1755 (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
1756 (woman (or (current-word t) "")))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1757
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1758 ;; 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
1759 (easy-menu-define
bab60576e8ec (woman-menu): Add a comment about the last change.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 45209
diff changeset
1760 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
1761 ;; 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
1762 ;; find-function-search-for-symbol work. -- rost
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1763 woman-mode-map
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1764 "WoMan Menu"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1765 `("WoMan"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1766 ["WoMan..." woman t] ; [NAME CALLBACK ENABLE]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1767 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1768 ["Next Section" Man-next-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1769 ["Previous Section" Man-previous-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1770 ["Goto Section..." Man-goto-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1771 ["Goto See-Also Section" Man-goto-see-also-section t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1772 ["Follow Reference..." Man-follow-manual-reference t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1773 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1774 ["Previous WoMan Buffer" WoMan-previous-manpage t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1775 ["Next WoMan Buffer" WoMan-next-manpage t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1776 ["Bury WoMan Buffer" Man-quit t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1777 ["Kill WoMan Buffer" Man-kill t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1778 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1779 ;; ["Toggle Fill Frame Width" woman-toggle-fill-frame t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1780 ["Use Full Frame Width" woman-toggle-fill-frame
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1781 :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
1782 ["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
1783 ["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
1784 ["Use Default Main Faces" woman-default-faces t]
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1785 ["Make Contents Menu" (woman-imenu t) (not woman-imenu-done)]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1786 "--"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1787 ["Describe (Wo)Man Mode" describe-mode t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1788 ["Mini Help" woman-mini-help t]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1789 ,@(if (fboundp 'customize-group)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1790 '(["Customize..." (customize-group 'woman) t]))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1791 ["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
1792 "--"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1793 ("Advanced"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1794 ["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
1795 ["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
1796 ["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
1797 :included woman-font-support
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1798 :active t :style toggle :selected woman-use-extended-font]
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1799 ["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
1800 :included woman-font-support
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1801 :active 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
1802 ["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
1803 :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
1804 :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
1805 "--"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1806 "Emulation"
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1807 ["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
1808 :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
1809 ["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
1810 :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
1811 )
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1812 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1813
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1814 (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
1815 "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
1816 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1817 (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
1818 (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
1819
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1820 (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
1821 "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
1822 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1823 (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
1824 (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
1825
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1826 (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
1827 "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
1828 (interactive)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1829 (setq woman-emulation value)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1830 (woman-reformat-last-file))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1831
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1832 (defun woman-mode ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1833 "Turn on (most of) Man mode to browse a buffer formatted by WoMan.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1834 WoMan is an ELisp emulation of much of the functionality of the Emacs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1835 `man' command running the standard UN*X man and ?roff programs.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1836 WoMan author: F.J.Wright@Maths.QMW.ac.uk
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1837 WoMan version: see `woman-version'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1838 See `Man-mode' for additional details."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1839 (let ((Man-build-page-list (symbol-function 'Man-build-page-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1840 (Man-strip-page-headers (symbol-function 'Man-strip-page-headers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1841 (Man-unindent (symbol-function 'Man-unindent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1842 (Man-goto-page (symbol-function 'Man-goto-page)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1843 ;; Prevent inappropriate operations:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1844 (fset 'Man-build-page-list 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1845 (fset 'Man-strip-page-headers 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1846 (fset 'Man-unindent 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1847 (fset 'Man-goto-page 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1848 (unwind-protect
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1849 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1850 (set (make-local-variable 'Man-mode-map) woman-mode-map)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1851 ;; Install Man mode:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1852 (Man-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1853 ;; Reset inappropriate definitions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1854 (setq mode-line-format woman-mode-line-format)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1855 (put 'Man-mode 'mode-class 'special))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1856 ;; Restore the status quo:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1857 (fset 'Man-build-page-list Man-build-page-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1858 (fset 'Man-strip-page-headers Man-strip-page-headers)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1859 (fset 'Man-unindent Man-unindent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1860 (fset 'Man-goto-page Man-goto-page)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1861 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1862 ;; Imenu support:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1863 (set (make-local-variable 'imenu-generic-expression)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1864 ;; `make-local-variable' in case imenu not yet loaded!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1865 woman-imenu-generic-expression)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1866 (set (make-local-variable 'imenu-space-replacement) " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1867 ;; For reformat ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1868 ;; necessary when reformatting a file in its old buffer:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1869 (setq imenu--last-menubar-index-alist nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1870 ;; necessary to avoid re-installing the same imenu:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1871 (setq woman-imenu-done nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1872 (if woman-imenu (woman-imenu))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1873 (setq buffer-read-only nil)
50404
019c0ecad8d7 (woman-xref): Removed.
Juanma Barranquero <lekktu@gmail.com>
parents: 49549
diff changeset
1874 (Man-highlight-references)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1875 (setq buffer-read-only t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1876 (set-buffer-modified-p nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1877
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1878 (defun woman-imenu (&optional redraw)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1879 "Add a \"Contents\" menu to the menubar.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1880 Optional argument REDRAW, if non-nil, forces mode line to be updated."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1881 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1882 (if woman-imenu-done
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1883 ;; This is PRIMARILY to avoid a bug in imenu-add-to-menubar that
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1884 ;; 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
1885 ;; in the same buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1886 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1887 (setq woman-imenu-done t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1888 (imenu-add-to-menubar woman-imenu-title)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1889 (if redraw (force-mode-line-update))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1890
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1891 (defun woman-toggle-fill-frame ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1892 "Toggle formatting to fill (most of) the width of the current frame."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1893 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1894 (setq woman-fill-frame (not woman-fill-frame))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1895 (message "Woman fill column set to %s."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1896 (if woman-fill-frame "frame width" woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1897 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1898
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1899 (defun woman-mini-help ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1900 "Display WoMan commands and user options in an `apropos' buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1901 ;; Based on apropos-command in apropos.el
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1902 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1903 (require 'apropos)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1904 (let ((message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1905 (let ((standard-output (get-buffer-create "*Apropos*")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1906 (print-help-return-message 'identity))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1907 (setq apropos-accumulator
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1908 (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
1909 (lambda (symbol)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1910 (or (commandp symbol)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
1911 (user-variable-p symbol)))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1912 ;; Filter out any inhibited symbols:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1913 (let ((tem apropos-accumulator))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1914 (while tem
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1915 (if (get (car tem) 'apropos-inhibit)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1916 (setq apropos-accumulator (delq (car tem) apropos-accumulator)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1917 (setq tem (cdr tem))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1918 ;; Find documentation strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1919 (let ((p apropos-accumulator)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1920 doc symbol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1921 (while p
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1922 (setcar p (list ; must have 3 elements:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1923 (setq symbol (car p)) ; 1. name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1924 (if (functionp symbol) ; 2. command doc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1925 (if (setq doc (documentation symbol t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1926 (substring doc 0 (string-match "\n" doc))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1927 "(not documented)"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1928 (if (user-variable-p symbol) ; 3. variable doc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1929 (if (setq doc (documentation-property
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1930 symbol 'variable-documentation t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1931 (substring doc 0 (string-match "\n" doc))))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1932 (setq p (cdr p))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1933 ;; Output the result:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1934 (and (apropos-print t nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1935 message
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1936 (message message))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1937
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1938
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1939 (defun WoMan-getpage-in-background (topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1940 "Use TOPIC to start WoMan from `Man-follow-manual-reference'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1941 ;; topic is a string, generally of the form "section topic"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1942 (let ((s (string-match " " topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1943 (if s (setq topic (substring topic (1+ s))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1944 (woman topic)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1945
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1946 (defvar WoMan-Man-start-time nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1947 "Used to record formatting time used by the `man' command.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1948
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1949 (defadvice Man-getpage-in-background
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1950 (around Man-getpage-in-background-advice (topic) activate)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1951 "Use WoMan unless invoked outside a WoMan buffer or invoked explicitly.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1952 Otherwise use Man and record start of formatting time."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1953 (if (and (eq mode-line-format woman-mode-line-format)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1954 (not (eq (caar command-history) 'man)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1955 (WoMan-getpage-in-background topic)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1956 ;; Initiates man processing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1957 (setq WoMan-Man-start-time (current-time))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1958 ad-do-it))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1959
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1960 (defadvice Man-bgproc-sentinel
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1961 (after Man-bgproc-sentinel-advice activate)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1962 ;; Terminates man processing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1963 "Report formatting time."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1964 (let* ((time (current-time))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1965 (time (+ (* (- (car time) (car WoMan-Man-start-time)) 65536)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1966 (- (cadr time) (cadr WoMan-Man-start-time)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1967 (message "Man formatting done in %d seconds" time)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1968
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1969
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1970 ;;; Buffer handling:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1971
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1972 (defun WoMan-previous-manpage ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1973 "Find the previous WoMan buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1974 ;; Assumes currently in a WoMan buffer!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1975 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1976 (WoMan-find-buffer) ; find current existing buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1977 (if (null (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1978 (error "No previous WoMan buffer"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1979 (if (>= (setq woman-buffer-number (1+ woman-buffer-number))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1980 (length woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1981 (setq woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1982 (if (WoMan-find-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1983 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1984 (if (< (setq woman-buffer-number (1- woman-buffer-number)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1985 (setq woman-buffer-number (1- (length woman-buffer-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1986 (WoMan-previous-manpage)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1987
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1988 (defun WoMan-next-manpage ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1989 "Find the next WoMan buffer."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1990 ;; Assumes currently in a WoMan buffer!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1991 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1992 (WoMan-find-buffer) ; find current existing buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1993 (if (null (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1994 (error "No next WoMan buffer"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1995 (if (< (setq woman-buffer-number (1- woman-buffer-number)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1996 (setq woman-buffer-number (1- (length woman-buffer-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1997 (if (WoMan-find-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1998 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
1999 (WoMan-next-manpage)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2000
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2001 (defun WoMan-find-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2002 "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
2003 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
2004 alist in `woman-buffer-alist' and return nil."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2005 (if (zerop woman-buffer-number)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2006 (let ((buffer (get-buffer (cdr (car woman-buffer-alist)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2007 (if buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2008 (switch-to-buffer buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2009 ;; Delete alist element:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2010 (setq woman-buffer-alist (cdr woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2011 nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2012 (let* ((prev-ptr (nthcdr (1- woman-buffer-number) woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2013 (buffer (get-buffer (cdr (car (cdr prev-ptr))))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2014 (if buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2015 (switch-to-buffer buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2016 ;; Delete alist element:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2017 (setcdr prev-ptr (cdr (cdr prev-ptr)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2018 (if (>= woman-buffer-number (length woman-buffer-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2019 (setq woman-buffer-number 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2020 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2021 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2022
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2023
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2024 ;;; Syntax and display tables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2025
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2026 (defconst woman-escaped-escape-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2027 ;; An arbitrary unused control character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2028 "Internal character representation of escaped escape characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2029 (defconst woman-escaped-escape-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2030 (char-to-string woman-escaped-escape-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2031 "Internal string representation of escaped escape characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2032
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2033 (defconst woman-unpadded-space-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2034 ;; An arbitrary unused control character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2035 "Internal character representation of unpadded space characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2036 (defconst woman-unpadded-space-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2037 (char-to-string woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2038 "Internal string representation of unpadded space characters.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2039
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2040 (defvar woman-syntax-table nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2041 "Syntax table to support special characters used internally by WoMan.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2042
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2043 (if woman-syntax-table
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2044 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2045 (setq woman-syntax-table (make-syntax-table))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2046 ;; The following internal chars must NOT have whitespace syntax:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2047 (modify-syntax-entry woman-unpadded-space-char "." woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2048 (modify-syntax-entry woman-escaped-escape-char "." woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2049 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2050
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2051 (defun woman-set-buffer-display-table ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2052 "Set up a display table for a WoMan buffer.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2053 This display table is used for displaying internal special characters, but
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2054 does not interfere with any existing display table, e.g. for displaying
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2055 European characters."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2056 (setq buffer-display-table
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2057 ;; The following test appears to be necessary on some
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2058 ;; non-Windows platforms, e.g. Solaris 2.6 when running on a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2059 ;; tty. Thanks to T. V. Raman <raman@Adobe.COM>.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2060 ;; The MS-DOS terminal also sets standard-display-table to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2061 ;; a non-nil value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2062 (if standard-display-table ; default is nil !!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2063 (copy-sequence standard-display-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2064 (make-display-table)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2065 ;; Display the following internal chars correctly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2066 (aset buffer-display-table woman-unpadded-space-char [?\ ])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2067 (aset buffer-display-table woman-escaped-escape-char [?\\]))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2068
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2069
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2070 ;;; The main decoding driver:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2071
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2072 (defvar font-lock-mode) ; for the compiler
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2073
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2074 (defun woman-decode-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2075 "Decode a buffer in UN*X man-page source format.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2076 No external programs are used."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2077 (interactive) ; mainly for testing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2078 (WoMan-log-begin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2079 (run-hooks 'woman-pre-format-hook)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2080 (and (boundp 'font-lock-mode) font-lock-mode (font-lock-mode -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2081 ;; (fundamental-mode)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2082 (let ((start-time (current-time)) ; (HIGH LOW MICROSEC)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2083 time) ; HIGH * 2**16 + LOW seconds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2084 (message "WoMan formatting buffer...")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2085 ; (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2086 ; (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2087 ; ((re-search-forward "^\\.[ \t]*TH" nil t) ; wrong format if not found?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2088 ; (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2089 ; (delete-region (point-min) (point))) ; potentially dangerous!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2090 ; (t (message "WARNING: .TH request not found -- not man-page format?")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2091 (woman-decode-region (point-min) (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2092 (setq time (current-time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2093 time (+ (* (- (car time) (car start-time)) 65536)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2094 (- (cadr time) (cadr start-time))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2095 (message "WoMan formatting buffer...done in %d seconds" time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2096 (WoMan-log-end time))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2097 (run-hooks 'woman-post-format-hook))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2098
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2099 (defvar woman-string-alist ; rebound in woman-decode-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2100 '(("S" . "") ("R" . "(Reg.)") ("Tm" . "(TM)")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2101 ("lq" . "\"") ("rq" . "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2102 ("''" . "\"") ; needed for gcc.1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2103 (".T" . "") ; output device from -T option?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2104 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2105 "Alist of strings predefined in the -man macro package `tmac.an'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2106
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2107 (defvar woman-negative-vertical-space nil ; rebound in woman-decode-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2108 "Set to t if .sp N with N < 0 encountered.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2109
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2110 (defun woman-pre-process-region (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2111 "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
2112 To be called on original buffer and any .so insertions."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2113 ;; Hide escaped escapes \\ and printable escapes \e very early
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2114 ;; (to be re-instated as just \ very late!):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2115 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2116 ;; .eo turns off escape character processing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2117 (while (re-search-forward "\\(\\\\[\\e]\\)\\|^\\.eo" to t) ; \\
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2118 (if (match-string 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2119 (replace-match woman-escaped-escape-string t t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2120 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2121 ;; .ec turns on escape character processing (and sets the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2122 ;; escape character to its argument, if any, which I'm ignoring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2123 ;; for now!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2124 (while (and (re-search-forward "\\(\\\\\\)\\|^\\.ec" to t) ; \
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2125 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2126 (replace-match woman-escaped-escape-string t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2127 ;; ***** Need test for .ec arg and warning here! *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2128 (woman-delete-whole-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2129
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2130 ;; Delete comments .\"<anything>, \"<anything> and null requests.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2131 ;; (However, should null . requests cause a break?)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2132 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2133 (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
2134 (woman-delete-match 0)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2135
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2136 (defun woman-non-underline-faces ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2137 "Prepare non-underlined versions of underlined faces."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2138 (let ((face-list (face-list)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2139 (while face-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2140 (let* ((face (car face-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2141 (face-name (symbol-name face)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2142 (if (and (string-match "\\`woman-" face-name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2143 (face-underline-p face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2144 (let ((face-no-ul (intern (concat face-name "-no-ul"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2145 (copy-face face face-no-ul)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2146 (set-face-underline-p face-no-ul nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2147 (setq face-list (cdr face-list)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2148
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2149 ;; Preprocessors
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2150 ;; =============
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2151
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2152 ;; 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
2153 ;; 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
2154
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2155 ;; 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
2156 ;; 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
2157 ;; 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
2158 ;; first line must resemble
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2159 ;;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2160 ;; '\" <string>
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2161 ;;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2162 ;; 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
2163 ;; 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
2164 ;; 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
2165 ;; 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
2166 ;; 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
2167 ;; (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
2168 ;; 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
2169
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2170 (defvar woman-emulate-tbl nil
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2171 "True if WoMan should emulate the tbl preprocessor.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2172 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
2173 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
2174
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2175 (defun woman-decode-region (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2176 "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
2177 ;; Suitable for use in format-alist.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2178 ;; But this requires care to control major mode implied font locking.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2179 ;; Must return the new end of file. See format.el for details.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2180 ;; NB: The `to' argument is bogus: it is not currently used, and if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2181 ;; it were it would need to be a marker rather than a position!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2182 ;; First force the correct environment:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2183 (let ((case-fold-search nil) ; This is necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2184 (woman-string-alist woman-string-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2185 (woman-fill-column woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2186 woman-negative-vertical-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2187 (setq woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2188 woman-prevailing-indent woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2189 woman-interparagraph-distance 1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2190 woman-leave-blank-lines nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2191 woman-RS-left-margin nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2192 woman-RS-prevailing-indent nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2193 woman-adjust woman-adjust-both
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2194 woman-justify (nth woman-adjust woman-justify-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2195 woman-nofill nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2196
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2197 (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
2198 (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
2199
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2200 ;; Prepare non-underlined versions of underlined faces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2201 (woman-non-underline-faces)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2202 ;; Set font of `woman-symbol-face' to `woman-symbol-font' if
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2203 ;; `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
2204 (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
2205 (stringp woman-symbol-font)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2206 (set-face-font 'woman-symbol-face woman-symbol-font
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2207 (and (frame-live-p woman-frame) woman-frame)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2208
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2209 ;; Set syntax and display tables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2210 (set-syntax-table woman-syntax-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2211 (woman-set-buffer-display-table)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2212
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2213 ;; Based loosely on a suggestion by Theodore Jump:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2214 (if (or woman-fill-frame
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2215 (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
2216 (setq woman-fill-column (- (window-width) woman-default-indent)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2217
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2218 ;; Check for preprocessor requests:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2219 (goto-char from)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2220 (if (looking-at "'\\\\\"[ \t]*\\([a-z]+\\)")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2221 (let ((letters (append (match-string 1) nil)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2222 (if (memq ?t letters)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2223 (setq woman-emulate-tbl t
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2224 letters (delete ?t letters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2225 (if letters
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2226 (WoMan-warn "Unhandled preprocessor request letters %s"
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2227 (concat letters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2228 (woman-delete-line 1)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2229
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2230 (woman-pre-process-region from nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2231 ;; Process ignore requests, macro definitions,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2232 ;; conditionals and switch source requests:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2233 (woman0-roff-buffer from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2234
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2235 ;; Process \k escapes BEFORE changing tab width (?):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2236 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2237 (woman-mark-horizonal-position)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2238
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2239 ;; Set buffer-local variables:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2240 (setq fill-column woman-fill-column
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2241 tab-width woman-tab-width)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2242
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2243 ;; Hide unpaddable and digit-width spaces \(space) and \0:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2244 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2245 (while (re-search-forward "\\\\[ 0]" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2246 (replace-match woman-unpadded-space-string t t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2247
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2248 ;; Discard optional hyphen \%; concealed newlines \<newline>;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2249 ;; point-size change function \sN,\s+N, \s-N:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2250 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2251 (while (re-search-forward "\\\\\\([%\n]\\|s[-+]?[0-9]+\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2252 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2253
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2254 ;; BEWARE: THIS SHOULD PROBABLY ALL BE DONE MUCH LATER!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2255 ;; Process trivial escapes \-, \`, \.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2256 ;; (\' must be done after tab processing!):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2257 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2258 (while (re-search-forward "\\\\\\([-`.]\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2259 (replace-match "\\1"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2260 ;; NB: Must keep ALL zero-width characters \&, \|, and \^ until
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2261 ;; ALL requests processed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2262
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2263 ;; Process no-break requests and macros (including font-change macros):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2264 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2265 (woman1-roff-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2266
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2267 ;; Process strings and special character escapes \(xx:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2268 ;; (Must do this BEFORE fontifying!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2269 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2270 (woman-strings)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2271 ;; Special chars moved after translation in
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2272 ;; `woman2-process-escapes' (for pic.1):
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-special-characters)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2275
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2276 ;; Process standard font-change requests and escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2277 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2278 (woman-change-fonts)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2279
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2280 ;; 1/2 em vertical motion \d, \u and general local vertical motion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2281 ;; \v'+/-N' simulated using TeX ^ and _ symbols for now.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2282 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2283 (let ((first t)) ; assume no nesting!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2284 (while (re-search-forward "\\\\\\([du]\\|v'[^']*'\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2285 (let* ((esc (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2286 (repl (if (or (= (aref esc 0) ?u)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2287 (and (>= (length esc) 2) (= (aref esc 2) ?-)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2288 "^" "_")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2289 (cond (first
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2290 (replace-match repl nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2291 (put-text-property (1- (point)) (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2292 'face 'woman-addition-face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2293 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2294 "Initial vertical motion escape \\%s simulated" esc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2295 (WoMan-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2296 " by TeX `%s' in woman-addition-face!" repl))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2297 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2298 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2299 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2300 "Terminal vertical motion escape \\%s ignored!" esc)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2301 (setq first (not first))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2302 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2303
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2304 ; ;; \h'+/-N' local horizontal motion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2305 ; ;; N may include width escape \w'...'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2306 ; ;; Implement arbitrary forward motion and non-overlapping backward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2307 ; ;; motion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2308 ; (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2309 ; (while (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2310 ; ;; Delimiter can be a special char escape sequence \(.. or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2311 ; ;; a single normal char (usually '):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2312 ; "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2313 ; nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2314 ; (let ((from (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2315 ; (delim (regexp-quote (match-string 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2316 ; (absolute (match-string 2)) ; absolute position?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2317 ; (N (woman-parse-numeric-arg)) ; distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2318 ; to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2319 ; msg) ; for warning
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2320 ; (if (not (looking-at delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2321 ; ;; Warn but leave escape in buffer unprocessed:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2322 ; (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2323 ; "Local horizontal motion (%s) delimiter error!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2324 ; (buffer-substring from (1+ (point)))) ; point at end of arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2325 ; (setq to (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2326 ; ;; For possible warning -- save before deleting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2327 ; msg (buffer-substring from to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2328 ; (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2329 ; (if absolute ; make relative
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2330 ; (setq N (- N (current-column))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2331 ; (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2332 ; ;; Move forward by inserting hard spaces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2333 ; (insert-char woman-unpadded-space-char N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2334 ; ;; Move backwards by deleting space,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2335 ; ;; first backwards then forwards:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2336 ; (while (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2337 ; (<= (setq N (1+ N)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2338 ; (cond ((memq (preceding-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2339 ; (delete-backward-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2340 ; ((memq (following-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2341 ; (delete-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2342 ; (t nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2343 ; (if (<= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2344 ; (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2345 ; "Negative horizontal motion (%s) would overwrite!" msg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2346 ; ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2347
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2348 ;; Process formatting macros
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2349 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2350 (woman2-roff-buffer)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2351
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2352 ;; Go back and process negative vertical space if necessary:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2353 (if woman-negative-vertical-space
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2354 (woman-negative-vertical-space from))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2355
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2356 (if woman-preserve-ascii
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2357 ;; Re-instate escaped escapes to just `\' and unpaddable
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2358 ;; spaces to just `space', without inheriting any text
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2359 ;; properties. This is not necessary, UNLESS the buffer is to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2360 ;; be saved as ASCII.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2361 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2362 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2363 (while (search-forward woman-escaped-escape-string nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2364 (delete-char -1) (insert ?\\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2365 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2366 (while (search-forward woman-unpadded-space-string nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2367 (delete-char -1) (insert ?\ ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2368 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2369
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2370 ;; Must return the new end of file if used in format-alist.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2371 (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2372
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2373 (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
2374 "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
2375 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
2376 Preserves location of `point'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2377 ;; Moved from `woman-decode-region' for version 0.50.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2378 ;; N may include width escape \w'...' (but may already be processed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2379 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2380 (while (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2381 ;; Delimiter can be a special char escape sequence \(.. or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2382 ;; a single normal char (usually '):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2383 "\\\\h\\(\\\\(..\\|.\\)\\(|\\)?"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2384 to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2385 (let ((from (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2386 (delim (regexp-quote (match-string 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2387 (absolute (match-string 2)) ; absolute position?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2388 (N (woman-parse-numeric-arg)) ; distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2389 to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2390 msg) ; for warning
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2391 (if (not (looking-at delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2392 ;; Warn but leave escape in buffer unprocessed:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2393 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2394 "Local horizontal motion (%s) delimiter error!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2395 (buffer-substring from (1+ (point)))) ; point at end of arg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2396 (setq to (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2397 ;; For possible warning -- save before deleting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2398 msg (buffer-substring from to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2399 (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2400 (if absolute ; make relative
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2401 (setq N (- N (current-column))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2402 (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2403 ;; Move forward by inserting hard spaces:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2404 (insert-char woman-unpadded-space-char N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2405 ;; Move backwards by deleting space,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2406 ;; first backwards then forwards:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2407 (while (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2408 (<= (setq N (1+ N)) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2409 (cond ((memq (preceding-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2410 (delete-backward-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2411 ((memq (following-char) '(?\ ?\t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2412 (delete-char 1) t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2413 (t nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2414 (if (<= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2415 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2416 "Negative horizontal motion (%s) would overwrite!" msg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2417 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2418 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2419
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2420
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2421
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2422 ;; 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
2423 ;; 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
2424 ;; expansions.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2425
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2426 (defvar woman0-if-to) ; marker bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2427 (defvar woman0-macro-alist) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2428 (defvar woman0-search-regex) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2429 (defvar woman0-search-regex-start ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2430 "^[.'][ \t]*\\(ig\\|if\\|ie\\|el\\|so\\|rn\\|de\\|am")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2431 (defconst woman0-search-regex-end "\\)\\([ \t]+\\|$\\)")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2432 ;; May need other terminal characters, e.g. \, but NOT \n!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2433 ;; Alternatively, force maximal match (Posix?)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2434
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2435 (defvar woman0-rename-alist) ; bound in woman0-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2436
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2437 (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
2438 "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
2439 Start at FROM and re-scan new text as appropriate."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2440 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2441 (let ((woman0-if-to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2442 request woman0-macro-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2443 (woman0-search-regex-start woman0-search-regex-start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2444 (woman0-search-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2445 (concat woman0-search-regex-start woman0-search-regex-end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2446 woman0-rename-alist)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2447 (while (re-search-forward woman0-search-regex nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2448 (setq request (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2449 (cond ((string= request "ig") (woman0-ig))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2450 ((string= request "if") (woman0-if "if"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2451 ((string= request "ie") (woman0-if "ie"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2452 ((string= request "el") (woman0-el))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2453 ((string= request "so") (woman0-so))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2454 ((string= request "rn") (woman0-rn))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2455 ((string= request "de") (woman0-de))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2456 ((string= request "am") (woman0-de 'append))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2457 (t (woman0-macro request))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2458 (set-marker woman0-if-to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2459 (woman0-rename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2460 ;; Should now re-run `woman0-roff-buffer' if any renaming was
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2461 ;; done, but let's just hope this is not necessary for now!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2462 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2463
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2464 (defun woman0-ig ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2465 ".ig yy -- Discard input up to `.yy', which defaults to `..')."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2466 ;; The terminal request MUST begin with . (not ')!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2467 (looking-at "\\(\\S +\\)?")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2468 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2469 (let ((yy (or (match-string 1) "."))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2470 (from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2471 (if (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2472 (concat "^\\.[ \t]*" (regexp-quote yy) ".*\n") nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2473 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2474 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2475 "ig request ignored -- terminator `.%s' not found!" yy)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2476 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2477 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2478
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2479 (defsubst woman0-process-escapes (from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2480 "Process escapes within an if/ie condition between FROM and TO."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2481 (woman-strings to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2482 (goto-char from) ; necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2483 ;; Strip font-change escapes:
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2484 (while (re-search-forward "\\\\f\\(\\[[^]]+\\]\\|(..\\|.\\)" to t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2485 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2486 (goto-char from) ; necessary!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2487 (woman2-process-escapes to 'numeric))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2488
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2489 (defun woman0-if (request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2490 ".if/ie c anything -- Discard unless c evaluates to true.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2491 Remember condition for use by a subsequent `.el'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2492 REQUEST is the invoking directive without the leading dot."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2493 ;; c evaluates to a one-character built-in condition name or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2494 ;; 'string1'string2' or a number > 0, prefix ! negates.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2495 ;; \{ ... \} for multi-line use.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2496 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2497 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2498 ;; (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2499 ;; Process escapes in condition:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2500 (let ((from (point)) negated n (c 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2501 (set-marker woman0-if-to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2502 (save-excursion (skip-syntax-forward "^ ") (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2503 ;; Process condition:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2504 (if (setq negated (= (following-char) ?!)) (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2505 (cond
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2506 ;; ((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
2507 ;; ((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
2508 ((looking-at "[ntoe]")
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2509 (setq c (memq (following-char) woman-if-conditions-true)))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2510 ;; Unrecognised letter so reject:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2511 ((looking-at "[A-Za-z]") (setq c nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2512 (WoMan-warn "%s %s -- unrecognised condition name rejected!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2513 request (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2514 ;; Accept strings if identical:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2515 ((save-restriction
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2516 (narrow-to-region from woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2517 ;; String delimiter can be any non-numeric character,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2518 ;; including a special character escape:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2519 (looking-at "\\(\\\\(..\\|[^0-9]\\)\\(.*\\)\\1\\(.*\\)\\1\\'"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2520 (let ((end1 (copy-marker (match-end 2)))) ; end of first string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2521 ;; Delete 2nd and 3rd delimiters to avoid processing them:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2522 (delete-region (match-end 3) woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2523 (delete-region (match-end 2) (match-beginning 3))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2524 (goto-char (match-end 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2525 (woman0-process-escapes (point) woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2526 (setq c (string= (buffer-substring (point) end1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2527 (buffer-substring end1 woman0-if-to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2528 (set-marker end1 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2529 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2530 ;; Accept numeric value if > 0:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2531 ((numberp (setq n (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2532 (woman0-process-escapes from woman0-if-to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2533 (woman-parse-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2534 (setq c (> n 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2535 (goto-char from))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2536 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2537 (if (eq c 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2538 (woman-if-ignore woman0-if-to request) ; ERROR!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2539 (woman-if-body request woman0-if-to (eq c negated)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2540 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2541
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2542 (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
2543 "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
2544 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
2545 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
2546 If DELETE is non-nil then delete from point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2547 ;; Assume concealed newlines already processed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2548 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2549 (if to (delete-region (point) to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2550 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2551 (cond (;;(looking-at "[^{\n]*\\\\{\\s *") ; multi-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2552 ;; allow escaped newlines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2553 (looking-at "[^{\n]*\\(\\\\\n\\)*\\\\{\\s *\\(\\\\\n\\)*") ; multi-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2554 ;; including preceding .if(s) and following newline
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2555 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2556 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2557 ;; Allow for nested \{ ... \} -- BUT BEWARE that this
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2558 ;; algorithm only supports one level of nesting!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2559 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2560 (and (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2561 ;; "\\(\\\\{\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2562 ;; Interpret bogus `el \}' as `el \{',
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2563 ;; especially for Tcl/Tk man pages:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2564 "\\(\\\\{\\|el[ \t]*\\\\}\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2565 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2566 (re-search-forward "\\\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2567 (delete-region (if delete from (match-beginning 0)) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2568 (if (looking-at "^$") (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2569 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2570 (delete (woman-delete-line 1)) ; single-line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2571 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2572 ;; Process matching .el anything:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2573 (cond ((string= request "ie")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2574 ;; Discard unless previous .ie c `evaluated to false'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2575 (cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2576 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2577 (woman-if-body "el" nil (not delete)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2578 ;; Got here after processing a single-line `.ie' as a body
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2579 ;; clause to be discarded:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2580 ((string= request "el")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2581 (cond ((re-search-forward "^[.'][ \t]*el[ \t]*" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2582 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2583 (woman-if-body "el" nil t))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2584 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2585 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2586 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2587
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2588 (defun woman0-el ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2589 "Isolated .el request -- should not happen!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2590 (WoMan-warn "el request without matching `ie' rejected!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2591 (cond (woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2592 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2593 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2594 (woman-if-body "el" nil t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2595 (t ; Ignore -- leave in buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2596 ;; This does not work too well, but it's only for debugging!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2597 (skip-chars-forward "^ \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2598 (if (looking-at "[ \t]*\\{") (search-forward "\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2599 (forward-line 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2600
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2601 (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
2602 "Ignore but warn about an if request ending at TO, named REQUEST."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2603 (WoMan-warn-ignored request "ignored -- condition not handled!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2604 (if woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2605 (woman-if-body request to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2606 ;; Ignore -- leave in buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2607 ;; This does not work too well, but it's only for debugging!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2608 (skip-chars-forward "^ \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2609 (if (looking-at "[ \t]*\\{") (search-forward "\\}"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2610 (forward-line 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2611
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2612 (defun woman0-so ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2613 ".so filename -- Switch source file. `.so' requests may be nested."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2614 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2615 ;; (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2616 (let* ((beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2617 (end (progn (woman-forward-arg 'unquote) (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2618 (name (buffer-substring beg end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2619 (filename name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2620 ;; If the specified file does not exist in this ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2621 (or (file-exists-p filename)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2622 ;; or the parent directory ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2623 (file-exists-p
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2624 (setq filename (concat "../" name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2625 ;; then use the WoMan search mechanism to find the filename ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2626 (setq filename
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2627 (woman-file-name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2628 (file-name-sans-extension
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2629 (file-name-nondirectory name))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2630 ;; Cannot find the file, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2631 (kill-buffer (current-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2632 (error "File `%s' not found" name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2633 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2634 (woman-delete-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2635 (let ((from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2636 (to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2637 (length (woman-insert-file-contents filename 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2638 (set-marker to (+ from length))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2639 (woman-pre-process-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2640 (set-marker to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2641 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2642 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2643
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2644
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2645 ;;; Process macro definitions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2646
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2647 (defun woman0-rn ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2648 "Process .rn xx yy -- rename macro xx to yy."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2649 ;; For now, done backwards AFTER all macro expansion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2650 ;; Should also allow requests and strings to be renamed!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2651 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2652 ()
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 'concat) (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2655 (old (buffer-substring beg end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2656 new)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2657 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2658 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2659 (setq beg (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2660 end (progn (woman-forward-arg 'unquote) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2661 new (buffer-substring beg end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2662 woman0-rename-alist (cons (cons new old) woman0-rename-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2663 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2664 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2665
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2666 (defun woman0-rename ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2667 "Effect renaming required by .rn requests."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2668 ;; For now, do this backwards AFTER all macro expansion.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2669 (while woman0-rename-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2670 (let* ((new (car woman0-rename-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2671 (old (cdr new))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2672 (new (car new)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2673 (setq woman0-rename-alist (cdr woman0-rename-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2674 (goto-char (point-min))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2675 (setq new (concat "^[.'][ \t]*" (regexp-quote new)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2676 (setq old (concat "." old))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2677 (while (re-search-forward new nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2678 (replace-match old nil t)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2679
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2680 (defconst woman-unescape-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2681 (concat woman-escaped-escape-string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2682 "\\(" woman-escaped-escape-string "\\)?"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2683
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2684 (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
2685 "Replace escape sequences in the body of MACRO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2686 Replaces || by |, but | by \, where | denotes the internal escape."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2687 (let (start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2688 (while (setq start (string-match woman-unescape-regex macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2689 (setq macro
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2690 (if (match-string 1 macro)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2691 (replace-match "" t t macro 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2692 (replace-match "\\" t t macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2693 start (1+ start)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2694 macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2695
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2696 (defun woman0-de (&optional append)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2697 "Process .de/am xx yy -- (re)define/append macro xx; end at `..'.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2698 \(Should be up to call of yy, which defaults to `.')
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2699 Optional argument APPEND, if non-nil, means append macro."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2700 ;; Modelled on woman-strings. BEWARE: Processing of .am is a hack!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2701 ;; Add support for .rm?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2702 ;; (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2703 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2704 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2705 (looking-at "[^ \t\n]+") ; macro name
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2706 (let* ((macro (match-string 0)) from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2707 (previous (assoc macro woman0-macro-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2708 (if (not previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2709 (setq woman0-search-regex-start
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2710 (concat woman0-search-regex-start "\\|" (regexp-quote macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2711 woman0-search-regex
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2712 (concat woman0-search-regex-start woman0-search-regex-end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2713 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2714 ;; Macro body runs from start of next line to line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2715 ;; beginning with `..'."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2716 ;; The terminal request MUST begin with `.' (not ')!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2717 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2718 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2719 (re-search-forward "^\\.[ \t]*\\.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2720 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2721 (let ((body (woman-unescape (buffer-substring from (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2722 (if (and append previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2723 (setq previous (cdr previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2724 body (concat body (cdr previous))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2725 append (car previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2726 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2727 (setq macro (cons macro (cons append body))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2728 ;; This should be an update, but consing a new string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2729 ;; onto the front of the alist has the same effect:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2730 (setq woman0-macro-alist (cons macro woman0-macro-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2731 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2732 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2733 (backward-char) ; return to end of .de/am line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2734 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2735 (beginning-of-line) ; delete .de/am line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2736 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2737
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2738 (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
2739 "Process the macro call named REQUEST."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2740 ;; Leaves point at start of new text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2741 (let ((macro (assoc request woman0-macro-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2742 (if macro
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2743 (woman-interpolate-macro (cdr macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2744 ;; SHOULD DELETE THE UNINTERPRETED REQUEST!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2745 ;; Output this message once only per call (cf. strings)?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2746 (WoMan-warn "Undefined macro %s not interpolated!" request))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2747
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2748 (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
2749 "Interpolate (.de) or append (.am) expansion of MACRO into the buffer."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2750 ;; Could make this more efficient by checking which arguments are
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2751 ;; actually used in the expansion!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2752 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2753 ;; Process arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2754 (let ((argno 0) (append (car macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2755 argno-string formal-arg from actual-arg start)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2756 (setq macro (cdr macro))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2757 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2758 ;; Get next actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2759 (setq argno (1+ argno))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2760 (setq argno-string (format "%d" argno))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2761 (setq formal-arg (concat "\\\\\\$" argno-string)) ; regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2762 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2763 (woman-forward-arg 'unquote 'noskip)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2764 (setq actual-arg (buffer-substring from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2765 (skip-chars-forward " \t") ; now skip following whitespace!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2766 ;; Replace formal arg with actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2767 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2768 (while (setq start (string-match formal-arg macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2769 (setq macro (replace-match actual-arg t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2770 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2771 ;; Delete any remaining formal arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2772 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2773 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2774 (setq start (string-match "\\\\\\$." macro start))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2775 (setq macro (replace-match "" t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2776 ;; Replace .$ number register with actual arg:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2777 ;; (Do this properly via register mechanism later!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2778 (setq start nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2779 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2780 (setq start (string-match "\\\\n(\\.\\$" macro start)) ; regexp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2781 (setq macro (replace-match argno-string t t macro)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2782 (if append
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2783 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2784 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2785 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2786 (save-excursion ; leave point at start of new text
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2787 (insert macro))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2788
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2789
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2790 ;;; Process strings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2791
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2792 (defun woman-match-name ()
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2793 "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
2794 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
2795 special characters."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2796 (cond ((= (following-char) ?\[ )
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2797 (forward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2798 (re-search-forward "[^]]+")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2799 (forward-char)) ; skip closing ]
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2800 ((= (following-char) ?\( )
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2801 (forward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2802 (re-search-forward ".."))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2803 (t (re-search-forward "."))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2804
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2805 (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
2806 "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
2807 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
2808 interpolated by `\*x' and `\*(xx' escapes."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2809 ;; Add support for .as and .rm?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2810 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2811 ;; Find .ds requests and \* escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2812 (re-search-forward "\\(^[.'][ \t]*ds\\)\\|\\\\\\*" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2813 (cond ((match-string 1) ; .ds
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2814 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2815 (if (eolp) ; ignore if no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2816 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2817 (re-search-forward "[^ \t\n]+")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2818 (let ((string (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2819 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2820 ; (setq string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2821 ; (cons string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2822 ; ;; hack (?) for CGI.man!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2823 ; (cond ((looking-at "\"\"") "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2824 ; ((looking-at ".*") (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2825 ; ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2826 ;; Above hack causes trouble in arguments!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2827 (looking-at ".*")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2828 (setq string (cons string (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2829 ;; This should be an update, but consing a new string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2830 ;; onto the front of the alist has the same effect:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2831 (setq woman-string-alist (cons string woman-string-alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2832 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2833 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2834 (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2835 (t ; \*
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2836 (let ((beg (match-beginning 0)))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2837 (woman-match-name)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2838 (let* ((stringname (match-string 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2839 (string (assoc stringname woman-string-alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2840 (cond (string
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2841 (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2842 ;; Temporary hack in case string starts with a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2843 ;; control character:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2844 (if (bolp) (insert-before-markers "\\&"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2845 (insert-before-markers (cdr string)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2846 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2847 (WoMan-warn "Undefined string %s not interpolated!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2848 stringname)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2849 (cond (woman-ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2850 ;; Output above message once only per call
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2851 (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2852 (setq woman-string-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2853 (cons (cons stringname "")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2854 woman-string-alist))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2855 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2856 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2857 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2858 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2859
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2860
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2861 ;;; Process special character escapes \(xx:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2862
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2863 (defconst woman-special-characters
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2864 ;; To be built heuristically as required!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2865 ;; MUST insert all characters as strings for correct conversion to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2866 ;; multibyte representation!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2867 '(("em" "--" "\276" . t) ; 3/4 Em dash
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2868 ("bu" "*" "\267" . t) ; bullet
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2869 ("fm" "'") ; foot mark
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2870 ("co" "(C)" "\251") ; copyright
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2871
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2872 ("pl" "+" "+" . t) ; math plus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2873 ("mi" "-" "-" . t) ; math minus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2874 ("**" "*" "*" . t) ; math star
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2875 ("aa" "'" "\242" . t) ; acute accent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2876 ("ul" "_") ; underrule
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2877
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2878 ("*S" "Sigma" "S" . t) ; Sigma
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2879
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2880 (">=" ">=" "\263" . t) ; >=
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2881 ("<=" "<=" "\243" . t) ; <=
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2882 ("->" "->" "\256" . t) ; right arrow
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2883 ("<-" "<-" "\254" . t) ; left arrow
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2884 ("mu" " x " "\264" . t) ; multiply
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2885 ("+-" "+/-" "\261" . t) ; plus-minus
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2886 ("bv" "|") ; bold vertical
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2887
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2888 ;; groff etc. extensions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2889 ("lq" "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2890 ("rq" "\"")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2891 ("aq" "'")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2892 ("ha" "^")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2893 ("ti" "~")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2894 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2895 "Alist of special character codes with ASCII and extended-font equivalents.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2896 Each alist elements has the form
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2897 (input-string ascii-string extended-font-string . use-symbol-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2898 where
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2899 * `\\(input-string' is the ?roff encoding,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2900 * `ascii-string' is the (multi-character) ASCII simulation,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2901 * `extended-font-string' is the single-character string representing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2902 the character position in the extended 256-character font, and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2903 * `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
2904 i.e. omitted, to indicate use of the default font.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2905 Any element may be nil. Avoid control character codes (0 to \\37, \\180
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2906 to \\237) in `extended-font-string' for now, since they can be
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2907 displayed only with a modified display table.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2908
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2909 Use the WoMan command `woman-display-extended-fonts' or a character
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2910 map accessory to help construct this alist.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2911
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2912 (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
2913 "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
2914 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
2915 (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
2916 (insert-before-markers newtext)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2917 (if face (put-text-property (1- (point)) (point)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2918 'face 'woman-symbol-face))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2919 t)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2920
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2921 (defun woman-special-characters (to)
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2922 "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
2923 \(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
2924 (while (re-search-forward "\\\\\\(?:(\\(..\\)\\|\\[\\([[^]]+\\)\\]\\)" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2925 (let* ((name (or (match-string-no-properties 1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2926 (match-string-no-properties 2)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2927 (replacement (assoc name woman-special-characters)))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2928 (unless
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2929 (and
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2930 replacement
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2931 (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
2932 (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
2933 ;; Need symbol font:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2934 (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
2935 (woman-replace-match (nth 2 replacement)
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2936 'woman-symbol-face))
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2937 ;; Need extended font:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2938 (if woman-use-extended-font
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
2939 (woman-replace-match (nth 2 replacement))))))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2940 ((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
2941 (woman-replace-match (cadr replacement)))))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2942 (WoMan-warn (concat "Special character "
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2943 (if (match-string 1) "\\(%s" "\\[%s]")
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
2944 " not interpolated!") name)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2945 (if woman-ignore (woman-delete-match 0))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2946 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2947
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2948 (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
2949 "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
2950 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
2951 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
2952 Useful for constructing the alist variable `woman-special-characters'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2953 (interactive)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2954 (with-output-to-temp-buffer "*WoMan Extended Font Map*"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2955 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2956 (set-buffer standard-output)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2957 (let ((i 32))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2958 (while (< i 256)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2959 (insert (format "\\%03o " i) (string i) " " (string i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2960 (put-text-property (1- (point)) (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2961 'face 'woman-symbol-face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2962 (insert " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2963 (setq i (1+ i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2964 (when (= i 128) (setq i 160) (insert "\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2965 (if (zerop (% i 8)) (insert "\n")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2966 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2967 (print-help-return-message)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2968
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2969
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2970 ;;; Formatting macros that do not cause a break:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2971
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2972 (defvar request) ; Bound locally by woman1-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2973 (defvar unquote) ; Bound locally by woman1-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2974
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2975 (defun woman-unquote (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2976 "Delete any double-quote characters between point and TO.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2977 Leave point at TO (which should be a marker)."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2978 (let (in-quote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2979 (while (search-forward "\"" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2980 (if (and in-quote (looking-at "\""))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2981 ;; Repeated double-quote represents single double-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2982 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2983 (if (or in-quote (looking-at ".*\"")) ; paired
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2984 (delete-char -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2985 (setq in-quote (not in-quote))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2986 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2987 (if in-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2988 (WoMan-warn "Unpaired \" in .%s arguments." request))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2989 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2990
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2991 (defsubst woman-unquote-args ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2992 "Delete any double-quote characters up to the end of the line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2993 (woman-unquote (save-excursion (end-of-line) (point-marker))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2994
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2995 (defun woman1-roff-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2996 "Process non-breaking requests."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2997 (let ((case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2998 request fn unquote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
2999 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3000 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3001 (re-search-forward woman-request-regexp nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3002 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3003 ;; Construct woman function to call:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3004 ((setq fn (intern-soft
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3005 (concat "woman1-"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3006 (setq request (match-string 1)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3007 (if (get fn 'notfont) ; not a font-change request
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3008 (funcall fn)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3009 ;; Delete request or macro name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3010 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3011 ;; If no args then apply to next line else unquote args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3012 ;; (unquote is used by called function):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3013 (setq unquote (not (eolp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3014 (if (eolp) (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3015 ; ;; Hide leading control character in unquoted argument:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3016 ; (cond ((memq (following-char) '(?. ?'))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3017 ; (insert "\\&")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3018 ; (beginning-of-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3019 ;; Call the appropriate function:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3020 (funcall fn)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3021 ;; Hide leading control character in quoted argument (only):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3022 (if (and unquote (memq (following-char) '(?. ?')))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3023 (insert "\\&"))
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
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3027 ;;; Font-changing macros:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3028
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3029 (defun woman1-B ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3030 ".B -- Set words of current line in bold font."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3031 (woman1-B-or-I ".ft B\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3032
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3033 (defun woman1-I ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3034 ".I -- Set words of current line in italic font."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3035 (woman1-B-or-I ".ft I\n"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3036
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3037 (defun woman1-B-or-I (B-or-I)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3038 ".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
3039 B-OR-I is the appropriate complete control line."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3040 ;; Should NOT concatenate the arguments!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3041 (insert B-or-I) ; because it might be a control line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3042 ;; Return to bol to process .SM/.B, .B/.if etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3043 ;; or start of first arg to hide leading control char.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3044 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3045 (if unquote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3046 (woman-unquote-args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3047 (while (looking-at "^[.']") (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3048 (end-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3049 (delete-horizontal-space))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3050 (insert "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3051
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3052 (defun woman1-SM ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3053 ".SM -- Set the current line in small font, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3054 nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3055
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3056 (defalias 'woman1-SB 'woman1-B)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3057 ;; .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
3058 ;; (This is what /usr/local/share/groff/tmac/tmac.an does. The
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3059 ;; Linux man.7 is wrong about this!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3060
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3061 (defun woman1-BI ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3062 ".BI -- Join words of current line alternating bold and italic fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3063 (woman1-alt-fonts (list "\\fB" "\\fI")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3064
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3065 (defun woman1-BR ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3066 ".BR -- Join words of current line alternating bold and Roman fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3067 (woman1-alt-fonts (list "\\fB" "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3068
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3069 (defun woman1-IB ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3070 ".IB -- Join words of current line alternating italic and bold fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3071 (woman1-alt-fonts (list "\\fI" "\\fB")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3072
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3073 (defun woman1-IR ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3074 ".IR -- Join words of current line alternating italic and Roman fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3075 (woman1-alt-fonts (list "\\fI" "\\fR")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3076
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3077 (defun woman1-RB ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3078 ".RB -- Join words of current line alternating Roman and bold fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3079 (woman1-alt-fonts (list "\\fR" "\\fB")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3080
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3081 (defun woman1-RI ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3082 ".RI -- Join words of current line alternating Roman and italic fonts."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3083 (woman1-alt-fonts (list "\\fR" "\\fI")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3084
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3085 (defun woman1-alt-fonts (fonts)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3086 "Join words using alternating fonts in FONTS, which MUST be a dynamic list."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3087 (nconc fonts fonts) ; circular list!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3088 (insert (car fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3089 ;; Return to start of first arg to hide leading control char:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3090 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3091 (setq fonts (cdr fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3092 (woman-forward-arg unquote 'concat) ; unquote is bound above
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3093 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3094 (insert (car fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3095 (setq fonts (cdr fonts))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3096 (woman-forward-arg unquote 'concat)) ; unquote is bound above
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3097 (insert "\\fR")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3098 ))
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 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
3101 "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
3102 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
3103 If optional arg CONCAT is non-nil then join arguments."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3104 (if (eq (following-char) ?\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3105 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3106 (if unquote (delete-char 1) (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3107 (re-search-forward "\"\\|$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3108 ;; Repeated double-quote represents single double-quote
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3109 (while (eq (following-char) ?\") ; paired
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3110 (if unquote (delete-char 1) (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3111 (re-search-forward "\"\\|$"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3112 (if (eq (preceding-char) ?\")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3113 (if unquote (delete-backward-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3114 (WoMan-warn "Unpaired \" in .%s arguments." request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3115 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3116 ;; (re-search-forward "[^\\\n] \\|$") ; inconsistent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3117 (skip-syntax-forward "^ "))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3118 (cond ((null concat) (skip-chars-forward " \t")) ; don't skip eol!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3119 ((eq concat 'noskip)) ; do not skip following whitespace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3120 (t (woman-delete-following-space)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3121 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3122
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3123
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3124 ;; 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
3125 ;; 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
3126 ;; and further processing.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3127
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3128 (put 'woman1-TP 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3129 (defun woman1-TP ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3130 ".TP -- After tag line, reset font to Roman for paragraph body."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3131 ;; Same for .IP, but forward only 1 line?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3132 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3133 ;; May be an `irrelevant' control line in the way, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3134 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3135 (forward-line (if (looking-at "\\.\\S-+[ \t]*$") 2 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3136 ;; May be looking at control line, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3137 (insert ".ft R\n")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3138
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3139 (put 'woman1-ul 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3140 (defun woman1-ul ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3141 ".ul N -- Underline (italicize) the next N input lines, default N = 1."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3142 (let ((N (if (eolp) 1 (woman-parse-numeric-arg)))) ; woman-get-numeric-arg ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3143 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3144 (insert ".ft I\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3145 (forward-line N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3146 (insert ".ft R\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3147 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3148
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3149 ;;; Other non-breaking requests:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3150
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3151 ;; Hyphenation
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3152 ;; Warnings commented out.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3153
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3154 (put 'woman1-nh 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3155 (defun woman1-nh ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3156 ".nh -- No hyphenation, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3157 ;; Must be handled here to avoid breaking!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3158 ;; (WoMan-log-1 ".nh request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3159 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3160
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3161 (put 'woman1-hy 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3162 (defun woman1-hy ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3163 ".hy N -- Set hyphenation mode to N, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3164 ;; (WoMan-log-1 ".hy request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3165 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3166
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3167 (put 'woman1-hc 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3168 (defun woman1-hc ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3169 ".hc c -- Set hyphenation character to c, i.e. delete it!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3170 (let ((c (char-to-string (following-char))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3171 ;; (WoMan-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3172 ;; "Hyphenation character %s deleted -- hyphenation not supported!" c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3173 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3174 (setq c (concat "\\(" c "\\)\\|^[.'][ \t]*hc"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3175 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3176 (while (and (re-search-forward c nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3177 (match-string 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3178 (delete-char -1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3179 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3180
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3181 (put 'woman1-hw 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3182 (defun woman1-hw ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3183 ".hw words -- Set hyphenation exception words, i.e. IGNORE!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3184 ;; (WoMan-log-1 ".hw request ignored -- hyphenation not supported!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3185 (woman-delete-whole-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3186
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3187 ;;; Other non-breaking requests correctly ignored by nroff:
28832
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-ps 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3190 (defalias 'woman1-ps 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3191 ;; .ps -- Point size -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3192
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3193 (put 'woman1-ss 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3194 (defalias 'woman1-ss 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3195 ;; .ss -- Space-character size -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3196
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3197 (put 'woman1-cs 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3198 (defalias 'woman1-cs 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3199 ;; .cs -- Constant character space (width) mode -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3200
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3201 (put 'woman1-ne 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3202 (defalias 'woman1-ne 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3203 ;; .ne -- Need vertical space -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3204
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3205 (put 'woman1-vs 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3206 (defalias 'woman1-vs 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3207 ;; .vs -- Vertical base line spacing -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3208
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3209 (put 'woman1-bd 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3210 (defalias 'woman1-bd 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3211 ;; .bd -- Embolden font -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3212
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3213 ;;; Non-breaking SunOS-specific macros:
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3214
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3215 (defun woman1-TX ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3216 ".TX t p -- Resolve SunOS abbrev t and join to p (usually punctuation)."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3217 (insert "SunOS ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3218 (woman-forward-arg 'unquote 'concat))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3219
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3220 (put 'woman1-IX 'notfont t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3221 (defalias 'woman1-IX 'woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3222 ;; .IX -- Index macro, for Sun internal use -- IGNORE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3223
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3224
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3225 ;;; Direct font selection:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3226
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3227 (defconst woman-font-alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3228 '(("R" . default)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3229 ("I" . woman-italic-face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3230 ("B" . woman-bold-face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3231 ("P" . previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3232 ("1" . default)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3233 ("2" . woman-italic-face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3234 ("3" . woman-bold-face) ; used in bash.1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3235 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3236 "Alist of ?roff font indicators and woman font variables and names.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3237
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3238 (defun woman-change-fonts ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3239 "Process font changes."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3240 ;; ***** NEEDS REVISING IF IT WORKS OK *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3241 ;; 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
3242 ;; Should .SH/.SS reset font?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3243 ;; Font size setting macros (?) should reset font.
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3244 (let ((font-alist woman-font-alist) ; for local updating
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3245 (previous-pos (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3246 (previous-font 'default)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3247 (current-font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3248 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3249 ;; Find font requests, paragraph macros and font escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3250 (re-search-forward
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3251 "^[.'][ \t]*\\(\\(\\ft\\)\\|\\(.P\\)\\)\\|\\(\\\\f\\)" nil 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3252 (let (font beg notfont)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3253 ;; Match font indicator and leave point at end of sequence:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3254 (cond ((match-string 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3255 ;; .ft request found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3256 (setq beg (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3257 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3258 (if (eolp) ; default is previous font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3259 (setq font previous-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3260 (looking-at "[^ \t\n]+"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3261 (forward-line)) ; end of control line and \n
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3262 ((match-string 3)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3263 ;; Macro that resets font found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3264 (setq font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3265 ((match-string 4)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3266 ;; \f escape found
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3267 (setq beg (match-beginning 0))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3268 (woman-match-name))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3269 (t (setq notfont t)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3270 (if notfont
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3271 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3272 ;; Get font name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3273 (or font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3274 (let ((fontstring (match-string 0)))
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3275 (setq font (assoc fontstring font-alist)
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3276 ;; NB: font-alist contains VARIABLE NAMES.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3277 font (if font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3278 (cdr font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3279 (WoMan-warn "Unknown font %s." fontstring)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3280 ;; Output this message once only per call ...
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3281 (setq font-alist
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3282 (cons (cons fontstring 'woman-unknown-face)
54604
07df3c30a31c (woman-change-fonts): Rename local variable
Eli Zaretskii <eliz@gnu.org>
parents: 54516
diff changeset
3283 font-alist))
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3284 'woman-unknown-face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3285 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3286 ;; Delete font control line or escape sequence:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3287 (cond (beg (delete-region beg (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3288 (if (eq font 'previous) (setq font previous-font))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3289 (woman-set-face previous-pos (point) current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3290 (if beg
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3291 ;; Explicit font control
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3292 (setq previous-pos (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3293 previous-font current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3294 ;; Macro that resets font
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3295 ;; (forward-line) ; DOES NOT WORK! but unnecessary?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3296 ;; Must process font changes in any paragraph tag!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3297 (setq previous-pos (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3298 previous-font 'default))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3299 (setq current-font font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3300 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3301 ;; Set font after last request up to eob:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3302 (woman-set-face previous-pos (point) current-font)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3303 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3304
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3305 (defun woman-set-face (from to face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3306 "Set the face of the text from FROM to TO to face FACE.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3307 Ignore the default face and underline only word characters."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3308 (or (eq face 'default) ; ignore
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3309 (not woman-fontify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3310 (if (face-underline-p face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3311 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3312 (let ((face-no-ul (intern (concat (symbol-name face) "-no-ul"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3313 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3314 (while (< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3315 (skip-syntax-forward "w" to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3316 (put-text-property from (point) 'face face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3317 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3318 (skip-syntax-forward "^w" to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3319 (put-text-property from (point) 'face face-no-ul)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3320 (setq from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3321 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3322 (put-text-property from to 'face face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3323 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3324
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3325
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3326 ;;; Output translation:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3327
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3328 (defvar translations nil) ; Also bound locally by woman2-roff-buffer
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3329 ;; A list of the form (\"[ace]\" (a . b) (c . d) (e . ?\ )) or nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3330
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3331 (defun woman-get-next-char ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3332 "Return and delete next char in buffer, including special chars."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3333 (if ;;(looking-at "\\\\(\\(..\\)")
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3334 ;; Match special \(xx and strings \*[xxx], \*(xx, \*x:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3335 (looking-at "\\\\\\((..\\|\\*\\(\\[[^]]+\\]\\|(..\\|.\\)\\)")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3336 (prog1 (match-string 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3337 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3338 (prog1 (char-to-string (following-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3339 (delete-char 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3340
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3341 (defun woman2-tr (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3342 ".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
3343 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
3344 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3345 ;; This should be an update, but consing onto the front of the alist
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3346 ;; has the same effect and match duplicates should not matter.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3347 ;; Initialize translation data structures:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3348 (let ((matches (car translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3349 (alist (cdr translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3350 a b)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3351 ;; `matches' must be a string:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3352 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3353 (concat (if matches (substring matches 1 -1)) "]"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3354 ;; Process .tr arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3355 (while (not (eolp)) ; (looking-at "[ \t]*$") ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3356 (setq a (woman-get-next-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3357 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3358 (setq b " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3359 (setq b (woman-get-next-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3360 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3361 (if (= (length a) 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3362 (concat a matches)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3363 (concat matches "\\|\\" a))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3364 alist (cons (cons a b) alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3365 (delete-char 1) ; no blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3366 ;; Rebuild translations list:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3367 (setq matches
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3368 (if (= (string-to-char matches) ?\])
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3369 (substring matches 3)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3370 (concat "[" matches))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3371 translations (cons matches alist))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3372 ;; Format any following text:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3373 (woman2-format-paragraphs to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3374 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3375
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3376 (defsubst woman-translate (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3377 "Translate up to marker TO. Do this last of all transformations."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3378 (if translations
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3379 (let ((matches (car translations))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3380 (alist (cdr translations)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3381 (while (re-search-forward matches to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3382 ;; Done like this to retain text properties and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3383 ;; support translation of special characters:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3384 (insert-before-markers-and-inherit
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3385 (cdr (assoc
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3386 (buffer-substring-no-properties
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3387 (match-beginning 0) (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3388 alist)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3389 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3390 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3391
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3392
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3393 ;;; Registers:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3394
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3395 (defvar woman-registers ; these are all read-only
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3396 '((".H" 24) (".V" 48) ; resolution in basic units
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3397 (".g" 0) ; not groff
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3398 ;; (Iff emulating groff need to implement groff italic correction
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3399 ;; \/, e.g. for pic.1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3400 (".i" left-margin) ; current indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3401 (".j" woman-adjust) ; current adjustment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3402 (".l" fill-column) ; current line length
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3403 (".s" 12) ; current point size
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3404 (".u" (if woman-nofill 0 1)) ; 1/0 in fill/nofill mode
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3405 (".v" 48) ; current vertical line spacing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3406 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3407 "Register alist: the key is the register name as a string.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3408 Each element has the form (KEY VALUE . INC) -- inc may be nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3409 Also bound locally in `woman2-roff-buffer'.")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3410
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3411 (defun woman-mark-horizonal-position ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3412 "\\kx -- Store current horizontal position in INPUT LINE in register x."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3413 (while (re-search-forward "\\\\k\\(.\\)" nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3414 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3415 (setq woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3416 (cons (list (match-string 1) (current-column))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3417 woman-registers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3418 (woman-delete-match 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3419
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3420 (defsubst woman2-process-escapes-to-eol (&optional numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3421 "Process remaining escape sequences up to eol.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3422 Handle numeric arguments specially if optional argument NUMERIC is non-nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3423 (woman2-process-escapes
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3424 (save-excursion (end-of-line) (point-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3425 numeric))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3426
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3427 (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
3428 ".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
3429 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
3430 Format paragraphs upto TO. (Breaks, but should not!)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3431 (let* ((name (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3432 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3433 (progn (skip-syntax-forward "^ ") (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3434 (pm (progn ; increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3435 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3436 (when (memq (char-after) '(?+ ?-))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3437 (forward-char) (char-before))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3438 (value (if (eolp) ; no value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3439 nil ; to be interpreted as zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3440 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3441 (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3442 (inc (progn ; auto-increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3443 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3444 (if (eolp) ; no value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3445 nil ; to be interpreted as zero ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3446 (woman-parse-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3447 (oldvalue (assoc name woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3448 (when oldvalue
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3449 (setq oldvalue (cdr oldvalue)) ; (value . inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3450 (unless inc (setq inc (cdr oldvalue))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3451 (cond ((null value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3452 (setq value 0) ; correct?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3453 (WoMan-warn "nr %s -- null value assigned as zero!" name))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3454 ((symbolp value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3455 (setq value (list 'quote value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3456 (if pm ; increment old value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3457 (setq oldvalue (if oldvalue (car oldvalue) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3458 value (if (eq pm ?+)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3459 (+ oldvalue value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3460 (- oldvalue value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3461 (setq woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3462 (cons (cons name (cons value inc)) woman-registers))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3463 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3464 (woman2-format-paragraphs to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3465
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3466
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3467 ;;; Numeric (and "non-text") request arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3468
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3469 (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
3470 "Get the value of a numeric argument at or after point.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3471 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
3472 Assumes 10 characters per inch. Does not move point."
28832
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 (save-excursion (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3475
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3476 (defun woman-parse-numeric-arg ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3477 "Get the value of a numeric expression at or after point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3478 Unlike `woman-get-numeric-arg', leaves point after the argument.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3479 The expression may be an argument in quotes."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3480 (if (= (following-char) ?\") (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3481 ;; Allow leading +/-:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3482 (let ((value (if (looking-at "[+-]") 0 (woman-parse-numeric-value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3483 op)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3484 (while (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3485 ((looking-at "[+-/*%]") ; arithmetic operators
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3486 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3487 (setq op (intern-soft (match-string 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3488 (setq value (funcall op value (woman-parse-numeric-value))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3489 ((looking-at "[<=>]=?") ; relational operators
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3490 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3491 (setq op (or (intern-soft (match-string 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3492 (intern-soft "=")))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3493 (setq value (if (funcall op value (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3494 1 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3495 ((memq (setq op (following-char)) '(?& ?:)) ; Boolean and / or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3496 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3497 (setq value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3498 ;; and / or are special forms, not functions, in ELisp
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3499 (if (eq op ?&)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3500 ;; and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3501 (if (> value 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3502 (if (> (woman-parse-numeric-value) 0) 1 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3503 ;; skip second operand
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3504 (prog1 0 (woman-parse-numeric-value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3505 ;; or
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3506 (if (> value 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3507 ;; skip second operand
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3508 (prog1 1 (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3509 (if (> (woman-parse-numeric-value) 0) 1 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3510 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3511 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3512 ; (if (looking-at "[ \t\nRC\)\"]") ; R, C are tab types
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3513 ; ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3514 ; (WoMan-warn "Unimplemented numerical operator `%c' in %s"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3515 ; (following-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3516 ; (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3517 ; (save-excursion (beginning-of-line) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3518 ; (save-excursion (end-of-line) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3519 ; (skip-syntax-forward "^ "))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3520 value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3521 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3522
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3523 (defun woman-parse-numeric-value ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3524 "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
3525 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
3526 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
3527 expression in parentheses. Leaves point after the value."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3528 ;; Must replace every \' by some different single character first
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3529 ;; before calling this function by calling
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3530 ;; (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3531 (if (eq (following-char) ?\()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3532 ;; Treat parenthesized expression as a single value.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3533 (let (n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3534 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3535 (setq n (woman-parse-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3536 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3537 (if (eq (following-char) ?\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3538 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3539 (WoMan-warn "Parenthesis confusion in numeric expression!"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3540 n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3541 (let ((n (cond ((looking-at "[-+]?[.0-9]+") ; single number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3542 ;; currently needed to set match-end, even though
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3543 ;; string-to-number returns 0 if number not parsed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3544 (string-to-number (match-string 0)))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3545 ((looking-at "\\\\n\\([-+]\\)?\\(?:\
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3546 \\[\\([^]]+\\)\\]\\|\(\\(..\\)\\|\\(.\\)\\)")
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3547 ;; interpolate number register, maybe auto-incremented
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3548 (let* ((pm (match-string-no-properties 1))
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3549 (name (or (match-string-no-properties 2)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3550 (match-string-no-properties 3)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3551 (match-string-no-properties 4)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3552 (value (assoc name woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3553 (if value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3554 (let (inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3555 (setq value (cdr value) ; (value . inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3556 inc (cdr value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3557 ;; eval internal (.X) registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3558 ;; stored as lisp variable names:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3559 value (eval (car value)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3560 (if (and pm inc) ; auto-increment
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3561 (setq value
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3562 (funcall (intern-soft pm) value inc)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3563 woman-registers
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3564 (cons (cons name (cons value inc))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3565 woman-registers)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3566 value)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3567 (WoMan-warn "Undefined register %s defaulted to 0."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3568 name)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3569 0) ; default to zero
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3570 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3571 ((re-search-forward
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3572 ;; Delimiter can be special char escape \[xxx],
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3573 ;; \(xx or single normal char (usually '):
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
3574 "\\=\\\\w\\(\\\\\\[[^]]+\\]\\|\\\\(..\\|.\\)" nil t)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3575 (let ((from (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3576 (delim (regexp-quote (match-string 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3577 (if (re-search-forward delim nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3578 ;; Return width of string:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3579 (- (match-beginning 0) from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3580 (WoMan-warn "Width escape delimiter error!"))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3581 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3582 (if (null n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3583 ;; ERROR -- should handle this better!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3584 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3585 (WoMan-warn "Numeric/register argument error: %s"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3586 (buffer-substring
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3587 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3588 (save-excursion (end-of-line) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3589 (skip-syntax-forward "^ ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3590 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3591 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3592 ;; Check for scale factor:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3593 (if
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3594 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3595 ((looking-at "\\s ") nil) ; stay put!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3596 ((looking-at "[mnuv]")) ; ignore for now
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3597 ((looking-at "i") (setq n (* n 10))) ; inch
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3598 ((looking-at "c") (setq n (* n 3.9))) ; cm
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3599 ((looking-at "P") (setq n (* n 1.7))) ; Pica
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3600 ((looking-at "p") (setq n (* n 0.14))) ; point
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3601 ;; NB: May be immediately followed by + or -, etc.,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3602 ;; in which case do nothing and return nil.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3603 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3604 (goto-char (match-end 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3605 (if (numberp n) (round n) n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3606 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3607
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3608
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3609 ;;; VERTICAL FORMATTING -- Formatting macros that cause a break:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3610
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3611 ;; Vertical spacing philosophy:
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
3612 ;; 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
3613 ;; vertical space only before text, as required.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3614
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3615 (defun woman2-roff-buffer ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3616 "Process breaks. Format paragraphs and headings."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3617 (let ((case-fold-search t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3618 (to (make-marker))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3619 (canonically-space-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3620 (symbol-function 'canonically-space-region))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3621 (insert-and-inherit (symbol-function 'insert-and-inherit))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3622 (set-text-properties (symbol-function 'set-text-properties))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3623 (woman-registers woman-registers)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3624 fn request translations
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3625 tab-stop-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3626 ;; ?roff does not squeeze multiple spaces, but does fill, so...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3627 (fset 'canonically-space-region 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3628 ;; Try to avoid spaces inheriting underlines from preceding text!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3629 (fset 'insert-and-inherit (symbol-function 'insert))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3630 (fset 'set-text-properties 'ignore)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3631 (unwind-protect
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3632 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3633 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3634 (re-search-forward woman-request-regexp nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3635 (cond
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3636 ;; Construct woman function to call:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3637 ((setq fn (intern-soft
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3638 (concat "woman2-"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3639 (setq request (match-string 1)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3640 ;; Delete request or macro name:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3641 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3642 ;; Unrecognised request:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3643 ((prog1 nil
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3644 ;; (WoMan-warn ".%s request ignored!" request)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3645 (WoMan-warn-ignored request "ignored!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3646 ;; (setq fn 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3647 ;; AVOID LEAVING A BLANK LINE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3648 ;; (setq fn 'woman2-format-paragraphs)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3649 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3650 ;; .LP assumes it is at eol and leaves a (blank) line,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3651 ;; so leave point at end of line before paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3652 ((or (looking-at "[ \t]*$") ; no argument
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3653 woman-ignore) ; ignore all
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3654 ;; (beginning-of-line) (kill-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3655 ;; AVOID LEAVING A BLANK LINE!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3656 (beginning-of-line) (woman-delete-line 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3657 (t (end-of-line) (insert ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3658 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3659 (if (not (or fn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3660 (and (not (memq (following-char) '(?. ?')))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3661 (setq fn 'woman2-format-paragraphs))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3662 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3663 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3664 (set-marker to (woman-find-next-control-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3665 ;; Call the appropriate function:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3666 (funcall fn to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3667 (if (not (eobp)) ; This should not happen, but ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3668 (woman2-format-paragraphs (point-max-marker) woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3669 (fset 'canonically-space-region canonically-space-region)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3670 (fset 'set-text-properties set-text-properties)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3671 (fset 'insert-and-inherit insert-and-inherit)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3672 (set-marker to nil))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3673
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3674 (defun woman-find-next-control-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3675 "Find and return start of next control line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3676 ; (let ((to (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3677 ; (re-search-forward "^\\." nil t))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3678 ; (if to (1- to) (point-max)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3679 (let (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3680 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3681 ;; Must handle
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3682 ;; ...\c
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3683 ;; .br (and other requests?)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3684 ;; by deleting both the \c and the following request.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3685 ;; BEWARE THAT THIS CODE MAY BE UNRELIABLE!!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3686 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3687 (and
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3688 (setq to (re-search-forward "\\(\\\\c\\)?\n[.']" nil t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3689 (match-string 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3690 (looking-at "br"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3691 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3692 (woman-delete-line 2)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3693 (if to (1- to) (point-max))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3694
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3695 (defun woman2-PD (to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3696 ".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
3697 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
3698 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3699 ;; .ie \\n[.$] .nr PD (v;\\$1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3700 ;; .el .nr PD .4v>?\n[.V]
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3701 (woman-set-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3702 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3703
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3704 (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
3705 "Set the interparagraph distance from a .PD request at point."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3706 (setq woman-interparagraph-distance
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3707 (if (eolp) 1 (woman-get-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3708 ;; Should allow .PD 0 to set zero line spacing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3709 (woman-delete-line 1)) ; ignore remaining args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3710
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3711 (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
3712 "Set variable `woman-leave-blank-lines' from `woman-interparagraph-distance'."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3713 ; (if (> woman-interparagraph-distance 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3714 ; (forward-line 1) ; leave 1 blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3715 ; (woman-delete-line 1)) ; do not leave blank line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3716 (setq woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3717 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3718
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3719 (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
3720 ".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
3721 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
3722 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
3723 \(Should set prevailing indent and tabs to 5.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3724 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3725 (insert ?\()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3726 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3727 (insert ?\))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3728 (let ((start (point)) here)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3729 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3730 (cond ((looking-at "\"\"[ \t]")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3731 (delete-char 2)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3732 ;; (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3733 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3734 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3735 (setq here (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3736 (insert " -- ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3737 (woman-forward-arg 'unquote 'concat)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3738 ;; Delete repeated arguments:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3739 (if (string-match (buffer-substring here (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3740 (buffer-substring start here))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3741 (delete-region here (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3742 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3743 ;; Embolden heading (point is at end of heading):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3744 (woman-set-face
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3745 (save-excursion (beginning-of-line) (point)) (point) 'woman-bold-face)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3746 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3747 (delete-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3748 (setq woman-left-margin woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3749 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3750 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3751
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3752 (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
3753 ".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
3754 Format paragraphs upto TO. Set prevailing indent to 5."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3755 (if (eolp) ; If no args then
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3756 (delete-char 1) ; apply to next line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3757 (woman-unquote-args) ; else unquote to end of heading
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3758 (beginning-of-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3759 (woman2-process-escapes-to-eol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3760 (woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3761 (setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3762 ;; Optionally embolden heading (point is at beginning of heading):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3763 (if woman-bold-headings
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3764 (woman-set-face
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3765 (point) (save-excursion (end-of-line) (point)) 'woman-bold-face))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3766 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3767 (setq woman-left-margin woman-default-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3768 woman-nofill nil) ; fill output lines
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3769 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3770 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3771
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3772 (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
3773 ".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
3774 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3775 (if (eolp) ; If no args then
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3776 (delete-char 1)) ; apply to next line.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3777 (insert " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3778 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3779 (woman2-SH to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3780
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3781 (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
3782 ".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
3783 Leave 1 blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3784 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3785 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3786 (setq woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3787 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3788
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3789 (defalias 'woman2-PP 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3790 (defalias 'woman2-P 'woman2-LP)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3791
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3792 (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
3793 ".ns -- Turn on no-space mode. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3794 ;; Should not cause a break!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3795 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3796 (setq woman-nospace t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3797 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3798
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3799 (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
3800 ".rs -- Turn off no-space mode. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3801 ;; Should not cause a break!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3802 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3803 (setq woman-nospace nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3804 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3805
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3806 (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
3807 ".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
3808 (let ((N (if (eolp) 1 (woman-get-numeric-arg))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3809 (if (>= N 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3810 (woman-delete-line 1) ; ignore argument(s)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3811 (setq woman-negative-vertical-space t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3812 (insert ".sp ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3813 (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3814 (setq woman-leave-blank-lines N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3815 (woman2-format-paragraphs to)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3816
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3817 (defun woman-negative-vertical-space (from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3818 ".sp N with N < 0 => overlap following with preceding lines at FROM."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3819 ;; Run by woman-decode-region if necessary -- not usually required.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3820 (WoMan-warn "Negative vertical spacing support is experimental!")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3821 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3822 (while
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3823 ;; Find next control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3824 (re-search-forward "^\\.sp " nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3825 (let ((N (woman-get-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3826 overlap overwritten)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3827 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3828 (setq from (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3829 overlap (buffer-substring from
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3830 (progn (forward-line (- N)) (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3831 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3832 (forward-line N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3833 (let ((imax (length overlap))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3834 (i 0) c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3835 (while (< i imax)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3836 (setq c (aref overlap i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3837 (cond ((eq c ?\n) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3838 (forward-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3839 ((eolp) ; extend line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3840 ;; Insert character INCLUDING TEXT PROPERTIES:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3841 ;; (insert (substring overlap i (1+ i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3842 (let ((eol (string-match "\n" overlap i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3843 (insert (substring overlap i eol))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3844 (setq i (or eol imax)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3845 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3846 ((eq c ?\ ) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3847 (forward-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3848 ((eq c ?\t) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3849 (if (eq (following-char) ?\t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3850 (forward-char) ; both tabs, just skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3851 (let ((i woman-tab-width))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3852 (while (> i 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3853 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3854 (insert ?\ ) ; extend line
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3855 (forward-char)) ; skip
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3856 (setq i (1- i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3857 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3858 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3859 (if (or (eq (following-char) ?\ ) ; overwrite OK
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3860 overwritten) ; warning only once per ".sp -"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3861 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3862 (setq overwritten t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3863 (WoMan-warn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3864 "Character(s) overwritten by negative vertical spacing in line %d"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3865 (count-lines 1 (point))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3866 (delete-char 1) (insert (substring overlap i (1+ i)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3867 (setq i (1+ i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3868 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3869 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3870
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3871
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3872 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3873 ;; The following function should probably do ALL width and number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3874 ;; register interpolation.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3875 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3876
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3877 (defun woman2-process-escapes (to &optional numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3878 "Process remaining escape sequences up to marker TO, preserving point.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3879 Optional argument NUMERIC, if non-nil, means the argument is numeric."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3880 ;; The first two cases below could be merged (maybe)!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3881 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3882 ;; Discard zero width filler character used to hide leading dots
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3883 ;; and zero width characters \|, \^:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3884 (while (re-search-forward "\\\\[&|^]" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3885 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3886 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3887 ;; Interrupt text processing -- CONTINUE current text with the
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3888 ;; next text line (after any control lines, unless processing to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3889 ;; eol):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3890 (while (re-search-forward "\\\\c.*\n?" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3891 (woman-delete-match 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3892 ;; but do not delete the final newline ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3893 (if (and (or (eobp) (= (point) to)) (not (bolp)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3894 (insert-before-markers ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3895 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3896 (woman-translate to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3897 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3898 (woman-special-characters to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3899 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3900 ;; Printable version of the current escape character, ASSUMED to be `\'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3901 ;; This must be done LAST of all escape processing!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3902 ;; Done like this to preserve any text properties of the `\'
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3903 (while (search-forward "\\" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3904 (let ((c (following-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3905 (cond ((eq c ?') ; \' -> '
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3906 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3907 (cond (numeric ; except in numeric args, \' -> `
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3908 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3909 (insert ?`))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3910 ((eq c ?\( )) ; uninterpreted special character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3911 ; \(.. -- do nothing
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3912 ((eq c ?t) ; non-interpreted tab \t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3913 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3914 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3915 (insert "\t"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3916 ((and numeric
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3917 (memq c '(?w ?n ?h)))) ; leave \w, \n, \h (?????)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3918 ((eq c ?l) (woman-horizontal-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3919 (t
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3920 ;; \? -> ? where ? is any remaining character
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3921 (WoMan-warn "Escape ignored: \\%c -> %c" c c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3922 (delete-char -1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3923 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3924 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3925 ;; Process non-default tab settings:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3926 (cond (tab-stop-list
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3927 (while (search-forward "\t" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3928 (woman-tab-to-tab-stop))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3929 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3930
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3931 ;; Must replace \' by something before processing \w, done above.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3932
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3933 ;; Replace all `\w' and `\n' escapes:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3934 ;; (This may be a bit too recursive!)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3935 (while (re-search-forward "\\\\[nw]" to t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3936 (let ((from (match-beginning 0)) N)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3937 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3938 (setq N (woman-parse-numeric-value))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3939 (delete-region from (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3940 ;; Interpolate value:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3941 (insert-before-markers (number-to-string N))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3942 (goto-char from)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3943
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3944 (defun woman-horizontal-line ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3945 "\\l'Nc' -- Draw a horizontal line of length N using character c, default _."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3946 (delete-char -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3947 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3948 (looking-at "\\(.\\)\\(.*\\)\\1")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3949 (let ((to (make-marker)) from N c)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3950 (set-marker to (match-end 2))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3951 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3952 (setq from (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3953 N (woman-parse-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3954 (setq c (if (< (point) to) (following-char) ?_))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3955 (delete-region from to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3956 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3957 (set-marker to nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3958 (insert (make-string N c))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3959 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3960
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3961 ;;; 4. Text Filling, Adjusting, and Centering
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3962
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3963 (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
3964 ".br -- Break. Leave no blank line. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3965 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3966 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3967
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3968 (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
3969 ".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
3970 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3971 (setq woman-nofill nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3972 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3973 ;; Preserve any final blank line in the nofill region:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3974 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3975 (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3976 (if (looking-at "[ \t]*$") (setq woman-leave-blank-lines 1)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3977 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3978
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3979 (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
3980 ".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
3981 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
3982 for the current line length. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3983 (setq woman-nofill t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3984 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3985 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3986
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3987 (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
3988 ".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
3989 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
3990 Format paragraphs upto TO. (Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3991 ;; c = l -- left, r -- right, c -- center, b or n -- both,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3992 ;; absent -- unchanged. Initial mode adj,both.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3993 (setq woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3994 (cond ((eolp) woman-adjust-previous)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3995 ((eq (following-char) ?l) woman-adjust-left)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3996 ((eq (following-char) ?r) woman-adjust-right)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3997 ((eq (following-char) ?c) woman-adjust-center)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3998 ((memq (following-char) '(?b ?n)) woman-adjust-both)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
3999 (t (woman-get-numeric-arg))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4000 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4001 woman-justify (nth woman-adjust woman-justify-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4002 (woman-delete-line 1) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4003 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4004
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4005 (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
4006 ".na -- No adjusting. Format paragraphs upto TO.
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4007 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4008 (setq woman-adjust-previous woman-adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4009 woman-justify-previous woman-justify
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4010 woman-adjust woman-adjust-left ; fill but do not adjust
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4011 woman-justify (nth woman-adjust woman-justify-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4012 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4013 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4014
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4015 ;;; The main formatting functions:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4016
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4017 (defun woman-leave-blank-lines (&optional leave)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4018 "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
4019 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
4020 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
4021 non-nil and non-zero."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4022 ;; ***** It may suffice to delete only lines ABOVE point! *****
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4023 ;; NOTE: Function arguments are evaluated left to right
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4024 ;; (*note (elisp)Function Forms::.).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4025 (delete-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4026 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4027 (if (not (eq (skip-syntax-backward " ") 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4028 (forward-line)) ; forward-char ?
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4029 (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4030 (progn (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4031 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4032 (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4033 (if woman-nospace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4034 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4035 (if (or (null leave) (eq leave 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4036 ;; output any `pending' vertical space ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4037 (setq leave woman-leave-blank-lines))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4038 (if (and leave (> leave 0)) (insert-before-markers ?\n))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4039 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4040 (setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4041 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4042
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4043 ;; `fill-region-as-paragraph' in `fill.el' appears to be the principal
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4044 ;; text filling function, so that is what I use here.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4045
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4046 (defvar woman-temp-indent nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4047
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4048 (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
4049 "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
4050 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
4051 If `woman-nofill' is non-nil then indent without filling or adjusting."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4052 ;; Blank space should only ever be output before text.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4053 (if new-left (setq left-margin new-left))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4054 (if (looking-at "^\\s *$")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4055 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4056 (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4057 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4058 ;; Successive control lines are sufficiently common to be worth a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4059 ;; special case (maybe):
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4060 (if (>= (point) to) ; >= as a precaution!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4061 ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4062 ;; (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4063 (woman-reset-nospace)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4064 ;; (woman2-process-escapes to) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4065 (woman2-process-escapes to 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4066 (if woman-nofill
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4067 ;; Indent without filling or adjusting ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4068 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4069 (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4070 (cond (woman-temp-indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4071 (indent-to woman-temp-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4072 (forward-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4073 (indent-rigidly (point) to left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4074 (woman-horizontal-escapes to)) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4075 ;; Fill and justify ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4076 ;; Blank lines and initial spaces cause a break.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4077 ; (cond ((and (= (point) to) (not (looking-at ".nf"))) ; Yuk!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4078 ; ;; No text after a request that caused a break, so delete
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4079 ; ;; any spurious blank line left:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4080 ; (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4081 ; (if (looking-at "^\\s *$") (kill-line) (forward-line))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4082 (while (< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4083 (woman-leave-blank-lines)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4084 (let ((from (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4085 ;; Indent first lin of paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4086 (indent-to (or woman-temp-indent left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4087 (woman-horizontal-escapes to) ; 7 October 1999
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4088 ;; Find the beginning of the next paragraph:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4089 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4090 ; (if (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4091 ; ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4092 ; (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4093 ; (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4094 ; (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4095 ; (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4096 ; (setq woman-leave-blank-lines nil)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4097 (and (re-search-forward "\\(^\\s *$\\)\\|\\(^\\s +\\)" to 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4098 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4099 (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4100 (skip-syntax-forward " ")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4101 (setq woman-leave-blank-lines 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4102 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4103 ;; If a single short line then just leave it.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4104 ;; This is necessary to preserve some table layouts.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4105 ;; PROBABLY NOT NECESSARY WITH SQUEEZE MODIFICATION !!!!!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4106 (if (or (> (count-lines from (point)) 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4107 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4108 (backward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4109 (> (current-column) fill-column)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4110 ;; ?roff does not squeeze multiple spaces
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4111 ;; (fill-region-as-paragraph from (point) woman-justify t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4112 ;; NOSQUEEZE has no effect if JUSTIFY is full, so
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4113 ;; redefine canonically-space-region, see above.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4114 (progn
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4115 ;; Needs a re-write of the paragraph formatter to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4116 ;; avoid this nonsense to handle temporary indents!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4117 (if (and woman-temp-indent (< woman-temp-indent left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4118 (let ((left-margin woman-temp-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4119 (fill-region-as-paragraph from (point) woman-justify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4120 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4121 (goto-char from)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4122 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4123 (setq from (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4124 (fill-region-as-paragraph from (point) woman-justify))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4125 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4126 ;; A blank line should leave a space like .sp 1 (p. 14).
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4127 ;; Delete all but 1 trailing blank lines:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4128 ;;(woman-leave-blank-lines 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4129 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4130 )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4131 (setq woman-temp-indent nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4132 ;; Non-white-space text has been processed, so ...
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4133 ;;(setq woman-leave-blank-lines nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4134 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4135
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4136
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4137 ;;; Tagged, indented and hanging paragraphs:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4138
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4139 (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
4140 ".TP i -- Set prevailing indent to i. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4141 Begin indented paragraph with hanging tag given by next text line.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4142 If tag doesn't fit, place it on a separate line."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4143 (let ((i (woman2-get-prevailing-indent)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4144 (woman-leave-blank-lines woman-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4145 (woman2-tagged-paragraph to i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4146
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4147 (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
4148 ".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
4149 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4150 (if (eolp) ; no args
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4151 ;; Like LP without resetting prevailing indent
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4152 (woman2-format-paragraphs to (+ woman-left-margin
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4153 woman-prevailing-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4154 (woman-forward-arg 'unquote)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4155 (let ((i (woman2-get-prevailing-indent 'leave-eol)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4156 (beginning-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4157 (woman-leave-blank-lines) ; must be here,
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4158 (woman2-tagged-paragraph to i))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4159
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4160 (defun woman-find-next-control-line-carefully ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4161 "Find and return start of next control line, even if already there!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4162 (if (looking-at "^[.']")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4163 (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4164 (woman-find-next-control-line)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4165
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4166 (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
4167 "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
4168 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
4169 Format paragraphs upto TO. Set prevailing indent to I."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4170 (if (not (looking-at "\\s *$")) ; non-empty tag
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 ;; Temporary hack for bash.1 and groff_mmse.7 until code is revised
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4174 ;; to process all requests uniformly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4175 (cond ((and (= (point) to) (looking-at "^[.'][ \t]*\\(PD\\|br\\|ta\\) *"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4176 (if (string= (match-string 1) "br")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4177 (woman-delete-line 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4178 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4179 (if (string= (match-string 1) "ta") ; for GetInt.3
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4180 (woman2-ta to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4181 (woman-set-interparagraph-distance)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4182 (set-marker to (woman-find-next-control-line-carefully))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4183 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4184
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4185 (let ((tag (point)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4186 (woman-reset-nospace)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4187 ;; Format the tag:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4188 (woman2-process-escapes-to-eol)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4189 ;; TIDY UP THE FOLLOWING CODE
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4190 ;; (indent-to woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4191 (setq left-margin woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4192 (forward-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4193 (fill-region-as-paragraph (save-excursion (forward-line -1) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4194 (point) woman-justify)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4195
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4196 ;; Temporary hack for bash.1 until all requests processed uniformly:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4197 (cond ((and (= (point) to) (looking-at "^[.'][ \t]*PD *"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4198 (woman-delete-match 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4199 (woman-set-interparagraph-distance)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4200 (set-marker to (woman-find-next-control-line-carefully))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4201 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4202
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4203 ;; Format the paragraph body, if there is one! Set indented left
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4204 ;; margin anyway, because the paragraph body may begin with a
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4205 ;; control line:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4206 (setq left-margin (+ woman-left-margin i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4207 (cond ((< (point) to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4208 (woman2-format-paragraphs to)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4209 (goto-char tag) (end-of-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4210 (cond ((> (setq i (- left-margin (current-column))) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4211 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4212 (delete-horizontal-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4213 ;; Necessary to avoid spaces inheriting underlines.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4214 ;; Cannot simply delete (current-column) whitespace
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4215 ;; characters because some may be tabs!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4216 (while (> i 0) (insert ? ) (setq i (1- i)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4217 (goto-char to) ; necessary ???
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4218 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4219 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4220
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4221 (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
4222 ".HP i -- Set prevailing indent to i. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4223 Begin paragraph with hanging indent."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4224 (let ((i (woman2-get-prevailing-indent)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4225 (woman-interparagraph-space)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4226 (setq woman-temp-indent woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4227 (woman2-format-paragraphs to (+ woman-left-margin i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4228 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4229
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4230 (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
4231 "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
4232 If no argument then return the existing prevailing indent.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4233 Delete line from point and eol unless LEAVE-EOL is non-nil."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4234 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4235 (or leave-eol (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4236 (let ((i (woman-get-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4237 (woman-delete-line) (or leave-eol (delete-char 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4238 ;; i = 0 if the argument was not a number
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4239 (if (> i 0) (setq woman-prevailing-indent i))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4240 woman-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4241
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4242 (defmacro woman-push (value stack)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4243 "Push VALUE onto STACK."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4244 `(setq ,stack (cons ,value ,stack)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4245
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4246 (defmacro woman-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
4247 "Pop into VARIABLE the value at the top of STACK.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4248 Allow for mismatched requests!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4249 `(if ,stack
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4250 (setq ,variable (car ,stack)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4251 ,stack (cdr ,stack))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4252
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4253 (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
4254 ".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
4255 Set prevailing indent to 5 for nested indents. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4256 (woman-push woman-left-margin woman-RS-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4257 (woman-push woman-prevailing-indent woman-RS-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4258 (setq woman-left-margin (+ woman-left-margin
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4259 (woman2-get-prevailing-indent))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4260 woman-prevailing-indent woman-default-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4261 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4262
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4263 (defun woman2-RE (to)
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4264 ".RE -- End of relative indent. Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4265 Set prevailing indent to amount of starting .RS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4266 (woman-pop woman-left-margin woman-RS-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4267 (woman-pop woman-prevailing-indent woman-RS-prevailing-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4268 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4269 (woman2-format-paragraphs to woman-left-margin))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4270
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4271
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4272 ;;; Line Length and Indenting:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4273
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4274 (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
4275 "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
4276 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
4277 otherwise set PREVIOUS. Delete the whole remaining control line."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4278 (if (eolp) ; space already skipped
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4279 (set arg (if previous (eval previous) 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4280 (if previous (set previous (eval arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4281 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4282 (let ((pm (if (looking-at "[+-]")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4283 (prog1 (following-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4284 (forward-char 1))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4285 (i (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4286 (cond ((null pm) (set arg i))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4287 ((= pm ?+) (set arg (+ (eval arg) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4288 ((= pm ?-) (set arg (- (eval arg) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4289 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4290 (beginning-of-line))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4291 (woman-delete-line 1)) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4292
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4293 ;; NEED TO RATIONALIZE NAMES FOR PREVIOUS VALUES!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4294 (defvar woman-ll-fill-column woman-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4295 (defvar woman-in-left-margin woman-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4296
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4297 (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
4298 ".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
4299 Format paragraphs upto TO. (Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4300 (woman-set-arg 'fill-column 'woman-ll-fill-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4301 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4302
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4303 (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
4304 ".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
4305 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4306 (woman-set-arg 'left-margin 'woman-in-left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4307 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4308
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4309 (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
4310 ".ti +/-N -- Temporary indent. Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4311 ;; Ignore if no argument.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4312 ;; Indent next output line only wrt current indent.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4313 ;; Current indent is not changed.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4314 (setq woman-temp-indent left-margin)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4315 (woman-set-arg 'woman-temp-indent)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4316 (woman2-format-paragraphs to nil))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4317
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4318
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4319 ;;; Tabs, Leaders, and Fields:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4320
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4321 (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
4322 ".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
4323 \(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
4324 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
4325 Format paragraphs upto TO."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4326 (setq tab-stop-list nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4327 (woman2-process-escapes-to-eol 'numeric)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4328 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4329 (let ((tab-stop 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4330 (while (not (eolp))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4331 (let ((plus (cond ((eq (following-char) ?+) (forward-char 1) t)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4332 (i (woman-parse-numeric-arg)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4333 (setq tab-stop (if plus (+ tab-stop i) i)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4334 (if (memq (following-char) '(?R ?C))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4335 (setq tab-stop (cons tab-stop (following-char))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4336 (setq tab-stop-list (cons tab-stop tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4337 (skip-syntax-forward "^ ") ; skip following R, C, `;', etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4338 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4339 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4340 (woman-delete-line 1) ; ignore any remaining arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4341 (setq tab-stop-list (reverse tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4342 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4343
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4344 (defsubst woman-get-tab-stop (tab-stop-list)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4345 "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
4346 (if (consp tab-stop-list) (car tab-stop-list) tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4347
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4348 (defun woman-tab-to-tab-stop ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4349 "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
4350 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
4351 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
4352 ;; Based on tab-to-tab-stop in indent.el.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4353 ;; R & C tabs probably not quite right!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4354 (delete-backward-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4355 (let ((tabs tab-stop-list))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4356 (while (and tabs (>= (current-column)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4357 (woman-get-tab-stop (car tabs))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4358 (setq tabs (cdr tabs)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4359 (if tabs
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4360 (let* ((tab (car tabs))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4361 (type (and (consp tab) (cdr tab)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4362 eol n)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4363 (if type
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4364 (setq tab (woman-get-tab-stop tab)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4365 eol (save-excursion (end-of-line) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4366 n (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4367 (search-forward "\t" eol t))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4368 n (- (if n (1- n) eol) (point))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4369 tab (- tab (if (eq type ?C) (/ n 2) n))) )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4370 (setq n (- tab (current-column)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4371 (while (> n 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4372 (insert ?\ )
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4373 (setq n (1- n))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4374 (insert ?\ ))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4375
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4376 (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
4377 ".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
4378 \(Breaks, but should not.)"
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4379 ;; Currently just terminates special tab processing.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4380 (setq tab-stop-list nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4381 (woman-delete-line 1) ; ignore any arguments
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4382 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4383
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4384 (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
4385 ".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
4386 Format paragraphs upto TO.
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4387 A VERY FIRST ATTEMPT to make fields at least readable!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4388 Needs doing properly!"
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4389 (if (eolp)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4390 (woman-delete-whole-line) ; ignore!
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4391 (let ((delim (following-char))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4392 (pad ?\ ) end) ; pad defaults to space
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4393 (forward-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4394 (skip-chars-forward " \t")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4395 (or (eolp) (setq pad (following-char)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4396 (woman-delete-whole-line)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4397 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4398 (if (re-search-forward "^[.'][ \t]*fc\\s " nil t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4399 (setq end (match-beginning 0))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4400 ;; A field is contained between a pair of field delimiter
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4401 ;; characters and consists of sub-strings separated by padding
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4402 ;; indicator characters:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4403 (setq delim (string delim ?[ ?^ delim ?] ?* delim))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4404 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4405 (while (re-search-forward delim end t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4406 (goto-char (match-beginning 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4407 (delete-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4408 (insert woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4409 (goto-char (match-end 0))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4410 (delete-backward-char 1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4411 (insert-before-markers woman-unpadded-space-char)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4412 (subst-char-in-region
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4413 (match-beginning 0) (match-end 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4414 pad woman-unpadded-space-char t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4415 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4416 ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4417 (woman2-format-paragraphs to))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4418
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4419
47978
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4420 ;;; Preliminary table support (.TS/.TE)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4421
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4422 (defun woman2-TS (to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4423 ".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
4424 Format paragraphs upto TO."
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4425 ;; 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
4426 (woman-delete-line 1) ; ignore any arguments
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4427 (when woman-emulate-tbl
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4428 ;; 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
4429 ;; 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
4430 ;; a semicolon. Currently, just delete it:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4431 (if (looking-at ".*;[ \t]*$") (woman-delete-line 1)) ;
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4432 ;; 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
4433 ;; 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
4434 (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
4435 (woman-delete-line 1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4436 ;; 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
4437 (let ((start (point)) (col 1))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4438 (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
4439 ;; Find current column width:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4440 (while (< (point) to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4441 (when (search-forward "\t" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4442 (backward-char)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4443 (if (> (current-column) col) (setq col (current-column))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4444 (forward-line))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4445 ;; Align current column:
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4446 (goto-char start)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4447 (setq col (+ col 3)) ; intercolumn space
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4448 (while (< (point) to)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4449 (when (search-forward "\t" to t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4450 (delete-char -1)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4451 (insert-char ?\ (- col (current-column))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4452 (forward-line))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4453 (goto-char start))))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4454 ;; 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
4455 (setq woman-nofill t)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4456 (woman2-format-paragraphs to))
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4457
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4458 (defalias 'woman2-TE 'woman2-fi)
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4459 ;; ".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
4460 ;; Turn filling and adjusting back on.
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4461
10ae253bba03 Updated user interface generally, especially Cygwin
Juanma Barranquero <lekktu@gmail.com>
parents: 45271
diff changeset
4462
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4463 ;;; WoMan message logging:
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4464
29074
3b4c3f9b9c66 (From Francis J. Wright <F.J.Wright@Maths.QMW.ac.uk)
Eli Zaretskii <eliz@gnu.org>
parents: 28832
diff changeset
4465 ;; 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
4466 ;; by Jamie Zawinski <jwz@lucid.com> & Hallvard Furuseth <hbf@ulrik.uio.no>
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4467
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4468 (defvar WoMan-current-file nil) ; bound in woman-really-find-file
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4469 (defvar WoMan-Log-header-point-max nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4470
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4471 (defun WoMan-log-begin ()
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4472 "Log the beginning of formatting in *WoMan-Log*."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4473 (let ((WoMan-current-buffer (buffer-name)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4474 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4475 (set-buffer (get-buffer-create "*WoMan-Log*"))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4476 (or (eq major-mode 'view-mode) (view-mode 1))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4477 (setq buffer-read-only nil)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4478 (goto-char (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4479 (insert "\n\^L\nFormatting "
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4480 (if (stringp WoMan-current-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4481 (concat "file " WoMan-current-file)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4482 (concat "buffer " WoMan-current-buffer))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4483 " at " (current-time-string) "\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4484 (setq WoMan-Log-header-point-max (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4485 )))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4486
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4487 (defun WoMan-log (format &rest args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4488 "Log a message out of FORMAT control string and optional ARGS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4489 (WoMan-log-1 (apply 'format format args)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4490
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4491 (defun WoMan-warn (format &rest args)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4492 "Log a warning message out of FORMAT control string and optional ARGS."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4493 (setq format (apply 'format format args))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4494 (WoMan-log-1 (concat "** " format)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4495
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4496 (defun WoMan-warn-ignored (request ignored)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4497 "Log a warning message about ignored directive REQUEST.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4498 IGNORED is a string appended to the log message."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4499 (let ((tail
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4500 (buffer-substring (point)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4501 (save-excursion (end-of-line) (point)))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4502 (if (and (> (length tail) 0)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4503 (/= (string-to-char tail) ?\ ))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4504 (setq tail (concat " " tail)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4505 (WoMan-log-1
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4506 (concat "** " request tail " request " ignored))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4507
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4508 (defun WoMan-log-end (time)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4509 "Log the end of formatting in *WoMan-Log*.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4510 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
4511 with the message."
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4512 (WoMan-log-1 (format "Formatting time %d seconds." time) 'end))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4513
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4514 (defun WoMan-log-1 (string &optional end)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4515 "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
4516 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
4517 logging the message."
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4518 (save-excursion
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4519 (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
4520 (setq buffer-read-only nil)
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4521 (goto-char (point-max))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4522 (or end (insert " ")) (insert string "\n")
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4523 (if end
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4524 (setq buffer-read-only t)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4525 (if woman-show-log
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4526 (select-window ; to return to
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4527 (prog1 (selected-window) ; WoMan window
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4528 (select-window (display-buffer (current-buffer)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4529 (cond (WoMan-Log-header-point-max
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4530 (goto-char WoMan-Log-header-point-max)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4531 (forward-line -1)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4532 (recenter 0)))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4533 )))))
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4534 nil) ; for woman-file-readable-p etc.
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4535
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4536 (provide 'woman)
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4537
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 50404
diff changeset
4538 ;;; arch-tag: eea35e90-552f-4712-a94b-d9ffd3db7651
28832
eb06b6bb8aa8 New file.
Eli Zaretskii <eliz@gnu.org>
parents:
diff changeset
4539 ;;; woman.el ends here