]> gitweb @ CieloNegro.org - Rakka.git/commitdiff
Wrote many...
authorpho <pho@cielonegro.org>
Sat, 27 Oct 2007 08:31:10 +0000 (17:31 +0900)
committerpho <pho@cielonegro.org>
Sat, 27 Oct 2007 08:31:10 +0000 (17:31 +0900)
darcs-hash:20071027083110-62b54-57bbaae970cf67bf2a0472882a659673832808cc.gz

20 files changed:
Main.hs
Makefile
Rakka.cabal
Rakka/Environment.hs
Rakka/Storage.hs
Rakka/Storage/Impl.hs
Rakka/Storage/Types.hs
Rakka/Wiki.hs
Rakka/Wiki/Engine.hs
Rakka/Wiki/Formatter.hs
Rakka/Wiki/Interpreter/Base.hs
Rakka/Wiki/Interpreter/Image.hs
Rakka/Wiki/Interpreter/Outline.hs
Rakka/Wiki/Interpreter/PageList.hs [new file with mode: 0644]
Rakka/Wiki/Parser.hs
defaultPages/Help/Syntax
defaultPages/MainPage
defaultPages/SideBar/Right
defaultPages/StyleSheet/Default
tests/WikiParserTest.hs

diff --git a/Main.hs b/Main.hs
index 5ce9eb14a79605ae20db7549f39a37a7051d19a9..90a47efd726f7c0e75ae431f24644f2e493ec04a 100644 (file)
--- a/Main.hs
+++ b/Main.hs
@@ -8,6 +8,7 @@ import           Rakka.Environment
 import           Rakka.Resource.Index
 import           Rakka.Resource.Object
 import           Rakka.Resource.Render
+import           Rakka.Storage
 import           Subversion
 import           System.Console.GetOpt
 import           System.Directory
@@ -30,6 +31,7 @@ data CmdOpt
     | OptGroupName String
     | OptLogLevel  Priority
     | OptDisableStderrLog
+    | OptRebuildIndex
     | OptHelp
     deriving (Eq, Show)
 
@@ -76,6 +78,10 @@ options = [ Option ['p'] ["port"]
                    (NoArg OptDisableStderrLog)
                    ("Disable logging to stderr.")
 
+          , Option [] ["rebuild-index"]
+                   (NoArg OptRebuildIndex)
+                   ("Rebuild the index database.")
+
           , Option ['h'] ["help"]
                    (NoArg OptHelp)
                    "Print this message."
@@ -118,7 +124,9 @@ main = withSubversion $
           setupLogger opts
           env <- setupEnv lsdir portNum
 
-          noticeM logger ("Listening to " ++ show portNum ++ "/tcp...")
+          rebuildIndexIfRequested env opts
+
+          infoM logger ("Listening to " ++ show portNum ++ "/tcp...")
           runHttpd (envLucuConf env) (resTree env) [fallbackRender env]
 
           
@@ -202,3 +210,12 @@ createLocalStateDir :: FilePath -> UserID -> GroupID -> IO ()
 createLocalStateDir path uid gid
     = do createDirectoryIfMissing True path
          setOwnerAndGroup path uid gid
+
+
+rebuildIndexIfRequested :: Environment -> [CmdOpt] -> IO ()
+rebuildIndexIfRequested env opts
+    = do let rebuild = isJust $ find (\ x -> case x of
+                                               OptRebuildIndex -> True
+                                               _               -> False) opts
+         when rebuild
+                  $ rebuildIndex (envStorage env)
\ No newline at end of file
index 624dbea7084d527cd1d79eb2fe0ec6f7894ace28..a130eff0418635f3709df1ad69eef0ec620f3bb6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,9 @@ build: .setup-config Setup
 run: build
        $(EXECUTABLE)
 
+rebuild-index: build
+       $(EXECUTABLE) --rebuild-index
+
 .setup-config: $(CABAL_FILE) configure Setup Rakka.buildinfo.in
        BUILD_TEST_SUITE=yes ./Setup configure
 
index 2fe7ff5f3142730d1857d13880f46de59cec78c2..d536f4f22de50cf40dc290468ef89e698b86bc4d 100644 (file)
@@ -56,6 +56,7 @@ Other-Modules:
     Rakka.Wiki.Interpreter
     Rakka.Wiki.Interpreter.Base
     Rakka.Wiki.Interpreter.Image
+    Rakka.Wiki.Interpreter.PageList
     Rakka.Wiki.Interpreter.Trackback
     Rakka.Wiki.Interpreter.Outline
     Rakka.Wiki.Engine
index 1941939d175e7355d5a0e7bb491719cd28876c7c..321ba7ed07bac0a8ba53304ac1a798f8c84c1901 100644 (file)
@@ -14,6 +14,7 @@ import           Rakka.Wiki.Engine
 import           Rakka.Wiki.Interpreter
 import qualified Rakka.Wiki.Interpreter.Base      as Base
 import qualified Rakka.Wiki.Interpreter.Image     as Image
+import qualified Rakka.Wiki.Interpreter.PageList  as PageList
 import qualified Rakka.Wiki.Interpreter.Trackback as Trackback
 import qualified Rakka.Wiki.Interpreter.Outline   as Outline
 import           Subversion.Repository
@@ -68,6 +69,7 @@ mkInterpTable :: InterpTable
 mkInterpTable = listToTable $
                 foldl (++) [] [ Base.interpreters
                               , Image.interpreters
+                              , PageList.interpreters
                               , Trackback.interpreters
                               , Outline.interpreters
                               ]
index 56b42da0ae57f8668685f86d1cd9bca08ebe0f60..3a883d37ac664882440ac7039c795ca80c2048b2 100644 (file)
@@ -10,6 +10,8 @@ module Rakka.Storage
     , putPageA
 
     , searchPages
+
+    , rebuildIndex
     )
     where
 
