Mercurial > hg > octave-lyh
annotate scripts/gethelp.cc @ 9014:71fca0fc2436
save source file names for functions as comments in .texi files
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 25 Mar 2009 12:54:17 -0400 |
parents | eb63fbe60fab |
children | a822560a3ce3 |
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) | |
59 { | |
60 if (c == '%' || c == '#') | |
61 continue; | |
3427 | 62 else if (discard_space && c == ' ') |
63 { | |
64 discard_space = false; | |
65 continue; | |
66 } | |
3295 | 67 else |
68 begin_comment = false; | |
69 } | |
70 | |
71 if (in_comment) | |
72 { | |
73 if (! have_help_text) | |
74 { | |
75 first_comments_seen = true; | |
76 help_txt += (char) c; | |
77 } | |
78 | |
79 if (c == '\n') | |
80 { | |
81 in_comment = false; | |
3427 | 82 discard_space = true; |
3295 | 83 |
3575 | 84 if ((c = std::cin.get ()) != EOF) |
3295 | 85 { |
86 if (c == '\n') | |
87 break; | |
88 } | |
89 else | |
90 break; | |
91 } | |
92 } | |
93 else | |
94 { | |
95 switch (c) | |
96 { | |
97 case ' ': | |
98 case '\t': | |
99 if (first_comments_seen) | |
100 have_help_text = true; | |
101 break; | |
102 | |
103 case '\n': | |
104 if (first_comments_seen) | |
105 have_help_text = true; | |
106 continue; | |
107 | |
108 case '%': | |
109 case '#': | |
110 begin_comment = true; | |
111 in_comment = true; | |
112 break; | |
113 | |
114 default: | |
115 goto done; | |
116 } | |
117 } | |
118 } | |
119 | |
120 done: | |
121 | |
122 if (! help_txt.empty ()) | |
123 { | |
124 if (looks_like_octave_copyright (help_txt)) | |
125 help_txt.resize (0); | |
126 | |
127 if (help_txt.empty ()) | |
128 help_txt = extract_help_text (); | |
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" |
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
156 << "@c " << file_name << "\n" |
71fca0fc2436
save source file names for functions as comments in .texi files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
157 << help_text; |
3295 | 158 |
159 if (help_text[help_text.length () - 1] != '\n') | |
3576 | 160 std::cout << "\n"; |
3295 | 161 } |
162 | |
163 return 0; | |
164 } |