{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
module Commonmark.Extensions.Superscript
  ( HasSuperscript(..)
  , superscriptSpec )
where
import Commonmark.Types
import Commonmark.Syntax
import Commonmark.Inlines
import Commonmark.SourceMap
import Commonmark.Html

superscriptSpec :: (Monad m, IsBlock il bl, IsInline il, HasSuperscript il)
              => SyntaxSpec m il bl
superscriptSpec = mempty
  { syntaxFormattingSpecs = [
      FormattingSpec '^' True True (Just superscript) Nothing '^'
      ]
  }

class HasSuperscript a where
  superscript :: a -> a

instance HasSuperscript (Html a) where
  superscript x = htmlInline "sup" (Just x)

instance (HasSuperscript i, Monoid i)
        => HasSuperscript (WithSourceMap i) where
  superscript x = (superscript <$> x) <* addName "superscript"