From d32a26d93307a4161fd02611a54a648c448bed0e Mon Sep 17 00:00:00 2001 From: haskellcamargo Date: Thu, 26 Feb 2015 23:49:01 -0300 Subject: [PATCH] Implemented functions for string: strtoupper, strtolower --- StringFunctions.hs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/StringFunctions.hs b/StringFunctions.hs index dda4e67..410a3b3 100644 --- a/StringFunctions.hs +++ b/StringFunctions.hs @@ -4,9 +4,28 @@ import Tokenizer import Evaluator import Conversion import Control.Monad.Error +import Data.Char -functions = [("strlen", phpStrLen)] +functions :: [(String, PHPFunctionType)] +functions = [ ("strlen", phpStrLen) + , ("strtoupper", phpStrToUpper) + , ("strtolower", phpStrToLower)] + +-- Conversion of a PHPString for a Haskell [Char] +toHaskellStr :: PHPValue -> String +toHaskellStr x = stringFromPHPValue $ castToString x + +-- Throws an arity error +arityErrorFor f = throwError $ Default $ "Wrong number of arguments to " ++ f phpStrLen :: PHPFunctionType -phpStrLen (s:[]) = return $ PHPInt $ toInteger $ length $ stringFromPHPValue $ castToString s -phpStrLen _ = throwError $ Default "Wrong number of arguments to strlen" +phpStrLen (s:[]) = return $ PHPInt $ toInteger $ length $ toHaskellStr s +phpStrLen _ = arityErrorFor "strlen" + +phpStrToUpper :: PHPFunctionType +phpStrToUpper (s:[]) = return $ PHPString $ map toUpper $ toHaskellStr s +phpStrToUpper _ = arityErrorFor "strtoupper" + +phpStrToLower :: PHPFunctionType +phpStrToLower (s:[]) = return $ PHPString $ map toLower $ toHaskellStr s +phpStrToLower _ = arityErrorFor "strtolower"