From b419aa7b0810fc11be084accc9a0408c3a87f44b Mon Sep 17 00:00:00 2001 From: Filip Gralinski Date: Wed, 12 Sep 2018 20:52:56 +0200 Subject: [PATCH] Handle dot decimal separator in parameters --- geval.cabal | 1 + src/GEval/ParseParams.hs | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/geval.cabal b/geval.cabal index c13e7bb..7cea59f 100644 --- a/geval.cabal +++ b/geval.cabal @@ -73,6 +73,7 @@ library , pcre-heavy , process , uri-encode + , MissingH default-language: Haskell2010 executable geval diff --git a/src/GEval/ParseParams.hs b/src/GEval/ParseParams.hs index 0b0027a..0062e91 100644 --- a/src/GEval/ParseParams.hs +++ b/src/GEval/ParseParams.hs @@ -1,4 +1,5 @@ {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE QuasiQuotes #-} module GEval.ParseParams(parseParamsFromFilePath, parseParamsFromSourceSpec, @@ -9,6 +10,12 @@ import Data.Map.Strict as M import Data.Text import Data.Attoparsec.Text +import Text.Regex.PCRE.Heavy + +import Data.Monoid ((<>)) + +import qualified Data.String.Utils as DSU + import System.FilePath import Data.Conduit.SmartSource (SourceSpec(..), recoverPath) @@ -22,7 +29,17 @@ parseParamsFromSourceSpec spec = OutputFileParsed (recoverPath spec) M.empty parseParamsFromFilePath :: FilePath -> OutputFileParsed parseParamsFromFilePath filePath = parseParamsFromBaseName fileBaseName - where fileBaseName = dropExtensions $ takeBaseName filePath + where fileBaseName = backDecimalSeparator $ dropExtensions $ hideDecimalSeparator $ takeBaseName filePath + +dotReplacement :: Char +dotReplacement = '•' + +hideDecimalSeparator :: String -> String +hideDecimalSeparator = gsub [re|([0-9])\.([0-9])|] (\(a:b:_) -> a <> [dotReplacement] <> b) + +backDecimalSeparator :: String -> String +backDecimalSeparator = DSU.replace [dotReplacement] "." + parseParamsFromBaseName :: FilePath -> OutputFileParsed parseParamsFromBaseName baseName = case parseOnly (parser <* endOfInput) (pack baseName) of