src/ai/api/squirrel_export.awk
branchnoai
changeset 9532 539c48d64eea
parent 9527 f709c97a5d9f
child 9533 2c692ffdf5e4
equal deleted inserted replaced
9531:6a2e35738593 9532:539c48d64eea
    16 	return
    16 	return
    17 }
    17 }
    18 
    18 
    19 BEGIN {
    19 BEGIN {
    20 	enum_size = 0
    20 	enum_size = 0
       
    21 	enum_value_size = 0
    21 	struct_size = 0
    22 	struct_size = 0
    22 	method_size = 0
    23 	method_size = 0
    23 	enum_value_size = 0
    24 	static_method_size = 0
    24 	cls = ""
    25 	cls = ""
    25 	start_squirrel_define_on_next_line = "false"
    26 	start_squirrel_define_on_next_line = "false"
    26 	cls_level = 0
    27 	cls_level = 0
    27 }
    28 }
    28 
    29 
   118 	print "void SQ" cls "Register(Squirrel *engine) {"
   119 	print "void SQ" cls "Register(Squirrel *engine) {"
   119 	print "	DefSQClass <" cls "> SQ" cls "(\"" cls "\");"
   120 	print "	DefSQClass <" cls "> SQ" cls "(\"" cls "\");"
   120 	print "	SQ" cls ".PreRegister(engine);"
   121 	print "	SQ" cls ".PreRegister(engine);"
   121 	print "	SQ" cls ".AddConstructor(engine);"
   122 	print "	SQ" cls ".AddConstructor(engine);"
   122 	print ""
   123 	print ""
       
   124 
       
   125 	# Enum values
   123 	mlen = 0
   126 	mlen = 0
   124 	for (i = 1; i <= enum_value_size; i++) {
   127 	for (i = 1; i <= enum_value_size; i++) {
   125 		if (mlen <= length(enum_value[i])) mlen = length(enum_value[i])
   128 		if (mlen <= length(enum_value[i])) mlen = length(enum_value[i]) + 1
   126 	}
   129 	}
       
   130 	for (i = 1; i <= enum_value_size; i++) {
       
   131 		print "	SQ" cls ".DefSQConst   (engine, " cls "::" enum_value[i] ", " substr(spaces, 0, mlen - length(enum_value[i])) "\""  enum_value[i] "\");"
       
   132 		delete enum_value[i]
       
   133 	}
       
   134 	if (enum_value_size != 0) print ""
       
   135 
       
   136 	# Static methods
       
   137 	mlen = 0
       
   138 	for (i = 1; i <= static_method_size; i++) {
       
   139 		if (mlen <= length(static_methods[i])) mlen = length(static_methods[i]) + 1
       
   140 	}
       
   141 	for (i = 1; i <= static_method_size; i++) {
       
   142 		print "	SQ" cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i] ", " substr(spaces, 0, mlen - length(static_methods[i])) "\""  static_methods[i] "\");"
       
   143 		delete static_methods[i]
       
   144 	}
       
   145 	if (static_method_size != 0) print ""
       
   146 
       
   147 	# Non-static methods
       
   148 	mlen = 0
   127 	for (i = 1; i <= method_size; i++) {
   149 	for (i = 1; i <= method_size; i++) {
   128 		if (mlen <= length(methods[i])) mlen = length(methods[i]) + 1 #one character (&) longer
   150 		if (mlen <= length(methods[i])) mlen = length(methods[i]) + 1
   129 	}
   151 	}
   130 
       
   131 	for (i = 1; i <= enum_value_size; i++) {
       
   132 		print "	SQ" cls ".DefSQConst   (engine, " cls "::" enum_value[i] ", " substr(spaces, 0, mlen - length(enum_value[i]) + 1) "\""  enum_value[i] "\");"
       
   133 		delete enum_value[i]
       
   134 	}
       
   135 	if (enum_value_size != 0) print ""
       
   136 
       
   137 
       
   138 	for (i = 1; i <= method_size; i++) {
   152 	for (i = 1; i <= method_size; i++) {
   139 		print "	SQ" cls ".DefSQFunction(engine, &" cls "::" methods[i] ", " substr(spaces, 0, mlen - length(methods[i])) "\""  methods[i] "\");"
   153 		print "	SQ" cls ".DefSQMethod(engine, &" cls "::" methods[i] ", " substr(spaces, 0, mlen - length(methods[i])) "\""  methods[i] "\");"
   140 		delete methods[i]
   154 		delete methods[i]
   141 	}
   155 	}
   142 	print ""
   156 	if (method_size != 0) print ""
       
   157 
   143 	print "	SQ" cls ".PostRegister(engine);"
   158 	print "	SQ" cls ".PostRegister(engine);"
   144 	print "}"
   159 	print "}"
   145 
   160 
   146 	print "#endif /* DEFINE_SQUIRREL_CLASS */"
   161 	print "#endif /* DEFINE_SQUIRREL_CLASS */"
   147 
   162 
       
   163 	enum_size = 0
       
   164 	enum_value_size = 0
       
   165 	struct_size = 0
       
   166 	method_size = 0
       
   167 	static_method_size = 0
   148 	cls = ""
   168 	cls = ""
   149 	start_squirrel_define_on_next_line = "false"
   169 	start_squirrel_define_on_next_line = "false"
   150 	enum_size = 0
   170 	cls_level = 0
   151 	struct_size = 0
       
   152 	method_size = 0
       
   153 }
   171 }
   154 
   172 
   155 # Skip non-public functions
   173 # Skip non-public functions
   156 { if (public == "false") next }
   174 { if (public == "false") next }
   157 
   175 
   165 }
   183 }
   166 
   184 
   167 # Add a method to the list
   185 # Add a method to the list
   168 /^.*$/ {
   186 /^.*$/ {
   169 	if (cls_level != 1) next
   187 	if (cls_level != 1) next
       
   188 
       
   189 	is_static = match($0, "static")
   170 	gsub("virtual", "", $0)
   190 	gsub("virtual", "", $0)
   171 	gsub("static", "", $0)
   191 	gsub("static", "", $0)
       
   192 	gsub("const", "", $0)
   172 	gsub("\*", "", $0)
   193 	gsub("\*", "", $0)
   173 	gsub("\(.*", "", $0)
   194 	gsub("\(.*", "", $0)
   174 	if ($2 == "") next
   195 	if ($2 == "") next
   175 	method_size++
   196 	if (is_static) {
   176 	methods[method_size] = $2
   197 		static_method_size++
       
   198 		static_methods[static_method_size] = $2
       
   199 	} else {
       
   200 		method_size++
       
   201 		methods[method_size] = $2
       
   202 	}
   177 	next
   203 	next
   178 }
   204 }