regex-compat (empty) → 0.71
raw patch · 4 files changed
+213/−0 lines, 4 filesdep +basedep +regex-basedep +regex-posixbuild-type:Customsetup-changed
Dependencies added: base, regex-base, regex-posix
Files
- LICENSE +31/−0
- Setup.hs +6/−0
- Text/Regex.hs +134/−0
- regex-compat.cabal +42/−0
+ LICENSE view
@@ -0,0 +1,31 @@+The Glasgow Haskell Compiler License++Copyright 2004, The University Court of the University of Glasgow. +All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++- Redistributions of source code must retain the above copyright notice,+this list of conditions and the following disclaimer.+ +- Redistributions in binary form must reproduce the above copyright notice,+this list of conditions and the following disclaimer in the documentation+and/or other materials provided with the distribution.+ +- Neither name of the University nor the names of its contributors may be+used to endorse or promote products derived from this software without+specific prior written permission. ++THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+DAMAGE.
+ Setup.hs view
@@ -0,0 +1,6 @@+#!/usr/bin/env runhaskell++-- I usually compile this with "ghc --make -o setup Setup.hs"++import Distribution.Simple(defaultMain)+main = defaultMain
+ Text/Regex.hs view
@@ -0,0 +1,134 @@+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}+-----------------------------------------------------------------------------+-- |+-- Module : Text.Regex+-- Copyright : (c) Chris Kuklewicz 2006, derived from (c) The University of Glasgow 2001+-- License : BSD-style (see the file LICENSE)+-- +-- Maintainer : libraries@haskell.org+-- Stability : experimental+-- Portability : non-portable (regex-base needs MPTC+FD)+--+-- Regular expression matching. Uses the POSIX regular expression+-- interface in "Text.Regex.Posix".+--+---------------------------------------------------------------------------++--+-- Modified by Chris Kuklewicz to be a thin layer over the regex-posix+-- package, and moved into a regex-compat package.+--+module Text.Regex (+ -- * Regular expressions+ Regex,+ mkRegex,+ mkRegexWithOpts,+ matchRegex,+ matchRegexAll,+ subRegex,+ splitRegex+ ) where++import Data.Bits((.|.))+import Text.Regex.Base(RegexMaker(makeRegexOpts),defaultExecOpt,RegexContext(matchM))+import Text.Regex.Posix(Regex,compNewline,compIgnoreCase,compExtended)++-- | Makes a regular expression with the default options (multi-line,+-- case-sensitive). The syntax of regular expressions is+-- otherwise that of @egrep@ (i.e. POSIX \"extended\" regular+-- expressions).+mkRegex :: String -> Regex+mkRegex s = makeRegexOpts opt defaultExecOpt s+ where opt = compExtended .|. compNewline++-- | Makes a regular expression, where the multi-line and+-- case-sensitive options can be changed from the default settings.+mkRegexWithOpts+ :: String -- ^ The regular expression to compile+ -> Bool -- ^ 'True' @\<=>@ @\'^\'@ and @\'$\'@ match the beginning and + -- end of individual lines respectively, and @\'.\'@ does /not/+ -- match the newline character.+ -> Bool -- ^ 'True' @\<=>@ matching is case-sensitive+ -> Regex -- ^ Returns: the compiled regular expression++mkRegexWithOpts s single_line case_sensitive+ = let opt = (if single_line then (compNewline .|.) else id) .+ (if case_sensitive then id else (compIgnoreCase .|.)) $+ compExtended+ in makeRegexOpts opt defaultExecOpt s++-- | Match a regular expression against a string+matchRegex+ :: Regex -- ^ The regular expression+ -> String -- ^ The string to match against+ -> Maybe [String] -- ^ Returns: @'Just' strs@ if the match succeeded+ -- (and @strs@ is the list of subexpression matches),+ -- or 'Nothing' otherwise.+matchRegex p str = fmap (\(_,_,_,str) -> str) (matchRegexAll p str)++-- | Match a regular expression against a string, returning more information+-- about the match.+matchRegexAll+ :: Regex -- ^ The regular expression+ -> String -- ^ The string to match against+ -> Maybe ( String, String, String, [String] )+ -- ^ Returns: 'Nothing' if the match failed, or:+ -- + -- > Just ( everything before match,+ -- > portion matched,+ -- > everything after the match,+ -- > subexpression matches )++matchRegexAll p str = matchM p str++{- | Replaces every occurance of the given regexp with the replacement string.++In the replacement string, @\"\\1\"@ refers to the first substring;+@\"\\2\"@ to the second, etc; and @\"\\0\"@ to the entire match.+@\"\\\\\\\\\"@ will insert a literal backslash.++This is unsafe if the regex matches an empty string.+-}+subRegex :: Regex -- ^ Search pattern+ -> String -- ^ Input string+ -> String -- ^ Replacement text+ -> String -- ^ Output string+subRegex _ "" _ = ""+subRegex regexp inp repl =+ let bre = mkRegex "\\\\(\\\\|[0-9]+)"+ lookup _ [] _ = []+ lookup [] _ _ = []+ lookup match repl groups =+ case matchRegexAll bre repl of+ Nothing -> repl+ Just (lead, _, trail, bgroups) ->+ let newval = if (head bgroups) == "\\"+ then "\\"+ else let index = (read (head bgroups)) - 1+ in+ if index == -1+ then match+ else groups !! index+ in+ lead ++ newval ++ lookup match trail groups+ in+ case matchRegexAll regexp inp of+ Nothing -> inp+ Just (lead, match, trail, groups) ->+ lead ++ lookup match repl groups ++ (subRegex regexp trail repl)++{- | Splits a string based on a regular expression. The regular expression+should identify one delimiter.++This is unsafe if the regex matches an empty string.+-}++splitRegex :: Regex -> String -> [String]+splitRegex _ [] = []+splitRegex delim str =+ case matchRegexAll delim str of+ Nothing -> [str]+ Just (firstline, _, remainder, _) ->+ if remainder == ""+ then firstline : [] : []+ else firstline : splitRegex delim remainder
+ regex-compat.cabal view
@@ -0,0 +1,42 @@+-- ****************************************************************+-- To fix for cabal < 1.1.4 comment out the Extra-Source-Files line+-- ****************************************************************+Name: regex-compat+Version: 0.71+-- Cabal-Version: >=1.1.4+License: BSD3+License-File: LICENSE+Copyright: Copyright (c) 2006, Christopher Kuklewicz+Author: Christopher Kuklewicz+Maintainer: TextRegexLazy@personal.mightyreason.com+Stability: Seems to work, passes a few tests+Homepage: http://sourceforge.net/projects/lazy-regex+-- Package-URL:+Synopsis: Replaces/Enhances Text.Regex+Description: One module layer over regex-posix to replace Text.Regex+Category: Text+Tested-With: GHC+Build-Depends: regex-base, regex-posix, base+-- Data-Files:+-- Extra-Source-Files: Text/Regex/Lazy/TestCompat.hs, Text/Regex/Lazy/TestFull.hs, Text/Regex/Impl/TestContext.hs, TestTextRegexLazy.hs, Example.hs, Example2.hs, lazy.html, README, Makefile+-- Extra-Tmp-Files:+Exposed-Modules: Text.Regex+Buildable: True+-- Other-Modules:+-- ********* Be backward compatible until 6.4.2 is futher deployed+-- HS-Source-Dirs: "."+-- Extensions:+GHC-Options: -Wall -Werror -O2+-- GHC-Options: -Wall -Werror+-- GHC-Options: -Wall -ddump-minimal-imports+-- GHC-Prog-Options: +-- Hugs-Options:+-- NHC-Options:+-- Includes:+-- Include-Dirs:+-- C-Sources:+-- Extra-Libraries:+-- Extra-Lib-Dirs:+-- CC-Options:+-- LD-Options:+-- Frameworks: