60 lines
1.5 KiB
Swift
60 lines
1.5 KiB
Swift
//
|
|
// Characters.swift
|
|
// Sibil
|
|
//
|
|
// Created by Eryn Wells on 12/19/16.
|
|
// Copyright © 2016 Eryn Wells. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
|
|
extension CharacterSet {
|
|
static let asciiLetters: CharacterSet = {
|
|
return CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
|
}()
|
|
|
|
static let asciiDigits: CharacterSet = {
|
|
return CharacterSet(charactersIn: "1234567890")
|
|
}()
|
|
|
|
static let identifierInitials: CharacterSet = {
|
|
let letters = CharacterSet.asciiLetters
|
|
let extras = CharacterSet(charactersIn: "!$%&*/:<=>?~_^")
|
|
let initials = letters.union(extras)
|
|
return initials
|
|
}()
|
|
|
|
static let identifierSubsequents: CharacterSet = {
|
|
let initials = CharacterSet.identifierInitials
|
|
let digits = CharacterSet.asciiDigits
|
|
let extras = CharacterSet(charactersIn: ".+-")
|
|
let subsequents = initials.union(digits).union(extras)
|
|
return subsequents
|
|
}()
|
|
|
|
func contains(_ c: Character) -> Bool {
|
|
let cSet = CharacterSet(charactersIn: String(c))
|
|
let containsC = isSuperset(of: cSet)
|
|
return containsC
|
|
}
|
|
}
|
|
|
|
|
|
extension Character {
|
|
var isLeftParen: Bool {
|
|
return self == "("
|
|
}
|
|
|
|
var isRightParen: Bool {
|
|
return self == ")"
|
|
}
|
|
|
|
var isIdentifierInitial: Bool {
|
|
return CharacterSet.identifierInitials.contains(self)
|
|
}
|
|
|
|
var isIdentifierSubsequent: Bool {
|
|
return CharacterSet.identifierSubsequents.contains(self)
|
|
}
|
|
}
|