packages feed

ribosome-0.9.9.9: lib/Ribosome/Syntax.hs

-- |Data types and combinators for [Ribosome.Api.Syntax]("Ribosome.Api.Syntax").
module Ribosome.Syntax (
  module Ribosome.Data.Syntax,
  module Ribosome.Syntax,
) where

import qualified Data.Map.Strict as Map

import Ribosome.Data.Syntax (
  HiLink (..),
  Highlight (..),
  Syntax (..),
  SyntaxItem (..),
  SyntaxItemDetail (..),
  )

-- |Construct a default 'SyntaxItem' from a 'SyntaxItemDetail'.
syntaxItem :: SyntaxItemDetail -> SyntaxItem
syntaxItem detail =
  SyntaxItem detail def def

-- |Construct a simple keyword syntax item.
syntaxKeyword :: Text -> Text -> SyntaxItem
syntaxKeyword group' keyword =
  syntaxItem $ Keyword group' keyword def

-- |Construct a simple match syntax item.
syntaxMatch :: Text -> Text -> SyntaxItem
syntaxMatch group' pat =
  syntaxItem $ Match group' pat

-- |Construct a region syntax item with offsets.
syntaxRegionOffset :: Text -> Text -> Text -> Maybe Text -> Text -> Text -> SyntaxItem
syntaxRegionOffset group' start end skip ms me =
  syntaxItem $ Region group' start end skip ms me

-- |Construct a simple region syntax item.
syntaxRegion :: Text -> Text -> Text -> Maybe Text -> SyntaxItem
syntaxRegion group' start end skip =
  syntaxRegionOffset group' start end skip "" ""

-- |Construct a simple verbatim syntax item.
syntaxVerbatim :: Text -> SyntaxItem
syntaxVerbatim =
  syntaxItem . Verbatim

-- |Construct a syntax highlight.
syntaxHighlight :: Text -> [(Text, Text)] -> Highlight
syntaxHighlight group' =
  Highlight group' . Map.fromList