{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} module Commonmark.Extensions.Subscript ( HasSubscript(..) , subscriptSpec ) where import Commonmark.Types import Commonmark.Syntax import Commonmark.Inlines import Commonmark.SourceMap import Commonmark.Html subscriptSpec :: (Monad m, IsBlock il bl, IsInline il, HasSubscript il) => SyntaxSpec m il bl subscriptSpec = mempty { syntaxFormattingSpecs = [ FormattingSpec '~' True True (Just subscript) Nothing '~' ] } class HasSubscript a where subscript :: a -> a instance HasSubscript (Html a) where subscript x = htmlInline "sub" (Just x) instance (HasSubscript i, Monoid i) => HasSubscript (WithSourceMap i) where subscript x = (subscript <$> x) <* addName "subscript"