on 44b2e45 help sign in
elk/src/ExtractNoscript.hs
26 lines 799 B history raw
2module ExtractNoscript (extract) where
4import Ast
6extract = concatMap (\s -> "<p>" ++ s ++ "</p>") . extract'
8extract' expr =
9 let f = extract' in
10 case expr of
11 Str s -> [s]
12 Binop op e1 e2 -> case (op, f e1, f e2) of
13 ("++", [s1], [s2]) -> [s1 ++ s2]
14 (_ , ss1 , ss2 ) -> ss1 ++ ss2
15 Lambda v e -> f e
16 App (App (Var "link") src) txt ->
17 case (f src, f txt) of
18 ([s1],[s2]) -> [ "<a href=\"" ++ s1 ++ "\">" ++ s2 ++ "</a>" ]
19 ( ss1, ss2) -> ss1 ++ ss2
20 App e1 e2 -> f e1 ++ f e2
21 If eb et ef -> f et ++ f ef
22 Let defs e -> concatMap (f . snd) defs ++ f e
23 Var _ -> []
24 Case e cases -> concatMap (f . snd) cases
25 Data _ es -> concatMap f es
26 _ -> []