packages feed

tagsoup 0.13.9 → 0.13.10

raw patch · 5 files changed

+245/−142 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

CHANGES.txt view
@@ -1,5 +1,8 @@ Changelog for TagSoup +0.13.10+    #51, improve the Haddock documentation+    #52, fix some > 16bit HTML entities 0.13.9     #50, fix a space leak     #36, fix the demo examples
Text/HTML/TagSoup.hs view
@@ -21,7 +21,8 @@     module Text.HTML.TagSoup.Render,     canonicalizeTags, -    -- * Tag identification+    -- Note: the "#tag-identification#" creates an anchor that's linked to from Match.hs+    -- * #tag-identification# Tag identification     isTagOpen, isTagClose, isTagText, isTagWarning, isTagPosition,     isTagOpenName, isTagCloseName, isTagComment, 
Text/HTML/TagSoup/Entity.hs view
@@ -108,8 +108,8 @@     ,"AElig;" * "\x00C6"     ,"aelig;" * "\x00E6"     ,"af;" * "\x2061"-    ,"Afr;" * "\xD835\xDD04"-    ,"afr;" * "\xD835\xDD1E"+    ,"Afr;" * "\x1D504"+    ,"afr;" * "\x1D51E"     ,"Agrave" * "\x00C0"     ,"agrave" * "\x00E0"     ,"Agrave;" * "\x00C0"@@ -151,8 +151,8 @@     ,"angzarr;" * "\x237C"     ,"Aogon;" * "\x0104"     ,"aogon;" * "\x0105"-    ,"Aopf;" * "\xD835\xDD38"-    ,"aopf;" * "\xD835\xDD52"+    ,"Aopf;" * "\x1D538"+    ,"aopf;" * "\x1D552"     ,"ap;" * "\x2248"     ,"apacir;" * "\x2A6F"     ,"ape;" * "\x224A"@@ -166,8 +166,8 @@     ,"aring" * "\x00E5"     ,"Aring;" * "\x00C5"     ,"aring;" * "\x00E5"-    ,"Ascr;" * "\xD835\xDC9C"-    ,"ascr;" * "\xD835\xDCB6"+    ,"Ascr;" * "\x1D49C"+    ,"ascr;" * "\x1D4B6"     ,"Assign;" * "\x2254"     ,"ast;" * "\x002A"     ,"asymp;" * "\x2248"@@ -210,8 +210,8 @@     ,"beta;" * "\x03B2"     ,"beth;" * "\x2136"     ,"between;" * "\x226C"-    ,"Bfr;" * "\xD835\xDD05"-    ,"bfr;" * "\xD835\xDD1F"+    ,"Bfr;" * "\x1D505"+    ,"bfr;" * "\x1D51F"     ,"bigcap;" * "\x22C2"     ,"bigcirc;" * "\x25EF"     ,"bigcup;" * "\x22C3"@@ -241,8 +241,8 @@     ,"bnequiv;" * "\x2261\x20E5"     ,"bnot;" * "\x2310"     ,"bNot;" * "\x2AED"-    ,"Bopf;" * "\xD835\xDD39"-    ,"bopf;" * "\xD835\xDD53"+    ,"Bopf;" * "\x1D539"+    ,"bopf;" * "\x1D553"     ,"bot;" * "\x22A5"     ,"bottom;" * "\x22A5"     ,"bowtie;" * "\x22C8"@@ -296,7 +296,7 @@     ,"brvbar" * "\x00A6"     ,"brvbar;" * "\x00A6"     ,"Bscr;" * "\x212C"-    ,"bscr;" * "\xD835\xDCB7"+    ,"bscr;" * "\x1D4B7"     ,"bsemi;" * "\x204F"     ,"bsim;" * "\x223D"     ,"bsime;" * "\x22CD"@@ -347,7 +347,7 @@     ,"CenterDot;" * "\x00B7"     ,"centerdot;" * "\x00B7"     ,"Cfr;" * "\x212D"-    ,"cfr;" * "\xD835\xDD20"+    ,"cfr;" * "\x1D520"     ,"CHcy;" * "\x0427"     ,"chcy;" * "\x0447"     ,"check;" * "\x2713"@@ -396,7 +396,7 @@     ,"Conint;" * "\x222F"     ,"ContourIntegral;" * "\x222E"     ,"Copf;" * "\x2102"-    ,"copf;" * "\xD835\xDD54"+    ,"copf;" * "\x1D554"     ,"coprod;" * "\x2210"     ,"Coproduct;" * "\x2210"     ,"COPY" * "\x00A9"@@ -408,8 +408,8 @@     ,"crarr;" * "\x21B5"     ,"cross;" * "\x2717"     ,"Cross;" * "\x2A2F"-    ,"Cscr;" * "\xD835\xDC9E"-    ,"cscr;" * "\xD835\xDCB8"+    ,"Cscr;" * "\x1D49E"+    ,"cscr;" * "\x1D4B8"     ,"csub;" * "\x2ACF"     ,"csube;" * "\x2AD1"     ,"csup;" * "\x2AD0"@@ -473,8 +473,8 @@     ,"delta;" * "\x03B4"     ,"demptyv;" * "\x29B1"     ,"dfisht;" * "\x297F"-    ,"Dfr;" * "\xD835\xDD07"-    ,"dfr;" * "\xD835\xDD21"+    ,"Dfr;" * "\x1D507"+    ,"dfr;" * "\x1D521"     ,"dHar;" * "\x2965"     ,"dharl;" * "\x21C3"     ,"dharr;" * "\x21C2"@@ -502,8 +502,8 @@     ,"dlcorn;" * "\x231E"     ,"dlcrop;" * "\x230D"     ,"dollar;" * "\x0024"-    ,"Dopf;" * "\xD835\xDD3B"-    ,"dopf;" * "\xD835\xDD55"+    ,"Dopf;" * "\x1D53B"+    ,"dopf;" * "\x1D555"     ,"Dot;" * "\x00A8"     ,"dot;" * "\x02D9"     ,"DotDot;" * "\x20DC"@@ -549,8 +549,8 @@     ,"drbkarow;" * "\x2910"     ,"drcorn;" * "\x231F"     ,"drcrop;" * "\x230C"-    ,"Dscr;" * "\xD835\xDC9F"-    ,"dscr;" * "\xD835\xDCB9"+    ,"Dscr;" * "\x1D49F"+    ,"dscr;" * "\x1D4B9"     ,"DScy;" * "\x0405"     ,"dscy;" * "\x0455"     ,"dsol;" * "\x29F6"@@ -586,8 +586,8 @@     ,"eDot;" * "\x2251"     ,"ee;" * "\x2147"     ,"efDot;" * "\x2252"-    ,"Efr;" * "\xD835\xDD08"-    ,"efr;" * "\xD835\xDD22"+    ,"Efr;" * "\x1D508"+    ,"efr;" * "\x1D522"     ,"eg;" * "\x2A9A"     ,"Egrave" * "\x00C8"     ,"egrave" * "\x00E8"@@ -616,8 +616,8 @@     ,"ensp;" * "\x2002"     ,"Eogon;" * "\x0118"     ,"eogon;" * "\x0119"-    ,"Eopf;" * "\xD835\xDD3C"-    ,"eopf;" * "\xD835\xDD56"+    ,"Eopf;" * "\x1D53C"+    ,"eopf;" * "\x1D556"     ,"epar;" * "\x22D5"     ,"eparsl;" * "\x29E3"     ,"eplus;" * "\x2A71"@@ -669,8 +669,8 @@     ,"ffilig;" * "\xFB03"     ,"fflig;" * "\xFB00"     ,"ffllig;" * "\xFB04"-    ,"Ffr;" * "\xD835\xDD09"-    ,"ffr;" * "\xD835\xDD23"+    ,"Ffr;" * "\x1D509"+    ,"ffr;" * "\x1D523"     ,"filig;" * "\xFB01"     ,"FilledSmallSquare;" * "\x25FC"     ,"FilledVerySmallSquare;" * "\x25AA"@@ -679,8 +679,8 @@     ,"fllig;" * "\xFB02"     ,"fltns;" * "\x25B1"     ,"fnof;" * "\x0192"-    ,"Fopf;" * "\xD835\xDD3D"-    ,"fopf;" * "\xD835\xDD57"+    ,"Fopf;" * "\x1D53D"+    ,"fopf;" * "\x1D557"     ,"ForAll;" * "\x2200"     ,"forall;" * "\x2200"     ,"fork;" * "\x22D4"@@ -708,7 +708,7 @@     ,"frasl;" * "\x2044"     ,"frown;" * "\x2322"     ,"Fscr;" * "\x2131"-    ,"fscr;" * "\xD835\xDCBB"+    ,"fscr;" * "\x1D4BB"     ,"gacute;" * "\x01F5"     ,"Gamma;" * "\x0393"     ,"gamma;" * "\x03B3"@@ -738,8 +738,8 @@     ,"gesdotol;" * "\x2A84"     ,"gesl;" * "\x22DB\xFE00"     ,"gesles;" * "\x2A94"-    ,"Gfr;" * "\xD835\xDD0A"-    ,"gfr;" * "\xD835\xDD24"+    ,"Gfr;" * "\x1D50A"+    ,"gfr;" * "\x1D524"     ,"gg;" * "\x226B"     ,"Gg;" * "\x22D9"     ,"ggg;" * "\x22D9"@@ -757,8 +757,8 @@     ,"gneq;" * "\x2A88"     ,"gneqq;" * "\x2269"     ,"gnsim;" * "\x22E7"-    ,"Gopf;" * "\xD835\xDD3E"-    ,"gopf;" * "\xD835\xDD58"+    ,"Gopf;" * "\x1D53E"+    ,"gopf;" * "\x1D558"     ,"grave;" * "\x0060"     ,"GreaterEqual;" * "\x2265"     ,"GreaterEqualLess;" * "\x22DB"@@ -768,7 +768,7 @@     ,"GreaterSlantEqual;" * "\x2A7E"     ,"GreaterTilde;" * "\x2273"     ,"gscr;" * "\x210A"-    ,"Gscr;" * "\xD835\xDCA2"+    ,"Gscr;" * "\x1D4A2"     ,"gsim;" * "\x2273"     ,"gsime;" * "\x2A8E"     ,"gsiml;" * "\x2A90"@@ -810,7 +810,7 @@     ,"hellip;" * "\x2026"     ,"hercon;" * "\x22B9"     ,"Hfr;" * "\x210C"-    ,"hfr;" * "\xD835\xDD25"+    ,"hfr;" * "\x1D525"     ,"HilbertSpace;" * "\x210B"     ,"hksearow;" * "\x2925"     ,"hkswarow;" * "\x2926"@@ -819,11 +819,11 @@     ,"hookleftarrow;" * "\x21A9"     ,"hookrightarrow;" * "\x21AA"     ,"Hopf;" * "\x210D"-    ,"hopf;" * "\xD835\xDD59"+    ,"hopf;" * "\x1D559"     ,"horbar;" * "\x2015"     ,"HorizontalLine;" * "\x2500"     ,"Hscr;" * "\x210B"-    ,"hscr;" * "\xD835\xDCBD"+    ,"hscr;" * "\x1D4BD"     ,"hslash;" * "\x210F"     ,"Hstrok;" * "\x0126"     ,"hstrok;" * "\x0127"@@ -849,7 +849,7 @@     ,"iexcl;" * "\x00A1"     ,"iff;" * "\x21D4"     ,"Ifr;" * "\x2111"-    ,"ifr;" * "\xD835\xDD26"+    ,"ifr;" * "\x1D526"     ,"Igrave" * "\x00CC"     ,"igrave" * "\x00EC"     ,"Igrave;" * "\x00CC"@@ -892,15 +892,15 @@     ,"iocy;" * "\x0451"     ,"Iogon;" * "\x012E"     ,"iogon;" * "\x012F"-    ,"Iopf;" * "\xD835\xDD40"-    ,"iopf;" * "\xD835\xDD5A"+    ,"Iopf;" * "\x1D540"+    ,"iopf;" * "\x1D55A"     ,"Iota;" * "\x0399"     ,"iota;" * "\x03B9"     ,"iprod;" * "\x2A3C"     ,"iquest" * "\x00BF"     ,"iquest;" * "\x00BF"     ,"Iscr;" * "\x2110"-    ,"iscr;" * "\xD835\xDCBE"+    ,"iscr;" * "\x1D4BE"     ,"isin;" * "\x2208"     ,"isindot;" * "\x22F5"     ,"isinE;" * "\x22F9"@@ -920,13 +920,13 @@     ,"jcirc;" * "\x0135"     ,"Jcy;" * "\x0419"     ,"jcy;" * "\x0439"-    ,"Jfr;" * "\xD835\xDD0D"-    ,"jfr;" * "\xD835\xDD27"+    ,"Jfr;" * "\x1D50D"+    ,"jfr;" * "\x1D527"     ,"jmath;" * "\x0237"-    ,"Jopf;" * "\xD835\xDD41"-    ,"jopf;" * "\xD835\xDD5B"-    ,"Jscr;" * "\xD835\xDCA5"-    ,"jscr;" * "\xD835\xDCBF"+    ,"Jopf;" * "\x1D541"+    ,"jopf;" * "\x1D55B"+    ,"Jscr;" * "\x1D4A5"+    ,"jscr;" * "\x1D4BF"     ,"Jsercy;" * "\x0408"     ,"jsercy;" * "\x0458"     ,"Jukcy;" * "\x0404"@@ -938,17 +938,17 @@     ,"kcedil;" * "\x0137"     ,"Kcy;" * "\x041A"     ,"kcy;" * "\x043A"-    ,"Kfr;" * "\xD835\xDD0E"-    ,"kfr;" * "\xD835\xDD28"+    ,"Kfr;" * "\x1D50E"+    ,"kfr;" * "\x1D528"     ,"kgreen;" * "\x0138"     ,"KHcy;" * "\x0425"     ,"khcy;" * "\x0445"     ,"KJcy;" * "\x040C"     ,"kjcy;" * "\x045C"-    ,"Kopf;" * "\xD835\xDD42"-    ,"kopf;" * "\xD835\xDD5C"-    ,"Kscr;" * "\xD835\xDCA6"-    ,"kscr;" * "\xD835\xDCC0"+    ,"Kopf;" * "\x1D542"+    ,"kopf;" * "\x1D55C"+    ,"Kscr;" * "\x1D4A6"+    ,"kscr;" * "\x1D4C0"     ,"lAarr;" * "\x21DA"     ,"Lacute;" * "\x0139"     ,"lacute;" * "\x013A"@@ -1066,8 +1066,8 @@     ,"LessTilde;" * "\x2272"     ,"lfisht;" * "\x297C"     ,"lfloor;" * "\x230A"-    ,"Lfr;" * "\xD835\xDD0F"-    ,"lfr;" * "\xD835\xDD29"+    ,"Lfr;" * "\x1D50F"+    ,"lfr;" * "\x1D529"     ,"lg;" * "\x2276"     ,"lgE;" * "\x2A91"     ,"lHar;" * "\x2962"@@ -1111,8 +1111,8 @@     ,"looparrowleft;" * "\x21AB"     ,"looparrowright;" * "\x21AC"     ,"lopar;" * "\x2985"-    ,"Lopf;" * "\xD835\xDD43"-    ,"lopf;" * "\xD835\xDD5D"+    ,"Lopf;" * "\x1D543"+    ,"lopf;" * "\x1D55D"     ,"loplus;" * "\x2A2D"     ,"lotimes;" * "\x2A34"     ,"lowast;" * "\x2217"@@ -1132,7 +1132,7 @@     ,"lrtri;" * "\x22BF"     ,"lsaquo;" * "\x2039"     ,"Lscr;" * "\x2112"-    ,"lscr;" * "\xD835\xDCC1"+    ,"lscr;" * "\x1D4C1"     ,"Lsh;" * "\x21B0"     ,"lsh;" * "\x21B0"     ,"lsim;" * "\x2272"@@ -1183,8 +1183,8 @@     ,"measuredangle;" * "\x2221"     ,"MediumSpace;" * "\x205F"     ,"Mellintrf;" * "\x2133"-    ,"Mfr;" * "\xD835\xDD10"-    ,"mfr;" * "\xD835\xDD2A"+    ,"Mfr;" * "\x1D510"+    ,"mfr;" * "\x1D52A"     ,"mho;" * "\x2127"     ,"micro" * "\x00B5"     ,"micro;" * "\x00B5"@@ -1202,11 +1202,11 @@     ,"mldr;" * "\x2026"     ,"mnplus;" * "\x2213"     ,"models;" * "\x22A7"-    ,"Mopf;" * "\xD835\xDD44"-    ,"mopf;" * "\xD835\xDD5E"+    ,"Mopf;" * "\x1D544"+    ,"mopf;" * "\x1D55E"     ,"mp;" * "\x2213"     ,"Mscr;" * "\x2133"-    ,"mscr;" * "\xD835\xDCC2"+    ,"mscr;" * "\x1D4C2"     ,"mstpos;" * "\x223E"     ,"Mu;" * "\x039C"     ,"mu;" * "\x03BC"@@ -1257,8 +1257,8 @@     ,"NewLine;" * "\x000A"     ,"nexist;" * "\x2204"     ,"nexists;" * "\x2204"-    ,"Nfr;" * "\xD835\xDD11"-    ,"nfr;" * "\xD835\xDD2B"+    ,"Nfr;" * "\x1D511"+    ,"nfr;" * "\x1D52B"     ,"ngE;" * "\x2267\x0338"     ,"nge;" * "\x2271"     ,"ngeq;" * "\x2271"@@ -1305,7 +1305,7 @@     ,"NoBreak;" * "\x2060"     ,"NonBreakingSpace;" * "\x00A0"     ,"Nopf;" * "\x2115"-    ,"nopf;" * "\xD835\xDD5F"+    ,"nopf;" * "\x1D55F"     ,"not" * "\x00AC"     ,"not;" * "\x00AC"     ,"Not;" * "\x2AEC"@@ -1391,8 +1391,8 @@     ,"nsc;" * "\x2281"     ,"nsccue;" * "\x22E1"     ,"nsce;" * "\x2AB0\x0338"-    ,"Nscr;" * "\xD835\xDCA9"-    ,"nscr;" * "\xD835\xDCC3"+    ,"Nscr;" * "\x1D4A9"+    ,"nscr;" * "\x1D4C3"     ,"nshortmid;" * "\x2224"     ,"nshortparallel;" * "\x2226"     ,"nsim;" * "\x2241"@@ -1473,8 +1473,8 @@     ,"OElig;" * "\x0152"     ,"oelig;" * "\x0153"     ,"ofcir;" * "\x29BF"-    ,"Ofr;" * "\xD835\xDD12"-    ,"ofr;" * "\xD835\xDD2C"+    ,"Ofr;" * "\x1D512"+    ,"ofr;" * "\x1D52C"     ,"ogon;" * "\x02DB"     ,"Ograve" * "\x00D2"     ,"ograve" * "\x00F2"@@ -1497,8 +1497,8 @@     ,"omicron;" * "\x03BF"     ,"omid;" * "\x29B6"     ,"ominus;" * "\x2296"-    ,"Oopf;" * "\xD835\xDD46"-    ,"oopf;" * "\xD835\xDD60"+    ,"Oopf;" * "\x1D546"+    ,"oopf;" * "\x1D560"     ,"opar;" * "\x29B7"     ,"OpenCurlyDoubleQuote;" * "\x201C"     ,"OpenCurlyQuote;" * "\x2018"@@ -1520,7 +1520,7 @@     ,"orv;" * "\x2A5B"     ,"oS;" * "\x24C8"     ,"oscr;" * "\x2134"-    ,"Oscr;" * "\xD835\xDCAA"+    ,"Oscr;" * "\x1D4AA"     ,"Oslash" * "\x00D8"     ,"oslash" * "\x00F8"     ,"Oslash;" * "\x00D8"@@ -1557,8 +1557,8 @@     ,"permil;" * "\x2030"     ,"perp;" * "\x22A5"     ,"pertenk;" * "\x2031"-    ,"Pfr;" * "\xD835\xDD13"-    ,"pfr;" * "\xD835\xDD2D"+    ,"Pfr;" * "\x1D513"+    ,"pfr;" * "\x1D52D"     ,"Phi;" * "\x03A6"     ,"phi;" * "\x03C6"     ,"phiv;" * "\x03D5"@@ -1587,7 +1587,7 @@     ,"Poincareplane;" * "\x210C"     ,"pointint;" * "\x2A15"     ,"Popf;" * "\x2119"-    ,"popf;" * "\xD835\xDD61"+    ,"popf;" * "\x1D561"     ,"pound" * "\x00A3"     ,"pound;" * "\x00A3"     ,"pr;" * "\x227A"@@ -1625,19 +1625,19 @@     ,"propto;" * "\x221D"     ,"prsim;" * "\x227E"     ,"prurel;" * "\x22B0"-    ,"Pscr;" * "\xD835\xDCAB"-    ,"pscr;" * "\xD835\xDCC5"+    ,"Pscr;" * "\x1D4AB"+    ,"pscr;" * "\x1D4C5"     ,"Psi;" * "\x03A8"     ,"psi;" * "\x03C8"     ,"puncsp;" * "\x2008"-    ,"Qfr;" * "\xD835\xDD14"-    ,"qfr;" * "\xD835\xDD2E"+    ,"Qfr;" * "\x1D514"+    ,"qfr;" * "\x1D52E"     ,"qint;" * "\x2A0C"     ,"Qopf;" * "\x211A"-    ,"qopf;" * "\xD835\xDD62"+    ,"qopf;" * "\x1D562"     ,"qprime;" * "\x2057"-    ,"Qscr;" * "\xD835\xDCAC"-    ,"qscr;" * "\xD835\xDCC6"+    ,"Qscr;" * "\x1D4AC"+    ,"qscr;" * "\x1D4C6"     ,"quaternions;" * "\x210D"     ,"quatint;" * "\x2A16"     ,"quest;" * "\x003F"@@ -1716,7 +1716,7 @@     ,"rfisht;" * "\x297D"     ,"rfloor;" * "\x230B"     ,"Rfr;" * "\x211C"-    ,"rfr;" * "\xD835\xDD2F"+    ,"rfr;" * "\x1D52F"     ,"rHar;" * "\x2964"     ,"rhard;" * "\x21C1"     ,"rharu;" * "\x21C0"@@ -1769,7 +1769,7 @@     ,"robrk;" * "\x27E7"     ,"ropar;" * "\x2986"     ,"Ropf;" * "\x211D"-    ,"ropf;" * "\xD835\xDD63"+    ,"ropf;" * "\x1D563"     ,"roplus;" * "\x2A2E"     ,"rotimes;" * "\x2A35"     ,"RoundImplies;" * "\x2970"@@ -1780,7 +1780,7 @@     ,"Rrightarrow;" * "\x21DB"     ,"rsaquo;" * "\x203A"     ,"Rscr;" * "\x211B"-    ,"rscr;" * "\xD835\xDCC7"+    ,"rscr;" * "\x1D4C7"     ,"Rsh;" * "\x21B1"     ,"rsh;" * "\x21B1"     ,"rsqb;" * "\x005D"@@ -1831,8 +1831,8 @@     ,"setminus;" * "\x2216"     ,"setmn;" * "\x2216"     ,"sext;" * "\x2736"-    ,"Sfr;" * "\xD835\xDD16"-    ,"sfr;" * "\xD835\xDD30"+    ,"Sfr;" * "\x1D516"+    ,"sfr;" * "\x1D530"     ,"sfrown;" * "\x2322"     ,"sharp;" * "\x266F"     ,"SHCHcy;" * "\x0429"@@ -1877,8 +1877,8 @@     ,"sol;" * "\x002F"     ,"solb;" * "\x29C4"     ,"solbar;" * "\x233F"-    ,"Sopf;" * "\xD835\xDD4A"-    ,"sopf;" * "\xD835\xDD64"+    ,"Sopf;" * "\x1D54A"+    ,"sopf;" * "\x1D564"     ,"spades;" * "\x2660"     ,"spadesuit;" * "\x2660"     ,"spar;" * "\x2225"@@ -1907,8 +1907,8 @@     ,"squarf;" * "\x25AA"     ,"squf;" * "\x25AA"     ,"srarr;" * "\x2192"-    ,"Sscr;" * "\xD835\xDCAE"-    ,"sscr;" * "\xD835\xDCC8"+    ,"Sscr;" * "\x1D4AE"+    ,"sscr;" * "\x1D4C8"     ,"ssetmn;" * "\x2216"     ,"ssmile;" * "\x2323"     ,"sstarf;" * "\x22C6"@@ -2006,8 +2006,8 @@     ,"tcy;" * "\x0442"     ,"tdot;" * "\x20DB"     ,"telrec;" * "\x2315"-    ,"Tfr;" * "\xD835\xDD17"-    ,"tfr;" * "\xD835\xDD31"+    ,"Tfr;" * "\x1D517"+    ,"tfr;" * "\x1D531"     ,"there4;" * "\x2234"     ,"Therefore;" * "\x2234"     ,"therefore;" * "\x2234"@@ -2041,8 +2041,8 @@     ,"top;" * "\x22A4"     ,"topbot;" * "\x2336"     ,"topcir;" * "\x2AF1"-    ,"Topf;" * "\xD835\xDD4B"-    ,"topf;" * "\xD835\xDD65"+    ,"Topf;" * "\x1D54B"+    ,"topf;" * "\x1D565"     ,"topfork;" * "\x2ADA"     ,"tosa;" * "\x2929"     ,"tprime;" * "\x2034"@@ -2063,8 +2063,8 @@     ,"trisb;" * "\x29CD"     ,"tritime;" * "\x2A3B"     ,"trpezium;" * "\x23E2"-    ,"Tscr;" * "\xD835\xDCAF"-    ,"tscr;" * "\xD835\xDCC9"+    ,"Tscr;" * "\x1D4AF"+    ,"tscr;" * "\x1D4C9"     ,"TScy;" * "\x0426"     ,"tscy;" * "\x0446"     ,"TSHcy;" * "\x040B"@@ -2097,8 +2097,8 @@     ,"udblac;" * "\x0171"     ,"udhar;" * "\x296E"     ,"ufisht;" * "\x297E"-    ,"Ufr;" * "\xD835\xDD18"-    ,"ufr;" * "\xD835\xDD32"+    ,"Ufr;" * "\x1D518"+    ,"ufr;" * "\x1D532"     ,"Ugrave" * "\x00D9"     ,"ugrave" * "\x00F9"     ,"Ugrave;" * "\x00D9"@@ -2123,8 +2123,8 @@     ,"UnionPlus;" * "\x228E"     ,"Uogon;" * "\x0172"     ,"uogon;" * "\x0173"-    ,"Uopf;" * "\xD835\xDD4C"-    ,"uopf;" * "\xD835\xDD66"+    ,"Uopf;" * "\x1D54C"+    ,"uopf;" * "\x1D566"     ,"UpArrow;" * "\x2191"     ,"uparrow;" * "\x2191"     ,"Uparrow;" * "\x21D1"@@ -2153,8 +2153,8 @@     ,"Uring;" * "\x016E"     ,"uring;" * "\x016F"     ,"urtri;" * "\x25F9"-    ,"Uscr;" * "\xD835\xDCB0"-    ,"uscr;" * "\xD835\xDCCA"+    ,"Uscr;" * "\x1D4B0"+    ,"uscr;" * "\x1D4CA"     ,"utdot;" * "\x22F0"     ,"Utilde;" * "\x0168"     ,"utilde;" * "\x0169"@@ -2208,17 +2208,17 @@     ,"VerticalSeparator;" * "\x2758"     ,"VerticalTilde;" * "\x2240"     ,"VeryThinSpace;" * "\x200A"-    ,"Vfr;" * "\xD835\xDD19"-    ,"vfr;" * "\xD835\xDD33"+    ,"Vfr;" * "\x1D519"+    ,"vfr;" * "\x1D533"     ,"vltri;" * "\x22B2"     ,"vnsub;" * "\x2282\x20D2"     ,"vnsup;" * "\x2283\x20D2"-    ,"Vopf;" * "\xD835\xDD4D"-    ,"vopf;" * "\xD835\xDD67"+    ,"Vopf;" * "\x1D54D"+    ,"vopf;" * "\x1D567"     ,"vprop;" * "\x221D"     ,"vrtri;" * "\x22B3"-    ,"Vscr;" * "\xD835\xDCB1"-    ,"vscr;" * "\xD835\xDCCB"+    ,"Vscr;" * "\x1D4B1"+    ,"vscr;" * "\x1D4CB"     ,"vsubne;" * "\x228A\xFE00"     ,"vsubnE;" * "\x2ACB\xFE00"     ,"vsupne;" * "\x228B\xFE00"@@ -2232,21 +2232,21 @@     ,"Wedge;" * "\x22C0"     ,"wedgeq;" * "\x2259"     ,"weierp;" * "\x2118"-    ,"Wfr;" * "\xD835\xDD1A"-    ,"wfr;" * "\xD835\xDD34"-    ,"Wopf;" * "\xD835\xDD4E"-    ,"wopf;" * "\xD835\xDD68"+    ,"Wfr;" * "\x1D51A"+    ,"wfr;" * "\x1D534"+    ,"Wopf;" * "\x1D54E"+    ,"wopf;" * "\x1D568"     ,"wp;" * "\x2118"     ,"wr;" * "\x2240"     ,"wreath;" * "\x2240"-    ,"Wscr;" * "\xD835\xDCB2"-    ,"wscr;" * "\xD835\xDCCC"+    ,"Wscr;" * "\x1D4B2"+    ,"wscr;" * "\x1D4CC"     ,"xcap;" * "\x22C2"     ,"xcirc;" * "\x25EF"     ,"xcup;" * "\x22C3"     ,"xdtri;" * "\x25BD"-    ,"Xfr;" * "\xD835\xDD1B"-    ,"xfr;" * "\xD835\xDD35"+    ,"Xfr;" * "\x1D51B"+    ,"xfr;" * "\x1D535"     ,"xharr;" * "\x27F7"     ,"xhArr;" * "\x27FA"     ,"Xi;" * "\x039E"@@ -2256,14 +2256,14 @@     ,"xmap;" * "\x27FC"     ,"xnis;" * "\x22FB"     ,"xodot;" * "\x2A00"-    ,"Xopf;" * "\xD835\xDD4F"-    ,"xopf;" * "\xD835\xDD69"+    ,"Xopf;" * "\x1D54F"+    ,"xopf;" * "\x1D569"     ,"xoplus;" * "\x2A01"     ,"xotime;" * "\x2A02"     ,"xrarr;" * "\x27F6"     ,"xrArr;" * "\x27F9"-    ,"Xscr;" * "\xD835\xDCB3"-    ,"xscr;" * "\xD835\xDCCD"+    ,"Xscr;" * "\x1D4B3"+    ,"xscr;" * "\x1D4CD"     ,"xsqcup;" * "\x2A06"     ,"xuplus;" * "\x2A04"     ,"xutri;" * "\x25B3"@@ -2281,14 +2281,14 @@     ,"ycy;" * "\x044B"     ,"yen" * "\x00A5"     ,"yen;" * "\x00A5"-    ,"Yfr;" * "\xD835\xDD1C"-    ,"yfr;" * "\xD835\xDD36"+    ,"Yfr;" * "\x1D51C"+    ,"yfr;" * "\x1D536"     ,"YIcy;" * "\x0407"     ,"yicy;" * "\x0457"-    ,"Yopf;" * "\xD835\xDD50"-    ,"yopf;" * "\xD835\xDD6A"-    ,"Yscr;" * "\xD835\xDCB4"-    ,"yscr;" * "\xD835\xDCCE"+    ,"Yopf;" * "\x1D550"+    ,"yopf;" * "\x1D56A"+    ,"Yscr;" * "\x1D4B4"+    ,"yscr;" * "\x1D4CE"     ,"YUcy;" * "\x042E"     ,"yucy;" * "\x044E"     ,"yuml" * "\x00FF"@@ -2307,14 +2307,14 @@     ,"Zeta;" * "\x0396"     ,"zeta;" * "\x03B6"     ,"Zfr;" * "\x2128"-    ,"zfr;" * "\xD835\xDD37"+    ,"zfr;" * "\x1D537"     ,"ZHcy;" * "\x0416"     ,"zhcy;" * "\x0436"     ,"zigrarr;" * "\x21DD"     ,"Zopf;" * "\x2124"-    ,"zopf;" * "\xD835\xDD6B"-    ,"Zscr;" * "\xD835\xDCB5"-    ,"zscr;" * "\xD835\xDCCF"+    ,"zopf;" * "\x1D56B"+    ,"Zscr;" * "\x1D4B5"+    ,"zscr;" * "\x1D4CF"     ,"zwj;" * "\x200D"     ,"zwnj;" * "\x200C"     ]
Text/HTML/TagSoup/Match.hs view
@@ -1,42 +1,113 @@ -- | Combinators to match tags. Some people prefer to use @(~==)@ from --   "Text.HTML.TagSoup", others prefer these more structured combinators. --   Which you use is personal preference.-+--+-- The functions below offer maximum flexibility for matching tags.+-- Using 'tagOpen', for example, you can match all links or buttons that have the "btn" class.+--+-- For simple uses cases—like matching all comment tags, or matching opening @\<a>@ tags,+-- use the tag identification functions in "Text.HTML.TagSoup#tag-identification". module Text.HTML.TagSoup.Match where  import Text.HTML.TagSoup.Type (Tag(..), Attribute) import Data.List (tails) +-- * Matching Tags --- | match an opening tag+-- | Match an opening tag+--+-- ==== __Examples__+--+-- /Matching an opening @\<a>@ tag with a @"btn"@ class:/+--+-- >>> let tag = TagOpen "a" [("class", "btn")]+-- >>> tagOpen (== "a") (\attrs -> any (== ("class", "btn")) attrs) tag+-- True tagOpen :: (str -> Bool) -> ([Attribute str] -> Bool) -> Tag str -> Bool tagOpen pName pAttrs (TagOpen name attrs) =    pName name && pAttrs attrs tagOpen _ _ _ = False --- | match an closing tag+-- | Match a closing tag+--+-- ==== __Examples__+--+-- /Matching a closing @\<\/a>@ tag:/+--+-- >>> tagClose (== "a") (TagClose "a")+-- True+--+-- >>> tagClose (== "a") (TagOpen "a" [])+-- False tagClose :: (str -> Bool) -> Tag str -> Bool tagClose pName (TagClose name) = pName name tagClose _ _ = False --- | match a text+-- | Match text tags+--+-- ==== __Examples__+--+-- /Match all text tags:/+--+-- >>> let tags = parseTags "<p>This is a paragraph</p>"+-- [TagOpen "p" [],TagText "This is a paragraph",TagClose "p"]+-- >>> filter (tagText (const True)) tags+-- [TagText "This is a paragraph"] tagText :: (str -> Bool) -> Tag str -> Bool tagText p (TagText text) = p text tagText _ _ = False +-- | Match comment tags+--+-- ==== __Examples__+--+-- /Matching comment tags that include an exclamation mark:/+--+-- >>> let tags = parseTags "<!--This is a comment-->"+-- [TagComment "This is a comment!"]+-- >>> all (tagComment (\s -> '!' `elem` s)) tags+-- True tagComment :: (str -> Bool) -> Tag str -> Bool tagComment p (TagComment text) = p text tagComment _ _ = False  --- | match a opening tag's name literally+-- | Match an opening tag's name literally+--+-- ==== __Examples__+--+-- /Matching @\<a>@ tags with the @id@ "foo":/+--+-- >>> let tag = TagOpen "a" [("id", "foo")]+-- TagOpen "a" [("id","foo")]+-- >>> tagOpenLit "a" (\attrs -> any (== ("id", "foo")) attrs) tag+-- True+-- tagOpenLit :: Eq str => str -> ([Attribute str] -> Bool) -> Tag str -> Bool tagOpenLit name = tagOpen (name==) --- | match a closing tag's name literally+-- | Match a closing tag's name literally+--+-- ==== __Examples__+--+-- /Match a closing @\<a>@ tag:/+--+-- >>> tagCloseLit "a" (TagClose "a")+-- True+--+-- >>> tagCloseLit "a" (TagClose "em")+-- False tagCloseLit :: Eq str => str -> Tag str -> Bool tagCloseLit name = tagClose (name==) +-- | Match an opening tag's name literally, and at least one of its attributes+--+-- ==== __Examples__+--+-- /Matching a @\<div>@ tag with the @id@ "foo":/+--+-- >>> tagOpenAttrLit "div" ("id", "foo") (TagOpen "div" [("id", "foo")])+-- True tagOpenAttrLit :: Eq str => str -> Attribute str -> Tag str -> Bool tagOpenAttrLit name attr =    tagOpenLit name (anyAttrLit attr)@@ -46,6 +117,14 @@ with given name, that satisfies a predicate. If an attribute occurs multiple times, all occurrences are checked.++==== __Examples__++/Matching an @\<a>@ tag with an ID that starts with "comment-":/++>>> let commentTag = TagOpen "a" [("id", "comment-45678")]+>>> tagOpenAttrNameLit "a" "id" (\idValue -> "comment-" `Data.List.isPrefixOf` idValue) commentTag+True -} tagOpenAttrNameLit :: Eq str => str -> str -> (str -> Bool) -> Tag str -> Bool tagOpenAttrNameLit tagName attrName pAttrValue =@@ -54,15 +133,35 @@   -- | Check if the 'Tag str' is 'TagOpen' and matches the given name+--+-- ==== __Examples__+--+-- /Matching an @\<a>@ tag:/+--+-- >>> tagOpenNameLit "a" (TagOpen "a" [])+-- True+--+-- >>> tagOpenNameLit "a" (TagOpen "div" [])+-- False tagOpenNameLit :: Eq str => str -> Tag str -> Bool tagOpenNameLit name = tagOpenLit name (const True)  -- | Check if the 'Tag str' is 'TagClose' and matches the given name+--+-- ==== __Examples__+--+-- /Matching a closing @\<\/a>@ tag:/+--+-- >>> tagCloseNameLit "a" (TagClose "a")+-- True+--+-- >>> tagCloseNameLit "a" (TagClose "div")+-- False tagCloseNameLit :: Eq str => str -> Tag str -> Bool tagCloseNameLit name = tagCloseLit name  -+-- * Matching attributes  anyAttr :: ((str,str) -> Bool) -> [Attribute str] -> Bool anyAttr = any
tagsoup.cabal view
@@ -1,6 +1,6 @@ cabal-version:  >= 1.6 name:           tagsoup-version:        0.13.9+version:        0.13.10 copyright:      Neil Mitchell 2006-2016 author:         Neil Mitchell <ndmitchell@gmail.com> maintainer:     Neil Mitchell <ndmitchell@gmail.com>