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