From f3a15303b1909d71c705ee8267a72c31f751a5df Mon Sep 17 00:00:00 2001 From: krasimir Date: Fri, 13 Nov 2015 22:41:20 +0000 Subject: [PATCH] update glosses.hs to split definitions from examples in separate triples --- src/ui/android/glosses.hs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/ui/android/glosses.hs b/src/ui/android/glosses.hs index 0bb3c8af0..cd77e2118 100644 --- a/src/ui/android/glosses.hs +++ b/src/ui/android/glosses.hs @@ -1,8 +1,10 @@ import SG +import Data.Char +import Data.List main = do ls <- fmap lines $ readFile "../../../lib/src/translator/Dictionary.gf" - writeFile "assets/glosses.txt" (unlines ["<"++fn++",gloss,"++show gloss++">" | Just (fn,gloss) <- map gloss ls]) + writeFile "assets/glosses.txt" (unlines [x | Just (fn,gloss) <- map gloss ls, x <- glossTriples fn gloss]) gloss l = case words l of @@ -11,9 +13,20 @@ gloss l = _ -> Nothing _ -> Nothing -test = do - db <- openSG "semantics.db" - ls <- fmap lines $ readFile "assets/glosses.txt" - inTransaction db $ - sequence_ [insertTriple db s p o | Just (s,p,o) <- map readTriple ls] - closeSG db +glossTriples fn s = + (if null gs then [] else ["<"++fn++",gloss,"++show (mergeGloss gs)++">"])++ + ["<"++fn++",example,"++e++">" | e <- es] + where + (es,gs) = partition isExample (splitGloss s) + +splitGloss s = + let (xs,s') = break (==';') s + in trim xs : case s' of + ';':s -> splitGloss s + _ -> [] + where + trim = reverse . dropWhile isSpace . reverse . dropWhile isSpace + +mergeGloss = intercalate "; " + +isExample s = not (null s) && head s == '"' && last s == '"'