Javier Cicchelli 9bcdaa697b [Setup] Basic project structure (#1)
This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended.

To summarise this work:
- [x] created a new **Xcode** project;
- [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project;
- [x] created the `Locations` app and also, its `Libraries` package;
- [x] created the `Shared` package to share dependencies between the apps;
- [x] added a `Makefile` file and implemented some **environment** and **help** commands.

Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Reviewed-on: rock-n-code/deep-linking-assignment#1
2023-04-08 18:37:13 +00:00

111 lines
3.1 KiB
Swift

import Foundation
// Emum for namespaces common amongst most Wikipedia languages.
@objc public enum PageNamespace: Int, Codable {
case media = -2
case special = -1
case main = 0
case talk = 1
case user = 2
case userTalk = 3
case wikipedia = 4
case wikipediaTalk = 5
case file = 6
case fileTalk = 7
case mediawiki = 8
case mediawikiTalk = 9
case template = 10
case templateTalk = 11
case help = 12
case helpTalk = 13
case category = 14
case cateogryTalk = 15
case thread = 90
case threadTalk = 91
case summary = 92
case summaryTalk = 93
case portal = 100
case portalTalk = 101
case project = 102
case projectTalk = 103
// case ambiguous1 = 104
// case ambiguous2 = 105
// case ambiguous3 = 106
// case ambiguous4 = 107
case book = 108
case bookTalk = 109
// case ambiguous5 = 110
// case ambiguous6 = 111
case draft = 118
case draftTalk = 119
case educationProgram = 446
case educationProgramTalk = 447
case campaign = 460
case campaignTalk = 461
case timedText = 710
case timedTextTalk = 711
case module = 828
case moduleTalk = 829
case gadget = 2300
case gadgetTalk = 2301
case gadgetDefinition = 2302
case gadgetDefinitionTalk = 2303
case topic = 2600
public var canonicalName: String {
switch self {
case .media: return "Media"
case .special: return "Special"
case .talk: return "Talk"
case .user: return "User"
case .userTalk: return "User talk"
case .wikipedia: return "Wikipedia"
case .wikipediaTalk: return "Wikipedia talk"
case .file: return "File"
case .fileTalk: return "File talk"
case .mediawiki: return "MediaWiki"
case .mediawikiTalk: return "MediaWiki talk"
case .template: return "Template"
case .templateTalk: return "Template talk"
case .help: return "Help"
case .helpTalk: return "Help talk"
case .category: return "Category"
case .cateogryTalk: return "Category talk"
case .portal: return "Portal"
case .portalTalk: return "Portal talk"
case .draft: return "Draft"
case .draftTalk: return "Draft talk"
case .timedText: return "TimedText"
case .timedTextTalk: return "TimedText talk"
case .module: return "Module"
case .moduleTalk: return "Module talk"
case .gadget: return "Gadget"
case .gadgetTalk: return "Gadget talk"
case .gadgetDefinition: return "Gadget definition"
case .gadgetDefinitionTalk: return "Gadget definition talk"
default:
return ""
}
}
public var convertedToOrFromTalk: PageNamespace? {
switch self {
case .main:
return .talk
case .talk:
return .main
default:
return nil
}
}
}
extension PageNamespace {
public init?(namespaceValue: Int?) {
guard let rawValue = namespaceValue else {
return nil
}
self.init(rawValue: rawValue)
}
}