Mercurial > hg > octave-nkf
annotate scripts/gethelp.cc @ 12130:3229572cbe23
symbol_table::parent_classes: also add parents of parents to the list
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 22 Jan 2011 12:55:18 -0500 |
parents | a9be431c1595 |
children | db1f49eaba6b |
rev | line source |
---|---|
7016 | 1 /* |
2 | |
11523 | 3 Copyright (C) 1999-2011 John W. Eaton |
7016 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
9 Free Software Foundation; either version 3 of the License, or (at your | |
10 option) any later version. | |
11 | |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with Octave; see the file COPYING. If not, see | |
19 <http://www.gnu.org/licenses/>. | |
20 | |
21 */ | |
22 | |
8521 | 23 #include <cstdio> |
24 | |
25 #include <iostream> | |
3295 | 26 #include <string> |
27 | |
28 static bool | |
3575 | 29 looks_like_octave_copyright (const std::string& s) |
3295 | 30 { |
6528 | 31 // Perhaps someday we will want to do more here, so leave this as a |
32 // separate function. | |
3295 | 33 |
6528 | 34 return (s.substr (0, 9) == "Copyright"); |
3295 | 35 } |
36 | |
37 // Eat whitespace and comments from FFILE, returning the text of the | |
38 // first block of comments that doesn't look like a copyright notice, | |
39 | |
3575 | 40 static std::string |
3295 | 41 extract_help_text (void) |
42 { | |
3575 | 43 std::string help_txt; |
3295 | 44 |
45 bool first_comments_seen = false; | |
46 bool begin_comment = false; | |
47 bool have_help_text = false; | |
48 bool in_comment = false; | |
3427 | 49 bool discard_space = true; |
3295 | 50 int c; |
51 | |
3575 | 52 while ((c = std::cin.get ()) != EOF) |
3295 | 53 { |
54 if (begin_comment) | |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
55 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
56 if (c == '%' || c == '#') |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
57 continue; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
58 else if (discard_space && c == ' ') |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
59 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
60 discard_space = false; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
61 continue; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
62 } |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
63 else |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
64 begin_comment = false; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
65 } |
3295 | 66 |
67 if (in_comment) | |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
68 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
69 if (! have_help_text) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
70 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
71 first_comments_seen = true; |
10553 | 72 help_txt += static_cast<char> (c); |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
73 } |
3295 | 74 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
75 if (c == '\n') |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
76 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
77 in_comment = false; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
78 discard_space = true; |
3295 | 79 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
80 if ((c = std::cin.get ()) != EOF) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
81 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
82 if (c == '\n') |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
83 break; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
84 } |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
85 else |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
86 break; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
87 } |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
88 } |
3295 | 89 else |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
90 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
91 switch (c) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
92 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
93 case ' ': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
94 case '\t': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
95 if (first_comments_seen) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
96 have_help_text = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
97 break; |
3295 | 98 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
99 case '\n': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
100 if (first_comments_seen) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
101 have_help_text = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
102 continue; |
3295 | 103 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
104 case '%': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
105 case '#': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
106 begin_comment = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
107 in_comment = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
108 break; |
3295 | 109 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
110 default: |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
111 goto done; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
112 } |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
113 } |
3295 | 114 } |
115 | |
116 done: | |
117 | |
118 if (! help_txt.empty ()) | |
119 { | |
120 if (looks_like_octave_copyright (help_txt)) | |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
121 help_txt.resize (0); |
3295 | 122 |
123 if (help_txt.empty ()) | |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
124 help_txt = extract_help_text (); |
3295 | 125 } |
126 | |
127 return help_txt; | |
128 } | |
129 | |
130 int | |
131 main (int argc, char **argv) | |
132 { | |
3575 | 133 std::string name; |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
134 std::string file_name; |
3295 | 135 |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
136 if (argc != 3) |
3295 | 137 { |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
138 std::cerr << "usage: gethelp name file-name\n"; |
3295 | 139 return 1; |
140 } | |
141 else | |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
142 { |
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
143 name = argv[1]; |
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
144 file_name = argv[2]; |
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
145 } |
3295 | 146 |
3575 | 147 std::string help_text = extract_help_text (); |
3295 | 148 |
149 if (! help_text.empty ()) | |
150 { | |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
151 std::cout << "" << name << "\n" |
11550
a9be431c1595
write function name along with filename in docstring comments
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
152 << "@c " << name << " " << file_name << "\n" |
10165
bc59bc6282a0
scripts/gethelp.cc: finish previous untabification
John W. Eaton <jwe@octave.org>
parents:
10163
diff
changeset
|
153 << help_text; |
3295 | 154 |
155 if (help_text[help_text.length () - 1] != '\n') | |
10165
bc59bc6282a0
scripts/gethelp.cc: finish previous untabification
John W. Eaton <jwe@octave.org>
parents:
10163
diff
changeset
|
156 std::cout << "\n"; |
3295 | 157 } |
158 | |
159 return 0; | |
160 } |