@@ -28,8 +28,8 @@ import javax.xml.parsers.DocumentBuilderFactory
2828import kotlin.io.path.Path
2929import kotlin.io.path.createParentDirectories
3030
31- // vk.xml: 2025-06-29
32- // video.xml: 2025-06-29
31+ // vk.xml: 2025-07-23
32+ // video.xml: 2025-07-23
3333
3434const val vulkanPackage = " overrungl.vulkan"
3535
@@ -288,6 +288,10 @@ fun main() {
288288 val defineVkVersion = mutableMapOf<String , String >()
289289 val addedStructPackages = mutableSetOf<String >()
290290 val typeNodeList = (root.getElementsByTagName(" types" ).item(0 ) as Element ).getElementsByTagName(" type" )
291+ val appendedStructContent = mutableMapOf<String , String >() // struct content without braces
292+ val aliasedStruct = mutableMapOf<String , String >()
293+ val aliasedStructPackageName = mutableMapOf<String , String >()
294+ val aliasedStructCategory = mutableMapOf<String , String >()
291295 for (i in 0 until typeNodeList.length) {
292296 val typeNode = typeNodeList.item(i) as Element
293297 when (val category = typeNode.getAttribute(" category" )) {
@@ -351,40 +355,46 @@ fun main() {
351355 }
352356
353357 " struct" , " union" -> {
358+ val structContent = StringBuilder ()
354359 val name = typeNode.getAttribute(" name" )
360+ val vendor = vendors.find { name.endsWith(it) }
361+ val packageName: String
362+ if (vendor != null ) {
363+ val lowercase = vendor.lowercase()
364+ packageName = " $vulkanPackage .$lowercase .$category "
365+ } else {
366+ packageName = " $vulkanPackage .$category "
367+ }
368+ addedStructPackages.add(packageName)
355369 if (typeNode.hasAttribute(" alias" )) {
356370 val alias = typeNode.getAttribute(" alias" )
357- structBuilder.appendLine(" using $name = $alias ;" )
371+ aliasedStruct[name] = alias
372+ aliasedStructPackageName[name] = packageName
373+ aliasedStructCategory[name] = category
358374 } else {
359- val vendor = vendors.find { name.endsWith(it) }
360- val packageName: String
361- if (vendor != null ) {
362- val lowercase = vendor.lowercase()
363- packageName = " $vulkanPackage .$lowercase .$category "
364- } else {
365- packageName = " $vulkanPackage .$category "
366- }
367- addedStructPackages.add(packageName)
368- structBuilder.appendLine(""" using $name = $category $name { package "$packageName ";""" )
369375 val memberNodeList = typeNode.getElementsByTagName(" member" )
370376 for (i1 in 0 until memberNodeList.length) {
371377 val memberNode = memberNodeList.item(i1) as Element
372378 if (memberNode.hasAttribute(" api" ) && memberNode.getAttribute(" api" ) == " vulkansc" ) {
373379 continue
374380 }
375381 val childNodeList = memberNode.childNodes
376- structBuilder .append(" " )
382+ structContent .append(" " )
377383 for (i2 in 0 until childNodeList.length) {
378384 when (val node = childNodeList.item(i2)) {
379- is Text -> structBuilder .append(node.wholeText)
385+ is Text -> structContent .append(node.wholeText)
380386 is Element -> if (node.tagName != " comment" ) {
381- structBuilder .append(node.textContent)
387+ structContent .append(node.textContent)
382388 }
383389 }
384390 }
385- structBuilder .appendLine(" ;" )
391+ structContent .appendLine(" ;" )
386392 }
393+
394+ structBuilder.appendLine(""" using $name = $category $name { package "$packageName ";""" )
395+ structBuilder.append(structContent)
387396 structBuilder.appendLine(" };" )
397+ appendedStructContent[name] = structContent.toString()
388398 }
389399 }
390400
@@ -433,6 +443,13 @@ fun main() {
433443 }
434444 }
435445
446+ // aliased struct
447+ aliasedStruct.forEach { (name, alias) ->
448+ structBuilder.appendLine(""" using $name = ${aliasedStructCategory[name]} $name { package "${aliasedStructPackageName[name]} ";""" )
449+ structBuilder.append(appendedStructContent[alias] ? : throw IllegalStateException (" $name -> $alias " ))
450+ structBuilder.appendLine(" };" )
451+ }
452+
436453 // enums
437454 val enumsBuilder = StringBuilder ()
438455 root.getElementsByTagName(" enums" ).also { enumsNodeList ->
0 commit comments