1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
/*
This source file is part of the Swift.org open source project
Copyright (c) 2021-2025 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/
public import Foundation
/// A collection of functions to check if a file is one of the documentation bundle files types.
public enum DocumentationBundleFileTypes {
static let referenceFileExtension = "md"
/// Checks if a file is a reference documentation file.
/// - Parameter url: The file to check.
/// - Returns: Whether or not the file at `url` is a reference documentation file.
public static func isReferenceDocumentationFile(_ url: URL) -> Bool {
return url.pathExtension.lowercased() == referenceFileExtension
}
static let tutorialFileExtension = "tutorial"
/// Checks if a file is a tutorial file.
/// - Parameter url: The file to check.
/// - Returns: Whether or not the file at `url` is a tutorial file.
public static func isTutorialFile(_ url: URL) -> Bool {
return url.pathExtension.lowercased() == tutorialFileExtension
}
private static let markupFileExtensions: Set = [referenceFileExtension, tutorialFileExtension]
/// Checks if a file is a markup file; that is, either a reference documentation file or a tutorial file.
/// - Parameter url: The file to check.
/// - Returns: Whether or not the file at `url` is a markup file.
public static func isMarkupFile(_ url: URL) -> Bool {
return markupFileExtensions.contains(url.pathExtension.lowercased())
}
private static let symbolGraphFileExtension = ".symbols.json"
/// Checks if a file is a symbol graph file.
/// - Parameter url: The file to check.
/// - Returns: Whether or not the file at `url` is a symbol graph file.
public static func isSymbolGraphFile(_ url: URL) -> Bool {
return url.lastPathComponent.hasSuffix(symbolGraphFileExtension)
}
private static let documentationCatalogFileExtension = "docc"
/// Checks if a folder is a documentation catalog.
/// - Parameter url: The folder to check.
/// - Returns: Whether or not the folder at `url` is a documentation catalog.
public static func isDocumentationCatalog(_ url: URL) -> Bool {
url.pathExtension.lowercased() == documentationCatalogFileExtension
}
private static let infoPlistFileName = "Info.plist"
/// Checks if a file is an Info.plist file.
/// - Parameter url: The file to check.
/// - Returns: Whether or not the file at `url` is an Info.plist file.
public static func isInfoPlistFile(_ url: URL) -> Bool {
return url.lastPathComponent == infoPlistFileName
}
private static let customHeaderFileName = "header.html"
/// Checks if a file is a custom header.
/// - Parameter url: The file to check.
/// - Returns: Whether or not the file at `url` is a custom header.
public static func isCustomHeader(_ url: URL) -> Bool {
return url.lastPathComponent == customHeaderFileName
}
private static let customFooterFileName = "footer.html"
/// Checks if a file is a custom footer.
/// - Parameter url: The file to check.
/// - Returns: Whether or not the file at `url` is a custom footer.
public static func isCustomFooter(_ url: URL) -> Bool {
return url.lastPathComponent == customFooterFileName
}
private static let themeSettingsFileName = "theme-settings.json"
/// Checks if a file is `theme-settings.json`.
/// - Parameter url: The file to check.
/// - Returns: Whether or not the file at `url` is `theme-settings.json`.
public static func isThemeSettingsFile(_ url: URL) -> Bool {
return url.lastPathComponent == themeSettingsFileName
}
}
|