0.1.0 • Published 10 years ago

allegory v0.1.0

Weekly downloads
3
License
Beerware
Repository
github
Last release
10 years ago

Allegory

Turns JavaScript code into an executable ascii image (such as this one):

eval(atob("\
dmFyIGpxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CmpxLnNyYyA9ICIvL2N \
vZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMS4wLm1pbi5qcyI7CmRvY3VtZW50LmdldEVsZW1lbn \
RzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoanEpOwoKdmFyIGdsYXNzZXMgPSAxL \
jA7CmZ1bmN0aW9uIGRydW5raWZ5KCQpIHsKCXZhciB0cmFuc2Zvcm1hdGlvbnMgPSBbewoJCW5h \
bWU6ICdyb3RhdGUnLAoJCXZhbHVlOiBmdW5jdGlvbiAoZSkgewoJCQlyZXR1cm4gZ2xhc3NlcyA \
qICgoTWF0aC5yYW5kb20oKSAqIDIpIC0gMSkgLyAoNTAgLyAoZS5wYXJlbnRzKCkubGVuZ3RoKS \
k7CgkJfSwKCQl1bml0OiAnZGVnJwoJfSwgewoJCW5hbWU6ICdzY2FsZScsCgkJdmFsdWU6IGZ1b \
mN0aW9uIChlKSB7CgkJCXJldHVybiBnbGFzc2VzICogKDEgKyAoKChNYXRoLnJhbmRvbSgpICog \
MikgLSAxKSAvICgxMDAwIC8gK   GUu     cGFyZW5      0cygpLmxlbmd0aCkpKSk7CgkJf \
QoJfS8qLCB7CgkJbmFtZTog                               J3NrZXdYJywKCQl2YWx1Z \
TogZnVuY3Rpb24gKCkgew                                 oJCQlyZXR1cm4gKChNYXR \
oLnJhbmRvbSgpICogMik  g  L S                     A x           KSAvIDI7CgkJ \
fSwKCQl1bml0OiAnZGVn     J   woJ           fSovX   T              sKCgkkKCc \
qJykuY3NzKCctd2Via2l0 L  X      RyYW5zaXRpb        2  4nLCAnL     XdlYmtpdC \
10cmFuc2Zvcm0gM3MnKTs    K                         C  gl2YXIgZ    WFzaW5ncy \
A9IFsnZWFzZScsICdlYXNl   L  W                      l  uJywgJ2V    hc2Utb3V0 \
JywgJ2Vhc2UtaW4tb3V0Jyw  g           J        2    x  pbmVhcic    sCgkJJ2N1 \
YmljLWJlemllcigwLjYsIDA  u   MD          Q         s  IDAuOTgs    IDAuMzM1K \
ScsICdjdWJpYy1iZXppZXIo  M                         C  4xNzUsID    AuODg1LCA \
wLjMyLCAxLjI3NSknLAoJCS  d  j      d               W  JpYy1iZX    ppZXIoMC4 \
yMywgMSwgMC4zMiwgMSknLC  A                 nY      3  ViaWMtYm    V6aWVyKDA \
uNzg1LCAwLjEzNSwgMC4xNS  w                         g  MC44Nikn    LAoJCSdjd \
WJpYy1iZXppZXIoMC43Nywg  M          Cw    g        M  C4xNzUs    IDEpJwoJXT \
sKCXZhciBjb21wdXRlRWFza  W   5nI                   D  0gZnV     uY3Rpb24oZS \
kgewoJCXJldHVybiBlYXNpb  m                  dz     W  01h     dGguZmxvb3IoK \
E1hdGgucmFuZG9tKCkgKiAx  M       D                 A        pICUgZWFzaW5ncy \
5sZW5ndGgpXTsKCX07CgoJd  m                  F      y     IGNvbXB1dGVUcmFuc2 \
Zvcm1zID0gZnVuY3Rpb24gK  G     U                   p  IHsKCQlyZXR1cm4gdHJhb \
nNmb3JtYXRpb25zLm1hcChm   d          W           5    jdGlvbiAodCkgewoJCQly \
ZXR1cm4gdC5uYW1lICsgJyg     nIC             sgdC      52YWx1ZShlKSArICh0LnV \
uaXQgPyB0LnVuaXQgOiAnJyk        gKyAnKSc7Cg          kJfSkuam9pbignICcpOwoJ \
fTsKCgl2YXIgY29tcHV0ZXJGaWx                      0ZXJzID0gZnVuY3Rpb24gKGUpI \
HsKCQlyZXR1cm4gJ2JsdXIoJyArIE1hdGgucmFuZG9tKCkgKyAncHgpJzsKCX07CgoJd2luZG93 \
LnNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKCQkkKCcqJykuZWFjaChmdW5jdGlvbiAoaSwgZSk \
gewoJCQkkKGUpLmNzcygnLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIGNvbX \
B1dGVFYXNpbmcoJChlKSkpOwoJCQkkKGUpLmNzcygndHJhbnNmb3JtJywgY29tcHV0ZVRyYW5zZ \
m9ybXMoJChlKSkpOwoJCQkkKGUpLnBhcmVudHMoKS5sZW5ndGggPiA0ICYmICQoZSkuY3NzKCct \
d2Via2l0LWZpbHRlcicsIGNvbXB1dGVyRmlsdGVycygpKTsKCQkJZ2xhc3NlcyA9IGdsYXNzZXM \
gKyAwLjAwMDAwMDAwMDAwMDE7CgkJfSk7Cgl9LCAzMDAwKTsKfQoKc2V0VGltZW91dChmdW5jdG \
lvbigpIHsKCWRydW5raWZ5KGpRdWVyeSk7Cn0sIDEwMDApOw==                        "));

Install

npm install allegory

Note: The code uses generators (--harmony flag)

How it works

Write JavaScript in a file, say code.js

function sayHii() {
	alert("h!");
}

sayHii();

And then draw something with * on another file, say template

         ***           **     **
        *****          **
         ***           *****  **
          *            ** **  **
     ************      ** **  **
          *            ** **  **
          *
          *
         * *
        *   *
       *     *
      *       *

then you can

allegory code.js template

and you get

eval(atob("\
         ZnV           uY     3R \
        pb24g          c2        \
         F5S           GlpKC  kg \
          e            wo JY  Wx \
     lcnQoImghIik      7C n0  KC \
          n            Nh eU  hp \
          a                      \
          S                      \
         g p                     \
        O   w                    \
       o     =                   \
                                "));

Open your chrome console, copy/paste it, and you get an alert.