@@ -65,6 +67,11 @@ searchPages sto cond
          atomically $ takeTMVar var
 
 
+rebuildIndex :: MonadIO m => Storage -> m ()
+rebuildIndex sto
+    = liftIO $ atomically $ writeTChan (stoIndexChan sto) RebuildIndex
+
+
 syncIndex :: Storage -> IO ()
 syncIndex sto
     = atomically $ writeTChan (stoIndexChan sto) SyncIndex
index dd8b7c4c504f8ad40195334b8dbd3caa7eec86bb..5db3f9257b0297e2d99d0e6c38677db7fdebd46f 100644 (file)
@@ -66,12 +66,22 @@ startIndexManager lsdir repos mkDraft
       loop chan index
           = do req <- atomically $ readTChan chan
                case req of
+                 RebuildIndex
+                     -> do noticeM logger "Rebuilding the H.E. index..."
+                           closeDatabase index
+                           removeDirectoryRecursive indexDir
+                           index' <- openIndex indexDir revFile
+                           syncIndex' index' revFile repos mkDraft
+                           loop chan index'
+
                  SyncIndex
-                     -> syncIndex' index revFile repos mkDraft
+                     -> do syncIndex' index revFile repos mkDraft
+                           loop chan index
+
                  SearchIndex cond var
                      -> do result <- searchIndex index cond
                            atomically $ putTMVar var result
-               loop chan index
+                           loop chan index
 
 
 -- casket を R/W モードで開く。成功したらそのまま返し、失敗したら
@@ -85,8 +95,8 @@ openIndex indexDir revFile
                      return index
 
            Left err
-               -> do warningM logger ("Failed to open an H.E. index on "
-                                      ++ indexDir ++ ": " ++ show err)
+               -> do noticeM logger ("Failed to open an H.E. index on "
+                                     ++ indexDir ++ ": " ++ show err)
 
                      indexExists <- doesDirectoryExist indexDir
                      when indexExists
@@ -112,7 +122,8 @@ syncIndex' index revFile repos mkDraft
          newRev <- getCurrentRevNum repos
          debugM logger ("The repository revision is currently " ++ show newRev)
 
-         when (newRev /= oldRev) (syncIndex'' oldRev newRev)
+         when (oldRev == 0 || newRev /= oldRev)
+              $ syncIndex'' oldRev newRev
          return newRev
     where
       syncIndex'' :: RevNum -> RevNum -> IO ()
index 8a1904171fa2817ee3a9cbdcee548cac6982586e..06870e65d82529bb722b45d7d415ba24800322b0 100644 (file)
@@ -19,5 +19,6 @@ data Storage
 
 
 data IndexReq
-    = SyncIndex
+    = RebuildIndex
+    | SyncIndex
     | SearchIndex !Condition !(TMVar [(PageName, RevNum)])
