function printg( a ) { printf a >> FILENAME ".h" } function doFunc( a ) { gsub("attribute", "", $0) nr = split($0, b, " ") printg( "\t" ) # do method i = 1 while ( i < nr && b[i + 1] != "(" ) { printg( b[i++] ) printg( " " ) } while ( i < nr && b[i + 1] != ");" ) { if( b[i] == "in" ) { if( b[i + 1] != "float" && b[i + 1] != "unsigned" && b[i+1] != "short" && b[i+1] != "bool" ) { float = "ok" printg( "const " ) } else float = "bad" i++ while ( i + 1 < nr && b[i + 1] != "in" && b[i + 1] != ");" ) { printg( b[i++] " " ) #if( b[ i ] != ");" ) printg( " " ) } if( float == "ok" ) printg( "&" b[i++] ) else printg( b[i++] ) if( i < nr ) printg( " " ) } else printg( b[i++] ) } printg( ");\n" ); } function doAttr( a, class ) { sub( ";", "", a) sub( "\r", "", a) gsub("attribute", "", a) nr = split(a, b, " ") # do put method printg( "\tvoid set" ) printg( toupper( substr( b[nr], 1, 1) ) ) printg( substr( b[nr], 2) "(" ) i = 1 if( b[i] != "float" && b[i] != "unsigned" && b[i] != "short" && b[i] != "bool" ) #if( b[i] != "float" && match( b[i], "unsigned") == 0) { float = "ok" printg( "const " ) } else float = "bad" while ( i < nr ) { printg( b[i++] ) if( i < nr ) printg( " " ) } if( float == "ok" ) printg( " &" ) else printg( " " ) printg( b[nr] ");\n" ) # do get method printg("\t") i = 1 while ( i < nr ) { printg( b[i++] " " ) } $temp = b[nr] printg( $temp "() const;" ) printg( "\n\n" ) } function doReadonlyAttr( a, class ) { gsub("readonly attribute", "", $0) nr = split($0, b, " ") # do get method i = 1 printg("\t") while ( i < nr ) { printg( b[i++] " " ) } sub( ";", "", b[nr]) sub( "\r", "", b[nr]) $temp = b[nr] printg( $temp "() const;" ) printg( "\n" ) } { sub("boolean", "bool", $0); # to shut up frerich :P if(/interface /) { gsub(" interface ", "", $0) gsub(": ", ": public ", $0) gsub(",", ", public", $0) gsub("{", "\n{", $0) sub( ";", "", $0 ) sub( "\r", "", $0 ) nr = split($0, b, " ") clas = b[1] printg( "class " clas "Impl;" ) printg( "\nclass " ) printg( $0 ) printg( "\npublic:\n" ) printg( "\t" clas "();\n" ) printg( "\t" clas "(const " clas " &other);\n" ) printg( "\t" clas " &operator=(const " clas " &other);\n" ) printg( "\t" clas "(" clas "Impl *other);\n" ) printg( "\tvirtual ~" clas "();\n\n" ) #printg( "\tbool isNull() const { return !impl; }\n" ) } else if(/readonly attribute/) { doReadonlyAttr( $0, $class ) } else if(/attribute /) { doAttr( $0, $class ) } else if(/raises/) { } else if(/\)/) { doFunc( $0 ); } else if(/};/) { printg( "private:\n\t" clas "Impl *impl;\n};\n\n" ); } else if(/ = /) { sub( "\r", "", $0 ) printg( $0 "\n" ); } #else if(//) #{ # # end of class # printf $0; #} } # END # { # print "};"; # }