| 327 | } |
| 328 | |
| 329 | static void dumpClassHeader( Stream &stream, |
| 330 | const char *usage, |
| 331 | const char *className, |
| 332 | const char *superClassName ) |
| 333 | { |
| 334 | if ( usage ) |
| 335 | { |
| 336 | stream.writeText( "/*!\r\n" ); |
| 337 | stream.writeText( usage ); |
| 338 | |
| 339 | const char *group = dStrstr( usage, "@ingroup" ); |
| 340 | if ( group ) |
| 341 | { |
| 342 | char groupName[256] = { 0 }; |
| 343 | dSscanf( group, "@ingroup %s", groupName ); |
| 344 | smDocGroups.insertUnique( groupName, 0 ); |
| 345 | } |
| 346 | #ifdef USE_UNDOCUMENTED_GROUP |
| 347 | else |
| 348 | { |
| 349 | smDocGroups.insertUnique( "UNDOCUMENTED", 0 ); |
| 350 | stream.writeText( "\r\n@ingroup UNDOCUMENTED\r\n" ); |
| 351 | } |
| 352 | #endif |
| 353 | |
| 354 | stream.writeText( "\r\n*/\r\n" ); |
| 355 | } |
| 356 | else |
| 357 | { |
| 358 | // No documentation string. Check whether ther is a separate |
| 359 | // class doc fragement. |
| 360 | |
| 361 | bool haveClassDocFragment = false; |
| 362 | if( className ) |
| 363 | { |
| 364 | char buffer[ 1024 ]; |
| 365 | dSprintf( buffer, sizeof( buffer ), "@class %s", className ); |
| 366 | |
| 367 | for( ConsoleDocFragment* fragment = ConsoleDocFragment::smFirst; |
| 368 | fragment != NULL; fragment = fragment->mNext ) |
| 369 | if( !fragment->mClass && dStrstr( fragment->mText, buffer ) != NULL ) |
| 370 | { |
| 371 | haveClassDocFragment = true; |
| 372 | break; |
| 373 | } |
| 374 | } |
| 375 | #ifdef USE_UNDOCUMENTED_GROUP |
| 376 | if( !haveClassDocFragment ) |
| 377 | { |
| 378 | smDocGroups.insertUnique( "UNDOCUMENTED", 0 ); |
| 379 | stream.writeText( "/*! UNDOCUMENTED!\r\n@ingroup UNDOCUMENTED\r\n */\r\n" ); |
| 380 | } |
| 381 | #endif |
| 382 | } |
| 383 | |
| 384 | // Print out appropriate class header |
| 385 | if ( superClassName ) |
| 386 | stream.writeText( String::ToString( "class %s : public %s {\r\npublic:\r\n", className, superClassName ? superClassName : "" ) ); |
no test coverage detected