Files
hexapoda/export config.swift
T
2026-04-25 22:17:44 -05:00

69 lines
1.7 KiB
Swift
Executable File

#!/usr/bin/swift
import Foundation
func camelCaseToSnakeCase(_ string: Substring) -> String {
var output = string.first?.lowercased() ?? ""
var previousCharacterWasUppercase = false
for character in string.dropFirst() {
if character.isUppercase {
if previousCharacterWasUppercase {
output.append(character.lowercased())
} else {
output += "_\(character.lowercased())"
previousCharacterWasUppercase = true
}
} else if character.isNumber {
output += "_\(character)"
previousCharacterWasUppercase = false
} else {
output.append(character)
previousCharacterWasUppercase = false
}
}
return output
}
let defaultConfigPath = URL(filePath: "src/config/default.rs")
let lines = try String(contentsOf: defaultConfigPath, encoding: .utf8)
.split(separator: "\n", omittingEmptySubsequences: false)
.dropFirst(14)
.dropLast(6)
precondition(lines.first!.contains("Mode::Normal"))
var mode: String?
for line in lines {
if let match = line.wholeMatch(of: #/.*Mode::(?'mode'\w*),.*/#) {
mode = match.output.mode.lowercased()
} else if line.contains("None") {
print("[\(mode!)]")
} else if let match = line.wholeMatch(of: #/.*PartialAction::(?'partialAction'\w*).*/#) {
let partialAction = match.output.partialAction.lowercased()
print("[\(mode!).\(partialAction)]")
} else if let match = line.wholeMatch(of: #/.*\(keypress\("(?'keypress'.*?)"\), (?'action'.*?)\.into\(\)\).*/#) {
if match.output.keypress.contains(where: { !($0.isLetter || $0.isNumber) }) {
print(
"\"\(match.output.keypress)\"",
"=",
"\"\(camelCaseToSnakeCase(match.output.action))\""
)
} else {
print(
match.output.keypress,
"=",
"\"\(camelCaseToSnakeCase(match.output.action))\""
)
}
} else {
print()
}
}