1module ExtractNoscript (extractNoscript) where
5import qualified Text.Pandoc as Pan
7extractNoscript :: Module -> String
8extractNoscript modul = concat (extract modul)
11 extract :: a -> [String]
13instance Extract Module where
14 extract (Module _ _ _ stmts) =
15 map (\s -> "<p>" ++ s ++ "</p>") (concatMap extract stmts)
17instance Extract Statement where
18 extract (Definition d) = extract d
21instance Extract Def where
22 extract (FnDef _ _ e) = extract e
23 extract (OpDef _ _ _ e) = extract e
26instance Extract e => Extract (Located e) where
27 extract (L _ _ e) = extract e
29instance Extract Expr where
34 Binop op e1 e2 -> case (op, f e1, f e2) of
35 ("++", [s1], [s2]) -> [s1 ++ s2]
36 (_ , ss1 , ss2 ) -> ss1 ++ ss2
38 App (L _ _ (App (L _ _ (Var "link")) src)) txt -> linkExtract src txt
39 App (L _ _ (App (L _ _ (Var "Text.link")) src)) txt -> linkExtract src txt
40 App (L _ _ (Var "header")) e -> tag "h1" e
41 App (L _ _ (Var "bold")) e -> tag "b" e
42 App (L _ _ (Var "italic")) e -> tag "i" e
43 App (L _ _ (Var "monospace")) e -> tag "code" e
44 App e1 e2 -> f e1 ++ f e2
45 Let defs e -> concatMap extract defs ++ f e
47 Case e cases -> concatMap (f . snd) cases
48 Data _ es -> concatMap f es
49 MultiIf es -> concatMap (f . snd) es
50 Markdown doc -> [ Pan.writeHtmlString Pan.def doc ]
54 case (extract src, extract txt) of
55 ([s1],[s2]) -> [ "<a href=\"" ++ s1 ++ "\">" ++ s2 ++ "</a>" ]
56 ( ss1, ss2) -> ss1 ++ ss2
59tag t e = map (\s -> concat [ "<", t, ">", s, "</", t, ">" ]) (extract e)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list