You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegraphics/ksvg/scripts/makeimpl

441 lines
9.2 KiB

function printtoctor( aa )
{
ctor = ctor aa
}
function printtodtor( aa )
{
dtor = dtor aa
}
function printtofunc( aa )
{
fun = fun aa
}
function printp( a )
{
#printf a >> "PRIVATE"
private = private a
}
function printg( a )
{
printf a >> FILENAME "Impl.h"
}
function printh( a )
{
printf a >> FILENAME "Impl.cc"
}
function doFuncCC( a, class )
{
gsub("attribute", "", $0)
nr = split($0, b, " ")
# do method
i = 1
while ( i < nr && b[i + 1] != "(" )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printtofunc( var "Impl " )
else
printtofunc( var " " )
}
printtofunc( class "::" );
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" )
#if(b[i + 1] != "float" && match(b[i + 1], "unsigned") == 0)
{
float = "ok"
printtofunc( "const " )
}
else
{
float = "bad"
}
i++
while ( i + 1 < nr && b[i + 1] != "in" && b[i + 1] != ");" )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printtofunc( var "Impl " )
else
printtofunc( var " " )
}
if( float == "ok")
{
printtofunc( "&" b[i++] )
}
else
{
printtofunc( b[i++] )
}
if( i < nr ) printtofunc( " " )
}
else
printtofunc( b[i++] )
}
printtofunc( ")\n{\n}\n\n" );
}
function doFunc( a )
{
gsub("attribute", "", $0)
nr = split($0, b, " ")
printg( "\t" )
# do method
i = 1
while ( i < nr && b[i + 1] != "(" )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printg( var "Impl " )
else
printg( var " " )
}
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] != ");" )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printg( var "Impl " )
else
printg( var " " )
}
if( float == "ok")
{
if( b[ i ] != "in" ) printg( "&" b[i++] )
}
else
{
if( b[ i ] != "in" ) 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" )
{
float = "ok"
printg( "const " )
}
else
{
float = "bad"
}
while ( i < nr )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printg( var "Impl" )
else
printg( var )
if( i < nr ) printg( " " )
}
if( float == "ok")
printg( " &" )
else
printg( " " )n
printg( b[nr] ");\n" )
# do put method .cc
printtofunc( "void " clas "::set" )
printtofunc( toupper( substr( b[nr], 1, 1) ) )
printtofunc( substr( b[nr], 2) "(" )
i = 1
if(b[i] != "float" && b[i] != "unsigned" && b[i] != "short" && b[i] != "bool" )
{
float = "ok"
printtofunc( "const " )
}
else
{
float = "bad"
}
while ( i < nr )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printtofunc( var "Impl" )
else
printtofunc( var )
if( i < nr ) printtofunc( " " )
}
if( float == "ok")
printtofunc( " &" )
else
printtofunc( " " )
printtofunc( b[nr] ")\n{\n\tm_" b[nr] " = " b[nr] ";\n}\n\n" )
# do get method .h
i = 1
printg( "\t" )
while ( i < nr )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printg( var "Impl *" )
else
printg( var " " )
}
sub( ";", "", b[nr])
sub( "\r", "", b[nr])
$temp = b[nr]
printg( $temp "() const;\n" )
# do get method .cc
i = 1
while ( i < nr )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printtofunc( var "Impl *" )
else
printtofunc( var " " )
}
sub( ";", "", b[nr])
sub( "\r", "", b[nr])
$temp = b[nr]
printtofunc( clas "::" $temp "() const\n{\n\treturn m_" $temp )
printtofunc( ";\n}\n\n" )
# do var
i = 1
printp( "\t" )
while ( i < nr )
{
var = b[i++]
if(match(var, "SVG") != 0 )
{
var = var "Impl"
printp( var " *" )
}
else
printp( var " " )
}
printp( "m_" )
#printp( toupper( substr( b[nr], 1, 1) ) )
printp( substr( b[nr], 1) ";\n" )
#add to ctor + dtor
if(match(var, "SVG") != 0)
{
printtoctor("\tm_" substr( b[nr], 1) " = new " var "();\n" )
printtoctor("\tm_" substr( b[nr], 1) "->ref();\n\n" )
printtodtor("\tif(m_" substr( b[nr], 1) ")\n" )
printtodtor("\t\tm_" substr( b[nr], 1) "->deref();\n\n" )
}
}
function doReadonlyAttr( a, class )
{
gsub("readonly attribute", "", $0)
nr = split($0, b, " ")
# do get method .h
i = 1
printg( "\t" )
while ( i < nr )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printg( var "Impl *" )
else
printg( var " " )
}
sub( ";", "", b[nr])
sub( "\r", "", b[nr])
$temp = b[nr]
printg( $temp "() const;\n" )
# do get method .cc
i = 1
while ( i < nr )
{
var = b[i++]
if(match(var, "SVG") != 0 )
printtofunc( var "Impl *" )
else
printtofunc( var " " )
}
sub( ";", "", b[nr])
sub( "\r", "", b[nr])
$temp = b[nr]
printtofunc( clas "::" $temp "() const\n{\n\treturn m_" $temp )
printtofunc( ";\n}\n\n" )
# do var
i = 1
printp( "\t" )
while ( i < nr )
{
var = b[i++]
if(match(var, "SVG") != 0 )
{
var = var "Impl"
printp( var " *" )
}
else
printp( var " " )
}
printp( "m_" )
printp( substr( b[nr], 1) ";\n" )
#add to ctor + dtor
if(match(var, "SVG") != 0)
{
printtoctor("\tm_" substr( b[nr], 1) " = new " var "();\n" )
printtoctor("\tm_" substr( b[nr], 1) "->ref();\n\n" )
printtodtor("\tif(m_" substr( b[nr], 1) ")\n" )
printtodtor("\t\tm_" substr( b[nr], 1) "->deref();\n\n" )
}
}
{
sub("boolean", "bool", $0); # to shut up frerich :P
# Frerich: Thank you :-)
if(/interface /)
{
private = "\nprivate:\n";
gsub(" interface ", "", $0)
gsub(": ", ": public ", $0)
gsub(",", ", public", $0)
gsub("{", "\n{", $0)
sub( ";", "", $0 )
sub( "\r", "", $0 )
printg( "\nclass " )
#printg( $0 )
#printg( "\npublic:\n" )
nr = split($0, b, " ")
clas = b[1] "Impl"
printg( clas " " )
i = 2
while ( i < nr )
{
if(match(b[i], "SVG") != 0 )
{
if(match(b[i], ",") != 0)
sub( ",", "Impl," , b[i])
else
b[i] = b[i] "Impl"
}
printg( b[i++] " " )
}
printg( "\n{\npublic:\n" )
printg( "\t" clas "();\n" )
#printg( "\t" clas "(const " clas " &other)" )
#if( nr > 2 )
#{
# i = 2
# sub( ":", " : ", b[i] )
# while ( i < nr )
# {
# sub( "public", "", b[i] )
# sub( ",", "(), ", b[i] )
# printg( b[i++] )
# }
# printg( "()" )
#}
#printg( " { *this = other; }\n" )
printg( "\tvirtual ~" clas "();\n\n" )
#printg( "\t" clas " &operator=(const " clas " &other);\n\n" )
# CC part
#printh( "// " b[1] " implementation \n\n" )
printtoctor( clas "::" clas "()" )
if( nr > 2 )
{
i = 2
sub( ":", " : ", b[i] )
while ( i < nr )
{
sub( "public", "",b[i] )
sub( ",", "(), ", b[i] )
printtoctor( b[i++] )
}
printtoctor( "()" )
}
printtoctor( "\n{\n" )
printtodtor( clas "::~" clas "()\n{\n" )
#printh( clas " &" clas "::operator =(const " clas " &other)\n{\n\treturn *this;\n}\n\n" )
}
else if(/readonly attribute/)
{
doReadonlyAttr( $0, $class )
}
else if(/attribute /)
{
doAttr( $0, $class )
}
else if(/raises/)
{
}
else if(/\)/)
{
doFuncCC( $0, clas );
doFunc( $0 );
}
else if(/};/)
{
printg(private)
printg( "};\n\n" );
printh( "\n" ctor )
printh( "}\n\n" )
ctor = ""
printh( dtor )
printh( "}\n\n" )
dtor = ""
printh( fun )
fun = ""
}
else if(/ = /)
{
# sub( "\r", "", $0 )
# printg( $0 "\n" );
}
#else if(//)
#{
# # end of class
# printf $0;
#}
}
# END
# {
# print "};";
# }