1.0.6 โข Published 7 years ago
zany v1.0.6
Zany Encoder
Encode & decode any text into any custom alphabet, multibyte code points supported.
Install
npm i zany
Example
var zany=require("zany")
,{encode,decode}=zany(zany.block.EGYPTIAN_HIEROGLYPHS)//for example
,message="secret message to encode!"
,encoded=encode(message)//๐๐
๐๐๐ท๐๐๐ณ๐๐ก๐๐๐๐๐๐๐๐๐๐๐๐
,decoded=decode(encoded)//===message
Characters grouped by Unicode 9.0 blocks
are available at zany.block.*
via lazy-unicode.
More Examples
var zany=require("zany")
,message="How now brown cow?"
,alphabets={ //make up some alphabets
food:`๐๐๐๐๐๐๐๐๐๐๐๐๐๐
๐ ๐ข๐ฃ๐ค๐ฅ๐ก๐ฆ๐ง๐จ๐ฉ๐ช๐๐ฐ๐ซ๐ฌ๐ญ๐ฎ๐ฏ`
,faces:`๐๐๐๐๐๐
๐๐๐๐๐๐๐๐๐๐๐๐๐๐ถ๐๐ฃ๐ฅ๐ฎ๐ช๐ซ๐๐๐๐๐๐๐๐๐๐๐๐ญ๐จ๐ฉ๐ฌ๐ฐ๐ฑ๐ณ๐ต๐ก๐ ๐`
,animals:`๐๐ต๐๐ถ๐๐ฉ๐บ๐ฑ๐๐ฏ๐
๐๐ด๐๐ฎ๐๐๐๐ท๐๐๐ฝ๐๐๐ซ๐๐ญ๐๐๐น๐ฐ๐๐ฟ๐ผ๐พ๐๐ค๐ฅ๐ฆ๐ง๐๐ท`
,whitespace:`โโโโโโ
โโโโโโฉโฏ`
,zwsp:`โชโญโ โกโขโฃโคโฆโงโจโฉโชโซโฌโญโฎโฏ๐ฒ ๐ฒก๐ฒข๐ฒฃ๐
ณ๐
ด๐
ต๐
ถ๐
ท๐
ธ๐
น๐
บ๓ `
//or use predefined blocks
,futhark :zany.block.RUNIC
,cuneiform:zany.block.CUNEIFORM
,cards :zany.block.PLAYING_CARDS
,dominoes :zany.block.DOMINO_TILES
,boxes :zany.block.BOX_DRAWING
,braille :zany.block.BRAILLE_PATTERNS//(note this does not make READABLE braille!)
,zalgo :zany.block.ZALGO
}
for(var i in alphabets){
var {encode,decode}=zany(alphabets[i])
,e=encode(message)
,d=decode(`characters not part ${e} of the original alphabet will be discarded`)
console.log(`${i}(${alphabets[i].length}):${e}//${d}`)
}
/*outputs:
food(64):๐๐๐
๐๐๐ค๐๐๐๐๐๐๐๐๐ง๐ฉ๐๐๐๐๐๐๐ฃ๐ฉ๐๐ฅ๐ก๐๐๐ข๐ง๐๐๐๐๐๐//How now brown cow?
faces(96):๐ซ๐๐๐ฃ๐ช๐๐๐๐๐๐๐ญ๐ซ๐๐ช๐ฌ๐๐
๐๐ฌ๐๐๐๐๐๐๐๐๐๐๐จ๐//How now brown cow?
animals(84):๐น๐ด๐๐๐ง๐๐๐๐ซ๐๐๐ฉ๐ด๐๐๐ฎ๐๐ฑ๐ต๐ด๐๐๐ถ๐๐๐ฏ๐๐๐๐ฆ๐๐ญ//How now brown cow?
whitespace(13):โโโ
โโโโโโโโโโโโโโโโโโโโโโโ
โฏโโโโโโโโฏโโ
โโโ
โโโโ//How now brown cow?
zwsp(43):โ โช๓ โชโ ๐
ท๐
ท๐
ธโชโกโฆโชโ โงโคโฌโชโ โฉ๐ฒขโชโฌโญโคโช๐
ณโก๐
ทโช๐ฒ ๐
ด๐ฒ โชโก๐ฒก๐ฒข๐ฒฃ//How now brown cow?
futhark(97):แญแจแ แฅแธแฏแ แกแ แคแพแขแ แฌแกแ แขแชแฒแ แขแฑแงแ แขแแขแ แงแทแก//How now brown cow?
cuneiform(2050):๐๐๐๐ญ๐ฏ๐๐๐๐๐ข๐๐๐ก๐๐๐ฒ๐๐๐๐๐๐๐๐ฟ๐//How now brown cow?
cards(194):๐ญ๐จ๐ ๐ฅ๐ธ๐ฏ๐ ๐ก๐ ๐ค๐พ๐ข๐ ๐ฌ๐ก๐ ๐ข๐ช๐ฒ๐ ๐ข๐ฑ๐ง๐ ๐ข๐๐ข๐ ๐ง๐ท๐ก//How now brown cow?
dominoes(226):๐ป๐๐ฐ๐ด๐ต๐๐ฐ๐ฑ๐ฐ๐ณ๐ ๐๐ฐ๐ป๐ฑ๐ฐ๐๐๐ฐ๐ฒ๐๐๐ฐ๐ฒ๐พ๐๐ฐ๐ถ๐น๐ฑ//How now brown cow?
boxes(129):โโโโโขโฏโโโโโฎโขโโโกโโโฒโโโ
โโโฏโโโโฒโ//How now brown cow?
braille(257):โ
โขโ โขฑโฃฏโ โกโ โกทโฃขโ โ
โกกโ โ จโกฒโ โกโ โ โ ธโ โ โฃนโข//How now brown cow?
zalgo(125):ฬฬฏอฬแทฬฆอออฬ๏ธกฬนอฬฬ
ออฬนอฬฬฬชอแทออฬ
ฬฬ
//How now brown cow?
*/
Or, if you have too many friends, define a semantic whitespace decoder in one file:
\u1160=x=>eval(zany(`โชโญโ โกโขโฃโคโฆโงโจโฉโชโซโฌโญโฎโฏ๐ฒ ๐ฒก๐ฒข๐ฒฃ๐
ณ๐
ด๐
ต๐
ถ๐
ท๐
ธ๐
น๐
บ๓ `).decode(x))
Then somewhere, far, far away that shares scope, execute it:
แ
`โ โฏโชโชโฎ๐
นโฆโชโกโงโขโชโกโฃ๐
ถ๐
ถโช๐ฒ โญโ โชโ โญโฆโฏโชโญ๐
นโชโฏโคโฎโชโ ๐ฒฃโ ๐ฒฃโช๐ฒก๐
ตโกโชโ โชโฆ๐
ธโชโจ๐ฒขโชโฃ๐
นโซโชโ โช๐ฒ ๐ฒขโช๐ฒกโ โฌโชโกโชโฆ๐ฒฃโชโฎ๐ฒก๐
ตโชโฃ๐
ธโฏโชโฉ๐
ตโ โชโ โช๐
ธโญโชโกโก๐
ธ๐ฒกโชโฉ๐
ถ๐ฒ โชโ ๐
ถโฆโฆโชโฎ๐ฒขโฃโชโ ๐ฒฃโญ๐
บโชโ โจโช๐ฒกโ โชโช๐
ทโช๐ฒ โชโฌโฉโฏโชโซ๐
ตโขโชโ โชโงโญโชโช๐ฒฃ๐ฒขโชโ โฎโ โญโชโ ๐ฒขโฉโช๐ฒฃโฏโงโชโ โญ๐
ถโซโชโกโกโฆโฌโชโ ๐
ณ๐
น๐
ด`
Too obvious? How about now?
(()=>{แ
`use strictโ โฏโชโชโฎ๐
นโฆโชโกโงโขโชโกโฃ๐
ถ๐
ถโช๐ฒ โญโ โชโ โญโฆโฏโชโญ๐
นโชโฏโคโฎโชโ ๐ฒฃโ ๐ฒฃโช๐ฒก๐
ตโกโชโ โชโฆ๐
ธโชโจ๐ฒขโชโฃ๐
นโซโชโ โช๐ฒ ๐ฒขโช๐ฒกโ โฌโชโกโชโฆ๐ฒฃโชโฎ๐ฒก๐
ตโชโฃ๐
ธโฏโชโฉ๐
ตโ โชโ โช๐
ธโญโชโกโก๐
ธ๐ฒกโชโฉ๐
ถ๐ฒ โชโ ๐
ถโฆโฆโชโฎ๐ฒขโฃโชโ ๐ฒฃโญ๐
บโชโ โจโช๐ฒกโ โชโช๐
ทโช๐ฒ โชโฌโฉโฏโชโซ๐
ตโขโชโ โชโงโญโชโช๐ฒฃ๐ฒขโชโ โฎโ โญโชโ ๐ฒขโฉโช๐ฒฃโฏโงโชโ โญ๐
ถโซโชโกโกโฆโฌโชโ ๐
ณ๐
น๐
ด`
//regular code la la la
})()
Good thing use strict
is only meaningful within "
or '
!
How it Works
Your message โ pieroxy's Lempel-Ziv โ code points10 โ charactersinput alphabet delimited by 1st item
Encoding throws out repeat code points in the given alphabet.
Decoding throws out code points not in the encoding alphabet.
Why do this?
Why are Egyptian hieroglyphics valid javascript variable names?
The answer is don't think about it.