File: Indexable.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 (64 lines) | stat: -rw-r--r-- 2,048 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
/*
 This source file is part of the Swift.org open source project

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

/**
 A value that can collect plain text content for use in search indexing.
 */
public protocol TextIndexing {
    /**
     Headings and sub-headings to drive search results.
     */
    var headings: [String] { get }

    /**
     A concatenation of all raw text content under this value except for titles and headings.

     > Note: There are no formatting guarantees of this text except that some separation between words is maintained.

     - parameter references: A dictionary of references to resolve ``RenderInlineContent.reference` elements' inlined titles.
     */
    func rawIndexableTextContent(references: [String: RenderReference]) -> String
}

/**
 A value that can provide search results.
 */
public protocol Indexable {
    /**
     A list of ``IndexingRecord``s that can become search results.
     
     > Note: A document may have a search result for itself and sometimes notable subsections.
     
     - throws: ``IndexingError``
     */
    func indexingRecords(onPage page: ResolvedTopicReference) throws -> [IndexingRecord]
}

extension Sequence where Element: TextIndexing {
    var headings: [String] {
        return self.flatMap { $0.headings }
    }
}

extension Sequence<RenderBlockContent> {
    var headings: [String] {
        return self.flatMap { $0.headings }
    }

    func rawIndexableTextContent(references: [String: RenderReference]) -> String {
        return self.map { $0.rawIndexableTextContent(references: references) }.joined(separator: " ")
    }
}

extension Sequence<RenderInlineContent> {
    func rawIndexableTextContent(references: [String: RenderReference]) -> String {
        return self.map { $0.rawIndexableTextContent(references: references) }.joined()
    }
}