index 613869b2a9091b83f1b234aa2c20b85ca08caab3..719ed62cc646699ebb4069a2bc1c6b51506b3de0 100644 (file)
@@ -1,16 +1,18 @@
 module Rakka.Wiki
     ( WikiPage
+
+    , Element(..)
+    , Attribute
+
     , BlockElement(..)
     , InlineElement(..)
 
-    , ListElement(..)
+    , Definition(..)
+
     , ListType(..)
     , ListItem
 
-    , Definition(..)
-
     , CommandType(..)
-    , Attribute
     , BlockCommand(..)
     , InlineCommand(..)
     )
@@ -24,17 +26,29 @@ import           Rakka.Page
 type WikiPage = [BlockElement]
 
 
+data Element
+    = Block  !BlockElement
+    | Inline !InlineElement
+    deriving (Eq, Show, Typeable, Data)
+
+
+type Attribute = (String, String)
+
+
 data BlockElement
     = Heading {
         headingLevel :: !Int
       , headingText  :: !String
       }
     | HorizontalLine
-    | List !ListElement
+    | List {
+        listType  :: !ListType
+      , listItems :: ![ListItem]
+      }
     | DefinitionList ![Definition]
     | Preformatted ![InlineElement]
     | Paragraph ![InlineElement]
-    | Div ![Attribute] ![BlockElement]
+    | Div ![Attribute] ![Element]
     | EmptyBlock
     | BlockCmd !BlockCommand
     deriving (Eq, Show, Typeable, Data)
@@ -69,21 +83,13 @@ data InlineElement
     deriving (Eq, Show, Typeable, Data)
 
 
-data ListElement
-    = ListElement {
-        listType  :: !ListType
-      , listItems :: ![ListItem]
-      }
-    deriving (Eq, Show, Typeable, Data)
-
-
 data ListType
     = Bullet
     | Numbered
     deriving (Eq, Show, Typeable, Data)
 
 
-type ListItem = [Either ListElement InlineElement]
+type ListItem = [Element]
 
 
 data Definition
@@ -100,9 +106,6 @@ data CommandType
     deriving (Eq, Show)
 
 
-type Attribute = (String, String)
-
-
 data BlockCommand
     = BlockCommand {
         bCmdName       :: !String
index b646a52cc65471f998e224060aaaed68512cb29b..afbc610ab0f1497ec94f9b9b8991fb819049c7c2 100644 (file)
@@ -309,6 +309,9 @@ makeDraft interpTable page
          setAttribute doc "rakka:isBoring" $ Just $ yesOrNo $ pageIsBoring page
          setAttribute doc "rakka:isBinary" $ Just $ yesOrNo $ pageIsBinary page
          setAttribute doc "rakka:revision" $ Just $ show $ pageRevision page
+         setAttribute doc "rakka:summary"  $ pageSummary page
+
+         addHiddenText doc (pageName page)
 
          case pageType page of
             MIMEType "text" "css" _
@@ -374,4 +377,4 @@ everywhereM' f x = f x >>= gmapM (everywhereM' f)
 wikifyParseError :: ParseError -> WikiPage
 wikifyParseError err
     = [Div [("class", "error")]
-               [ Preformatted [Text (show err)] ]]
+               [ Block (Preformatted [Text (show err)]) ]]
index cc51feff644c86a6f3d714adb1bdb27955b098e7..3f0960604887663d1a479719339d0d8a480339bb 100644 (file)
@@ -24,6 +24,14 @@ formatWikiBlocks
           attachXHtmlNs -< tree
 
 
+formatElement :: (ArrowXml a, ArrowChoice a) => a (URI, Element) XmlTree
+formatElement 
+    = proc (baseURI, elem)
+    -> case elem of
+         Block  b -> formatBlock  -< (baseURI, b)
+         Inline i -> formatInline -< (baseURI, i)
+
+
 formatBlock :: (ArrowXml a, ArrowChoice a) => a (URI, BlockElement) XmlTree
 formatBlock 
     = proc (baseURI, block)
@@ -34,7 +42,7 @@ formatBlock
          HorizontalLine
              -> eelem "hr" -< ()
 
-         List list
+         list@(List _ _)
              -> formatListElement -< (baseURI, list)
 
          DefinitionList list
