orchid-0.0.6: src/Text/Document/Plugin/HsColour.hs
module Text.Document.Plugin.HsColour (hscolourPlugin) where
import Control.Applicative
import Text.ParserCombinators.Parsec hiding (many, optional, (<|>))
import qualified Language.Haskell.HsColour.Colourise as C
import qualified Language.Haskell.HsColour.ColourHighlight as H
import qualified Language.Haskell.HsColour.CSS as HscCSS
import qualified Language.Haskell.HsColour.LaTeX as HscTeX
import Text.Document.Parser.WikiHelper
import Text.Document.Core.Type
import Text.Document.Plugin
import qualified Text.Xhtml.Xhtml as H
import qualified Text.Xml.Xml as X
-------- hscolour plugin ------------------------------------------------------
hscolourPlugin :: Plugin Document Syn_Document
hscolourPlugin = makePlugin "hscolour"
[(Wiki, pWiki)]
[(XHTML, ppXHTML), (LaTeX, ppLaTeX), (ADT, ppADT)]
[]
-------- parsers --------------------------------------------------------------
pWiki (Just (ContextWiki n)) = do
(m, i) <- pIndent n
(string "@@" <* many (oneOf ws) <* string "haskell")
*> many pEmptyLineEol
*> (trimCode
<$> pLevel (m + 1))
-------- pretty printers ------------------------------------------------------
ppXHTML s doc = OutputXML $ X.snippet $ HscCSS.hscolour False True "" s
ppLaTeX s doc = OutputPlain
$ "\\begin{verbatim}\n" ++ s ++ "\n\\end{verbatim}\n"
{-
ppLaTeX s = OutputPlain
$ HscTeX.hscolour texColourPrefs True s
texColourPrefs = C.ColourPrefs {
C.keyword = [H.Normal]
, C.keyglyph = [H.Normal]
, C.layout = [H.Normal]
, C.comment = [H.Normal]
, C.conid = [H.Normal]
, C.varid = [H.Normal]
, C.conop = [H.Normal]
, C.varop = [H.Normal]
, C.string = [H.Normal]
, C.char = [H.Normal]
, C.number = [H.Normal]
, C.cpp = [H.Normal]
, C.selection = [H.Normal]
, C.variantselection = [H.Normal]
, C.definition = [H.Normal]
}
-}
ppADT s doc = OutputPlain $ show doc