#define ARG ByteString
module Network.Damn.Tablumps.TH where
import Data.Attoparsec.ByteString (string)
import qualified Data.Attoparsec.ByteString.Char8 as C
import Data.ByteString (ByteString)
import Language.Haskell.TH
#if __GLASGOW_HASKELL__ <= 708
import Control.Applicative
#endif
ary :: Int -> String -> Name -> ExpQ
ary n s con = [e|do
_ <- string s
_ <- C.char '\t'
Right <$> $(mkApps)
|]
where
mkApps = foldl (\ a b -> [e|$(a) <*> $(b)|]) [e|pure $(conE con)|]
$ replicate n [e|C.takeWhile (/= '\t') <* C.char '\t'|]
data Lump = A ARG ARG
| C_A
| Abbr ARG
| C_Abbr
| Acro ARG
| C_Acro
| Avatar ARG ARG
| B
| C_B
| Bcode
| C_Bcode
| Br
| Code
| C_Code
| Dev ARG ARG
| Embed ARG ARG ARG
| C_Embed
| Emote ARG ARG ARG ARG ARG
| I
| C_I
| Iframe ARG ARG ARG
| C_Iframe
| Img ARG ARG ARG
| Li
| C_Li
| Link ARG (Maybe ARG)
| Ol
| C_Ol
| P
| C_P
| S
| C_S
| Sub
| C_Sub
| Sup
| C_Sup
| Thumb ARG ARG ARG ARG ARG ARG
| U
| C_U
| Ul
| C_Ul
deriving (Eq, Show)