packages feed

tinytools-0.1.0.0: src/Potato/Flow/OwlHelpers.hs

module Potato.Flow.OwlHelpers where


import Relude

import Potato.Flow.SElts
import Potato.Flow.Owl
import Potato.Flow.OwlItem
import Potato.Flow.Llama
import Potato.Flow.SEltMethods

superOwl_mustGetSLine :: SuperOwl -> SAutoLine
superOwl_mustGetSLine sowl = case _owlItem_subItem$ _superOwl_elt sowl of
  OwlSubItemLine sline -> sline
  x -> error $ "expected SAutoLine, got " <> show x <> " instead"

data SetLineStyleEnd = SetLineStyleEnd_Start | SetLineStyleEnd_End | SetLineStyleEnd_Both

setLineStyleEnd_setStart :: SetLineStyleEnd -> Bool
setLineStyleEnd_setStart SetLineStyleEnd_End = False
setLineStyleEnd_setStart _ = True

setLineStyleEnd_setEnd :: SetLineStyleEnd -> Bool
setLineStyleEnd_setEnd SetLineStyleEnd_Start = False
setLineStyleEnd_setEnd _ = True


-- TODO move into Llama/Helpers.hs or something
makeLlamaForLineStyle :: SuperOwl -> SetLineStyleEnd -> LineStyle -> Llama
makeLlamaForLineStyle sowl end newstyle = r where
  rid = _superOwl_id sowl
  sline = superOwl_mustGetSLine sowl
  newsline = sline {
      _sAutoLine_lineStyle = if setLineStyleEnd_setStart end then newstyle else _sAutoLine_lineStyle sline
      , _sAutoLine_lineStyleEnd = if setLineStyleEnd_setEnd end then newstyle else _sAutoLine_lineStyleEnd sline
    }
  r = makeSetLlama (rid, SEltLine newsline)

makeLlamaForFlipLineStyle :: SuperOwl -> Maybe Llama
makeLlamaForFlipLineStyle sowl = r where
  seltl = superOwl_toSEltLabel_hack sowl
  startStyle = getSEltLabelLineStyle seltl
  endStyle = getSEltLabelLineStyleEnd seltl
  rid = _superOwl_id sowl
  sline = superOwl_mustGetSLine sowl
  newsline = sline {
      _sAutoLine_lineStyle = _sAutoLine_lineStyleEnd sline
      , _sAutoLine_lineStyleEnd = _sAutoLine_lineStyle sline
    }
  r = if startStyle == endStyle
    then Nothing
    else Just $ makeSetLlama (rid, SEltLine newsline)