tagsoup-parsec 0.0.5 → 0.0.6
raw patch · 2 files changed
+31/−22 lines, 2 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Text.HTML.TagSoup.Parsec: tStParse :: TagParserSt st a -> st -> [Tag] -> a
+ Text.HTML.TagSoup.Parsec: type TagParserSt = GenParser Tag
- Text.HTML.TagSoup.Parsec: allCloseTags :: String -> TagParser [Tag]
+ Text.HTML.TagSoup.Parsec: allCloseTags :: String -> TagParserSt st [Tag]
- Text.HTML.TagSoup.Parsec: allOpenTags :: String -> TagParser [Tag]
+ Text.HTML.TagSoup.Parsec: allOpenTags :: String -> TagParserSt st [Tag]
- Text.HTML.TagSoup.Parsec: allWholeTags :: String -> TagParser [WholeTag]
+ Text.HTML.TagSoup.Parsec: allWholeTags :: String -> TagParserSt st [WholeTag]
- Text.HTML.TagSoup.Parsec: closeTag :: String -> TagParser Tag
+ Text.HTML.TagSoup.Parsec: closeTag :: String -> TagParserSt st Tag
- Text.HTML.TagSoup.Parsec: eitherCloseTag :: String -> TagParser (Either Tag Tag)
+ Text.HTML.TagSoup.Parsec: eitherCloseTag :: String -> TagParserSt st (Either Tag Tag)
- Text.HTML.TagSoup.Parsec: eitherOpenTag :: String -> TagParser (Either Tag Tag)
+ Text.HTML.TagSoup.Parsec: eitherOpenTag :: String -> TagParserSt st (Either Tag Tag)
- Text.HTML.TagSoup.Parsec: eitherWholeTag :: String -> TagParser (Either Tag WholeTag)
+ Text.HTML.TagSoup.Parsec: eitherWholeTag :: String -> TagParserSt st (Either Tag WholeTag)
- Text.HTML.TagSoup.Parsec: maybeCloseTag :: String -> TagParser (Maybe Tag)
+ Text.HTML.TagSoup.Parsec: maybeCloseTag :: String -> TagParserSt st (Maybe Tag)
- Text.HTML.TagSoup.Parsec: maybeOpenTag :: String -> TagParser (Maybe Tag)
+ Text.HTML.TagSoup.Parsec: maybeOpenTag :: String -> TagParserSt st (Maybe Tag)
- Text.HTML.TagSoup.Parsec: maybeWholeTag :: String -> TagParser (Maybe WholeTag)
+ Text.HTML.TagSoup.Parsec: maybeWholeTag :: String -> TagParserSt st (Maybe WholeTag)
- Text.HTML.TagSoup.Parsec: notCloseTag :: String -> TagParser Tag
+ Text.HTML.TagSoup.Parsec: notCloseTag :: String -> TagParserSt st Tag
- Text.HTML.TagSoup.Parsec: notOpenTag :: String -> TagParser Tag
+ Text.HTML.TagSoup.Parsec: notOpenTag :: String -> TagParserSt st Tag
- Text.HTML.TagSoup.Parsec: openTag :: String -> TagParser Tag
+ Text.HTML.TagSoup.Parsec: openTag :: String -> TagParserSt st Tag
- Text.HTML.TagSoup.Parsec: wholeTag :: String -> TagParser WholeTag
+ Text.HTML.TagSoup.Parsec: wholeTag :: String -> TagParserSt st WholeTag
Files
- Text/HTML/TagSoup/Parsec.hs +29/−20
- tagsoup-parsec.cabal +2/−2
Text/HTML/TagSoup/Parsec.hs view
@@ -1,8 +1,10 @@ module Text.HTML.TagSoup.Parsec ( module Text.HTML.TagSoup , TagParser+ , TagParserSt , WholeTag , tParse+ , tStParse , openTag , maybeOpenTag , eitherOpenTag@@ -38,15 +40,22 @@ type TagParser = GenParser Tag ( ) +-- | A stateful tag parser+-- This is a new type alias to allow backwards compatibility with old code.+type TagParserSt =+ GenParser Tag+ -- | Used to invoke parsing of Tags. tParse :: TagParser a -> [ Tag ] -> a tParse p ts =- case parse p "tagsoup" ts of- Left err ->- error $ show err- Right crap ->- crap+ either ( error . show ) id $ parse p "tagsoup" ts +-- | Simply run a stateful tag parser+tStParse :: TagParserSt st a -> st -> [ Tag ] -> a+tStParse p state tos =+ either ( error . show ) id $ runParser p state "tagsoup" tos+ + -- Tag eater is the basic tag matcher, it increments the line number for each tag parsed. tagEater matcher = tokenPrim show @@ -61,12 +70,12 @@ -- | openTag matches a TagOpen with the given name. It is not case sensitive.-openTag :: String -> TagParser Tag+openTag :: String -> TagParserSt st Tag openTag soughtName = openTagMatch soughtName ( Just ) $ \ _ -> Nothing -- | notOpenTag will match any tag which is not a TagOpen with the given name. It is not case sensitive.-notOpenTag :: String -> TagParser Tag+notOpenTag :: String -> TagParserSt st Tag notOpenTag avoidName = openTagMatch avoidName ( \ _ -> Nothing ) Just @@ -100,7 +109,7 @@ -- then all intervening tags, -- until it reaches a TagClose with the given name. -- It is not case sensitive.-wholeTag :: String -> TagParser WholeTag+wholeTag :: String -> TagParserSt st WholeTag wholeTag soughtName = do open <- openTag soughtName ts <- many $ notCloseTag soughtName@@ -108,55 +117,55 @@ return ( open , ts , close ) -- | closeTag matches a TagClose with the given name. It is not case sensitive.-closeTag :: String -> TagParser Tag+closeTag :: String -> TagParserSt st Tag closeTag soughtName = closeTagMatch soughtName ( Just ) $ \ _ -> Nothing -- | notCloseTag will match any tag which is not a TagClose with the given name. It is not case sensitive.-notCloseTag :: String -> TagParser Tag+notCloseTag :: String -> TagParserSt st Tag notCloseTag avoidName = closeTagMatch avoidName ( \ _ -> Nothing ) Just -- | maybeOpenTag will return `Just` the tag if it gets a TagOpen with he given name, -- It will return `Nothing` otherwise. -- It is not case sensitive.-maybeOpenTag :: String -> TagParser ( Maybe Tag )+maybeOpenTag :: String -> TagParserSt st ( Maybe Tag ) maybeOpenTag = maybeP . openTag -- | maybeCloseTag will return `Just` the tag if it gets a TagClose with he given name, -- It will return `Nothing` otherwise. -- It is not case sensitive.-maybeCloseTag :: String -> TagParser ( Maybe Tag )+maybeCloseTag :: String -> TagParserSt st ( Maybe Tag ) maybeCloseTag = maybeP . closeTag -- | maybeWholeTag will return `Just` the tag if it gets a WholeTag with he given name, -- It will return `Nothing` otherwise. -- It is not case sensitive.-maybeWholeTag :: String -> TagParser ( Maybe WholeTag )+maybeWholeTag :: String -> TagParserSt st ( Maybe WholeTag ) maybeWholeTag = maybeP . wholeTag -- | allOpenTags will return all TagOpen with the given name. -- It is not case sensitive.-allOpenTags :: String -> TagParser [ Tag ]+allOpenTags :: String -> TagParserSt st [ Tag ] allOpenTags = allP . maybeOpenTag -- | allCloseTags will return all TagClose with the given name. -- It is not case sensitive.-allCloseTags :: String -> TagParser [ Tag ]+allCloseTags :: String -> TagParserSt st [ Tag ] allCloseTags = allP . maybeCloseTag -- | allWholeTags will return all WholeTag with the given name. -- It is not case sensitive.-allWholeTags :: String -> TagParser [ WholeTag ]+allWholeTags :: String -> TagParserSt st [ WholeTag ] allWholeTags = allP . maybeWholeTag --- | eitherP takes a parser, and becomes its `Either` equivalent -- returning `Right` if it matches, and `Left` if it doesn't.+-- | eitherP takes a parser, and becomes its `Either` equivalent -- returning `Right` if it matches, and `Left` of anyToken if it doesn't. eitherP :: Show tok => GenParser tok st a -> GenParser tok st ( Either tok a ) eitherP p = do try ( do t <- p@@ -165,17 +174,17 @@ return $ Left t ) -- | either a Right TagOpen or a Left arbitary tag.-eitherOpenTag :: String -> TagParser ( Either Tag Tag )+eitherOpenTag :: String -> TagParserSt st ( Either Tag Tag ) eitherOpenTag = eitherP . openTag -- | either a Right TagClose or a Left arbitary tag.-eitherCloseTag :: String -> TagParser ( Either Tag Tag )+eitherCloseTag :: String -> TagParserSt st ( Either Tag Tag ) eitherCloseTag = eitherP . closeTag -- | either a Right WholeTag or a Left arbitary tag.-eitherWholeTag :: String -> TagParser ( Either Tag WholeTag )+eitherWholeTag :: String -> TagParserSt st ( Either Tag WholeTag ) eitherWholeTag = eitherP . wholeTag
tagsoup-parsec.cabal view
@@ -1,5 +1,5 @@ Name: tagsoup-parsec -Version: 0.0.5+Version: 0.0.6 License: BSD3 License-file: LICENSE Author: Johnny Morrice@@ -14,5 +14,5 @@ Cabal-version: >=1.2.0 Library- Build-Depends: base, tagsoup, parsec<3+ Build-Depends: base<5, tagsoup, parsec<3 Exposed-modules: Text.HTML.TagSoup.Parsec