packages feed

proteome-0.9.9.9: lib/Proteome/Grep/Syntax.hs

module Proteome.Grep.Syntax where

import qualified Data.Map.Strict as Map (fromList)
import Ribosome.Data.Syntax.Syntax (HiLink (HiLink), Syntax (Syntax))
import Ribosome.Data.SyntaxItem (SyntaxItem (options, params))
import Ribosome.Syntax (syntaxMatch, syntaxVerbatim)
import Text.RawString.QQ (r)

lineNumber :: Text
lineNumber =
  "\57505"

asterisk :: SyntaxItem
asterisk =
  item {options, params}
  where
    item = syntaxMatch "ProGrepAsterisk" [r|^ \*|]
    options = ["skipwhite"]
    params = Map.fromList [("nextgroup", "ProGrepPath")]

path :: SyntaxItem
path =
  item {options, params}
  where
    item = syntaxMatch "ProGrepPath" ([r|.*\ze|] <> lineNumber)
    options = ["contained", "skipwhite"]
    params = Map.fromList [("nextgroup", "ProGrepLN")]

ln :: SyntaxItem
ln =
  item {options, params}
  where
    item = syntaxMatch "ProGrepLN" lineNumber
    options = ["contained", "skipwhite"]
    params = Map.fromList [("nextgroup", "ProGrepLine")]

line :: SyntaxItem
line =
  item {options, params}
  where
    item = syntaxMatch "ProGrepLine" [r|\d\+\ze:|]
    options = ["contained"]
    params = Map.fromList [("nextgroup", "ProGrepColon")]

colon :: SyntaxItem
colon =
  item {options, params}
  where
    item = syntaxMatch "ProGrepColon" [r|:|]
    options = ["contained"]
    params = Map.fromList [("nextgroup", "ProGrepCol")]

col :: SyntaxItem
col =
  item {options, params}
  where
    item = syntaxMatch "ProGrepCol" [r|\d\+|]
    options = ["contained", "skipwhite"]
    params = Map.fromList [("nextgroup", "ProGrepText")]

text_ :: SyntaxItem
text_ =
  item { options }
  where
    item = syntaxMatch "ProGrepText" [r|.\+|]
    options = ["contained"]

sync :: SyntaxItem
sync =
  syntaxVerbatim "syntax sync minlines=1"

hlAsterisk :: HiLink
hlAsterisk =
  HiLink "ProGrepAsterisk" "Todo"

hlPath :: HiLink
hlPath =
  HiLink "ProGrepPath" "Type"

hlLn :: HiLink
hlLn =
  HiLink "ProGrepLN" "LineNr"

hlLine :: HiLink
hlLine =
  HiLink "ProGrepLine" "Constant"

hlCol :: HiLink
hlCol =
  HiLink "ProGrepCol" "Constant"

hlText :: HiLink
hlText =
  HiLink "ProGrepText" "Directory"

grepSyntax :: Syntax
grepSyntax =
  Syntax items [] links
  where
    items =
      [asterisk, path, ln, line, col, colon, text_, sync]
    links =
      [hlAsterisk, hlPath, hlLn, hlLine, hlCol, hlText]