packages feed

noise-0.0.1: src/Text/Noise/SourceRange.hs

module Text.Noise.SourceRange
( SourceRange
, HasSourceRange(..)
, oneLineRange
, zeroRange
, sourceName
, startLine
, startColumn
) where

import qualified Text.Parsec as Parsec
import qualified Text.Parsec.Pos as Parsec.Pos

type SourceRange = (Parsec.SourcePos, Parsec.SourcePos)

oneLineRange :: Parsec.SourceName -> Int -> Int -> SourceRange
oneLineRange name col len = ( Parsec.Pos.newPos name 1 col
                            , Parsec.Pos.newPos name 1 (col + len))

zeroRange :: SourceRange
zeroRange = oneLineRange "" 1 0

sourceName :: SourceRange -> String
sourceName = Parsec.Pos.sourceName . fst

startLine :: SourceRange -> Parsec.Pos.Line
startLine = Parsec.Pos.sourceLine . fst

startColumn :: SourceRange -> Parsec.Pos.Column
startColumn = Parsec.Pos.sourceColumn . fst

class HasSourceRange a where
  rangeInSource :: a -> SourceRange

instance HasSourceRange Parsec.ParseError where
  rangeInSource err = (pos, pos) where pos = Parsec.errorPos err