Patch title: Release 87 bulk changes
Abstract:
File: /pliant/util/encoding/http.pli
Key:
    Removed line
    Added line
abstract
  [HTTP protocol encoding/decoding]

module "/pliant/language/unsafe.pli"
module "general.pli"

gvar (Array uInt8 256) http_code := general_code "_"
http_code " ":number := "+" number

# the standard HTTP encoding

gvar (Array uInt8 256) http_code := general_code "_.:@/$-+!*'(),"

function http_encode clear -> encoded
  arg Str clear encoded
  encoded := general_encode clear "%":number http_code

function http_decode encoded -> ascii
  arg Str encoded ascii
  ascii := general_decode (replace encoded "+" " ") "%":number
  ascii := general_decode encoded "%":number

export http_encode http_decode


# slash encoding is the minimal encoding to remove '/' in order to prepare futher parsing

gvar (Array uInt8 256) slash_code
function setup
  for (var Int u) 0 255
    slash_code u := shunt u<>"%":number and u<>"/":number u 0
setup

function http_slash_encode clear -> encoded
  arg Str clear encoded
  encoded := general_encode clear "%":number slash_code

function http_slash_decode encoded -> ascii
  arg Str encoded ascii
  ascii := general_decode encoded "%":number

export http_slash_encode http_slash_decode