-- | basic 'Pattern' functions -- module Text.XML.HXT.RelaxNG.PatternFunctions where import Text.XML.HXT.RelaxNG.DataTypes -- ------------------------------------------------------------ isRelaxEmpty :: Pattern -> Bool isRelaxEmpty Empty = True isRelaxEmpty _ = False isRelaxNotAllowed :: Pattern -> Bool isRelaxNotAllowed (NotAllowed _) = True isRelaxNotAllowed _ = False isRelaxText :: Pattern -> Bool isRelaxText Text = True isRelaxText _ = False isRelaxChoice :: Pattern -> Bool isRelaxChoice (Choice _ _) = True isRelaxChoice _ = False isRelaxInterleave :: Pattern -> Bool isRelaxInterleave (Interleave _ _) = True isRelaxInterleave _ = False isRelaxGroup :: Pattern -> Bool isRelaxGroup (Group _ _) = True isRelaxGroup _ = False isRelaxOneOrMore :: Pattern -> Bool isRelaxOneOrMore (OneOrMore _) = True isRelaxOneOrMore _ = False isRelaxList :: Pattern -> Bool isRelaxList (List _) = True isRelaxList _ = False isRelaxData :: Pattern -> Bool isRelaxData (Data _ _) = True isRelaxData _ = False isRelaxDataExcept :: Pattern -> Bool isRelaxDataExcept (DataExcept _ _ _) = True isRelaxDataExcept _ = False isRelaxValue :: Pattern -> Bool isRelaxValue (Value _ _ _) = True isRelaxValue _ = False isRelaxAttribute :: Pattern -> Bool isRelaxAttribute (Attribute _ _) = True isRelaxAttribute _ = False isRelaxElement :: Pattern -> Bool isRelaxElement (Element _ _) = True isRelaxElement _ = False isRelaxAfter :: Pattern -> Bool isRelaxAfter (After _ _) = True isRelaxAfter _ = False -- | Returns a list of children pattern for each pattern, -- e.g. (Choice p1 p2) = [p1, p2] getChildrenPattern :: Pattern -> [Pattern] getChildrenPattern (Choice p1 p2) = [p1, p2] getChildrenPattern (Interleave p1 p2) = [p1, p2] getChildrenPattern (Group p1 p2) = [p1, p2] getChildrenPattern (OneOrMore p) = [p] getChildrenPattern (List p) = [p] getChildrenPattern (Element _ p) = [p] getChildrenPattern (DataExcept _ _ p) = [p] getChildrenPattern (Attribute _ p) = [p] getChildrenPattern (After p1 p2) = [p1, p2] getChildrenPattern _ = [] -- | Returns the nameclass of a element- or attribute pattern. -- Otherwise 'NCError' is returned. getNameClassFromPattern :: Pattern -> NameClass getNameClassFromPattern (Element nc _) = nc getNameClassFromPattern (Attribute nc _) = nc getNameClassFromPattern _ = NCError "Pattern without a NameClass" -- | Returns a string representation of the pattern name getPatternName :: Pattern -> String getPatternName (Empty) = "Empty" getPatternName (NotAllowed _) = "NotAllowed" getPatternName (Text) = "Text" getPatternName (Choice _ _) = "Choice" getPatternName (Interleave _ _) = "Interleave" getPatternName (Group _ _) = "Group" getPatternName (OneOrMore _) = "OneOrMore" getPatternName (List _) = "List" getPatternName (Data _ _ ) = "Data" getPatternName (DataExcept _ _ _) = "DataExcept" getPatternName (Value _ _ _) = "Value" getPatternName (Attribute _ _) = "Attribute" getPatternName (Element _ _) = "Element" getPatternName (After _ _) = "After"