@@ -54,7 +62,7 @@ formatBlock
     where
       formatElem :: (ArrowXml a, ArrowChoice a) =>
                     String
-                 -> a (URI, [Attribute], [BlockElement]) XmlTree
+                 -> a (URI, [Attribute], [Element]) XmlTree
       formatElem name
           = proc (baseURI, attrs, contents)
           -> ( eelem name
@@ -64,7 +72,7 @@ formatBlock
                   )
                += ( (arr fst &&& arrL (snd . snd))
                     >>>
-                    formatBlock
+                    formatElement
                   )
              ) -< (baseURI, (attrs, contents))
 
@@ -77,7 +85,7 @@ formatHeading
        [ txt text        ] -<< ()
 
 
-formatListElement :: (ArrowXml a, ArrowChoice a) => a (URI, ListElement) XmlTree
+formatListElement :: (ArrowXml a, ArrowChoice a) => a (URI, BlockElement) XmlTree
 formatListElement 
     = proc (baseURI, list)
     -> let tag = case listType list of
@@ -97,16 +105,9 @@ formatListElement
             -> eelem "li"
                += ( (arr fst &&& arrL snd)
                     >>>
-                    formatListItem'
+                    formatElement
                   ) -< (baseURI, item)
 
-        formatListItem' :: (ArrowXml a, ArrowChoice a) => a (URI, Either ListElement InlineElement) XmlTree
-        formatListItem' 
-            = proc (baseURI, x)
-            -> case x of
-                 Left  nestedList -> formatListElement -< (baseURI, nestedList)
-                 Right inline     -> formatInline      -< (baseURI, inline    )
-
 
 formatDefinitionList :: (ArrowXml a, ArrowChoice a) => a (URI, [Definition]) XmlTree
 formatDefinitionList 
index d36b80df34c4250c31ca69e1314b1a704836bab7..80ecefc78dbcaebbe2a4a13a9377d412b3584aa6 100644 (file)
@@ -41,7 +41,8 @@ divInterp :: Interpreter
 divInterp = BlockCommandInterpreter {
               bciName      = "div"
             , bciInterpret
-                = \ _ (BlockCommand _ attrs contents) -> return $ Div attrs contents
+                = \ _ (BlockCommand _ attrs contents)
+                -> return $ Div attrs (map Block contents)
             }
 
 
@@ -66,7 +67,7 @@ otherLangsInterp
               Just linkTable
                   -> do Languages langTable <- getSysConf (ctxSysConf ctx)
                         let merged = mergeTables langTable (M.toList linkTable)
-                        return $ List $ mkLangList merged
+                        return $ mkLangList merged
       }
     where
       mergeTables :: Map LanguageTag LanguageName
@@ -78,9 +79,9 @@ otherLangsInterp
                              in
                                (langName, pageName) : mergeTables m xs
 
-      mkLangList :: [(LanguageName, PageName)] -> ListElement
-      mkLangList xs = ListElement Bullet (map mkLangLink xs)
+      mkLangList :: [(LanguageName, PageName)] -> BlockElement
+      mkLangList xs = List Bullet (map mkLangLink xs)
 
       mkLangLink :: (LanguageName, PageName) -> ListItem
       mkLangLink (langName, pageName)
-          = [Right (PageLink (Just pageName) Nothing (Just langName))]
\ No newline at end of file
+          = [Inline (PageLink (Just pageName) Nothing (Just langName))]
\ No newline at end of file
index 12ea6d662de735ee33a5b1203599b8dd6feb2c40..5482d8cffa5eb73cfde7852dea8bf8ce01fc8d57 100644 (file)
@@ -47,11 +47,9 @@ imageInterp
 
 -- <div class="imageFrame ...">
 --   <div class="imageData">
---     <p>
---       <a href="...">
---         <img src="..." />
---       </a>
---     </p>
+--     <a href="...">
+--       <img src="..." />
+--     </a>
 --   </div>
 --   <div class="imageCaption">
 --     ...
@@ -76,11 +74,11 @@ imgFrameInterp
                                    Just others  -> error ("unknown \"float\" attribute: " ++ others)
                
                return (Div [classAttr]
-                       [ Div [("class", "imageData")]
-                         [ Paragraph [ Anchor [hrefAttr]
-                                                  [ Image pageName Nothing ] ]
-                         ]
-                       , Div [("class", "imageCaption")] inside
+                       [ Block (Div [("class", "imageData")]
+                                        [ Inline (Anchor [hrefAttr]
+                                                  [ Image pageName Nothing ]) ])
+                       , Block (Div [("class", "imageCaption")]
+                                        [ Block x | x <- inside ])
                        ]
                       )
       }
