mps 2009.4.21 → 2009.4.50
raw patch · 3 files changed
+99/−23 lines, 3 filesdep +base64-stringdep +filepathdep +old-localePVP ok
version bump matches the API change (PVP)
Dependencies added: base64-string, filepath, old-locale, template, unix, zlib
API changes (from Hackage documentation)
+ MPS: escape_unicode_xml :: String -> String
+ MPS: file_mtime :: String -> IO UTCTime
+ MPS: file_size :: String -> IO Integer
+ MPS: format_time :: String -> UTCTime -> String
+ MPS: get_current_directory :: IO String
+ MPS: get_permissions :: String -> IO Permissions
+ MPS: interpolate :: String -> [(String, String)] -> String
+ MPS: now :: IO UTCTime
+ MPS: read_binary_file :: String -> IO String
+ MPS: unzip64 :: String -> String
+ MPS: zip64 :: String -> String
Files
- changelog.markdown +11/−0
- mps.cabal +2/−2
- src/MPS/Snippets.hs +86/−21
changelog.markdown view
@@ -1,3 +1,14 @@+2009.4.50+----------++### Feature++* xml helper, io helper++### fix++* unescape unicode parser use (try)+ 2009.4.21 ---------
mps.cabal view
@@ -1,5 +1,5 @@ Name: mps-Version: 2009.4.21+Version: 2009.4.50 Build-type: Simple Synopsis: message passing style helpers Description: message passing style helpers@@ -15,7 +15,7 @@ library ghc-options: -Wall -fno-warn-missing-signatures -fno-warn-name-shadowing -fno-warn-orphans -fno-warn-type-defaults- build-depends: base, containers, array, parallel, fgl, QuickCheck, time, bytestring >= 0.9, pandoc, regexpr >= 0.3.4, parsec >= 2, utf8-string >= 0.3.3, directory, interpolatedstring-qq+ build-depends: base, containers, array, parallel, fgl, QuickCheck, time, bytestring >= 0.9, pandoc, regexpr >= 0.3.4, parsec >= 2, utf8-string >= 0.3.3, directory, interpolatedstring-qq, base64-string, zlib, old-locale, unix, filepath, template hs-source-dirs: src/ exposed-modules: MPS, MPSUTF8 other-modules: MPS.UTF8, MPS.Snippets, MPS.Hack.Dot
src/MPS/Snippets.hs view
@@ -1,36 +1,58 @@ module MPS.Snippets where +import MPS.Hack.Dot+import Prelude hiding ((.), sum, product, maximum, minimum, + foldl, foldr, foldl1, foldr1, concat, concatMap, and, or, any, all, elem, (^))+import qualified Prelude as Prelude+ import Control.Arrow ((&&&), (>>>)) import Control.Monad hiding (join) import Control.Parallel+ import Data.Char import Data.Maybe-import Data.Time.Calendar-import Numeric-import MPS.Hack.Dot-import Test.QuickCheck-import Text.RegexPR+import Data.Graph.Inductive (Gr, mkGraph)+import Data.Foldable+import Data.Time.Clock.POSIX+import Data.Time+import Data.List (transpose, sort, group, (\\), sortBy)+ import qualified Data.Array as A import qualified Data.List as L import qualified Data.Set as S import qualified Data.Graph as G import qualified Data.Map as M-import Data.Graph.Inductive (Gr, mkGraph)+import qualified Data.ByteString.Lazy.Char8 as B++import System.Locale+import System.Posix.Files+import System.IO+import System.Directory import qualified System.IO.Unsafe as Unsafe-import qualified Text.ParserCombinators.Parsec as P-import Data.Foldable-import Debug.Trace+++import Test.QuickCheck+import Text.RegexPR import Text.Pandoc+import Text.Template+import Text.InterpolatedString.QQ+import Text.ParserCombinators.Parsec (many, char, many1, digit, (<|>), Parser, anyChar, try)+import qualified Text.ParserCombinators.Parsec as P++import Codec.Binary.Base64.String as C import qualified Codec.Binary.UTF8.String as Codec-import System.Directory-import Text.ParserCombinators.Parsec (many, char, many1, digit, (<|>), Parser, anyChar)-import qualified Prelude as Prelude+import qualified Codec.Compression.GZip as GZip -import Prelude hiding ((.), sum, product, maximum, minimum, - foldl, foldr, foldl1, foldr1, concat, concatMap, and, or, any, all, elem, (^))-import Data.List (transpose, sort, group, (\\), sortBy)-import Text.InterpolatedString.QQ+import Debug.Trace+import Numeric +++++++ -- List join x xs = L.intercalate x xs join' xs = xs.concat@@ -137,10 +159,6 @@ -- Map to_h xs = xs.M.fromList ---- -- QuickCheck quick_check prop = quickCheck prop qc prop = quick_check prop@@ -378,16 +396,57 @@ return $ chr (read word) unescape_parser :: Parser String-unescape_parser = many (unicode_char <|> anyChar)+unescape_parser = many (try unicode_char <|> anyChar) unescape_unicode_xml s = parse unescape_parser s +escape_unicode_xml :: String -> String+escape_unicode_xml = concatMap fixChar+ where+ fixChar '<' = "<"+ fixChar '>' = ">"+ fixChar '&' = "&"+ fixChar '"' = "\""+ fixChar c | ord c < 0x80 = [c]+ fixChar c = "&#" ++ show (ord c) ++ ";"++ -- IO ls s = getDirectoryContents s <.> (\\ [".", ".."]) +file_size :: String -> IO Integer+file_size path = withFile (path.u2b) ReadMode hFileSize++file_mtime :: String -> IO UTCTime+file_mtime path = getFileStatus (path.u2b) + ^ modificationTime ^ realToFrac ^ posixSecondsToUTCTime++read_binary_file :: String -> IO String+read_binary_file path = path.u2b.B.readFile ^ B.unpack++get_permissions :: String -> IO Permissions+get_permissions path = getPermissions (path.u2b) ++get_current_directory :: IO String+get_current_directory = getCurrentDirectory ^ b2u+ -- Text filter_comment = lines >>> map strip >>> reject null >>> reject (head >>> (== '#')) >>> unlines +interpolate :: String -> [(String, String)] -> String+interpolate s params = B.unpack $ substitute (B.pack s) (context params)+ where + context = map packPair >>> to_h+ packPair (x, y) = (B.pack x, B.pack y)+ +-- Time+now :: IO UTCTime+now = getCurrentTime++format_time :: String -> UTCTime -> String+format_time = formatTime defaultTimeLocale++ -- UTF8 b2u = Codec.decodeString u2b = Codec.encodeString@@ -395,3 +454,9 @@ -- QQ here = istr++-- compress++zip64, unzip64 :: String -> String+zip64 = B.pack >>> GZip.compress >>> B.unpack >>> C.encode+unzip64 = C.decode >>> B.pack >>> GZip.decompress >>> B.unpack