-- Polish ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- module FuzzyTime.Polish (showFuzzyTimePl) where import {-# SOURCE #-} FuzzyTime import Prelude hiding (min) -- showFuzzyTimePl ---------------------------------------------------------------------------------------------------------------------------------------------------------------- showFuzzyTimePl :: FuzzyTime -> String -- FuzzyClock showFuzzyTimePl fc@(FuzzyClock _ caps _ _ _ _ _) = capsizeDef caps (showFuzzyTimePlHlp fc) showFuzzyTimePl ft@(FuzzyTimer _ _) = showFuzzyTimePlHlp ft showFuzzyTimePlHlp :: FuzzyTime -> String showFuzzyTimePlHlp fc@(FuzzyClock _ _ clock hour _ min style) | min == 0 = getHourEven hour | min `elem` [23..29] && style == 2 = "za " ++ getMin (30-min) ++ " w pół do " ++ getHourOdd (nextFTHour fc) | min < 30 = getMin min ++ " po " ++ getHourOdd hour | min == 30 = "w pół do " ++ getHourOdd (nextFTHour fc) | min `elem` [31..37] && style == 2 = getMin (min-30) ++ " po w pół do " ++ getHourOdd (nextFTHour fc) | min > 30 = "za " ++ getMin (60-min) ++ " " ++ getHourEven (nextFTHour fc) | otherwise = "Oops, looks like it's " ++ show hour ++ ":" ++ show min ++ "." where getHourEven :: Int -> String getHourEven h | h `elem` [0, 24] = if style==1 then numeralPlOrd Nom clock else "północ" | otherwise = numeralPlOrd Nom h getHourOdd :: Int -> String getHourOdd h | h `elem` [0, 24] = if style==1 then numeralPlOrd Praep clock else if min < 30 then "północy" else numeralPlOrd Praep clock | otherwise = numeralPlOrd Praep h getMin :: Int -> String getMin m | m `elem` [15, 45] = "kwadrans" | otherwise = numeralPlCard m -- FuzzyTimer showFuzzyTimePlHlp (FuzzyTimer _ mins) | mins > 0 = "za " ++ showHelper | mins == 0 = "teraz!" | mins < 0 = "! " ++ showHelper ++ " temu !" where showHelper :: String showHelper | mm == 1320 = "dwadzieścia dwie godziny" | mm > 1260 = numeralPlCard hours ++ " godziny" | mm > 270 = numeralPlCard hours ++ " godzin" | mm == 150 = "dwie i pół godziny" | mm == 120 = "dwie godziny" | mm > 90 = numeralPlCard hours ++ (if half then " i pół" else "") ++ " godziny" | mm == 90 = "półtorej godziny" | mm == 75 = "godzinę piętnaście" | mm == 60 = "godzinę" | mm == 45 = "trzy kwadranse" | mm == 30 = "pół godziny" | mm == 15 = "kwadrans" | mm > 4 = numeralPlCard mm ++ " minut" | mm > 1 = numeralPlCard mm ++ " minuty" | mm == 1 = "minutę" | otherwise = "Oops, it looks like there's " ++ show mins ++ " left." hours :: Int hours = round $ (fromIntegral mm :: Float) / 60 mm :: Int mm = abs mins half :: Bool half = mm `mod` 60 == 30 -- numeralPl ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- data Case = Nom | Praep numeralPlCard :: Int -> String numeralPlCard n | n < 20 = numeralPlCardHelper1 n | n `mod` 10 == 0 = numeralPlCardHelper10 (n `div` 10) | otherwise = numeralPlCardHelper10 (n `div` 10) ++ " " ++ numeralPlCardHelper1 (n `mod` 10) where numeralPlCardHelper1 :: Int -> String numeralPlCardHelper1 i = ["jeden", "dwa", "trzy", "cztery", "pięć", "sześć", "siedem", "osiem", "dziewięć", "dziesięć", "jedenaście", "dwanaście", "trzynaście", "czternaście", "kwadrans", "szesnaście", "siedemnaście", "osiemnaście", "dziewiętnaście"] !! (i-1) numeralPlCardHelper10 :: Int -> String numeralPlCardHelper10 i = ["dwadzieścia", "trzydzieści", "czterdzieści", "pięćdziesiąt"] !! (i-2) numeralPlOrd :: Case -> Int -> String numeralPlOrd c num | num <= 20 = numeralPlOrdHelper1 c num | otherwise = numeralPlOrdHelper10 c ++ " " ++ numeralPlOrdHelper1 c (num `mod` 10) where numeralPlOrdHelper1 :: Case -> Int -> String numeralPlOrdHelper1 Nom n = ["pierwsza", "druga", "trzecia", "czwarta", "piąta", "szósta", "siódma", "ósma", "dziewiąta", "dziesiąta", "jedenasta", "dwunasta", "trzynasta", "czternasta", "piętnasta", "szesnasta", "siedemnasta", "osiemnasta", "dziewiętnasta", "dwudziesta"] !! (n-1) numeralPlOrdHelper1 Praep n = ["pierwszej", "drugiej", "trzeciej", "czwartej", "piątej", "szóstej", "siódmej", "ósmej", "dziewiątej", "dziesiątej", "jedenastej", "dwunastej", "trzynastej", "czternastej", "piętnastej", "szesnastej", "siedemnastej", "osiemnastej", "dziewiętnastej", "dwudziestej"] !! (n-1) numeralPlOrdHelper10 :: Case -> String numeralPlOrdHelper10 Nom = "dwudziesta" numeralPlOrdHelper10 Praep = "dwudziestej"