Mercurial > emacs
annotate lisp/textmodes/texnfo-upd.el @ 67086:7ae3d744378e
(Custom-reset-standard): Make it handle Custom group
buffers correctly. (It used to throw an error in such buffers.)
Make it ask for confirmation in group buffers and other Custom
buffers containing more than one customization item.
author | Luc Teirlinck <teirllm@auburn.edu> |
---|---|
date | Tue, 22 Nov 2005 23:28:28 +0000 |
parents | 5b1a238fcbb4 |
children | 067115a6e738 2d92f5c9d6ae |
rev | line source |
---|---|
13337 | 1 ;;; texnfo-upd.el --- utilities for updating nodes and menus in Texinfo files |
13354 | 2 |
64751
5b1a238fcbb4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
3 ;; Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, |
5b1a238fcbb4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
4 ;; 2005 Free Software Foundation, Inc. |
107 | 5 |
19110 | 6 ;; Author: Robert J. Chassell |
43808 | 7 ;; Maintainer: bug-texinfo@gnu.org |
814
38b2499cb3e9
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
775
diff
changeset
|
8 ;; Keywords: maint, tex, docs |
107 | 9 |
10 ;; This file is part of GNU Emacs. | |
11 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
13 ;; it under the terms of the GNU General Public License as published by | |
732 | 14 ;; the Free Software Foundation; either version 2, or (at your option) |
107 | 15 ;; any later version. |
16 | |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
14169 | 23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64084 | 24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
25 ;; Boston, MA 02110-1301, USA. | |
107 | 26 |
775
1ca26ccad38e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
732
diff
changeset
|
27 ;;; Commentary: |
107 | 28 |
14169 | 29 ;; Known bug: update commands fail to ignore @ignore. |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
30 |
14169 | 31 ;; Summary: how to use the updating commands |
107 | 32 |
14169 | 33 ;; The node and menu updating functions automatically |
107 | 34 |
14169 | 35 ;; * insert missing `@node' lines, |
36 ;; * insert the `Next', `Previous' and `Up' pointers of a node, | |
19110 | 37 ;; * insert or update the menu for a section, |
14169 | 38 ;; * create a master menu for a Texinfo source file. |
39 ;; | |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
40 ;; With a prefix argument, the `texinfo-update-node' and |
14169 | 41 ;; `texinfo-make-menu' functions do their jobs in the region. |
42 ;; | |
43 ;; In brief, the functions for creating or updating nodes and menus, are: | |
19110 | 44 ;; |
45 ;; texinfo-update-node (&optional beginning end) | |
46 ;; texinfo-every-node-update () | |
14169 | 47 ;; texinfo-sequential-node-update (&optional region-p) |
19110 | 48 ;; |
49 ;; texinfo-make-menu (&optional beginning end) | |
50 ;; texinfo-all-menus-update () | |
14169 | 51 ;; texinfo-master-menu () |
52 ;; | |
53 ;; texinfo-insert-node-lines (&optional title-p) | |
19110 | 54 ;; |
14169 | 55 ;; texinfo-indent-menu-description (column &optional region-p) |
107 | 56 |
14169 | 57 ;; The `texinfo-column-for-description' variable specifies the column to |
19110 | 58 ;; which menu descriptions are indented. |
107 | 59 |
14169 | 60 ;; Texinfo file structure |
61 ;; ---------------------- | |
107 | 62 |
14169 | 63 ;; To use the updating commands, you must structure your Texinfo file |
64 ;; hierarchically. Each `@node' line, with the exception of the top | |
65 ;; node, must be accompanied by some kind of section line, such as an | |
66 ;; `@chapter' or `@section' line. Each node-line/section-line | |
67 ;; combination must look like this: | |
107 | 68 |
14169 | 69 ;; @node Lists and Tables, Cross References, Structuring, Top |
70 ;; @comment node-name, next, previous, up | |
71 ;; @chapter Making Lists and Tables | |
107 | 72 |
14169 | 73 ;; or like this (without the `@comment' line): |
107 | 74 |
14169 | 75 ;; @node Lists and Tables, Cross References, Structuring, Top |
76 ;; @chapter Making Lists and Tables | |
107 | 77 |
14169 | 78 ;; If the file has a `top' node, it must be called `top' or `Top' and |
79 ;; be the first node in the file. | |
107 | 80 |
81 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
82 ;;; The update node functions described in detail |
107 | 83 |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
84 ;; The `texinfo-update-node' command with no prefix argument inserts |
14169 | 85 ;; the correct next, previous and up pointers for the node in which |
86 ;; point is located (i.e., for the node preceding point). | |
107 | 87 |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
88 ;; With prefix argument, the `texinfo-update-node' function inserts the |
14169 | 89 ;; correct next, previous and up pointers for the nodes inside the |
90 ;; region. | |
107 | 91 |
14169 | 92 ;; It does not matter whether the `@node' line has pre-existing |
93 ;; `Next', `Previous', or `Up' pointers in it. They are removed. | |
107 | 94 |
14169 | 95 ;; The `texinfo-every-node-update' function runs `texinfo-update-node' |
96 ;; on the whole buffer. | |
107 | 97 |
14169 | 98 ;; The `texinfo-sequential-node-update' function inserts the |
99 ;; immediately following and preceding node into the `Next' or | |
100 ;; `Previous' pointers regardless of their hierarchical level. This is | |
101 ;; only useful for certain kinds of text, like a novel, which you go | |
102 ;; through sequentially. | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
103 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
104 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
105 ;;; The menu making functions described in detail |
107 | 106 |
14169 | 107 ;; The `texinfo-make-menu' function without an argument creates or |
108 ;; updates a menu for the section encompassing the node that follows | |
109 ;; point. With an argument, it makes or updates menus for the nodes | |
110 ;; within or part of the marked region. | |
107 | 111 |
14169 | 112 ;; Whenever an existing menu is updated, the descriptions from |
113 ;; that menu are incorporated into the new menu. This is done by copying | |
114 ;; descriptions from the existing menu to the entries in the new menu | |
115 ;; that have the same node names. If the node names are different, the | |
116 ;; descriptions are not copied to the new menu. | |
107 | 117 |
14169 | 118 ;; Menu entries that refer to other Info files are removed since they |
119 ;; are not a node within current buffer. This is a deficiency. | |
107 | 120 |
14169 | 121 ;; The `texinfo-all-menus-update' function runs `texinfo-make-menu' |
122 ;; on the whole buffer. | |
107 | 123 |
14169 | 124 ;; The `texinfo-master-menu' function creates an extended menu located |
125 ;; after the top node. (The file must have a top node.) The function | |
126 ;; first updates all the regular menus in the buffer (incorporating the | |
127 ;; descriptions from pre-existing menus), and then constructs a master | |
128 ;; menu that includes every entry from every other menu. (However, the | |
129 ;; function cannot update an already existing master menu; if one | |
130 ;; exists, it must be removed before calling the function.) | |
107 | 131 |
14169 | 132 ;; The `texinfo-indent-menu-description' function indents every |
133 ;; description in the menu following point, to the specified column. | |
134 ;; Non-nil argument (prefix, if interactive) means indent every | |
135 ;; description in every menu in the region. This function does not | |
136 ;; indent second and subsequent lines of a multi-line description. | |
107 | 137 |
14169 | 138 ;; The `texinfo-insert-node-lines' function inserts `@node' before the |
139 ;; `@chapter', `@section', and such like lines of a region in a Texinfo | |
140 ;; file where the `@node' lines are missing. | |
19110 | 141 ;; |
14169 | 142 ;; With a non-nil argument (prefix, if interactive), the function not |
143 ;; only inserts `@node' lines but also inserts the chapter or section | |
144 ;; titles as the names of the corresponding nodes; and inserts titles | |
145 ;; as node names in pre-existing `@node' lines that lack names. | |
19110 | 146 ;; |
14169 | 147 ;; Since node names should be more concise than section or chapter |
148 ;; titles, node names so inserted will need to be edited manually. | |
107 | 149 |
19110 | 150 |
775
1ca26ccad38e
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
732
diff
changeset
|
151 ;;; Code: |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
152 |
33258
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
153 (require 'texinfo) |
19630
95743e18a01c
(defgroup, defcustom): Add Emacs 19 compatibility definitions.
Richard M. Stallman <rms@gnu.org>
parents:
19110
diff
changeset
|
154 |
95743e18a01c
(defgroup, defcustom): Add Emacs 19 compatibility definitions.
Richard M. Stallman <rms@gnu.org>
parents:
19110
diff
changeset
|
155 |
18849
b4b2ad407ba0
(texinfo-all-menus-update)
Richard M. Stallman <rms@gnu.org>
parents:
18259
diff
changeset
|
156 (defvar texinfo-master-menu-header |
b4b2ad407ba0
(texinfo-all-menus-update)
Richard M. Stallman <rms@gnu.org>
parents:
18259
diff
changeset
|
157 " --- The Detailed Node Listing ---\n" |
b4b2ad407ba0
(texinfo-all-menus-update)
Richard M. Stallman <rms@gnu.org>
parents:
18259
diff
changeset
|
158 "String inserted before lower level entries in Texinfo master menu. |
b4b2ad407ba0
(texinfo-all-menus-update)
Richard M. Stallman <rms@gnu.org>
parents:
18259
diff
changeset
|
159 It comes after the chapter-level menu entries.") |
b4b2ad407ba0
(texinfo-all-menus-update)
Richard M. Stallman <rms@gnu.org>
parents:
18259
diff
changeset
|
160 |
40284
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
161 ;; We used to look for just sub, but that found @subtitle. |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
162 (defvar texinfo-section-types-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
163 "^@\\(chapter \\|sect\\|subs\\|subh\\|unnum\\|major\\|chapheading \\|heading \\|appendix\\)" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
164 "Regexp matching chapter, section, other headings (but not the top node).") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
165 |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
166 (defvar texinfo-section-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
167 (regexp-opt (texinfo-filter 3 texinfo-section-list)) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
168 "Regular expression matching just the Texinfo section level headings.") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
169 |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
170 (defvar texinfo-subsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
171 (regexp-opt (texinfo-filter 4 texinfo-section-list)) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
172 "Regular expression matching just the Texinfo subsection level headings.") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
173 |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
174 (defvar texinfo-subsubsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
175 (regexp-opt (texinfo-filter 5 texinfo-section-list)) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
176 "Regular expression matching just the Texinfo subsubsection level headings.") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
177 |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
178 (defvar texinfo-update-menu-same-level-regexps |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
179 '((1 . "top[ \t]+") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
180 (2 . (concat "\\(^@\\)\\(" texinfo-chapter-level-regexp "\\)\\>[ \t]*")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
181 (3 . (concat "\\(^@\\)\\(" texinfo-section-level-regexp "\\)\\>[ \t]*")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
182 (4 . (concat "\\(^@\\)\\(" texinfo-subsection-level-regexp "\\)\\>[ \t]+")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
183 (5 . (concat "\\(^@\\)\\(" texinfo-subsubsection-level-regexp "\\)\\>[ \t]+"))) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
184 "*Regexps for searching for same level sections in a Texinfo file. |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
185 The keys are strings specifying the general hierarchical level in the |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
186 document; the values are regular expressions.") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
187 |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
188 (defvar texinfo-update-menu-higher-regexps |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
189 '((1 . "^@node [ \t]*DIR") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
190 (2 . "^@node [ \t]*top[ \t]*\\(,\\|$\\)") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
191 (3 . |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
192 (concat |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
193 "\\(^@\\(" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
194 texinfo-chapter-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
195 "\\)\\>[ \t]*\\)")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
196 (4 . |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
197 (concat |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
198 "\\(^@\\(" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
199 texinfo-section-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
200 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
201 texinfo-chapter-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
202 "\\)\\>[ \t]*\\)")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
203 (5 . |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
204 (concat |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
205 "\\(^@\\(" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
206 texinfo-subsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
207 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
208 texinfo-section-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
209 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
210 texinfo-chapter-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
211 "\\)\\>[ \t]*\\)"))) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
212 "*Regexps for searching for higher level sections in a Texinfo file. |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
213 The keys are strings specifying the general hierarchical level in the |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
214 document; the values are regular expressions.") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
215 |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
216 (defvar texinfo-update-menu-lower-regexps |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
217 '((1 . |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
218 (concat |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
219 "\\(^@\\(" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
220 texinfo-chapter-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
221 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
222 texinfo-section-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
223 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
224 texinfo-subsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
225 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
226 texinfo-subsubsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
227 "\\)\\>[ \t]*\\)")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
228 (2 . |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
229 (concat |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
230 "\\(^@\\(" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
231 texinfo-section-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
232 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
233 texinfo-subsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
234 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
235 texinfo-subsubsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
236 "\\)\\>[ \t]*\\)")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
237 (3 . |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
238 (concat |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
239 "\\(^@\\(" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
240 texinfo-subsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
241 "\\|" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
242 texinfo-subsubsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
243 "\\)\\>[ \t]+\\)")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
244 (4 . |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
245 (concat |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
246 "\\(^@\\(" |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
247 texinfo-subsubsection-level-regexp |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
248 "\\)\\>[ \t]+\\)")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
249 ;; There's nothing below 5, use a bogus regexp that can't match. |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
250 (5 . "a\\(^\\)")) |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
251 "*Regexps for searching for lower level sections in a Texinfo file. |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
252 The keys are strings specifying the general hierarchical level in the |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
253 document; the values are regular expressions.") |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
254 |
1b45ff920a8c
(texinfo-section-types-regexp)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38963
diff
changeset
|
255 |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
256 (defun texinfo-make-menu (&optional beginning end) |
107 | 257 "Without any prefix argument, make or update a menu. |
258 Make the menu for the section enclosing the node found following point. | |
259 | |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
260 A prefix argument means make or update menus |
107 | 261 for nodes within or part of the marked region. |
262 | |
263 Whenever a menu exists, and is being updated, the descriptions that | |
264 are associated with node names in the pre-existing menu are | |
43430
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
265 incorporated into the new menu. |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
266 |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
267 Leaves trailing whitespace in a menu that lacks descriptions, so |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
268 descriptions will format well. In general, a menu should contain |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
269 descriptions, because node names and section titles are often too |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
270 short to explain a node well." |
19110 | 271 |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
272 (interactive |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
273 (if prefix-arg |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
274 (list (point) (mark)))) |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
275 (if (null beginning) |
107 | 276 (let ((level (texinfo-hierarchic-level))) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
277 (texinfo-make-one-menu level) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
278 (message "Menu updated")) |
107 | 279 ;; else |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
280 (message "Making or updating menus in %s... " (buffer-name)) |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
281 (save-excursion |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
282 (goto-char (min beginning end)) |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
283 ;; find section type following point |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
284 (let ((level (texinfo-hierarchic-level)) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
285 (region-end-marker (make-marker))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
286 (set-marker region-end-marker (max beginning end)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
287 (save-restriction |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
288 (widen) |
19110 | 289 |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
290 (while (texinfo-find-lower-level-node |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
291 level (marker-position region-end-marker)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
292 (setq level (texinfo-hierarchic-level)) ; new, lower level |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
293 (texinfo-make-one-menu level)) |
19110 | 294 |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
295 (while (and (< (point) (marker-position region-end-marker)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
296 (texinfo-find-higher-level-node |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
297 level (marker-position region-end-marker))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
298 (setq level (texinfo-hierarchic-level)) |
23414
c9d093e48f15
(texinfo-make-menu): Don't let
Richard M. Stallman <rms@gnu.org>
parents:
22396
diff
changeset
|
299 ;; Don't allow texinfo-find-higher-level-node |
c9d093e48f15
(texinfo-make-menu): Don't let
Richard M. Stallman <rms@gnu.org>
parents:
22396
diff
changeset
|
300 ;; to find the same node again. |
c9d093e48f15
(texinfo-make-menu): Don't let
Richard M. Stallman <rms@gnu.org>
parents:
22396
diff
changeset
|
301 (forward-line 1) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
302 (while (texinfo-find-lower-level-node |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
303 level (marker-position region-end-marker)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
304 (setq level (texinfo-hierarchic-level)) ; new, lower level |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
305 (texinfo-make-one-menu level)))))) |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
306 (message "Making or updating menus in %s...done" (buffer-name)))) |
107 | 307 |
308 (defun texinfo-make-one-menu (level) | |
309 "Make a menu of all the appropriate nodes in this section. | |
19110 | 310 `Appropriate nodes' are those associated with sections that are |
107 | 311 at the level specified by LEVEL. Point is left at the end of menu." |
312 (let* | |
313 ((case-fold-search t) | |
143 | 314 (beginning |
315 (save-excursion | |
316 (goto-char (texinfo-update-menu-region-beginning level)) | |
317 (end-of-line) | |
318 (point))) | |
107 | 319 (end (texinfo-update-menu-region-end level)) |
320 (first (texinfo-menu-first-node beginning end)) | |
321 (node-name (progn | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
322 (goto-char beginning) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
323 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
324 (texinfo-copy-node-name))) |
107 | 325 (new-menu-list (texinfo-make-menu-list beginning end level))) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
326 (when (texinfo-old-menu-p beginning first) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
327 (texinfo-incorporate-descriptions new-menu-list) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
328 (texinfo-incorporate-menu-entry-names new-menu-list) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
329 (texinfo-delete-old-menu beginning first)) |
107 | 330 (texinfo-insert-menu new-menu-list node-name))) |
331 | |
332 (defun texinfo-all-menus-update (&optional update-all-nodes-p) | |
333 "Update every regular menu in a Texinfo file. | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
334 Update pre-existing master menu, if there is one. |
107 | 335 |
336 If called with a non-nil argument, this function first updates all the | |
43430
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
337 nodes in the buffer before updating the menus. |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
338 |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
339 Indents the first line of descriptions, and leaves trailing whitespace |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
340 in a menu that lacks descriptions, so descriptions will format well. |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
341 In general, a menu should contain descriptions, because node names and |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
342 section titles are often too short to explain a node well." |
107 | 343 (interactive "P") |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
344 (let ((case-fold-search t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
345 master-menu-p) |
107 | 346 (save-excursion |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
347 (push-mark (point-max) t) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
348 (goto-char (point-min)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
349 (message "Checking for a master menu in %s ... "(buffer-name)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
350 (save-excursion |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
351 (when (search-forward texinfo-master-menu-header nil t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
352 ;; Check if @detailmenu kludge is used; |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
353 ;; if so, leave point before @detailmenu. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
354 (search-backward "\n@detailmenu" |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
355 (save-excursion (forward-line -3) (point)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
356 t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
357 ;; Remove detailed master menu listing |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
358 (setq master-menu-p t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
359 (goto-char (match-beginning 0)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
360 (let ((end-of-detailed-menu-descriptions |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
361 (save-excursion ; beginning of end menu line |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
362 (goto-char (texinfo-menu-end)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
363 (beginning-of-line) (forward-char -1) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
364 (point)))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
365 (delete-region (point) end-of-detailed-menu-descriptions)))) |
19110 | 366 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
367 (when update-all-nodes-p |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
368 (message "Updating all nodes in %s ... " (buffer-name)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
369 (texinfo-update-node (point-min) (point-max))) |
19110 | 370 |
371 (message "Updating all menus in %s ... " (buffer-name)) | |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
372 (texinfo-make-menu (point-max) (point-min)) |
19110 | 373 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
374 (when master-menu-p |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
375 (message "Updating the master menu in %s... " (buffer-name)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
376 (texinfo-master-menu nil))) |
19110 | 377 |
107 | 378 (message "Done...updated all the menus. You may save the buffer."))) |
379 | |
380 (defun texinfo-find-lower-level-node (level region-end) | |
381 "Search forward from point for node at any level lower than LEVEL. | |
19110 | 382 Search is limited to the end of the marked region, REGION-END, |
107 | 383 and to the end of the menu region for the level. |
384 | |
385 Return t if the node is found, else nil. Leave point at the beginning | |
386 of the node if one is found; else do not move point." | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
387 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
388 (if (and (< (point) region-end) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
389 (re-search-forward |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
390 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
391 "\\(^@node\\).*\n" ; match node line |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
392 "\\(\\(\\(^@c\\).*\n\\)" ; match comment line, if any |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
393 "\\|" ; or |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
394 "\\(^@ifinfo[ ]*\n\\)" ; ifinfo line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
395 "\\|" ; or |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
396 "\\(^@ifnottex[ ]*\n\\)" ; ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
397 "\\)?" ; end of expression |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
398 (eval (cdr (assoc level texinfo-update-menu-lower-regexps)))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
399 ;; the next higher level node marks the end of this |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
400 ;; section, and no lower level node will be found beyond |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
401 ;; this position even if region-end is farther off |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
402 (texinfo-update-menu-region-end level) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
403 t)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
404 (goto-char (match-beginning 1))))) |
107 | 405 |
406 (defun texinfo-find-higher-level-node (level region-end) | |
407 "Search forward from point for node at any higher level than argument LEVEL. | |
408 Search is limited to the end of the marked region, REGION-END. | |
409 | |
410 Return t if the node is found, else nil. Leave point at the beginning | |
23414
c9d093e48f15
(texinfo-make-menu): Don't let
Richard M. Stallman <rms@gnu.org>
parents:
22396
diff
changeset
|
411 of the node if one is found; else do not move point. |
c9d093e48f15
(texinfo-make-menu): Don't let
Richard M. Stallman <rms@gnu.org>
parents:
22396
diff
changeset
|
412 |
c9d093e48f15
(texinfo-make-menu): Don't let
Richard M. Stallman <rms@gnu.org>
parents:
22396
diff
changeset
|
413 A `@node' line starting at point does count as a match; |
c9d093e48f15
(texinfo-make-menu): Don't let
Richard M. Stallman <rms@gnu.org>
parents:
22396
diff
changeset
|
414 if the match is found there, the value is t and point does not move." |
c9d093e48f15
(texinfo-make-menu): Don't let
Richard M. Stallman <rms@gnu.org>
parents:
22396
diff
changeset
|
415 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
416 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
417 (cond |
33258
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
418 ((< level 3) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
419 (if (re-search-forward "^@node [ \t]*top[ \t]*\\(,\\|$\\)" region-end t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
420 (progn (beginning-of-line) t))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
421 (t |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
422 (when (re-search-forward |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
423 (concat |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
424 "\\(^@node\\).*\n" ; match node line |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
425 "\\(\\(\\(^@c\\).*\n\\)" ; match comment line, if any |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
426 "\\|" ; or |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
427 "\\(^@ifinfo[ ]*\n\\)" ; ifinfo line, if any |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
428 "\\|" ; or |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
429 "\\(^@ifnottex[ ]*\n\\)" ; ifnottex line, if any |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
430 "\\)?" ; end of expression |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
431 (eval (cdr (assoc level texinfo-update-menu-higher-regexps)))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
432 region-end t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
433 (beginning-of-line) t))))) |
107 | 434 |
435 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
436 ;;; Making the list of new menu entries |
107 | 437 |
438 (defun texinfo-make-menu-list (beginning end level) | |
439 "Make a list of node names and their descriptions. | |
440 Point is left at the end of the menu region, but the menu is not inserted. | |
441 | |
19110 | 442 First argument is position from which to start making menu list; |
107 | 443 second argument is end of region in which to try to locate entries; |
444 third argument is the level of the nodes that are the entries. | |
445 | |
446 Node names and descriptions are dotted pairs of strings. Each pair is | |
447 an element of the list. If the description does not exist, the | |
448 element consists only of the node name." | |
449 (goto-char beginning) | |
450 (let (new-menu-list) | |
451 (while (texinfo-menu-locate-entry-p level end) | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
452 (push (cons |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
453 (texinfo-copy-node-name) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
454 (prog1 "" (forward-line 1))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
455 ;; Use following to insert section titles automatically. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
456 ;; (texinfo-copy-section-title)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
457 new-menu-list)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
458 (nreverse new-menu-list))) |
107 | 459 |
460 (defun texinfo-menu-locate-entry-p (level search-end) | |
461 "Find a node that will be part of menu for this section. | |
462 First argument is a string such as \"section\" specifying the general | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
463 hierarchical level of the menu; second argument is a position |
107 | 464 specifying the end of the search. |
465 | |
466 The function returns t if the node is found, else nil. It searches | |
467 forward from point, and leaves point at the beginning of the node. | |
468 | |
469 The function finds entries of the same type. Thus `subsections' and | |
470 `unnumberedsubsecs' will appear in the same menu." | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
471 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
472 (if (re-search-forward |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
473 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
474 "\\(^@node\\).*\n" ; match node line |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
475 "\\(\\(\\(^@c\\).*\n\\)" ; match comment line, if any |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
476 "\\|" ; or |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
477 "\\(^@ifinfo[ ]*\n\\)" ; ifinfo line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
478 "\\|" ; or |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
479 "\\(^@ifnottex[ ]*\n\\)" ; ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
480 "\\)?" ; end of expression |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
481 (eval |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
482 (cdr (assoc level texinfo-update-menu-same-level-regexps)))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
483 search-end |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
484 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
485 (goto-char (match-beginning 1))))) |
107 | 486 |
487 (defun texinfo-copy-node-name () | |
488 "Return the node name as a string. | |
489 | |
490 Start with point at the beginning of the node line; copy the text | |
491 after the node command up to the first comma on the line, if any, and | |
492 return the text as a string. Leaves point at the beginning of the | |
493 line. If there is no node name, returns an empty string." | |
19110 | 494 |
107 | 495 (save-excursion |
496 (buffer-substring | |
497 (progn (forward-word 1) ; skip over node command | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
498 (skip-chars-forward " \t") ; and over spaces |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
499 (point)) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
500 (if (search-forward "," (line-end-position) t) ; bound search |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
501 (1- (point)) |
107 | 502 (end-of-line) (point))))) |
503 | |
504 (defun texinfo-copy-section-title () | |
505 "Return the title of the section as a string. | |
506 The title is used as a description line in the menu when one does not | |
507 already exist. | |
508 | |
509 Move point to the beginning of the appropriate section line by going | |
510 to the start of the text matched by last regexp searched for, which | |
511 must have been done by `texinfo-menu-locate-entry-p'." | |
512 | |
513 ;; could use the same re-search as in `texinfo-menu-locate-entry-p' | |
514 ;; instead of using `match-beginning'; such a variation would be | |
515 ;; more general, but would waste information already collected | |
516 | |
19110 | 517 (goto-char (match-beginning 7)) ; match section name |
107 | 518 |
519 (buffer-substring | |
520 (progn (forward-word 1) ; skip over section type | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
521 (skip-chars-forward " \t") ; and over spaces |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
522 (point)) |
107 | 523 (progn (end-of-line) (point)))) |
524 | |
525 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
526 ;;; Handling the old menu |
107 | 527 |
528 (defun texinfo-old-menu-p (beginning first) | |
529 "Move point to the beginning of the menu for this section, if any. | |
530 Otherwise move point to the end of the first node of this section. | |
531 Return t if a menu is found, nil otherwise. | |
532 | |
533 First argument is the position of the beginning of the section in which | |
534 the menu will be located; second argument is the position of the first | |
535 node within the section. | |
536 | |
537 If no menu is found, the function inserts two newlines just before the | |
538 end of the section, and leaves point there where a menu ought to be." | |
539 (goto-char beginning) | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
540 (if (re-search-forward "^@menu" first 'goto-end) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
541 t |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
542 (insert "\n\n") (forward-line -2) nil)) |
107 | 543 |
544 (defun texinfo-incorporate-descriptions (new-menu-list) | |
545 "Copy the old menu line descriptions that exist to the new menu. | |
546 | |
547 Point must be at beginning of old menu. | |
548 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
549 If the node-name of the new menu is found in the old menu, insert the |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
550 old description into the new entry. |
107 | 551 |
552 For this function, the new menu is a list made up of lists of dotted | |
553 pairs in which the first element of the pair is the node name and the | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
554 second element the description. The new menu is changed destructively. |
18259 | 555 The old menu is the menu as it appears in the Texinfo file." |
19110 | 556 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
557 (let ((end-of-menu (texinfo-menu-end))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
558 (dolist (new-menu new-menu-list new-menu-list) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
559 (save-excursion ; keep point at beginning of menu |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
560 (when (re-search-forward |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
561 ;; Existing nodes can have the form |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
562 ;; * NODE NAME:: DESCRIPTION |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
563 ;; or |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
564 ;; * MENU ITEM: NODE NAME. DESCRIPTION. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
565 ;; |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
566 ;; Recognize both when looking for the description. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
567 (concat "\\* \\(" ; so only menu entries are found |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
568 (regexp-quote (car new-menu)) "::" |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
569 "\\|" |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
570 ".*: " (regexp-quote (car new-menu)) "[.,\t\n]" |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
571 "\\)" |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
572 ) ; so only complete entries are found |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
573 end-of-menu |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
574 t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
575 (setcdr new-menu (texinfo-menu-copy-old-description end-of-menu))))))) |
107 | 576 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
577 (defun texinfo-incorporate-menu-entry-names (new-menu-list) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
578 "Copy any old menu entry names to the new menu. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
579 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
580 Point must be at beginning of old menu. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
581 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
582 If the node-name of the new menu entry cannot be found in the old |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
583 menu, do nothing. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
584 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
585 For this function, the new menu is a list made up of lists of dotted |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
586 pairs in which the first element of the pair is the node name and the |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
587 second element is the description (or nil). |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
588 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
589 If we find an existing menu entry name, we change the first element of |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
590 the pair to be another dotted pair in which the car is the menu entry |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
591 name and the cdr is the node name. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
592 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
593 NEW-MENU-LIST is changed destructively. The old menu is the menu as it |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
594 appears in the texinfo file." |
19110 | 595 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
596 (let ((end-of-menu (texinfo-menu-end))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
597 (dolist (new-menu new-menu-list new-menu-list) |
19110 | 598 (save-excursion ; keep point at beginning of menu |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
599 (if (re-search-forward |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
600 ;; Existing nodes can have the form |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
601 ;; * NODE NAME:: DESCRIPTION |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
602 ;; or |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
603 ;; * MENU ITEM: NODE NAME. DESCRIPTION. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
604 ;; |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
605 ;; We're interested in the second case. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
606 (concat "\\* " ; so only menu entries are found |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
607 "\\(.*\\): " (regexp-quote (car new-menu)) |
21180
921bd225796e
(texinfo-incorporate-menu-entry-names)
Karl Heuer <kwzh@gnu.org>
parents:
19630
diff
changeset
|
608 "[.,\t\n]") |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
609 end-of-menu |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
610 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
611 (setcar |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
612 new-menu ; replace the node name |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
613 (cons (buffer-substring (match-beginning 1) (match-end 1)) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
614 (car new-menu)))))))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
615 |
107 | 616 (defun texinfo-menu-copy-old-description (end-of-menu) |
617 "Return description field of old menu line as string. | |
618 Point must be located just after the node name. Point left before description. | |
619 Single argument, END-OF-MENU, is position limiting search." | |
620 (skip-chars-forward "[:.,\t\n ]+") | |
621 ;; don't copy a carriage return at line beginning with asterisk! | |
53553
e7fef31e8d98
(texinfo-menu-copy-old-description): do not copy `@detailmenu' or
Robert J. Chassell <bob@rattlesnake.com>
parents:
53315
diff
changeset
|
622 ;; don't copy @detailmenu or @end menu as descriptions! |
107 | 623 ;; do copy a description that begins with an `@'! |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
624 ;; !! Known bug: does not copy descriptions starting with ^|\{?* etc. |
19110 | 625 (if (and (looking-at "\\(\\w+\\|@\\)") |
53553
e7fef31e8d98
(texinfo-menu-copy-old-description): do not copy `@detailmenu' or
Robert J. Chassell <bob@rattlesnake.com>
parents:
53315
diff
changeset
|
626 (not (looking-at "\\(^\\* \\|^@detailmenu\\|^@end menu\\)"))) |
107 | 627 (buffer-substring |
628 (point) | |
629 (save-excursion | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
630 (re-search-forward "\\(^\\* \\|^@end menu\\)" end-of-menu t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
631 (forward-line -1) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
632 (end-of-line) ; go to end of last description line |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
633 (point))) |
107 | 634 "")) |
635 | |
636 (defun texinfo-menu-end () | |
18259 | 637 "Return position of end of menu, but don't move point. |
107 | 638 Signal an error if not end of menu." |
639 (save-excursion | |
640 (if (re-search-forward "^@end menu" nil t) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
641 (point) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
642 (error "Menu does not have an end")))) |
107 | 643 |
644 (defun texinfo-delete-old-menu (beginning first) | |
645 "Delete the old menu. Point must be in or after menu. | |
646 First argument is position of the beginning of the section in which | |
647 the menu will be located; second argument is the position of the first | |
648 node within the section." | |
649 ;; No third arg to search, so error if search fails. | |
650 (re-search-backward "^@menu" beginning) | |
651 (delete-region (point) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
652 (save-excursion |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
653 (re-search-forward "^@end menu" first) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
654 (point)))) |
107 | 655 |
656 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
657 ;;; Inserting new menu |
107 | 658 |
659 ;; try 32, but perhaps 24 is better | |
660 (defvar texinfo-column-for-description 32 | |
661 "*Column at which descriptions start in a Texinfo menu.") | |
662 | |
663 (defun texinfo-insert-menu (menu-list node-name) | |
664 "Insert formatted menu at point. | |
43430
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
665 Indents the first line of descriptions, if any, to the value of |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
666 texinfo-column-for-description. Indenting leaves trailing whitespace |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
667 in a menu that lacks descriptions, so descriptions will format well. |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
668 In general, a menu should contain descriptions, because node names and |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
669 section titles are often too short to explain a node well. |
107 | 670 |
671 MENU-LIST has form: | |
672 | |
19110 | 673 \(\(\"node-name1\" . \"description\"\) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
674 \(\"node-name2\" . \"description\"\) ... \) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
675 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
676 However, the description field might be nil. |
107 | 677 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
678 Also, the node-name field might itself be a dotted pair (call it P) of |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
679 strings instead of just a string. In that case, the car of P |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
680 is the menu entry name, and the cdr of P is the node name." |
19110 | 681 |
107 | 682 (insert "@menu\n") |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
683 (dolist (menu menu-list) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
684 ;; Every menu entry starts with a star and a space. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
685 (insert "* ") |
19110 | 686 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
687 ;; Insert the node name (and menu entry name, if present). |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
688 (let ((node-part (car menu))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
689 (if (stringp node-part) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
690 ;; "Double colon" entry line; menu entry and node name are the same, |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
691 (insert (format "%s::" node-part)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
692 ;; "Single colon" entry line; menu entry and node name are different. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
693 (insert (format "%s: %s." (car node-part) (cdr node-part))))) |
19110 | 694 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
695 ;; Insert the description, if present. |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
696 (when (cdr menu) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
697 ;; Move to right place. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
698 (indent-to texinfo-column-for-description 2) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
699 ;; Insert description. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
700 (insert (format "%s" (cdr menu)))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
701 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
702 (insert "\n")) ; end this menu entry |
107 | 703 (insert "@end menu") |
43660
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
704 (let ((level (texinfo-hierarchic-level))) |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
705 (message |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
706 "Updated level \"%s\" menu following node: %s ... " level node-name))) |
107 | 707 |
708 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
709 ;;; Starting menu descriptions by inserting titles |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
710 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
711 (defun texinfo-start-menu-description () |
19110 | 712 "In this menu entry, insert the node's section title as a description. |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
713 Position point at beginning of description ready for editing. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
714 Do not insert a title if the line contains an existing description. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
715 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
716 You will need to edit the inserted text since a useful description |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
717 complements the node name rather than repeats it as a title does." |
19110 | 718 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
719 (interactive) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
720 (let (beginning end node-name title) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
721 (save-excursion |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
722 (beginning-of-line) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
723 (if (search-forward "* " (save-excursion (end-of-line) (point)) t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
724 (progn (skip-chars-forward " \t") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
725 (setq beginning (point))) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
726 (error "This is not a line in a menu")) |
19110 | 727 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
728 (cond |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
729 ;; "Double colon" entry line; menu entry and node name are the same, |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
730 ((search-forward "::" (save-excursion (end-of-line) (point)) t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
731 (if (looking-at "[ \t]*[^ \t\n]+") |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
732 (error "Descriptive text already exists")) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
733 (skip-chars-backward ": \t") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
734 (setq node-name (buffer-substring beginning (point)))) |
19110 | 735 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
736 ;; "Single colon" entry line; menu entry and node name are different. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
737 ((search-forward ":" (save-excursion (end-of-line) (point)) t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
738 (skip-chars-forward " \t") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
739 (setq beginning (point)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
740 ;; Menu entry line ends in a period, comma, or tab. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
741 (if (re-search-forward "[.,\t]" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
742 (save-excursion (forward-line 1) (point)) t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
743 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
744 (if (looking-at "[ \t]*[^ \t\n]+") |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
745 (error "Descriptive text already exists")) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
746 (skip-chars-backward "., \t") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
747 (setq node-name (buffer-substring beginning (point)))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
748 ;; Menu entry line ends in a return. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
749 (re-search-forward ".*\n" |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
750 (save-excursion (forward-line 1) (point)) t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
751 (skip-chars-backward " \t\n") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
752 (setq node-name (buffer-substring beginning (point))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
753 (if (= 0 (length node-name)) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
754 (error "No node name on this line") |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
755 (insert ".")))) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
756 (t (error "No node name on this line"))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
757 ;; Search for node that matches node name, and copy the section title. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
758 (if (re-search-forward |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
759 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
760 "^@node[ \t]+" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
761 (regexp-quote node-name) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
762 ".*\n" ; match node line |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
763 "\\(" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
764 "\\(\\(^@c \\|^@comment\\).*\n\\)" ; match comment line, if any |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
765 "\\|" ; or |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
766 "\\(^@ifinfo[ ]*\n\\)" ; ifinfo line, if any |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
767 "\\|" ; or |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
768 "\\(^@ifnottex[ ]*\n\\)" ; ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
769 "\\)?" ; end of expression |
43612
15a51e54d11d
(texinfo-start-menu-description): Remove extra paren in regexp.
Andreas Schwab <schwab@suse.de>
parents:
43430
diff
changeset
|
770 ) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
771 nil t) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
772 (setq title |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
773 (buffer-substring |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
774 ;; skip over section type |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
775 (progn (forward-word 1) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
776 ;; and over spaces |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
777 (skip-chars-forward " \t") |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
778 (point)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
779 (progn (end-of-line) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
780 (skip-chars-backward " \t") |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
781 (point)))) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
782 (error "Cannot find node to match node name in menu entry"))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
783 ;; Return point to the menu and insert the title. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
784 (end-of-line) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
785 (delete-region |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
786 (point) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
787 (save-excursion (skip-chars-backward " \t") (point))) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
788 (indent-to texinfo-column-for-description 2) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
789 (save-excursion (insert title)))) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
790 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
791 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
792 ;;; Handling description indentation |
107 | 793 |
18259 | 794 ;; Since the make-menu functions indent descriptions, these functions |
795 ;; are useful primarily for indenting a single menu specially. | |
107 | 796 |
797 (defun texinfo-indent-menu-description (column &optional region-p) | |
19110 | 798 "Indent every description in menu following point to COLUMN. |
107 | 799 Non-nil argument (prefix, if interactive) means indent every |
800 description in every menu in the region. Does not indent second and | |
801 subsequent lines of a multi-line description." | |
19110 | 802 |
107 | 803 (interactive |
804 "nIndent menu descriptions to (column number): \nP") | |
805 (save-excursion | |
806 (save-restriction | |
807 (widen) | |
808 (if (not region-p) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
809 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
810 (re-search-forward "^@menu") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
811 (texinfo-menu-indent-description column) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
812 (message |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
813 "Indented descriptions in menu. You may save the buffer.")) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
814 ;;else |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
815 (message "Indenting every menu description in region... ") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
816 (goto-char (region-beginning)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
817 (while (and (< (point) (region-end)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
818 (texinfo-locate-menu-p)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
819 (forward-line 1) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
820 (texinfo-menu-indent-description column)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
821 (message "Indenting done. You may save the buffer."))))) |
107 | 822 |
823 (defun texinfo-menu-indent-description (to-column-number) | |
824 "Indent the Texinfo file menu description to TO-COLUMN-NUMBER. | |
825 Start with point just after the word `menu' in the `@menu' line and | |
826 leave point on the line before the `@end menu' line. Does not indent | |
827 second and subsequent lines of a multi-line description." | |
828 (let* ((beginning-of-next-line (point))) | |
829 (while (< beginning-of-next-line | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
830 (save-excursion ; beginning of end menu line |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
831 (goto-char (texinfo-menu-end)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
832 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
833 (point))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
834 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
835 (when (re-search-forward "\\* \\(.*::\\|.*: [^.,\t\n]+[.,\t]\\)" |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
836 (texinfo-menu-end) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
837 t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
838 (let ((beginning-white-space (point))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
839 (skip-chars-forward " \t") ; skip over spaces |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
840 (if (looking-at "\\(@\\|\\w\\)+") ; if there is text |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
841 (progn |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
842 ;; remove pre-existing indentation |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
843 (delete-region beginning-white-space (point)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
844 (indent-to-column to-column-number))))) |
107 | 845 ;; position point at beginning of next line |
19110 | 846 (forward-line 1) |
107 | 847 (setq beginning-of-next-line (point))))) |
848 | |
849 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
850 ;;; Making the master menu |
107 | 851 |
852 (defun texinfo-master-menu (update-all-nodes-menus-p) | |
853 "Make a master menu for a whole Texinfo file. | |
854 Non-nil argument (prefix, if interactive) means first update all | |
855 existing nodes and menus. Remove pre-existing master menu, if there is one. | |
856 | |
857 This function creates a master menu that follows the top node. The | |
858 master menu includes every entry from all the other menus. It | |
859 replaces any existing ordinary menu that follows the top node. | |
860 | |
861 If called with a non-nil argument, this function first updates all the | |
862 menus in the buffer (incorporating descriptions from pre-existing | |
863 menus) before it constructs the master menu. | |
864 | |
865 The function removes the detailed part of an already existing master | |
14009
dbc49672f847
(texinfo-master-menu): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
13354
diff
changeset
|
866 menu. This action depends on the pre-existing master menu using the |
107 | 867 standard `texinfo-master-menu-header'. |
868 | |
869 The master menu has the following format, which is adapted from the | |
870 recommendation in the Texinfo Manual: | |
871 | |
872 * The first part contains the major nodes in the Texinfo file: the | |
873 nodes for the chapters, chapter-like sections, and the major | |
874 appendices. This includes the indices, so long as they are in | |
875 chapter-like sections, such as unnumbered sections. | |
876 | |
877 * The second and subsequent parts contain a listing of the other, | |
878 lower level menus, in order. This way, an inquirer can go | |
879 directly to a particular node if he or she is searching for | |
880 specific information. | |
881 | |
882 Each of the menus in the detailed node listing is introduced by the | |
43430
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
883 title of the section containing the menu. |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
884 |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
885 Indents the first line of descriptions, and leaves trailing whitespace |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
886 in a menu that lacks descriptions, so descriptions will format well. |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
887 In general, a menu should contain descriptions, because node names and |
5288b3225c40
(texinfo-insert-menu): Explain in doc string that
Robert J. Chassell <bob@rattlesnake.com>
parents:
40390
diff
changeset
|
888 section titles are often too short to explain a node well." |
19110 | 889 |
107 | 890 (interactive "P") |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
891 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
892 (widen) |
107 | 893 (goto-char (point-min)) |
19110 | 894 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
895 ;; Move point to location after `top'. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
896 (if (not (re-search-forward "^@node [ \t]*top[ \t]*\\(,\\|$\\)" nil t)) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
897 (error "This buffer needs a Top node")) |
19110 | 898 |
899 (let ((first-chapter | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
900 (save-excursion |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
901 (or (re-search-forward "^@node" nil t) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
902 (error "Too few nodes for a master menu")) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
903 (point)))) |
18849
b4b2ad407ba0
(texinfo-all-menus-update)
Richard M. Stallman <rms@gnu.org>
parents:
18259
diff
changeset
|
904 (if (search-forward texinfo-master-menu-header first-chapter t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
905 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
906 ;; Check if @detailmenu kludge is used; |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
907 ;; if so, leave point before @detailmenu. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
908 (search-backward "\n@detailmenu" |
18259 | 909 (save-excursion (forward-line -3) (point)) |
910 t) | |
911 ;; Remove detailed master menu listing | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
912 (goto-char (match-beginning 0)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
913 (let ((end-of-detailed-menu-descriptions |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
914 (save-excursion ; beginning of end menu line |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
915 (goto-char (texinfo-menu-end)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
916 (beginning-of-line) (forward-char -1) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
917 (point)))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
918 (delete-region (point) end-of-detailed-menu-descriptions))))) |
19110 | 919 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
920 (if update-all-nodes-menus-p |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
921 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
922 (message "Making a master menu in %s ...first updating all nodes... " |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
923 (buffer-name)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
924 (texinfo-update-node (point-min) (point-max)) |
19110 | 925 |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
926 (message "Updating all menus in %s ... " (buffer-name)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
927 (texinfo-make-menu (point-min) (point-max)))) |
19110 | 928 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
929 (message "Now making the master menu in %s... " (buffer-name)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
930 (goto-char (point-min)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
931 (texinfo-insert-master-menu-list |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
932 (texinfo-master-menu-list)) |
19110 | 933 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
934 ;; Remove extra newlines that texinfo-insert-master-menu-list |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
935 ;; may have inserted. |
19110 | 936 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
937 (save-excursion |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
938 (goto-char (point-min)) |
19110 | 939 |
18849
b4b2ad407ba0
(texinfo-all-menus-update)
Richard M. Stallman <rms@gnu.org>
parents:
18259
diff
changeset
|
940 (if (search-forward texinfo-master-menu-header nil t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
941 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
942 (goto-char (match-beginning 0)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
943 ;; Check if @detailmenu kludge is used; |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
944 ;; if so, leave point before @detailmenu. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
945 (search-backward "\n@detailmenu" |
18259 | 946 (save-excursion (forward-line -3) (point)) |
947 t) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
948 (insert "\n") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
949 (delete-blank-lines) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
950 (goto-char (point-min)))) |
107 | 951 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
952 (re-search-forward "^@menu") |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
953 (forward-line -1) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
954 (delete-blank-lines) |
19110 | 955 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
956 (re-search-forward "^@end menu") |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
957 (forward-line 1) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
958 (delete-blank-lines)) |
19110 | 959 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
960 (message |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
961 "Done...completed making master menu. You may save the buffer."))) |
107 | 962 |
963 (defun texinfo-master-menu-list () | |
964 "Return a list of menu entries and header lines for the master menu. | |
965 | |
966 Start with the menu for chapters and indices and then find each | |
967 following menu and the title of the node preceding that menu. | |
968 | |
969 The master menu list has this form: | |
970 | |
971 \(\(\(... \"entry-1-2\" \"entry-1\"\) \"title-1\"\) | |
972 \(\(... \"entry-2-2\" \"entry-2-1\"\) \"title-2\"\) | |
973 ...\) | |
974 | |
975 However, there does not need to be a title field." | |
976 | |
977 (let (master-menu-list) | |
978 (while (texinfo-locate-menu-p) | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
979 (push (list (texinfo-copy-menu) (texinfo-copy-menu-title)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
980 master-menu-list)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
981 (nreverse master-menu-list))) |
107 | 982 |
983 (defun texinfo-insert-master-menu-list (master-menu-list) | |
984 "Format and insert the master menu in the current buffer." | |
985 (goto-char (point-min)) | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
986 ;; Insert a master menu only after `Top' node and before next node |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
987 ;; \(or include file if there is no next node\). |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
988 (unless (re-search-forward "^@node [ \t]*top[ \t]*\\(,\\|$\\)" nil t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
989 (error "This buffer needs a Top node")) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
990 (let ((first-chapter |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
991 (save-excursion (re-search-forward "^@node\\|^@include") (point)))) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
992 (unless (re-search-forward "^@menu" first-chapter t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
993 (error "Buffer lacks ordinary `Top' menu in which to insert master"))) |
107 | 994 (beginning-of-line) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
995 (delete-region ; buffer must have ordinary top menu |
19110 | 996 (point) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
997 (save-excursion (re-search-forward "^@end menu") (point))) |
19110 | 998 |
999 (save-excursion | |
1000 ;; `master-menu-inserted-p' is a kludge to tell | |
18259 | 1001 ;; whether to insert @end detailmenu (see bleow) |
1002 (let (master-menu-inserted-p) | |
1003 ;; Handle top of menu | |
1004 (insert "\n@menu\n") | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1005 ;; Insert chapter menu entries. Tell user what is going on. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1006 (message "Inserting chapter menu entry: %s ... " |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1007 (car (car master-menu-list))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1008 (dolist (entry (reverse (car (car master-menu-list)))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1009 (insert "* " entry "\n")) |
19110 | 1010 |
18259 | 1011 (setq master-menu-list (cdr master-menu-list)) |
19110 | 1012 |
18259 | 1013 ;; Only insert detailed master menu if there is one.... |
1014 (if (car (car master-menu-list)) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1015 (progn (setq master-menu-inserted-p t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1016 (insert (concat "\n@detailmenu\n" |
22396
6c7d7f953f08
(texinfo-insert-master-menu-list): Insert \n after @detailmenu.
Richard M. Stallman <rms@gnu.org>
parents:
21180
diff
changeset
|
1017 texinfo-master-menu-header)))) |
18259 | 1018 |
1019 ;; @detailmenu added 5 Sept 1996 to `texinfo-master-menu-header' | |
1020 ;; at Karl Berry's request to avert a bug in `makeinfo'; | |
1021 ;; all agree this is a bad kludge and should eventually be removed. | |
1022 ;; @detailmenu ... @end detailmenu is a noop in `texinfmt.el'. | |
1023 ;; See @end detailmenu below; | |
1024 ;; also see `texinfo-all-menus-update' above, `texinfo-master-menu', | |
1025 ;; `texinfo-multiple-files-update'. | |
17518
1eecbe9dd89c
(texinfo-master-menu-header): Delete newline at start.
Richard M. Stallman <rms@gnu.org>
parents:
17311
diff
changeset
|
1026 |
18259 | 1027 ;; Now, insert all the other menus |
19110 | 1028 |
18259 | 1029 ;; The menu master-menu-list has a form like this: |
1030 ;; ((("beta" "alpha") "title-A") | |
1031 ;; (("delta" "gamma") "title-B")) | |
19110 | 1032 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1033 (dolist (menu master-menu-list) |
19110 | 1034 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1035 (message "Inserting menu for %s .... " (cadr menu)) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1036 ;; insert title of menu section |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1037 (insert "\n" (cadr menu) "\n\n") |
19110 | 1038 |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1039 ;; insert each menu entry |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1040 (dolist (entry (reverse (car menu))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1041 (insert "* " entry "\n"))) |
19110 | 1042 |
18259 | 1043 ;; Finish menu |
17518
1eecbe9dd89c
(texinfo-master-menu-header): Delete newline at start.
Richard M. Stallman <rms@gnu.org>
parents:
17311
diff
changeset
|
1044 |
18259 | 1045 ;; @detailmenu (see note above) |
1046 ;; Only insert @end detailmenu if a master menu was inserted. | |
1047 (if master-menu-inserted-p | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1048 (insert "\n@end detailmenu")) |
18259 | 1049 (insert "\n@end menu\n\n")))) |
107 | 1050 |
1051 (defun texinfo-locate-menu-p () | |
1052 "Find the next menu in the texinfo file. | |
1053 If found, leave point after word `menu' on the `@menu' line, and return t. | |
1054 If a menu is not found, do not move point and return nil." | |
1055 (re-search-forward "\\(^@menu\\)" nil t)) | |
1056 | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1057 (defun texinfo-copy-menu-title () |
107 | 1058 "Return the title of the section preceding the menu as a string. |
1059 If such a title cannot be found, return an empty string. Do not move | |
1060 point." | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1061 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1062 (save-excursion |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1063 (if (re-search-backward |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1064 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1065 "\\(^@top" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1066 "\\|" ; or |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1067 texinfo-section-types-regexp ; all other section types |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1068 "\\)") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1069 nil |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1070 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1071 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1072 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1073 (forward-word 1) ; skip over section type |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1074 (skip-chars-forward " \t") ; and over spaces |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1075 (buffer-substring |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1076 (point) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1077 (progn (end-of-line) (point)))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1078 "")))) |
107 | 1079 |
1080 (defun texinfo-copy-menu () | |
1081 "Return the entries of an existing menu as a list. | |
1082 Start with point just after the word `menu' in the `@menu' line | |
1083 and leave point on the line before the `@end menu' line." | |
1084 (let* (this-menu-list | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1085 (end-of-menu (texinfo-menu-end)) ; position of end of `@end menu' |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1086 (last-entry (save-excursion ; position of beginning of |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1087 ; last `* ' entry |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1088 (goto-char end-of-menu) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1089 ;; handle multi-line description |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1090 (if (not (re-search-backward "^\\* " nil t)) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
1091 (error "No entries in menu")) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1092 (point)))) |
107 | 1093 (while (< (point) last-entry) |
15363
d401fcd58f8c
(texinfo-copy-menu): Use double backslash to quote regexp.
Karl Heuer <kwzh@gnu.org>
parents:
15362
diff
changeset
|
1094 (if (re-search-forward "^\\* " end-of-menu t) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1095 (push (buffer-substring |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1096 (point) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1097 ;; copy multi-line descriptions |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1098 (save-excursion |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1099 (re-search-forward "\\(^\\* \\|^@e\\)" nil t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1100 (- (point) 3))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1101 this-menu-list))) |
107 | 1102 this-menu-list)) |
1103 | |
1104 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1105 ;;; Determining the hierarchical level in the texinfo file |
107 | 1106 |
19110 | 1107 (defun texinfo-specific-section-type () |
107 | 1108 "Return the specific type of next section, as a string. |
1109 For example, \"unnumberedsubsec\". Return \"top\" for top node. | |
1110 | |
1111 Searches forward for a section. Hence, point must be before the | |
1112 section whose type will be found. Does not move point. Signal an | |
1113 error if the node is not the top node and a section is not found." | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1114 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1115 (save-excursion |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1116 (cond |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1117 ((re-search-forward "^@node [ \t]*top[ \t]*\\(,\\|$\\)" |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1118 ;; Following search limit by cph but causes a bug |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1119 ;;(line-end-position) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1120 nil |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1121 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1122 "top") |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1123 ((re-search-forward texinfo-section-types-regexp nil t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1124 (buffer-substring-no-properties |
12698
e04324240c6b
(texinfo-specific-section-type): Use buffer-substring-no-properties.
Richard M. Stallman <rms@gnu.org>
parents:
11929
diff
changeset
|
1125 (progn (beginning-of-line) ; copy its name |
e04324240c6b
(texinfo-specific-section-type): Use buffer-substring-no-properties.
Richard M. Stallman <rms@gnu.org>
parents:
11929
diff
changeset
|
1126 (1+ (point))) |
e04324240c6b
(texinfo-specific-section-type): Use buffer-substring-no-properties.
Richard M. Stallman <rms@gnu.org>
parents:
11929
diff
changeset
|
1127 (progn (forward-word 1) |
e04324240c6b
(texinfo-specific-section-type): Use buffer-substring-no-properties.
Richard M. Stallman <rms@gnu.org>
parents:
11929
diff
changeset
|
1128 (point)))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1129 (t |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1130 (error |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
1131 "texinfo-specific-section-type: Chapter or section not found")))))) |
107 | 1132 |
1133 (defun texinfo-hierarchic-level () | |
1134 "Return the general hierarchal level of the next node in a texinfo file. | |
1135 Thus, a subheading or appendixsubsec is of type subsection." | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1136 (let ((case-fold-search t)) |
33258
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1137 (cadr (assoc |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1138 (texinfo-specific-section-type) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1139 texinfo-section-list)))) |
107 | 1140 |
1141 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1142 ;;; Locating the major positions |
107 | 1143 |
19110 | 1144 (defun texinfo-update-menu-region-beginning (level) |
107 | 1145 "Locate beginning of higher level section this section is within. |
1146 Return position of the beginning of the node line; do not move point. | |
1147 Thus, if this level is subsection, searches backwards for section node. | |
1148 Only argument is a string of the general type of section." | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1149 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1150 ;; !! Known bug: if section immediately follows top node, this |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1151 ;; returns the beginning of the buffer as the beginning of the |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1152 ;; higher level section. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1153 (cond |
33258
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1154 ((< level 3) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1155 (save-excursion |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1156 (goto-char (point-min)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1157 (re-search-forward "^@node [ \t]*top[ \t]*\\(,\\|$\\)" nil t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1158 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1159 (point))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1160 (t |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1161 (save-excursion |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1162 (re-search-backward |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1163 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1164 "\\(^@node\\).*\n" ; match node line |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1165 "\\(\\(\\(^@c\\).*\n\\)" ; match comment line, if any |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1166 "\\|" ; or |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1167 "\\(^@ifinfo[ ]*\n\\)" ; ifinfo line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1168 "\\|" ; or |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1169 "\\(^@ifnottex[ ]*\n\\)" ; ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1170 "\\)?" ; end of expression |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1171 (eval |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1172 (cdr (assoc level texinfo-update-menu-higher-regexps)))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1173 nil |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1174 'goto-beginning) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1175 (point)))))) |
107 | 1176 |
19110 | 1177 (defun texinfo-update-menu-region-end (level) |
107 | 1178 "Locate end of higher level section this section is within. |
1179 Return position; do not move point. Thus, if this level is a | |
1180 subsection, find the node for the section this subsection is within. | |
1181 If level is top or chapter, returns end of file. Only argument is a | |
1182 string of the general type of section." | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1183 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1184 (save-excursion |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1185 (if (re-search-forward |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1186 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1187 "\\(^@node\\).*\n" ; match node line |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1188 "\\(\\(\\(^@c\\).*\n\\)" ; match comment line, if any |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1189 "\\|" ; or |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1190 "\\(^@ifinfo[ ]*\n\\)" ; ifinfo line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1191 "\\|" ; or |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1192 "\\(^@ifnottex[ ]*\n\\)" ; ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1193 "\\)?" ; end of expression |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1194 (eval |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1195 ;; Never finds end of level above chapter so goes to end. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1196 (cdr (assoc level texinfo-update-menu-higher-regexps)))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1197 nil |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1198 'goto-end) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1199 (match-beginning 1) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1200 (point-max))))) |
107 | 1201 |
1202 (defun texinfo-menu-first-node (beginning end) | |
19110 | 1203 "Locate first node of the section the menu will be placed in. |
107 | 1204 Return position; do not move point. |
19110 | 1205 The menu will be located just before this position. |
107 | 1206 |
1207 First argument is the position of the beginning of the section in | |
1208 which the menu will be located; second argument is the position of the | |
1209 end of that region; it limits the search." | |
19110 | 1210 |
107 | 1211 (save-excursion |
1212 (goto-char beginning) | |
1213 (forward-line 1) | |
1214 (re-search-forward "^@node" end t) | |
1215 (beginning-of-line) | |
1216 (point))) | |
1217 | |
1218 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1219 ;;; Updating a node |
107 | 1220 |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1221 (defun texinfo-update-node (&optional beginning end) |
107 | 1222 "Without any prefix argument, update the node in which point is located. |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1223 Interactively, a prefix argument means to operate on the region. |
107 | 1224 |
1225 The functions for creating or updating nodes and menus, and their | |
1226 keybindings, are: | |
1227 | |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1228 texinfo-update-node (&optional beginning end) \\[texinfo-update-node] |
107 | 1229 texinfo-every-node-update () \\[texinfo-every-node-update] |
1230 texinfo-sequential-node-update (&optional region-p) | |
1231 | |
1232 texinfo-make-menu (&optional region-p) \\[texinfo-make-menu] | |
1233 texinfo-all-menus-update () \\[texinfo-all-menus-update] | |
1234 texinfo-master-menu () | |
1235 | |
1236 texinfo-indent-menu-description (column &optional region-p) | |
1237 | |
1238 The `texinfo-column-for-description' variable specifies the column to | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1239 which menu descriptions are indented. Its default value is 32." |
19110 | 1240 |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1241 (interactive |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1242 (if prefix-arg |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1243 (list (point) (mark)))) |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1244 (if (null beginning) |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1245 ;; Update a single node. |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1246 (let ((auto-fill-function nil)) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1247 (if (not (re-search-backward "^@node" (point-min) t)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1248 (error "Node line not found before this position")) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1249 (texinfo-update-the-node) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1250 (message "Done...updated the node. You may save the buffer.")) |
107 | 1251 ;; else |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1252 (let ((auto-fill-function nil)) |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1253 (save-excursion |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1254 (save-restriction |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1255 (narrow-to-region beginning end) |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1256 (goto-char (point-min)) |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1257 (while (re-search-forward "^@node" (point-max) t) |
19110 | 1258 (beginning-of-line) |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1259 (texinfo-update-the-node)) |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1260 (goto-char (point-max)) |
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1261 (message "Done...nodes updated in region. You may save the buffer.")))))) |
107 | 1262 |
1263 (defun texinfo-every-node-update () | |
1264 "Update every node in a Texinfo file." | |
1265 (interactive) | |
1266 (save-excursion | |
17311
f76a73cf699e
(texinfo-make-menu): Accept args BEGINNING and END.
Richard M. Stallman <rms@gnu.org>
parents:
16858
diff
changeset
|
1267 (texinfo-update-node (point-min) (point-max)) |
38877
408ff1ad3d3a
(texinfo-every-node-update): Remove
Gerd Moellmann <gerd@gnu.org>
parents:
38851
diff
changeset
|
1268 (message "Done...updated every node. You may save the buffer."))) |
107 | 1269 |
1270 (defun texinfo-update-the-node () | |
19110 | 1271 "Update one node. Point must be at the beginning of node line. |
107 | 1272 Leave point at the end of the node line." |
1273 (texinfo-check-for-node-name) | |
1274 (texinfo-delete-existing-pointers) | |
1275 (message "Updating node: %s ... " (texinfo-copy-node-name)) | |
1276 (save-restriction | |
1277 (widen) | |
1278 (let* | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1279 ((case-fold-search t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1280 (level (texinfo-hierarchic-level)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1281 (beginning (texinfo-update-menu-region-beginning level)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1282 (end (texinfo-update-menu-region-end level))) |
33258
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1283 (if (eq level 1) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1284 (texinfo-top-pointer-case) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1285 ;; else |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1286 (texinfo-insert-pointer beginning end level 'next) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1287 (texinfo-insert-pointer beginning end level 'previous) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1288 (texinfo-insert-pointer beginning end level 'up) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1289 (texinfo-clean-up-node-line))))) |
107 | 1290 |
1291 (defun texinfo-top-pointer-case () | |
1292 "Insert pointers in the Top node. This is a special case. | |
1293 | |
1294 The `Next' pointer is a pointer to a chapter or section at a lower | |
1295 hierarchical level in the file. The `Previous' and `Up' pointers are | |
1296 to `(dir)'. Point must be at the beginning of the node line, and is | |
1297 left at the end of the node line." | |
1298 | |
1299 (texinfo-clean-up-node-line) | |
19110 | 1300 (insert ", " |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1301 (save-excursion |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1302 ;; There may be an @chapter or other such command between |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1303 ;; the top node line and the next node line, as a title |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1304 ;; for an `ifinfo' section. This @chapter command must |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1305 ;; must be skipped. So the procedure is to search for |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1306 ;; the next `@node' line, and then copy its name. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1307 (if (re-search-forward "^@node" nil t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1308 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1309 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1310 (texinfo-copy-node-name)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1311 " ")) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1312 ", (dir), (dir)")) |
107 | 1313 |
1314 (defun texinfo-check-for-node-name () | |
1315 "Determine whether the node has a node name. Prompt for one if not. | |
1316 Point must be at beginning of node line. Does not move point." | |
1317 (save-excursion | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1318 (let ((initial (texinfo-copy-next-section-title))) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1319 ;; This is not clean. Use `interactive' to read the arg. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1320 (forward-word 1) ; skip over node command |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1321 (skip-chars-forward " \t") ; and over spaces |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1322 (if (not (looking-at "[^,\t\n ]+")) ; regexp based on what Info looks for |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1323 ; alternatively, use "[a-zA-Z]+" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1324 (let ((node-name |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1325 (read-from-minibuffer |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1326 "Node name (use no @, commas, colons, or apostrophes): " |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1327 initial))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1328 (insert " " node-name)))))) |
107 | 1329 |
1330 (defun texinfo-delete-existing-pointers () | |
19110 | 1331 "Delete `Next', `Previous', and `Up' pointers. |
107 | 1332 Starts from the current position of the cursor, and searches forward |
1333 on the line for a comma and if one is found, deletes the rest of the | |
1334 line, including the comma. Leaves point at beginning of line." | |
11929
46487d19cdb3
(texinfo-sequentially-find-pointer): Don't modify
Karl Heuer <kwzh@gnu.org>
parents:
7432
diff
changeset
|
1335 (let ((eol-point (save-excursion (end-of-line) (point)))) |
46487d19cdb3
(texinfo-sequentially-find-pointer): Don't modify
Karl Heuer <kwzh@gnu.org>
parents:
7432
diff
changeset
|
1336 (if (search-forward "," eol-point t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1337 (delete-region (1- (point)) eol-point))) |
107 | 1338 (beginning-of-line)) |
1339 | |
1340 (defun texinfo-find-pointer (beginning end level direction) | |
1341 "Move point to section associated with next, previous, or up pointer. | |
18259 | 1342 Return type of pointer (either `normal' or `no-pointer'). |
107 | 1343 |
1344 The first and second arguments bound the search for a pointer to the | |
1345 beginning and end, respectively, of the enclosing higher level | |
1346 section. The third argument is a string specifying the general kind | |
15362
66fb24beae54
(texinfo-find-pointer): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
1347 of section such as \"chapter\" or \"section\". When looking for the |
107 | 1348 `Next' pointer, the section found will be at the same hierarchical |
1349 level in the Texinfo file; when looking for the `Previous' pointer, | |
1350 the section found will be at the same or higher hierarchical level in | |
1351 the Texinfo file; when looking for the `Up' pointer, the section found | |
1352 will be at some level higher in the Texinfo file. The fourth argument | |
1353 \(one of 'next, 'previous, or 'up\) specifies whether to find the | |
1354 `Next', `Previous', or `Up' pointer." | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1355 (let ((case-fold-search t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1356 (cond ((eq direction 'next) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1357 (forward-line 3) ; skip over current node |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1358 ;; Search for section commands accompanied by node lines; |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1359 ;; ignore section commands in the middle of nodes. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1360 (if (re-search-forward |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1361 ;; A `Top' node is never a next pointer, so won't find it. |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1362 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1363 ;; Match node line. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1364 "\\(^@node\\).*\n" |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1365 ;; Match comment, ifinfo, ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1366 (concat |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1367 "\\(\\(" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1368 "\\(^@c\\).*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1369 "\\|" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1370 "\\(^@ifinfo[ ]*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1371 "\\|" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1372 "\\(^@ifnottex[ ]*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1373 "\\)?") |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1374 (eval |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1375 (cdr (assoc level texinfo-update-menu-same-level-regexps)))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1376 end |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1377 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1378 'normal |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1379 'no-pointer)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1380 ((eq direction 'previous) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1381 (if (re-search-backward |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1382 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1383 "\\(" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1384 ;; Match node line. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1385 "\\(^@node\\).*\n" |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1386 ;; Match comment, ifinfo, ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1387 (concat |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1388 "\\(\\(" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1389 "\\(^@c\\).*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1390 "\\|" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1391 "\\(^@ifinfo[ ]*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1392 "\\|" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1393 "\\(^@ifnottex[ ]*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1394 "\\)?") |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1395 (eval |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1396 (cdr (assoc level texinfo-update-menu-same-level-regexps))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1397 "\\|" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1398 ;; Match node line. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1399 "\\(^@node\\).*\n" |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1400 ;; Match comment, ifinfo, ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1401 (concat |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1402 "\\(\\(" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1403 "\\(^@c\\).*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1404 "\\|" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1405 "\\(^@ifinfo[ ]*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1406 "\\|" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1407 "\\(^@ifnottex[ ]*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1408 "\\)?") |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1409 (eval |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1410 (cdr (assoc level texinfo-update-menu-higher-regexps))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1411 "\\|" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1412 ;; Handle `Top' node specially. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1413 "^@node [ \t]*top[ \t]*\\(,\\|$\\)" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1414 "\\)") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1415 beginning |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1416 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1417 'normal |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1418 'no-pointer)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1419 ((eq direction 'up) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1420 (if (re-search-backward |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1421 (concat |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1422 "\\(" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1423 ;; Match node line. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1424 "\\(^@node\\).*\n" |
38851
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1425 ;; Match comment, ifinfo, ifnottex line, if any |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1426 (concat |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1427 "\\(\\(" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1428 "\\(^@c\\).*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1429 "\\|" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1430 "\\(^@ifinfo[ ]*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1431 "\\|" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1432 "\\(^@ifnottex[ ]*\n\\)" |
0d7b71525b45
Update copyright notice, fix minor
Gerd Moellmann <gerd@gnu.org>
parents:
38436
diff
changeset
|
1433 "\\)?") |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1434 (eval (cdr (assoc level texinfo-update-menu-higher-regexps))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1435 "\\|" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1436 ;; Handle `Top' node specially. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1437 "^@node [ \t]*top[ \t]*\\(,\\|$\\)" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1438 "\\)") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1439 (save-excursion |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1440 (goto-char beginning) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1441 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1442 (point)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1443 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1444 'normal |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1445 'no-pointer)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1446 (t |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1447 (error "texinfo-find-pointer: lack proper arguments"))))) |
107 | 1448 |
1449 (defun texinfo-pointer-name (kind) | |
1450 "Return the node name preceding the section command. | |
18259 | 1451 The argument is the kind of section, either `normal' or `no-pointer'." |
107 | 1452 (let (name) |
1453 (cond ((eq kind 'normal) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1454 (end-of-line) ; this handles prev node top case |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1455 (re-search-backward ; when point is already |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1456 "^@node" ; at the beginning of @node line |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1457 (save-excursion (forward-line -3)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1458 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1459 (setq name (texinfo-copy-node-name))) |
107 | 1460 ((eq kind 'no-pointer) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1461 ;; Don't need to put a blank in the pointer slot, |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1462 ;; since insert "' " always has a space |
107 | 1463 (setq name " "))) ; put a blank in the pointer slot |
1464 name)) | |
1465 | |
1466 (defun texinfo-insert-pointer (beginning end level direction) | |
1467 "Insert the `Next', `Previous' or `Up' node name at point. | |
19110 | 1468 Move point forward. |
107 | 1469 |
1470 The first and second arguments bound the search for a pointer to the | |
1471 beginning and end, respectively, of the enclosing higher level | |
1472 section. The third argument is the hierarchical level of the Texinfo | |
1473 file, a string such as \"section\". The fourth argument is direction | |
18259 | 1474 towards which the pointer is directed, one of `next', `previous', or `up'." |
107 | 1475 |
1476 (end-of-line) | |
1477 (insert | |
1478 ", " | |
1479 (save-excursion | |
1480 (texinfo-pointer-name | |
1481 (texinfo-find-pointer beginning end level direction))))) | |
1482 | |
1483 (defun texinfo-clean-up-node-line () | |
1484 "Remove extra commas, if any, at end of node line." | |
1485 (end-of-line) | |
1486 (skip-chars-backward ", ") | |
1487 (delete-region (point) (save-excursion (end-of-line) (point)))) | |
1488 | |
1489 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1490 ;;; Updating nodes sequentially |
18259 | 1491 ;; These sequential update functions insert `Next' or `Previous' |
1492 ;; pointers that point to the following or preceding nodes even if they | |
1493 ;; are at higher or lower hierarchical levels. This means that if a | |
1494 ;; section contains one or more subsections, the section's `Next' | |
1495 ;; pointer will point to the subsection and not the following section. | |
1496 ;; (The subsection to which `Next' points will most likely be the first | |
1497 ;; item on the section's menu.) | |
107 | 1498 |
1499 (defun texinfo-sequential-node-update (&optional region-p) | |
1500 "Update one node (or many) in a Texinfo file with sequential pointers. | |
1501 | |
1502 This function causes the `Next' or `Previous' pointer to point to the | |
1503 immediately preceding or following node, even if it is at a higher or | |
1504 lower hierarchical level in the document. Continually pressing `n' or | |
1505 `p' takes you straight through the file. | |
1506 | |
1507 Without any prefix argument, update the node in which point is located. | |
1508 Non-nil argument (prefix, if interactive) means update the nodes in the | |
1509 marked region. | |
1510 | |
1511 This command makes it awkward to navigate among sections and | |
1512 subsections; it should be used only for those documents that are meant | |
1513 to be read like a novel rather than a reference, and for which the | |
1514 Info `g*' command is inadequate." | |
19110 | 1515 |
107 | 1516 (interactive "P") |
1517 (if (not region-p) | |
4029
8bf916902edc
(texinfo-update-node): Bind auto-fill-hook as well as auto-fill-function.
Richard M. Stallman <rms@gnu.org>
parents:
4028
diff
changeset
|
1518 ;; update a single node |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1519 (let ((auto-fill-function nil)) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1520 (if (not (re-search-backward "^@node" (point-min) t)) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
1521 (error "Node line not found before this position")) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1522 (texinfo-sequentially-update-the-node) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1523 (message |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1524 "Done...sequentially updated the node . You may save the buffer.")) |
107 | 1525 ;; else |
732 | 1526 (let ((auto-fill-function nil) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1527 (beginning (region-beginning)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1528 (end (region-end))) |
107 | 1529 (if (= end beginning) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
1530 (error "Please mark a region")) |
107 | 1531 (save-restriction |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1532 (narrow-to-region beginning end) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1533 (goto-char beginning) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1534 (push-mark (point) t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1535 (while (re-search-forward "^@node" (point-max) t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1536 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1537 (texinfo-sequentially-update-the-node)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1538 (message |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1539 "Done...updated the nodes in sequence. You may save the buffer."))))) |
107 | 1540 |
1541 (defun texinfo-sequentially-update-the-node () | |
19110 | 1542 "Update one node such that the pointers are sequential. |
107 | 1543 A `Next' or `Previous' pointer points to any preceding or following node, |
1544 regardless of its hierarchical level." | |
1545 | |
33258
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1546 (texinfo-check-for-node-name) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1547 (texinfo-delete-existing-pointers) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1548 (message |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1549 "Sequentially updating node: %s ... " (texinfo-copy-node-name)) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1550 (save-restriction |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1551 (widen) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1552 (let* ((case-fold-search t) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1553 (level (texinfo-hierarchic-level))) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1554 (if (eq level 1) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1555 (texinfo-top-pointer-case) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1556 ;; else |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1557 (texinfo-sequentially-insert-pointer level 'next) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1558 (texinfo-sequentially-insert-pointer level 'previous) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1559 (texinfo-sequentially-insert-pointer level 'up) |
e2ec8e65cd35
Require texinfo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
25278
diff
changeset
|
1560 (texinfo-clean-up-node-line))))) |
107 | 1561 |
43660
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1562 (defun texinfo-sequentially-insert-pointer (level direction) |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1563 "Insert the `Next', `Previous' or `Up' node name at point. |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1564 Move point forward. |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1565 |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1566 The first argument is the hierarchical level of the Texinfo file, a |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1567 string such as \"section\". The second argument is direction, one of |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1568 `next', `previous', or `up'." |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1569 |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1570 (end-of-line) |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1571 (insert |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1572 ", " |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1573 (save-excursion |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1574 (texinfo-pointer-name |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1575 (texinfo-sequentially-find-pointer level direction))))) |
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1576 |
107 | 1577 (defun texinfo-sequentially-find-pointer (level direction) |
1578 "Find next or previous pointer sequentially in Texinfo file, or up pointer. | |
1579 Move point to section associated with the pointer. Find point even if | |
1580 it is in a different section. | |
1581 | |
18259 | 1582 Return type of pointer (either `normal' or `no-pointer'). |
107 | 1583 |
1584 The first argument is a string specifying the general kind of section | |
15362
66fb24beae54
(texinfo-find-pointer): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
1585 such as \"chapter\" or \"section\". The section found will be at the |
107 | 1586 same hierarchical level in the Texinfo file, or, in the case of the up |
18259 | 1587 pointer, some level higher. The second argument (one of `next', |
1588 `previous', or `up') specifies whether to find the `Next', `Previous', | |
107 | 1589 or `Up' pointer." |
19110 | 1590 (let ((case-fold-search t)) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1591 (cond ((eq direction 'next) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1592 (forward-line 3) ; skip over current node |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1593 (if (re-search-forward |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1594 texinfo-section-types-regexp |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1595 (point-max) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1596 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1597 'normal |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1598 'no-pointer)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1599 ((eq direction 'previous) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1600 (if (re-search-backward |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1601 texinfo-section-types-regexp |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1602 (point-min) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1603 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1604 'normal |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1605 'no-pointer)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1606 ((eq direction 'up) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1607 (if (re-search-backward |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1608 (eval (cdr (assoc level texinfo-update-menu-higher-regexps))) |
43660
77676c41d6fb
(texinfo-insert-menu): specify previously free variable `level' in a
Robert J. Chassell <bob@rattlesnake.com>
parents:
43612
diff
changeset
|
1609 (point-min) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1610 t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1611 'normal |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1612 'no-pointer)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1613 (t |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1614 (error "texinfo-sequential-find-pointer: lack proper arguments"))))) |
107 | 1615 |
1616 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1617 ;;; Inserting `@node' lines |
18259 | 1618 ;; The `texinfo-insert-node-lines' function inserts `@node' lines as needed |
1619 ;; before the `@chapter', `@section', and such like lines of a region | |
1620 ;; in a Texinfo file. | |
107 | 1621 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1622 (defun texinfo-insert-node-lines (beginning end &optional title-p) |
107 | 1623 "Insert missing `@node' lines in region of Texinfo file. |
1624 Non-nil argument (prefix, if interactive) means also to insert the | |
1625 section titles as node names; and also to insert the section titles as | |
18259 | 1626 node names in pre-existing `@node' lines that lack names." |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1627 (interactive "r\nP") |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1628 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1629 ;; Use marker; after inserting node lines, leave point at end of |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1630 ;; region and mark at beginning. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1631 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1632 (let (beginning-marker end-marker title last-section-position) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1633 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1634 ;; Save current position on mark ring and set mark to end. |
19110 | 1635 (push-mark end t) |
1636 (setq end-marker (mark-marker)) | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1637 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1638 (goto-char beginning) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1639 (while (re-search-forward |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1640 texinfo-section-types-regexp |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1641 end-marker |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1642 'end) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1643 ;; Copy title if desired. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1644 (if title-p |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1645 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1646 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1647 (forward-word 1) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1648 (skip-chars-forward " \t") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1649 (setq title (buffer-substring |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1650 (point) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1651 (save-excursion (end-of-line) (point)))))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1652 ;; Insert node line if necessary. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1653 (if (re-search-backward |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1654 "^@node" |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1655 ;; Avoid finding previous node line if node lines are close. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1656 (or last-section-position |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1657 (save-excursion (forward-line -2) (point))) t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1658 ;; @node is present, and point at beginning of that line |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1659 (forward-word 1) ; Leave point just after @node. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1660 ;; Else @node missing; insert one. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1661 (beginning-of-line) ; Beginning of `@section' line. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1662 (insert "@node\n") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1663 (backward-char 1)) ; Leave point just after `@node'. |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1664 ;; Insert title if desired. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1665 (if title-p |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1666 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1667 (skip-chars-forward " \t") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1668 ;; Use regexp based on what info looks for |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1669 ;; (alternatively, use "[a-zA-Z]+"); |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1670 ;; this means we only insert a title if none exists. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1671 (if (not (looking-at "[^,\t\n ]+")) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1672 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1673 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1674 (forward-word 1) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1675 (insert " " title) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1676 (message "Inserted title %s ... " title))))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1677 ;; Go forward beyond current section title. |
19110 | 1678 (re-search-forward texinfo-section-types-regexp |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1679 (save-excursion (forward-line 3) (point)) t) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1680 (setq last-section-position (point)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1681 (forward-line 1)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1682 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1683 ;; Leave point at end of region, mark at beginning. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1684 (set-mark beginning) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1685 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1686 (if title-p |
107 | 1687 (message |
1688 "Done inserting node lines and titles. You may save the buffer.") | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1689 (message "Done inserting node lines. You may save the buffer.")))) |
107 | 1690 |
1691 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1692 ;;; Update and create menus for multi-file Texinfo sources |
107 | 1693 |
19110 | 1694 ;; 1. M-x texinfo-multiple-files-update |
107 | 1695 ;; |
1696 ;; Read the include file list of an outer Texinfo file and | |
1697 ;; update all highest level nodes in the files listed and insert a | |
1698 ;; main menu in the outer file after its top node. | |
1699 | |
19110 | 1700 ;; 2. C-u M-x texinfo-multiple-files-update |
107 | 1701 ;; |
1702 ;; Same as 1, but insert a master menu. (Saves reupdating lower | |
1703 ;; level menus and nodes.) This command simply reads every menu, | |
1704 ;; so if the menus are wrong, the master menu will be wrong. | |
1705 ;; Similarly, if the lower level node pointers are wrong, they | |
1706 ;; will stay wrong. | |
1707 | |
19110 | 1708 ;; 3. C-u 2 M-x texinfo-multiple-files-update |
107 | 1709 ;; |
1710 ;; Read the include file list of an outer Texinfo file and | |
1711 ;; update all nodes and menus in the files listed and insert a | |
1712 ;; master menu in the outer file after its top node. | |
1713 | |
1714 ;;; Note: these functions: | |
1715 ;;; | |
1716 ;;; * Do not save or delete any buffers. You may fill up your memory. | |
19110 | 1717 ;;; * Do not handle any pre-existing nodes in outer file. |
107 | 1718 ;;; Hence, you may need a file for indices. |
1719 | |
1720 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1721 ;;; Auxiliary functions for multiple file updating |
107 | 1722 |
1723 (defun texinfo-multi-file-included-list (outer-file) | |
1724 "Return a list of the included files in OUTER-FILE." | |
1725 (let ((included-file-list (list outer-file)) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1726 start) |
107 | 1727 (save-excursion |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1728 (set-buffer (find-file-noselect outer-file)) |
107 | 1729 (widen) |
1730 (goto-char (point-min)) | |
1731 (while (re-search-forward "^@include" nil t) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1732 (skip-chars-forward " \t") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1733 (setq start (point)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1734 (end-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1735 (skip-chars-backward " \t") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1736 (setq included-file-list |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1737 (cons (buffer-substring start (point)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1738 included-file-list))) |
107 | 1739 (nreverse included-file-list)))) |
1740 | |
1741 (defun texinfo-copy-next-section-title () | |
1742 "Return the name of the immediately following section as a string. | |
1743 | |
1744 Start with point at the beginning of the node line. Leave point at the | |
1745 same place. If there is no title, returns an empty string." | |
1746 | |
1747 (save-excursion | |
1748 (end-of-line) | |
19110 | 1749 (let ((node-end (or |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1750 (save-excursion |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1751 (if (re-search-forward "\\(^@node\\)" nil t) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1752 (match-beginning 0))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1753 (point-max)))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1754 (if (re-search-forward texinfo-section-types-regexp node-end t) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1755 (progn |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1756 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1757 ;; copy title |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1758 (let ((title |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1759 (buffer-substring |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1760 (progn (forward-word 1) ; skip over section type |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1761 (skip-chars-forward " \t") ; and over spaces |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1762 (point)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1763 (progn (end-of-line) (point))))) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1764 title)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1765 "")))) |
107 | 1766 |
1767 (defun texinfo-multi-file-update (files &optional update-everything) | |
1768 "Update first node pointers in each file in FILES. | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1769 Return a list of the node names. |
107 | 1770 |
1771 The first file in the list is an outer file; the remaining are | |
1772 files included in the outer file with `@include' commands. | |
1773 | |
1774 If optional arg UPDATE-EVERYTHING non-nil, update every menu and | |
1775 pointer in each of the included files. | |
1776 | |
1777 Also update the `Top' level node pointers of the outer file. | |
1778 | |
1779 Requirements: | |
1780 | |
1781 * the first file in the FILES list must be the outer file, | |
1782 * each of the included files must contain exactly one highest | |
19110 | 1783 hierarchical level node, |
107 | 1784 * this node must be the first node in the included file, |
1785 * each highest hierarchical level node must be of the same type. | |
1786 | |
53554
1bdcd59e6a40
(texinfo-multi-file-update): update documentation to state that
Robert J. Chassell <bob@rattlesnake.com>
parents:
53553
diff
changeset
|
1787 Thus, normally, each included file contains one, and only one, chapter. |
1bdcd59e6a40
(texinfo-multi-file-update): update documentation to state that
Robert J. Chassell <bob@rattlesnake.com>
parents:
53553
diff
changeset
|
1788 |
1bdcd59e6a40
(texinfo-multi-file-update): update documentation to state that
Robert J. Chassell <bob@rattlesnake.com>
parents:
53553
diff
changeset
|
1789 However, when an included file does not have any node lines in |
1bdcd59e6a40
(texinfo-multi-file-update): update documentation to state that
Robert J. Chassell <bob@rattlesnake.com>
parents:
53553
diff
changeset
|
1790 it, this command does not try to create a menu entry for it. |
1bdcd59e6a40
(texinfo-multi-file-update): update documentation to state that
Robert J. Chassell <bob@rattlesnake.com>
parents:
53553
diff
changeset
|
1791 Consequently, you can include any file, such as a version or an |
1bdcd59e6a40
(texinfo-multi-file-update): update documentation to state that
Robert J. Chassell <bob@rattlesnake.com>
parents:
53553
diff
changeset
|
1792 update file without node lines, not just files that are |
1bdcd59e6a40
(texinfo-multi-file-update): update documentation to state that
Robert J. Chassell <bob@rattlesnake.com>
parents:
53553
diff
changeset
|
1793 chapters." |
107 | 1794 |
18259 | 1795 ;; The menu-list has the form: |
19110 | 1796 ;; |
1797 ;; \(\(\"node-name1\" . \"title1\"\) | |
18259 | 1798 ;; \(\"node-name2\" . \"title2\"\) ... \) |
19110 | 1799 ;; |
18259 | 1800 ;; However, there does not need to be a title field and this function |
1801 ;; does not fill it; however a comment tells you how to do so. | |
1802 ;; You would use the title field if you wanted to insert titles in the | |
1803 ;; description slot of a menu as a description. | |
19110 | 1804 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1805 (let ((case-fold-search t) |
53315
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1806 menu-list next-node-name previous-node-name files-with-node-lines) |
19110 | 1807 |
53315
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1808 ;; Create a new list of included files that only have node lines |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1809 (while files |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1810 (set-buffer (find-file-noselect (car files))) |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1811 (widen) |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1812 (goto-char (point-min)) |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1813 (when (re-search-forward "^@node" nil t) |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1814 (setq files-with-node-lines (cons (car files) files-with-node-lines))) |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1815 (setq files (cdr files))) |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1816 (setq files-with-node-lines (nreverse files-with-node-lines)) |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1817 |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1818 ;; Find the name of the first node in a subsequent file |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1819 ;; and copy it into the variable next-node-name |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1820 (set-buffer (find-file-noselect (car (cdr files-with-node-lines)))) |
107 | 1821 (widen) |
1822 (goto-char (point-min)) | |
1823 (beginning-of-line) | |
1824 (texinfo-check-for-node-name) | |
1825 (setq next-node-name (texinfo-copy-node-name)) | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1826 (push (cons next-node-name (prog1 "" (forward-line 1))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1827 ;; Use following to insert section titles automatically. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1828 ;; (texinfo-copy-next-section-title) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1829 menu-list) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1830 |
107 | 1831 ;; Go to outer file |
53315
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1832 ;; `pop' is analogous to (prog1 (car PLACE) (setf PLACE (cdr PLACE))) |
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1833 (set-buffer (find-file-noselect (pop files-with-node-lines))) |
107 | 1834 (goto-char (point-min)) |
143 | 1835 (if (not (re-search-forward "^@node [ \t]*top[ \t]*\\(,\\|$\\)" nil t)) |
38963
6e5457eb45b8
Remove dots and exclams from end of error messages. From Pavel Janik.
Eli Zaretskii <eliz@gnu.org>
parents:
38877
diff
changeset
|
1836 (error "This buffer needs a Top node")) |
107 | 1837 (beginning-of-line) |
1838 (texinfo-delete-existing-pointers) | |
1839 (end-of-line) | |
1840 (insert ", " next-node-name ", (dir), (dir)") | |
1841 (beginning-of-line) | |
1842 (setq previous-node-name "Top") | |
19110 | 1843 |
53315
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1844 (while files-with-node-lines |
19110 | 1845 |
53315
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1846 (if (not (cdr files-with-node-lines)) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1847 ;; No next file |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1848 (setq next-node-name "") |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1849 ;; Else, |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1850 ;; find the name of the first node in the next file. |
53315
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1851 (set-buffer (find-file-noselect (car (cdr files-with-node-lines)))) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1852 (widen) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1853 (goto-char (point-min)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1854 (beginning-of-line) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1855 (texinfo-check-for-node-name) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1856 (setq next-node-name (texinfo-copy-node-name)) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1857 (push (cons next-node-name (prog1 "" (forward-line 1))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1858 ;; Use following to insert section titles automatically. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1859 ;; (texinfo-copy-next-section-title) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1860 menu-list)) |
107 | 1861 |
1862 ;; Go to node to be updated. | |
53315
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1863 (set-buffer (find-file-noselect (car files-with-node-lines))) |
107 | 1864 (goto-char (point-min)) |
1865 (beginning-of-line) | |
19110 | 1866 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1867 ;; Update other menus and nodes if requested. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1868 (if update-everything (texinfo-all-menus-update t)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1869 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1870 (beginning-of-line) |
107 | 1871 (texinfo-delete-existing-pointers) |
1872 (end-of-line) | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1873 (insert ", " next-node-name ", " previous-node-name ", Top") |
19110 | 1874 |
107 | 1875 (beginning-of-line) |
1876 (setq previous-node-name (texinfo-copy-node-name)) | |
19110 | 1877 |
53315
767b85819555
(texinfo-multi-file-update): create a new list of included files,
Robert J. Chassell <bob@rattlesnake.com>
parents:
52401
diff
changeset
|
1878 (setq files-with-node-lines (cdr files-with-node-lines))) |
107 | 1879 (nreverse menu-list))) |
1880 | |
1881 (defun texinfo-multi-files-insert-main-menu (menu-list) | |
1882 "Insert formatted main menu at point. | |
1883 Indents the first line of the description, if any, to the value of | |
18259 | 1884 `texinfo-column-for-description'." |
107 | 1885 |
1886 (insert "@menu\n") | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1887 (dolist (entry menu-list) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1888 ;; Every menu entry starts with a star and a space. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1889 (insert "* ") |
19110 | 1890 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1891 ;; Insert the node name (and menu entry name, if present). |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1892 (let ((node-part (car entry))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1893 (if (stringp node-part) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1894 ;; "Double colon" entry line; menu entry and node name are the same, |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1895 (insert (format "%s::" node-part)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1896 ;; "Single colon" entry line; menu entry and node name are different. |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1897 (insert (format "%s: %s." (car node-part) (cdr node-part))))) |
19110 | 1898 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1899 ;; Insert the description, if present. |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1900 (when (cdr entry) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1901 ;; Move to right place. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1902 (indent-to texinfo-column-for-description 2) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1903 ;; Insert description. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1904 (insert (format "%s" (cdr entry)))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1905 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1906 (insert "\n")) ; end this menu entry |
107 | 1907 (insert "@end menu")) |
1908 | |
1909 (defun texinfo-multi-file-master-menu-list (files-list) | |
1910 "Return master menu list from files in FILES-LIST. | |
1911 Menu entries in each file collected using `texinfo-master-menu-list'. | |
1912 | |
1913 The first file in FILES-LIST must be the outer file; the others must | |
1914 be the files included within it. A main menu must already exist." | |
1915 (save-excursion | |
1916 (let (master-menu-list) | |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1917 (dolist (file files-list) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1918 (set-buffer (find-file-noselect file)) |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1919 (message "Working on: %s " (current-buffer)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1920 (goto-char (point-min)) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1921 (setq master-menu-list |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1922 (append master-menu-list (texinfo-master-menu-list)))) |
107 | 1923 master-menu-list))) |
1924 | |
1925 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1926 ;;; The multiple-file update function |
107 | 1927 |
1928 (defun texinfo-multiple-files-update | |
1929 (outer-file &optional update-everything make-master-menu) | |
1930 "Update first node pointers in each file included in OUTER-FILE; | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1931 create or update the `Top' level node pointers and the main menu in |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1932 the outer file that refers to such nodes. This does not create or |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1933 update menus or pointers within the included files. |
107 | 1934 |
1935 With optional MAKE-MASTER-MENU argument (prefix arg, if interactive), | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1936 insert a master menu in OUTER-FILE in addition to creating or updating |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1937 pointers in the first @node line in each included file and creating or |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1938 updating the `Top' level node pointers of the outer file. This does |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1939 not create or update other menus and pointers within the included |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1940 files. |
107 | 1941 |
1942 With optional UPDATE-EVERYTHING argument (numeric prefix arg, if | |
1943 interactive), update all the menus and all the `Next', `Previous', and | |
1944 `Up' pointers of all the files included in OUTER-FILE before inserting | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1945 a master menu in OUTER-FILE. Also, update the `Top' level node |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1946 pointers of OUTER-FILE. |
107 | 1947 |
19110 | 1948 Notes: |
107 | 1949 |
1950 * this command does NOT save any files--you must save the | |
1951 outer file and any modified, included files. | |
1952 | |
1953 * except for the `Top' node, this command does NOT handle any | |
1954 pre-existing nodes in the outer file; hence, indices must be | |
1955 enclosed in an included file. | |
1956 | |
1957 Requirements: | |
1958 | |
1959 * each of the included files must contain exactly one highest | |
19110 | 1960 hierarchical level node, |
107 | 1961 * this highest node must be the first node in the included file, |
1962 * each highest hierarchical level node must be of the same type. | |
1963 | |
1964 Thus, normally, each included file contains one, and only one, | |
1965 chapter." | |
19110 | 1966 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
1967 (interactive (cons |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1968 (read-string |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1969 "Name of outer `include' file: " |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1970 (buffer-file-name)) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1971 (cond |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1972 ((not current-prefix-arg) '(nil nil)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1973 ((listp current-prefix-arg) '(t nil)) ; make-master-menu |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1974 ((numberp current-prefix-arg) '(t t))))) ; update-everything |
107 | 1975 |
1976 (let* ((included-file-list (texinfo-multi-file-included-list outer-file)) | |
24175
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1977 (files included-file-list) |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1978 next-node-name |
ec6c3e69f89a
(texinfo-make-menu): Make region-end a marker.
Karl Heuer <kwzh@gnu.org>
parents:
23414
diff
changeset
|
1979 previous-node-name |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1980 ;; Update the pointers and collect the names of the nodes and titles |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1981 (main-menu-list (texinfo-multi-file-update files update-everything))) |
107 | 1982 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1983 ;; Insert main menu |
107 | 1984 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1985 ;; Go to outer file |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1986 (set-buffer (find-file-noselect (car included-file-list))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1987 (if (texinfo-old-menu-p |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1988 (point-min) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1989 (save-excursion |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1990 (re-search-forward "^@include") |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1991 (beginning-of-line) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1992 (point))) |
107 | 1993 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1994 ;; If found, leave point after word `menu' on the `@menu' line. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1995 (progn |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1996 (texinfo-incorporate-descriptions main-menu-list) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1997 ;; Delete existing menu. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1998 (beginning-of-line) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
1999 (delete-region |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2000 (point) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2001 (save-excursion (re-search-forward "^@end menu") (point))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2002 ;; Insert main menu |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2003 (texinfo-multi-files-insert-main-menu main-menu-list)) |
107 | 2004 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2005 ;; Else no current menu; insert it before `@include' |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2006 (texinfo-multi-files-insert-main-menu main-menu-list)) |
107 | 2007 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2008 ;; Insert master menu |
107 | 2009 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2010 (if make-master-menu |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2011 (progn |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2012 ;; First, removing detailed part of any pre-existing master menu |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2013 (goto-char (point-min)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2014 (if (search-forward texinfo-master-menu-header nil t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2015 (progn |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2016 (goto-char (match-beginning 0)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2017 ;; Check if @detailmenu kludge is used; |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2018 ;; if so, leave point before @detailmenu. |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2019 (search-backward "\n@detailmenu" |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2020 (save-excursion (forward-line -3) (point)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2021 t) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2022 ;; Remove detailed master menu listing |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2023 (let ((end-of-detailed-menu-descriptions |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2024 (save-excursion ; beginning of end menu line |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2025 (goto-char (texinfo-menu-end)) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2026 (beginning-of-line) (forward-char -1) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2027 (point)))) |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2028 (delete-region (point) end-of-detailed-menu-descriptions)))) |
107 | 2029 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2030 ;; Create a master menu and insert it |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2031 (texinfo-insert-master-menu-list |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2032 (texinfo-multi-file-master-menu-list |
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2033 included-file-list))))) |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2034 |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2035 ;; Remove unwanted extra lines. |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2036 (save-excursion |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2037 (goto-char (point-min)) |
19110 | 2038 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2039 (re-search-forward "^@menu") |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2040 (forward-line -1) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2041 (insert "\n") ; Ensure at least one blank line. |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2042 (delete-blank-lines) |
19110 | 2043 |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2044 (re-search-forward "^@end menu") |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2045 (forward-line 1) |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2046 (insert "\n") ; Ensure at least one blank line. |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2047 (delete-blank-lines)) |
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2048 |
107 | 2049 (message "Multiple files updated.")) |
2050 | |
4028
3831300d2ecb
Fix typo re `texinfo-sequential-node-update.'
Richard M. Stallman <rms@gnu.org>
parents:
3591
diff
changeset
|
2051 |
40390
11e824c23fd8
Use `when', `dolist', `push', ...
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40284
diff
changeset
|
2052 ;; Place `provide' at end of file. |
584 | 2053 (provide 'texnfo-upd) |
2054 | |
52401 | 2055 ;;; arch-tag: d21613a5-c32f-43f4-8af4-bfb1e7455842 |
657
fec3f9a1e3e5
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
2056 ;;; texnfo-upd.el ends here |