]>
Commit | Line | Data |
---|---|---|
026a2f69 BB |
1 | import CommandLineKit |
2 | import Foundation | |
3 | ||
4 | /// Sets up and returns a new options parser | |
5 | /// | |
194a3581 | 6 | /// - Returns: A Dictionary of Options, and a new CommandLineKit instance |
026a2f69 BB |
7 | func createParser() -> ([String:Option], CommandLineKit) { |
8 | ||
9 | let parser = CommandLineKit() | |
10 | var flags: [String:Option] = [:] | |
11 | ||
12 | flags["help"] = BoolOption(shortFlag: "h", longFlag: "help", helpMessage: "Prints a help message.") | |
194a3581 | 13 | flags["version"] = BoolOption(shortFlag: "v", longFlag: "version", helpMessage: "Prints the version.") |
026a2f69 | 14 | |
0b3e11a8 BB |
15 | flags["enableSource"] = StringOption(shortFlag: "e", longFlag: "enable-source", helpMessage: "Enables a source") |
16 | flags["disableSource"] = StringOption(shortFlag: "d", longFlag: "disable-source", helpMessage: "Disables a source") | |
17 | flags["resetSource"] = StringOption(shortFlag: "r", longFlag: "reset-source", helpMessage: "Resets a source") | |
18 | flags["listSources"] = BoolOption(shortFlag: "l", longFlag: "list-sources", helpMessage: "Lists all sources") | |
19 | ||
20 | flags["title"] = BoolOption(shortFlag: "t", longFlag: "title", helpMessage: "Shows title of song if true") | |
21 | ||
026a2f69 BB |
22 | parser.addOptions(Array(flags.values)) |
23 | ||
47f1de79 BB |
24 | parser.formatOutput = {parseString, type in |
25 | ||
26 | var formattedString: String | |
27 | ||
28 | switch(type) { | |
29 | case .About: | |
30 | formattedString = "\(parseString) [<artist_name> <song_name>]" | |
31 | break | |
32 | default: | |
33 | formattedString = parseString | |
34 | } | |
35 | ||
36 | return parser.defaultFormat(formattedString, type: type) | |
37 | } | |
38 | ||
026a2f69 BB |
39 | return (flags, parser) |
40 | } | |
41 | ||
42 | func main() { | |
43 | ||
44 | let (flags, parser) = createParser() | |
45 | ||
46 | do { | |
47 | try parser.parse() | |
48 | } | |
49 | catch { | |
50 | parser.printUsage(error) | |
51 | exit(EX_USAGE) | |
52 | } | |
53 | ||
54 | if let helpFlag = flags["help"] as? BoolOption { | |
55 | if helpFlag.value == true { | |
0b3e11a8 BB |
56 | parser.printUsage() |
57 | exit(0) | |
58 | } | |
026a2f69 BB |
59 | } |
60 | ||
194a3581 BB |
61 | if let versionFlag = flags["version"] as? BoolOption { |
62 | if versionFlag.value == true { | |
0b3e11a8 BB |
63 | print(Lyricli.version) |
64 | exit(0) | |
65 | } | |
66 | } | |
67 | ||
68 | if let listSourcesFlag = flags["listSources"] as? BoolOption { | |
69 | if listSourcesFlag.value == true { | |
70 | Lyricli.printSources() | |
71 | exit(0) | |
72 | } | |
73 | } | |
74 | ||
75 | if let enableSourceFlag = flags["enableSource"] as? StringOption { | |
76 | if let source = enableSourceFlag.value { | |
77 | Lyricli.enableSource(source) | |
78 | exit(0) | |
79 | } | |
80 | } | |
81 | ||
82 | if let disableSourceFlag = flags["disableSource"] as? StringOption { | |
83 | if let source = disableSourceFlag.value { | |
84 | Lyricli.disableSource(source) | |
85 | exit(0) | |
86 | } | |
87 | } | |
88 | ||
89 | if let resetSourceFlag = flags["resetSource"] as? StringOption { | |
90 | if let source = resetSourceFlag.value { | |
91 | Lyricli.resetSource(source) | |
92 | exit(0) | |
93 | } | |
94 | } | |
95 | ||
96 | if let titleFlag = flags["title"] as? BoolOption { | |
97 | if titleFlag.value == true { | |
a968bff7 | 98 | Lyricli.showTitle = true |
0b3e11a8 | 99 | } |
194a3581 BB |
100 | } |
101 | ||
4425e900 BB |
102 | // Remove any flags so anyone after this gets the unprocessed values |
103 | let programName: [String] = [CommandLine.arguments[0]] | |
104 | CommandLine.arguments = programName + parser.unparsedArguments | |
105 | ||
0b3e11a8 | 106 | Lyricli.printLyrics() |
026a2f69 BB |
107 | } |
108 | ||
109 | main() |