From 4e2a51bb6b51cb4119ed192a60b0ffcd4db12f8a Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Fri, 8 Nov 2013 00:41:52 +0100 Subject: [PATCH] Adds method to split and strip input config files. This allows using triple quote variables specifying comma separated files on different lines. --- packageinfo.nim | 33 +++++++++++++++++++++++++-------- readme.markdown | 5 ++++- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/packageinfo.nim b/packageinfo.nim index bdb6c07..2f0a10d 100644 --- a/packageinfo.nim +++ b/packageinfo.nim @@ -75,6 +75,23 @@ proc parseRequires(req: string): tuple[name: string, ver: PVersionRange] = except EParseVersion: quit("Unable to parse dependency version range: " & getCurrentExceptionMsg()) +proc multiSplit(s: string, sep: char): seq[string] = + ## Returns ``s`` split by the ``sep`` character. + ## + ## Before returning, all individual entries are stripped of whitespace and + ## also empty entries are purged from the list. If after all the cleanups are + ## done no entries are found in the list, the proc returns a sequence with + ## the original string as the only entry. + result = split(s, sep) + map(result, proc(x: var string) = x = x.strip()) + for i in countdown(result.len()-1, 0): + if len(result[i]) < 1: + result.del(i) + # Huh, nothing to return? Return given input. + if len(result) < 1: + return @[s] + + proc readPackageInfo*(path: string): TPackageInfo = result = initPackageInfo() result.mypath = path @@ -101,19 +118,19 @@ proc readPackageInfo*(path: string): TPackageInfo = of "license": result.license = ev.value of "srcdir": result.srcDir = ev.value of "skipdirs": - result.skipDirs.add(ev.value.split(',')) + result.skipDirs.add(ev.value.multiSplit(',')) of "skipfiles": - result.skipFiles.add(ev.value.split(',')) + result.skipFiles.add(ev.value.multiSplit(',')) of "skipext": - result.skipExt.add(ev.value.split(',')) + result.skipExt.add(ev.value.multiSplit(',')) of "installdirs": - result.installDirs.add(ev.value.split(',')) + result.installDirs.add(ev.value.multiSplit(',')) of "installfiles": - result.installFiles.add(ev.value.split(',')) + result.installFiles.add(ev.value.multiSplit(',')) of "installext": - result.installExt.add(ev.value.split(',')) + result.installExt.add(ev.value.multiSplit(',')) of "bin": - for i in ev.value.split(','): + for i in ev.value.multiSplit(','): result.bin.add(i.addFileExt(ExeExt)) of "backend": result.backend = ev.value.toLower() @@ -124,7 +141,7 @@ proc readPackageInfo*(path: string): TPackageInfo = of "deps", "dependencies": case ev.key.normalize of "requires": - for v in ev.value.split(','): + for v in ev.value.multiSplit(','): result.requires.add(parseRequires(v.strip)) else: quit("Invalid field: " & ev.key, QuitFailure) diff --git a/readme.markdown b/readme.markdown index 8ece729..387804a 100644 --- a/readme.markdown +++ b/readme.markdown @@ -76,7 +76,10 @@ description = "Example .babel file." license = "MIT" SkipDirs = "SomeDir" ; ./SomeDir will not be installed -SkipFiles = "file.txt,file2.txt" ; ./{file.txt, file2.txt} will not be installed +SkipFiles = """ +file.txt, +file2.txt, +""" ; ./{file.txt, file2.txt} will not be installed [Deps] Requires: "nimrod >= 0.9.2"