packages feed

StringUtils (empty) → 0.1.0.0

raw patch · 4 files changed

+380/−0 lines, 4 filesdep +basesetup-changed

Dependencies added: base

Files

+ LICENSE view
@@ -0,0 +1,165 @@+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple
+main = defaultMain
+ StringUtils.cabal view
@@ -0,0 +1,24 @@+-- Initial StringUtils.cabal generated by cabal init.  For further 
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                StringUtils
+version:             0.1.0.0
+synopsis:            String manipulation utilities
+description:         This little library is useful container of String manipulation function like trim, find, replace, substring, etc.
+license:             LGPL-3
+license-file:        LICENSE
+author:              Luca Ciciriello
+maintainer:          luca_ciciriello@hotmail.com
+-- copyright:           
+category:            Text
+build-type:          Simple
+-- extra-source-files:  
+cabal-version:       >=1.10
+
+library
+  exposed-modules:     StringUtils
+  -- other-modules:       
+  -- other-extensions:    
+  build-depends:       base >=4.8 && <4.9
+  hs-source-dirs:      src
+  default-language:    Haskell2010
+ src/StringUtils.lhs view
@@ -0,0 +1,189 @@+StringUtils by Luca Ciciriello
+2011-2016
+
+> module StringUtils where
+    
+> import Data.Char
+> import Data.List
+
+Replace a single char in the specified position
+
+> replace :: Int -> String -> String -> String
+> replace _ _ "" = ""
+> replace n ch str = (take n str) ++ ch ++ (drop (n+1) str)
+
+Replace a single char with a new one when occurs in a string
+
+> replace_all :: String -> String -> String -> String
+> replace_all old new str | p == (-1) = s
+>                         | otherwise = (take p str) ++  new ++ (replace_all old new s)
+>                         where p = find_first old str
+>                               s = drop (p+1) str
+
+Replace a substring wit a new one when occurs in a string
+
+> replace_all_str :: String -> String -> String -> String
+> replace_all_str old new str | p == (-1) = s
+>                             | otherwise = (take p str) ++  new ++ (drop (len - 1) (replace_all_str old new s))
+>                             where p = find_str old str
+>                                   s = drop (p+1) str
+>                                   len | length old == 0 = 0
+>                                       | otherwise = length old
+
+Restituisce la posizione della prima occorrenza della stringa specificata in una stringa
+
+> find_first :: (Eq a) => [a] -> [a] -> Int
+> find_first _ [] = -1
+> find_first [] _ = -1 
+> find_first (x:ys) xs | (x `elem` xs) == False = -1 
+>                      | otherwise = head (positions x xs) 
+
+Replace first occurrence of a substring in a string starting from a specified position
+
+> find_fst_from :: (Eq a) => [a] -> [a] -> Int -> Int
+> find_fst_from _ [] _ = -1
+> find_fst_from [] _ _ = -1 
+> find_fst_from x xs off  | (x `isIn` str) == False = -1
+>                         | otherwise = (find_first x str) + off
+>                         where str = (drop off xs)
+				       
+As find_first but using String type
+					   
+> find_str :: String -> String -> Int
+> find_str "" _ = -1
+> find_str _ [] = -1
+> find_str sub xs | null lst = -1
+>                 | otherwise = head lst
+>                 where lst = matching_lst sub xs (fst_pos_lst sub xs)
+		
+As find_fst_from but using String type
+	
+> find_str_from :: String -> String -> Int -> Int
+> find_str_from _ [] _ = -1
+> find_str_from [] _ _ = -1 
+> find_str_from sub xs off | (pos == -1) = -1
+>                          | otherwise = pos + off
+>                          where str = (drop off xs)
+>                                pos = find_str sub str
+	
+Returns a substring of a string starting from a specified position and for a pecified num of char 
+	
+> substr :: Int -> Int -> String -> String
+> substr _ _ "" = ""
+> substr pos num str = take num (drop pos str)
+
+Returns the char in a specified position in a string
+
+> get_ch_at :: String -> Int -> Char
+> get_ch_at [] _ = '_'
+> get_ch_at str n = str !! n
+
+Returns the position of the first occurrence of a specified char in a string
+
+> positions :: (Eq a) => a -> [a] -> [Int]
+> positions _ [] = []
+> positions x xs = [i | (x', i) <- zip xs [0 .. n], x == x']
+>                where n = length xs - 1
+
+str_positions :: String -> String -> [Int]
+str_positions _ "" = []
+str_positions x xs | pos == -1 = []
+                   | otherwise = (find_str x xs) : [find_str x sss]
+                   where sss = drop (pos+1) xs
+                         pos = find_str x xs
+
+Returns the positions list of all occurrence of a substring in a string 
+
+> indicesOfSubStr :: String -> String -> [Int]
+> indicesOfSubStr []  _   = []
+> indicesOfSubStr sub str = filter (\i -> sub `isPrefixOf` drop i str) $ head sub `elemIndices` str
+ 
+Cunts the occurences of a specified char in a string
+
+> count :: (Eq a) => a -> [a] -> Int
+> count _ [] = 0
+> count x xs = length $ positions x xs
+ 
+Checks if a specified substring is present in a string
+		 		 
+> isIn :: (Eq a) => [a] -> [a] -> Bool
+> isIn (x:xs) str = x `elem` str
+
+Removes the char in a specified position in a string
+
+> delete_at :: Int -> String -> String
+> delete_at 0 xs = xs
+> delete_at _ "" = ""
+> delete_at pos xs = (take pos xs) ++ (drop (pos+1) xs)
+
+Removes all the occurrences of a char in a string
+
+> delete_all :: String -> String -> String
+> delete_all _ "" = ""
+> delete_all "" xs = xs
+> delete_all el xs = replace_all el "" xs
+
+Inserts a substring in a specified position in a string
+
+> insert_at :: Int -> String -> String -> String
+> insert_at _ "" xs = xs
+> insert_at _ el "" = el
+> insert_at pos el xs | (pos > (length xs) || pos < 0) == True = xs
+>                     | otherwise = (take pos xs) ++ el ++ (drop pos xs)
+
+Transform all lowercase chars in a string in uppercase chars
+		    
+> to_upper :: String -> String
+> to_upper "" = ""
+> to_upper xs = map toUpper xs
+
+Transform all uppercase chars in a string in lowercase chars 
+
+> to_lower :: String -> String
+> to_lower "" = ""
+> to_lower xs = map toLower xs
+
+Returns a positions list of a specified char in a string
+
+> fst_pos_lst :: String -> String -> [Int]
+> fst_pos_lst sub xs = positions (sub `get_ch_at` 0) xs
+
+Just for internal use
+
+> matching_lst :: String -> String -> [Int] -> [Int]
+> matching_lst sub xs ps = [p | p <- ps, mtc p]
+>                       where mtc p = (sub == (substr p (length sub) xs))
+
+Removes starting spaces in a string
+
+> trim_left :: String -> String
+> trim_left "" = ""
+> trim_left (x:xs) | (x /= ' ') = x : xs
+>                  | otherwise  = trim_left xs
+
+Removes starting spaces, tabs, and newlines in a string
+                 
+> trim_left_complete :: String -> String
+> trim_left_complete "" = ""
+> trim_left_complete (x:xs) | (x /= ' ' && x /= '\t' && x /= '\r' && x /= '\n') = x : xs
+>                           | otherwise = trim_left_complete xs
+
+Removes ending spaces in a string
+
+> trim_right :: String -> String
+> trim_right str = (reverse . trim_left . reverse) str
+
+Removes ending spaces, tabs, and newlines in a string
+
+> trim_right_complete :: String -> String
+> trim_right_complete str = (reverse . trim_left_complete . reverse) str
+
+Removes all starting and ending spaces in a string
+
+> trim :: String -> String
+> trim str = (trim_right . trim_left) str
+
+Removes all starting and ending spaces, tabs and newlines in a string 
+
+> trim_complete :: String -> String
+> trim_complete str = (trim_right_complete . trim_left_complete) str