14
14
namespace clang {
15
15
namespace mrdox {
16
16
17
- namespace {
18
-
19
17
// ------------------------------------------------
20
18
//
21
19
// AsciidocGenerator
@@ -101,7 +99,8 @@ buildOne(
101
99
}
102
100
103
101
Writer w (corpus, config, R);
104
- return w.buildOne (os);
102
+ w.writeOne (os);
103
+ return ! os.has_error ();
105
104
}
106
105
107
106
bool
@@ -115,75 +114,238 @@ buildString(
115
114
dest.clear ();
116
115
llvm::raw_string_ostream os (dest);
117
116
Writer w (corpus, config, R);
118
- return w.buildOne (os);
117
+ w.writeOne (os);
118
+ return true ;
119
119
}
120
120
121
+ // ------------------------------------------------
122
+ //
123
+ // Writer
124
+ //
121
125
// ------------------------------------------------
122
126
123
- #if 0
124
- llvm::Error
127
+ void
128
+ AsciidocGenerator::
129
+ Writer::
130
+ write (
131
+ llvm::StringRef rootDir)
132
+ {
133
+ }
134
+
135
+ void
136
+ AsciidocGenerator::
137
+ Writer::
138
+ writeOne (
139
+ llvm::raw_ostream& os)
140
+ {
141
+ os_ = &os;
142
+ openSection (" Reference" );
143
+ writeAllSymbols ();
144
+ closeSection ();
145
+ }
146
+
147
+ // ------------------------------------------------
148
+
149
+ void
125
150
AsciidocGenerator::
126
- generateDocForInfo(
127
- Info* I,
128
- llvm::raw_ostream& os,
129
- const Config& config)
151
+ Writer::
152
+ writeAllSymbols ()
130
153
{
131
- switch (I->IT )
154
+ for ( auto const & id : corpus_. allSymbols )
132
155
{
133
- case InfoType::IT_namespace:
134
- makeNamespacePage(config, *static_cast<clang::mrdox::NamespaceInfo*>(I), os);
135
- break;
136
- case InfoType::IT_record:
137
- genMarkdown(config, *static_cast<clang::mrdox::RecordInfo*>(I), os);
138
- break;
139
- case InfoType::IT_enum:
140
- genMarkdown(config, *static_cast<clang::mrdox::EnumInfo*>(I), os);
141
- break;
142
- case InfoType::IT_function:
143
- genMarkdown(config, *static_cast<clang::mrdox::FunctionInfo*>(I), os);
144
- break;
145
- case InfoType::IT_typedef:
146
- genMarkdown(config, *static_cast<clang::mrdox::TypedefInfo*>(I), os);
147
- break;
148
- case InfoType::IT_default:
149
- return llvm::createStringError(llvm::inconvertibleErrorCode(),
150
- "unexpected InfoType");
156
+ auto const & I = corpus_.at (id);
157
+ switch (I.IT )
158
+ {
159
+ case InfoType::IT_function:
160
+ write (static_cast <FunctionInfo const &>(I));
161
+ break ;
162
+ default :
163
+ break ;
164
+ }
151
165
}
152
- return llvm::Error::success();
153
166
}
154
- #endif
155
167
156
168
// ------------------------------------------------
157
- //
158
- // Writer
159
- //
169
+
170
+ struct AsciidocGenerator ::Writer::
171
+ FormalParam
172
+ {
173
+ FieldTypeInfo const & I;
174
+ Writer& w;
175
+
176
+ friend
177
+ llvm::raw_ostream&
178
+ operator <<(
179
+ llvm::raw_ostream& os,
180
+ FormalParam const & t)
181
+ {
182
+ t.w .write (t, os);
183
+ return os;
184
+ }
185
+ };
186
+
187
+ struct AsciidocGenerator ::Writer::
188
+ TypeName
189
+ {
190
+ TypeInfo const & I;
191
+ Writer& w;
192
+
193
+ friend
194
+ llvm::raw_ostream&
195
+ operator <<(
196
+ llvm::raw_ostream& os,
197
+ TypeName const & t)
198
+ {
199
+ t.w .write (t, os);
200
+ return os;
201
+ }
202
+ };
203
+
160
204
// ------------------------------------------------
161
205
162
- bool
206
+ void
207
+ AsciidocGenerator::
163
208
Writer::
164
- build (
165
- llvm::StringRef rootDir )
209
+ write (
210
+ FunctionInfo const & I )
166
211
{
167
- return true ;
212
+ openSection (I.Name );
213
+ *os_ << I.javadoc .brief << " \n\n " ;
214
+
215
+ openSection (" Synopsis" );
216
+ *os_ <<
217
+ " Located in <" <<
218
+ I.Loc [0 ].Filename << " >\n " <<
219
+ " [,cpp]\n "
220
+ " ----\n " ;
221
+
222
+ // params
223
+ if (! I.Params .empty ())
224
+ {
225
+ *os_ <<
226
+ typeName (I.ReturnType ) << ' \n ' <<
227
+ I.Name << " (\n "
228
+ " " << formalParam (I.Params [0 ]);
229
+ for (std::size_t i = 1 ; i < I.Params .size (); ++i)
230
+ {
231
+ *os_ << " ,\n "
232
+ " " << formalParam (I.Params [i]);
233
+ }
234
+ *os_ << " );\n " ;
235
+ }
236
+ else
237
+ {
238
+ *os_ << I.Name << " ();" << " \n " ;
239
+ }
240
+
241
+ *os_ <<
242
+ " ----\n " ;
243
+ closeSection ();
244
+
245
+ if (! I.javadoc .desc .empty ())
246
+ {
247
+ *os_ << " \n " ;
248
+ openSection (" Description" );
249
+ *os_ << I.javadoc .desc << " \n " ;
250
+ closeSection ();
251
+ }
252
+
253
+ closeSection ();
168
254
}
169
255
170
- bool
256
+ // ------------------------------------------------
257
+
258
+ void
259
+ AsciidocGenerator::
171
260
Writer::
172
- buildOne (
261
+ write (
262
+ FormalParam const & t,
173
263
llvm::raw_ostream& os)
174
264
{
175
- return true ;
265
+ assert (&os == os_);
266
+ auto const & I = t.I ;
267
+ *os_ << I.Type .Name << ' ' << I.Name ;
268
+ }
269
+
270
+ auto
271
+ AsciidocGenerator::
272
+ Writer::
273
+ formalParam (
274
+ FieldTypeInfo const & t) ->
275
+ FormalParam
276
+ {
277
+ return FormalParam{ t, *this };
278
+ }
279
+
280
+ // ------------------------------------------------
281
+
282
+ void
283
+ AsciidocGenerator::
284
+ Writer::
285
+ write (
286
+ TypeName const & t,
287
+ llvm::raw_ostream& os)
288
+ {
289
+ assert (&os == os_);
290
+ if (t.I .Type .USR == EmptySID)
291
+ {
292
+ *os_ << t.I .Type .Name ;
293
+ return ;
294
+ }
295
+ auto const & I = corpus_.get <RecordInfo>(t.I .Type .USR );
296
+ // VFALCO add namespace qualifiers if I is in
297
+ // a different namesapce
298
+ *os_ << I.Name ;
299
+ }
300
+
301
+ auto
302
+ AsciidocGenerator::
303
+ Writer::
304
+ typeName (
305
+ TypeInfo const & t) ->
306
+ TypeName
307
+ {
308
+ return TypeName{ t, *this };
309
+ }
310
+
311
+ // ------------------------------------------------
312
+
313
+ void
314
+ AsciidocGenerator::
315
+ Writer::
316
+ openSection (
317
+ llvm::StringRef name)
318
+ {
319
+ sect_.level ++;
320
+ if (sect_.level <= 6 )
321
+ sect_.markup .push_back (' =' );
322
+ *os_ << sect_.markup << ' ' << name << " \n\n " ;
323
+ }
324
+
325
+ void
326
+ AsciidocGenerator::
327
+ Writer::
328
+ closeSection ()
329
+ {
330
+ assert (sect_.level > 0 );
331
+ if (sect_.level <= 6 )
332
+ sect_.markup .pop_back ();
333
+ sect_.level --;
176
334
}
177
335
336
+ // ------------------------------------------------
337
+ // ------------------------------------------------
178
338
// ------------------------------------------------
179
339
340
+ #if 0
341
+
180
342
//
181
343
// Asciidoc generation
182
344
//
183
345
184
346
std::string
185
347
genEmphasis(
186
- Twine const & t)
348
+ llvm:: Twine const& t)
187
349
{
188
350
return "*" + t.str() + "*";
189
351
}
@@ -853,7 +1015,7 @@ genIndex(
853
1015
return llvm::Error::success();
854
1016
}
855
1017
856
- } // (anon)
1018
+ # endif
857
1019
858
1020
// ------------------------------------------------
859
1021
0 commit comments