Mercurial > hg > octave-nkf
annotate scripts/gethelp.cc @ 10544:9961fc022d9d
fix assignment to non-existing variables and octave_value::assign
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 23 Apr 2010 11:23:43 +0200 |
parents | bc59bc6282a0 |
children | f88e3d5d88e2 |
rev | line source |
---|---|
7016 | 1 /* |
2 | |
8920 | 3 Copyright (C) 1999, 2000, 2003, 2007, 2008, 2009 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 | |
4279 | 23 #if defined (__DECCXX) |
24 #define __USE_STD_IOSTREAM | |
25 #endif | |
26 | |
8521 | 27 #include <cstdio> |
28 | |
29 #include <iostream> | |
3295 | 30 #include <string> |
31 | |
32 static bool | |
3575 | 33 looks_like_octave_copyright (const std::string& s) |
3295 | 34 { |
6528 | 35 // Perhaps someday we will want to do more here, so leave this as a |
36 // separate function. | |
3295 | 37 |
6528 | 38 return (s.substr (0, 9) == "Copyright"); |
3295 | 39 } |
40 | |
41 // Eat whitespace and comments from FFILE, returning the text of the | |
42 // first block of comments that doesn't look like a copyright notice, | |
43 | |
3575 | 44 static std::string |
3295 | 45 extract_help_text (void) |
46 { | |
3575 | 47 std::string help_txt; |
3295 | 48 |
49 bool first_comments_seen = false; | |
50 bool begin_comment = false; | |
51 bool have_help_text = false; | |
52 bool in_comment = false; | |
3427 | 53 bool discard_space = true; |
3295 | 54 int c; |
55 | |
3575 | 56 while ((c = std::cin.get ()) != EOF) |
3295 | 57 { |
58 if (begin_comment) | |
10163
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 if (c == '%' || c == '#') |
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 else if (discard_space && c == ' ') |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
63 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
64 discard_space = false; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
65 continue; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
66 } |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
67 else |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
68 begin_comment = false; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
69 } |
3295 | 70 |
71 if (in_comment) | |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
72 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
73 if (! have_help_text) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
74 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
75 first_comments_seen = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
76 help_txt += (char) c; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
77 } |
3295 | 78 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
79 if (c == '\n') |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
80 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
81 in_comment = false; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
82 discard_space = true; |
3295 | 83 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
84 if ((c = std::cin.get ()) != EOF) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
85 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
86 if (c == '\n') |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
87 break; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
88 } |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
89 else |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
90 break; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
91 } |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
92 } |
3295 | 93 else |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
94 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
95 switch (c) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
96 { |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
97 case ' ': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
98 case '\t': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
99 if (first_comments_seen) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
100 have_help_text = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
101 break; |
3295 | 102 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
103 case '\n': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
104 if (first_comments_seen) |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
105 have_help_text = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
106 continue; |
3295 | 107 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
108 case '%': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
109 case '#': |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
110 begin_comment = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
111 in_comment = true; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
112 break; |
3295 | 113 |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
114 default: |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
115 goto done; |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
116 } |
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
117 } |
3295 | 118 } |
119 | |
120 done: | |
121 | |
122 if (! help_txt.empty ()) | |
123 { | |
124 if (looks_like_octave_copyright (help_txt)) | |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
125 help_txt.resize (0); |
3295 | 126 |
127 if (help_txt.empty ()) | |
10163
a822560a3ce3
scripts/gethelp.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9014
diff
changeset
|
128 help_txt = extract_help_text (); |
3295 | 129 } |
130 | |
131 return help_txt; | |
132 } | |
133 | |
134 int | |
135 main (int argc, char **argv) | |
136 { | |
3575 | 137 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
|
138 std::string file_name; |
3295 | 139 |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
140 if (argc != 3) |
3295 | 141 { |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
142 std::cerr << "usage: gethelp name file-name\n"; |
3295 | 143 return 1; |
144 } | |
145 else | |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
146 { |
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
147 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
|
148 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
|
149 } |
3295 | 150 |
3575 | 151 std::string help_text = extract_help_text (); |
3295 | 152 |
153 if (! help_text.empty ()) | |
154 { | |
9014
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
155 std::cout << "" << name << "\n" |
10165
bc59bc6282a0
scripts/gethelp.cc: finish previous untabification
John W. Eaton <jwe@octave.org>
parents:
10163
diff
changeset
|
156 << "@c " << file_name << "\n" |
bc59bc6282a0
scripts/gethelp.cc: finish previous untabification
John W. Eaton <jwe@octave.org>
parents:
10163
diff
changeset
|
157 << help_text; |
3295 | 158 |
159 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
|
160 std::cout << "\n"; |
3295 | 161 } |
162 | |
163 return 0; | |
164 } |