mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
46 lines
1.7 KiB
Mathematica
46 lines
1.7 KiB
Mathematica
;
|
|
; This file is part of DataBallet.
|
|
; Copyright (C) 2012 Laurent Parenteau <laurent.parenteau@gmail.com>
|
|
;
|
|
; DataBallet is free software: you can redistribute it and/or modify
|
|
; it under the terms of the GNU Affero General Public License as
|
|
; published by the Free Software Foundation, either version 3 of the
|
|
; License, or (at your option) any later version.
|
|
;
|
|
; DataBallet is distributed in the hope that it will be useful,
|
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
; GNU Affero General Public License for more details.
|
|
;
|
|
; You should have received a copy of the GNU Affero General Public License
|
|
; along with DataBallet. If not, see <http://www.gnu.org/licenses/>.
|
|
;
|
|
|
|
encode(message)
|
|
;
|
|
; Return base64 with URL and Filename safe alphabet (RFC 4648)
|
|
;
|
|
new base64,todrop,i
|
|
|
|
; Populate safe alphabet values on first use only.
|
|
if '$data(base64safe) do
|
|
. for i=0:1:25 set base64safe(i)=$zchar(65+i),base64safe(i+26)=$zchar(97+i)
|
|
. for i=52:1:61 set base64safe(i)=$zchar(i-4)
|
|
. set base64safe(62)="-",base64safe(63)="_"
|
|
|
|
; Pad message with 0 to ensure number of bytes is a multiple of 3.
|
|
set todrop=0
|
|
for quit:($zlength(message)#3)=0 set message=message_$zchar(0) set todrop=todrop+1
|
|
|
|
; Base64 encode the message
|
|
set base64=""
|
|
for i=1:3:$zlength(message) do
|
|
. set base64=base64_base64safe($zascii(message,i)\4)
|
|
. set base64=base64_base64safe(($zascii(message,i)#4*16)+($zascii(message,i+1)\16))
|
|
. set base64=base64_base64safe(($zascii(message,i+1)#16*4)+($zascii(message,i+2)\64))
|
|
. set base64=base64_base64safe($zascii(message,i+2)#64)
|
|
|
|
set:todrop'=0 base64=$zextract(base64,1,$zlength(base64)-todrop)
|
|
|
|
quit base64
|