index 04554a69b85b09dbe5a1f4a10974d162d871aa70..eb8c9d4db095b3b1d2e8e14edcabf9a65b7c8664 100644 (file)
@@ -18,12 +18,12 @@ outlineInterp = BlockCommandInterpreter {
                 , bciInterpret
                     = \ ctx _ ->
                       case ctxMainTree ctx of
-                        Just tree -> return $ Div [("class", "outline")] [List $ mkOutline tree]
+                        Just tree -> return $ Div [("class", "outline")] [Block $ mkOutline tree]
                         Nothing   -> return EmptyBlock
                 }
 
 
-mkOutline :: WikiPage -> ListElement
+mkOutline :: WikiPage -> BlockElement
 mkOutline tree
     = let headings = listify query tree
       in
@@ -36,11 +36,11 @@ query = mkQ False $ \ x -> case x of
                              _           -> False
 
 
-emptyOutline :: ListElement
-emptyOutline = ListElement Bullet []
+emptyOutline :: BlockElement
+emptyOutline = List Bullet []
 
                                    
-mkOutline' :: ListElement -> Int -> [BlockElement] -> (ListElement, [BlockElement])
+mkOutline' :: BlockElement -> Int -> [BlockElement] -> (BlockElement, [BlockElement])
 mkOutline' soFar _     []     = (soFar, [])
 mkOutline' soFar level (x:xs)
     = case x of
@@ -53,7 +53,7 @@ mkOutline' soFar level (x:xs)
                               , linkFragment = Just text
                               , linkText     = Just text
                               }
-                       item = [Right link]
+                       item = [Inline link]
                    in
                      mkOutline' (soFar { listItems = listItems soFar ++ [item] }) n xs
 
@@ -72,8 +72,8 @@ mkOutline' soFar level (x:xs)
 
                        lastItem' :: ListItem
                        lastItem' = case lastItem of
-                                     []   -> [Left nested]
-                                     i:[] -> i ++ [Left nested]
+                                     []   -> [Block nested]
+                                     i:[] -> i ++ [Block nested]
 
                        soFar' = soFar { listItems = nonLastItems ++ [lastItem'] }
                    in
