[Fencommits] fenserve: a primitive exporter

Benja Fallenstein benja.fallenstein at gmail.com
Tue May 1 19:05:29 EEST 2007


Tue May  1 18:54:44 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * a primitive exporter
diff -rN -u old-fenserve/notetaker/Main.hs new-fenserve/notetaker/Main.hs
--- old-fenserve/notetaker/Main.hs	2007-05-01 19:05:29.000000000 +0300
+++ new-fenserve/notetaker/Main.hs	2007-05-01 19:05:29.000000000 +0300
@@ -64,8 +64,8 @@
     renderNote p (Note title False cs) = "<li>" ++ title ++ renderNotes p nick cs
     renderNote p (Note title True cs) =
          "<li>" ++ title ++ " (<a href='/item/"
-      ++ renderPath p ++ "?nick=" ++ nick ++ "'><i>"
-      ++ show (length cs) ++ " children</i></a>)"
+      ++ renderPath p ++ "?nick=" ++ nick ++ "'><i>" ++ c ++ "</i></a>)"
+      where l = length cs; c = if l==1 then "1 child" else show l++" children"
     
 readPath :: String -> Path
 readPath s = readPath' s 0 (\p _ -> p)
@@ -198,9 +198,37 @@
 bodyView (MakeOwnPage p) nick = page p nick
 bodyView (Unpage p) nick = page p nick
 
+export prefix = ("<pre>"++) . concatMap (\(Line _ _ body) -> f body) where
+    r = renderPath . (prefix ++)
+    f (Body s) = ""
+    f (Add p s) = ":add " ++ r p ++ " " ++ h s [] ++ "\n"
+    f (Edit p s) = ":edit " ++ r p ++ " " ++ h s [] ++ "\n"
+    f (Move p q) = ":move " ++ r p ++ " " ++ r q ++ "\n"
+    f (DeleteOne p) = ":del " ++ r p ++ "\n"
+    f (Delete p) = ":deltree " ++ r p ++ "\n"
+    f (MakeOwnPage p) = ":page " ++ r p ++ "\n"
+    f (Unpage p) = ":unpage " ++ r p ++ "\n"
+    
+    h ('<':'e':'m':'>':cs) ls = "*" ++ h cs ls
+    h ('<':'/':'e':'m':'>':cs) ls = "*" ++ h cs ls
+    h ('<':'b':'>':cs) ls = "*" ++ h cs ls
+    h ('<':'/':'b':'>':cs) ls = "*" ++ h cs ls
+    h ('<':'i':'>':cs) ls = "*" ++ h cs ls
+    h ('<':'/':'i':'>':cs) ls = "*" ++ h cs ls
+    h ('<':'a':' ':'h':'r':'e':'f':'=':sep:cs) ls = "[" ++ link sep "" cs ls
+    h ('<':'/':'a':'>':cs) ls = "]" ++ h cs ls
+    h (c:cs) ls = c : h cs ls
+    h "" (l:ls) = " | " ++ l ++ h "" ls
+    h "" [] = ""
+    
+    link sep l (c:'>':cs) ls | c == sep = h cs (ls++[l])
+    link sep l (c:cs) ls = link sep (l++[c]) cs ls
+    link sep l "" ls = h "" (ls++[l])    
+
 main = stdHTTP [ debugFilter
                , h ["log"] GET  $ ok $ \() nick -> renderLog nick False
                , h ["lastlog"] GET  $ ok $ \() nick -> renderLog nick True
+               , h (Prefix ["export"]) GET $ ok $ \[p] () -> get >>= respond . export (readPath p)
                , h [""]    GET  $ ok $ \() nick -> page [] nick
                , h ()      POST $ ok $ \() (nick,line) -> do
                      if line == ":ll" then




More information about the Fencommits mailing list