module HaskellWorks.Data.Json.Simple.Cursor.Snippet ( snippetPos , snippet ) where import Data.Maybe import HaskellWorks.Data.Json.Simple.Cursor import HaskellWorks.Data.Positioning import HaskellWorks.Data.RankSelect.Base.Select1 import HaskellWorks.Data.RankSelect.CsPoppy import qualified Data.ByteString as BS import qualified HaskellWorks.Data.BalancedParens as BP import qualified HaskellWorks.Data.BalancedParens.RangeMin as RM snippetPos :: JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy) -> (Count, Count) snippetPos :: JsonCursor ByteString CsPoppy (RangeMin CsPoppy) -> (Count, Count) snippetPos JsonCursor ByteString CsPoppy (RangeMin CsPoppy) k = (Count kpa, Count kpz) where kpa :: Count kpa = CsPoppy -> Count -> Count forall v. Select1 v => v -> Count -> Count select1 CsPoppy kib Count kta Count -> Count -> Count forall a. Num a => a -> a -> a + Count km kpz :: Count kpz = CsPoppy -> Count -> Count forall v. Select1 v => v -> Count -> Count select1 CsPoppy kib Count ktz Count -> Count -> Count forall a. Num a => a -> a -> a - Count km kib :: CsPoppy kib = JsonCursor ByteString CsPoppy (RangeMin CsPoppy) -> CsPoppy forall t v w. JsonCursor t v w -> v interests JsonCursor ByteString CsPoppy (RangeMin CsPoppy) k kbp :: RangeMin CsPoppy kbp = JsonCursor ByteString CsPoppy (RangeMin CsPoppy) -> RangeMin CsPoppy forall t v w. JsonCursor t v w -> w balancedParens JsonCursor ByteString CsPoppy (RangeMin CsPoppy) k kra :: Count kra = JsonCursor ByteString CsPoppy (RangeMin CsPoppy) -> Count forall t v w. JsonCursor t v w -> Count cursorRank JsonCursor ByteString CsPoppy (RangeMin CsPoppy) k krz :: Count krz = Count -> Maybe Count -> Count forall a. a -> Maybe a -> a fromMaybe Count forall a. Bounded a => a maxBound (RangeMin CsPoppy -> Count -> Maybe Count forall v. FindClose v => v -> Count -> Maybe Count BP.findClose RangeMin CsPoppy kbp Count kra) ksa :: Count ksa = Count kra Count -> Count -> Count forall a. Num a => a -> a -> a + Count 1 ksz :: Count ksz = Count krz Count -> Count -> Count forall a. Num a => a -> a -> a + Count 1 kta :: Count kta = Count ksa Count -> Count -> Count forall a. Integral a => a -> a -> a `div` Count 2 ktz :: Count ktz = Count ksz Count -> Count -> Count forall a. Integral a => a -> a -> a `div` Count 2 km :: Count km = Count ksa Count -> Count -> Count forall a. Integral a => a -> a -> a `mod` Count 2 snippet :: JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy) -> BS.ByteString snippet :: JsonCursor ByteString CsPoppy (RangeMin CsPoppy) -> ByteString snippet JsonCursor ByteString CsPoppy (RangeMin CsPoppy) k = let (Count a, Count z) = JsonCursor ByteString CsPoppy (RangeMin CsPoppy) -> (Count, Count) snippetPos JsonCursor ByteString CsPoppy (RangeMin CsPoppy) k in Int -> ByteString -> ByteString BS.take (Count -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral (Count z Count -> Count -> Count forall a. Num a => a -> a -> a - Count a Count -> Count -> Count forall a. Num a => a -> a -> a + Count 1)) (Int -> ByteString -> ByteString BS.drop (Count -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral (Count a Count -> Count -> Count forall a. Num a => a -> a -> a - Count 1)) ByteString kt) where kt :: ByteString kt = JsonCursor ByteString CsPoppy (RangeMin CsPoppy) -> ByteString forall t v w. JsonCursor t v w -> t cursorText JsonCursor ByteString CsPoppy (RangeMin CsPoppy) k