aboutsummaryrefslogtreecommitdiff
path: root/src/server/Message.hs
diff options
context:
space:
mode:
authorJoris Guyonvarch2015-08-10 21:56:58 +0200
committerJoris Guyonvarch2015-08-10 21:56:58 +0200
commitf860b59644e84b84b6d7b4af309161ca7c5499ee (patch)
treef55a136211c6892b4f355252bd0de87a62d95281 /src/server/Message.hs
parentd1fd30057cd7178e79e258a629d50c5644002166 (diff)
downloadbudget-f860b59644e84b84b6d7b4af309161ca7c5499ee.tar.gz
budget-f860b59644e84b84b6d7b4af309161ca7c5499ee.tar.bz2
budget-f860b59644e84b84b6d7b4af309161ca7c5499ee.zip
Adding a message structure server side
Diffstat (limited to 'src/server/Message.hs')
-rw-r--r--src/server/Message.hs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/server/Message.hs b/src/server/Message.hs
new file mode 100644
index 0000000..1673b22
--- /dev/null
+++ b/src/server/Message.hs
@@ -0,0 +1,45 @@
+module Message
+ ( getMessage
+ , getVarMessage
+ ) where
+
+import Data.Maybe (listToMaybe, fromMaybe)
+
+import Text.ParserCombinators.Parsec
+
+import Message.Key (Key)
+import Message.Lang
+import Message.Translations (getNonFormattedMessage)
+
+getMessage :: Key -> String
+getMessage = getVarMessage []
+
+getVarMessage :: [String] -> Key -> String
+getVarMessage values key =
+ replaceParts values (getParts (getNonFormattedMessage French key))
+
+replaceParts :: [String] -> [Part] -> String
+replaceParts values = concatMap (replacePart values)
+
+replacePart :: [String] -> Part -> String
+replacePart _ (Str str) = str
+replacePart values (Num n) =
+ fromMaybe ("{" ++ show n ++ "}") . listToMaybe . drop (n - 1) $ values
+
+data Part =
+ Num Int
+ | Str String
+
+getParts :: String -> [Part]
+getParts str =
+ case parse partsParser "" str of
+ Right parts -> parts
+ Left _ -> []
+
+partsParser :: Parser [Part]
+partsParser = many partParser
+
+partParser :: Parser Part
+partParser =
+ (do _ <- string "{"; n <- read <$> many1 digit; _ <- string "}"; return (Num n))
+ <|> (do str <- many1 (noneOf "{"); return (Str str))