1%%% Copyright (C) 2009 Enrique Marcote, Miguel Rodriguez 2%%% All rights reserved. 3%%% 4%%% Redistribution and use in source and binary forms, with or without 5%%% modification, are permitted provided that the following conditions are met: 6%%% 7%%% o Redistributions of source code must retain the above copyright notice, 8%%% this list of conditions and the following disclaimer. 9%%% 10%%% o Redistributions in binary form must reproduce the above copyright notice, 11%%% this list of conditions and the following disclaimer in the documentation 12%%% and/or other materials provided with the distribution. 13%%% 14%%% o Neither the name of ERLANG TRAINING AND CONSULTING nor the names of its 15%%% contributors may be used to endorse or promote products derived from this 16%%% software without specific prior written permission. 17%%% 18%%% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19%%% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20%%% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21%%% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22%%% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23%%% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24%%% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25%%% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26%%% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27%%% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28%%% POSSIBILITY OF SUCH DAMAGE. 29-module(cl_url). 30 31%%% EXTERNAL EXPORTS 32-export([decode/1, encode/1]). 33 34%%%----------------------------------------------------------------------------- 35%%% EXTERNAL EXPORTS 36%%%----------------------------------------------------------------------------- 37decode([$%, X, Y | T]) -> 38 [erlang:list_to_integer([X, Y], 16) | decode(T)]; 39decode([$+ | T]) -> 40 [32 | decode(T)]; 41decode([H | T]) -> 42 [H | decode(T)]; 43decode([]) -> 44 []. 45 46 47encode([H | T]) when H >= $a, H =< $z -> 48 [H | encode(T)]; 49encode([H | T]) when H >= $A, H =< $Z -> 50 [H | encode(T)]; 51encode([H | T]) when H >= $0, H =< $9 -> 52 [H | encode(T)]; 53encode([H | T]) when H == $_; H == $.; H == $- -> 54 [H | encode(T)]; 55encode([32 | T]) -> 56 [$+ | encode(T)]; 57encode([H | T]) -> 58 case erlang:integer_to_list(H, 16) of 59 [X, Y] -> 60 [$%, X, Y | encode(T)]; 61 [X] -> 62 [$%, $0, X | encode(T)] 63 end; 64encode([]) -> 65 []. 66