├── SwiftWebVTT.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcshareddata
│ └── xcschemes
│ │ └── SwiftWebVTT.xcscheme
└── project.pbxproj
├── SwiftWebVTT
├── Extensions.swift
├── SwiftWebVTT.h
├── Info.plist
├── WebVTT.swift
├── references_substitutes.json
├── Deduplication.swift
├── Scanner.swift
├── HTMLCharacterReferences.swift
├── WebVTTParser.swift
└── references_named.json
├── .gitignore
├── SwiftWebVTT.podspec
├── SwiftWebVTTTests
├── Info.plist
└── SwiftWebVTTTests.swift
├── LICENSE
└── README.md
/SwiftWebVTT.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SwiftWebVTT.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/SwiftWebVTT/Extensions.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | internal extension Collection {
4 | func item(at index: Index) -> Element? {
5 | guard indices.contains(index) else { return nil }
6 | return self[index]
7 | }
8 | }
9 |
10 | internal extension String {
11 | func characters() -> [Character] { return Array(self) }
12 | }
13 |
--------------------------------------------------------------------------------
/SwiftWebVTT/SwiftWebVTT.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | //! Project version number for SwiftWebVTT.
4 | FOUNDATION_EXPORT double SwiftWebVTTVersionNumber;
5 |
6 | //! Project version string for SwiftWebVTT.
7 | FOUNDATION_EXPORT const unsigned char SwiftWebVTTVersionString[];
8 |
9 | // In this header, you should import all the public headers of your framework using statements like #import
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS X
2 | .DS_Store
3 | .AppleDouble
4 | .LSOverride
5 | Icon
6 | ._*
7 | .Spotlight-V100
8 | .Trashes
9 |
10 | # Xcode
11 | #
12 | build/
13 | *.pbxuser
14 | !default.pbxuser
15 | *.mode1v3
16 | !default.mode1v3
17 | *.mode2v3
18 | !default.mode2v3
19 | *.perspectivev3
20 | !default.perspectivev3
21 | xcuserdata
22 | *.xccheckout
23 | *.moved-aside
24 | DerivedData
25 | *.hmap
26 | *.ipa
27 | *.xcuserstate
28 |
29 | # CocoaPods
30 | Pods
31 |
32 | # Carthage
33 | Carthage
34 |
35 | # Sample files
36 | Sample
--------------------------------------------------------------------------------
/SwiftWebVTT.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "SwiftWebVTT"
3 | s.version = "1.0.1"
4 | s.summary = "A parser for WebVTT caption files written in Swift"
5 | s.homepage = "https://github.com/auramagi/SwiftWebVTT"
6 | s.license = { type: 'MIT', file: 'LICENSE' }
7 | s.authors = { "Mike Apurin" => 'mike.apurin@gmail.com' }
8 | s.source = { :git => 'https://github.com/auramagi/SwiftWebVTT.git', :tag => s.version }
9 |
10 | s.ios.deployment_target = '12.0'
11 |
12 | s.swift_version = '5.0'
13 |
14 | s.source_files = "SwiftWebVTT/*.{h,swift}"
15 | s.resources = ["SwiftWebVTT/*.{json}"]
16 | end
--------------------------------------------------------------------------------
/SwiftWebVTTTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/SwiftWebVTT/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 |
22 |
23 |
--------------------------------------------------------------------------------
/SwiftWebVTT/WebVTT.swift:
--------------------------------------------------------------------------------
1 | public struct WebVTT {
2 | public struct Cue {
3 | public let timing: Timing
4 | public let text: String
5 | }
6 |
7 | // Native timing in WebVTT. Measured in milliseconds.
8 | public struct Timing {
9 | public let start: Int
10 | public let end: Int
11 | }
12 |
13 | public let cues: [Cue]
14 |
15 | public init(cues: [Cue]) {
16 | self.cues = cues
17 | }
18 | }
19 |
20 | public extension WebVTT.Timing {
21 | var duration: Int { return end - start }
22 | }
23 |
24 | // Converted times for convenience
25 | public extension WebVTT.Cue {
26 | var timeStart: TimeInterval { return TimeInterval(timing.start) / 1000 }
27 | var timeEnd: TimeInterval { return TimeInterval(timing.end) / 1000 }
28 | var duration: TimeInterval { return TimeInterval(timing.duration) / 1000 }
29 | }
30 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Mike Apurin
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/SwiftWebVTT/references_substitutes.json:
--------------------------------------------------------------------------------
1 | [
2 | { "index": 155, "codepoints": [8250] },
3 | { "index": 152, "codepoints": [732] },
4 | { "index": 130, "codepoints": [8218] },
5 | { "index": 154, "codepoints": [353] },
6 | { "index": 151, "codepoints": [8212] },
7 | { "index": 145, "codepoints": [8216] },
8 | { "index": 140, "codepoints": [338] },
9 | { "index": 153, "codepoints": [8482] },
10 | { "index": 137, "codepoints": [8240] },
11 | { "index": 138, "codepoints": [352] },
12 | { "index": 139, "codepoints": [8249] },
13 | { "index": 0, "codepoints": [65533] },
14 | { "index": 147, "codepoints": [8220] },
15 | { "index": 159, "codepoints": [376] },
16 | { "index": 150, "codepoints": [8211] },
17 | { "index": 149, "codepoints": [8226] },
18 | { "index": 131, "codepoints": [402] },
19 | { "index": 133, "codepoints": [8230] },
20 | { "index": 132, "codepoints": [8222] },
21 | { "index": 156, "codepoints": [339] },
22 | { "index": 134, "codepoints": [8224] },
23 | { "index": 142, "codepoints": [381] },
24 | { "index": 135, "codepoints": [8225] },
25 | { "index": 136, "codepoints": [710] },
26 | { "index": 128, "codepoints": [8364] },
27 | { "index": 146, "codepoints": [8217] },
28 | { "index": 148, "codepoints": [8221] },
29 | { "index": 158, "codepoints": [382] }
30 | ]
--------------------------------------------------------------------------------
/SwiftWebVTT/Deduplication.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | public extension WebVTTParser {
4 | /// Filter out duplicated cues.
5 | ///
6 | /// Mainly for YouTube ASR captions.
7 | static func deduplicateCues(_ cues: [WebVTT.Cue]) -> [WebVTT.Cue] {
8 | var filteredCues: [WebVTT.Cue] = []
9 | var shownLines: [Substring] = []
10 | var lastEnd: Int = 0
11 | for cue in cues {
12 | let isConsecutive = lastEnd == cue.timing.start
13 | lastEnd = cue.timing.end
14 | let lines: [Substring] = cue.text.split(separator: "\n")
15 | var ignored = lines
16 | .map { $0.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty }
17 | if isConsecutive {
18 | for i in 0.. WebVTT {
31 | // let fileURL = url(forResource: name, withExtension: "vtt")
32 | // let fileContents = try! String(contentsOf: fileURL)
33 | // let webVTT = try! WebVTTParser(string: fileContents).parse()
34 | // return webVTT
35 | // }
36 |
37 | // MARK: - Convenience
38 |
39 | func url(forResource name: String, withExtension ext: String?) -> URL {
40 | let bundle = Bundle(for: type(of: self))
41 | let url = bundle.url(forResource: name, withExtension: ext)
42 | XCTAssertNotNil(url, "Resource \(name + (ext != nil ? ".\(ext!)" : "")) not found.")
43 | return url!
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Swift WebVTT
2 |
3 | ## Overview
4 |
5 | **Swift WebVTT** is a parser of [WebVTT](https://en.wikipedia.org/wiki/WebVTT) files that is based on a sample parser in the [specification](https://www.w3.org/TR/webvtt1/#file-parsing).
6 |
7 | Originally written as part of [Skipjack](https://skipjack.app).
8 |
9 |
10 | ## Functionality
11 |
12 | Functionality is currently limited to extracting a list of cues with their timings and text content. Extracting regions, stylesheets etc. is not implemented. Text styling such as bold, italics, ruby etc. is also not implemented.
13 |
14 | As part of parsing text content of cues, this project implements a custom parser for HTML Character Entities based on the [HTML 5.1 specification](https://www.w3.org/TR/html51/syntax.html#consume-a-character-reference).
15 |
16 | Saving files in WebVTT format and showing cues on screen is considered outside of scope of this project.
17 |
18 |
19 | ## Installation
20 |
21 | #### Carthage
22 |
23 | Put `github "auramagi/SwiftWebVTT"` in your `Cartfile`.
24 |
25 | #### CocoaPods
26 |
27 | Put `pod 'SwiftWebVTT'` in your `Podfile`.
28 |
29 |
30 | ## Usage
31 |
32 | ```swift
33 | // Assuming `fileContents` is a `String` with WebVTT file data
34 | let parser = WebVTTParser(string: fileContents)
35 | let webVTT = try? parser.parse()
36 | // webVTT?.cues holds an array of cues
37 | ```
38 |
39 | #### Making automatically-generated WebVTT from YouTube readable
40 |
41 | YouTube has a different native format (SRV3) for captions, but their servers are able to convert to several different formats including WebVTT. However, for their ASR (automatic speech recognition) captions, YouTube bakes in a certain presentation that effectively duplicates cues.
42 |
43 | This doesn't have a negative effect when presenting caption-by-caption, but makes content unreadable when extracting all text or just presenting all captions at once.
44 |
45 | **Swift WebVTT** has a helper function to de-duplicate and reformat such files.
46 |
47 | ```swift
48 | // var webVTT: WebVTT // A parsed file
49 | let filteredCues = WebVTTParser.deduplicateCues(webVTT.cues)
50 | webVTT = WebVTT(cues: filteredCues)
51 | ```
52 |
53 | #### HTML Character References
54 |
55 | The custom parser for HTML Character References can also be used standalone to decode text with HTML entities.
56 |
57 | ```swift
58 | let text = "Hello, world! 👋"
59 | print(text.decodingHTMLEntities())
60 | // > "Hello, world! 👋"
61 | ```
62 |
63 |
64 | ## Performance
65 |
66 | This implementation is reasonably fast and not memory-intensive.
67 | A ~1 MB file with 2h30m worth of captions loads in less than 1 second on an iPhone 7 Plus.
68 |
69 |
70 | ## License
71 |
72 | **Swift WebVTT** is available under the MIT license. See the LICENSE file for more info.
73 |
--------------------------------------------------------------------------------
/SwiftWebVTT/Scanner.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | internal class CustomScanner {
4 | private let scanner: Scanner
5 | private let length: Int
6 | init(string: String) {
7 | scanner = Scanner(string: string)
8 | scanner.charactersToBeSkipped = nil
9 | length = (string as NSString).length
10 | }
11 |
12 | var scanLocation: Int {
13 | get { return scanner.scanLocation }
14 | set { scanner.scanLocation = newValue }
15 | }
16 | var isAtEnd: Bool { return scanLocation == length }
17 |
18 | @discardableResult
19 | func scanUpToCharacters(from set: CharacterSet, thenSkip skipCount: Int = 0) -> String? {
20 | let string = scanner.scanUpToCharacters(from: set)
21 | if string != nil, skipCount > 0 { skip(skipCount) }
22 | return string
23 | }
24 |
25 | @discardableResult
26 | func scanCharacters(from set: CharacterSet, thenSkip skipCount: Int = 0) -> String? {
27 | let string = scanner.scanCharacters(from: set)
28 | if string != nil, skipCount > 0 { skip(skipCount) }
29 | return string
30 | }
31 |
32 | func scanInt(hexadecimal: Bool = false) -> Int? {
33 | switch hexadecimal {
34 | case true:
35 | let allowedSet = CharacterSet(charactersIn: "0123456789ABCDEFabcdef")
36 | guard let text = scanner.scanCharacters(from: allowedSet) else { break }
37 | let scanner = Scanner(string: "0x\(text)")
38 | var value: UInt64 = 0
39 | guard scanner.scanHexInt64(&value) else { break }
40 | return Int(value)
41 | case false:
42 | guard let text = scanner.scanCharacters(from: .decimalDigits) else { break }
43 | return Int(text)
44 | }
45 | return nil
46 | }
47 |
48 | func scanCharacter() -> Character? {
49 | return peekCharacter(thenSkip: true)
50 | }
51 |
52 | func scan(_ count: Int) -> String? {
53 | return peek(count, thenSkip: true)
54 | }
55 |
56 | func peek(_ count: Int, thenSkip: Bool = false) -> String? {
57 | guard !isAtEnd else { return nil }
58 | let count = min(count, length - scanLocation)
59 | let string = scanner.string as NSString
60 | let range = NSRange(location: scanLocation, length: count)
61 | if thenSkip { scanLocation += count }
62 | return string.substring(with: range) as String
63 | }
64 |
65 | func peekCharacter(thenSkip: Bool = false) -> Character? {
66 | guard !isAtEnd else { return nil }
67 | let string = scanner.string as NSString
68 | let c = string.character(at: scanLocation)
69 | if thenSkip { scanLocation += 1 }
70 | if let scalar = Unicode.Scalar(c) { return Character(scalar) }
71 | return nil
72 | }
73 |
74 | func skip(_ count: Int) {
75 | scanLocation += count
76 | }
77 | }
78 |
79 | private extension Scanner {
80 | func scanCharacters(from set: CharacterSet) -> String? {
81 | var string: NSString? = nil
82 | if scanCharacters(from: set, into: &string) { return string as String? }
83 | return nil
84 | }
85 |
86 | func scanUpToCharacters(from set: CharacterSet) -> String? {
87 | var string: NSString? = nil
88 | if scanUpToCharacters(from: set, into: &string) { return string as String? }
89 | return nil
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/SwiftWebVTT.xcodeproj/xcshareddata/xcschemes/SwiftWebVTT.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
53 |
54 |
64 |
65 |
71 |
72 |
73 |
74 |
75 |
76 |
82 |
83 |
89 |
90 |
91 |
92 |
94 |
95 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/SwiftWebVTT/HTMLCharacterReferences.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | internal struct HTMLCharacterReferences {
4 | /// Entity names for character substitution.
5 | /// - Example: ['gt': '>'], ['amp': '&']
6 | struct ReferenceNamed: Codepoints, Decodable {
7 | typealias Index = String
8 |
9 | let index: String
10 | let codepoints: [Int]
11 | }
12 |
13 | /// Substitutes for unwanted unicode codepoints in the resulting conversion.
14 | /// - Example: [0: 65533]
15 | struct ReferenceSubstitute: Codepoints, Decodable {
16 | typealias Index = Int
17 |
18 | let index: Int
19 | let codepoints: [Int]
20 | }
21 |
22 | let named: [ReferenceNamed.Index: ReferenceNamed]
23 | let substitute: [ReferenceSubstitute.Index: ReferenceSubstitute]
24 |
25 | // Named references are from HTML 5.1 2nd Edition: §8.5. Named character references
26 | // https://www.w3.org/TR/html51/syntax.html#named-character-references
27 | //
28 | // Substitutes are from HTML 5.1 2nd Edition: §8.2.4.69. Tokenizing character references
29 | // https://www.w3.org/TR/html51/syntax.html#consume-a-character-reference
30 | //
31 | /// Character references defined in HTML 5.1 standard
32 | public static func standard() -> HTMLCharacterReferences {
33 | return HTMLCharacterReferences(
34 | named: ReferenceNamed.file("references_named"),
35 | substitute: ReferenceSubstitute.file("references_substitutes")
36 | )
37 | }
38 |
39 | func string(reference number: Int) -> String? {
40 | if let substitute = self.substitute[number] { return substitute.string }
41 | if (number >= 0xD800 && number <= 0xDFFF) || number > 0x10FFFF { return "\u{FFFD}" }
42 | guard let scalar = UnicodeScalar(number) else { return "\u{FFFD}" }
43 | return String(scalar)
44 | }
45 |
46 | func string(reference name: String) -> String? {
47 | return named[name]?.string
48 | }
49 | }
50 |
51 | // MARK: - Loading entity definitions from file
52 |
53 | internal protocol Codepoints: Decodable {
54 | associatedtype Index: Hashable
55 |
56 | var index: Index { get }
57 | var codepoints: [Int] { get }
58 |
59 | static func file(_ filename: String) -> [Index: Self]
60 | }
61 |
62 | internal extension Codepoints {
63 | var string: String {
64 | var string = ""
65 | codepoints
66 | .compactMap { UnicodeScalar($0) }
67 | .map { Character($0) }
68 | .forEach { string.append($0) }
69 | return string
70 | }
71 |
72 | static func file(_ filename: String) -> [Index: Self] {
73 | var returnValue: [Index: Self] = [:]
74 | try? loadJSONArray(filename: filename)
75 | .forEach { returnValue[$0.index] = $0 }
76 | return returnValue
77 | }
78 | }
79 |
80 | fileprivate extension Decodable {
81 | static func loadJSONArray(filename: String) throws -> [Self] {
82 | let bundle = Bundle(for: WebVTTParser.self)
83 | let url = bundle.url(forResource: filename, withExtension: "json")!
84 | let data = try Data(contentsOf: url)
85 | return try JSONDecoder().decode([Self].self, from: data)
86 | }
87 | }
88 |
89 | // MARK: - Decoding entities
90 |
91 | internal extension CustomScanner {
92 | func handleCharacterReference(references: HTMLCharacterReferences, startSequence: String = "&", allowedCharacter: Character? = nil) -> String {
93 | let startLocation = scanLocation
94 | let replacement = self.consumeCharacterReference(references: references, allowedCharacter: allowedCharacter)
95 | if replacement == nil { scanLocation = startLocation }
96 | return replacement ?? startSequence
97 | }
98 |
99 | private func consumeCharacterReference(references: HTMLCharacterReferences, allowedCharacter: Character? = nil) -> String? {
100 | guard let c = peekCharacter() else { return nil }
101 | if c == allowedCharacter { return nil }
102 | switch c {
103 | case "\u{0009}", "\u{000A}", "\u{000C}", "\u{0020}", "\u{003C}", "\u{0026}":
104 | return nil
105 | case "#":
106 | skip(1)
107 | let isHex = consumeHexEntityStartingSequence()
108 | guard
109 | let number = scanInt(hexadecimal: isHex),
110 | scan(1) == ";"
111 | else { return nil }
112 | return references.string(reference: number)
113 | default:
114 | guard
115 | let name = scanUpToCharacters(from: CharacterSet(charactersIn: ";")),
116 | scan(1) == ";"
117 | else { return nil }
118 | return references.string(reference: name)
119 | }
120 | }
121 |
122 | private func consumeHexEntityStartingSequence() -> Bool {
123 | let startLocation = scanLocation
124 | let c = scanCharacter()
125 | let isHex = c == "x" || c == "X"
126 | if !isHex { scanLocation = startLocation }
127 | return isHex
128 | }
129 | }
130 |
131 | public extension String {
132 | func decodingHTMLEntities() -> String {
133 | let references = HTMLCharacterReferences.standard()
134 | var result = ""
135 |
136 | let scanner = CustomScanner(string: self)
137 | let startingCharacter = "&"
138 | let set = CharacterSet(charactersIn: startingCharacter)
139 |
140 | while !scanner.isAtEnd {
141 | let data = scanner.scanUpToCharacters(from: set)
142 | result += data ?? ""
143 | if scanner.scan(1) == startingCharacter {
144 | result += scanner.handleCharacterReference(references: references, startSequence: startingCharacter)
145 | }
146 | }
147 |
148 | return result
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/SwiftWebVTT/WebVTTParser.swift:
--------------------------------------------------------------------------------
1 | // Adapted from https://www.w3.org/TR/webvtt1/#file-parsing
2 |
3 | import Foundation
4 |
5 | public enum WebVTTError: Error {
6 | case invalidSignature
7 | }
8 |
9 | public class WebVTTParser {
10 | fileprivate let scanner: CustomScanner
11 | fileprivate let references = HTMLCharacterReferences.standard()
12 |
13 | fileprivate static let spaceDelimiterSet = CharacterSet(charactersIn: "\u{0020}\u{0009}\u{000A}")
14 | fileprivate static let newlineSet = CharacterSet(charactersIn: "\u{000A}")
15 |
16 | private var seenCue = false
17 |
18 | public init(string: String) {
19 | let string = string
20 | .replacingOccurrences(of: "\u{0000}", with: "\u{FFFD}")
21 | .replacingOccurrences(of: "\u{000D}\u{000A}", with: "\u{000A}")
22 | .replacingOccurrences(of: "\u{000D}", with: "\u{000A}")
23 | scanner = CustomScanner(string: string)
24 | }
25 |
26 | public func parse() throws -> WebVTT {
27 | guard
28 | let signature = scanner.scanUpToCharacters(from: WebVTTParser.spaceDelimiterSet),
29 | signature == "WEBVTT"
30 | else { throw WebVTTError.invalidSignature }
31 |
32 | scanner.scanUpToCharacters(from: WebVTTParser.newlineSet, thenSkip: 1)
33 |
34 | guard !scanner.isAtEnd else { return WebVTT(cues: []) }
35 |
36 | if scanner.peekCharacter() != "\u{000A}" {
37 | _ = parseBlock(inHeader: true)
38 | } else {
39 | scanner.skip(1)
40 | }
41 |
42 | scanner.scanCharacters(from: WebVTTParser.newlineSet)
43 |
44 | var cues: [WebVTT.Cue] = []
45 | while !scanner.isAtEnd {
46 | let block = parseBlock(inHeader: false)
47 |
48 | if case .cue(let start, let end, let text)? = block {
49 | let parsedText = CueTextParser(string: text, references: references)
50 | .parse()
51 | .compactMap {
52 | switch $0 {
53 | case .text(let text):
54 | return text
55 | default:
56 | return nil
57 | }
58 | }
59 | .joined()
60 | let timing = WebVTT.Timing(start: start, end: end)
61 | cues.append(WebVTT.Cue(timing: timing, text: parsedText))
62 | }
63 |
64 | scanner.scanCharacters(from: WebVTTParser.newlineSet)
65 | }
66 | return WebVTT(cues: cues)
67 | }
68 |
69 | fileprivate enum Block {
70 | case unknown(String)
71 | case stylesheet(String)
72 | case region(String)
73 | case cue(Int, Int, String)
74 | }
75 |
76 | private func parseBlock(inHeader: Bool) -> Block? {
77 |
78 | enum BlockType {
79 | case stylesheet
80 | case region
81 | case cue
82 | }
83 |
84 | var lineCount = 0
85 | var prevPosition = scanner.scanLocation
86 | var buffer = ""
87 | var seenEOF = false
88 | var seenArrow = false
89 | var cueTiming: (Int, Int)? = nil
90 | var blockType: BlockType? = nil
91 |
92 | while !seenEOF {
93 | let line = scanner.scanUpToCharacters(from: WebVTTParser.newlineSet, thenSkip: 1)
94 | lineCount += 1
95 | seenEOF = scanner.isAtEnd
96 | if line?.contains("-->") == true {
97 | if !inHeader, (lineCount == 1 || (lineCount == 2 && !seenArrow)) {
98 | seenArrow = true
99 | prevPosition = scanner.scanLocation
100 | cueTiming = CueInfoParser(string: line!).parse()
101 | blockType = .cue
102 | buffer = ""
103 | seenCue = true
104 | } else {
105 | scanner.scanLocation = prevPosition
106 | break
107 | }
108 | } else if line == nil || line!.isEmpty {
109 | break
110 | } else {
111 | if !inHeader, lineCount == 2 {
112 | if !seenCue, buffer.hasPrefix("STYLE") {
113 | // create css
114 | blockType = .stylesheet
115 | buffer = ""
116 | } else if !seenCue, buffer.hasPrefix("REGION") {
117 | // create region
118 | blockType = .region
119 | buffer = ""
120 | }
121 | }
122 | if !buffer.isEmpty { buffer += "\u{000A}" }
123 | buffer += line ?? ""
124 | prevPosition = scanner.scanLocation
125 | }
126 | }
127 | guard blockType != nil else { return .unknown(buffer) }
128 | switch blockType! {
129 | case .stylesheet:
130 | return .stylesheet(buffer)
131 | case .region:
132 | return .region(buffer)
133 | case .cue:
134 | guard cueTiming != nil else { return nil }
135 | return .cue(cueTiming!.0, cueTiming!.1, buffer)
136 | }
137 | }
138 | }
139 |
140 | fileprivate class CueInfoParser {
141 | let scanner: CustomScanner
142 | init(string: String) {
143 | scanner = CustomScanner(string: string)
144 | }
145 |
146 | fileprivate static let separatorSet = CharacterSet(charactersIn: ":.")
147 |
148 | func parse() -> (Int, Int)? {
149 | guard let from = parseTiming() else { return nil }
150 | scanner.scanCharacters(from: WebVTTParser.spaceDelimiterSet)
151 | guard scanner.peek(3) == "-->" else { return nil }
152 | scanner.skip(3)
153 | scanner.scanCharacters(from: WebVTTParser.spaceDelimiterSet)
154 | guard let to = parseTiming() else { return nil }
155 | // followed by optional (whitespace+, settings)
156 | return (from, to)
157 | }
158 |
159 | func parseTiming() -> Int? {
160 | guard let value1 = scanner.scanInt(), scanner.peekCharacter() == ":" else { return nil }
161 | var totalTime: Int = value1 * 60 * 1000
162 | scanner.skip(1)
163 | guard let value2 = scanner.scanInt(), let separator = scanner.scanCharacters(from: CueInfoParser.separatorSet) else { return nil }
164 | if separator == ":" {
165 | totalTime *= 60
166 | totalTime += value2 * 60 * 1000
167 | guard let value3 = scanner.scanInt(), scanner.peekCharacter() == "." else { return nil }
168 | totalTime += value3 * 1000
169 | scanner.skip(1)
170 | } else {
171 | totalTime += value2 * 1000
172 | }
173 | guard let milliseconds = scanner.scanInt() else { return nil }
174 | totalTime += milliseconds
175 |
176 | return totalTime
177 | }
178 | }
179 |
180 | fileprivate class CueTextParser {
181 | enum Token {
182 | case text(String)
183 | case tagStart(String)
184 | case tagEnd(String)
185 | case timestamp(String)
186 | }
187 |
188 | let scanner: CustomScanner
189 | private let references: HTMLCharacterReferences
190 | init(string: String, references: HTMLCharacterReferences) {
191 | scanner = CustomScanner(string: string)
192 | self.references = references
193 | }
194 | func parse() -> [Token] {
195 | var tokens: [Token] = []
196 | while !scanner.isAtEnd {
197 | let token = parseToken()
198 | tokens.append(token)
199 | }
200 | return tokens
201 | }
202 |
203 | private func parseToken() -> Token {
204 | enum State {
205 | case data
206 | case HTMLCharacterReference
207 | case tag
208 | case startTag
209 | case startTagAnnotation
210 | case HTMLCharacterReferenceInAnnotation
211 | case startTagClass
212 | case endTag
213 | case timestamp
214 | }
215 | var state = State.data
216 | var result: [Character] = []
217 | var buffer: [Character] = []
218 | var classes: [String] = []
219 | while let c = scanner.scanCharacter() {
220 | switch state {
221 | case .data:
222 | switch c {
223 | case "&":
224 | state = .HTMLCharacterReference
225 | case "<":
226 | if result.isEmpty {
227 | state = .tag
228 | } else {
229 | scanner.skip(-1)
230 | return .text(String(result))
231 | }
232 | default:
233 | result.append(c)
234 | }
235 | case .HTMLCharacterReference:
236 | scanner.skip(-1)
237 | result += scanner.handleCharacterReference(references: references)
238 | state = .data
239 | case .tag:
240 | switch c {
241 | case "\u{0009}", "\u{000A}", "\u{000C}", "\u{0020}":
242 | state = .startTagAnnotation
243 | case "\u{002E}":
244 | state = .startTagClass
245 | case "\u{002F}":
246 | state = .endTag
247 | case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
248 | result = [c]
249 | state = .timestamp
250 | case ">":
251 | scanner.skip(-1)
252 | return .tagStart("")
253 | default:
254 | result = [c]
255 | state = .startTag
256 | }
257 | case .startTag:
258 | switch c {
259 | case "\u{0009}", "\u{000C}", "\u{0020}":
260 | state = .startTagAnnotation
261 | case "\u{000A}":
262 | buffer = [c]
263 | state = .startTagAnnotation
264 | case ".":
265 | state = .startTagClass
266 | case ">":
267 | return .tagStart(String(result))
268 | default:
269 | result.append(c)
270 | }
271 | case .startTagClass:
272 | switch c {
273 | case "\u{0009}", "\u{000C}", "\u{0020}":
274 | classes.append(String(buffer))
275 | buffer = []
276 | state = .startTagAnnotation
277 | case "\u{000A}":
278 | classes.append(String(buffer))
279 | buffer = [c]
280 | state = .startTagAnnotation
281 | case ".":
282 | classes.append(String(buffer))
283 | buffer = []
284 | state = .startTagClass
285 | case ">":
286 | return .tagStart(String(result))
287 | default:
288 | buffer.append(c)
289 | }
290 | case .startTagAnnotation:
291 | switch c {
292 | case "&":
293 | state = .HTMLCharacterReferenceInAnnotation
294 | case ">":
295 | buffer = Array(String(buffer).trimmingCharacters(in: WebVTTParser.spaceDelimiterSet))
296 | return .tagStart(String(result))
297 | default:
298 | buffer.append(c)
299 | }
300 | case .HTMLCharacterReferenceInAnnotation:
301 | scanner.skip(-1)
302 | buffer += scanner.handleCharacterReference(references: references, allowedCharacter: ">")
303 | state = .startTagAnnotation
304 | case .endTag:
305 | switch c {
306 | case ">":
307 | return .tagEnd(String(result))
308 | default:
309 | result.append(c)
310 | }
311 | case .timestamp:
312 | switch c {
313 | case ">":
314 | return .timestamp(String(result))
315 | default:
316 | result.append(c)
317 | }
318 | }
319 | }
320 | return .text(String(result))
321 | }
322 | }
323 |
324 |
--------------------------------------------------------------------------------
/SwiftWebVTT.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | A332BFEB22A84954009E47D5 /* SwiftWebVTT.h in Headers */ = {isa = PBXBuildFile; fileRef = A332BFE922A84954009E47D5 /* SwiftWebVTT.h */; settings = {ATTRIBUTES = (Public, ); }; };
11 | A332BFF222A8496D009E47D5 /* WebVTT.swift in Sources */ = {isa = PBXBuildFile; fileRef = A332BFF122A8496C009E47D5 /* WebVTT.swift */; };
12 | A332BFF422A849DB009E47D5 /* HTMLCharacterReferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = A332BFF322A849DA009E47D5 /* HTMLCharacterReferences.swift */; };
13 | A332C02622A84E80009E47D5 /* SwiftWebVTTTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A332C02522A84E80009E47D5 /* SwiftWebVTTTests.swift */; };
14 | A332C02822A84E80009E47D5 /* SwiftWebVTT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A332BFE622A84954009E47D5 /* SwiftWebVTT.framework */; };
15 | A332C03222A853C4009E47D5 /* references_named.json in Resources */ = {isa = PBXBuildFile; fileRef = A332BFF522A84A22009E47D5 /* references_named.json */; };
16 | A3819D3422EC2D9D00F15A56 /* entities_encoded.txt in Resources */ = {isa = PBXBuildFile; fileRef = A3819D3222EC2D9D00F15A56 /* entities_encoded.txt */; };
17 | A3819D3522EC2D9D00F15A56 /* entities_decoded.txt in Resources */ = {isa = PBXBuildFile; fileRef = A3819D3322EC2D9D00F15A56 /* entities_decoded.txt */; };
18 | A384747022EC352200E545A6 /* Deduplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = A384746F22EC352200E545A6 /* Deduplication.swift */; };
19 | A384747222EC35AC00E545A6 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A384747122EC35AC00E545A6 /* Extensions.swift */; };
20 | A384747422EC36A500E545A6 /* WebVTTParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = A384747322EC36A500E545A6 /* WebVTTParser.swift */; };
21 | A3B935CA22A8E4B400B0E066 /* references_substitutes.json in Resources */ = {isa = PBXBuildFile; fileRef = A3B935C922A8E4B400B0E066 /* references_substitutes.json */; };
22 | A3B935D322A9051A00B0E066 /* Scanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B935D222A9051A00B0E066 /* Scanner.swift */; };
23 | /* End PBXBuildFile section */
24 |
25 | /* Begin PBXContainerItemProxy section */
26 | A332C02922A84E80009E47D5 /* PBXContainerItemProxy */ = {
27 | isa = PBXContainerItemProxy;
28 | containerPortal = A332BFDD22A84954009E47D5 /* Project object */;
29 | proxyType = 1;
30 | remoteGlobalIDString = A332BFE522A84954009E47D5;
31 | remoteInfo = SwiftWebVTT;
32 | };
33 | /* End PBXContainerItemProxy section */
34 |
35 | /* Begin PBXFileReference section */
36 | A312ECE422EC5F98004BFD28 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
37 | A312ECE522EC5F98004BFD28 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; };
38 | A332BFE622A84954009E47D5 /* SwiftWebVTT.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftWebVTT.framework; sourceTree = BUILT_PRODUCTS_DIR; };
39 | A332BFE922A84954009E47D5 /* SwiftWebVTT.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftWebVTT.h; sourceTree = ""; };
40 | A332BFEA22A84954009E47D5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
41 | A332BFF122A8496C009E47D5 /* WebVTT.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebVTT.swift; sourceTree = ""; };
42 | A332BFF322A849DA009E47D5 /* HTMLCharacterReferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTMLCharacterReferences.swift; sourceTree = ""; };
43 | A332BFF522A84A22009E47D5 /* references_named.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = references_named.json; sourceTree = ""; };
44 | A332C02322A84E80009E47D5 /* SwiftWebVTTTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SwiftWebVTTTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
45 | A332C02522A84E80009E47D5 /* SwiftWebVTTTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftWebVTTTests.swift; sourceTree = ""; };
46 | A332C02722A84E80009E47D5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
47 | A3819D3222EC2D9D00F15A56 /* entities_encoded.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = entities_encoded.txt; sourceTree = ""; };
48 | A3819D3322EC2D9D00F15A56 /* entities_decoded.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = entities_decoded.txt; sourceTree = ""; };
49 | A384746F22EC352200E545A6 /* Deduplication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Deduplication.swift; sourceTree = ""; };
50 | A384747122EC35AC00E545A6 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; };
51 | A384747322EC36A500E545A6 /* WebVTTParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebVTTParser.swift; sourceTree = ""; };
52 | A3B935C922A8E4B400B0E066 /* references_substitutes.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = references_substitutes.json; sourceTree = ""; };
53 | A3B935D222A9051A00B0E066 /* Scanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scanner.swift; sourceTree = ""; };
54 | /* End PBXFileReference section */
55 |
56 | /* Begin PBXFrameworksBuildPhase section */
57 | A332BFE322A84954009E47D5 /* Frameworks */ = {
58 | isa = PBXFrameworksBuildPhase;
59 | buildActionMask = 2147483647;
60 | files = (
61 | );
62 | runOnlyForDeploymentPostprocessing = 0;
63 | };
64 | A332C02022A84E80009E47D5 /* Frameworks */ = {
65 | isa = PBXFrameworksBuildPhase;
66 | buildActionMask = 2147483647;
67 | files = (
68 | A332C02822A84E80009E47D5 /* SwiftWebVTT.framework in Frameworks */,
69 | );
70 | runOnlyForDeploymentPostprocessing = 0;
71 | };
72 | /* End PBXFrameworksBuildPhase section */
73 |
74 | /* Begin PBXGroup section */
75 | A332BFDC22A84954009E47D5 = {
76 | isa = PBXGroup;
77 | children = (
78 | A312ECE522EC5F98004BFD28 /* LICENSE */,
79 | A312ECE422EC5F98004BFD28 /* README.md */,
80 | A332BFE822A84954009E47D5 /* SwiftWebVTT */,
81 | A332C02422A84E80009E47D5 /* SwiftWebVTTTests */,
82 | A332BFE722A84954009E47D5 /* Products */,
83 | );
84 | sourceTree = "";
85 | };
86 | A332BFE722A84954009E47D5 /* Products */ = {
87 | isa = PBXGroup;
88 | children = (
89 | A332BFE622A84954009E47D5 /* SwiftWebVTT.framework */,
90 | A332C02322A84E80009E47D5 /* SwiftWebVTTTests.xctest */,
91 | );
92 | name = Products;
93 | sourceTree = "";
94 | };
95 | A332BFE822A84954009E47D5 /* SwiftWebVTT */ = {
96 | isa = PBXGroup;
97 | children = (
98 | A332BFF122A8496C009E47D5 /* WebVTT.swift */,
99 | A384746F22EC352200E545A6 /* Deduplication.swift */,
100 | A384747322EC36A500E545A6 /* WebVTTParser.swift */,
101 | A332BFF322A849DA009E47D5 /* HTMLCharacterReferences.swift */,
102 | A3B935D222A9051A00B0E066 /* Scanner.swift */,
103 | A384747122EC35AC00E545A6 /* Extensions.swift */,
104 | A332BFF522A84A22009E47D5 /* references_named.json */,
105 | A3B935C922A8E4B400B0E066 /* references_substitutes.json */,
106 | A332BFE922A84954009E47D5 /* SwiftWebVTT.h */,
107 | A332BFEA22A84954009E47D5 /* Info.plist */,
108 | );
109 | path = SwiftWebVTT;
110 | sourceTree = "";
111 | };
112 | A332C02422A84E80009E47D5 /* SwiftWebVTTTests */ = {
113 | isa = PBXGroup;
114 | children = (
115 | A3387F6022A94CFF00C77615 /* Sample */,
116 | A332C02522A84E80009E47D5 /* SwiftWebVTTTests.swift */,
117 | A332C02722A84E80009E47D5 /* Info.plist */,
118 | );
119 | path = SwiftWebVTTTests;
120 | sourceTree = "";
121 | };
122 | A3387F6022A94CFF00C77615 /* Sample */ = {
123 | isa = PBXGroup;
124 | children = (
125 | A3819D3222EC2D9D00F15A56 /* entities_encoded.txt */,
126 | A3819D3322EC2D9D00F15A56 /* entities_decoded.txt */,
127 | );
128 | path = Sample;
129 | sourceTree = "";
130 | };
131 | /* End PBXGroup section */
132 |
133 | /* Begin PBXHeadersBuildPhase section */
134 | A332BFE122A84954009E47D5 /* Headers */ = {
135 | isa = PBXHeadersBuildPhase;
136 | buildActionMask = 2147483647;
137 | files = (
138 | A332BFEB22A84954009E47D5 /* SwiftWebVTT.h in Headers */,
139 | );
140 | runOnlyForDeploymentPostprocessing = 0;
141 | };
142 | /* End PBXHeadersBuildPhase section */
143 |
144 | /* Begin PBXNativeTarget section */
145 | A332BFE522A84954009E47D5 /* SwiftWebVTT */ = {
146 | isa = PBXNativeTarget;
147 | buildConfigurationList = A332BFEE22A84954009E47D5 /* Build configuration list for PBXNativeTarget "SwiftWebVTT" */;
148 | buildPhases = (
149 | A332BFE122A84954009E47D5 /* Headers */,
150 | A332BFE222A84954009E47D5 /* Sources */,
151 | A332BFE322A84954009E47D5 /* Frameworks */,
152 | A332BFE422A84954009E47D5 /* Resources */,
153 | );
154 | buildRules = (
155 | );
156 | dependencies = (
157 | );
158 | name = SwiftWebVTT;
159 | productName = SwiftWebVTT;
160 | productReference = A332BFE622A84954009E47D5 /* SwiftWebVTT.framework */;
161 | productType = "com.apple.product-type.framework";
162 | };
163 | A332C02222A84E80009E47D5 /* SwiftWebVTTTests */ = {
164 | isa = PBXNativeTarget;
165 | buildConfigurationList = A332C02D22A84E80009E47D5 /* Build configuration list for PBXNativeTarget "SwiftWebVTTTests" */;
166 | buildPhases = (
167 | A332C01F22A84E80009E47D5 /* Sources */,
168 | A332C02022A84E80009E47D5 /* Frameworks */,
169 | A332C02122A84E80009E47D5 /* Resources */,
170 | );
171 | buildRules = (
172 | );
173 | dependencies = (
174 | A332C02A22A84E80009E47D5 /* PBXTargetDependency */,
175 | );
176 | name = SwiftWebVTTTests;
177 | productName = SwiftWebVTTTests;
178 | productReference = A332C02322A84E80009E47D5 /* SwiftWebVTTTests.xctest */;
179 | productType = "com.apple.product-type.bundle.unit-test";
180 | };
181 | /* End PBXNativeTarget section */
182 |
183 | /* Begin PBXProject section */
184 | A332BFDD22A84954009E47D5 /* Project object */ = {
185 | isa = PBXProject;
186 | attributes = {
187 | LastSwiftUpdateCheck = 1100;
188 | LastUpgradeCheck = 1100;
189 | ORGANIZATIONNAME = "Mikhail Apurin";
190 | TargetAttributes = {
191 | A332BFE522A84954009E47D5 = {
192 | CreatedOnToolsVersion = 11.0;
193 | LastSwiftMigration = 1100;
194 | };
195 | A332C02222A84E80009E47D5 = {
196 | CreatedOnToolsVersion = 11.0;
197 | };
198 | };
199 | };
200 | buildConfigurationList = A332BFE022A84954009E47D5 /* Build configuration list for PBXProject "SwiftWebVTT" */;
201 | compatibilityVersion = "Xcode 9.3";
202 | developmentRegion = en;
203 | hasScannedForEncodings = 0;
204 | knownRegions = (
205 | en,
206 | Base,
207 | );
208 | mainGroup = A332BFDC22A84954009E47D5;
209 | productRefGroup = A332BFE722A84954009E47D5 /* Products */;
210 | projectDirPath = "";
211 | projectRoot = "";
212 | targets = (
213 | A332BFE522A84954009E47D5 /* SwiftWebVTT */,
214 | A332C02222A84E80009E47D5 /* SwiftWebVTTTests */,
215 | );
216 | };
217 | /* End PBXProject section */
218 |
219 | /* Begin PBXResourcesBuildPhase section */
220 | A332BFE422A84954009E47D5 /* Resources */ = {
221 | isa = PBXResourcesBuildPhase;
222 | buildActionMask = 2147483647;
223 | files = (
224 | A332C03222A853C4009E47D5 /* references_named.json in Resources */,
225 | A3B935CA22A8E4B400B0E066 /* references_substitutes.json in Resources */,
226 | );
227 | runOnlyForDeploymentPostprocessing = 0;
228 | };
229 | A332C02122A84E80009E47D5 /* Resources */ = {
230 | isa = PBXResourcesBuildPhase;
231 | buildActionMask = 2147483647;
232 | files = (
233 | A3819D3422EC2D9D00F15A56 /* entities_encoded.txt in Resources */,
234 | A3819D3522EC2D9D00F15A56 /* entities_decoded.txt in Resources */,
235 | );
236 | runOnlyForDeploymentPostprocessing = 0;
237 | };
238 | /* End PBXResourcesBuildPhase section */
239 |
240 | /* Begin PBXSourcesBuildPhase section */
241 | A332BFE222A84954009E47D5 /* Sources */ = {
242 | isa = PBXSourcesBuildPhase;
243 | buildActionMask = 2147483647;
244 | files = (
245 | A384747222EC35AC00E545A6 /* Extensions.swift in Sources */,
246 | A332BFF422A849DB009E47D5 /* HTMLCharacterReferences.swift in Sources */,
247 | A384747422EC36A500E545A6 /* WebVTTParser.swift in Sources */,
248 | A3B935D322A9051A00B0E066 /* Scanner.swift in Sources */,
249 | A332BFF222A8496D009E47D5 /* WebVTT.swift in Sources */,
250 | A384747022EC352200E545A6 /* Deduplication.swift in Sources */,
251 | );
252 | runOnlyForDeploymentPostprocessing = 0;
253 | };
254 | A332C01F22A84E80009E47D5 /* Sources */ = {
255 | isa = PBXSourcesBuildPhase;
256 | buildActionMask = 2147483647;
257 | files = (
258 | A332C02622A84E80009E47D5 /* SwiftWebVTTTests.swift in Sources */,
259 | );
260 | runOnlyForDeploymentPostprocessing = 0;
261 | };
262 | /* End PBXSourcesBuildPhase section */
263 |
264 | /* Begin PBXTargetDependency section */
265 | A332C02A22A84E80009E47D5 /* PBXTargetDependency */ = {
266 | isa = PBXTargetDependency;
267 | target = A332BFE522A84954009E47D5 /* SwiftWebVTT */;
268 | targetProxy = A332C02922A84E80009E47D5 /* PBXContainerItemProxy */;
269 | };
270 | /* End PBXTargetDependency section */
271 |
272 | /* Begin XCBuildConfiguration section */
273 | A332BFEC22A84954009E47D5 /* Debug */ = {
274 | isa = XCBuildConfiguration;
275 | buildSettings = {
276 | ALWAYS_SEARCH_USER_PATHS = NO;
277 | CLANG_ANALYZER_NONNULL = YES;
278 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
279 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
280 | CLANG_CXX_LIBRARY = "libc++";
281 | CLANG_ENABLE_MODULES = YES;
282 | CLANG_ENABLE_OBJC_ARC = YES;
283 | CLANG_ENABLE_OBJC_WEAK = YES;
284 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
285 | CLANG_WARN_BOOL_CONVERSION = YES;
286 | CLANG_WARN_COMMA = YES;
287 | CLANG_WARN_CONSTANT_CONVERSION = YES;
288 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
289 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
290 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
291 | CLANG_WARN_EMPTY_BODY = YES;
292 | CLANG_WARN_ENUM_CONVERSION = YES;
293 | CLANG_WARN_INFINITE_RECURSION = YES;
294 | CLANG_WARN_INT_CONVERSION = YES;
295 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
296 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
297 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
298 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
299 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
300 | CLANG_WARN_STRICT_PROTOTYPES = YES;
301 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
302 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
303 | CLANG_WARN_UNREACHABLE_CODE = YES;
304 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
305 | COPY_PHASE_STRIP = NO;
306 | CURRENT_PROJECT_VERSION = 1;
307 | DEBUG_INFORMATION_FORMAT = dwarf;
308 | ENABLE_STRICT_OBJC_MSGSEND = YES;
309 | ENABLE_TESTABILITY = YES;
310 | GCC_C_LANGUAGE_STANDARD = gnu11;
311 | GCC_DYNAMIC_NO_PIC = NO;
312 | GCC_NO_COMMON_BLOCKS = YES;
313 | GCC_OPTIMIZATION_LEVEL = 0;
314 | GCC_PREPROCESSOR_DEFINITIONS = (
315 | "DEBUG=1",
316 | "$(inherited)",
317 | );
318 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
319 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
320 | GCC_WARN_UNDECLARED_SELECTOR = YES;
321 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
322 | GCC_WARN_UNUSED_FUNCTION = YES;
323 | GCC_WARN_UNUSED_VARIABLE = YES;
324 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
325 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
326 | MTL_FAST_MATH = YES;
327 | ONLY_ACTIVE_ARCH = YES;
328 | SDKROOT = iphoneos;
329 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
330 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
331 | VERSIONING_SYSTEM = "apple-generic";
332 | VERSION_INFO_PREFIX = "";
333 | };
334 | name = Debug;
335 | };
336 | A332BFED22A84954009E47D5 /* Release */ = {
337 | isa = XCBuildConfiguration;
338 | buildSettings = {
339 | ALWAYS_SEARCH_USER_PATHS = NO;
340 | CLANG_ANALYZER_NONNULL = YES;
341 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
342 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
343 | CLANG_CXX_LIBRARY = "libc++";
344 | CLANG_ENABLE_MODULES = YES;
345 | CLANG_ENABLE_OBJC_ARC = YES;
346 | CLANG_ENABLE_OBJC_WEAK = YES;
347 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
348 | CLANG_WARN_BOOL_CONVERSION = YES;
349 | CLANG_WARN_COMMA = YES;
350 | CLANG_WARN_CONSTANT_CONVERSION = YES;
351 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
352 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
353 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
354 | CLANG_WARN_EMPTY_BODY = YES;
355 | CLANG_WARN_ENUM_CONVERSION = YES;
356 | CLANG_WARN_INFINITE_RECURSION = YES;
357 | CLANG_WARN_INT_CONVERSION = YES;
358 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
359 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
360 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
361 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
362 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
363 | CLANG_WARN_STRICT_PROTOTYPES = YES;
364 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
365 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
366 | CLANG_WARN_UNREACHABLE_CODE = YES;
367 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
368 | COPY_PHASE_STRIP = NO;
369 | CURRENT_PROJECT_VERSION = 1;
370 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
371 | ENABLE_NS_ASSERTIONS = NO;
372 | ENABLE_STRICT_OBJC_MSGSEND = YES;
373 | GCC_C_LANGUAGE_STANDARD = gnu11;
374 | GCC_NO_COMMON_BLOCKS = YES;
375 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
376 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
377 | GCC_WARN_UNDECLARED_SELECTOR = YES;
378 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
379 | GCC_WARN_UNUSED_FUNCTION = YES;
380 | GCC_WARN_UNUSED_VARIABLE = YES;
381 | IPHONEOS_DEPLOYMENT_TARGET = 13.0;
382 | MTL_ENABLE_DEBUG_INFO = NO;
383 | MTL_FAST_MATH = YES;
384 | SDKROOT = iphoneos;
385 | SWIFT_COMPILATION_MODE = wholemodule;
386 | SWIFT_OPTIMIZATION_LEVEL = "-O";
387 | VALIDATE_PRODUCT = YES;
388 | VERSIONING_SYSTEM = "apple-generic";
389 | VERSION_INFO_PREFIX = "";
390 | };
391 | name = Release;
392 | };
393 | A332BFEF22A84954009E47D5 /* Debug */ = {
394 | isa = XCBuildConfiguration;
395 | buildSettings = {
396 | CLANG_ENABLE_MODULES = YES;
397 | CODE_SIGN_STYLE = Automatic;
398 | DEFINES_MODULE = YES;
399 | DEVELOPMENT_TEAM = FK4VRNJVL7;
400 | DYLIB_COMPATIBILITY_VERSION = 1;
401 | DYLIB_CURRENT_VERSION = 1;
402 | DYLIB_INSTALL_NAME_BASE = "@rpath";
403 | INFOPLIST_FILE = SwiftWebVTT/Info.plist;
404 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
405 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
406 | LD_RUNPATH_SEARCH_PATHS = (
407 | "$(inherited)",
408 | "@executable_path/Frameworks",
409 | "@loader_path/Frameworks",
410 | );
411 | PRODUCT_BUNDLE_IDENTIFIER = me.apurin.SwiftWebVTT;
412 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
413 | SKIP_INSTALL = YES;
414 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
415 | SWIFT_VERSION = 5.0;
416 | TARGETED_DEVICE_FAMILY = "1,2";
417 | };
418 | name = Debug;
419 | };
420 | A332BFF022A84954009E47D5 /* Release */ = {
421 | isa = XCBuildConfiguration;
422 | buildSettings = {
423 | CLANG_ENABLE_MODULES = YES;
424 | CODE_SIGN_STYLE = Automatic;
425 | DEFINES_MODULE = YES;
426 | DEVELOPMENT_TEAM = FK4VRNJVL7;
427 | DYLIB_COMPATIBILITY_VERSION = 1;
428 | DYLIB_CURRENT_VERSION = 1;
429 | DYLIB_INSTALL_NAME_BASE = "@rpath";
430 | INFOPLIST_FILE = SwiftWebVTT/Info.plist;
431 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
432 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
433 | LD_RUNPATH_SEARCH_PATHS = (
434 | "$(inherited)",
435 | "@executable_path/Frameworks",
436 | "@loader_path/Frameworks",
437 | );
438 | PRODUCT_BUNDLE_IDENTIFIER = me.apurin.SwiftWebVTT;
439 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
440 | SKIP_INSTALL = YES;
441 | SWIFT_VERSION = 5.0;
442 | TARGETED_DEVICE_FAMILY = "1,2";
443 | };
444 | name = Release;
445 | };
446 | A332C02B22A84E80009E47D5 /* Debug */ = {
447 | isa = XCBuildConfiguration;
448 | buildSettings = {
449 | CODE_SIGN_STYLE = Automatic;
450 | DEVELOPMENT_TEAM = FK4VRNJVL7;
451 | INFOPLIST_FILE = SwiftWebVTTTests/Info.plist;
452 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
453 | LD_RUNPATH_SEARCH_PATHS = (
454 | "$(inherited)",
455 | "@executable_path/Frameworks",
456 | "@loader_path/Frameworks",
457 | );
458 | PRODUCT_BUNDLE_IDENTIFIER = me.apurin.SwiftWebVTTTests;
459 | PRODUCT_NAME = "$(TARGET_NAME)";
460 | SWIFT_VERSION = 5.0;
461 | TARGETED_DEVICE_FAMILY = "1,2";
462 | };
463 | name = Debug;
464 | };
465 | A332C02C22A84E80009E47D5 /* Release */ = {
466 | isa = XCBuildConfiguration;
467 | buildSettings = {
468 | CODE_SIGN_STYLE = Automatic;
469 | DEVELOPMENT_TEAM = FK4VRNJVL7;
470 | INFOPLIST_FILE = SwiftWebVTTTests/Info.plist;
471 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
472 | LD_RUNPATH_SEARCH_PATHS = (
473 | "$(inherited)",
474 | "@executable_path/Frameworks",
475 | "@loader_path/Frameworks",
476 | );
477 | PRODUCT_BUNDLE_IDENTIFIER = me.apurin.SwiftWebVTTTests;
478 | PRODUCT_NAME = "$(TARGET_NAME)";
479 | SWIFT_VERSION = 5.0;
480 | TARGETED_DEVICE_FAMILY = "1,2";
481 | };
482 | name = Release;
483 | };
484 | /* End XCBuildConfiguration section */
485 |
486 | /* Begin XCConfigurationList section */
487 | A332BFE022A84954009E47D5 /* Build configuration list for PBXProject "SwiftWebVTT" */ = {
488 | isa = XCConfigurationList;
489 | buildConfigurations = (
490 | A332BFEC22A84954009E47D5 /* Debug */,
491 | A332BFED22A84954009E47D5 /* Release */,
492 | );
493 | defaultConfigurationIsVisible = 0;
494 | defaultConfigurationName = Release;
495 | };
496 | A332BFEE22A84954009E47D5 /* Build configuration list for PBXNativeTarget "SwiftWebVTT" */ = {
497 | isa = XCConfigurationList;
498 | buildConfigurations = (
499 | A332BFEF22A84954009E47D5 /* Debug */,
500 | A332BFF022A84954009E47D5 /* Release */,
501 | );
502 | defaultConfigurationIsVisible = 0;
503 | defaultConfigurationName = Release;
504 | };
505 | A332C02D22A84E80009E47D5 /* Build configuration list for PBXNativeTarget "SwiftWebVTTTests" */ = {
506 | isa = XCConfigurationList;
507 | buildConfigurations = (
508 | A332C02B22A84E80009E47D5 /* Debug */,
509 | A332C02C22A84E80009E47D5 /* Release */,
510 | );
511 | defaultConfigurationIsVisible = 0;
512 | defaultConfigurationName = Release;
513 | };
514 | /* End XCConfigurationList section */
515 | };
516 | rootObject = A332BFDD22A84954009E47D5 /* Project object */;
517 | }
518 |
--------------------------------------------------------------------------------
/SwiftWebVTT/references_named.json:
--------------------------------------------------------------------------------
1 | [
2 | { "index": "Aacute", "codepoints": [193] },
3 | { "index": "aacute", "codepoints": [225] },
4 | { "index": "Abreve", "codepoints": [258] },
5 | { "index": "abreve", "codepoints": [259] },
6 | { "index": "ac", "codepoints": [8766] },
7 | { "index": "acd", "codepoints": [8767] },
8 | { "index": "acE", "codepoints": [8766, 819] },
9 | { "index": "Acirc", "codepoints": [194] },
10 | { "index": "acirc", "codepoints": [226] },
11 | { "index": "acute", "codepoints": [180] },
12 | { "index": "Acy", "codepoints": [1040] },
13 | { "index": "acy", "codepoints": [1072] },
14 | { "index": "AElig", "codepoints": [198] },
15 | { "index": "aelig", "codepoints": [230] },
16 | { "index": "af", "codepoints": [8289] },
17 | { "index": "Afr", "codepoints": [120068] },
18 | { "index": "afr", "codepoints": [120094] },
19 | { "index": "Agrave", "codepoints": [192] },
20 | { "index": "agrave", "codepoints": [224] },
21 | { "index": "alefsym", "codepoints": [8501] },
22 | { "index": "aleph", "codepoints": [8501] },
23 | { "index": "Alpha", "codepoints": [913] },
24 | { "index": "alpha", "codepoints": [945] },
25 | { "index": "Amacr", "codepoints": [256] },
26 | { "index": "amacr", "codepoints": [257] },
27 | { "index": "amalg", "codepoints": [10815] },
28 | { "index": "amp", "codepoints": [38] },
29 | { "index": "AMP", "codepoints": [38] },
30 | { "index": "andand", "codepoints": [10837] },
31 | { "index": "And", "codepoints": [10835] },
32 | { "index": "and", "codepoints": [8743] },
33 | { "index": "andd", "codepoints": [10844] },
34 | { "index": "andslope", "codepoints": [10840] },
35 | { "index": "andv", "codepoints": [10842] },
36 | { "index": "ang", "codepoints": [8736] },
37 | { "index": "ange", "codepoints": [10660] },
38 | { "index": "angle", "codepoints": [8736] },
39 | { "index": "angmsdaa", "codepoints": [10664] },
40 | { "index": "angmsdab", "codepoints": [10665] },
41 | { "index": "angmsdac", "codepoints": [10666] },
42 | { "index": "angmsdad", "codepoints": [10667] },
43 | { "index": "angmsdae", "codepoints": [10668] },
44 | { "index": "angmsdaf", "codepoints": [10669] },
45 | { "index": "angmsdag", "codepoints": [10670] },
46 | { "index": "angmsdah", "codepoints": [10671] },
47 | { "index": "angmsd", "codepoints": [8737] },
48 | { "index": "angrt", "codepoints": [8735] },
49 | { "index": "angrtvb", "codepoints": [8894] },
50 | { "index": "angrtvbd", "codepoints": [10653] },
51 | { "index": "angsph", "codepoints": [8738] },
52 | { "index": "angst", "codepoints": [197] },
53 | { "index": "angzarr", "codepoints": [9084] },
54 | { "index": "Aogon", "codepoints": [260] },
55 | { "index": "aogon", "codepoints": [261] },
56 | { "index": "Aopf", "codepoints": [120120] },
57 | { "index": "aopf", "codepoints": [120146] },
58 | { "index": "apacir", "codepoints": [10863] },
59 | { "index": "ap", "codepoints": [8776] },
60 | { "index": "apE", "codepoints": [10864] },
61 | { "index": "ape", "codepoints": [8778] },
62 | { "index": "apid", "codepoints": [8779] },
63 | { "index": "apos", "codepoints": [39] },
64 | { "index": "ApplyFunction", "codepoints": [8289] },
65 | { "index": "approx", "codepoints": [8776] },
66 | { "index": "approxeq", "codepoints": [8778] },
67 | { "index": "Aring", "codepoints": [197] },
68 | { "index": "aring", "codepoints": [229] },
69 | { "index": "Ascr", "codepoints": [119964] },
70 | { "index": "ascr", "codepoints": [119990] },
71 | { "index": "Assign", "codepoints": [8788] },
72 | { "index": "ast", "codepoints": [42] },
73 | { "index": "asymp", "codepoints": [8776] },
74 | { "index": "asympeq", "codepoints": [8781] },
75 | { "index": "Atilde", "codepoints": [195] },
76 | { "index": "atilde", "codepoints": [227] },
77 | { "index": "Auml", "codepoints": [196] },
78 | { "index": "auml", "codepoints": [228] },
79 | { "index": "awconint", "codepoints": [8755] },
80 | { "index": "awint", "codepoints": [10769] },
81 | { "index": "backcong", "codepoints": [8780] },
82 | { "index": "backepsilon", "codepoints": [1014] },
83 | { "index": "backprime", "codepoints": [8245] },
84 | { "index": "backsim", "codepoints": [8765] },
85 | { "index": "backsimeq", "codepoints": [8909] },
86 | { "index": "Backslash", "codepoints": [8726] },
87 | { "index": "Barv", "codepoints": [10983] },
88 | { "index": "barvee", "codepoints": [8893] },
89 | { "index": "barwed", "codepoints": [8965] },
90 | { "index": "Barwed", "codepoints": [8966] },
91 | { "index": "barwedge", "codepoints": [8965] },
92 | { "index": "bbrk", "codepoints": [9141] },
93 | { "index": "bbrktbrk", "codepoints": [9142] },
94 | { "index": "bcong", "codepoints": [8780] },
95 | { "index": "Bcy", "codepoints": [1041] },
96 | { "index": "bcy", "codepoints": [1073] },
97 | { "index": "bdquo", "codepoints": [8222] },
98 | { "index": "becaus", "codepoints": [8757] },
99 | { "index": "because", "codepoints": [8757] },
100 | { "index": "Because", "codepoints": [8757] },
101 | { "index": "bemptyv", "codepoints": [10672] },
102 | { "index": "bepsi", "codepoints": [1014] },
103 | { "index": "bernou", "codepoints": [8492] },
104 | { "index": "Bernoullis", "codepoints": [8492] },
105 | { "index": "Beta", "codepoints": [914] },
106 | { "index": "beta", "codepoints": [946] },
107 | { "index": "beth", "codepoints": [8502] },
108 | { "index": "between", "codepoints": [8812] },
109 | { "index": "Bfr", "codepoints": [120069] },
110 | { "index": "bfr", "codepoints": [120095] },
111 | { "index": "bigcap", "codepoints": [8898] },
112 | { "index": "bigcirc", "codepoints": [9711] },
113 | { "index": "bigcup", "codepoints": [8899] },
114 | { "index": "bigodot", "codepoints": [10752] },
115 | { "index": "bigoplus", "codepoints": [10753] },
116 | { "index": "bigotimes", "codepoints": [10754] },
117 | { "index": "bigsqcup", "codepoints": [10758] },
118 | { "index": "bigstar", "codepoints": [9733] },
119 | { "index": "bigtriangledown", "codepoints": [9661] },
120 | { "index": "bigtriangleup", "codepoints": [9651] },
121 | { "index": "biguplus", "codepoints": [10756] },
122 | { "index": "bigvee", "codepoints": [8897] },
123 | { "index": "bigwedge", "codepoints": [8896] },
124 | { "index": "bkarow", "codepoints": [10509] },
125 | { "index": "blacklozenge", "codepoints": [10731] },
126 | { "index": "blacksquare", "codepoints": [9642] },
127 | { "index": "blacktriangle", "codepoints": [9652] },
128 | { "index": "blacktriangledown", "codepoints": [9662] },
129 | { "index": "blacktriangleleft", "codepoints": [9666] },
130 | { "index": "blacktriangleright", "codepoints": [9656] },
131 | { "index": "blank", "codepoints": [9251] },
132 | { "index": "blk12", "codepoints": [9618] },
133 | { "index": "blk14", "codepoints": [9617] },
134 | { "index": "blk34", "codepoints": [9619] },
135 | { "index": "block", "codepoints": [9608] },
136 | { "index": "bne", "codepoints": [61, 8421] },
137 | { "index": "bnequiv", "codepoints": [8801, 8421] },
138 | { "index": "bNot", "codepoints": [10989] },
139 | { "index": "bnot", "codepoints": [8976] },
140 | { "index": "Bopf", "codepoints": [120121] },
141 | { "index": "bopf", "codepoints": [120147] },
142 | { "index": "bot", "codepoints": [8869] },
143 | { "index": "bottom", "codepoints": [8869] },
144 | { "index": "bowtie", "codepoints": [8904] },
145 | { "index": "boxbox", "codepoints": [10697] },
146 | { "index": "boxdl", "codepoints": [9488] },
147 | { "index": "boxdL", "codepoints": [9557] },
148 | { "index": "boxDl", "codepoints": [9558] },
149 | { "index": "boxDL", "codepoints": [9559] },
150 | { "index": "boxdr", "codepoints": [9484] },
151 | { "index": "boxdR", "codepoints": [9554] },
152 | { "index": "boxDr", "codepoints": [9555] },
153 | { "index": "boxDR", "codepoints": [9556] },
154 | { "index": "boxh", "codepoints": [9472] },
155 | { "index": "boxH", "codepoints": [9552] },
156 | { "index": "boxhd", "codepoints": [9516] },
157 | { "index": "boxHd", "codepoints": [9572] },
158 | { "index": "boxhD", "codepoints": [9573] },
159 | { "index": "boxHD", "codepoints": [9574] },
160 | { "index": "boxhu", "codepoints": [9524] },
161 | { "index": "boxHu", "codepoints": [9575] },
162 | { "index": "boxhU", "codepoints": [9576] },
163 | { "index": "boxHU", "codepoints": [9577] },
164 | { "index": "boxminus", "codepoints": [8863] },
165 | { "index": "boxplus", "codepoints": [8862] },
166 | { "index": "boxtimes", "codepoints": [8864] },
167 | { "index": "boxul", "codepoints": [9496] },
168 | { "index": "boxuL", "codepoints": [9563] },
169 | { "index": "boxUl", "codepoints": [9564] },
170 | { "index": "boxUL", "codepoints": [9565] },
171 | { "index": "boxur", "codepoints": [9492] },
172 | { "index": "boxuR", "codepoints": [9560] },
173 | { "index": "boxUr", "codepoints": [9561] },
174 | { "index": "boxUR", "codepoints": [9562] },
175 | { "index": "boxv", "codepoints": [9474] },
176 | { "index": "boxV", "codepoints": [9553] },
177 | { "index": "boxvh", "codepoints": [9532] },
178 | { "index": "boxvH", "codepoints": [9578] },
179 | { "index": "boxVh", "codepoints": [9579] },
180 | { "index": "boxVH", "codepoints": [9580] },
181 | { "index": "boxvl", "codepoints": [9508] },
182 | { "index": "boxvL", "codepoints": [9569] },
183 | { "index": "boxVl", "codepoints": [9570] },
184 | { "index": "boxVL", "codepoints": [9571] },
185 | { "index": "boxvr", "codepoints": [9500] },
186 | { "index": "boxvR", "codepoints": [9566] },
187 | { "index": "boxVr", "codepoints": [9567] },
188 | { "index": "boxVR", "codepoints": [9568] },
189 | { "index": "bprime", "codepoints": [8245] },
190 | { "index": "breve", "codepoints": [728] },
191 | { "index": "Breve", "codepoints": [728] },
192 | { "index": "brvbar", "codepoints": [166] },
193 | { "index": "bscr", "codepoints": [119991] },
194 | { "index": "Bscr", "codepoints": [8492] },
195 | { "index": "bsemi", "codepoints": [8271] },
196 | { "index": "bsim", "codepoints": [8765] },
197 | { "index": "bsime", "codepoints": [8909] },
198 | { "index": "bsolb", "codepoints": [10693] },
199 | { "index": "bsol", "codepoints": [92] },
200 | { "index": "bsolhsub", "codepoints": [10184] },
201 | { "index": "bull", "codepoints": [8226] },
202 | { "index": "bullet", "codepoints": [8226] },
203 | { "index": "bump", "codepoints": [8782] },
204 | { "index": "bumpE", "codepoints": [10926] },
205 | { "index": "bumpe", "codepoints": [8783] },
206 | { "index": "Bumpeq", "codepoints": [8782] },
207 | { "index": "bumpeq", "codepoints": [8783] },
208 | { "index": "Cacute", "codepoints": [262] },
209 | { "index": "cacute", "codepoints": [263] },
210 | { "index": "capand", "codepoints": [10820] },
211 | { "index": "capbrcup", "codepoints": [10825] },
212 | { "index": "capcap", "codepoints": [10827] },
213 | { "index": "cap", "codepoints": [8745] },
214 | { "index": "Cap", "codepoints": [8914] },
215 | { "index": "capcup", "codepoints": [10823] },
216 | { "index": "capdot", "codepoints": [10816] },
217 | { "index": "CapitalDifferentialD", "codepoints": [8517] },
218 | { "index": "caps", "codepoints": [8745, 65024] },
219 | { "index": "caret", "codepoints": [8257] },
220 | { "index": "caron", "codepoints": [711] },
221 | { "index": "Cayleys", "codepoints": [8493] },
222 | { "index": "ccaps", "codepoints": [10829] },
223 | { "index": "Ccaron", "codepoints": [268] },
224 | { "index": "ccaron", "codepoints": [269] },
225 | { "index": "Ccedil", "codepoints": [199] },
226 | { "index": "ccedil", "codepoints": [231] },
227 | { "index": "Ccirc", "codepoints": [264] },
228 | { "index": "ccirc", "codepoints": [265] },
229 | { "index": "Cconint", "codepoints": [8752] },
230 | { "index": "ccups", "codepoints": [10828] },
231 | { "index": "ccupssm", "codepoints": [10832] },
232 | { "index": "Cdot", "codepoints": [266] },
233 | { "index": "cdot", "codepoints": [267] },
234 | { "index": "cedil", "codepoints": [184] },
235 | { "index": "Cedilla", "codepoints": [184] },
236 | { "index": "cemptyv", "codepoints": [10674] },
237 | { "index": "cent", "codepoints": [162] },
238 | { "index": "centerdot", "codepoints": [183] },
239 | { "index": "CenterDot", "codepoints": [183] },
240 | { "index": "cfr", "codepoints": [120096] },
241 | { "index": "Cfr", "codepoints": [8493] },
242 | { "index": "CHcy", "codepoints": [1063] },
243 | { "index": "chcy", "codepoints": [1095] },
244 | { "index": "check", "codepoints": [10003] },
245 | { "index": "checkmark", "codepoints": [10003] },
246 | { "index": "Chi", "codepoints": [935] },
247 | { "index": "chi", "codepoints": [967] },
248 | { "index": "circ", "codepoints": [710] },
249 | { "index": "circeq", "codepoints": [8791] },
250 | { "index": "circlearrowleft", "codepoints": [8634] },
251 | { "index": "circlearrowright", "codepoints": [8635] },
252 | { "index": "circledast", "codepoints": [8859] },
253 | { "index": "circledcirc", "codepoints": [8858] },
254 | { "index": "circleddash", "codepoints": [8861] },
255 | { "index": "CircleDot", "codepoints": [8857] },
256 | { "index": "circledR", "codepoints": [174] },
257 | { "index": "circledS", "codepoints": [9416] },
258 | { "index": "CircleMinus", "codepoints": [8854] },
259 | { "index": "CirclePlus", "codepoints": [8853] },
260 | { "index": "CircleTimes", "codepoints": [8855] },
261 | { "index": "cir", "codepoints": [9675] },
262 | { "index": "cirE", "codepoints": [10691] },
263 | { "index": "cire", "codepoints": [8791] },
264 | { "index": "cirfnint", "codepoints": [10768] },
265 | { "index": "cirmid", "codepoints": [10991] },
266 | { "index": "cirscir", "codepoints": [10690] },
267 | { "index": "ClockwiseContourIntegral", "codepoints": [8754] },
268 | { "index": "CloseCurlyDoubleQuote", "codepoints": [8221] },
269 | { "index": "CloseCurlyQuote", "codepoints": [8217] },
270 | { "index": "clubs", "codepoints": [9827] },
271 | { "index": "clubsuit", "codepoints": [9827] },
272 | { "index": "colon", "codepoints": [58] },
273 | { "index": "Colon", "codepoints": [8759] },
274 | { "index": "Colone", "codepoints": [10868] },
275 | { "index": "colone", "codepoints": [8788] },
276 | { "index": "coloneq", "codepoints": [8788] },
277 | { "index": "comma", "codepoints": [44] },
278 | { "index": "commat", "codepoints": [64] },
279 | { "index": "comp", "codepoints": [8705] },
280 | { "index": "compfn", "codepoints": [8728] },
281 | { "index": "complement", "codepoints": [8705] },
282 | { "index": "complexes", "codepoints": [8450] },
283 | { "index": "cong", "codepoints": [8773] },
284 | { "index": "congdot", "codepoints": [10861] },
285 | { "index": "Congruent", "codepoints": [8801] },
286 | { "index": "conint", "codepoints": [8750] },
287 | { "index": "Conint", "codepoints": [8751] },
288 | { "index": "ContourIntegral", "codepoints": [8750] },
289 | { "index": "copf", "codepoints": [120148] },
290 | { "index": "Copf", "codepoints": [8450] },
291 | { "index": "coprod", "codepoints": [8720] },
292 | { "index": "Coproduct", "codepoints": [8720] },
293 | { "index": "copy", "codepoints": [169] },
294 | { "index": "COPY", "codepoints": [169] },
295 | { "index": "copysr", "codepoints": [8471] },
296 | { "index": "CounterClockwiseContourIntegral", "codepoints": [8755] },
297 | { "index": "crarr", "codepoints": [8629] },
298 | { "index": "cross", "codepoints": [10007] },
299 | { "index": "Cross", "codepoints": [10799] },
300 | { "index": "Cscr", "codepoints": [119966] },
301 | { "index": "cscr", "codepoints": [119992] },
302 | { "index": "csub", "codepoints": [10959] },
303 | { "index": "csube", "codepoints": [10961] },
304 | { "index": "csup", "codepoints": [10960] },
305 | { "index": "csupe", "codepoints": [10962] },
306 | { "index": "ctdot", "codepoints": [8943] },
307 | { "index": "cudarrl", "codepoints": [10552] },
308 | { "index": "cudarrr", "codepoints": [10549] },
309 | { "index": "cuepr", "codepoints": [8926] },
310 | { "index": "cuesc", "codepoints": [8927] },
311 | { "index": "cularr", "codepoints": [8630] },
312 | { "index": "cularrp", "codepoints": [10557] },
313 | { "index": "cupbrcap", "codepoints": [10824] },
314 | { "index": "cupcap", "codepoints": [10822] },
315 | { "index": "CupCap", "codepoints": [8781] },
316 | { "index": "cup", "codepoints": [8746] },
317 | { "index": "Cup", "codepoints": [8915] },
318 | { "index": "cupcup", "codepoints": [10826] },
319 | { "index": "cupdot", "codepoints": [8845] },
320 | { "index": "cupor", "codepoints": [10821] },
321 | { "index": "cups", "codepoints": [8746, 65024] },
322 | { "index": "curarr", "codepoints": [8631] },
323 | { "index": "curarrm", "codepoints": [10556] },
324 | { "index": "curlyeqprec", "codepoints": [8926] },
325 | { "index": "curlyeqsucc", "codepoints": [8927] },
326 | { "index": "curlyvee", "codepoints": [8910] },
327 | { "index": "curlywedge", "codepoints": [8911] },
328 | { "index": "curren", "codepoints": [164] },
329 | { "index": "curvearrowleft", "codepoints": [8630] },
330 | { "index": "curvearrowright", "codepoints": [8631] },
331 | { "index": "cuvee", "codepoints": [8910] },
332 | { "index": "cuwed", "codepoints": [8911] },
333 | { "index": "cwconint", "codepoints": [8754] },
334 | { "index": "cwint", "codepoints": [8753] },
335 | { "index": "cylcty", "codepoints": [9005] },
336 | { "index": "dagger", "codepoints": [8224] },
337 | { "index": "Dagger", "codepoints": [8225] },
338 | { "index": "daleth", "codepoints": [8504] },
339 | { "index": "darr", "codepoints": [8595] },
340 | { "index": "Darr", "codepoints": [8609] },
341 | { "index": "dArr", "codepoints": [8659] },
342 | { "index": "dash", "codepoints": [8208] },
343 | { "index": "Dashv", "codepoints": [10980] },
344 | { "index": "dashv", "codepoints": [8867] },
345 | { "index": "dbkarow", "codepoints": [10511] },
346 | { "index": "dblac", "codepoints": [733] },
347 | { "index": "Dcaron", "codepoints": [270] },
348 | { "index": "dcaron", "codepoints": [271] },
349 | { "index": "Dcy", "codepoints": [1044] },
350 | { "index": "dcy", "codepoints": [1076] },
351 | { "index": "ddagger", "codepoints": [8225] },
352 | { "index": "ddarr", "codepoints": [8650] },
353 | { "index": "DD", "codepoints": [8517] },
354 | { "index": "dd", "codepoints": [8518] },
355 | { "index": "DDotrahd", "codepoints": [10513] },
356 | { "index": "ddotseq", "codepoints": [10871] },
357 | { "index": "deg", "codepoints": [176] },
358 | { "index": "Del", "codepoints": [8711] },
359 | { "index": "Delta", "codepoints": [916] },
360 | { "index": "delta", "codepoints": [948] },
361 | { "index": "demptyv", "codepoints": [10673] },
362 | { "index": "dfisht", "codepoints": [10623] },
363 | { "index": "Dfr", "codepoints": [120071] },
364 | { "index": "dfr", "codepoints": [120097] },
365 | { "index": "dHar", "codepoints": [10597] },
366 | { "index": "dharl", "codepoints": [8643] },
367 | { "index": "dharr", "codepoints": [8642] },
368 | { "index": "DiacriticalAcute", "codepoints": [180] },
369 | { "index": "DiacriticalDot", "codepoints": [729] },
370 | { "index": "DiacriticalDoubleAcute", "codepoints": [733] },
371 | { "index": "DiacriticalGrave", "codepoints": [96] },
372 | { "index": "DiacriticalTilde", "codepoints": [732] },
373 | { "index": "diam", "codepoints": [8900] },
374 | { "index": "diamond", "codepoints": [8900] },
375 | { "index": "Diamond", "codepoints": [8900] },
376 | { "index": "diamondsuit", "codepoints": [9830] },
377 | { "index": "diams", "codepoints": [9830] },
378 | { "index": "die", "codepoints": [168] },
379 | { "index": "DifferentialD", "codepoints": [8518] },
380 | { "index": "digamma", "codepoints": [989] },
381 | { "index": "disin", "codepoints": [8946] },
382 | { "index": "div", "codepoints": [247] },
383 | { "index": "divide", "codepoints": [247] },
384 | { "index": "divideontimes", "codepoints": [8903] },
385 | { "index": "divonx", "codepoints": [8903] },
386 | { "index": "DJcy", "codepoints": [1026] },
387 | { "index": "djcy", "codepoints": [1106] },
388 | { "index": "dlcorn", "codepoints": [8990] },
389 | { "index": "dlcrop", "codepoints": [8973] },
390 | { "index": "dollar", "codepoints": [36] },
391 | { "index": "Dopf", "codepoints": [120123] },
392 | { "index": "dopf", "codepoints": [120149] },
393 | { "index": "Dot", "codepoints": [168] },
394 | { "index": "dot", "codepoints": [729] },
395 | { "index": "DotDot", "codepoints": [8412] },
396 | { "index": "doteq", "codepoints": [8784] },
397 | { "index": "doteqdot", "codepoints": [8785] },
398 | { "index": "DotEqual", "codepoints": [8784] },
399 | { "index": "dotminus", "codepoints": [8760] },
400 | { "index": "dotplus", "codepoints": [8724] },
401 | { "index": "dotsquare", "codepoints": [8865] },
402 | { "index": "doublebarwedge", "codepoints": [8966] },
403 | { "index": "DoubleContourIntegral", "codepoints": [8751] },
404 | { "index": "DoubleDot", "codepoints": [168] },
405 | { "index": "DoubleDownArrow", "codepoints": [8659] },
406 | { "index": "DoubleLeftArrow", "codepoints": [8656] },
407 | { "index": "DoubleLeftRightArrow", "codepoints": [8660] },
408 | { "index": "DoubleLeftTee", "codepoints": [10980] },
409 | { "index": "DoubleLongLeftArrow", "codepoints": [10232] },
410 | { "index": "DoubleLongLeftRightArrow", "codepoints": [10234] },
411 | { "index": "DoubleLongRightArrow", "codepoints": [10233] },
412 | { "index": "DoubleRightArrow", "codepoints": [8658] },
413 | { "index": "DoubleRightTee", "codepoints": [8872] },
414 | { "index": "DoubleUpArrow", "codepoints": [8657] },
415 | { "index": "DoubleUpDownArrow", "codepoints": [8661] },
416 | { "index": "DoubleVerticalBar", "codepoints": [8741] },
417 | { "index": "DownArrowBar", "codepoints": [10515] },
418 | { "index": "downarrow", "codepoints": [8595] },
419 | { "index": "DownArrow", "codepoints": [8595] },
420 | { "index": "Downarrow", "codepoints": [8659] },
421 | { "index": "DownArrowUpArrow", "codepoints": [8693] },
422 | { "index": "DownBreve", "codepoints": [785] },
423 | { "index": "downdownarrows", "codepoints": [8650] },
424 | { "index": "downharpoonleft", "codepoints": [8643] },
425 | { "index": "downharpoonright", "codepoints": [8642] },
426 | { "index": "DownLeftRightVector", "codepoints": [10576] },
427 | { "index": "DownLeftTeeVector", "codepoints": [10590] },
428 | { "index": "DownLeftVectorBar", "codepoints": [10582] },
429 | { "index": "DownLeftVector", "codepoints": [8637] },
430 | { "index": "DownRightTeeVector", "codepoints": [10591] },
431 | { "index": "DownRightVectorBar", "codepoints": [10583] },
432 | { "index": "DownRightVector", "codepoints": [8641] },
433 | { "index": "DownTeeArrow", "codepoints": [8615] },
434 | { "index": "DownTee", "codepoints": [8868] },
435 | { "index": "drbkarow", "codepoints": [10512] },
436 | { "index": "drcorn", "codepoints": [8991] },
437 | { "index": "drcrop", "codepoints": [8972] },
438 | { "index": "Dscr", "codepoints": [119967] },
439 | { "index": "dscr", "codepoints": [119993] },
440 | { "index": "DScy", "codepoints": [1029] },
441 | { "index": "dscy", "codepoints": [1109] },
442 | { "index": "dsol", "codepoints": [10742] },
443 | { "index": "Dstrok", "codepoints": [272] },
444 | { "index": "dstrok", "codepoints": [273] },
445 | { "index": "dtdot", "codepoints": [8945] },
446 | { "index": "dtri", "codepoints": [9663] },
447 | { "index": "dtrif", "codepoints": [9662] },
448 | { "index": "duarr", "codepoints": [8693] },
449 | { "index": "duhar", "codepoints": [10607] },
450 | { "index": "dwangle", "codepoints": [10662] },
451 | { "index": "DZcy", "codepoints": [1039] },
452 | { "index": "dzcy", "codepoints": [1119] },
453 | { "index": "dzigrarr", "codepoints": [10239] },
454 | { "index": "Eacute", "codepoints": [201] },
455 | { "index": "eacute", "codepoints": [233] },
456 | { "index": "easter", "codepoints": [10862] },
457 | { "index": "Ecaron", "codepoints": [282] },
458 | { "index": "ecaron", "codepoints": [283] },
459 | { "index": "Ecirc", "codepoints": [202] },
460 | { "index": "ecirc", "codepoints": [234] },
461 | { "index": "ecir", "codepoints": [8790] },
462 | { "index": "ecolon", "codepoints": [8789] },
463 | { "index": "Ecy", "codepoints": [1069] },
464 | { "index": "ecy", "codepoints": [1101] },
465 | { "index": "eDDot", "codepoints": [10871] },
466 | { "index": "Edot", "codepoints": [278] },
467 | { "index": "edot", "codepoints": [279] },
468 | { "index": "eDot", "codepoints": [8785] },
469 | { "index": "ee", "codepoints": [8519] },
470 | { "index": "efDot", "codepoints": [8786] },
471 | { "index": "Efr", "codepoints": [120072] },
472 | { "index": "efr", "codepoints": [120098] },
473 | { "index": "eg", "codepoints": [10906] },
474 | { "index": "Egrave", "codepoints": [200] },
475 | { "index": "egrave", "codepoints": [232] },
476 | { "index": "egs", "codepoints": [10902] },
477 | { "index": "egsdot", "codepoints": [10904] },
478 | { "index": "el", "codepoints": [10905] },
479 | { "index": "Element", "codepoints": [8712] },
480 | { "index": "elinters", "codepoints": [9191] },
481 | { "index": "ell", "codepoints": [8467] },
482 | { "index": "els", "codepoints": [10901] },
483 | { "index": "elsdot", "codepoints": [10903] },
484 | { "index": "Emacr", "codepoints": [274] },
485 | { "index": "emacr", "codepoints": [275] },
486 | { "index": "empty", "codepoints": [8709] },
487 | { "index": "emptyset", "codepoints": [8709] },
488 | { "index": "EmptySmallSquare", "codepoints": [9723] },
489 | { "index": "emptyv", "codepoints": [8709] },
490 | { "index": "EmptyVerySmallSquare", "codepoints": [9643] },
491 | { "index": "emsp13", "codepoints": [8196] },
492 | { "index": "emsp14", "codepoints": [8197] },
493 | { "index": "emsp", "codepoints": [8195] },
494 | { "index": "ENG", "codepoints": [330] },
495 | { "index": "eng", "codepoints": [331] },
496 | { "index": "ensp", "codepoints": [8194] },
497 | { "index": "Eogon", "codepoints": [280] },
498 | { "index": "eogon", "codepoints": [281] },
499 | { "index": "Eopf", "codepoints": [120124] },
500 | { "index": "eopf", "codepoints": [120150] },
501 | { "index": "epar", "codepoints": [8917] },
502 | { "index": "eparsl", "codepoints": [10723] },
503 | { "index": "eplus", "codepoints": [10865] },
504 | { "index": "epsi", "codepoints": [949] },
505 | { "index": "Epsilon", "codepoints": [917] },
506 | { "index": "epsilon", "codepoints": [949] },
507 | { "index": "epsiv", "codepoints": [1013] },
508 | { "index": "eqcirc", "codepoints": [8790] },
509 | { "index": "eqcolon", "codepoints": [8789] },
510 | { "index": "eqsim", "codepoints": [8770] },
511 | { "index": "eqslantgtr", "codepoints": [10902] },
512 | { "index": "eqslantless", "codepoints": [10901] },
513 | { "index": "Equal", "codepoints": [10869] },
514 | { "index": "equals", "codepoints": [61] },
515 | { "index": "EqualTilde", "codepoints": [8770] },
516 | { "index": "equest", "codepoints": [8799] },
517 | { "index": "Equilibrium", "codepoints": [8652] },
518 | { "index": "equiv", "codepoints": [8801] },
519 | { "index": "equivDD", "codepoints": [10872] },
520 | { "index": "eqvparsl", "codepoints": [10725] },
521 | { "index": "erarr", "codepoints": [10609] },
522 | { "index": "erDot", "codepoints": [8787] },
523 | { "index": "escr", "codepoints": [8495] },
524 | { "index": "Escr", "codepoints": [8496] },
525 | { "index": "esdot", "codepoints": [8784] },
526 | { "index": "Esim", "codepoints": [10867] },
527 | { "index": "esim", "codepoints": [8770] },
528 | { "index": "Eta", "codepoints": [919] },
529 | { "index": "eta", "codepoints": [951] },
530 | { "index": "ETH", "codepoints": [208] },
531 | { "index": "eth", "codepoints": [240] },
532 | { "index": "Euml", "codepoints": [203] },
533 | { "index": "euml", "codepoints": [235] },
534 | { "index": "euro", "codepoints": [8364] },
535 | { "index": "excl", "codepoints": [33] },
536 | { "index": "exist", "codepoints": [8707] },
537 | { "index": "Exists", "codepoints": [8707] },
538 | { "index": "expectation", "codepoints": [8496] },
539 | { "index": "exponentiale", "codepoints": [8519] },
540 | { "index": "ExponentialE", "codepoints": [8519] },
541 | { "index": "fallingdotseq", "codepoints": [8786] },
542 | { "index": "Fcy", "codepoints": [1060] },
543 | { "index": "fcy", "codepoints": [1092] },
544 | { "index": "female", "codepoints": [9792] },
545 | { "index": "ffilig", "codepoints": [64259] },
546 | { "index": "fflig", "codepoints": [64256] },
547 | { "index": "ffllig", "codepoints": [64260] },
548 | { "index": "Ffr", "codepoints": [120073] },
549 | { "index": "ffr", "codepoints": [120099] },
550 | { "index": "filig", "codepoints": [64257] },
551 | { "index": "FilledSmallSquare", "codepoints": [9724] },
552 | { "index": "FilledVerySmallSquare", "codepoints": [9642] },
553 | { "index": "fjlig", "codepoints": [102, 106] },
554 | { "index": "flat", "codepoints": [9837] },
555 | { "index": "fllig", "codepoints": [64258] },
556 | { "index": "fltns", "codepoints": [9649] },
557 | { "index": "fnof", "codepoints": [402] },
558 | { "index": "Fopf", "codepoints": [120125] },
559 | { "index": "fopf", "codepoints": [120151] },
560 | { "index": "forall", "codepoints": [8704] },
561 | { "index": "ForAll", "codepoints": [8704] },
562 | { "index": "fork", "codepoints": [8916] },
563 | { "index": "forkv", "codepoints": [10969] },
564 | { "index": "Fouriertrf", "codepoints": [8497] },
565 | { "index": "fpartint", "codepoints": [10765] },
566 | { "index": "frac12", "codepoints": [189] },
567 | { "index": "frac13", "codepoints": [8531] },
568 | { "index": "frac14", "codepoints": [188] },
569 | { "index": "frac15", "codepoints": [8533] },
570 | { "index": "frac16", "codepoints": [8537] },
571 | { "index": "frac18", "codepoints": [8539] },
572 | { "index": "frac23", "codepoints": [8532] },
573 | { "index": "frac25", "codepoints": [8534] },
574 | { "index": "frac34", "codepoints": [190] },
575 | { "index": "frac35", "codepoints": [8535] },
576 | { "index": "frac38", "codepoints": [8540] },
577 | { "index": "frac45", "codepoints": [8536] },
578 | { "index": "frac56", "codepoints": [8538] },
579 | { "index": "frac58", "codepoints": [8541] },
580 | { "index": "frac78", "codepoints": [8542] },
581 | { "index": "frasl", "codepoints": [8260] },
582 | { "index": "frown", "codepoints": [8994] },
583 | { "index": "fscr", "codepoints": [119995] },
584 | { "index": "Fscr", "codepoints": [8497] },
585 | { "index": "gacute", "codepoints": [501] },
586 | { "index": "Gamma", "codepoints": [915] },
587 | { "index": "gamma", "codepoints": [947] },
588 | { "index": "Gammad", "codepoints": [988] },
589 | { "index": "gammad", "codepoints": [989] },
590 | { "index": "gap", "codepoints": [10886] },
591 | { "index": "Gbreve", "codepoints": [286] },
592 | { "index": "gbreve", "codepoints": [287] },
593 | { "index": "Gcedil", "codepoints": [290] },
594 | { "index": "Gcirc", "codepoints": [284] },
595 | { "index": "gcirc", "codepoints": [285] },
596 | { "index": "Gcy", "codepoints": [1043] },
597 | { "index": "gcy", "codepoints": [1075] },
598 | { "index": "Gdot", "codepoints": [288] },
599 | { "index": "gdot", "codepoints": [289] },
600 | { "index": "ge", "codepoints": [8805] },
601 | { "index": "gE", "codepoints": [8807] },
602 | { "index": "gEl", "codepoints": [10892] },
603 | { "index": "gel", "codepoints": [8923] },
604 | { "index": "geq", "codepoints": [8805] },
605 | { "index": "geqq", "codepoints": [8807] },
606 | { "index": "geqslant", "codepoints": [10878] },
607 | { "index": "gescc", "codepoints": [10921] },
608 | { "index": "ges", "codepoints": [10878] },
609 | { "index": "gesdot", "codepoints": [10880] },
610 | { "index": "gesdoto", "codepoints": [10882] },
611 | { "index": "gesdotol", "codepoints": [10884] },
612 | { "index": "gesl", "codepoints": [8923, 65024] },
613 | { "index": "gesles", "codepoints": [10900] },
614 | { "index": "Gfr", "codepoints": [120074] },
615 | { "index": "gfr", "codepoints": [120100] },
616 | { "index": "gg", "codepoints": [8811] },
617 | { "index": "Gg", "codepoints": [8921] },
618 | { "index": "ggg", "codepoints": [8921] },
619 | { "index": "gimel", "codepoints": [8503] },
620 | { "index": "GJcy", "codepoints": [1027] },
621 | { "index": "gjcy", "codepoints": [1107] },
622 | { "index": "gla", "codepoints": [10917] },
623 | { "index": "gl", "codepoints": [8823] },
624 | { "index": "glE", "codepoints": [10898] },
625 | { "index": "glj", "codepoints": [10916] },
626 | { "index": "gnap", "codepoints": [10890] },
627 | { "index": "gnapprox", "codepoints": [10890] },
628 | { "index": "gne", "codepoints": [10888] },
629 | { "index": "gnE", "codepoints": [8809] },
630 | { "index": "gneq", "codepoints": [10888] },
631 | { "index": "gneqq", "codepoints": [8809] },
632 | { "index": "gnsim", "codepoints": [8935] },
633 | { "index": "Gopf", "codepoints": [120126] },
634 | { "index": "gopf", "codepoints": [120152] },
635 | { "index": "grave", "codepoints": [96] },
636 | { "index": "GreaterEqual", "codepoints": [8805] },
637 | { "index": "GreaterEqualLess", "codepoints": [8923] },
638 | { "index": "GreaterFullEqual", "codepoints": [8807] },
639 | { "index": "GreaterGreater", "codepoints": [10914] },
640 | { "index": "GreaterLess", "codepoints": [8823] },
641 | { "index": "GreaterSlantEqual", "codepoints": [10878] },
642 | { "index": "GreaterTilde", "codepoints": [8819] },
643 | { "index": "Gscr", "codepoints": [119970] },
644 | { "index": "gscr", "codepoints": [8458] },
645 | { "index": "gsim", "codepoints": [8819] },
646 | { "index": "gsime", "codepoints": [10894] },
647 | { "index": "gsiml", "codepoints": [10896] },
648 | { "index": "gtcc", "codepoints": [10919] },
649 | { "index": "gtcir", "codepoints": [10874] },
650 | { "index": "gt", "codepoints": [62] },
651 | { "index": "GT", "codepoints": [62] },
652 | { "index": "Gt", "codepoints": [8811] },
653 | { "index": "gtdot", "codepoints": [8919] },
654 | { "index": "gtlPar", "codepoints": [10645] },
655 | { "index": "gtquest", "codepoints": [10876] },
656 | { "index": "gtrapprox", "codepoints": [10886] },
657 | { "index": "gtrarr", "codepoints": [10616] },
658 | { "index": "gtrdot", "codepoints": [8919] },
659 | { "index": "gtreqless", "codepoints": [8923] },
660 | { "index": "gtreqqless", "codepoints": [10892] },
661 | { "index": "gtrless", "codepoints": [8823] },
662 | { "index": "gtrsim", "codepoints": [8819] },
663 | { "index": "gvertneqq", "codepoints": [8809, 65024] },
664 | { "index": "gvnE", "codepoints": [8809, 65024] },
665 | { "index": "Hacek", "codepoints": [711] },
666 | { "index": "hairsp", "codepoints": [8202] },
667 | { "index": "half", "codepoints": [189] },
668 | { "index": "hamilt", "codepoints": [8459] },
669 | { "index": "HARDcy", "codepoints": [1066] },
670 | { "index": "hardcy", "codepoints": [1098] },
671 | { "index": "harrcir", "codepoints": [10568] },
672 | { "index": "harr", "codepoints": [8596] },
673 | { "index": "hArr", "codepoints": [8660] },
674 | { "index": "harrw", "codepoints": [8621] },
675 | { "index": "Hat", "codepoints": [94] },
676 | { "index": "hbar", "codepoints": [8463] },
677 | { "index": "Hcirc", "codepoints": [292] },
678 | { "index": "hcirc", "codepoints": [293] },
679 | { "index": "hearts", "codepoints": [9829] },
680 | { "index": "heartsuit", "codepoints": [9829] },
681 | { "index": "hellip", "codepoints": [8230] },
682 | { "index": "hercon", "codepoints": [8889] },
683 | { "index": "hfr", "codepoints": [120101] },
684 | { "index": "Hfr", "codepoints": [8460] },
685 | { "index": "HilbertSpace", "codepoints": [8459] },
686 | { "index": "hksearow", "codepoints": [10533] },
687 | { "index": "hkswarow", "codepoints": [10534] },
688 | { "index": "hoarr", "codepoints": [8703] },
689 | { "index": "homtht", "codepoints": [8763] },
690 | { "index": "hookleftarrow", "codepoints": [8617] },
691 | { "index": "hookrightarrow", "codepoints": [8618] },
692 | { "index": "hopf", "codepoints": [120153] },
693 | { "index": "Hopf", "codepoints": [8461] },
694 | { "index": "horbar", "codepoints": [8213] },
695 | { "index": "HorizontalLine", "codepoints": [9472] },
696 | { "index": "hscr", "codepoints": [119997] },
697 | { "index": "Hscr", "codepoints": [8459] },
698 | { "index": "hslash", "codepoints": [8463] },
699 | { "index": "Hstrok", "codepoints": [294] },
700 | { "index": "hstrok", "codepoints": [295] },
701 | { "index": "HumpDownHump", "codepoints": [8782] },
702 | { "index": "HumpEqual", "codepoints": [8783] },
703 | { "index": "hybull", "codepoints": [8259] },
704 | { "index": "hyphen", "codepoints": [8208] },
705 | { "index": "Iacute", "codepoints": [205] },
706 | { "index": "iacute", "codepoints": [237] },
707 | { "index": "ic", "codepoints": [8291] },
708 | { "index": "Icirc", "codepoints": [206] },
709 | { "index": "icirc", "codepoints": [238] },
710 | { "index": "Icy", "codepoints": [1048] },
711 | { "index": "icy", "codepoints": [1080] },
712 | { "index": "Idot", "codepoints": [304] },
713 | { "index": "IEcy", "codepoints": [1045] },
714 | { "index": "iecy", "codepoints": [1077] },
715 | { "index": "iexcl", "codepoints": [161] },
716 | { "index": "iff", "codepoints": [8660] },
717 | { "index": "ifr", "codepoints": [120102] },
718 | { "index": "Ifr", "codepoints": [8465] },
719 | { "index": "Igrave", "codepoints": [204] },
720 | { "index": "igrave", "codepoints": [236] },
721 | { "index": "ii", "codepoints": [8520] },
722 | { "index": "iiiint", "codepoints": [10764] },
723 | { "index": "iiint", "codepoints": [8749] },
724 | { "index": "iinfin", "codepoints": [10716] },
725 | { "index": "iiota", "codepoints": [8489] },
726 | { "index": "IJlig", "codepoints": [306] },
727 | { "index": "ijlig", "codepoints": [307] },
728 | { "index": "Imacr", "codepoints": [298] },
729 | { "index": "imacr", "codepoints": [299] },
730 | { "index": "image", "codepoints": [8465] },
731 | { "index": "ImaginaryI", "codepoints": [8520] },
732 | { "index": "imagline", "codepoints": [8464] },
733 | { "index": "imagpart", "codepoints": [8465] },
734 | { "index": "imath", "codepoints": [305] },
735 | { "index": "Im", "codepoints": [8465] },
736 | { "index": "imof", "codepoints": [8887] },
737 | { "index": "imped", "codepoints": [437] },
738 | { "index": "Implies", "codepoints": [8658] },
739 | { "index": "incare", "codepoints": [8453] },
740 | { "index": "in", "codepoints": [8712] },
741 | { "index": "infin", "codepoints": [8734] },
742 | { "index": "infintie", "codepoints": [10717] },
743 | { "index": "inodot", "codepoints": [305] },
744 | { "index": "intcal", "codepoints": [8890] },
745 | { "index": "int", "codepoints": [8747] },
746 | { "index": "Int", "codepoints": [8748] },
747 | { "index": "integers", "codepoints": [8484] },
748 | { "index": "Integral", "codepoints": [8747] },
749 | { "index": "intercal", "codepoints": [8890] },
750 | { "index": "Intersection", "codepoints": [8898] },
751 | { "index": "intlarhk", "codepoints": [10775] },
752 | { "index": "intprod", "codepoints": [10812] },
753 | { "index": "InvisibleComma", "codepoints": [8291] },
754 | { "index": "InvisibleTimes", "codepoints": [8290] },
755 | { "index": "IOcy", "codepoints": [1025] },
756 | { "index": "iocy", "codepoints": [1105] },
757 | { "index": "Iogon", "codepoints": [302] },
758 | { "index": "iogon", "codepoints": [303] },
759 | { "index": "Iopf", "codepoints": [120128] },
760 | { "index": "iopf", "codepoints": [120154] },
761 | { "index": "Iota", "codepoints": [921] },
762 | { "index": "iota", "codepoints": [953] },
763 | { "index": "iprod", "codepoints": [10812] },
764 | { "index": "iquest", "codepoints": [191] },
765 | { "index": "iscr", "codepoints": [119998] },
766 | { "index": "Iscr", "codepoints": [8464] },
767 | { "index": "isin", "codepoints": [8712] },
768 | { "index": "isindot", "codepoints": [8949] },
769 | { "index": "isinE", "codepoints": [8953] },
770 | { "index": "isins", "codepoints": [8948] },
771 | { "index": "isinsv", "codepoints": [8947] },
772 | { "index": "isinv", "codepoints": [8712] },
773 | { "index": "it", "codepoints": [8290] },
774 | { "index": "Itilde", "codepoints": [296] },
775 | { "index": "itilde", "codepoints": [297] },
776 | { "index": "Iukcy", "codepoints": [1030] },
777 | { "index": "iukcy", "codepoints": [1110] },
778 | { "index": "Iuml", "codepoints": [207] },
779 | { "index": "iuml", "codepoints": [239] },
780 | { "index": "Jcirc", "codepoints": [308] },
781 | { "index": "jcirc", "codepoints": [309] },
782 | { "index": "Jcy", "codepoints": [1049] },
783 | { "index": "jcy", "codepoints": [1081] },
784 | { "index": "Jfr", "codepoints": [120077] },
785 | { "index": "jfr", "codepoints": [120103] },
786 | { "index": "jmath", "codepoints": [567] },
787 | { "index": "Jopf", "codepoints": [120129] },
788 | { "index": "jopf", "codepoints": [120155] },
789 | { "index": "Jscr", "codepoints": [119973] },
790 | { "index": "jscr", "codepoints": [119999] },
791 | { "index": "Jsercy", "codepoints": [1032] },
792 | { "index": "jsercy", "codepoints": [1112] },
793 | { "index": "Jukcy", "codepoints": [1028] },
794 | { "index": "jukcy", "codepoints": [1108] },
795 | { "index": "Kappa", "codepoints": [922] },
796 | { "index": "kappa", "codepoints": [954] },
797 | { "index": "kappav", "codepoints": [1008] },
798 | { "index": "Kcedil", "codepoints": [310] },
799 | { "index": "kcedil", "codepoints": [311] },
800 | { "index": "Kcy", "codepoints": [1050] },
801 | { "index": "kcy", "codepoints": [1082] },
802 | { "index": "Kfr", "codepoints": [120078] },
803 | { "index": "kfr", "codepoints": [120104] },
804 | { "index": "kgreen", "codepoints": [312] },
805 | { "index": "KHcy", "codepoints": [1061] },
806 | { "index": "khcy", "codepoints": [1093] },
807 | { "index": "KJcy", "codepoints": [1036] },
808 | { "index": "kjcy", "codepoints": [1116] },
809 | { "index": "Kopf", "codepoints": [120130] },
810 | { "index": "kopf", "codepoints": [120156] },
811 | { "index": "Kscr", "codepoints": [119974] },
812 | { "index": "kscr", "codepoints": [120000] },
813 | { "index": "lAarr", "codepoints": [8666] },
814 | { "index": "Lacute", "codepoints": [313] },
815 | { "index": "lacute", "codepoints": [314] },
816 | { "index": "laemptyv", "codepoints": [10676] },
817 | { "index": "lagran", "codepoints": [8466] },
818 | { "index": "Lambda", "codepoints": [923] },
819 | { "index": "lambda", "codepoints": [955] },
820 | { "index": "lang", "codepoints": [10216] },
821 | { "index": "Lang", "codepoints": [10218] },
822 | { "index": "langd", "codepoints": [10641] },
823 | { "index": "langle", "codepoints": [10216] },
824 | { "index": "lap", "codepoints": [10885] },
825 | { "index": "Laplacetrf", "codepoints": [8466] },
826 | { "index": "laquo", "codepoints": [171] },
827 | { "index": "larrb", "codepoints": [8676] },
828 | { "index": "larrbfs", "codepoints": [10527] },
829 | { "index": "larr", "codepoints": [8592] },
830 | { "index": "Larr", "codepoints": [8606] },
831 | { "index": "lArr", "codepoints": [8656] },
832 | { "index": "larrfs", "codepoints": [10525] },
833 | { "index": "larrhk", "codepoints": [8617] },
834 | { "index": "larrlp", "codepoints": [8619] },
835 | { "index": "larrpl", "codepoints": [10553] },
836 | { "index": "larrsim", "codepoints": [10611] },
837 | { "index": "larrtl", "codepoints": [8610] },
838 | { "index": "latail", "codepoints": [10521] },
839 | { "index": "lAtail", "codepoints": [10523] },
840 | { "index": "lat", "codepoints": [10923] },
841 | { "index": "late", "codepoints": [10925] },
842 | { "index": "lates", "codepoints": [10925, 65024] },
843 | { "index": "lbarr", "codepoints": [10508] },
844 | { "index": "lBarr", "codepoints": [10510] },
845 | { "index": "lbbrk", "codepoints": [10098] },
846 | { "index": "lbrace", "codepoints": [123] },
847 | { "index": "lbrack", "codepoints": [91] },
848 | { "index": "lbrke", "codepoints": [10635] },
849 | { "index": "lbrksld", "codepoints": [10639] },
850 | { "index": "lbrkslu", "codepoints": [10637] },
851 | { "index": "Lcaron", "codepoints": [317] },
852 | { "index": "lcaron", "codepoints": [318] },
853 | { "index": "Lcedil", "codepoints": [315] },
854 | { "index": "lcedil", "codepoints": [316] },
855 | { "index": "lceil", "codepoints": [8968] },
856 | { "index": "lcub", "codepoints": [123] },
857 | { "index": "Lcy", "codepoints": [1051] },
858 | { "index": "lcy", "codepoints": [1083] },
859 | { "index": "ldca", "codepoints": [10550] },
860 | { "index": "ldquo", "codepoints": [8220] },
861 | { "index": "ldquor", "codepoints": [8222] },
862 | { "index": "ldrdhar", "codepoints": [10599] },
863 | { "index": "ldrushar", "codepoints": [10571] },
864 | { "index": "ldsh", "codepoints": [8626] },
865 | { "index": "le", "codepoints": [8804] },
866 | { "index": "lE", "codepoints": [8806] },
867 | { "index": "LeftAngleBracket", "codepoints": [10216] },
868 | { "index": "LeftArrowBar", "codepoints": [8676] },
869 | { "index": "leftarrow", "codepoints": [8592] },
870 | { "index": "LeftArrow", "codepoints": [8592] },
871 | { "index": "Leftarrow", "codepoints": [8656] },
872 | { "index": "LeftArrowRightArrow", "codepoints": [8646] },
873 | { "index": "leftarrowtail", "codepoints": [8610] },
874 | { "index": "LeftCeiling", "codepoints": [8968] },
875 | { "index": "LeftDoubleBracket", "codepoints": [10214] },
876 | { "index": "LeftDownTeeVector", "codepoints": [10593] },
877 | { "index": "LeftDownVectorBar", "codepoints": [10585] },
878 | { "index": "LeftDownVector", "codepoints": [8643] },
879 | { "index": "LeftFloor", "codepoints": [8970] },
880 | { "index": "leftharpoondown", "codepoints": [8637] },
881 | { "index": "leftharpoonup", "codepoints": [8636] },
882 | { "index": "leftleftarrows", "codepoints": [8647] },
883 | { "index": "leftrightarrow", "codepoints": [8596] },
884 | { "index": "LeftRightArrow", "codepoints": [8596] },
885 | { "index": "Leftrightarrow", "codepoints": [8660] },
886 | { "index": "leftrightarrows", "codepoints": [8646] },
887 | { "index": "leftrightharpoons", "codepoints": [8651] },
888 | { "index": "leftrightsquigarrow", "codepoints": [8621] },
889 | { "index": "LeftRightVector", "codepoints": [10574] },
890 | { "index": "LeftTeeArrow", "codepoints": [8612] },
891 | { "index": "LeftTee", "codepoints": [8867] },
892 | { "index": "LeftTeeVector", "codepoints": [10586] },
893 | { "index": "leftthreetimes", "codepoints": [8907] },
894 | { "index": "LeftTriangleBar", "codepoints": [10703] },
895 | { "index": "LeftTriangle", "codepoints": [8882] },
896 | { "index": "LeftTriangleEqual", "codepoints": [8884] },
897 | { "index": "LeftUpDownVector", "codepoints": [10577] },
898 | { "index": "LeftUpTeeVector", "codepoints": [10592] },
899 | { "index": "LeftUpVectorBar", "codepoints": [10584] },
900 | { "index": "LeftUpVector", "codepoints": [8639] },
901 | { "index": "LeftVectorBar", "codepoints": [10578] },
902 | { "index": "LeftVector", "codepoints": [8636] },
903 | { "index": "lEg", "codepoints": [10891] },
904 | { "index": "leg", "codepoints": [8922] },
905 | { "index": "leq", "codepoints": [8804] },
906 | { "index": "leqq", "codepoints": [8806] },
907 | { "index": "leqslant", "codepoints": [10877] },
908 | { "index": "lescc", "codepoints": [10920] },
909 | { "index": "les", "codepoints": [10877] },
910 | { "index": "lesdot", "codepoints": [10879] },
911 | { "index": "lesdoto", "codepoints": [10881] },
912 | { "index": "lesdotor", "codepoints": [10883] },
913 | { "index": "lesg", "codepoints": [8922, 65024] },
914 | { "index": "lesges", "codepoints": [10899] },
915 | { "index": "lessapprox", "codepoints": [10885] },
916 | { "index": "lessdot", "codepoints": [8918] },
917 | { "index": "lesseqgtr", "codepoints": [8922] },
918 | { "index": "lesseqqgtr", "codepoints": [10891] },
919 | { "index": "LessEqualGreater", "codepoints": [8922] },
920 | { "index": "LessFullEqual", "codepoints": [8806] },
921 | { "index": "LessGreater", "codepoints": [8822] },
922 | { "index": "lessgtr", "codepoints": [8822] },
923 | { "index": "LessLess", "codepoints": [10913] },
924 | { "index": "lesssim", "codepoints": [8818] },
925 | { "index": "LessSlantEqual", "codepoints": [10877] },
926 | { "index": "LessTilde", "codepoints": [8818] },
927 | { "index": "lfisht", "codepoints": [10620] },
928 | { "index": "lfloor", "codepoints": [8970] },
929 | { "index": "Lfr", "codepoints": [120079] },
930 | { "index": "lfr", "codepoints": [120105] },
931 | { "index": "lg", "codepoints": [8822] },
932 | { "index": "lgE", "codepoints": [10897] },
933 | { "index": "lHar", "codepoints": [10594] },
934 | { "index": "lhard", "codepoints": [8637] },
935 | { "index": "lharu", "codepoints": [8636] },
936 | { "index": "lharul", "codepoints": [10602] },
937 | { "index": "lhblk", "codepoints": [9604] },
938 | { "index": "LJcy", "codepoints": [1033] },
939 | { "index": "ljcy", "codepoints": [1113] },
940 | { "index": "llarr", "codepoints": [8647] },
941 | { "index": "ll", "codepoints": [8810] },
942 | { "index": "Ll", "codepoints": [8920] },
943 | { "index": "llcorner", "codepoints": [8990] },
944 | { "index": "Lleftarrow", "codepoints": [8666] },
945 | { "index": "llhard", "codepoints": [10603] },
946 | { "index": "lltri", "codepoints": [9722] },
947 | { "index": "Lmidot", "codepoints": [319] },
948 | { "index": "lmidot", "codepoints": [320] },
949 | { "index": "lmoustache", "codepoints": [9136] },
950 | { "index": "lmoust", "codepoints": [9136] },
951 | { "index": "lnap", "codepoints": [10889] },
952 | { "index": "lnapprox", "codepoints": [10889] },
953 | { "index": "lne", "codepoints": [10887] },
954 | { "index": "lnE", "codepoints": [8808] },
955 | { "index": "lneq", "codepoints": [10887] },
956 | { "index": "lneqq", "codepoints": [8808] },
957 | { "index": "lnsim", "codepoints": [8934] },
958 | { "index": "loang", "codepoints": [10220] },
959 | { "index": "loarr", "codepoints": [8701] },
960 | { "index": "lobrk", "codepoints": [10214] },
961 | { "index": "longleftarrow", "codepoints": [10229] },
962 | { "index": "LongLeftArrow", "codepoints": [10229] },
963 | { "index": "Longleftarrow", "codepoints": [10232] },
964 | { "index": "longleftrightarrow", "codepoints": [10231] },
965 | { "index": "LongLeftRightArrow", "codepoints": [10231] },
966 | { "index": "Longleftrightarrow", "codepoints": [10234] },
967 | { "index": "longmapsto", "codepoints": [10236] },
968 | { "index": "longrightarrow", "codepoints": [10230] },
969 | { "index": "LongRightArrow", "codepoints": [10230] },
970 | { "index": "Longrightarrow", "codepoints": [10233] },
971 | { "index": "looparrowleft", "codepoints": [8619] },
972 | { "index": "looparrowright", "codepoints": [8620] },
973 | { "index": "lopar", "codepoints": [10629] },
974 | { "index": "Lopf", "codepoints": [120131] },
975 | { "index": "lopf", "codepoints": [120157] },
976 | { "index": "loplus", "codepoints": [10797] },
977 | { "index": "lotimes", "codepoints": [10804] },
978 | { "index": "lowast", "codepoints": [8727] },
979 | { "index": "lowbar", "codepoints": [95] },
980 | { "index": "LowerLeftArrow", "codepoints": [8601] },
981 | { "index": "LowerRightArrow", "codepoints": [8600] },
982 | { "index": "loz", "codepoints": [9674] },
983 | { "index": "lozenge", "codepoints": [9674] },
984 | { "index": "lozf", "codepoints": [10731] },
985 | { "index": "lpar", "codepoints": [40] },
986 | { "index": "lparlt", "codepoints": [10643] },
987 | { "index": "lrarr", "codepoints": [8646] },
988 | { "index": "lrcorner", "codepoints": [8991] },
989 | { "index": "lrhar", "codepoints": [8651] },
990 | { "index": "lrhard", "codepoints": [10605] },
991 | { "index": "lrm", "codepoints": [8206] },
992 | { "index": "lrtri", "codepoints": [8895] },
993 | { "index": "lsaquo", "codepoints": [8249] },
994 | { "index": "lscr", "codepoints": [120001] },
995 | { "index": "Lscr", "codepoints": [8466] },
996 | { "index": "lsh", "codepoints": [8624] },
997 | { "index": "Lsh", "codepoints": [8624] },
998 | { "index": "lsim", "codepoints": [8818] },
999 | { "index": "lsime", "codepoints": [10893] },
1000 | { "index": "lsimg", "codepoints": [10895] },
1001 | { "index": "lsqb", "codepoints": [91] },
1002 | { "index": "lsquo", "codepoints": [8216] },
1003 | { "index": "lsquor", "codepoints": [8218] },
1004 | { "index": "Lstrok", "codepoints": [321] },
1005 | { "index": "lstrok", "codepoints": [322] },
1006 | { "index": "ltcc", "codepoints": [10918] },
1007 | { "index": "ltcir", "codepoints": [10873] },
1008 | { "index": "lt", "codepoints": [60] },
1009 | { "index": "LT", "codepoints": [60] },
1010 | { "index": "Lt", "codepoints": [8810] },
1011 | { "index": "ltdot", "codepoints": [8918] },
1012 | { "index": "lthree", "codepoints": [8907] },
1013 | { "index": "ltimes", "codepoints": [8905] },
1014 | { "index": "ltlarr", "codepoints": [10614] },
1015 | { "index": "ltquest", "codepoints": [10875] },
1016 | { "index": "ltri", "codepoints": [9667] },
1017 | { "index": "ltrie", "codepoints": [8884] },
1018 | { "index": "ltrif", "codepoints": [9666] },
1019 | { "index": "ltrPar", "codepoints": [10646] },
1020 | { "index": "lurdshar", "codepoints": [10570] },
1021 | { "index": "luruhar", "codepoints": [10598] },
1022 | { "index": "lvertneqq", "codepoints": [8808, 65024] },
1023 | { "index": "lvnE", "codepoints": [8808, 65024] },
1024 | { "index": "macr", "codepoints": [175] },
1025 | { "index": "male", "codepoints": [9794] },
1026 | { "index": "malt", "codepoints": [10016] },
1027 | { "index": "maltese", "codepoints": [10016] },
1028 | { "index": "Map", "codepoints": [10501] },
1029 | { "index": "map", "codepoints": [8614] },
1030 | { "index": "mapsto", "codepoints": [8614] },
1031 | { "index": "mapstodown", "codepoints": [8615] },
1032 | { "index": "mapstoleft", "codepoints": [8612] },
1033 | { "index": "mapstoup", "codepoints": [8613] },
1034 | { "index": "marker", "codepoints": [9646] },
1035 | { "index": "mcomma", "codepoints": [10793] },
1036 | { "index": "Mcy", "codepoints": [1052] },
1037 | { "index": "mcy", "codepoints": [1084] },
1038 | { "index": "mdash", "codepoints": [8212] },
1039 | { "index": "mDDot", "codepoints": [8762] },
1040 | { "index": "measuredangle", "codepoints": [8737] },
1041 | { "index": "MediumSpace", "codepoints": [8287] },
1042 | { "index": "Mellintrf", "codepoints": [8499] },
1043 | { "index": "Mfr", "codepoints": [120080] },
1044 | { "index": "mfr", "codepoints": [120106] },
1045 | { "index": "mho", "codepoints": [8487] },
1046 | { "index": "micro", "codepoints": [181] },
1047 | { "index": "midast", "codepoints": [42] },
1048 | { "index": "midcir", "codepoints": [10992] },
1049 | { "index": "mid", "codepoints": [8739] },
1050 | { "index": "middot", "codepoints": [183] },
1051 | { "index": "minusb", "codepoints": [8863] },
1052 | { "index": "minus", "codepoints": [8722] },
1053 | { "index": "minusd", "codepoints": [8760] },
1054 | { "index": "minusdu", "codepoints": [10794] },
1055 | { "index": "MinusPlus", "codepoints": [8723] },
1056 | { "index": "mlcp", "codepoints": [10971] },
1057 | { "index": "mldr", "codepoints": [8230] },
1058 | { "index": "mnplus", "codepoints": [8723] },
1059 | { "index": "models", "codepoints": [8871] },
1060 | { "index": "Mopf", "codepoints": [120132] },
1061 | { "index": "mopf", "codepoints": [120158] },
1062 | { "index": "mp", "codepoints": [8723] },
1063 | { "index": "mscr", "codepoints": [120002] },
1064 | { "index": "Mscr", "codepoints": [8499] },
1065 | { "index": "mstpos", "codepoints": [8766] },
1066 | { "index": "Mu", "codepoints": [924] },
1067 | { "index": "mu", "codepoints": [956] },
1068 | { "index": "multimap", "codepoints": [8888] },
1069 | { "index": "mumap", "codepoints": [8888] },
1070 | { "index": "nabla", "codepoints": [8711] },
1071 | { "index": "Nacute", "codepoints": [323] },
1072 | { "index": "nacute", "codepoints": [324] },
1073 | { "index": "nang", "codepoints": [8736, 8402] },
1074 | { "index": "nap", "codepoints": [8777] },
1075 | { "index": "napE", "codepoints": [10864, 824] },
1076 | { "index": "napid", "codepoints": [8779, 824] },
1077 | { "index": "napos", "codepoints": [329] },
1078 | { "index": "napprox", "codepoints": [8777] },
1079 | { "index": "natural", "codepoints": [9838] },
1080 | { "index": "naturals", "codepoints": [8469] },
1081 | { "index": "natur", "codepoints": [9838] },
1082 | { "index": "nbsp", "codepoints": [160] },
1083 | { "index": "nbump", "codepoints": [8782, 824] },
1084 | { "index": "nbumpe", "codepoints": [8783, 824] },
1085 | { "index": "ncap", "codepoints": [10819] },
1086 | { "index": "Ncaron", "codepoints": [327] },
1087 | { "index": "ncaron", "codepoints": [328] },
1088 | { "index": "Ncedil", "codepoints": [325] },
1089 | { "index": "ncedil", "codepoints": [326] },
1090 | { "index": "ncong", "codepoints": [8775] },
1091 | { "index": "ncongdot", "codepoints": [10861, 824] },
1092 | { "index": "ncup", "codepoints": [10818] },
1093 | { "index": "Ncy", "codepoints": [1053] },
1094 | { "index": "ncy", "codepoints": [1085] },
1095 | { "index": "ndash", "codepoints": [8211] },
1096 | { "index": "nearhk", "codepoints": [10532] },
1097 | { "index": "nearr", "codepoints": [8599] },
1098 | { "index": "neArr", "codepoints": [8663] },
1099 | { "index": "nearrow", "codepoints": [8599] },
1100 | { "index": "ne", "codepoints": [8800] },
1101 | { "index": "nedot", "codepoints": [8784, 824] },
1102 | { "index": "NegativeMediumSpace", "codepoints": [8203] },
1103 | { "index": "NegativeThickSpace", "codepoints": [8203] },
1104 | { "index": "NegativeThinSpace", "codepoints": [8203] },
1105 | { "index": "NegativeVeryThinSpace", "codepoints": [8203] },
1106 | { "index": "nequiv", "codepoints": [8802] },
1107 | { "index": "nesear", "codepoints": [10536] },
1108 | { "index": "nesim", "codepoints": [8770, 824] },
1109 | { "index": "NestedGreaterGreater", "codepoints": [8811] },
1110 | { "index": "NestedLessLess", "codepoints": [8810] },
1111 | { "index": "NewLine", "codepoints": [10] },
1112 | { "index": "nexist", "codepoints": [8708] },
1113 | { "index": "nexists", "codepoints": [8708] },
1114 | { "index": "Nfr", "codepoints": [120081] },
1115 | { "index": "nfr", "codepoints": [120107] },
1116 | { "index": "ngE", "codepoints": [8807, 824] },
1117 | { "index": "nge", "codepoints": [8817] },
1118 | { "index": "ngeq", "codepoints": [8817] },
1119 | { "index": "ngeqq", "codepoints": [8807, 824] },
1120 | { "index": "ngeqslant", "codepoints": [10878, 824] },
1121 | { "index": "nges", "codepoints": [10878, 824] },
1122 | { "index": "nGg", "codepoints": [8921, 824] },
1123 | { "index": "ngsim", "codepoints": [8821] },
1124 | { "index": "nGt", "codepoints": [8811, 8402] },
1125 | { "index": "ngt", "codepoints": [8815] },
1126 | { "index": "ngtr", "codepoints": [8815] },
1127 | { "index": "nGtv", "codepoints": [8811, 824] },
1128 | { "index": "nharr", "codepoints": [8622] },
1129 | { "index": "nhArr", "codepoints": [8654] },
1130 | { "index": "nhpar", "codepoints": [10994] },
1131 | { "index": "ni", "codepoints": [8715] },
1132 | { "index": "nis", "codepoints": [8956] },
1133 | { "index": "nisd", "codepoints": [8954] },
1134 | { "index": "niv", "codepoints": [8715] },
1135 | { "index": "NJcy", "codepoints": [1034] },
1136 | { "index": "njcy", "codepoints": [1114] },
1137 | { "index": "nlarr", "codepoints": [8602] },
1138 | { "index": "nlArr", "codepoints": [8653] },
1139 | { "index": "nldr", "codepoints": [8229] },
1140 | { "index": "nlE", "codepoints": [8806, 824] },
1141 | { "index": "nle", "codepoints": [8816] },
1142 | { "index": "nleftarrow", "codepoints": [8602] },
1143 | { "index": "nLeftarrow", "codepoints": [8653] },
1144 | { "index": "nleftrightarrow", "codepoints": [8622] },
1145 | { "index": "nLeftrightarrow", "codepoints": [8654] },
1146 | { "index": "nleq", "codepoints": [8816] },
1147 | { "index": "nleqq", "codepoints": [8806, 824] },
1148 | { "index": "nleqslant", "codepoints": [10877, 824] },
1149 | { "index": "nles", "codepoints": [10877, 824] },
1150 | { "index": "nless", "codepoints": [8814] },
1151 | { "index": "nLl", "codepoints": [8920, 824] },
1152 | { "index": "nlsim", "codepoints": [8820] },
1153 | { "index": "nLt", "codepoints": [8810, 8402] },
1154 | { "index": "nlt", "codepoints": [8814] },
1155 | { "index": "nltri", "codepoints": [8938] },
1156 | { "index": "nltrie", "codepoints": [8940] },
1157 | { "index": "nLtv", "codepoints": [8810, 824] },
1158 | { "index": "nmid", "codepoints": [8740] },
1159 | { "index": "NoBreak", "codepoints": [8288] },
1160 | { "index": "NonBreakingSpace", "codepoints": [160] },
1161 | { "index": "nopf", "codepoints": [120159] },
1162 | { "index": "Nopf", "codepoints": [8469] },
1163 | { "index": "Not", "codepoints": [10988] },
1164 | { "index": "not", "codepoints": [172] },
1165 | { "index": "NotCongruent", "codepoints": [8802] },
1166 | { "index": "NotCupCap", "codepoints": [8813] },
1167 | { "index": "NotDoubleVerticalBar", "codepoints": [8742] },
1168 | { "index": "NotElement", "codepoints": [8713] },
1169 | { "index": "NotEqual", "codepoints": [8800] },
1170 | { "index": "NotEqualTilde", "codepoints": [8770, 824] },
1171 | { "index": "NotExists", "codepoints": [8708] },
1172 | { "index": "NotGreater", "codepoints": [8815] },
1173 | { "index": "NotGreaterEqual", "codepoints": [8817] },
1174 | { "index": "NotGreaterFullEqual", "codepoints": [8807, 824] },
1175 | { "index": "NotGreaterGreater", "codepoints": [8811, 824] },
1176 | { "index": "NotGreaterLess", "codepoints": [8825] },
1177 | { "index": "NotGreaterSlantEqual", "codepoints": [10878, 824] },
1178 | { "index": "NotGreaterTilde", "codepoints": [8821] },
1179 | { "index": "NotHumpDownHump", "codepoints": [8782, 824] },
1180 | { "index": "NotHumpEqual", "codepoints": [8783, 824] },
1181 | { "index": "notin", "codepoints": [8713] },
1182 | { "index": "notindot", "codepoints": [8949, 824] },
1183 | { "index": "notinE", "codepoints": [8953, 824] },
1184 | { "index": "notinva", "codepoints": [8713] },
1185 | { "index": "notinvb", "codepoints": [8951] },
1186 | { "index": "notinvc", "codepoints": [8950] },
1187 | { "index": "NotLeftTriangleBar", "codepoints": [10703, 824] },
1188 | { "index": "NotLeftTriangle", "codepoints": [8938] },
1189 | { "index": "NotLeftTriangleEqual", "codepoints": [8940] },
1190 | { "index": "NotLess", "codepoints": [8814] },
1191 | { "index": "NotLessEqual", "codepoints": [8816] },
1192 | { "index": "NotLessGreater", "codepoints": [8824] },
1193 | { "index": "NotLessLess", "codepoints": [8810, 824] },
1194 | { "index": "NotLessSlantEqual", "codepoints": [10877, 824] },
1195 | { "index": "NotLessTilde", "codepoints": [8820] },
1196 | { "index": "NotNestedGreaterGreater", "codepoints": [10914, 824] },
1197 | { "index": "NotNestedLessLess", "codepoints": [10913, 824] },
1198 | { "index": "notni", "codepoints": [8716] },
1199 | { "index": "notniva", "codepoints": [8716] },
1200 | { "index": "notnivb", "codepoints": [8958] },
1201 | { "index": "notnivc", "codepoints": [8957] },
1202 | { "index": "NotPrecedes", "codepoints": [8832] },
1203 | { "index": "NotPrecedesEqual", "codepoints": [10927, 824] },
1204 | { "index": "NotPrecedesSlantEqual", "codepoints": [8928] },
1205 | { "index": "NotReverseElement", "codepoints": [8716] },
1206 | { "index": "NotRightTriangleBar", "codepoints": [10704, 824] },
1207 | { "index": "NotRightTriangle", "codepoints": [8939] },
1208 | { "index": "NotRightTriangleEqual", "codepoints": [8941] },
1209 | { "index": "NotSquareSubset", "codepoints": [8847, 824] },
1210 | { "index": "NotSquareSubsetEqual", "codepoints": [8930] },
1211 | { "index": "NotSquareSuperset", "codepoints": [8848, 824] },
1212 | { "index": "NotSquareSupersetEqual", "codepoints": [8931] },
1213 | { "index": "NotSubset", "codepoints": [8834, 8402] },
1214 | { "index": "NotSubsetEqual", "codepoints": [8840] },
1215 | { "index": "NotSucceeds", "codepoints": [8833] },
1216 | { "index": "NotSucceedsEqual", "codepoints": [10928, 824] },
1217 | { "index": "NotSucceedsSlantEqual", "codepoints": [8929] },
1218 | { "index": "NotSucceedsTilde", "codepoints": [8831, 824] },
1219 | { "index": "NotSuperset", "codepoints": [8835, 8402] },
1220 | { "index": "NotSupersetEqual", "codepoints": [8841] },
1221 | { "index": "NotTilde", "codepoints": [8769] },
1222 | { "index": "NotTildeEqual", "codepoints": [8772] },
1223 | { "index": "NotTildeFullEqual", "codepoints": [8775] },
1224 | { "index": "NotTildeTilde", "codepoints": [8777] },
1225 | { "index": "NotVerticalBar", "codepoints": [8740] },
1226 | { "index": "nparallel", "codepoints": [8742] },
1227 | { "index": "npar", "codepoints": [8742] },
1228 | { "index": "nparsl", "codepoints": [11005, 8421] },
1229 | { "index": "npart", "codepoints": [8706, 824] },
1230 | { "index": "npolint", "codepoints": [10772] },
1231 | { "index": "npr", "codepoints": [8832] },
1232 | { "index": "nprcue", "codepoints": [8928] },
1233 | { "index": "nprec", "codepoints": [8832] },
1234 | { "index": "npreceq", "codepoints": [10927, 824] },
1235 | { "index": "npre", "codepoints": [10927, 824] },
1236 | { "index": "nrarrc", "codepoints": [10547, 824] },
1237 | { "index": "nrarr", "codepoints": [8603] },
1238 | { "index": "nrArr", "codepoints": [8655] },
1239 | { "index": "nrarrw", "codepoints": [8605, 824] },
1240 | { "index": "nrightarrow", "codepoints": [8603] },
1241 | { "index": "nRightarrow", "codepoints": [8655] },
1242 | { "index": "nrtri", "codepoints": [8939] },
1243 | { "index": "nrtrie", "codepoints": [8941] },
1244 | { "index": "nsc", "codepoints": [8833] },
1245 | { "index": "nsccue", "codepoints": [8929] },
1246 | { "index": "nsce", "codepoints": [10928, 824] },
1247 | { "index": "Nscr", "codepoints": [119977] },
1248 | { "index": "nscr", "codepoints": [120003] },
1249 | { "index": "nshortmid", "codepoints": [8740] },
1250 | { "index": "nshortparallel", "codepoints": [8742] },
1251 | { "index": "nsim", "codepoints": [8769] },
1252 | { "index": "nsime", "codepoints": [8772] },
1253 | { "index": "nsimeq", "codepoints": [8772] },
1254 | { "index": "nsmid", "codepoints": [8740] },
1255 | { "index": "nspar", "codepoints": [8742] },
1256 | { "index": "nsqsube", "codepoints": [8930] },
1257 | { "index": "nsqsupe", "codepoints": [8931] },
1258 | { "index": "nsub", "codepoints": [8836] },
1259 | { "index": "nsubE", "codepoints": [10949, 824] },
1260 | { "index": "nsube", "codepoints": [8840] },
1261 | { "index": "nsubset", "codepoints": [8834, 8402] },
1262 | { "index": "nsubseteq", "codepoints": [8840] },
1263 | { "index": "nsubseteqq", "codepoints": [10949, 824] },
1264 | { "index": "nsucc", "codepoints": [8833] },
1265 | { "index": "nsucceq", "codepoints": [10928, 824] },
1266 | { "index": "nsup", "codepoints": [8837] },
1267 | { "index": "nsupE", "codepoints": [10950, 824] },
1268 | { "index": "nsupe", "codepoints": [8841] },
1269 | { "index": "nsupset", "codepoints": [8835, 8402] },
1270 | { "index": "nsupseteq", "codepoints": [8841] },
1271 | { "index": "nsupseteqq", "codepoints": [10950, 824] },
1272 | { "index": "ntgl", "codepoints": [8825] },
1273 | { "index": "Ntilde", "codepoints": [209] },
1274 | { "index": "ntilde", "codepoints": [241] },
1275 | { "index": "ntlg", "codepoints": [8824] },
1276 | { "index": "ntriangleleft", "codepoints": [8938] },
1277 | { "index": "ntrianglelefteq", "codepoints": [8940] },
1278 | { "index": "ntriangleright", "codepoints": [8939] },
1279 | { "index": "ntrianglerighteq", "codepoints": [8941] },
1280 | { "index": "Nu", "codepoints": [925] },
1281 | { "index": "nu", "codepoints": [957] },
1282 | { "index": "num", "codepoints": [35] },
1283 | { "index": "numero", "codepoints": [8470] },
1284 | { "index": "numsp", "codepoints": [8199] },
1285 | { "index": "nvap", "codepoints": [8781, 8402] },
1286 | { "index": "nvdash", "codepoints": [8876] },
1287 | { "index": "nvDash", "codepoints": [8877] },
1288 | { "index": "nVdash", "codepoints": [8878] },
1289 | { "index": "nVDash", "codepoints": [8879] },
1290 | { "index": "nvge", "codepoints": [8805, 8402] },
1291 | { "index": "nvgt", "codepoints": [62, 8402] },
1292 | { "index": "nvHarr", "codepoints": [10500] },
1293 | { "index": "nvinfin", "codepoints": [10718] },
1294 | { "index": "nvlArr", "codepoints": [10498] },
1295 | { "index": "nvle", "codepoints": [8804, 8402] },
1296 | { "index": "nvlt", "codepoints": [60, 8402] },
1297 | { "index": "nvltrie", "codepoints": [8884, 8402] },
1298 | { "index": "nvrArr", "codepoints": [10499] },
1299 | { "index": "nvrtrie", "codepoints": [8885, 8402] },
1300 | { "index": "nvsim", "codepoints": [8764, 8402] },
1301 | { "index": "nwarhk", "codepoints": [10531] },
1302 | { "index": "nwarr", "codepoints": [8598] },
1303 | { "index": "nwArr", "codepoints": [8662] },
1304 | { "index": "nwarrow", "codepoints": [8598] },
1305 | { "index": "nwnear", "codepoints": [10535] },
1306 | { "index": "Oacute", "codepoints": [211] },
1307 | { "index": "oacute", "codepoints": [243] },
1308 | { "index": "oast", "codepoints": [8859] },
1309 | { "index": "Ocirc", "codepoints": [212] },
1310 | { "index": "ocirc", "codepoints": [244] },
1311 | { "index": "ocir", "codepoints": [8858] },
1312 | { "index": "Ocy", "codepoints": [1054] },
1313 | { "index": "ocy", "codepoints": [1086] },
1314 | { "index": "odash", "codepoints": [8861] },
1315 | { "index": "Odblac", "codepoints": [336] },
1316 | { "index": "odblac", "codepoints": [337] },
1317 | { "index": "odiv", "codepoints": [10808] },
1318 | { "index": "odot", "codepoints": [8857] },
1319 | { "index": "odsold", "codepoints": [10684] },
1320 | { "index": "OElig", "codepoints": [338] },
1321 | { "index": "oelig", "codepoints": [339] },
1322 | { "index": "ofcir", "codepoints": [10687] },
1323 | { "index": "Ofr", "codepoints": [120082] },
1324 | { "index": "ofr", "codepoints": [120108] },
1325 | { "index": "ogon", "codepoints": [731] },
1326 | { "index": "Ograve", "codepoints": [210] },
1327 | { "index": "ograve", "codepoints": [242] },
1328 | { "index": "ogt", "codepoints": [10689] },
1329 | { "index": "ohbar", "codepoints": [10677] },
1330 | { "index": "ohm", "codepoints": [937] },
1331 | { "index": "oint", "codepoints": [8750] },
1332 | { "index": "olarr", "codepoints": [8634] },
1333 | { "index": "olcir", "codepoints": [10686] },
1334 | { "index": "olcross", "codepoints": [10683] },
1335 | { "index": "oline", "codepoints": [8254] },
1336 | { "index": "olt", "codepoints": [10688] },
1337 | { "index": "Omacr", "codepoints": [332] },
1338 | { "index": "omacr", "codepoints": [333] },
1339 | { "index": "Omega", "codepoints": [937] },
1340 | { "index": "omega", "codepoints": [969] },
1341 | { "index": "Omicron", "codepoints": [927] },
1342 | { "index": "omicron", "codepoints": [959] },
1343 | { "index": "omid", "codepoints": [10678] },
1344 | { "index": "ominus", "codepoints": [8854] },
1345 | { "index": "Oopf", "codepoints": [120134] },
1346 | { "index": "oopf", "codepoints": [120160] },
1347 | { "index": "opar", "codepoints": [10679] },
1348 | { "index": "OpenCurlyDoubleQuote", "codepoints": [8220] },
1349 | { "index": "OpenCurlyQuote", "codepoints": [8216] },
1350 | { "index": "operp", "codepoints": [10681] },
1351 | { "index": "oplus", "codepoints": [8853] },
1352 | { "index": "orarr", "codepoints": [8635] },
1353 | { "index": "Or", "codepoints": [10836] },
1354 | { "index": "or", "codepoints": [8744] },
1355 | { "index": "ord", "codepoints": [10845] },
1356 | { "index": "order", "codepoints": [8500] },
1357 | { "index": "orderof", "codepoints": [8500] },
1358 | { "index": "ordf", "codepoints": [170] },
1359 | { "index": "ordm", "codepoints": [186] },
1360 | { "index": "origof", "codepoints": [8886] },
1361 | { "index": "oror", "codepoints": [10838] },
1362 | { "index": "orslope", "codepoints": [10839] },
1363 | { "index": "orv", "codepoints": [10843] },
1364 | { "index": "oS", "codepoints": [9416] },
1365 | { "index": "Oscr", "codepoints": [119978] },
1366 | { "index": "oscr", "codepoints": [8500] },
1367 | { "index": "Oslash", "codepoints": [216] },
1368 | { "index": "oslash", "codepoints": [248] },
1369 | { "index": "osol", "codepoints": [8856] },
1370 | { "index": "Otilde", "codepoints": [213] },
1371 | { "index": "otilde", "codepoints": [245] },
1372 | { "index": "otimesas", "codepoints": [10806] },
1373 | { "index": "Otimes", "codepoints": [10807] },
1374 | { "index": "otimes", "codepoints": [8855] },
1375 | { "index": "Ouml", "codepoints": [214] },
1376 | { "index": "ouml", "codepoints": [246] },
1377 | { "index": "ovbar", "codepoints": [9021] },
1378 | { "index": "OverBar", "codepoints": [8254] },
1379 | { "index": "OverBrace", "codepoints": [9182] },
1380 | { "index": "OverBracket", "codepoints": [9140] },
1381 | { "index": "OverParenthesis", "codepoints": [9180] },
1382 | { "index": "para", "codepoints": [182] },
1383 | { "index": "parallel", "codepoints": [8741] },
1384 | { "index": "par", "codepoints": [8741] },
1385 | { "index": "parsim", "codepoints": [10995] },
1386 | { "index": "parsl", "codepoints": [11005] },
1387 | { "index": "part", "codepoints": [8706] },
1388 | { "index": "PartialD", "codepoints": [8706] },
1389 | { "index": "Pcy", "codepoints": [1055] },
1390 | { "index": "pcy", "codepoints": [1087] },
1391 | { "index": "percnt", "codepoints": [37] },
1392 | { "index": "period", "codepoints": [46] },
1393 | { "index": "permil", "codepoints": [8240] },
1394 | { "index": "perp", "codepoints": [8869] },
1395 | { "index": "pertenk", "codepoints": [8241] },
1396 | { "index": "Pfr", "codepoints": [120083] },
1397 | { "index": "pfr", "codepoints": [120109] },
1398 | { "index": "Phi", "codepoints": [934] },
1399 | { "index": "phi", "codepoints": [966] },
1400 | { "index": "phiv", "codepoints": [981] },
1401 | { "index": "phmmat", "codepoints": [8499] },
1402 | { "index": "phone", "codepoints": [9742] },
1403 | { "index": "Pi", "codepoints": [928] },
1404 | { "index": "pi", "codepoints": [960] },
1405 | { "index": "pitchfork", "codepoints": [8916] },
1406 | { "index": "piv", "codepoints": [982] },
1407 | { "index": "planck", "codepoints": [8463] },
1408 | { "index": "planckh", "codepoints": [8462] },
1409 | { "index": "plankv", "codepoints": [8463] },
1410 | { "index": "plusacir", "codepoints": [10787] },
1411 | { "index": "plusb", "codepoints": [8862] },
1412 | { "index": "pluscir", "codepoints": [10786] },
1413 | { "index": "plus", "codepoints": [43] },
1414 | { "index": "plusdo", "codepoints": [8724] },
1415 | { "index": "plusdu", "codepoints": [10789] },
1416 | { "index": "pluse", "codepoints": [10866] },
1417 | { "index": "PlusMinus", "codepoints": [177] },
1418 | { "index": "plusmn", "codepoints": [177] },
1419 | { "index": "plussim", "codepoints": [10790] },
1420 | { "index": "plustwo", "codepoints": [10791] },
1421 | { "index": "pm", "codepoints": [177] },
1422 | { "index": "Poincareplane", "codepoints": [8460] },
1423 | { "index": "pointint", "codepoints": [10773] },
1424 | { "index": "popf", "codepoints": [120161] },
1425 | { "index": "Popf", "codepoints": [8473] },
1426 | { "index": "pound", "codepoints": [163] },
1427 | { "index": "prap", "codepoints": [10935] },
1428 | { "index": "Pr", "codepoints": [10939] },
1429 | { "index": "pr", "codepoints": [8826] },
1430 | { "index": "prcue", "codepoints": [8828] },
1431 | { "index": "precapprox", "codepoints": [10935] },
1432 | { "index": "prec", "codepoints": [8826] },
1433 | { "index": "preccurlyeq", "codepoints": [8828] },
1434 | { "index": "Precedes", "codepoints": [8826] },
1435 | { "index": "PrecedesEqual", "codepoints": [10927] },
1436 | { "index": "PrecedesSlantEqual", "codepoints": [8828] },
1437 | { "index": "PrecedesTilde", "codepoints": [8830] },
1438 | { "index": "preceq", "codepoints": [10927] },
1439 | { "index": "precnapprox", "codepoints": [10937] },
1440 | { "index": "precneqq", "codepoints": [10933] },
1441 | { "index": "precnsim", "codepoints": [8936] },
1442 | { "index": "pre", "codepoints": [10927] },
1443 | { "index": "prE", "codepoints": [10931] },
1444 | { "index": "precsim", "codepoints": [8830] },
1445 | { "index": "prime", "codepoints": [8242] },
1446 | { "index": "Prime", "codepoints": [8243] },
1447 | { "index": "primes", "codepoints": [8473] },
1448 | { "index": "prnap", "codepoints": [10937] },
1449 | { "index": "prnE", "codepoints": [10933] },
1450 | { "index": "prnsim", "codepoints": [8936] },
1451 | { "index": "prod", "codepoints": [8719] },
1452 | { "index": "Product", "codepoints": [8719] },
1453 | { "index": "profalar", "codepoints": [9006] },
1454 | { "index": "profline", "codepoints": [8978] },
1455 | { "index": "profsurf", "codepoints": [8979] },
1456 | { "index": "prop", "codepoints": [8733] },
1457 | { "index": "Proportional", "codepoints": [8733] },
1458 | { "index": "Proportion", "codepoints": [8759] },
1459 | { "index": "propto", "codepoints": [8733] },
1460 | { "index": "prsim", "codepoints": [8830] },
1461 | { "index": "prurel", "codepoints": [8880] },
1462 | { "index": "Pscr", "codepoints": [119979] },
1463 | { "index": "pscr", "codepoints": [120005] },
1464 | { "index": "Psi", "codepoints": [936] },
1465 | { "index": "psi", "codepoints": [968] },
1466 | { "index": "puncsp", "codepoints": [8200] },
1467 | { "index": "Qfr", "codepoints": [120084] },
1468 | { "index": "qfr", "codepoints": [120110] },
1469 | { "index": "qint", "codepoints": [10764] },
1470 | { "index": "qopf", "codepoints": [120162] },
1471 | { "index": "Qopf", "codepoints": [8474] },
1472 | { "index": "qprime", "codepoints": [8279] },
1473 | { "index": "Qscr", "codepoints": [119980] },
1474 | { "index": "qscr", "codepoints": [120006] },
1475 | { "index": "quaternions", "codepoints": [8461] },
1476 | { "index": "quatint", "codepoints": [10774] },
1477 | { "index": "quest", "codepoints": [63] },
1478 | { "index": "questeq", "codepoints": [8799] },
1479 | { "index": "quot", "codepoints": [34] },
1480 | { "index": "QUOT", "codepoints": [34] },
1481 | { "index": "rAarr", "codepoints": [8667] },
1482 | { "index": "race", "codepoints": [8765, 817] },
1483 | { "index": "Racute", "codepoints": [340] },
1484 | { "index": "racute", "codepoints": [341] },
1485 | { "index": "radic", "codepoints": [8730] },
1486 | { "index": "raemptyv", "codepoints": [10675] },
1487 | { "index": "rang", "codepoints": [10217] },
1488 | { "index": "Rang", "codepoints": [10219] },
1489 | { "index": "rangd", "codepoints": [10642] },
1490 | { "index": "range", "codepoints": [10661] },
1491 | { "index": "rangle", "codepoints": [10217] },
1492 | { "index": "raquo", "codepoints": [187] },
1493 | { "index": "rarrap", "codepoints": [10613] },
1494 | { "index": "rarrb", "codepoints": [8677] },
1495 | { "index": "rarrbfs", "codepoints": [10528] },
1496 | { "index": "rarrc", "codepoints": [10547] },
1497 | { "index": "rarr", "codepoints": [8594] },
1498 | { "index": "Rarr", "codepoints": [8608] },
1499 | { "index": "rArr", "codepoints": [8658] },
1500 | { "index": "rarrfs", "codepoints": [10526] },
1501 | { "index": "rarrhk", "codepoints": [8618] },
1502 | { "index": "rarrlp", "codepoints": [8620] },
1503 | { "index": "rarrpl", "codepoints": [10565] },
1504 | { "index": "rarrsim", "codepoints": [10612] },
1505 | { "index": "Rarrtl", "codepoints": [10518] },
1506 | { "index": "rarrtl", "codepoints": [8611] },
1507 | { "index": "rarrw", "codepoints": [8605] },
1508 | { "index": "ratail", "codepoints": [10522] },
1509 | { "index": "rAtail", "codepoints": [10524] },
1510 | { "index": "ratio", "codepoints": [8758] },
1511 | { "index": "rationals", "codepoints": [8474] },
1512 | { "index": "rbarr", "codepoints": [10509] },
1513 | { "index": "rBarr", "codepoints": [10511] },
1514 | { "index": "RBarr", "codepoints": [10512] },
1515 | { "index": "rbbrk", "codepoints": [10099] },
1516 | { "index": "rbrace", "codepoints": [125] },
1517 | { "index": "rbrack", "codepoints": [93] },
1518 | { "index": "rbrke", "codepoints": [10636] },
1519 | { "index": "rbrksld", "codepoints": [10638] },
1520 | { "index": "rbrkslu", "codepoints": [10640] },
1521 | { "index": "Rcaron", "codepoints": [344] },
1522 | { "index": "rcaron", "codepoints": [345] },
1523 | { "index": "Rcedil", "codepoints": [342] },
1524 | { "index": "rcedil", "codepoints": [343] },
1525 | { "index": "rceil", "codepoints": [8969] },
1526 | { "index": "rcub", "codepoints": [125] },
1527 | { "index": "Rcy", "codepoints": [1056] },
1528 | { "index": "rcy", "codepoints": [1088] },
1529 | { "index": "rdca", "codepoints": [10551] },
1530 | { "index": "rdldhar", "codepoints": [10601] },
1531 | { "index": "rdquo", "codepoints": [8221] },
1532 | { "index": "rdquor", "codepoints": [8221] },
1533 | { "index": "rdsh", "codepoints": [8627] },
1534 | { "index": "real", "codepoints": [8476] },
1535 | { "index": "realine", "codepoints": [8475] },
1536 | { "index": "realpart", "codepoints": [8476] },
1537 | { "index": "reals", "codepoints": [8477] },
1538 | { "index": "Re", "codepoints": [8476] },
1539 | { "index": "rect", "codepoints": [9645] },
1540 | { "index": "reg", "codepoints": [174] },
1541 | { "index": "REG", "codepoints": [174] },
1542 | { "index": "ReverseElement", "codepoints": [8715] },
1543 | { "index": "ReverseEquilibrium", "codepoints": [8651] },
1544 | { "index": "ReverseUpEquilibrium", "codepoints": [10607] },
1545 | { "index": "rfisht", "codepoints": [10621] },
1546 | { "index": "rfloor", "codepoints": [8971] },
1547 | { "index": "rfr", "codepoints": [120111] },
1548 | { "index": "Rfr", "codepoints": [8476] },
1549 | { "index": "rHar", "codepoints": [10596] },
1550 | { "index": "rhard", "codepoints": [8641] },
1551 | { "index": "rharu", "codepoints": [8640] },
1552 | { "index": "rharul", "codepoints": [10604] },
1553 | { "index": "Rho", "codepoints": [929] },
1554 | { "index": "rho", "codepoints": [961] },
1555 | { "index": "rhov", "codepoints": [1009] },
1556 | { "index": "RightAngleBracket", "codepoints": [10217] },
1557 | { "index": "RightArrowBar", "codepoints": [8677] },
1558 | { "index": "rightarrow", "codepoints": [8594] },
1559 | { "index": "RightArrow", "codepoints": [8594] },
1560 | { "index": "Rightarrow", "codepoints": [8658] },
1561 | { "index": "RightArrowLeftArrow", "codepoints": [8644] },
1562 | { "index": "rightarrowtail", "codepoints": [8611] },
1563 | { "index": "RightCeiling", "codepoints": [8969] },
1564 | { "index": "RightDoubleBracket", "codepoints": [10215] },
1565 | { "index": "RightDownTeeVector", "codepoints": [10589] },
1566 | { "index": "RightDownVectorBar", "codepoints": [10581] },
1567 | { "index": "RightDownVector", "codepoints": [8642] },
1568 | { "index": "RightFloor", "codepoints": [8971] },
1569 | { "index": "rightharpoondown", "codepoints": [8641] },
1570 | { "index": "rightharpoonup", "codepoints": [8640] },
1571 | { "index": "rightleftarrows", "codepoints": [8644] },
1572 | { "index": "rightleftharpoons", "codepoints": [8652] },
1573 | { "index": "rightrightarrows", "codepoints": [8649] },
1574 | { "index": "rightsquigarrow", "codepoints": [8605] },
1575 | { "index": "RightTeeArrow", "codepoints": [8614] },
1576 | { "index": "RightTee", "codepoints": [8866] },
1577 | { "index": "RightTeeVector", "codepoints": [10587] },
1578 | { "index": "rightthreetimes", "codepoints": [8908] },
1579 | { "index": "RightTriangleBar", "codepoints": [10704] },
1580 | { "index": "RightTriangle", "codepoints": [8883] },
1581 | { "index": "RightTriangleEqual", "codepoints": [8885] },
1582 | { "index": "RightUpDownVector", "codepoints": [10575] },
1583 | { "index": "RightUpTeeVector", "codepoints": [10588] },
1584 | { "index": "RightUpVectorBar", "codepoints": [10580] },
1585 | { "index": "RightUpVector", "codepoints": [8638] },
1586 | { "index": "RightVectorBar", "codepoints": [10579] },
1587 | { "index": "RightVector", "codepoints": [8640] },
1588 | { "index": "ring", "codepoints": [730] },
1589 | { "index": "risingdotseq", "codepoints": [8787] },
1590 | { "index": "rlarr", "codepoints": [8644] },
1591 | { "index": "rlhar", "codepoints": [8652] },
1592 | { "index": "rlm", "codepoints": [8207] },
1593 | { "index": "rmoustache", "codepoints": [9137] },
1594 | { "index": "rmoust", "codepoints": [9137] },
1595 | { "index": "rnmid", "codepoints": [10990] },
1596 | { "index": "roang", "codepoints": [10221] },
1597 | { "index": "roarr", "codepoints": [8702] },
1598 | { "index": "robrk", "codepoints": [10215] },
1599 | { "index": "ropar", "codepoints": [10630] },
1600 | { "index": "ropf", "codepoints": [120163] },
1601 | { "index": "Ropf", "codepoints": [8477] },
1602 | { "index": "roplus", "codepoints": [10798] },
1603 | { "index": "rotimes", "codepoints": [10805] },
1604 | { "index": "RoundImplies", "codepoints": [10608] },
1605 | { "index": "rpar", "codepoints": [41] },
1606 | { "index": "rpargt", "codepoints": [10644] },
1607 | { "index": "rppolint", "codepoints": [10770] },
1608 | { "index": "rrarr", "codepoints": [8649] },
1609 | { "index": "Rrightarrow", "codepoints": [8667] },
1610 | { "index": "rsaquo", "codepoints": [8250] },
1611 | { "index": "rscr", "codepoints": [120007] },
1612 | { "index": "Rscr", "codepoints": [8475] },
1613 | { "index": "rsh", "codepoints": [8625] },
1614 | { "index": "Rsh", "codepoints": [8625] },
1615 | { "index": "rsqb", "codepoints": [93] },
1616 | { "index": "rsquo", "codepoints": [8217] },
1617 | { "index": "rsquor", "codepoints": [8217] },
1618 | { "index": "rthree", "codepoints": [8908] },
1619 | { "index": "rtimes", "codepoints": [8906] },
1620 | { "index": "rtri", "codepoints": [9657] },
1621 | { "index": "rtrie", "codepoints": [8885] },
1622 | { "index": "rtrif", "codepoints": [9656] },
1623 | { "index": "rtriltri", "codepoints": [10702] },
1624 | { "index": "RuleDelayed", "codepoints": [10740] },
1625 | { "index": "ruluhar", "codepoints": [10600] },
1626 | { "index": "rx", "codepoints": [8478] },
1627 | { "index": "Sacute", "codepoints": [346] },
1628 | { "index": "sacute", "codepoints": [347] },
1629 | { "index": "sbquo", "codepoints": [8218] },
1630 | { "index": "scap", "codepoints": [10936] },
1631 | { "index": "Scaron", "codepoints": [352] },
1632 | { "index": "scaron", "codepoints": [353] },
1633 | { "index": "Sc", "codepoints": [10940] },
1634 | { "index": "sc", "codepoints": [8827] },
1635 | { "index": "sccue", "codepoints": [8829] },
1636 | { "index": "sce", "codepoints": [10928] },
1637 | { "index": "scE", "codepoints": [10932] },
1638 | { "index": "Scedil", "codepoints": [350] },
1639 | { "index": "scedil", "codepoints": [351] },
1640 | { "index": "Scirc", "codepoints": [348] },
1641 | { "index": "scirc", "codepoints": [349] },
1642 | { "index": "scnap", "codepoints": [10938] },
1643 | { "index": "scnE", "codepoints": [10934] },
1644 | { "index": "scnsim", "codepoints": [8937] },
1645 | { "index": "scpolint", "codepoints": [10771] },
1646 | { "index": "scsim", "codepoints": [8831] },
1647 | { "index": "Scy", "codepoints": [1057] },
1648 | { "index": "scy", "codepoints": [1089] },
1649 | { "index": "sdotb", "codepoints": [8865] },
1650 | { "index": "sdot", "codepoints": [8901] },
1651 | { "index": "sdote", "codepoints": [10854] },
1652 | { "index": "searhk", "codepoints": [10533] },
1653 | { "index": "searr", "codepoints": [8600] },
1654 | { "index": "seArr", "codepoints": [8664] },
1655 | { "index": "searrow", "codepoints": [8600] },
1656 | { "index": "sect", "codepoints": [167] },
1657 | { "index": "semi", "codepoints": [59] },
1658 | { "index": "seswar", "codepoints": [10537] },
1659 | { "index": "setminus", "codepoints": [8726] },
1660 | { "index": "setmn", "codepoints": [8726] },
1661 | { "index": "sext", "codepoints": [10038] },
1662 | { "index": "Sfr", "codepoints": [120086] },
1663 | { "index": "sfr", "codepoints": [120112] },
1664 | { "index": "sfrown", "codepoints": [8994] },
1665 | { "index": "sharp", "codepoints": [9839] },
1666 | { "index": "SHCHcy", "codepoints": [1065] },
1667 | { "index": "shchcy", "codepoints": [1097] },
1668 | { "index": "SHcy", "codepoints": [1064] },
1669 | { "index": "shcy", "codepoints": [1096] },
1670 | { "index": "ShortDownArrow", "codepoints": [8595] },
1671 | { "index": "ShortLeftArrow", "codepoints": [8592] },
1672 | { "index": "shortmid", "codepoints": [8739] },
1673 | { "index": "shortparallel", "codepoints": [8741] },
1674 | { "index": "ShortRightArrow", "codepoints": [8594] },
1675 | { "index": "ShortUpArrow", "codepoints": [8593] },
1676 | { "index": "shy", "codepoints": [173] },
1677 | { "index": "Sigma", "codepoints": [931] },
1678 | { "index": "sigma", "codepoints": [963] },
1679 | { "index": "sigmaf", "codepoints": [962] },
1680 | { "index": "sigmav", "codepoints": [962] },
1681 | { "index": "sim", "codepoints": [8764] },
1682 | { "index": "simdot", "codepoints": [10858] },
1683 | { "index": "sime", "codepoints": [8771] },
1684 | { "index": "simeq", "codepoints": [8771] },
1685 | { "index": "simg", "codepoints": [10910] },
1686 | { "index": "simgE", "codepoints": [10912] },
1687 | { "index": "siml", "codepoints": [10909] },
1688 | { "index": "simlE", "codepoints": [10911] },
1689 | { "index": "simne", "codepoints": [8774] },
1690 | { "index": "simplus", "codepoints": [10788] },
1691 | { "index": "simrarr", "codepoints": [10610] },
1692 | { "index": "slarr", "codepoints": [8592] },
1693 | { "index": "SmallCircle", "codepoints": [8728] },
1694 | { "index": "smallsetminus", "codepoints": [8726] },
1695 | { "index": "smashp", "codepoints": [10803] },
1696 | { "index": "smeparsl", "codepoints": [10724] },
1697 | { "index": "smid", "codepoints": [8739] },
1698 | { "index": "smile", "codepoints": [8995] },
1699 | { "index": "smt", "codepoints": [10922] },
1700 | { "index": "smte", "codepoints": [10924] },
1701 | { "index": "smtes", "codepoints": [10924, 65024] },
1702 | { "index": "SOFTcy", "codepoints": [1068] },
1703 | { "index": "softcy", "codepoints": [1100] },
1704 | { "index": "solbar", "codepoints": [9023] },
1705 | { "index": "solb", "codepoints": [10692] },
1706 | { "index": "sol", "codepoints": [47] },
1707 | { "index": "Sopf", "codepoints": [120138] },
1708 | { "index": "sopf", "codepoints": [120164] },
1709 | { "index": "spades", "codepoints": [9824] },
1710 | { "index": "spadesuit", "codepoints": [9824] },
1711 | { "index": "spar", "codepoints": [8741] },
1712 | { "index": "sqcap", "codepoints": [8851] },
1713 | { "index": "sqcaps", "codepoints": [8851, 65024] },
1714 | { "index": "sqcup", "codepoints": [8852] },
1715 | { "index": "sqcups", "codepoints": [8852, 65024] },
1716 | { "index": "Sqrt", "codepoints": [8730] },
1717 | { "index": "sqsub", "codepoints": [8847] },
1718 | { "index": "sqsube", "codepoints": [8849] },
1719 | { "index": "sqsubset", "codepoints": [8847] },
1720 | { "index": "sqsubseteq", "codepoints": [8849] },
1721 | { "index": "sqsup", "codepoints": [8848] },
1722 | { "index": "sqsupe", "codepoints": [8850] },
1723 | { "index": "sqsupset", "codepoints": [8848] },
1724 | { "index": "sqsupseteq", "codepoints": [8850] },
1725 | { "index": "square", "codepoints": [9633] },
1726 | { "index": "Square", "codepoints": [9633] },
1727 | { "index": "SquareIntersection", "codepoints": [8851] },
1728 | { "index": "SquareSubset", "codepoints": [8847] },
1729 | { "index": "SquareSubsetEqual", "codepoints": [8849] },
1730 | { "index": "SquareSuperset", "codepoints": [8848] },
1731 | { "index": "SquareSupersetEqual", "codepoints": [8850] },
1732 | { "index": "SquareUnion", "codepoints": [8852] },
1733 | { "index": "squarf", "codepoints": [9642] },
1734 | { "index": "squ", "codepoints": [9633] },
1735 | { "index": "squf", "codepoints": [9642] },
1736 | { "index": "srarr", "codepoints": [8594] },
1737 | { "index": "Sscr", "codepoints": [119982] },
1738 | { "index": "sscr", "codepoints": [120008] },
1739 | { "index": "ssetmn", "codepoints": [8726] },
1740 | { "index": "ssmile", "codepoints": [8995] },
1741 | { "index": "sstarf", "codepoints": [8902] },
1742 | { "index": "Star", "codepoints": [8902] },
1743 | { "index": "star", "codepoints": [9734] },
1744 | { "index": "starf", "codepoints": [9733] },
1745 | { "index": "straightepsilon", "codepoints": [1013] },
1746 | { "index": "straightphi", "codepoints": [981] },
1747 | { "index": "strns", "codepoints": [175] },
1748 | { "index": "sub", "codepoints": [8834] },
1749 | { "index": "Sub", "codepoints": [8912] },
1750 | { "index": "subdot", "codepoints": [10941] },
1751 | { "index": "subE", "codepoints": [10949] },
1752 | { "index": "sube", "codepoints": [8838] },
1753 | { "index": "subedot", "codepoints": [10947] },
1754 | { "index": "submult", "codepoints": [10945] },
1755 | { "index": "subnE", "codepoints": [10955] },
1756 | { "index": "subne", "codepoints": [8842] },
1757 | { "index": "subplus", "codepoints": [10943] },
1758 | { "index": "subrarr", "codepoints": [10617] },
1759 | { "index": "subset", "codepoints": [8834] },
1760 | { "index": "Subset", "codepoints": [8912] },
1761 | { "index": "subseteq", "codepoints": [8838] },
1762 | { "index": "subseteqq", "codepoints": [10949] },
1763 | { "index": "SubsetEqual", "codepoints": [8838] },
1764 | { "index": "subsetneq", "codepoints": [8842] },
1765 | { "index": "subsetneqq", "codepoints": [10955] },
1766 | { "index": "subsim", "codepoints": [10951] },
1767 | { "index": "subsub", "codepoints": [10965] },
1768 | { "index": "subsup", "codepoints": [10963] },
1769 | { "index": "succapprox", "codepoints": [10936] },
1770 | { "index": "succ", "codepoints": [8827] },
1771 | { "index": "succcurlyeq", "codepoints": [8829] },
1772 | { "index": "Succeeds", "codepoints": [8827] },
1773 | { "index": "SucceedsEqual", "codepoints": [10928] },
1774 | { "index": "SucceedsSlantEqual", "codepoints": [8829] },
1775 | { "index": "SucceedsTilde", "codepoints": [8831] },
1776 | { "index": "succeq", "codepoints": [10928] },
1777 | { "index": "succnapprox", "codepoints": [10938] },
1778 | { "index": "succneqq", "codepoints": [10934] },
1779 | { "index": "succnsim", "codepoints": [8937] },
1780 | { "index": "succsim", "codepoints": [8831] },
1781 | { "index": "SuchThat", "codepoints": [8715] },
1782 | { "index": "sum", "codepoints": [8721] },
1783 | { "index": "Sum", "codepoints": [8721] },
1784 | { "index": "sung", "codepoints": [9834] },
1785 | { "index": "sup1", "codepoints": [185] },
1786 | { "index": "sup2", "codepoints": [178] },
1787 | { "index": "sup3", "codepoints": [179] },
1788 | { "index": "sup", "codepoints": [8835] },
1789 | { "index": "Sup", "codepoints": [8913] },
1790 | { "index": "supdot", "codepoints": [10942] },
1791 | { "index": "supdsub", "codepoints": [10968] },
1792 | { "index": "supE", "codepoints": [10950] },
1793 | { "index": "supe", "codepoints": [8839] },
1794 | { "index": "supedot", "codepoints": [10948] },
1795 | { "index": "Superset", "codepoints": [8835] },
1796 | { "index": "SupersetEqual", "codepoints": [8839] },
1797 | { "index": "suphsol", "codepoints": [10185] },
1798 | { "index": "suphsub", "codepoints": [10967] },
1799 | { "index": "suplarr", "codepoints": [10619] },
1800 | { "index": "supmult", "codepoints": [10946] },
1801 | { "index": "supnE", "codepoints": [10956] },
1802 | { "index": "supne", "codepoints": [8843] },
1803 | { "index": "supplus", "codepoints": [10944] },
1804 | { "index": "supset", "codepoints": [8835] },
1805 | { "index": "Supset", "codepoints": [8913] },
1806 | { "index": "supseteq", "codepoints": [8839] },
1807 | { "index": "supseteqq", "codepoints": [10950] },
1808 | { "index": "supsetneq", "codepoints": [8843] },
1809 | { "index": "supsetneqq", "codepoints": [10956] },
1810 | { "index": "supsim", "codepoints": [10952] },
1811 | { "index": "supsub", "codepoints": [10964] },
1812 | { "index": "supsup", "codepoints": [10966] },
1813 | { "index": "swarhk", "codepoints": [10534] },
1814 | { "index": "swarr", "codepoints": [8601] },
1815 | { "index": "swArr", "codepoints": [8665] },
1816 | { "index": "swarrow", "codepoints": [8601] },
1817 | { "index": "swnwar", "codepoints": [10538] },
1818 | { "index": "szlig", "codepoints": [223] },
1819 | { "index": "Tab", "codepoints": [9] },
1820 | { "index": "target", "codepoints": [8982] },
1821 | { "index": "Tau", "codepoints": [932] },
1822 | { "index": "tau", "codepoints": [964] },
1823 | { "index": "tbrk", "codepoints": [9140] },
1824 | { "index": "Tcaron", "codepoints": [356] },
1825 | { "index": "tcaron", "codepoints": [357] },
1826 | { "index": "Tcedil", "codepoints": [354] },
1827 | { "index": "tcedil", "codepoints": [355] },
1828 | { "index": "Tcy", "codepoints": [1058] },
1829 | { "index": "tcy", "codepoints": [1090] },
1830 | { "index": "tdot", "codepoints": [8411] },
1831 | { "index": "telrec", "codepoints": [8981] },
1832 | { "index": "Tfr", "codepoints": [120087] },
1833 | { "index": "tfr", "codepoints": [120113] },
1834 | { "index": "there4", "codepoints": [8756] },
1835 | { "index": "therefore", "codepoints": [8756] },
1836 | { "index": "Therefore", "codepoints": [8756] },
1837 | { "index": "Theta", "codepoints": [920] },
1838 | { "index": "theta", "codepoints": [952] },
1839 | { "index": "thetasym", "codepoints": [977] },
1840 | { "index": "thetav", "codepoints": [977] },
1841 | { "index": "thickapprox", "codepoints": [8776] },
1842 | { "index": "thicksim", "codepoints": [8764] },
1843 | { "index": "ThickSpace", "codepoints": [8287, 8202] },
1844 | { "index": "ThinSpace", "codepoints": [8201] },
1845 | { "index": "thinsp", "codepoints": [8201] },
1846 | { "index": "thkap", "codepoints": [8776] },
1847 | { "index": "thksim", "codepoints": [8764] },
1848 | { "index": "THORN", "codepoints": [222] },
1849 | { "index": "thorn", "codepoints": [254] },
1850 | { "index": "tilde", "codepoints": [732] },
1851 | { "index": "Tilde", "codepoints": [8764] },
1852 | { "index": "TildeEqual", "codepoints": [8771] },
1853 | { "index": "TildeFullEqual", "codepoints": [8773] },
1854 | { "index": "TildeTilde", "codepoints": [8776] },
1855 | { "index": "timesbar", "codepoints": [10801] },
1856 | { "index": "timesb", "codepoints": [8864] },
1857 | { "index": "times", "codepoints": [215] },
1858 | { "index": "timesd", "codepoints": [10800] },
1859 | { "index": "tint", "codepoints": [8749] },
1860 | { "index": "toea", "codepoints": [10536] },
1861 | { "index": "topbot", "codepoints": [9014] },
1862 | { "index": "topcir", "codepoints": [10993] },
1863 | { "index": "top", "codepoints": [8868] },
1864 | { "index": "Topf", "codepoints": [120139] },
1865 | { "index": "topf", "codepoints": [120165] },
1866 | { "index": "topfork", "codepoints": [10970] },
1867 | { "index": "tosa", "codepoints": [10537] },
1868 | { "index": "tprime", "codepoints": [8244] },
1869 | { "index": "trade", "codepoints": [8482] },
1870 | { "index": "TRADE", "codepoints": [8482] },
1871 | { "index": "triangle", "codepoints": [9653] },
1872 | { "index": "triangledown", "codepoints": [9663] },
1873 | { "index": "triangleleft", "codepoints": [9667] },
1874 | { "index": "trianglelefteq", "codepoints": [8884] },
1875 | { "index": "triangleq", "codepoints": [8796] },
1876 | { "index": "triangleright", "codepoints": [9657] },
1877 | { "index": "trianglerighteq", "codepoints": [8885] },
1878 | { "index": "tridot", "codepoints": [9708] },
1879 | { "index": "trie", "codepoints": [8796] },
1880 | { "index": "triminus", "codepoints": [10810] },
1881 | { "index": "TripleDot", "codepoints": [8411] },
1882 | { "index": "triplus", "codepoints": [10809] },
1883 | { "index": "trisb", "codepoints": [10701] },
1884 | { "index": "tritime", "codepoints": [10811] },
1885 | { "index": "trpezium", "codepoints": [9186] },
1886 | { "index": "Tscr", "codepoints": [119983] },
1887 | { "index": "tscr", "codepoints": [120009] },
1888 | { "index": "TScy", "codepoints": [1062] },
1889 | { "index": "tscy", "codepoints": [1094] },
1890 | { "index": "TSHcy", "codepoints": [1035] },
1891 | { "index": "tshcy", "codepoints": [1115] },
1892 | { "index": "Tstrok", "codepoints": [358] },
1893 | { "index": "tstrok", "codepoints": [359] },
1894 | { "index": "twixt", "codepoints": [8812] },
1895 | { "index": "twoheadleftarrow", "codepoints": [8606] },
1896 | { "index": "twoheadrightarrow", "codepoints": [8608] },
1897 | { "index": "Uacute", "codepoints": [218] },
1898 | { "index": "uacute", "codepoints": [250] },
1899 | { "index": "uarr", "codepoints": [8593] },
1900 | { "index": "Uarr", "codepoints": [8607] },
1901 | { "index": "uArr", "codepoints": [8657] },
1902 | { "index": "Uarrocir", "codepoints": [10569] },
1903 | { "index": "Ubrcy", "codepoints": [1038] },
1904 | { "index": "ubrcy", "codepoints": [1118] },
1905 | { "index": "Ubreve", "codepoints": [364] },
1906 | { "index": "ubreve", "codepoints": [365] },
1907 | { "index": "Ucirc", "codepoints": [219] },
1908 | { "index": "ucirc", "codepoints": [251] },
1909 | { "index": "Ucy", "codepoints": [1059] },
1910 | { "index": "ucy", "codepoints": [1091] },
1911 | { "index": "udarr", "codepoints": [8645] },
1912 | { "index": "Udblac", "codepoints": [368] },
1913 | { "index": "udblac", "codepoints": [369] },
1914 | { "index": "udhar", "codepoints": [10606] },
1915 | { "index": "ufisht", "codepoints": [10622] },
1916 | { "index": "Ufr", "codepoints": [120088] },
1917 | { "index": "ufr", "codepoints": [120114] },
1918 | { "index": "Ugrave", "codepoints": [217] },
1919 | { "index": "ugrave", "codepoints": [249] },
1920 | { "index": "uHar", "codepoints": [10595] },
1921 | { "index": "uharl", "codepoints": [8639] },
1922 | { "index": "uharr", "codepoints": [8638] },
1923 | { "index": "uhblk", "codepoints": [9600] },
1924 | { "index": "ulcorn", "codepoints": [8988] },
1925 | { "index": "ulcorner", "codepoints": [8988] },
1926 | { "index": "ulcrop", "codepoints": [8975] },
1927 | { "index": "ultri", "codepoints": [9720] },
1928 | { "index": "Umacr", "codepoints": [362] },
1929 | { "index": "umacr", "codepoints": [363] },
1930 | { "index": "uml", "codepoints": [168] },
1931 | { "index": "UnderBar", "codepoints": [95] },
1932 | { "index": "UnderBrace", "codepoints": [9183] },
1933 | { "index": "UnderBracket", "codepoints": [9141] },
1934 | { "index": "UnderParenthesis", "codepoints": [9181] },
1935 | { "index": "Union", "codepoints": [8899] },
1936 | { "index": "UnionPlus", "codepoints": [8846] },
1937 | { "index": "Uogon", "codepoints": [370] },
1938 | { "index": "uogon", "codepoints": [371] },
1939 | { "index": "Uopf", "codepoints": [120140] },
1940 | { "index": "uopf", "codepoints": [120166] },
1941 | { "index": "UpArrowBar", "codepoints": [10514] },
1942 | { "index": "uparrow", "codepoints": [8593] },
1943 | { "index": "UpArrow", "codepoints": [8593] },
1944 | { "index": "Uparrow", "codepoints": [8657] },
1945 | { "index": "UpArrowDownArrow", "codepoints": [8645] },
1946 | { "index": "updownarrow", "codepoints": [8597] },
1947 | { "index": "UpDownArrow", "codepoints": [8597] },
1948 | { "index": "Updownarrow", "codepoints": [8661] },
1949 | { "index": "UpEquilibrium", "codepoints": [10606] },
1950 | { "index": "upharpoonleft", "codepoints": [8639] },
1951 | { "index": "upharpoonright", "codepoints": [8638] },
1952 | { "index": "uplus", "codepoints": [8846] },
1953 | { "index": "UpperLeftArrow", "codepoints": [8598] },
1954 | { "index": "UpperRightArrow", "codepoints": [8599] },
1955 | { "index": "upsi", "codepoints": [965] },
1956 | { "index": "Upsi", "codepoints": [978] },
1957 | { "index": "upsih", "codepoints": [978] },
1958 | { "index": "Upsilon", "codepoints": [933] },
1959 | { "index": "upsilon", "codepoints": [965] },
1960 | { "index": "UpTeeArrow", "codepoints": [8613] },
1961 | { "index": "UpTee", "codepoints": [8869] },
1962 | { "index": "upuparrows", "codepoints": [8648] },
1963 | { "index": "urcorn", "codepoints": [8989] },
1964 | { "index": "urcorner", "codepoints": [8989] },
1965 | { "index": "urcrop", "codepoints": [8974] },
1966 | { "index": "Uring", "codepoints": [366] },
1967 | { "index": "uring", "codepoints": [367] },
1968 | { "index": "urtri", "codepoints": [9721] },
1969 | { "index": "Uscr", "codepoints": [119984] },
1970 | { "index": "uscr", "codepoints": [120010] },
1971 | { "index": "utdot", "codepoints": [8944] },
1972 | { "index": "Utilde", "codepoints": [360] },
1973 | { "index": "utilde", "codepoints": [361] },
1974 | { "index": "utri", "codepoints": [9653] },
1975 | { "index": "utrif", "codepoints": [9652] },
1976 | { "index": "uuarr", "codepoints": [8648] },
1977 | { "index": "Uuml", "codepoints": [220] },
1978 | { "index": "uuml", "codepoints": [252] },
1979 | { "index": "uwangle", "codepoints": [10663] },
1980 | { "index": "vangrt", "codepoints": [10652] },
1981 | { "index": "varepsilon", "codepoints": [1013] },
1982 | { "index": "varkappa", "codepoints": [1008] },
1983 | { "index": "varnothing", "codepoints": [8709] },
1984 | { "index": "varphi", "codepoints": [981] },
1985 | { "index": "varpi", "codepoints": [982] },
1986 | { "index": "varpropto", "codepoints": [8733] },
1987 | { "index": "varr", "codepoints": [8597] },
1988 | { "index": "vArr", "codepoints": [8661] },
1989 | { "index": "varrho", "codepoints": [1009] },
1990 | { "index": "varsigma", "codepoints": [962] },
1991 | { "index": "varsubsetneq", "codepoints": [8842, 65024] },
1992 | { "index": "varsubsetneqq", "codepoints": [10955, 65024] },
1993 | { "index": "varsupsetneq", "codepoints": [8843, 65024] },
1994 | { "index": "varsupsetneqq", "codepoints": [10956, 65024] },
1995 | { "index": "vartheta", "codepoints": [977] },
1996 | { "index": "vartriangleleft", "codepoints": [8882] },
1997 | { "index": "vartriangleright", "codepoints": [8883] },
1998 | { "index": "vBar", "codepoints": [10984] },
1999 | { "index": "Vbar", "codepoints": [10987] },
2000 | { "index": "vBarv", "codepoints": [10985] },
2001 | { "index": "Vcy", "codepoints": [1042] },
2002 | { "index": "vcy", "codepoints": [1074] },
2003 | { "index": "vdash", "codepoints": [8866] },
2004 | { "index": "vDash", "codepoints": [8872] },
2005 | { "index": "Vdash", "codepoints": [8873] },
2006 | { "index": "VDash", "codepoints": [8875] },
2007 | { "index": "Vdashl", "codepoints": [10982] },
2008 | { "index": "veebar", "codepoints": [8891] },
2009 | { "index": "vee", "codepoints": [8744] },
2010 | { "index": "Vee", "codepoints": [8897] },
2011 | { "index": "veeeq", "codepoints": [8794] },
2012 | { "index": "vellip", "codepoints": [8942] },
2013 | { "index": "verbar", "codepoints": [124] },
2014 | { "index": "Verbar", "codepoints": [8214] },
2015 | { "index": "vert", "codepoints": [124] },
2016 | { "index": "Vert", "codepoints": [8214] },
2017 | { "index": "VerticalBar", "codepoints": [8739] },
2018 | { "index": "VerticalLine", "codepoints": [124] },
2019 | { "index": "VerticalSeparator", "codepoints": [10072] },
2020 | { "index": "VerticalTilde", "codepoints": [8768] },
2021 | { "index": "VeryThinSpace", "codepoints": [8202] },
2022 | { "index": "Vfr", "codepoints": [120089] },
2023 | { "index": "vfr", "codepoints": [120115] },
2024 | { "index": "vltri", "codepoints": [8882] },
2025 | { "index": "vnsub", "codepoints": [8834, 8402] },
2026 | { "index": "vnsup", "codepoints": [8835, 8402] },
2027 | { "index": "Vopf", "codepoints": [120141] },
2028 | { "index": "vopf", "codepoints": [120167] },
2029 | { "index": "vprop", "codepoints": [8733] },
2030 | { "index": "vrtri", "codepoints": [8883] },
2031 | { "index": "Vscr", "codepoints": [119985] },
2032 | { "index": "vscr", "codepoints": [120011] },
2033 | { "index": "vsubnE", "codepoints": [10955, 65024] },
2034 | { "index": "vsubne", "codepoints": [8842, 65024] },
2035 | { "index": "vsupnE", "codepoints": [10956, 65024] },
2036 | { "index": "vsupne", "codepoints": [8843, 65024] },
2037 | { "index": "Vvdash", "codepoints": [8874] },
2038 | { "index": "vzigzag", "codepoints": [10650] },
2039 | { "index": "Wcirc", "codepoints": [372] },
2040 | { "index": "wcirc", "codepoints": [373] },
2041 | { "index": "wedbar", "codepoints": [10847] },
2042 | { "index": "wedge", "codepoints": [8743] },
2043 | { "index": "Wedge", "codepoints": [8896] },
2044 | { "index": "wedgeq", "codepoints": [8793] },
2045 | { "index": "weierp", "codepoints": [8472] },
2046 | { "index": "Wfr", "codepoints": [120090] },
2047 | { "index": "wfr", "codepoints": [120116] },
2048 | { "index": "Wopf", "codepoints": [120142] },
2049 | { "index": "wopf", "codepoints": [120168] },
2050 | { "index": "wp", "codepoints": [8472] },
2051 | { "index": "wr", "codepoints": [8768] },
2052 | { "index": "wreath", "codepoints": [8768] },
2053 | { "index": "Wscr", "codepoints": [119986] },
2054 | { "index": "wscr", "codepoints": [120012] },
2055 | { "index": "xcap", "codepoints": [8898] },
2056 | { "index": "xcirc", "codepoints": [9711] },
2057 | { "index": "xcup", "codepoints": [8899] },
2058 | { "index": "xdtri", "codepoints": [9661] },
2059 | { "index": "Xfr", "codepoints": [120091] },
2060 | { "index": "xfr", "codepoints": [120117] },
2061 | { "index": "xharr", "codepoints": [10231] },
2062 | { "index": "xhArr", "codepoints": [10234] },
2063 | { "index": "Xi", "codepoints": [926] },
2064 | { "index": "xi", "codepoints": [958] },
2065 | { "index": "xlarr", "codepoints": [10229] },
2066 | { "index": "xlArr", "codepoints": [10232] },
2067 | { "index": "xmap", "codepoints": [10236] },
2068 | { "index": "xnis", "codepoints": [8955] },
2069 | { "index": "xodot", "codepoints": [10752] },
2070 | { "index": "Xopf", "codepoints": [120143] },
2071 | { "index": "xopf", "codepoints": [120169] },
2072 | { "index": "xoplus", "codepoints": [10753] },
2073 | { "index": "xotime", "codepoints": [10754] },
2074 | { "index": "xrarr", "codepoints": [10230] },
2075 | { "index": "xrArr", "codepoints": [10233] },
2076 | { "index": "Xscr", "codepoints": [119987] },
2077 | { "index": "xscr", "codepoints": [120013] },
2078 | { "index": "xsqcup", "codepoints": [10758] },
2079 | { "index": "xuplus", "codepoints": [10756] },
2080 | { "index": "xutri", "codepoints": [9651] },
2081 | { "index": "xvee", "codepoints": [8897] },
2082 | { "index": "xwedge", "codepoints": [8896] },
2083 | { "index": "Yacute", "codepoints": [221] },
2084 | { "index": "yacute", "codepoints": [253] },
2085 | { "index": "YAcy", "codepoints": [1071] },
2086 | { "index": "yacy", "codepoints": [1103] },
2087 | { "index": "Ycirc", "codepoints": [374] },
2088 | { "index": "ycirc", "codepoints": [375] },
2089 | { "index": "Ycy", "codepoints": [1067] },
2090 | { "index": "ycy", "codepoints": [1099] },
2091 | { "index": "yen", "codepoints": [165] },
2092 | { "index": "Yfr", "codepoints": [120092] },
2093 | { "index": "yfr", "codepoints": [120118] },
2094 | { "index": "YIcy", "codepoints": [1031] },
2095 | { "index": "yicy", "codepoints": [1111] },
2096 | { "index": "Yopf", "codepoints": [120144] },
2097 | { "index": "yopf", "codepoints": [120170] },
2098 | { "index": "Yscr", "codepoints": [119988] },
2099 | { "index": "yscr", "codepoints": [120014] },
2100 | { "index": "YUcy", "codepoints": [1070] },
2101 | { "index": "yucy", "codepoints": [1102] },
2102 | { "index": "yuml", "codepoints": [255] },
2103 | { "index": "Yuml", "codepoints": [376] },
2104 | { "index": "Zacute", "codepoints": [377] },
2105 | { "index": "zacute", "codepoints": [378] },
2106 | { "index": "Zcaron", "codepoints": [381] },
2107 | { "index": "zcaron", "codepoints": [382] },
2108 | { "index": "Zcy", "codepoints": [1047] },
2109 | { "index": "zcy", "codepoints": [1079] },
2110 | { "index": "Zdot", "codepoints": [379] },
2111 | { "index": "zdot", "codepoints": [380] },
2112 | { "index": "zeetrf", "codepoints": [8488] },
2113 | { "index": "ZeroWidthSpace", "codepoints": [8203] },
2114 | { "index": "Zeta", "codepoints": [918] },
2115 | { "index": "zeta", "codepoints": [950] },
2116 | { "index": "zfr", "codepoints": [120119] },
2117 | { "index": "Zfr", "codepoints": [8488] },
2118 | { "index": "ZHcy", "codepoints": [1046] },
2119 | { "index": "zhcy", "codepoints": [1078] },
2120 | { "index": "zigrarr", "codepoints": [8669] },
2121 | { "index": "zopf", "codepoints": [120171] },
2122 | { "index": "Zopf", "codepoints": [8484] },
2123 | { "index": "Zscr", "codepoints": [119989] },
2124 | { "index": "zscr", "codepoints": [120015] },
2125 | { "index": "zwj", "codepoints": [8205] },
2126 | { "index": "zwnj", "codepoints": [8204] }
2127 | ]
--------------------------------------------------------------------------------