@@ 22,7 22,7 @@ import System.IO (hPrint, stderr) -- For error reporting
-- For suggestions.gmni
import Data.Trie.Text (Trie)
import qualified Data.Trie.Text as Trie
-import Data.List (nub)
+import Data.List (nub, intercalate)
import Control.Concurrent.MVar (readMVar)
import Control.Concurrent (forkIO)
@@ 41,7 41,7 @@ rmWs text = strip $ replace "\t" " " $ replace "\n" " " text
extractLinks :: Document -> [Link]
extractLinks (Document prologue root misc) =
extractMisc (prologueBefore prologue) ++ extractMisc (prologueAfter prologue) ++
- extractEl root ++ extractMisc misc
+ extractEl [] root ++ extractMisc misc
extractMisc :: [Miscellaneous] -> [Link]
extractMisc (MiscInstruction (Instruction target dat):misc)
@@ 49,33 49,38 @@ extractMisc (MiscInstruction (Instruction target dat):misc)
extractMisc (_:misc) = extractMisc misc
extractMisc [] = []
-extractEl el@(Element _ _ children) =
- extractElAttr el "{http://www.w3.org/1999/xlink}href" ++
+extractEl path el@(Element (Name "details" _ _) _ childs) =
+ [Link (nodesText summary' $ nodesText childs "") "+" nullURI {
+ uriFragment = '#':'.':intercalate "." (map show path)
+ } | NodeElement summary@(Element (Name "summary" _ _) _ summary') <- childs]
+extractEl path el@(Element _ _ children) =
extractElAttr el "href" ++
extractElAttr el "longdesc" ++
extractElAttr el "src" ++
- extractNodes children
+ extractNodes (0:path) children
extractElAttr (Element _ attrs children) attr
- | Just val <- attr `M.lookup` attrs,
+ | Just val <- attr `M.lookup` attrs',
Just uri <- parseURIReference $ unpack val = [Link label' title' uri]
| otherwise = []
where
- label' = nodesText children
- title' = fromMaybe "" $ M.lookup "title" attrs
+ label' = nodesText children $ M.findWithDefault "" "rel" attrs'
+ title' = fromMaybe "" $ M.lookup "title" attrs'
+ attrs' = M.mapKeys nameLocalName attrs
-extractNodes (NodeElement el:nodes) = extractEl el ++ extractNodes nodes
-extractNodes (NodeInstruction instruct:nodes) =
- extractMisc [MiscInstruction instruct] ++ extractNodes nodes
-extractNodes (_:nodes) = extractNodes nodes
-extractNodes [] = []
+extractNodes p@(n:path) (NodeElement el:nodes) = extractEl p el ++ extractNodes (succ n:path) nodes
+extractNodes path (NodeInstruction instruct:nodes) =
+ extractMisc [MiscInstruction instruct] ++ extractNodes path nodes
+extractNodes path (_:nodes) = extractNodes path nodes
+extractNodes _ [] = []
(+++) = append
-nodesText :: [Node] -> Text
-nodesText (NodeElement (Element _ attrs children):nodes) = nodesText children +++ nodesText nodes
-nodesText (NodeContent text:nodes) = text +++ nodesText nodes
-nodesText (_:nodes) = nodesText nodes
-nodesText [] = ""
+nodesText :: [Node] -> Text -> Text
+nodesText (NodeElement (Element _ attrs children):nodes) def =
+ nodesText children def +++ nodesText nodes def
+nodesText (NodeContent text:nodes) def = text +++ nodesText nodes def
+nodesText (_:nodes) def = nodesText nodes def
+nodesText [] def = def
linksFromPage :: Page -> [Link]
linksFromPage Page {