on master help sign in
Abstract out the code for markdown parsing, making it easier to switch out the implementation
c864348Evan Czaplicki
compiler/Generate/JavaScript.hs+2−3
@@ -6,9 +6,9 @@ import Control.Monad.State
6import qualified Data.List as List
6import qualified Data.List as List
7import qualified Data.Map as Map
7import qualified Data.Map as Map
8import qualified Data.Set as Set
8import qualified Data.Set as Set
9−import qualified Text.Pandoc as Pan
10
9
11import qualified Generate.Cases as Case
10import qualified Generate.Cases as Case
11+import qualified Generate.Markdown as MD
12import SourceSyntax.Everything
12import SourceSyntax.Everything
13import SourceSyntax.Location
13import SourceSyntax.Location
14import qualified Transform.SortDefinitions as SD
14import qualified Transform.SortDefinitions as SD
@@ -186,9 +186,8 @@ expression (L span expr) =
186 ctor = (prop "ctor", string (makeSafe name))
186 ctor = (prop "ctor", string (makeSafe name))
187 fields = zipWith (\n e -> (prop ("_" ++ show n), e)) [0..]
187 fields = zipWith (\n e -> (prop ("_" ++ show n), e)) [0..]
188
188
189− Markdown doc _ -> return $ obj "Text.text" <| string (pad ++ md ++ pad)
189+ Markdown md _ -> return $ obj "Text.text" <| string (pad ++ MD.toHtml md ++ pad)
190 where pad = "<div style=\"height:0;width:0;\">&nbsp;</div>"
190 where pad = "<div style=\"height:0;width:0;\">&nbsp;</div>"
191− md = Pan.writeHtmlString Pan.def doc
192
191
193definition :: Def () () -> State Int [Statement ()]
192definition :: Def () () -> State Int [Statement ()]
194definition def =
193definition def =
compiler/Generate/Markdown.hsnew file+6
@@ -0,0 +1,6 @@
1+module Generate.Markdown where
2+
3+import Text.Pandoc
4+
5+toHtml :: String -> String
6+toHtml = writeHtmlString def . readMarkdown def
compiler/Generate/Noscript.hs+2−2
@@ -2,7 +2,7 @@ module Generate.Noscript (noscript) where
2
2
3import Data.List (isInfixOf)
3import Data.List (isInfixOf)
4import SourceSyntax.Everything
4import SourceSyntax.Everything
5−import qualified Text.Pandoc as Pan
5+import qualified Generate.Markdown as MD
6
6
7noscript :: Module t v -> String
7noscript :: Module t v -> String
8noscript modul = concat (extract modul)
8noscript modul = concat (extract modul)
@@ -49,7 +49,7 @@ instance Extract (Expr t v) where
49 Case e cases -> concatMap (f . snd) cases
49 Case e cases -> concatMap (f . snd) cases
50 Data _ es -> concatMap f es
50 Data _ es -> concatMap f es
51 MultiIf es -> concatMap (f . snd) es
51 MultiIf es -> concatMap (f . snd) es
52− Markdown doc _ -> [ Pan.writeHtmlString Pan.def doc ]
52+ Markdown md _ -> [ MD.toHtml md ]
53 _ -> []
53 _ -> []
54
54
55extractLink src txt =
55extractLink src txt =
compiler/Parse/Declaration.hs−1
@@ -6,7 +6,6 @@ import qualified Data.List as List
6import qualified Data.Set as Set
6import qualified Data.Set as Set
7import Text.Parsec hiding (newline,spaces)
7import Text.Parsec hiding (newline,spaces)
8import Text.Parsec.Indent
8import Text.Parsec.Indent
9−import qualified Text.Pandoc as Pan
10
9
11import Parse.Helpers
10import Parse.Helpers
12import qualified Parse.Expression as Expr
11import qualified Parse.Expression as Expr
compiler/Parse/Expression.hs+1−3
@@ -5,7 +5,6 @@ import Control.Applicative ((<$>), (<*>))
5import Data.List (foldl')
5import Data.List (foldl')
6import Text.Parsec hiding (newline,spaces)
6import Text.Parsec hiding (newline,spaces)
7import Text.Parsec.Indent
7import Text.Parsec.Indent
8−import qualified Text.Pandoc as Pan
9
8
10import Parse.Helpers
9import Parse.Helpers
11import qualified Parse.Pattern as Pattern
10import qualified Parse.Pattern as Pattern
@@ -56,8 +55,7 @@ listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
56
55
57 markdown' = do
56 markdown' = do
58 (rawText, exprs) <- markdown interpolation
57 (rawText, exprs) <- markdown interpolation
59− let md = Pan.readMarkdown Pan.def (filter (/='\r') rawText)
58+ return (Markdown (filter (/='\r') rawText) exprs)
60− return (Markdown md exprs)
61
59
62 span xs = "<span id=\"md" ++ show (length xs) ++
60 span xs = "<span id=\"md" ++ show (length xs) ++
63 "\" style=\"font-family:monospace;\">{{ ... }}</span>"
61 "\" style=\"font-family:monospace;\">{{ ... }}</span>"
compiler/SourceSyntax/Expression.hs+1−2
@@ -3,7 +3,6 @@ module SourceSyntax.Expression where
3
3
4import Data.Data
4import Data.Data
5import Data.List (intercalate)
5import Data.List (intercalate)
6−import qualified Text.Pandoc as Pandoc
7import SourceSyntax.PrettyPrint
6import SourceSyntax.PrettyPrint
8import Text.PrettyPrint as P
7import Text.PrettyPrint as P
9import qualified SourceSyntax.Helpers as Help
8import qualified SourceSyntax.Helpers as Help
@@ -30,7 +29,7 @@ data Expr t v
30 | Insert (LExpr t v) String (LExpr t v)
29 | Insert (LExpr t v) String (LExpr t v)
31 | Modify (LExpr t v) [(String, LExpr t v)]
30 | Modify (LExpr t v) [(String, LExpr t v)]
32 | Record [(String, LExpr t v)]
31 | Record [(String, LExpr t v)]
33− | Markdown Pandoc.Pandoc [LExpr t v]
32+ | Markdown String [LExpr t v]
34 deriving (Eq, Show, Data, Typeable)
33 deriving (Eq, Show, Data, Typeable)
35
34
36data Def tipe var
35data Def tipe var