module Text.HTML.WraXML.Table where

-- import qualified Text.HTML.WraXML.Tree as HtmlTree
import qualified Text.XML.WraXML.Tree    as XmlTree
import qualified Text.XML.WraXML.Element as Elem

import qualified Text.XML.Basic.Name as Name

import           Data.Maybe(mapMaybe)


type T i name str = [[[XmlTree.T i name str]]]

{- |
Ignores all non-table-row-tags and all non-table-cell-tags.
-}
simpleFromRows ::
   (Name.Tag name) =>
   [XmlTree.T i name str] ->  T i name str
simpleFromRows :: forall name i str. Tag name => [T i name str] -> T i name str
simpleFromRows =
   forall a b. (a -> b) -> [a] -> [b]
map (forall name i str. Tag name => [T i name str] -> [[T i name str]]
simpleFromRow forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   forall a. (a -> Bool) -> [a] -> [a]
filter (forall name str. (Name name -> Bool) -> T name str -> Bool
Elem.checkName (forall name. C name => String -> name -> Bool
Name.match String
"tr") forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> a
fst) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe forall i name str.
T i name str -> Maybe (T name str, [T i name str])
XmlTree.maybeTag

simpleFromRow ::
   (Name.Tag name) =>
   [XmlTree.T i name str] ->  [[XmlTree.T i name str]]
simpleFromRow :: forall name i str. Tag name => [T i name str] -> [[T i name str]]
simpleFromRow =
   forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   forall a. (a -> Bool) -> [a] -> [a]
filter (forall name str. (Name name -> Bool) -> T name str -> Bool
Elem.checkName (forall name. C name => [String] -> name -> Bool
Name.matchAny [String
"th",String
"td"]) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> a
fst) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
   forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe forall i name str.
T i name str -> Maybe (T name str, [T i name str])
XmlTree.maybeTag


{-
data CellType = Heading | Cell

fromRows :: [XmlTree.T i name str] ->  [[(CellType, [XmlTree.T i name str])]]
fromRows =
   map fromRow .
   filter (XmlTree.checkTagName ("tr"==) . fst) .
   mapMaybe XmlTree.maybeTag

fromRow :: [XmlTree.T i name str] ->  [(CellType, [XmlTree.T i name str])]
fromRow =
   mapMaybe (\tag ->
      if XmlTree.checkTagName ("td"==) tag
        then Just) .
   mapMaybe XmlTree.maybeTag
-}