]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Page.hs
I'm getting tired so I must have a rest.
[Rakka.git] / Rakka / Page.hs
index 607a0a81b9035b76104b4d87fd677eb190da0266..2e3ea45cae6250310d6d88191e2c4e4208b957d8 100644 (file)
@@ -2,6 +2,8 @@ module Rakka.Page
     ( PageName
     , Page(..)
     , encodePageName
+    , decodePageName
+    , mkPageURI
     )
     where
 
@@ -12,14 +14,20 @@ import           Data.Encoding.UTF8
 import           Network.HTTP.Lucu
 import           Network.URI
 import           Subversion.Types
+import           System.Time
 
 
 type PageName = String
 
 
 data Page
-    = Redirect PageName
-    | Page {
+    = Redirection {
+        redirName     :: PageName
+      , redirDest     :: PageName
+      , redirRevision :: Maybe RevNum
+      , redirLastMod  :: CalendarTime
+      }
+    | Entity {
         pageName      :: PageName
       , pageType      :: MIMEType
       , pageIsTheme   :: Bool     -- text/css 以外では無意味
@@ -27,6 +35,7 @@ data Page
       , pageIsLocked  :: Bool
       , pageIsBoring  :: Bool
       , pageRevision  :: Maybe RevNum
+      , pageLastMod   :: CalendarTime
       , pageSummary   :: Maybe String
       , pageOtherLang :: [(String, PageName)]
       , pageContent   :: LazyByteString
@@ -41,3 +50,18 @@ encodePageName = escapeURIString shouldEscape . C8.unpack . encode UTF8
       shouldEscape c
           | c >= ' ' && c <= '~' = False
           | otherwise            = True
+
+
+-- URI unescape して UTF-8 から decode する。
+decodePageName :: FilePath -> PageName
+decodePageName = decode UTF8 . C8.pack . unEscapeString
+
+
+mkPageURI :: URI -> PageName -> URI
+mkPageURI baseURI name
+    | uriPath baseURI == ""         = baseURI { uriPath = "/" ++ encoded }
+    | uriPath baseURI == "/"        = baseURI { uriPath = "/" ++ encoded }
+    | last (uriPath baseURI) == '/' = baseURI { uriPath = uriPath baseURI ++ encoded }
+    | otherwise                     = baseURI { uriPath = uriPath baseURI ++ "/" ++ encoded }
+    where
+      encoded = encodePageName name