@@ -77,7 +77,9 @@ exports.publish = function publish(taffy, opts) {
77
77
}
78
78
79
79
// handle all
80
- getChildrenOf ( undefined ) . forEach ( handleElement ) ;
80
+ getChildrenOf ( undefined ) . forEach ( function ( child ) {
81
+ handleElement ( child , null ) ;
82
+ } ) ;
81
83
82
84
// process queued
83
85
while ( queuedInterfaces . length ) {
@@ -228,7 +230,7 @@ function getTypeOf(element) {
228
230
229
231
// begins writing the definition of the specified element
230
232
function begin ( element , is_interface ) {
231
- writeComment ( element . comment , is_interface || isInterface ( element ) || isClassLike ( element ) || isNamespace ( element ) ) ;
233
+ writeComment ( element . comment , is_interface || isInterface ( element ) || isClassLike ( element ) || isNamespace ( element ) || element . isEnum ) ;
232
234
if ( element . scope !== "global" || options . module || is_interface || isInterface ( element ) )
233
235
return ;
234
236
write ( "export " ) ;
@@ -308,28 +310,43 @@ function writeInterface(element) {
308
310
//
309
311
310
312
// handles a single element of any understood type
311
- function handleElement ( element , parent ) {
313
+ function handleElement ( element , parent , insideClass ) {
312
314
if ( seen [ element . longname ] )
313
- return ;
314
- seen [ element . longname ] = element ;
315
- if ( isClassLike ( element ) )
316
- return handleClass ( element , parent ) ;
317
- switch ( element . kind ) {
315
+ return true ;
316
+ if ( isClassLike ( element ) ) {
317
+ if ( insideClass )
318
+ return false ;
319
+ handleClass ( element , parent ) ;
320
+ } else switch ( element . kind ) {
318
321
case "module" :
319
322
case "namespace" :
320
- return handleNamespace ( element , parent ) ;
323
+ if ( insideClass )
324
+ return false ;
325
+ handleNamespace ( element , parent ) ;
326
+ break ;
321
327
case "constant" :
322
328
case "member" :
323
- return handleMember ( element , parent ) ;
329
+ if ( insideClass && element . isEnum )
330
+ return false ;
331
+ handleMember ( element , parent ) ;
332
+ break ;
324
333
case "function" :
325
- return handleFunction ( element , parent ) ;
334
+ handleFunction ( element , parent ) ;
335
+ break ;
326
336
case "typedef" :
327
- return handleTypeDef ( element , parent ) ;
337
+ if ( insideClass )
338
+ return false ;
339
+ handleTypeDef ( element , parent ) ;
340
+ break ;
341
+ case "package" :
342
+ break ;
328
343
}
344
+ seen [ element . longname ] = element ;
345
+ return true ;
329
346
}
330
347
331
348
// handles (just) a namespace
332
- function handleNamespace ( element , parent ) {
349
+ function handleNamespace ( element /* , parent*/ ) {
333
350
begin ( element ) ;
334
351
writeln ( "namespace " , element . name , " {" ) ;
335
352
++ indent ;
@@ -383,24 +400,25 @@ function handleClass(element, parent) {
383
400
if ( ! is_interface && ! element . virtual )
384
401
handleFunction ( element , parent , true ) ;
385
402
386
- // members except inner classes
387
- var innerClasses = [ ] ;
403
+ // class-compatible members
404
+ var inner = [ ] ;
388
405
getChildrenOf ( element ) . forEach ( function ( child ) {
389
- if ( isClassLike ( child ) )
390
- innerClasses . push ( child ) ;
391
- else
392
- handleElement ( child , element ) ;
406
+ if ( ! handleElement ( child , element , true ) )
407
+ inner . push ( child ) ;
393
408
} ) ;
394
409
395
410
-- indent ;
396
411
writeln ( "}" ) ;
397
412
398
- if ( innerClasses . length ) {
399
- begin ( element ) ;
413
+ // class-incompatible members
414
+ if ( inner . length ) {
415
+ writeln ( ) ;
416
+ if ( element . scope === "global" && ! options . module )
417
+ write ( "export " ) ;
400
418
writeln ( "namespace " , element . name , " {" ) ;
401
419
++ indent ;
402
- innerClasses . forEach ( function ( inner ) {
403
- handleClass ( inner , element ) ;
420
+ inner . forEach ( function ( child ) {
421
+ handleElement ( child , element ) ;
404
422
} ) ;
405
423
-- indent ;
406
424
writeln ( "}" ) ;
@@ -413,11 +431,13 @@ function handleMember(element, parent) {
413
431
414
432
if ( element . isEnum ) {
415
433
416
- writeln ( "enum " , element . name , "{" ) ;
434
+ writeln ( "enum " , element . name , " {" ) ;
417
435
++ indent ;
418
436
element . properties . forEach ( function ( property , i ) {
419
437
writeComment ( property ) ;
420
- write ( p . name ) ;
438
+ write ( property . name ) ;
439
+ if ( property . defaultvalue !== undefined )
440
+ write ( " = " , JSON . stringify ( property . defaultvalue ) ) ;
421
441
if ( i < element . properties . length - 1 )
422
442
writeln ( "," ) ;
423
443
else
0 commit comments