sibil/Sibil/Characters.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)
}
}