module Rakka.Page ( PageName , Page(..) , encodePageName ) where import Data.ByteString.Base (LazyByteString) import qualified Data.ByteString.Char8 as C8 import Data.Encoding import Data.Encoding.UTF8 import Network.HTTP.Lucu import Network.URI import Subversion.Types type PageName = String data Page = Redirect PageName | Page { pageName :: PageName , pageType :: MIMEType , pageIsTheme :: Bool -- text/css 以外では無意味 , pageIsFeed :: Bool -- text/x-rakka 以外では無意味 , pageIsLocked :: Bool , pageIsBoring :: Bool , pageRevision :: Maybe RevNum , pageSummary :: Maybe String , pageOtherLang :: [(String, PageName)] , pageContent :: LazyByteString } -- UTF-8 に encode してから 0x20 - 0x7E の範圍を除いて URI escape する。 encodePageName :: PageName -> FilePath encodePageName = escapeURIString shouldEscape . C8.unpack . encode UTF8 where shouldEscape :: Char -> Bool shouldEscape c | c >= ' ' && c <= '~' = False | otherwise = True