File: PageKind.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (82 lines) | stat: -rw-r--r-- 2,822 bytes parent folder | download
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
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2023 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
*/

import Foundation
import Markdown

extension Metadata {
    /// A directive that allows you to set a page's kind, which affects its default title heading and page icon.
    ///
    /// The `@PageKind` directive tells Swift-DocC to treat a documentation page as a particular
    /// "kind". This is used to determine the page's default navigator icon, as well as the default
    /// title heading on the page itself.
    ///
    /// The available page kinds are `article` and `sampleCode`.
    ///
    /// This directive is only valid within a `@Metadata` directive:
    ///
    /// ```markdown
    /// @Metadata {
    ///     @PageKind(sampleCode)
    /// }
    /// ```
    public final class PageKind: Semantic, AutomaticDirectiveConvertible {
        public static let introducedVersion = "5.8"
        /// The available kinds for use with the `@PageKind` directive.
        public enum Kind: String, CaseIterable, DirectiveArgumentValueConvertible {
            /// An article of free-form text; the default for standalone markdown files.
            case article
            /// A page describing a "sample code" project.
            case sampleCode

            var renderRole: RenderMetadata.Role {
                switch self {
                case .article:
                    return RenderMetadata.Role.article
                case .sampleCode:
                    return RenderMetadata.Role.sampleCode
                }
            }

            var titleHeading: String {
                switch self {
                case .article:
                    return "Article"
                case .sampleCode:
                    return "Sample Code"
                }
            }

            var documentationNodeKind: DocumentationNode.Kind {
                switch self {
                case .article:
                    return .article
                case .sampleCode:
                    return .sampleCode
                }
            }
        }

        /// The page kind to apply to the page.
        @DirectiveArgumentWrapped(name: .unnamed)
        public var kind: Kind

        static var keyPaths: [String : AnyKeyPath] = [
            "kind" : \PageKind._kind
        ]

        public let originalMarkup: Markdown.BlockDirective

        @available(*, deprecated, message: "Do not call directly. Required for 'AutomaticDirectiveConvertible'.")
        init(originalMarkup: Markdown.BlockDirective) {
            self.originalMarkup = originalMarkup
        }
    }
}