Add quoteWord proc
This commit is contained in:
parent
cef93bbd95
commit
68e7691275
|
@ -441,7 +441,7 @@ proc load*(Configuration: type,
|
||||||
|
|
||||||
for opt in matchingOptions:
|
for opt in matchingOptions:
|
||||||
# The trailing '=' means the switch accepts an argument
|
# The trailing '=' means the switch accepts an argument
|
||||||
let trailing = if opt.typename != "bool": '=' else: ' '
|
let trailing = if opt.typename != "bool": "=" else: ""
|
||||||
|
|
||||||
if longForm in filterKind:
|
if longForm in filterKind:
|
||||||
stdout.writeLine("--", opt.name, trailing)
|
stdout.writeLine("--", opt.name, trailing)
|
||||||
|
|
|
@ -13,6 +13,7 @@ type
|
||||||
|
|
||||||
const
|
const
|
||||||
WORDBREAKS = "\"'@><=;|&(:"
|
WORDBREAKS = "\"'@><=;|&(:"
|
||||||
|
SAFE_CHARS = {'a'..'z', 'A'..'Z', '0'..'9', '@', '%', '+', '=', ':', ',', '.', '/', '-'}
|
||||||
|
|
||||||
proc open(l: var ShellLexer, input: Stream, wordBreakChars: string = WORDBREAKS, preserveTrailingWs = true) =
|
proc open(l: var ShellLexer, input: Stream, wordBreakChars: string = WORDBREAKS, preserveTrailingWs = true) =
|
||||||
lexbase.open(l, input)
|
lexbase.open(l, input)
|
||||||
|
@ -139,6 +140,20 @@ proc splitCompletionLine*(): seq[string] =
|
||||||
break
|
break
|
||||||
result.add(token.get())
|
result.add(token.get())
|
||||||
|
|
||||||
|
proc quoteWord*(word: string): string =
|
||||||
|
if len(word) == 0:
|
||||||
|
return "''"
|
||||||
|
|
||||||
|
if allCharsInSet(word, SAFE_CHARS):
|
||||||
|
return word
|
||||||
|
|
||||||
|
result.add('\'')
|
||||||
|
for ch in word:
|
||||||
|
if ch == '\'': result.add('\\')
|
||||||
|
result.add(ch)
|
||||||
|
|
||||||
|
result.add('\'')
|
||||||
|
|
||||||
# Test data lifted from python's shlex unit-tests
|
# Test data lifted from python's shlex unit-tests
|
||||||
const data = """
|
const data = """
|
||||||
foo bar|foo|bar|
|
foo bar|foo|bar|
|
||||||
|
@ -224,4 +239,11 @@ when isMainModule:
|
||||||
if got != expected:
|
if got != expected:
|
||||||
echo "got ", got
|
echo "got ", got
|
||||||
echo "expected ", expected
|
echo "expected ", expected
|
||||||
assert(false)
|
doAssert(false)
|
||||||
|
|
||||||
|
doAssert(quoteWord("") == "''")
|
||||||
|
doAssert(quoteWord("\\\"") == "'\\\"'")
|
||||||
|
doAssert(quoteWord("foobar") == "foobar")
|
||||||
|
doAssert(quoteWord("foo$bar") == "'foo$bar'")
|
||||||
|
doAssert(quoteWord("foo bar") == "'foo bar'")
|
||||||
|
doAssert(quoteWord("foo'bar") == "'foo\\'bar'")
|
||||||
|
|
Loading…
Reference in New Issue