summaryrefslogtreecommitdiff
path: root/src/morpho-server/URLEncoding.hs
blob: ad5fb0dd954e212063671afe83a6196698b7b435 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module URLEncoding where

import Data.Bits (shiftL, (.|.))
import Data.Char (chr,digitToInt,isHexDigit)


urlDecodeUnicode :: String -> String
urlDecodeUnicode [] = ""
urlDecodeUnicode ('%':'u':x1:x2:x3:x4:s) 
    | all isHexDigit [x1,x2,x3,x4] =
    chr (    digitToInt x1 `shiftL` 12 
         .|. digitToInt x2 `shiftL` 8
         .|. digitToInt x3 `shiftL` 4
         .|. digitToInt x4) : urlDecodeUnicode s
urlDecodeUnicode ('%':x1:x2:s) | isHexDigit x1 && isHexDigit x2 =
    chr (    digitToInt x1 `shiftL` 4
         .|. digitToInt x2) : urlDecodeUnicode s
urlDecodeUnicode (c:s) = c : urlDecodeUnicode s