81 lines
2.5 KiB
Swift
81 lines
2.5 KiB
Swift
//
|
|
// String.swift
|
|
// Adwaita
|
|
//
|
|
// Created by david-swift on 14.01.24.
|
|
//
|
|
|
|
extension String: @retroactive CodingKey {
|
|
|
|
/// The string.
|
|
public var stringValue: String {
|
|
self
|
|
}
|
|
|
|
/// A string cannot be represented as an integer.
|
|
public var intValue: Int? {
|
|
nil
|
|
}
|
|
|
|
/// Initialize from an int value.
|
|
/// - Parameter intValue: The int value.
|
|
public init?(intValue: Int) {
|
|
nil
|
|
}
|
|
|
|
/// Initialize from a string value.
|
|
/// - Parameter stringValue: The string value.
|
|
public init?(stringValue: String) {
|
|
self = stringValue
|
|
}
|
|
|
|
/// Generate a doc comment out of the string.
|
|
/// - Parameter indent: Indentation added at the beginning of every line.
|
|
/// - Returns: The comment.
|
|
func docComment(indent: String = "") -> String {
|
|
split(separator: "\n", omittingEmptySubsequences: false)
|
|
.map { $0.trimmingCharacters(in: .whitespaces) }
|
|
.enumerated()
|
|
.map { $0.offset == 0 ? $0.element.prefix(1).capitalized + $0.element.dropFirst() : $0.element }
|
|
.map { "\(indent)/// \($0)" }
|
|
.joined(separator: "\n")
|
|
}
|
|
|
|
/// Convert delimited to camel casing.
|
|
/// - Parameters:
|
|
/// - delimiter: The demiliter.
|
|
/// - unshorten: Whether to unshorten.
|
|
/// - configuration: The generation configuration.
|
|
/// - Returns: The string using camel casing.
|
|
func convertDelimitedCasingToCamel(
|
|
delimiter: Character,
|
|
configuration: GenerationConfiguration,
|
|
unshorten: Bool = false
|
|
) -> String {
|
|
var parts = split(separator: delimiter).map(String.init)
|
|
for (index, part) in parts.enumerated() {
|
|
if let replacement = configuration.unshorteningMap[part] {
|
|
parts[index] = replacement
|
|
}
|
|
}
|
|
let first = parts.removeFirst()
|
|
return first + parts.map(\.capitalized).joined()
|
|
}
|
|
|
|
/// Convert a C type to its Swift equivalent using the generation configuration.
|
|
/// - Parameter configuration: The generation configuration.
|
|
/// - Returns: The Swift type.
|
|
func convertCType(configuration: GenerationConfiguration) -> String {
|
|
if let replacement = configuration.cTypeReplacements[self] {
|
|
return replacement
|
|
}
|
|
var type = self
|
|
if type.last == "*" {
|
|
let pointeeType = String(type.dropLast()).convertCType(configuration: configuration)
|
|
type = "UnsafeMutablePointer<\(pointeeType)>!"
|
|
}
|
|
return type
|
|
}
|
|
|
|
}
|