diff --git a/Rakka/Wiki/Interpreter/PageList.hs b/Rakka/Wiki/Interpreter/PageList.hs
new file mode 100644 (file)
index 0000000..2a10372
--- /dev/null
@@ -0,0 +1,75 @@
+module Rakka.Wiki.Interpreter.PageList
+    ( interpreters
+    )
+    where
+
+import           Data.Maybe
+import           Network.HTTP.Lucu.RFC1123DateTime
+import           Rakka.Page
+import           Rakka.Storage
+import           Rakka.Wiki
+import           Rakka.Wiki.Interpreter
+import           Text.HyperEstraier
+
+
+interpreters :: [Interpreter]
+interpreters = [ recentUpdatesInterp ]
+
+
+-- <div class="recentUpdates">
+--   <ul>
+--     <li>
+--       <a href="...">...</a>
+--       <span class="date">...</span>
+--       <p> <!-- サマリが無ければ存在しない -->
+--         blah blah...
+--       </p>
+--     </li>
+--     ...
+--   </ul>
+-- </div>
+recentUpdatesInterp :: Interpreter
+recentUpdatesInterp 
+    = BlockCommandInterpreter {
+        bciName      = "recentUpdates"
+      , bciInterpret
+          = \ ctx (BlockCommand _ args _)
+          -> do let items = fromMaybe 10 $ fmap read $ lookup "items" args
+                    sto   = ctxStorage ctx
+                
+                cond <- newCondition
+                setPhrase   cond "[UVSET]"
+                addAttrCond cond "rakka:isBoring STREQ no"
+                addAttrCond cond "rakka:summary STRNE" -- summary が空でない
+                setOrder    cond "@mdate NUMD"
+                setMax      cond items
+
+                result <- searchPages sto cond
+                pages  <- mapM ( \ (name, rev)
+                                     -> getPage sto name (Just rev) >>= return . fromJust
+                               ) result
+
+                return $ mkPageList pages
+      }
+    where
+      mkPageList :: [Page] -> BlockElement
+      mkPageList pages
+          = Div [("class", "recentUpdates")]
+            [ Block (List Bullet (map mkListItem pages)) ]
+
+      mkListItem :: Page -> ListItem
+      mkListItem page
+          = [ Inline ( PageLink {
+                         linkPage     = Just (pageName page)
+                       , linkFragment = Nothing
+                       , linkText     = Nothing
+                       }
+                    )
+            , Inline ( Span [("class", "date")]
+                                [Text (formatRFC1123DateTime (pageLastMod page))]
+                     )
+            ]
+            ++
+            case pageSummary page of
+              Just s  -> [ Block (Paragraph [Text s]) ]
+              Nothing -> []
index 7e0c1a90b8517037a10db00011bf630cb9be5d72..6e4edeb4bc5c604aab1f6e97c0080471c1ebeff4 100644 (file)
@@ -73,16 +73,15 @@ horizontalLine = try ( do count 4 (char '-')
 
 
 listElement :: CommandTypeOf -> Parser BlockElement
-listElement cmdTypeOf = listElement' [] >>= return . List
+listElement cmdTypeOf = listElement' []
     where
-      listElement' :: [Char] -> Parser ListElement
+      listElement' :: [Char] -> Parser BlockElement
       listElement' stack
           = do t  <- oneOf "*#"
                ws
                xs <- items (stack ++ [t])
-               return (ListElement (toType t) xs)
+               return (List (toType t) xs)
 
-      -- ListItem の終了條件は、
       items :: [Char] -> Parser [ListItem]
       items stack = do xs     <- many1 $ inlineElement cmdTypeOf
                        nested <- option Nothing
@@ -91,7 +90,7 @@ listElement cmdTypeOf = listElement' [] >>= return . List
                                             string stack
                                             listElement' stack >>= return . Just
                        rest <- items stack
-                       return $ (map Right xs ++ map Left (catMaybes [nested])) : rest
+                       return $ (map Inline xs ++ map Block (catMaybes [nested])) : rest
                     <|>
                     (try $ do skipMany comment
                               newline
@@ -271,9 +270,9 @@ blockCmd cmdTypeOf
       undefinedCmdErr :: String -> BlockElement
       undefinedCmdErr name
           = Div [("class", "error")]
-            [ Paragraph [Text ("The command `" ++ name ++ "' is not defined. " ++
-                               "Make sure you haven't mistyped.")
-                        ]
+            [ Block (Paragraph [Text ("The command `" ++ name ++ "' is not defined. " ++
+                                      "Make sure you haven't mistyped.")
+                               ])
             ]
 
 
index d60a5a5ae9bd4141bc09be9f33e7612867ee33dd..1634607c1e6472d12bedeb629d2c7c42a32a5663 100644 (file)
@@ -1,8 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <page xmlns="http://cielonegro.org/schema/Rakka/Page/1.0"
       type="text/x-rakka"
-      isBoring="yes"
-      lang="en">
+      isBoring="no"
+      lang="en"><!-- FIXME: isBoring="yes" -->
+
+  <!-- FIXME: delete this -->
+  <summary>The description of syntax of Rakka</summary>
+
   <textData><![CDATA[= Syntax Help =
 
 == Heading ==
index cdfb7d6f720233ffc6552921603115e5402bc242..b6e177b6b2b8e2d0653ac436d53ebc7e6bc6112e 100644 (file)
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <page xmlns="http://cielonegro.org/schema/Rakka/Page/1.0"
       type="text/x-rakka"
-      isBoring="yes"
-      lang="en">
+      isBoring="no"
+      lang="en"><!-- FIXME: isBoring="yes" -->
 
   <otherLang>
     <link lang="ja" page="メインページ" />
   </otherLang>
 
+  <!-- FIXME: delete this -->
+  <summary>The main page to be shown as an index page.</summary>
+
   <textData><![CDATA[
 = Main Page =
 This  is  the    main  page.
index 27c4eb330a191cc8d6f63564943b17a70fb56017..afef42700ac59206f402a0a03a50c7ac26ed5642 100644 (file)
@@ -5,12 +5,11 @@
   <textData><![CDATA[
 = Control =
 
-= RSS feeds =
-
 = In other languages =
 <inOtherLanguages />
 
 = Recent updates =
+<recentUpdates items="20" />
 
 ]]></textData>
 </page>
index 15d58b2f373de4f0dde83fd93e23e198369a0d52..562e02b3a77e09535c6b523684c1df03dfa49d75 100644 (file)
     padding: 25px 30px;
 }
 
+.body p {
+    margin: 0 0 0.8em 0;
+}
+
+.sideBar p {
+    margin: 0.2em 0;
+}
+
 .body h1, .body h2, .body h3, .body h4, .body h5, .body h6 {
     margin: 5px 0px;
 }
 }
 
 .sideBar li + li {
-    margin-top: 0.1em;
+    margin-top: 0.3em;
 }
 
 .sideBar * + h1 {
@@ -153,10 +161,6 @@ body {
     line-height: 1.3;
 }
 
-p {
-    margin: 0 0 0.8em 0;
-}
-
 h1, h2, h3, h4, h5, h6 {
     font-weight: normal;
 }
@@ -228,8 +232,10 @@ a {
 .sideBar .date {
     font-size: 70%;
     white-space: nowrap;
+    color: #666666;
 }
 
+.sideBar .recentUpdates p,
 .sideBar .trackbacks p {
     font-size: 90%;
 }
@@ -252,10 +258,14 @@ a {
 }
 
 .sideBar li {
-    padding: 2px 5px;
+    padding: 3px 5px;
     background-color: #f5f5f5;
 }
 
+.sideBar .recentUpdates li, .sideBar .trackbacks li {
+    background-color: #e0e0e0;
+}
+
 /* float **********************************************************************/
 h1, h2, h3, h4, h5, h6 {
     clear: both;
index f6f642cd06651049f11bd175f6842e6ced75d370..56942c6ce1fb4d27969ca0cab580144c9c848bd8 100644 (file)
@@ -206,44 +206,44 @@ testData = [ (parseWiki ""
 
            , (parseWiki "* a"
               ~?=
-              (Right [ List (ListElement Bullet [[Right (Text "a")]]) ]))
+              (Right [ List Bullet [[Inline (Text "a")]] ]))
 
            , (parseWiki "* a*"
               ~?=
-              (Right [ List (ListElement Bullet [[Right (Text "a*")]]) ]))
+              (Right [ List Bullet [[Inline (Text "a*")]] ]))
 
            , (parseWiki "* a\n* b\n"
               ~?=
-              (Right [ List (ListElement Bullet [ [Right (Text "a")]
-                                                , [Right (Text "b")]
-                                                ])
+              (Right [ List Bullet [ [Inline (Text "a")]
+                                   , [Inline (Text "b")]
+                                   ]
                      ]))
 
            , (parseWiki "*a\n*#b\n*#c\n"
               ~?=
-              (Right [ List (ListElement Bullet [ [ Right (Text "a")
-                                                  , Left (ListElement Numbered [ [Right (Text "b")]
-                                                                               , [Right (Text "c")]
-                                                                               ])
-                                                  ]
-                                                ])
+              (Right [ List Bullet [ [ Inline (Text "a")
+                                     , Block  (List Numbered [ [Inline (Text "b")]
+                                                             , [Inline (Text "c")]
+                                                             ])
+                                     ]
+                                   ]
                      ]))
 
            , (parseWiki "*a\n#b"
               ~?=
-              (Right [ List (ListElement Bullet   [ [Right (Text "a")] ])
-                     , List (ListElement Numbered [ [Right (Text "b")] ])
+              (Right [ List Bullet   [ [Inline (Text "a")] ]
+                     , List Numbered [ [Inline (Text "b")] ]
                      ]))
 
            , (parseWiki "*a<!-- comment -->"
               ~?=
-              (Right [ List (ListElement Bullet [ [Right (Text "a")] ]) ]))
+              (Right [ List Bullet [ [Inline (Text "a")] ] ]))
 
            , (parseWiki "*a<!-- comment -->\n*b"
               ~?=
-              (Right [ List (ListElement Bullet [ [Right (Text "a")]
-                                                , [Right (Text "b")]
-                                                ])
+              (Right [ List Bullet [ [Inline (Text "a")]
+                                   , [Inline (Text "b")]
+                                   ]
                      ]))
 
            , (parseWiki "foo:bar"