From 4e2a51bb6b51cb4119ed192a60b0ffcd4db12f8a Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Fri, 8 Nov 2013 00:41:52 +0100 Subject: [PATCH 1/2] 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" From 12918f490d65e47858aa7565b164aba3b1942ad5 Mon Sep 17 00:00:00 2001 From: Grzegorz Adam Hankiewicz Date: Wed, 13 Nov 2013 19:10:03 +0100 Subject: [PATCH 2/2] Modifies multiSplit to strip commas too. Now commas can be used to separate entries, but are not required. --- packageinfo.nim | 22 +++++++++++----------- readme.markdown | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packageinfo.nim b/packageinfo.nim index 2f0a10d..958097e 100644 --- a/packageinfo.nim +++ b/packageinfo.nim @@ -75,14 +75,14 @@ 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. +proc multiSplit(s: string): seq[string] = + ## Returns ``s`` split by newline and comma characters. ## ## 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) + result = split(s, {char(0x0A), char(0x0D), ','}) map(result, proc(x: var string) = x = x.strip()) for i in countdown(result.len()-1, 0): if len(result[i]) < 1: @@ -118,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.multiSplit(',')) + result.skipDirs.add(ev.value.multiSplit) of "skipfiles": - result.skipFiles.add(ev.value.multiSplit(',')) + result.skipFiles.add(ev.value.multiSplit) of "skipext": - result.skipExt.add(ev.value.multiSplit(',')) + result.skipExt.add(ev.value.multiSplit) of "installdirs": - result.installDirs.add(ev.value.multiSplit(',')) + result.installDirs.add(ev.value.multiSplit) of "installfiles": - result.installFiles.add(ev.value.multiSplit(',')) + result.installFiles.add(ev.value.multiSplit) of "installext": - result.installExt.add(ev.value.multiSplit(',')) + result.installExt.add(ev.value.multiSplit) of "bin": - for i in ev.value.multiSplit(','): + for i in ev.value.multiSplit: result.bin.add(i.addFileExt(ExeExt)) of "backend": result.backend = ev.value.toLower() @@ -141,7 +141,7 @@ proc readPackageInfo*(path: string): TPackageInfo = of "deps", "dependencies": case ev.key.normalize of "requires": - for v in ev.value.multiSplit(','): + 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 387804a..9e63417 100644 --- a/readme.markdown +++ b/readme.markdown @@ -77,8 +77,8 @@ license = "MIT" SkipDirs = "SomeDir" ; ./SomeDir will not be installed SkipFiles = """ -file.txt, -file2.txt, +file.txt +file2.txt """ ; ./{file.txt, file2.txt} will not be installed [Deps]