-
Notifications
You must be signed in to change notification settings - Fork 72
/
Copy pathParseCmdLine.ahk
55 lines (48 loc) · 1.11 KB
/
ParseCmdLine.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
; Link: https://gist.github.com/tmplinshi/573accc5844c76f18810ae6fbdcca0dd
; Author: tmplinshi
; Date:
; for: AHK_L
/*
ParseCmdline - parse command line to object
Example:
cmdline = "a test.ahk" -from gbk /to utf-8 /a /b --delete-top 2 --delete-end=5 "in file.txt" out.txt
o := ParseCmdline(cmdline)
MsgBox, % obj_print(o)
Return:
{
"$" : [
"a test.ahk",
"in file.txt",
"out.txt"
],
"a" : 1,
"b" : 1,
"delete-end" : 5,
"delete-top" : 2,
"from" : "gbk",
"to" : "utf-8"
}
*/
ParseCmdline(ByRef cmdline, StrName := "$", NoValueArgs*) {
pos := 1, args := []
while, pos := RegExMatch(cmdline " ", "(\S*"".*?""|\S+)\s+", m, pos+StrLen(m))
args.push( StrReplace(m1, """") )
obj := { (StrName):[] }
KeyOnly := {}
for i, k in NoValueArgs
KeyOnly[k] := true
for i, arg in args
{
if KeyOnly[arg]
obj[arg] := true
else if RegExMatch(arg, "^--(.*?)=(.*)", m)
obj[m1] := m2
else if RegExMatch(arg, "^(?:/|--|-)\K.*", m)
obj[m] := true, key := m
else if (key != "")
obj[key] := arg, key := ""
else
obj[StrName].push(arg)
}
return obj
}