Generate pages, image descriptions

This commit is contained in:
Christoph Hagen
2024-12-06 21:59:36 +01:00
parent 18eb64f289
commit 5fb689ac7c
42 changed files with 1653 additions and 273 deletions

View File

@@ -0,0 +1,72 @@
import Foundation
enum FileType {
case image(ImageType)
case file(String)
case video(VideoType)
case resource(String)
init(fileExtension: String?) {
guard let ext = fileExtension?.lowercased() else {
self = .file("")
return
}
switch ext {
case "jpg", "jpeg":
self = .image(.jpg)
case "png":
self = .image(.png)
case "avif":
self = .image(.avif)
case "webp":
self = .image(.webp)
case "gif":
self = .image(.gif)
case "html", "stl", "f3d", "step", "f3z", "zip", "json", "conf", "css", "js", "cpp", "cddx", "svg", "glb", "mp3", "pdf", "swift":
self = .file(ext)
case "mp4":
self = .video(.mp4)
case "m4v":
self = .video(.m4v)
case "webm":
self = .video(.webm)
case "key", "psd":
self = .resource(ext)
default:
print("Unhandled file type: \(ext)")
self = .resource(ext)
}
}
var fileExtension: String {
switch self {
case .image(let imageType): return imageType.fileExtension
case .video(let videoType): return videoType.fileExtension
default:
return "" // TODO: Fix
}
}
var isImage: Bool {
if case .image = self {
return true
}
return false
}
var isVideo: Bool {
if case .video = self {
return true
}
return false
}
var videoType: VideoType? {
if case .video(let videoType) = self {
return videoType
}
return nil
}
}

View File

@@ -0,0 +1,53 @@
import Foundation
import AppKit
enum ImageType {
case jpg
case png
case avif
case webp
case gif
var fileExtension: String {
switch self {
case .jpg: return "jpg"
case .png: return "png"
case .avif: return "avif"
case .webp: return "webp"
case .gif: return "gif"
}
}
var fileType: NSBitmapImageRep.FileType {
switch self {
case .jpg:
return .jpeg
case .png, .avif, .webp:
return .png
case .gif:
return .gif
}
}
}
extension ImageType: CaseIterable {
}
extension ImageType {
init?(fileExtension: String) {
switch fileExtension {
case "jpg", "jpeg":
self = .jpg
case "png":
self = .png
case "avif":
self = .avif
case "webp":
self = .webp
default:
return nil
}
}
}

View File

@@ -0,0 +1,36 @@
enum VideoType: String {
case mp4
case m4v
case webm
}
extension VideoType {
var fileExtension: String {
switch self {
case .mp4:
return "mp4"
case .m4v:
return "m4v"
case .webm:
return "webm"
}
}
var htmlType: String {
switch self {
case .mp4, .m4v:
return "video/mp4"
case .webm:
return "video/webm"
}
}
}
extension VideoType: CaseIterable {
}