aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Morris2013-06-25 18:52:09 -0700
committerGlenn Morris2013-06-25 18:52:09 -0700
commitf2136e1e28e9b3f0eb2aef6ebaf6be37024e7bb9 (patch)
treef21176d2fe8c09f7d5da1e88dfb37d2abd60fafc
parenta343d218fd889e57ab80565815366734fb606b37 (diff)
downloademacs-f2136e1e28e9b3f0eb2aef6ebaf6be37024e7bb9.tar.gz
emacs-f2136e1e28e9b3f0eb2aef6ebaf6be37024e7bb9.zip
info-xref.el: Update for Texinfo 5 change in *note format
* lisp/info-xref.el (info-xref-node-re, info-xref-note-re): New constants. (info-xref-check-buffer): Use info-xref-note-re. * test/automated/info-xref.el: New file.
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/info-xref.el21
-rw-r--r--test/ChangeLog4
-rw-r--r--test/automated/info-xref.el148
4 files changed, 176 insertions, 3 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 4cd17401bdd..1c43c23fa5d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
12013-06-26 Glenn Morris <rgm@gnu.org>
2
3 * info-xref.el: Update for Texinfo 5 change in *note format.
4 (info-xref-node-re, info-xref-note-re): New constants.
5 (info-xref-check-buffer): Use info-xref-note-re.
6
12013-06-26 Stefan Monnier <monnier@iro.umontreal.ca> 72013-06-26 Stefan Monnier <monnier@iro.umontreal.ca>
2 8
3 * simple.el (set-variable): Use read-from-minibuffer (bug#14710). 9 * simple.el (set-variable): Use read-from-minibuffer (bug#14710).
diff --git a/lisp/info-xref.el b/lisp/info-xref.el
index 90a8d4968de..c38e23bab8a 100644
--- a/lisp/info-xref.el
+++ b/lisp/info-xref.el
@@ -367,13 +367,28 @@ in the path."
367 (forward-line))) 367 (forward-line)))
368 (info-xref-check-buffer)))))))) 368 (info-xref-check-buffer))))))))
369 369
370(defconst info-xref-node-re "\\(?1:\\(([^)]*)\\)[^.,]+\\)"
371 "Regexp with subexp 1 matching (manual)node.")
372
373;; "@xref{node,crossref,manual}." produces:
374;; texinfo 4 or 5:
375;; *Note crossref: (manual)node.
376;; "@xref{node,,manual}." produces:
377;; texinfo 4:
378;; *Note node: (manual)node.
379;; texinfo 5:
380;; *Note (manual)node::.
381(defconst info-xref-note-re
382 (concat "\\*[Nn]ote[ \n\t]+\\(?:"
383 "[^:]*:[ \n\t]+" info-xref-node-re "\\|"
384 info-xref-node-re "::\\)[.,]")
385 "Regexp matching a \"*note...\" link.")
386
370(defun info-xref-check-buffer () 387(defun info-xref-check-buffer ()
371 "Check external references in the info file in the current buffer. 388 "Check external references in the info file in the current buffer.
372This should be the raw file contents, not `Info-mode'." 389This should be the raw file contents, not `Info-mode'."
373 (goto-char (point-min)) 390 (goto-char (point-min))
374 (while (re-search-forward 391 (while (re-search-forward info-xref-note-re nil t)
375 "\\*[Nn]ote[ \n\t]+[^:]*:[ \n\t]+\\(\\(([^)]*)\\)[^.,]+\\)[.,]"
376 nil t)
377 (save-excursion 392 (save-excursion
378 (goto-char (match-beginning 1)) ;; start of nodename as error position 393 (goto-char (match-beginning 1)) ;; start of nodename as error position
379 (info-xref-check-node (match-string 1))))) 394 (info-xref-check-node (match-string 1)))))
diff --git a/test/ChangeLog b/test/ChangeLog
index 4cacbf2766b..4aaa5f12bb7 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,7 @@
12013-06-26 Glenn Morris <rgm@gnu.org>
2
3 * automated/info-xref.el: New file.
4
12013-06-25 Glenn Morris <rgm@gnu.org> 52013-06-25 Glenn Morris <rgm@gnu.org>
2 6
3 * automated/occur-tests.el (occur-test-create): New function. 7 * automated/occur-tests.el (occur-test-create): New function.
diff --git a/test/automated/info-xref.el b/test/automated/info-xref.el
new file mode 100644
index 00000000000..973af0d46c7
--- /dev/null
+++ b/test/automated/info-xref.el
@@ -0,0 +1,148 @@
1;;; info-xref.el --- tests for info-xref.el
2
3;; Copyright (C) 2013 Free Software Foundation, Inc.
4
5;; This file is part of GNU Emacs.
6
7;; GNU Emacs is free software: you can redistribute it and/or modify
8;; it under the terms of the GNU General Public License as published by
9;; the Free Software Foundation, either version 3 of the License, or
10;; (at your option) any later version.
11
12;; GNU Emacs is distributed in the hope that it will be useful,
13;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;; GNU General Public License for more details.
16
17;; You should have received a copy of the GNU General Public License
18;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
19
20;;; Commentary:
21
22;;; Code:
23
24(require 'ert)
25(require 'info-xref)
26
27(defun info-xref-test-internal (body result)
28 "Body of a basic info-xref ert test.
29BODY is a string from an info buffer.
30RESULT is a list (NBAD NGOOD NUNAVAIL)."
31 (get-buffer-create info-xref-output-buffer)
32 (setq info-xref-xfile-alist nil)
33 (require 'info)
34 (let ((Info-directory-list '("."))
35 Info-additional-directory-list)
36 (info-xref-with-output
37 (with-temp-buffer
38 (insert body)
39 (info-xref-check-buffer))))
40 (should (equal result (list info-xref-bad info-xref-good info-xref-unavail)))
41 ;; If there was an error, we can leave this around.
42 (kill-buffer info-xref-output-buffer))
43
44(ert-deftest info-xref-test-node-crossref ()
45 "Test parsing of @xref{node,crossref,,manual} with Texinfo 4/5."
46 (info-xref-test-internal "
47*Note crossref: (manual-foo)node. Texinfo 4/5 format with crossref.
48" '(0 0 1)))
49
50(ert-deftest info-xref-test-node-4 ()
51 "Test parsing of @xref{node,,,manual} with Texinfo 4."
52 (info-xref-test-internal "
53*Note node: (manual-foo)node. Texinfo 4 format with no crossref.
54" '(0 0 1)))
55
56(ert-deftest info-xref-test-node-5 ()
57 "Test parsing of @xref{node,,,manual} with Texinfo 5."
58 (info-xref-test-internal "
59*Note (manual-foo)node::. Texinfo 5 format with no crossref.
60" '(0 0 1)))
61
62;; TODO Easier to have static data files in the repo?
63(defun info-xref-test-write-file (file body)
64 "Write BODY to texi FILE."
65 (with-temp-buffer
66 (insert "\
67\input texinfo
68@setfilename "
69 (format "%s.info\n" (file-name-sans-extension file))
70 "\
71@settitle test
72
73@ifnottex
74@node Top
75@top test
76@end ifnottex
77
78@menu
79* Chapter One::
80@end menu
81
82@node Chapter One
83@chapter Chapter One
84
85text.
86
87"
88 body
89 "\
90@bye
91"
92 )
93 (write-region nil nil file nil 'silent))
94 (should (equal 0 (call-process "makeinfo" file))))
95
96(ert-deftest info-xref-test-makeinfo ()
97 "Test that info-xref can parse basic makeinfo output."
98 :expected-result (if (executable-find "makeinfo") :passed :failed)
99 (should (executable-find "makeinfo"))
100 (let ((tempfile (make-temp-file "info-xref-test" nil ".texi"))
101 (tempfile2 (make-temp-file "info-xref-test2" nil ".texi"))
102 (errflag t))
103 (unwind-protect
104 (progn
105 ;; tempfile contains xrefs to various things, including tempfile2.
106 (info-xref-test-write-file
107 tempfile
108 (concat "\
109@xref{nodename,,,missing,Missing Manual}.
110
111@xref{nodename,crossref,title,missing,Missing Manual}.
112
113@xref{Chapter One}.
114
115@xref{Chapter One,Something}.
116
117"
118 (format "@xref{Chapter One,,,%s,Present Manual}.\n"
119 (file-name-sans-extension (file-name-nondirectory
120 tempfile2)))))
121 ;; Something for tempfile to xref to.
122 (info-xref-test-write-file tempfile2 "")
123 (require 'info)
124 (save-window-excursion
125 (let ((Info-directory-list
126 (list
127 (or (file-name-directory tempfile) ".")))
128 Info-additional-directory-list)
129 (info-xref-check (format "%s.info" (file-name-sans-extension
130 tempfile))))
131 (should (equal (list info-xref-bad info-xref-good
132 info-xref-unavail)
133 '(0 1 2)))
134 (setq errflag nil)
135 ;; If there was an error, we can leave this around.
136 (kill-buffer info-xref-output-buffer)))
137 ;; Useful diagnostic in case of problems.
138 (if errflag
139 (with-temp-buffer
140 (call-process "makeinfo" nil t nil "--version")
141 (message "%s" (buffer-string))))
142 (mapc 'delete-file (list tempfile tempfile2
143 (format "%s.info" (file-name-sans-extension
144 tempfile))
145 (format "%s.info" (file-name-sans-extension
146 tempfile2)))))))
147
148;;; info-xref.el ends here