2022-05-27 13:39:12 -06:00
|
|
|
|
const glyphs = [
|
|
|
|
|
"\\x00", "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\x07",
|
|
|
|
|
"\\x08", "\\x09", "\\x0A", "\\x0B", "\\x0C", "\\x0D", "\\x0E", "\\x0F",
|
|
|
|
|
"⏵", "⏴", "↕", "‼", "¶", "§", "‽", "↨", "↑", "↓", "→", "←", "∟", "↔", "⏶", "⏷",
|
|
|
|
|
" ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/",
|
|
|
|
|
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?",
|
|
|
|
|
"@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
|
|
|
|
|
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_",
|
|
|
|
|
"`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
|
|
|
|
|
"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "⌂",
|
|
|
|
|
|
|
|
|
|
"Ç", "ü", "é", "â", "ä", "à", "å", "ç", "ê", "ë", "è", "ï", "î", "ì", "Ä", "Å",
|
|
|
|
|
"É", "æ", "Æ", "ô", "ö", "ò", "û", "ù", "ÿ", "Ö", "Ü", "¢", "£", "¥", "₧", "ƒ",
|
|
|
|
|
"á", "í", "ó", "ú", "ñ", "Ñ", "ª", "º", "¿", "⌐", "¬", "½", "¼", "¡", "«", "»",
|
|
|
|
|
"░", "▒", "▓", "│", "┤", "╡", "╢", "╖", "╕", "╣", "║", "╗", "╝", "╜", "╛", "┐",
|
|
|
|
|
"└", "┴", "┬", "├", "─", "┼", "╞", "╟", "╚", "╔", "╩", "╦", "╠", "═", "╬", "╧",
|
|
|
|
|
"╨", "╤", "╥", "╙", "╘", "╒", "╓", "╫", "╪", "┘", "┌", "█", "▄", "▌", "▐", "▀",
|
|
|
|
|
"α", "ß", "Γ", "π", "Σ", "σ", "µ", "τ", "Φ", "Θ", "Ω", "δ", "∞", "φ", "ε", "∩",
|
|
|
|
|
"≡", "±", "≥", "≤", "⌠", "⌡", "÷", "≈", "°", "∞", "⊻", "√", "ⁿ", "²", "■", "¤",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Encode a buffer using fluffy glyphs
|
|
|
|
|
*
|
|
|
|
|
* @param {Uint8Array} buf Buffer to encode
|
|
|
|
|
* @returns {String} Glyph-encoded string
|
|
|
|
|
*/
|
|
|
|
|
function Stringify(buf) {
|
|
|
|
|
let ret = []
|
|
|
|
|
for (let i of buf) {
|
|
|
|
|
ret.push(glyphs[i])
|
|
|
|
|
}
|
|
|
|
|
return ret.join("")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hex encode a buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {Uint8Array} buf Buffer to encode
|
|
|
|
|
* @returns {String} Hexlified version
|
|
|
|
|
*/
|
|
|
|
|
function Hexlify(buf) {
|
|
|
|
|
let ret = []
|
|
|
|
|
for (let b of buf) {
|
|
|
|
|
let hex = "00" + b.toString(16)
|
|
|
|
|
ret.push(hex.slice(-2))
|
|
|
|
|
}
|
|
|
|
|
return ret.join(" ")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Hex decode a string
|
|
|
|
|
*
|
|
|
|
|
* @param {String} str String to decode
|
|
|
|
|
* @returns {Uint8Array} Decoded array
|
|
|
|
|
*/
|
|
|
|
|
function Unhexlify(str) {
|
2022-05-27 14:45:22 -06:00
|
|
|
|
let a = []
|
|
|
|
|
let match = str.match(/[0-9a-fA-F]{2}/g) || []
|
|
|
|
|
for (let m of match) {
|
|
|
|
|
a.push(parseInt(m, 16))
|
|
|
|
|
}
|
2022-05-27 13:39:12 -06:00
|
|
|
|
return new Uint8Array(a)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Read a NULL-Terminated string from a buffer.
|
|
|
|
|
*
|
|
|
|
|
* @param {Uint8Arrary} buf Buffer to read
|
|
|
|
|
* @param {Boolean} includeNull True to include the trailing NUL
|
|
|
|
|
* @returns {Uint8Array} String
|
|
|
|
|
*/
|
|
|
|
|
function CString(buf, includeNull=false) {
|
|
|
|
|
let end = buf.indexOf(0)
|
|
|
|
|
if (end == -1) {
|
|
|
|
|
return buf
|
|
|
|
|
}
|
|
|
|
|
return buf.slice(0, end + (includeNull?1:0))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Unescapes a string with things like "\x02" in it.
|
|
|
|
|
*
|
|
|
|
|
* @param {String} str String to unescape
|
|
|
|
|
* @returns {String} Unescaped string
|
|
|
|
|
*/
|
|
|
|
|
function Unescape(str) {
|
2022-06-09 16:20:11 -06:00
|
|
|
|
return str.replaceAll(/\\x?([0-9a-fA-F]+)/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)))
|
2022-05-27 13:39:12 -06:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export {Stringify, Hexlify, Unhexlify, CString, Unescape}
|