aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Utility/RegularExpressions.swift
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2025-11-07 12:44:55 -0800
committerDustin Mierau <dustin@mierau.me>2025-11-07 12:44:55 -0800
commita55318fa8d643160900bec3e6b14e7404c63497a (patch)
treeab6a9eca9a368b35e1490becc70f94ebde6ac271 /Hotline/Utility/RegularExpressions.swift
parent786a387d58fc66ae20716a9dee46b74dff8e6894 (diff)
Organize Library folder a bit. Update Tracker add/edit sheet design.
Diffstat (limited to 'Hotline/Utility/RegularExpressions.swift')
-rw-r--r--Hotline/Utility/RegularExpressions.swift235
1 files changed, 0 insertions, 235 deletions
diff --git a/Hotline/Utility/RegularExpressions.swift b/Hotline/Utility/RegularExpressions.swift
deleted file mode 100644
index c1f2a18..0000000
--- a/Hotline/Utility/RegularExpressions.swift
+++ /dev/null
@@ -1,235 +0,0 @@
-import RegexBuilder
-
-struct RegularExpressions {
- static let messageBoardDivider = Regex {
- Capture {
- OneOrMore {
- CharacterClass(.newlineSequence)
- }
- ZeroOrMore {
- CharacterClass(.whitespace, .newlineSequence)
- }
- Repeat(2...) {
- CharacterClass(.anyOf("_-"))
- }
- ZeroOrMore {
- CharacterClass(.whitespace)
- }
- OneOrMore {
- CharacterClass(.newlineSequence)
- }
- }
- }
-
- static let supportedLinkScheme = Regex {
- Anchor.startOfLine
- ChoiceOf {
- "hotline"
- "http"
- "https"
- }
- "://"
- }.ignoresCase().anchorsMatchLineEndings()
-
- static let relaxedLink = Regex {
- ChoiceOf {
- Anchor.startOfLine
- Anchor.wordBoundary
- }
- Capture {
- // scheme (optional)
- Optionally {
- ChoiceOf {
- "hotline://"
- "http://"
- "https://"
- }
- }
- // domain name
- OneOrMore {
- CharacterClass(
- .anyOf(".-@"),
- ("a"..."z"),
- ("0"..."9")
- )
- }
- // top-level domain name
- "."
- ChoiceOf {
- "com"
- "net"
- "org"
- "edu"
- "gov"
- "mil"
- "aero"
- "asia"
- "biz"
- "cat"
- "coop"
- "info"
- "int"
- "jobs"
- "mobi"
- "museum"
- "name"
- "pizza"
- "post"
- "pro"
- "red"
- "tel"
- "today"
- "travel"
- "garden"
- "online"
- "ai"
- "be"
- "by"
- "ca"
- "co"
- "de"
- "er"
- "es"
- "fr"
- "gs"
- "ie"
- "im"
- "in"
- "io"
- "is"
- "it"
- "jp"
- "la"
- "ly"
- "ma"
- "md"
- "me"
- "my"
- "nl"
- "ps"
- "pt"
- "ja"
- "st"
- "to"
- "tv"
- "uk"
- "ws"
- }
- // Port
- Optionally {
- ":"
- OneOrMore {
- CharacterClass(.digit)
- }
- }
- // path
- ZeroOrMore {
- CharacterClass(
- .anyOf("#_-/.?=&%\\()[]"),
- ("a"..."z"),
- ("0"..."9")
- )
- }
- }
- ChoiceOf {
- Anchor.endOfLine
- Anchor.wordBoundary
- }
- }
- .anchorsMatchLineEndings()
- .ignoresCase()
-
- static let emailAddress = Regex {
- ChoiceOf {
- Anchor.startOfLine
- Anchor.wordBoundary
- }
- Capture {
- // username
- OneOrMore {
- CharacterClass(
- .anyOf(".-_"),
- ("a"..."z"),
- ("0"..."9")
- )
- }
- "@"
- // domain name
- OneOrMore {
- CharacterClass(
- .anyOf(".-"),
- ("a"..."z"),
- ("0"..."9")
- )
- }
- // top-level domain name
- "."
- ChoiceOf {
- "com"
- "net"
- "org"
- "edu"
- "gov"
- "mil"
- "aero"
- "asia"
- "biz"
- "cat"
- "coop"
- "info"
- "int"
- "jobs"
- "mobi"
- "museum"
- "name"
- "pizza"
- "post"
- "pro"
- "red"
- "tel"
- "today"
- "travel"
- "garden"
- "online"
- "ai"
- "be"
- "by"
- "ca"
- "co"
- "de"
- "er"
- "es"
- "fr"
- "gs"
- "ie"
- "im"
- "in"
- "io"
- "is"
- "it"
- "jp"
- "la"
- "ly"
- "ma"
- "md"
- "me"
- "my"
- "nl"
- "ps"
- "pt"
- "ja"
- "st"
- "to"
- "tv"
- "uk"
- "ws"
- }
- }
- ChoiceOf {
- Anchor.endOfLine
- Anchor.wordBoundary
- }
- }
- .anchorsMatchLineEndings()
- .ignoresCase()
-}