packages feed

xml-basic 0.1 → 0.1.1

raw patch · 7 files changed

+157/−13 lines, 7 filesdep ~base

Dependency ranges changed: base

Files

+ src/Text/HTML/Basic/String.hs view
@@ -0,0 +1,17 @@+module Text.HTML.Basic.String (Encoded, decode, ) where++import Text.XML.Basic.String (Encoded, )+import qualified Text.XML.Basic.String as XMLString+import qualified Text.HTML.Basic.Character as HTMLChar+import qualified Text.HTML.Basic.Entity as HTMLEnt+import qualified Data.Char as Char++{- |+Invalid references are silently skipped.+-}+decode ::+   (Encoded -> String) ->+   [HTMLChar.T] ->+   String+decode =+   XMLString.decodeGen HTMLEnt.mapNameToChar
src/Text/HTML/Basic/Tag.hs view
@@ -6,22 +6,28 @@ -} module Text.HTML.Basic.Tag (    Tag.Name(..),-   Tag.doctype, Tag.doctypeString,-   Tag.cdata, Tag.cdataString,+   Tag.doctype, Tag.doctypeName, Tag.doctypeString,+   Tag.cdata,   Tag.cdataName,   Tag.cdataString,    isEmpty, isSloppy, isInnerOf, closes,+   maybeMetaHTTPHeader, maybeMetaEncoding,    ) where   import Text.XML.Basic.Tag (Name, )  import qualified Text.XML.Basic.Tag as Tag+import qualified Text.XML.Basic.Attribute as Attr import qualified Text.XML.Basic.Name as Name  import qualified Data.Map as Map import qualified Data.Set as Set-import Data.Tuple.HT (mapFst, ) +import qualified Data.Char as Char+import           Data.List.HT (takeWhileRev, )+import           Data.Tuple.HT (mapFst, )+import           Control.Monad (guard, liftM2, ) + {- | Check whether a HTML tag is empty. -}@@ -175,3 +181,30 @@ thdrSet    = nameSet ["th","td","tr"] liSet      = nameSet ["li"] headingSet = nameSet ["h1","h2","h3","h4","h5","h6","p" {- not "div" -}]+++++maybeMetaHTTPHeader ::+   (Name.Tag name, Name.Attribute name) =>+   Tag.Name name -> [Attr.T name string] -> Maybe (string, string)+maybeMetaHTTPHeader name attrs =+   do guard (Name.match "meta" name)+      liftM2 (,)+         (Attr.lookupLit "http-equiv" attrs)+         (Attr.lookupLit "content" attrs)+++{- |+A simple routine that does not check for valid syntax+of the Content-Type specification.++In future we might use a distinct @Encoding@ type instead of plain String.+-}+maybeMetaEncoding ::+   (Name.Tag name, Name.Attribute name) =>+   Tag.Name name -> [Attr.T name String] -> Maybe String+maybeMetaEncoding name attrs =+   do (headerName, content) <- maybeMetaHTTPHeader name attrs+      guard (("content-type"==) . map Char.toLower $ headerName)+      return (map Char.toLower . takeWhileRev ('='/=) $ content)
src/Text/XML/Basic/Attribute.hs view
@@ -93,6 +93,20 @@    toString = Name.attributeToString . unname  +versionName :: (Name.Attribute name) => Name name+versionName = Name.fromString versionString++encodingName :: (Name.Attribute name) => Name name+encodingName = Name.fromString encodingString+++versionString :: String+versionString = "version"++encodingString :: String+encodingString = "encoding"++ -- * attribute lists  mapValues ::
src/Text/XML/Basic/Name.hs view
@@ -2,7 +2,6 @@ We provide a type class for tag and attribute names. Instances can be names that preserve case, names with lowercase letters as canonical representation.-To do: Qualified names. -} module Text.XML.Basic.Name where 
+ src/Text/XML/Basic/String.hs view
@@ -0,0 +1,46 @@+module Text.XML.Basic.String where++import qualified Text.XML.Basic.Character as XMLChar+import qualified Text.XML.Basic.Entity as XMLEnt+import qualified Data.Map as Map+import qualified Data.Char as Char+++-- | should be [Word8]+type Encoded  = String++{- |+Decode encoded characters and XML references.+Invalid references are silently skipped.+-}+decode ::+   (Encoded -> String) ->+   [XMLChar.T] ->+   String+decode =+   decodeGen XMLEnt.mapNameToChar++decodeGen ::+   Map.Map XMLEnt.Name Char ->+   (Encoded -> String) ->+   [XMLChar.T] ->+   String+decodeGen mapNameToChar decoder =+   foldr ($) [] .+   XMLChar.switchUnicodeRuns+      ((++) . decoder)+      (\n ->+         if XMLChar.validCharRef n+           then (Char.chr n :)+           else id)+      (\n ->+         maybe id (:) $+         Map.lookup n mapNameToChar)+++{-+type Reference = Either Int String++data T = Cons String Reference R+data R = R Reference R | S T+-}
src/Text/XML/Basic/Tag.hs view
@@ -6,11 +6,16 @@ -} module Text.XML.Basic.Tag (    Name(..),-   doctype, doctypeString,-   cdata, cdataString,+   doctype, doctypeName, doctypeString,+   cdata, cdataName, cdataString,+   xmlName, xmlString,+   maybeXMLEncoding,    ) where -import Text.XML.Basic.Name as Name+import qualified Text.XML.Basic.Name as Name+import qualified Text.XML.Basic.ProcessingInstruction as PI+import qualified Text.XML.Basic.Attribute as Attr+import Control.Monad (guard, )   newtype Name ident = Name {unname :: ident}@@ -26,15 +31,39 @@   +{-# DEPRECATED doctype "use doctypeName instead" #-} doctype :: (Name.Tag name) => Name name-doctype = Name.fromString doctypeString+doctype = doctypeName +{-# DEPRECATED cdata "use cdataName instead" #-} cdata :: (Name.Tag name) => Name name-cdata = Name.fromString cdataString+cdata = cdataName  +doctypeName :: (Name.Tag name) => Name name+doctypeName = Name.fromString doctypeString++cdataName :: (Name.Tag name) => Name name+cdataName = Name.fromString cdataString++xmlName :: (Name.Tag name) => Name name+xmlName = Name.fromString xmlString++ doctypeString :: String doctypeString = "DOCTYPE"  cdataString :: String cdataString = "[CDATA["++xmlString :: String+xmlString = "xml"+++maybeXMLEncoding ::+   (Name.Tag name, Name.Attribute name) =>+   Name name -> PI.T name string -> Maybe string+maybeXMLEncoding name instr =+   do guard (xmlName == name)+      let (PI.Known attrs) = instr+      Attr.lookup Attr.encodingName attrs
xml-basic.cabal view
@@ -1,5 +1,5 @@ Name:             xml-basic-Version:          0.1+Version:          0.1.1 License:          BSD3 License-File:     LICENSE Author:           Henning Thielemann <haskell@henning-thielemann.de>@@ -25,7 +25,7 @@ Source-Repository this   type:     darcs   location: http://code.haskell.org/~thielema/xml-basic/-  tag:      0.1+  tag:      0.1.1  Flag splitBase   description: Choose the new smaller, split-up base package.@@ -36,14 +36,19 @@     data-accessor >=0.2 && <0.3,     utility-ht >=0.0.4 && <0.1   If flag(splitBase)-    Build-Depends: base >= 2, containers >=0.1 && <0.3+    Build-Depends:+      containers >=0.1 && <0.3,+      base >= 2 && <5   Else-    Build-Depends: base >= 1.0 && < 2, special-functors >=1.0 && <1.1+    Build-Depends:+      special-functors >=1.0 && <1.1,+      base >= 1.0 && < 2    GHC-Options:      -Wall   Hs-Source-Dirs:   src   Exposed-Modules:     Text.HTML.Basic.Tag+    Text.HTML.Basic.String     Text.HTML.Basic.Character     Text.HTML.Basic.Entity     Text.XML.Basic.Tag@@ -54,6 +59,7 @@     Text.XML.Basic.Name.LowerCase     Text.XML.Basic.Name.Qualified     Text.XML.Basic.Position+    Text.XML.Basic.String     Text.XML.Basic.Character     Text.XML.Basic.Entity     Text.XML.Basic.Format