module LText.Parser.Unobtrusive where

import Data.Map as Map

-- Specifies a catalog of unobtrusive text (between delimiters) for different languages.

type DelimitedSpan = (String, String)

doubleBackslash   = ("//",   "\n")
backslashAsterisk = ("/*",   "*/")
doubleDash        = ("--",   "\n")
curlyDash         = ("{-",   "-}")
angleBangDash     = ("<!--", "-->")

data Language =
    C
  | Cpp
  | Haskell
  | JavaScript
  | Css
  | Sass
  | Less
  | Html
  deriving (Ord, Eq, Show)

unobSpans :: Map Language [DelimitedSpan]
unobSpans = Map.fromList $
  [ (C, [doubleBackslash, backslashAsterisk])
  , (Cpp, [doubleBackslash, backslashAsterisk])
  , (Haskell, [doubleDash, curlyDash])
  , (JavaScript, [doubleBackslash, backslashAsterisk])
  , (Css, [backslashAsterisk])
  , (Sass, [doubleBackslash, backslashAsterisk])
  , (Less, [doubleBackslash, backslashAsterisk])
  , (Html, [angleBangDash])
  ]