1 ///
2 /// Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
3 /// Use of this file is governed by the BSD 3-clause license that
4 /// can be found in the LICENSE.txt file in the project root.
5 ///
6 
7 //
8 //  CharacterEextension.swift
9 //  Antlr.swift
10 //
11 //  Created by janyou on 15/9/4.
12 //
13 
14 import Foundation
15 
16 extension Character {
17 
18     //"1" -> 1 "2"  -> 2
19     var integerValue: Int {
20         return Int(String(self)) ?? 0
21     }
22     public init(integerLiteral value: IntegerLiteralType) {
23         self = Character(UnicodeScalar(value)!)
24     }
25     var utf8Value: UInt8 {
26         for s in String(self).utf8 {
27             return s
28         }
29         return 0
30     }
31 
32     var utf16Value: UInt16 {
33         for s in String(self).utf16 {
34             return s
35         }
36         return 0
37     }
38 
39     //char ->  int
40     var unicodeValue: Int {
41         return Int(String(self).unicodeScalars.first?.value ?? 0)
42     }
43 
44     public static var MAX_VALUE: Int {
45         let c: Character = "\u{10FFFF}"
46         return c.unicodeValue
47     }
48     public static var MIN_VALUE: Int {
49         let c: Character = "\u{0000}"
50         return c.unicodeValue
51     }
52 
isJavaIdentifierStartnull53     public static func isJavaIdentifierStart(_ char: Int) -> Bool {
54         let ch = Character(integerLiteral: char)
55         return ch == "_" || ch == "$" || ("a" <= ch && ch <= "z")
56                 || ("A" <= ch && ch <= "Z")
57 
58     }
59 
isJavaIdentifierPartnull60     public static func isJavaIdentifierPart(_ char: Int) -> Bool {
61         let ch = Character(integerLiteral: char)
62         return isJavaIdentifierStart(char) || ("0" <= ch && ch <= "9")
63     }
64 
toCodePointnull65     public static func toCodePoint(_ high: Int, _ low: Int) -> Int {
66         let MIN_SUPPLEMENTARY_CODE_POINT = 65536 // 0x010000
67         let MIN_HIGH_SURROGATE = 0xd800 //"\u{dbff}"  //"\u{DBFF}"  //"\u{DBFF}"
68         let MIN_LOW_SURROGATE = 0xdc00 //"\u{dc00}" //"\u{DC00}"
69         return ((high << 10) + low) + (MIN_SUPPLEMENTARY_CODE_POINT
70                 - (MIN_HIGH_SURROGATE << 10)
71                 - MIN_LOW_SURROGATE)
72     }
73 
74 
75 }
76