{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Text.Pandoc.Filter.EmphasizeCode.Position
( Line(..)
, Column(..)
, Position
, line
, column
, mkPosition
, positionToTuple
) where
import Data.Hashable
newtype Line =
Line Word
deriving (Show, Eq, Ord, Num, Enum, Real, Integral, Hashable)
newtype Column =
Column Word
deriving (Show, Eq, Ord, Num, Enum, Real, Integral, Hashable)
data Position = Position
{ line :: Line
, column :: Column
} deriving (Eq, Show)
instance Ord Position where
Position r1 c1 `compare` Position r2 c2
| r1 < r2 = LT
| r1 == r2 && c1 == c2 = EQ
| r1 == r2 && c1 < c2 = LT
| otherwise = GT
mkPosition :: Line -> Column -> Maybe Position
mkPosition r c
| r > 0 && c > 0 = Just (Position r c)
| otherwise = Nothing
positionToTuple :: Position -> (Line, Column)
positionToTuple (Position l c) = (l, c)