zqY      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX Lookup an entity, using  if it starts with  # and  otherwise %Lookup a numeric entity, the leading '#'! must have already been removed. & lookupNumericEntity "65" == Just 'A' ' lookupNumericEntity "x41" == Just 'A' ( lookupNumericEntity "x4E" === Just 'N' ( lookupNumericEntity "x4e" === Just 'N' * lookupNumericEntity "Haskell" == Nothing # lookupNumericEntity "" == Nothing 4 lookupNumericEntity "89439085908539082" == Nothing Lookup a named entity, using  % lookupNamedEntity "amp" == Just '&' ( lookupNamedEntity "haskell" == Nothing 1Escape a character before writing it out to XML.  escapeXMLChar 'a' == Nothing ! escapeXMLChar '&' == Just "amp" 1A table mapping XML entity names to code points.  Does not include apos. as Internet Explorer does not know about it. 1A table mapping HTML entity names to code points  LA class to generalise TagSoup parsing over many types of string-like types. + Examples are given for the String type.   empty = ""   cons = (:)   uncons [] = Nothing  uncons (x:xs) = Just (x, xs)   toString = id   fromString = id   fromChar = return   strConcat = concat   strNull = null   append = (++) +Convert a String from one type to another.        DA single HTML element. A whole document is represented by a list of Tag.  There is no requirement for  and  to match. 'Meta: The position of a parsed element 'Meta: A syntax error in the input file  A comment 3A text node, guaranteed not to be the empty string A closing tag An open tag with s in their original order YZ(The column of a position, starting at 1 The row/"line of a position, starting at 1 An HTML attribute id="name" generates ("id","name") [\]^ Test if a  is a   Test if a  is a   Test if a  is a  Extract the string from within  , otherwise _ Extract the string from within , crashes if not a  HExtract all text content from tags (similar to Verbatim found in HaXml) ! Test if a  is a  "Extract the string from within  , otherwise _ # Test if a  is a  $'Extract an attribute, crashes if not a .  Returns "" if no attribute present. %Returns True if the  is  and matches the given name &Returns True if the  is  and matches the given name YZ[\]^ !"#$%&YZZ[\]^ !"#$%&'match an opening tag (match an closing tag ) match a text *+match a opening tag's name literally ,match a closing tag's name literally -.8Match a tag with given name, that contains an attribute -with given name, that satisfies a predicate. 'If an attribute occurs multiple times, all occurrences are checked. / Check if the 'Tag str' is  and matches the given name 0 Check if the 'Tag str' is  and matches the given name 1234567'()*+,-./01234567'()*+,-./01234567'()*+,-./0123456789:;@Convert a list of tags into a tree. This version is not lazy at % all, that is saved for version 2. <=(This operation is based on the Uniplate universe function. Given a H list of trees, it returns those trees, and all the children trees at  any level. For example:   universeTree S [TagBranch "a" [("href","url")] [TagBranch "b" [] [TagLeaf (TagText "text")]]] S == [TagBranch "a" [("href","url")] [TagBranch "b" [] [TagLeaf (TagText "text")]]] 2 ,TagBranch "b" [] [TagLeaf (TagText "text")]] BThis operation is particularly useful for queries. To collect all "a"  tags in a tree, simply do: 0 [x | x@(TagTree "a" _ _) <- universeTree tree] >(This operation is based on the Uniplate  transform function. Given a G list of trees, it applies the function to every tree in a bottom-up J manner. This operation is useful for manipulating a tree - for example % to make all tag names upper case:  upperCase = transformTree f S where f (TagBranch name atts inner) = [TagBranch (map toUpper name) atts inner]  f x = x 89:;<=>8:9;<>=8:99:;<=> ?These options control how  parseTags works. @AShould > values be given before some items (default=False,fast=False) BShould , values be given (default=False,fast=False) C+How to lookup an entity (Bool = has ending ';') D;How to lookup an entity in an attribute (Bool = has ending ';'?) ERequire no adjacent " values (default=True,fast=False) F.The default parse options value, described in @?. GA @?< structure optimised for speed, following the fast options. `'Change the underlying string type of a @? value. ?@ABCDEFG` ?@ABCDE@ABCDEFG`abcdefghijklmnopqrstuvwxyz{|}~6abcdefghijklmnopqrstuvwxyz{|}~abbcdefghijdefghijkzyxwvutsrqponmllmnopqrstuvwxyz{|}~    HThese options control how N works. %The strange quirk of only minimizing <br>+ tags is due to Internet Explorer treating  <br></br> as <br><br>. IJ=Escape a piece of text (default = escape the four characters &"<>) K Minimise <b></b> -> <b/> (default = minimise only <br> tags) LReplace the four characters &"<>) with their HTML entities (the list from ). M/The default render options value, described in IH. NYShow a list of tags, as they might have been parsed, using the default settings given in  IH. \ renderTags [TagOpen "hello" [],TagText "my&",TagClose "world"] == "<hello>my&amp;</world>" O3Show a list of tags using settings supplied by the IH parameter, 6 eg. to avoid escaping any characters one could do: J renderTagsOptions renderOptions{optEscape = id} [TagText "my&"] == "my&" HIJKLMNOHIJKIJKLMNO PDParse a string to a list of tags, using an HTML 5 compliant parser. [ parseTags "<hello>my&amp;</world>" == [TagOpen "hello" [],TagText "my&",TagClose "world"] QAParse a string to a list of tags, using settings supplied by the @? parameter, ' eg. to output position information: R parseTagsOptions parseOptions{optTagPosition = True} "<hello>my&amp;</world>" == i [TagPosition 1 1,TagOpen "hello" [],TagPosition 1 8,TagText "my&",TagPosition 1 15,TagClose "world"] ?@ABCDEFGPQPQRDefine a class to allow String' s or Tag str's to be used as matches ST5Turns all tag names and attributes to lower case and # converts DOCTYPE to upper case. UHPerforms an inexact match, the first item should be the thing to match. M If the second item is a blank string, that is considered to match anything.  For example:  - (TagText "test" ~== TagText "" ) == True - (TagText "test" ~== TagText "test") == True . (TagText "test" ~== TagText "soup") == False For . missing attributes on the right are allowed. V Negation of U W;This function takes a list, and returns all suffixes whose % first item matches the predicate. XThis function is similar to W, but splits the list 0 so no element appears in any two partitions. 0 !"#$%&?@ABCDEFGHIJKLMNOPQRSTUVWX0PQ?@ABCDEFGNOLHIJKMT!#%&$" WXRSUVRSSTUVWX !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMMNOPQRST U U V W X Y Z [ \ ]^_`abcdeefghijklmnoppqrstuvwxyz{|}~      ] tagsoup-0.12Text.HTML.TagSoup.EntityText.StringLikeText.HTML.TagSoupText.HTML.TagSoup.MatchText.HTML.TagSoup.TreeText.HTML.TagSoup.TypeText.HTML.TagSoup.Options Text.HTML.TagSoup.ImplementationText.HTML.TagSoup.SpecificationText.HTML.TagSoup.ManualText.HTML.TagSoup.GeneratedText.HTML.TagSoup.RenderText.HTML.TagSoup.Parser lookupEntitylookupNumericEntitylookupNamedEntity escapeXMLChar xmlEntities htmlEntities StringLikeemptyconsunconstoString fromStringfromChar strConcatstrNullappend castStringTag TagPosition TagWarning TagCommentTagTextTagCloseTagOpenColumnRow Attribute isTagOpen isTagClose isTagText maybeTagText fromTagText innerText isTagWarningmaybeTagWarning isTagPosition fromAttrib isTagOpenNameisTagCloseNametagOpentagClosetagText tagComment tagOpenLit tagCloseLittagOpenAttrLittagOpenAttrNameLittagOpenNameLittagCloseNameLitanyAttr anyAttrName anyAttrValue anyAttrLitanyAttrNameLitanyAttrValueLit getTagContentTagTreeTagLeaf TagBranchtagTree flattenTree universeTree transformTree ParseOptionsoptTagPosition optTagWarning optEntityDataoptEntityAttriboptTagTextMerge parseOptionsparseOptionsFast RenderOptions optEscape optMinimize escapeHTML renderOptions renderTagsrenderTagsOptions parseTagsparseTagsOptionsTagReptoTagRepcanonicalizeTags~==~/=sections partitionsPosition nullPositionpositionString positionChar tagPositionbase Data.MaybeNothingfmapParseOptionsOutable&SstlhdeofnextposOutPosWarn EntityEnd EntityHex EntityNum EntityName CommentEndComment TagEndCloseTagEndAttValAttNameTagShutCharexpandstateoutput tagTextMergeerrSeenerrWantampCharampOut entityChrisEofisCharisTag isTagShut isAttNameisAttValisTagEnd isTagEndClose isComment isCommentEnd isEntityNameisEntityNumHex isEntityNum isEntityHex isEntityEndisWarnfromChrfromWarn getEntityEndParserTypeTagTypeDeclTypeXml TypeNormalparsedatcharRefAttValuecharRef