annotate lisp/progmodes/mantemp.el @ 51242:661e2fe7e775

(autoconf-mode setups): Recognise AH_ and AU_ entries in "(autoconf)Autoconf Macro Index". Add "(autoconf)M4 Macro Index" and "(autoconf)Autotest Macro Index". Remove duplicate copy of "(automake)Macro and Variable Index". Keep automake after all autoconf possibilities, so as to prefer those.
author Juanma Barranquero <lekktu@gmail.com>
date Sun, 25 May 2003 21:03:57 +0000
parents b174db545cfd
children 695cf19ef79e d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 16879
diff changeset
1 ;;; mantemp.el --- create manual template instantiations from g++ 2.7.2 output
16878
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1996 Free Software Foundation, Inc.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Tom Houlder <thoulder@icor.fr>
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Created: 10 Dec 1996
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: g++, templates
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; by the Free Software Foundation; either version 2, or (at your
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; option) any later version.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful, but
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; General Public License for more details.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; The following is a typical error message from g++ using STL (here
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; with split lines):
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;;
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; AFile.o(.text+0x2d5): undefined reference to
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; `vector<double>::begin(void)'
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; AFile.o(.text+0x2e7): undefined reference to
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; `vector<double>::insert(double *, unsigned int, double const &)'
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; AnotherFile.o(.text+0x226b8): undefined reference to
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; `operator!=(rb_tree<basic_string<char>, pair<basic_string<char>
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; const, AClass *>, select1st<pair<basic_string<char> const, AClass
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; *>, basic_string<char> >, less<basic_string<char> > >::iterator
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; const &, rb_tree<basic_string<char>, pair<basic_string<char>
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; const, AClass *>, select1st<pair<basic_string<char> const, AClass
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; *>, basic_string<char> >, less<basic_string<char> > >::iterator
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; const &)'
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; The message means that in the object file AFile.o there is one
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; uninstantiated template class, vector<double>, and in AnotherFile.o
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; there is one uninstantiated template function, operator!=(...). To
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; turn this output into manual template instantiations, copy from the
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; first name of an objective file (here this is AFile.o) to right
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; after the very last `'' of the output. Put this in a buffer and
16879
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
50 ;; call `mantemp-make-mantemps-buffer' with the point in the buffer.
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
51 ;; You can also use `mantemp-make-mantemps-region' directly on the
16878
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; region if the output is already in Emacs.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;;
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; The resulting buffer yields (connect the three output lines above
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; if you want to try):
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;;
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;; template operator!=(rb_tree<basic_string<char>,
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; pair<basic_string<char> const, AClass *>,
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; select1st<pair<basic_string<char> const, AClass *>,
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; basic_string<char> >, less<basic_string<char> > >::iterator const
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; &, rb_tree<basic_string<char>, pair<basic_string<char> const,
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; AClass *>, select1st<pair<basic_string<char> const, AClass *>,
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; basic_string<char> >, less<basic_string<char> > >::iterator const
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; &);
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; template class vector<double>;
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;;
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; which can be included in your C++ program. However, its probably
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; better to include the necessary header files in the buffer and
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; compile it as a stand alone implementation file.
16879
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
70 ;;
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
71 ;; Sometimes, an uninstantiated template may cause a message like the
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
72 ;; following
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
73 ;;
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
74 ;; main.cc:66: invalid use of undefined type
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
75 ;; `struct valarray<double,arrayminusopclass<double,c_array<double> > >'
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
76 ;;
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
77 ;; Follow the same procedure as above and the line is changed to
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
78 ;;
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
79 ;; template struct valarray<double,
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
80 ;; arrayminusopclass<double,c_array<double> > >;
16878
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; g++ does not output the templates that are needed by the
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; uninstantiated templates. Therefore you will often get new error
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; messages after the first instantiations have been included and you
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; must repeat the operation.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;;; Code:
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 (defun mantemp-remove-comments ()
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 "Remove g++ comments surrounding each function and member function."
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 (save-excursion
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 (goto-char (point-min))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 (message "Removing comments")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 (while (re-search-forward "^[A-z\.()+0-9: ]*`\\|'.*$" nil t)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 (replace-match ""))))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 (defun mantemp-remove-memfuncs ()
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 "Remove member function extensions so that only class names remain."
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 (save-excursion
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;; Remove conversion operator extensions.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 (goto-char (point-min))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 (message "Removing member function extensions")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 (while (re-search-forward
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 "^[A-z :&*<>~=,0-9+]*>::operator " nil t nil)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 (progn
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 (backward-char 11)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 (kill-line)))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; Remove other member function extensions.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 (goto-char (point-min))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 (message "Removing member function extensions")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 (while (re-search-forward "^[A-z :&*<>~=,0-9+]*>::" nil t nil)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 (progn
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 (backward-char 2)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 (kill-line)))))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 (defun mantemp-sort-and-unique-lines ()
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 "Eliminate all consecutive duplicate lines in the buffer."
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 (save-excursion
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 (message "Sorting")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 (sort-regexp-fields nil "^.*$" "\\&"
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 (point-min)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 (point-max))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 (goto-char (point-min))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (message "Removing consecutive duplicate lines")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 (while (re-search-forward "\\(^.+\\)\n\\1" nil t nil)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 (progn
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 (forward-line -1)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 (beginning-of-line)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 (kill-line 1)))))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 (defun mantemp-insert-cxx-syntax ()
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 "Insert C++ syntax around each template class and function.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 Insert 'template class' for classes, 'template' for
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 functions and add the statement delimiter `;' at the end of
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 the lines."
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 (save-excursion
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 ;; Insert ';' at the end of each nonempty line.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 (goto-char (point-min))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (message "Inserting `;' at the ends")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 (while (re-search-forward ".+$" nil t)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 (progn
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 (insert ";")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 (if (not (equal (point) (point-max)))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (forward-char))))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ;; We first insert 'template class' at each nonempty line and
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; subsequently remove 'class' for functions so we don't need to
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 ;; both scan for classes and functions.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (goto-char (point-min))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (message "Inserting 'template class' for classes")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 (while (re-search-forward "^.+" nil t)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 (progn
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 (beginning-of-line)
16879
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
153 (if (looking-at "struct[\\t ]+\\|class[\\t ]+")
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
154 (insert "template ")
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
155 (insert "template class "))))
16878
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 (goto-char (point-min))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 (message "Inserting 'template' for functions")
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 (while (re-search-forward
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 "^template class [A-z :&*<>~=,0-9+!]*(" nil t nil)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 (progn
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 (beginning-of-line)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 (forward-word 1)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 (kill-word 1)))))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 (defun mantemp-make-mantemps ()
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 "Gathering interface to the functions modifying the buffer."
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 (mantemp-remove-comments)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 (mantemp-remove-memfuncs)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 (mantemp-sort-and-unique-lines)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 (mantemp-insert-cxx-syntax))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 (defun mantemp-make-mantemps-buffer ()
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 "Make manual template instantiations from g++ error messages in the buffer.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 Scan the output of g++ describing uninstantiated template
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 classes and functions and generate the corresponding C++
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 manual template instantiations. The output is supposed to
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 have been placed in the current buffer and the current buffer
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 should otherwise be empty.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 See the commentary in file mantemp.el for an example of use."
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (interactive)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (mantemp-make-mantemps)
16879
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
183 (message "Done"))
16878
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (defun mantemp-make-mantemps-region ()
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 "Make manual template instantiations from g++ error messages in the region.
16879
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
187 This function does the same thing as `mantemp-make-mantemps-buffer',
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
188 but operates on the region."
16878
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (interactive)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 (let ((cur-buf (current-buffer))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 (mantemp-buffer (generate-new-buffer "*mantemp*")))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 ;; Copy the region to a temporary buffer, make the C++ code there
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;; and copy the result back to the current buffer.
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 (kill-region (mark) (point))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 (set-buffer mantemp-buffer)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 (yank)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 (mantemp-make-mantemps)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 (kill-region (point-min) (point-max))
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (set-buffer cur-buf)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (yank)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (kill-buffer mantemp-buffer))
16879
b020aae1fa01 (mantemp-insert-cxx-syntax): Recognize non-class templates.
Richard M. Stallman <rms@gnu.org>
parents: 16878
diff changeset
202 (message "Done"))
16878
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (provide 'mantemp)
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205
ffc3290d43bf Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 ;;; mantemp.el ends here