~alcinnz/fontconfig-pure

ref: a1837e5cba51dad2199502f9fc5e88c1184ca8c7 fontconfig-pure/lib/Graphics/Text/Font/Choose/Range.hs -rw-r--r-- 714 bytes
a1837e5c — Adrian Cochrane Fix C code, it compiles now! 10 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module Graphics.Text.Font.Choose.Range where

import Data.MessagePack (MessagePack(..), Object(..))
import qualified Data.Vector as V
import qualified Data.IntMap as IM

-- | Matches a numeric range.
data Range = Range Double Double deriving (Eq, Show, Ord)
-- | Matches an integral range.
iRange :: Int -> Int -> Range
iRange i j = toEnum i `Range` toEnum j

instance MessagePack Range where
    toObject (Range start end) = ObjectMap $ V.fromList [
        (ObjectInt 0, ObjectDouble start),
        (ObjectInt 1, ObjectDouble end)
      ]
    fromObject msg
        | Just msg' <- fromObject msg =
            Just (IM.findWithDefault 0 0 msg' `Range` IM.findWithDefault 0 1 msg')
        | otherwise = Nothing