| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
Text.Seonbi.Html.Clipper
Synopsis
- clipPrefixText :: Text -> [HtmlEntity] -> Maybe [HtmlEntity]
- clipSuffixText :: Text -> [HtmlEntity] -> Maybe [HtmlEntity]
- clipText :: Text -> Text -> [HtmlEntity] -> Maybe [HtmlEntity]
Documentation
clipPrefixText :: Text -> [HtmlEntity] -> Maybe [HtmlEntity] Source #
Clip the given prefix text from the HTML fragments.  If its first
 text element does not have the same prefix, or the first element is not
 an HtmlText node, or the list of HTML fragments have nothing at all,
 it returns Nothing.
>>>:set -XOverloadedLists>>>:set -XOverloadedStrings>>>clipPrefixText "foo" [HtmlText [] "bar", HtmlStartTag [] P ""]Nothing>>>clipPrefixText "foo" [HtmlStartTag [] P "", HtmlText [] "foo"]Nothing>>>clipPrefixText "foo" []Nothing
If the first element is an HtmlText node, and its rawText contains
 the common prefix text, it returns a Just value holding a list of
 HTML fragments with the common prefix removed.
>>>clipPrefixText "foo" [HtmlText [] "foobar", HtmlStartTag [] P ""]Just [HtmlText {... "bar"},HtmlStartTag {...}]>>>clipPrefixText "foo" [HtmlText [] "foo", HtmlStartTag [] P ""]Just [HtmlStartTag {..., tag = P, ...}]
A given text is treated as a raw text, which means even if some HTML entities refer to the same characters it may fails to match unless they share the exactly same representation, e.g.:
>>>clipPrefixText "&" [HtmlText [] "&"]Nothing
In the same manner, it doesn't find a prefix from HtmlCdata, e.g.:
>>>clipPrefixText "foo" [HtmlCdata [] "foo", HtmlStartTag [] P ""]Nothing
In order to remove a prefix from both HtmlText and HtmlCdata,
 apply normalizeText first so that all HtmlCdata entities are transformed
 to equivalent HtmlText entities:
>>>import Text.Seonbi.Html.TextNormalizer (normalizeText)>>>let normalized = normalizeText [HtmlCdata [] "foo", HtmlStartTag [] P ""]>>>clipPrefixText "foo" normalizedJust [HtmlStartTag {..., tag = P, ...}]
Plus, it works even if HTML fragments contain some HtmlComment entities,
 but these are not touched at all, e.g.:
>>>clipPrefixText "bar" [HtmlComment [] "foo", HtmlText [] "barbaz"]Just [HtmlComment {... "foo"},HtmlText {... "baz"}]
clipSuffixText :: Text -> [HtmlEntity] -> Maybe [HtmlEntity] Source #
Clip the given suffix text from the HTML fragments, in the same manner
 to clipPrefixText.
clipText :: Text -> Text -> [HtmlEntity] -> Maybe [HtmlEntity] Source #
Clip the given prefix text and suffix text from the HTML fragments.
 It simply is composed of clipPrefixText and clipSuffixText functions.
 It returns Nothing if any of a prefix and a suffix does not match.