module Errata
(
Errata (..)
, errataSimple
, Block (..)
, blockSimple
, blockSimple'
, blockConnected
, blockConnected'
, blockMerged
, blockMerged'
, Pointer (..)
, Style (..)
, PointerStyle (..)
, prettyErrors
) where
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Builder as TB
import Errata.Internal.Render
import Errata.Source
import Errata.Types
errataSimple
:: Maybe Header
-> Block
-> Maybe Body
-> Errata
errataSimple :: Maybe Header -> Block -> Maybe Header -> Errata
errataSimple Maybe Header
header Block
block Maybe Header
body = Errata
{ errataHeader :: Maybe Header
errataHeader = Maybe Header
header
, errataBlocks :: [Block]
errataBlocks = [Block
block]
, errataBody :: Maybe Header
errataBody = Maybe Header
body
}
blockSimple
:: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Column, Column, Maybe Label)
-> Maybe Body
-> Block
blockSimple :: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Line, Maybe Header)
-> Maybe Header
-> Block
blockSimple Style
style PointerStyle
pstyle FilePath
fp Maybe Header
hm (Line
l, Line
cs, Line
ce, Maybe Header
lbl) Maybe Header
bm = Block
{ blockStyle :: Style
blockStyle = Style
style
, blockLocation :: (FilePath, Line, Line)
blockLocation = (FilePath
fp, Line
l, Line
cs)
, blockHeader :: Maybe Header
blockHeader = Maybe Header
hm
, blockPointers :: [Pointer]
blockPointers = [Line
-> Line -> Line -> Bool -> Maybe Header -> PointerStyle -> Pointer
Pointer Line
l Line
cs Line
ce Bool
False Maybe Header
lbl PointerStyle
pstyle]
, blockBody :: Maybe Header
blockBody = Maybe Header
bm
}
blockSimple'
:: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Column, Maybe Label)
-> Maybe Body
-> Block
blockSimple' :: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Maybe Header)
-> Maybe Header
-> Block
blockSimple' Style
style PointerStyle
pstyle FilePath
fp Maybe Header
hm (Line
l, Line
c, Maybe Header
lbl) Maybe Header
bm =
Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Line, Maybe Header)
-> Maybe Header
-> Block
blockSimple Style
style PointerStyle
pstyle FilePath
fp Maybe Header
hm (Line
l, Line
c, Line
c Line -> Line -> Line
forall a. Num a => a -> a -> a
+ Line
1, Maybe Header
lbl) Maybe Header
bm
blockConnected
:: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Column, Column, Maybe Label)
-> (Line, Column, Column, Maybe Label)
-> Maybe Body
-> Block
blockConnected :: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Line, Maybe Header)
-> (Line, Line, Line, Maybe Header)
-> Maybe Header
-> Block
blockConnected Style
style PointerStyle
pstyle FilePath
fp Maybe Header
hm (Line
l1, Line
cs1, Line
ce1, Maybe Header
lbl1) (Line
l2, Line
cs2, Line
ce2, Maybe Header
lbl2) Maybe Header
bm = Block
{ blockStyle :: Style
blockStyle = Style
style
, blockLocation :: (FilePath, Line, Line)
blockLocation = (FilePath
fp, Line
l1, Line
cs1)
, blockHeader :: Maybe Header
blockHeader = Maybe Header
hm
, blockPointers :: [Pointer]
blockPointers = [Line
-> Line -> Line -> Bool -> Maybe Header -> PointerStyle -> Pointer
Pointer Line
l1 Line
cs1 Line
ce1 Bool
True Maybe Header
lbl1 PointerStyle
pstyle, Line
-> Line -> Line -> Bool -> Maybe Header -> PointerStyle -> Pointer
Pointer Line
l2 Line
cs2 Line
ce2 Bool
True Maybe Header
lbl2 PointerStyle
pstyle]
, blockBody :: Maybe Header
blockBody = Maybe Header
bm
}
blockConnected'
:: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Column, Maybe Label)
-> (Line, Column, Maybe Label)
-> Maybe Body
-> Block
blockConnected' :: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Maybe Header)
-> (Line, Line, Maybe Header)
-> Maybe Header
-> Block
blockConnected' Style
style PointerStyle
pstyle FilePath
fp Maybe Header
hm (Line
l1, Line
c1, Maybe Header
lbl1) (Line
l2, Line
c2, Maybe Header
lbl2) Maybe Header
bm =
Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Line, Maybe Header)
-> (Line, Line, Line, Maybe Header)
-> Maybe Header
-> Block
blockConnected Style
style PointerStyle
pstyle FilePath
fp Maybe Header
hm (Line
l1, Line
c1, Line
c1 Line -> Line -> Line
forall a. Num a => a -> a -> a
+ Line
1, Maybe Header
lbl1) (Line
l2, Line
c2, Line
c2 Line -> Line -> Line
forall a. Num a => a -> a -> a
+ Line
1, Maybe Header
lbl2) Maybe Header
bm
blockMerged
:: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Column, Column, Maybe Label)
-> (Line, Column, Column, Maybe Label)
-> Maybe Label
-> Maybe Body
-> Block
blockMerged :: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Line, Maybe Header)
-> (Line, Line, Line, Maybe Header)
-> Maybe Header
-> Maybe Header
-> Block
blockMerged Style
style PointerStyle
pstyle FilePath
fp Maybe Header
hm (Line
l1, Line
cs1, Line
ce1, Maybe Header
lbl1) (Line
l2, Line
cs2, Line
ce2, Maybe Header
lbl2) Maybe Header
lbl Maybe Header
bm = Block
{ blockStyle :: Style
blockStyle = Style
style
, blockLocation :: (FilePath, Line, Line)
blockLocation = (FilePath
fp, Line
l1, Line
cs1)
, blockHeader :: Maybe Header
blockHeader = Maybe Header
hm
, blockPointers :: [Pointer]
blockPointers = if Line
l1 Line -> Line -> Bool
forall a. Eq a => a -> a -> Bool
== Line
l2
then [Line
-> Line -> Line -> Bool -> Maybe Header -> PointerStyle -> Pointer
Pointer Line
l1 Line
cs1 Line
ce2 Bool
False Maybe Header
lbl PointerStyle
pstyle]
else [Line
-> Line -> Line -> Bool -> Maybe Header -> PointerStyle -> Pointer
Pointer Line
l1 Line
cs1 Line
ce1 Bool
True Maybe Header
lbl1 PointerStyle
pstyle, Line
-> Line -> Line -> Bool -> Maybe Header -> PointerStyle -> Pointer
Pointer Line
l2 Line
cs2 Line
ce2 Bool
True Maybe Header
lbl2 PointerStyle
pstyle]
, blockBody :: Maybe Header
blockBody = Maybe Header
bm
}
blockMerged'
:: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Column, Maybe Label)
-> (Line, Column, Maybe Label)
-> Maybe Label
-> Maybe Body
-> Block
blockMerged' :: Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Maybe Header)
-> (Line, Line, Maybe Header)
-> Maybe Header
-> Maybe Header
-> Block
blockMerged' Style
pstyle PointerStyle
style FilePath
fp Maybe Header
hm (Line
l1, Line
c1, Maybe Header
lbl1) (Line
l2, Line
c2, Maybe Header
lbl2) Maybe Header
lbl Maybe Header
bm =
Style
-> PointerStyle
-> FilePath
-> Maybe Header
-> (Line, Line, Line, Maybe Header)
-> (Line, Line, Line, Maybe Header)
-> Maybe Header
-> Maybe Header
-> Block
blockMerged Style
pstyle PointerStyle
style FilePath
fp Maybe Header
hm (Line
l1, Line
c1, Line
c1 Line -> Line -> Line
forall a. Num a => a -> a -> a
+ Line
1, Maybe Header
lbl1) (Line
l2, Line
c2, Line
c2 Line -> Line -> Line
forall a. Num a => a -> a -> a
+ Line
1, Maybe Header
lbl2) Maybe Header
lbl Maybe Header
bm
prettyErrors :: Source source => source -> [Errata] -> TL.Text
prettyErrors :: forall source. Source source => source -> [Errata] -> Text
prettyErrors source
source [Errata]
errs = Builder -> Text
TB.toLazyText (Builder -> Text) -> Builder -> Text
forall a b. (a -> b) -> a -> b
$ source -> [Errata] -> Builder
forall source. Source source => source -> [Errata] -> Builder
renderErrors source
source [Errata]
errs