1.0.6 โ€ข Published 7 years ago

zany v1.0.6

Weekly downloads
6
License
MIT
Repository
github
Last release
7 years ago

coverage build

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.