X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FPage.hs;h=380d4a5d2a3967eb08c875916a165be0945223da;hb=605a843e408a7ef475fbb5a26f408271ab315cc8;hp=93c7465c2079ea448571e78d0a7c804134eda0d1;hpb=dcfffa578c5dd6647a5be7d2074488a520dfcf2d;p=Rakka.git diff --git a/Rakka/Page.hs b/Rakka/Page.hs index 93c7465..380d4a5 100644 --- a/Rakka/Page.hs +++ b/Rakka/Page.hs @@ -1,11 +1,15 @@ module Rakka.Page ( PageName , Page(..) + , LanguageTag + , LanguageName + , encodePageName , decodePageName , mkPageURI , mkPageFragmentURI , mkObjectURI + , mkAuxiliaryURI ) where @@ -13,6 +17,7 @@ import Data.ByteString.Base (LazyByteString) import qualified Data.ByteString.Char8 as C8 import Data.Encoding import Data.Encoding.UTF8 +import Data.Map (Map) import Network.HTTP.Lucu import Network.URI import Subversion.Types @@ -22,6 +27,9 @@ import System.Time type PageName = String +type LanguageTag = String -- See RFC 3066: http://www.ietf.org/rfc/rfc3066.txt +type LanguageName = String -- i.e. "日本語" + data Page = Redirection { @@ -33,6 +41,7 @@ data Page | Entity { pageName :: !PageName , pageType :: !MIMEType + , pageLanguage :: !(Maybe LanguageTag) , pageIsTheme :: !Bool -- text/css 以外では無意味 , pageIsFeed :: !Bool -- text/x-rakka 以外では無意味 , pageIsLocked :: !Bool @@ -41,7 +50,7 @@ data Page , pageRevision :: !(Maybe RevNum) , pageLastMod :: !CalendarTime , pageSummary :: !(Maybe String) - , pageOtherLang :: ![(String, PageName)] + , pageOtherLang :: !(Map LanguageTag PageName) , pageContent :: !LazyByteString } @@ -78,6 +87,11 @@ mkPageFragmentURI baseURI name fragment mkObjectURI :: URI -> PageName -> URI mkObjectURI baseURI name + = mkAuxiliaryURI baseURI ["object"] name + + +mkAuxiliaryURI :: URI -> [String] -> PageName -> URI +mkAuxiliaryURI baseURI basePath name = baseURI { - uriPath = foldl combine "/" [uriPath baseURI, "object", encodePageName name] + uriPath = foldl combine "/" ([uriPath baseURI] ++ basePath ++ [encodePageName name]) }