Files
imgui-java/imgui-binding/scripts/struct_to_java.groovy
T

82 lines
2.2 KiB
Groovy

def inputTxt = new File(args[0]).text
def outputFile = new File(args[1])
def jStructName = args[2] as String
outputFile.text = ''
inputTxt = inputTxt
.replace('ImGuiID', 'int')
.replace('bool', 'boolean')
.replace('char*', 'String')
.replace('const char*', 'String')
def regex = ~'(\\w+)\\s+(\\w+)(?:.*?//(.+))?'
inputTxt.eachLine { line ->
def trimmedLine = line.trim()
if (!trimmedLine.contains(';') || trimmedLine.startsWith('#'))
return
def m = regex.matcher(trimmedLine)
def fieldType
def fieldName
def fieldComment
m.find()
fieldType = m.group(1)
fieldName = m.group(2)
fieldComment = m.group(3)?.trim()
def javadoc = null
if (fieldComment) {
javadoc = """ /**
| * $fieldComment
| */""".stripMargin()
}
def classTxt
if (fieldType == 'ImVec2') {
classTxt = """
|${javadoc ? javadoc : ''}
| public native void get${fieldName.capitalize()}(ImVec2 dstImVec2); /*
| Jni::ImVec2Cpy(env, &$jStructName->$fieldName, dstImVec2);
| */
|
|${javadoc ? javadoc : ''}
| public native float get${fieldName.capitalize()}X(); /*
| return $jStructName->${fieldName}.x;
| */
|
|${javadoc ? javadoc : ''}
| public native float get${fieldName.capitalize()}Y(); /*
| return $jStructName->${fieldName}.y;
| */
|
|${javadoc ? javadoc : ''}
| public native void set${fieldName.capitalize()}(float x, float y); /*
| $jStructName->${fieldName}.x = x;
| $jStructName->${fieldName}.y = y;
| */
""".stripMargin()
} else {
classTxt = """
|${javadoc ? javadoc : ''}
| public native $fieldType get${fieldName.capitalize()}(); /*
| return $jStructName->$fieldName;
| */
|
|${javadoc ? javadoc : ''}
| public native void set${fieldName.capitalize()}($fieldType ${fieldName.uncapitalize()}); /*
| $jStructName->$fieldName = ${fieldName.uncapitalize()};
| */
""".stripMargin()
}
outputFile << classTxt
}