hxt-xpath 8.5.3 → 8.5.4
raw patch · 2 files changed
+51/−52 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- hxt-xpath.cabal +1/−1
- src/Text/XML/HXT/XPath/XPathParser.hs +50/−51
hxt-xpath.cabal view
@@ -1,6 +1,6 @@ -- arch-tag: Haskell XML Toolbox XPath Package name: hxt-xpath-version: 8.5.3+version: 8.5.4 license: OtherLicense license-file: LICENCE maintainer: Uwe Schmidt <uwe@fh-wedel.de>
src/Text/XML/HXT/XPath/XPathParser.hs view
@@ -2,14 +2,14 @@ {- | Module : Text.XML.HXT.XPath.XPathParser- Copyright : Copyright (C) 2006-2008 Uwe Schmidt+ Copyright : Copyright (C) 2006-2010 Uwe Schmidt, Torben Kuseler License : MIT Maintainer : Uwe Schmidt (uwe@fh-wedel.de) Stability : experimental Portability: portable - the XPath Parser+ The XPath Parser -} @@ -21,8 +21,6 @@ ) where -import Data.Maybe- import Text.ParserCombinators.Parsec import Text.XML.HXT.DOM.TypeDefs@@ -30,36 +28,37 @@ import Text.XML.HXT.XPath.XPathKeywords import Text.XML.HXT.XPath.XPathDataTypes -import Text.XML.HXT.Parser.XmlTokenParser- ( separator- , systemLiteral- , skipS0- , ncName- , qName- )+import Text.XML.HXT.Parser.XmlTokenParser ( separator+ , systemLiteral+ , skipS0+ , ncName+ , qName+ ) -lookupNs :: NsEnv -> XName -> XName+-- ------------------------------------------------------------++lookupNs :: NsEnv -> XName -> Maybe XName lookupNs uris prefix- -- downwards compatibility: if namespace env is not supported- -- no error is raised, but the uri remains empty- -- not conformant to XPath spec:- -- If namespaces are used, a complete env must be supported,- -- but we don't care about this- = fromMaybe nullXName $ lookup prefix uris+ | null uris = Just nullXName -- not namespace aware XPath+ | isNullXName prefix = maybe (Just nullXName) Just $ -- no default namespace given+ lookup prefix uris+ | otherwise = lookup prefix uris -- namespace aware -enhanceAttrQName :: NsEnv -> QName -> QName+enhanceAttrQName :: NsEnv -> QName -> Maybe QName enhanceAttrQName uris qn- | isNullXName (namePrefix' qn) = qn+ | isNullXName (namePrefix' qn) = Just qn | otherwise = enhanceQName uris qn -enhanceQName :: NsEnv -> QName -> QName-enhanceQName uris qn = setNamespaceUri' ( lookupNs uris (namePrefix' qn) ) qn+enhanceQName :: NsEnv -> QName -> Maybe QName+enhanceQName uris qn = do+ nsu <- lookupNs uris (namePrefix' qn)+ return $ setNamespaceUri' nsu qn -enhanceQN :: AxisSpec -> NsEnv -> QName -> QName+enhanceQN :: AxisSpec -> NsEnv -> QName -> Maybe QName enhanceQN Attribute = enhanceAttrQName enhanceQN _ = enhanceQName -type XParser a = GenParser Char NsEnv a+type XParser a = GenParser Char NsEnv a -- ------------------------------------------------------------ -- parse functions which are used in the XPathFct module@@ -586,50 +585,50 @@ functionName :: XParser String functionName- = try ( do - (p, n) <- qName- uris <- getState- u <- return $ if null p- then ""- else '{' : show (lookupNs uris (newXName p)) ++ "}"- let fn = (u ++ n) in- if fn `elem` ["processing-instruction", "comment", "text", "node"]- then fail ("function name: " ++ fn ++ "not allowed")- else return fn- )+ = do (p, n) <- try qName+ fn <- enhanceName Attribute $ mkPrefixLocalPart p n+ if null p+ then if n `elem` ["processing-instruction", "comment", "text", "node"]+ then fail $ "function name: " ++ n ++ "not allowed"+ else return n+ else return $ "{" ++ namespaceUri fn ++ "}" ++ n <?> "functionName" -- [36] VariableReference variableReference :: XParser (String, String) variableReference- = do- tokenParser (symbol "$")- (p,n) <- qName- uris <- getState- return (show (lookupNs uris (newXName p)), n)+ = do tokenParser (symbol "$")+ (p, n) <- qName+ vn <- enhanceName Attribute $ mkPrefixLocalPart p n+ return (namespaceUri vn, n) <?> "variableReference" -- [37] NameTest nameTest :: AxisSpec -> XParser QName-nameTest as+nameTest axs = do tokenParser (symbol "*")- uris <- getState- return (enhanceQN as uris $ mkPrefixLocalPart "" "*")+ enhanceName axs $ mkPrefixLocalPart "" "*" <|>- try ( do pre <- ncName- _ <- symbol ":*"- uris <- getState- return (enhanceQN as uris $ mkPrefixLocalPart pre "*")- )+ do pre <- try ( do pre' <- ncName+ _ <- symbol ":*"+ return pre'+ )+ enhanceName axs $ mkPrefixLocalPart pre "*" <|> do (pre,local) <- qName- uris <- getState- return (enhanceQN as uris $ mkPrefixLocalPart pre local)+ enhanceName axs $ mkPrefixLocalPart pre local <?> "nameTest" - +enhanceName :: AxisSpec -> QName -> XParser QName+enhanceName axs qn+ = do uris <- getState+ case enhanceQN axs uris qn of+ Nothing -> fail $ "no namespace uri given for prefix " ++ show (namePrefix qn)+ Just qn' -> return qn'+ <?> "qualified name with defined namespace uri"+ -- [38] NodeType nodeType' :: XParser XPathNode nodeType'