packages feed

hxt-regex-xmlschema 9.0.1 → 9.0.4

raw patch · 3 files changed

+72/−34 lines, 3 filesdep −haskell98dep ~basedep ~parsecPVP ok

version bump matches the API change (PVP)

Dependencies removed: haskell98

Dependency ranges changed: base, parsec

API changes (from Hackage documentation)

+ Text.Regex.Glob.String: matchNoCase :: String -> String -> Bool
+ Text.Regex.Glob.String: parseRegexNoCase :: String -> Regex
+ Text.Regex.Glob.String.RegexParser: parseRegexNoCase :: String -> Regex

Files

hxt-regex-xmlschema.cabal view
@@ -1,5 +1,5 @@ Name:                hxt-regex-xmlschema-Version:             9.0.1+Version:             9.0.4 Synopsis:            A regular expression library for W3C XML Schema regular expressions Description:         This library supports full W3C XML Schema regular expressions                      inclusive all Unicode character sets and blocks.@@ -47,6 +47,5 @@   ghc-prof-options: -auto-all -caf-all    build-depends:     base               >= 4   && < 5,-                     haskell98          >= 1   && < 2,                      parsec             >= 2.1 && < 4,                      hxt-charproperties >= 9   && < 10
src/Text/Regex/Glob/String.hs view
@@ -17,7 +17,9 @@ module Text.Regex.Glob.String     ( Regex     , match+    , matchNoCase     , parseRegex+    , parseRegexNoCase     ) where @@ -28,5 +30,8 @@  match           :: String -> String -> Bool match           = matchWithRegex . parseRegex++matchNoCase     :: String -> String -> Bool+matchNoCase     = matchWithRegex . parseRegexNoCase  -- ------------------------------------------------------------
src/Text/Regex/Glob/String/RegexParser.hs view
@@ -16,9 +16,16 @@  module Text.Regex.Glob.String.RegexParser     ( parseRegex+    , parseRegexNoCase     ) where +import Data.Char                         ( isLower+                                         , isUpper+                                         , toLower+                                         , toUpper+                                         )+ import Text.ParserCombinators.Parsec  import Text.Regex.XMLSchema.String.Regex@@ -30,50 +37,77 @@  parseRegex :: String -> Regex parseRegex+    = parseRegex' mkSymRng++parseRegexNoCase :: String -> Regex+parseRegexNoCase+    = parseRegex' mkNoCaseSymRng++parseRegex' :: (Char -> Char -> Regex) -> String -> Regex+parseRegex' mkS     = either (mkZero . ("syntax error: " ++) . show) id       .       parse ( do-              r <- pattern+              r <- pattern mkS               eof               return r             ) ""  -- ------------------------------------------------------------ -pattern  :: Parser Regex-pattern+pattern  :: (Char -> Char -> Regex) -> Parser Regex+pattern mkS     = many part >>= return . mkSeqs+    where+      part :: Parser Regex+      part+          = ( many1 (noneOf "\\?*[{") >>= return . mkWord' )+            <|>+            ( char '?' >> return mkDot )+            <|>+            ( char '*' >> return mkAll )+            <|>+            ( between (char '{') (char '}') wordList )+            <|>+            ( between (char '[') (char ']') charSet )+            <|>+            ( do c <- char '\\' >> anyChar+                 return $ mkS c c+            )+      mkWord'+          = mkSeqs . map (\ c -> mkS c c) -part :: Parser Regex-part-    = ( many1 (noneOf "\\?*[{") >>= return . mkWord )-      <|>-      ( char '?' >> return mkDot )-      <|>-      ( char '*' >> return mkAll )-      <|>-      ( between (char '{') (char '}') wordList )-      <|>-      ( between (char '[') (char ']') charSet )-      <|>-      ( char '\\' >> anyChar >>= return . mkSym1 )+      wordList :: Parser Regex+      wordList+          = sepBy (many1 (noneOf ",}")) (char ',') >>= return . foldr mkAlt (mkZero "") . map mkWord' -wordList :: Parser Regex-wordList-    = sepBy (many1 (noneOf ",}")) (char ',') >>= return . foldr mkAlt (mkZero "") . map mkWord+      charSet :: Parser Regex+      charSet+          = ( do p1 <- charSet' anyChar+                 ps <- many $ charSet' (noneOf "]")+                 return $ foldr mkAlt (mkZero "") (p1 : ps)+            )+          where+            charSet' cp+                = do c1 <- cp+                     c2 <- rest c1+                     return $ mkS c1 c2+            rest c1+                = option c1 (char '-' >> anyChar) -charSet :: Parser Regex-charSet-    = ( do p1 <- charSet' anyChar-           ps <- many $ charSet' (noneOf "]")-           return $ foldr mkAlt (mkZero "") (p1 : ps)-      )-    where-      charSet' cp-          = do c1 <- cp-               c2 <- rest c1-               return $ mkSymRng c1 c2-      rest c1-          = option c1 (char '-' >> anyChar)+-- ------------------------------------------------------------++mkNoCaseSymRng :: Char -> Char -> Regex+mkNoCaseSymRng c1 c2+    | isLower c1+      &&+      isLower c2+          = mkAlt (mkSymRng (toUpper c1) (toUpper c2)) (mkSymRng c1 c2)+    | isUpper c1+      &&+      isUpper c2+          = mkAlt (mkSymRng (toLower c1) (toLower c2)) (mkSymRng c1 c2)+    | otherwise+        = mkSymRng c1 c2  -- ------------------------------------------------------------