xml-types (empty) → 0.1
raw patch · 4 files changed
+234/−0 lines, 4 filesdep +basedep +textsetup-changed
Dependencies added: base, text
Files
- Data/XML/Types.hs +184/−0
- Setup.hs +2/−0
- license.txt +22/−0
- xml-types.cabal +26/−0
+ Data/XML/Types.hs view
@@ -0,0 +1,184 @@+-- Copyright (c) 2010 John Millikin+--+-- Permission is hereby granted, free of charge, to any person+-- obtaining a copy of this software and associated documentation+-- files (the "Software"), to deal in the Software without+-- restriction, including without limitation the rights to use,+-- copy, modify, merge, publish, distribute, sublicense, and/or sell+-- copies of the Software, and to permit persons to whom the+-- Software is furnished to do so, subject to the following+-- conditions:+--+-- The above copyright notice and this permission notice shall be+-- included in all copies or substantial portions of the Software.+--+-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+-- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES+-- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+-- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT+-- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,+-- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING+-- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR+-- OTHER DEALINGS IN THE SOFTWARE.++module Data.XML.Types+ ( -- * Types+ -- ** Document prologue+ Document (..)+ , Prologue (..)+ , Instruction (..)+ , Miscellaneous (..)+ + -- ** Document body+ , Node (..)+ , Element (..)+ , Attribute (..)+ , Content (..)+ , Name (..)+ , Named (..)+ + -- ** Doctypes+ , Doctype (..)+ , ExternalID (..)+ , InternalSubset+ + -- * Predicates+ , isElement+ , isInstruction+ , isContent+ , isComment+ , isNamed+ + -- * Filters+ , nodeChildren+ , elementChildren+ , hasAttribute+ , position+ ) where+import Control.Monad ((>=>))+import Data.Text.Lazy (Text)++data Document = Document+ { documentPrologue :: Prologue+ , documentRoot :: Element+ , documentEpilogue :: [Miscellaneous]+ }+ deriving (Show, Eq)++data Prologue = Prologue+ { prologueBefore :: [Miscellaneous]+ , prologueDoctype :: Maybe Doctype+ , prologueAfter :: [Miscellaneous]+ }+ deriving (Show, Eq)++data Instruction = Instruction+ { instructionTarget :: Text+ , instructionData :: Text+ }+ deriving (Show, Eq)++data Miscellaneous+ = MiscInstruction Instruction+ | MiscComment Text+ deriving (Show, Eq)++data Node+ = NodeElement Element+ | NodeInstruction Instruction+ | NodeContent Content+ | NodeComment Text+ deriving (Show, Eq)++data Element = Element+ { elementName :: Name+ , elementAttributes :: [Attribute]+ , elementNodes :: [Node]+ }+ deriving (Show, Eq)++data Attribute = Attribute+ { attributeName :: Name+ , attributeContent :: [Content]+ }+ deriving (Show, Eq)++data Content+ = ContentText Text+ | ContentEntity Text+ deriving (Show, Eq)++data Name = Name+ { nameLocalName :: Text+ , nameNamespace :: Maybe Text+ , namePrefix :: Maybe Text+ }+ deriving (Show)++-- Ignore prefixes when comparing names+instance Eq Name where+ x == y = and+ [ nameLocalName x == nameLocalName y+ , nameNamespace x == nameNamespace y+ ]++class Named a where+ getName :: a -> Name++instance Named Element where+ getName = elementName++instance Named Attribute where+ getName = attributeName++data Doctype = Doctype+ { doctypeName :: Text+ , doctypeExternalID :: Maybe ExternalID+ , doctypeInternalSubsets :: [InternalSubset]+ }+ deriving (Show, Eq)++data ExternalID+ = SystemID Text+ | PublicID Text Text+ deriving (Show, Eq)++data InternalSubset = InternalSubset+ -- TODO+ deriving (Show, Eq)++isElement :: Node -> [Element]+isElement (NodeElement e) = [e]+isElement _ = []++isInstruction :: Node -> [Instruction]+isInstruction (NodeInstruction i) = [i]+isInstruction _ = []++isContent :: Node -> [Content]+isContent (NodeContent c) = [c]+isContent _ = []++isComment :: Node -> [Text]+isComment (NodeComment t) = [t]+isComment _ = []++isNamed :: Named a => Name -> a -> [a]+isNamed n x = [x | getName x == n]++elementChildren :: Element -> [Element]+elementChildren = elementNodes >=> isElement++nodeChildren :: Node -> [Node]+nodeChildren = isElement >=> elementNodes++position :: Integer -> (a -> [b]) -> a -> [b]+position n f e = safeHead n (f e)++safeHead :: Integer -> [a] -> [a]+safeHead _ [] = []+safeHead 0 (x:_) = [x]+safeHead n (_:xs) = safeHead (n - 1) xs++hasAttribute :: (Attribute -> [Attribute]) -> Element -> [Element]+hasAttribute f e = [e | not $ null (elementAttributes e >>= f)]
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ license.txt view
@@ -0,0 +1,22 @@+Copyright (c) 2010 John Millikin++Permission is hereby granted, free of charge, to any person+obtaining a copy of this software and associated documentation+files (the "Software"), to deal in the Software without+restriction, including without limitation the rights to use,+copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the+Software is furnished to do so, subject to the following+conditions:++The above copyright notice and this permission notice shall be+included in all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR+OTHER DEALINGS IN THE SOFTWARE.
+ xml-types.cabal view
@@ -0,0 +1,26 @@+name: xml-types+version: 0.1+synopsis: Basic types for representing XML+license: MIT+license-file: license.txt+author: John Millikin <jmillikin@gmail.com>+maintainer: jmillikin@gmail.com+build-type: Simple+cabal-version: >=1.6+category: Text, XML+stability: experimental+bug-reports: mailto:jmillikin@gmail.com++source-repository head+ type: darcs+ location: http://ianen.org/haskell/xml-types/++library+ ghc-options: -Wall -fno-warn-unused-do-bind++ build-depends:+ base >=3 && < 5+ , text++ exposed-modules:+ Data.XML.Types