From 69be67a67503c0cb80153510083513f92de952bf Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 9 Apr 2017 00:37:59 +0200 Subject: Add food --- src/Format.purs | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) (limited to 'src/Format.purs') diff --git a/src/Format.purs b/src/Format.purs index 22593e5..bed5927 100644 --- a/src/Format.purs +++ b/src/Format.purs @@ -1,12 +1,17 @@ -module Format where +module Format + ( number + , compare + , unaccent + ) where import Data.Int (toNumber, fromNumber) import Data.Array (replicate) import Data.Maybe (fromMaybe) -import Data.String (length, joinWith) +import Data.String (length, joinWith, fromCharArray, toCharArray, toLower) import Math (round, trunc, pow) -import Prelude +import Prelude hiding (compare) +import Prelude as Prelude number :: Int -> Number -> String number decimalLength num = formattedIntegerPart <> formattedDecimalPart @@ -27,3 +32,42 @@ number decimalLength num = formattedIntegerPart <> formattedDecimalPart # \str -> "," <> (joinWith "" $ replicate (decimalLength - length str) "0") <> str else "" + +compare :: String -> String -> Ordering +compare xs ys = Prelude.compare (formatString xs) (formatString ys) + where formatString = unaccent <<< toLower + +unaccent :: String -> String +unaccent = fromCharArray <<< map unaccentChar <<< toCharArray + where + unaccentChar :: Char -> Char + unaccentChar c = case c of + 'à' -> 'a' + 'á' -> 'a' + 'â' -> 'a' + 'ã' -> 'a' + 'ä' -> 'a' + 'ç' -> 'c' + 'è' -> 'e' + 'é' -> 'e' + 'ê' -> 'e' + 'ë' -> 'e' + 'ì' -> 'i' + 'í' -> 'i' + 'î' -> 'i' + 'ï' -> 'i' + 'ñ' -> 'n' + 'ò' -> 'o' + 'ó' -> 'o' + 'ô' -> 'o' + 'õ' -> 'o' + 'ö' -> 'o' + 'š' -> 's' + 'ù' -> 'u' + 'ú' -> 'u' + 'û' -> 'u' + 'ü' -> 'u' + 'ý' -> 'y' + 'ÿ' -> 'y' + 'ž' -> 'z' + _ -> c -- cgit v1.2.3