From 1ec7e8cc211d8fec2aa2be2afe5dde087ab1070c Mon Sep 17 00:00:00 2001 From: Bob Omb Date: Thu, 3 Dec 2015 20:51:13 -0800 Subject: [PATCH] libs cleanup --- README.md | 1 + init.lua | 495 +++++----- .../graphicsmagick}/Image.lua | 0 .../graphicsmagick}/README.md | 0 .../graphicsmagick}/convert.lua | 0 .../graphicsmagick}/exif.lua | 0 .../graphicsmagick-1.scm-0.rockspec | 0 .../graphicsmagick}/info.lua | 0 .../graphicsmagick}/init.lua | 0 .../graphicsmagick}/test/affine.lua | 0 .../graphicsmagick}/test/city-corrupt.jpg | Bin .../graphicsmagick}/test/city.jpg | Bin .../graphicsmagick}/test/colorspace.lua | 0 .../graphicsmagick}/test/corrupt.lua | 0 .../graphicsmagick}/test/forest.jpg | Bin .../graphicsmagick}/test/fromTensor.lua | 0 .../graphicsmagick}/test/gamma.lua | 0 .../graphicsmagick}/test/gamma_3x3.jpg | Bin .../graphicsmagick}/test/lena.jpg | Bin .../graphicsmagick}/test/loadDirectory.lua | 0 .../graphicsmagick}/test/loadsave.lua | 0 .../graphicsmagick}/test/opacity.lua | 0 .../graphicsmagick}/test/sampling_factors.lua | 0 .../graphicsmagick}/test/thumb.lua | 0 .../graphicsmagick}/test/toTensor.lua | 0 .../graphicsmagick}/test/transform.lua | 0 .../lua-imagesize-1.2}/COPYRIGHT | 0 .../lua-imagesize-1.2}/Changes | 0 .../lua-imagesize-1.2}/MANIFEST | 0 .../lua-imagesize-1.2}/Makefile | 0 .../lua-imagesize-1.2}/doc/lua-imagesize.3 | 0 .../lua-imagesize-1.2}/doc/lua-imagesize.pod | 0 .../lua-imagesize-1.2}/imagesize.lua | 0 .../imagesize/format/bmp.lua | 0 .../imagesize/format/gif.lua | 0 .../imagesize/format/jpeg.lua | 0 .../imagesize/format/mng.lua | 0 .../imagesize/format/pcd.lua | 0 .../imagesize/format/png.lua | 0 .../imagesize/format/pnm.lua | 0 .../imagesize/format/psd.lua | 0 .../imagesize/format/swf.lua | 0 .../imagesize/format/tiff.lua | 0 .../imagesize/format/xbm.lua | 0 .../imagesize/format/xcf.lua | 0 .../imagesize/format/xpm.lua | 0 .../lua-imagesize-1.2}/imagesize/util.lua | 0 .../lua-imagesize-1.2}/lunit-console.lua | 0 .../lua-imagesize-1.2}/lunit.lua | 0 .../lua-imagesize-1.2}/test/data/468x60.psd | Bin .../lua-imagesize-1.2}/test/data/8.swf | Bin .../lua-imagesize-1.2}/test/data/DUTCH1.mng | Bin .../lua-imagesize-1.2}/test/data/anim.gif | Bin .../lua-imagesize-1.2}/test/data/anim.xcf | Bin .../lua-imagesize-1.2}/test/data/bexjdic.tif | Bin .../lua-imagesize-1.2}/test/data/letter_N.pbm | Bin .../lua-imagesize-1.2}/test/data/letter_N.pgm | Bin .../lua-imagesize-1.2}/test/data/letter_N.ppm | Bin .../lua-imagesize-1.2}/test/data/letter_T.jpg | Bin .../lua-imagesize-1.2}/test/data/lexjdic.tif | Bin .../lua-imagesize-1.2}/test/data/old-os2.bmp | Bin .../lua-imagesize-1.2}/test/data/pak38.jpg | Bin .../lua-imagesize-1.2}/test/data/pass-1_s.png | Bin .../lua-imagesize-1.2}/test/data/spacer50.xbm | 0 .../lua-imagesize-1.2}/test/data/test.gif | Bin .../lua-imagesize-1.2}/test/data/xterm.bmp | Bin .../lua-imagesize-1.2}/test/data/xterm.xpm | 0 .../lua-imagesize-1.2}/test/data/xv-thumbnail | Bin .../lua-imagesize-1.2}/test/data/yasp.swf | Bin .../lua-imagesize-1.2}/test/formats.lua | 0 .../lua-imagesize-1.2}/test/util.lua | 0 .../lua-imlib2}/DOCUMENTATION.mkd | 0 {lua-imlib2 => lib/lua-imlib2}/LICENSE | 0 {lua-imlib2 => lib/lua-imlib2}/Makefile | 0 {lua-imlib2 => lib/lua-imlib2}/README.mkd | 0 {lua-imlib2 => lib/lua-imlib2}/TODO | 0 .../lua-imlib2}/examples/checkerboard.lua | 0 .../lua-imlib2}/examples/sierpinski.lua | 0 .../lua-imlib2}/examples/wallpaper.lua | 0 {lua-imlib2 => lib/lua-imlib2}/imlib2.lua | 0 {lua-imlib2 => lib/lua-imlib2}/limlib2.c | 0 .../lua-imlib2}/lua-imlib2-dev-1.rockspec | 0 .../lua-imlib2}/test/border_test.lua | 0 .../lua-imlib2}/test/color_test.lua | 0 .../lua-imlib2}/test/font_test.lua | 0 .../lua-imlib2}/test/gradient_test.lua | 0 .../lua-imlib2}/test/imlib2_test.lua | 0 .../lua-imlib2}/test/polygon_test.lua | 0 {luasocket => lib/luasocket}/.gitignore | 0 {luasocket => lib/luasocket}/.travis.yml | 0 {luasocket => lib/luasocket}/FIX | 0 {luasocket => lib/luasocket}/LICENSE | 0 {luasocket => lib/luasocket}/Lua51.props | 0 {luasocket => lib/luasocket}/Lua52.props | 0 {luasocket => lib/luasocket}/NEW | 0 {luasocket => lib/luasocket}/README | 0 {luasocket => lib/luasocket}/TODO | 0 {luasocket => lib/luasocket}/WISH | 0 {luasocket => lib/luasocket}/doc/dns.html | 0 {luasocket => lib/luasocket}/doc/ftp.html | 0 {luasocket => lib/luasocket}/doc/http.html | 0 {luasocket => lib/luasocket}/doc/index.html | 0 .../luasocket}/doc/installation.html | 0 .../luasocket}/doc/introduction.html | 0 {luasocket => lib/luasocket}/doc/ltn12.html | 0 {luasocket => lib/luasocket}/doc/lua05.ppt | Bin .../luasocket}/doc/luasocket.png | Bin {luasocket => lib/luasocket}/doc/mime.html | 0 .../luasocket}/doc/reference.css | 0 .../luasocket}/doc/reference.html | 0 {luasocket => lib/luasocket}/doc/smtp.html | 0 {luasocket => lib/luasocket}/doc/socket.html | 0 {luasocket => lib/luasocket}/doc/tcp.html | 0 {luasocket => lib/luasocket}/doc/udp.html | 0 {luasocket => lib/luasocket}/doc/url.html | 0 {luasocket => lib/luasocket}/etc/README | 0 {luasocket => lib/luasocket}/etc/b64.lua | 0 .../luasocket}/etc/check-links.lua | 0 .../luasocket}/etc/check-memory.lua | 0 {luasocket => lib/luasocket}/etc/cookie.lua | 0 {luasocket => lib/luasocket}/etc/dict.lua | 0 {luasocket => lib/luasocket}/etc/dispatch.lua | 0 {luasocket => lib/luasocket}/etc/eol.lua | 0 {luasocket => lib/luasocket}/etc/forward.lua | 0 {luasocket => lib/luasocket}/etc/get.lua | 0 {luasocket => lib/luasocket}/etc/links | 0 {luasocket => lib/luasocket}/etc/lp.lua | 0 {luasocket => lib/luasocket}/etc/qp.lua | 0 {luasocket => lib/luasocket}/etc/tftp.lua | 0 {luasocket => lib/luasocket}/gem/ex1.lua | 0 {luasocket => lib/luasocket}/gem/ex10.lua | 0 {luasocket => lib/luasocket}/gem/ex11.lua | 0 {luasocket => lib/luasocket}/gem/ex12.lua | 0 {luasocket => lib/luasocket}/gem/ex2.lua | 0 {luasocket => lib/luasocket}/gem/ex3.lua | 0 {luasocket => lib/luasocket}/gem/ex4.lua | 0 {luasocket => lib/luasocket}/gem/ex5.lua | 0 {luasocket => lib/luasocket}/gem/ex6.lua | 0 {luasocket => lib/luasocket}/gem/ex7.lua | 0 {luasocket => lib/luasocket}/gem/ex8.lua | 0 {luasocket => lib/luasocket}/gem/ex9.lua | 0 {luasocket => lib/luasocket}/gem/gem.c | 0 {luasocket => lib/luasocket}/gem/gt.b64 | 0 {luasocket => lib/luasocket}/gem/input.bin | Bin {luasocket => lib/luasocket}/gem/ltn012.tex | 0 .../luasocket}/gem/luasocket.png | Bin {luasocket => lib/luasocket}/gem/makefile | 0 {luasocket => lib/luasocket}/gem/myps2pdf | 0 {luasocket => lib/luasocket}/gem/t1.lua | 0 {luasocket => lib/luasocket}/gem/t1lf.txt | 0 {luasocket => lib/luasocket}/gem/t2.lua | 0 {luasocket => lib/luasocket}/gem/t2.txt | 0 {luasocket => lib/luasocket}/gem/t2gt.qp | 0 {luasocket => lib/luasocket}/gem/t3.lua | 0 {luasocket => lib/luasocket}/gem/t4.lua | 0 {luasocket => lib/luasocket}/gem/t5.lua | 0 {luasocket => lib/luasocket}/gem/test.lua | 0 {luasocket => lib/luasocket}/linux.cmd | 0 {luasocket => lib/luasocket}/logo.ps | 0 {luasocket => lib/luasocket}/ltn012.wiki | 0 {luasocket => lib/luasocket}/ltn013.wiki | 0 .../luasocket}/luasocket-scm-0.rockspec | 0 {luasocket => lib/luasocket}/luasocket.sln | 0 {luasocket => lib/luasocket}/macosx.cmd | 0 {luasocket => lib/luasocket}/makefile | 0 {luasocket => lib/luasocket}/makefile.dist | 0 {luasocket => lib/luasocket}/mime.vcxproj | 0 .../luasocket}/mime.vcxproj.filters | 0 {luasocket => lib/luasocket}/mingw.cmd | 0 {luasocket => lib/luasocket}/samples/README | 0 {luasocket => lib/luasocket}/samples/cddb.lua | 0 .../luasocket}/samples/daytimeclnt.lua | 0 .../luasocket}/samples/echoclnt.lua | 0 .../luasocket}/samples/echosrvr.lua | 0 .../luasocket}/samples/listener.lua | 0 {luasocket => lib/luasocket}/samples/lpr.lua | 0 .../luasocket}/samples/mclisten.lua | 0 .../luasocket}/samples/mcsend.lua | 0 .../luasocket}/samples/talker.lua | 0 .../luasocket}/samples/tinyirc.lua | 0 {luasocket => lib/luasocket}/socket.vcxproj | 0 .../luasocket}/socket.vcxproj.filters | 0 {luasocket => lib/luasocket}/src/auxiliar.c | 0 {luasocket => lib/luasocket}/src/auxiliar.h | 0 {luasocket => lib/luasocket}/src/buffer.c | 0 {luasocket => lib/luasocket}/src/buffer.h | 0 {luasocket => lib/luasocket}/src/compat.c | 0 {luasocket => lib/luasocket}/src/compat.h | 0 {luasocket => lib/luasocket}/src/except.c | 0 {luasocket => lib/luasocket}/src/except.h | 0 {luasocket => lib/luasocket}/src/ftp.lua | 0 {luasocket => lib/luasocket}/src/headers.lua | 0 {luasocket => lib/luasocket}/src/http.lua | 0 {luasocket => lib/luasocket}/src/inet.c | 0 {luasocket => lib/luasocket}/src/inet.h | 0 {luasocket => lib/luasocket}/src/io.c | 0 {luasocket => lib/luasocket}/src/io.h | 0 {luasocket => lib/luasocket}/src/ltn12.lua | 0 {luasocket => lib/luasocket}/src/luasocket.c | 0 {luasocket => lib/luasocket}/src/luasocket.h | 0 {luasocket => lib/luasocket}/src/makefile | 0 {luasocket => lib/luasocket}/src/mbox.lua | 0 {luasocket => lib/luasocket}/src/mime.c | 0 {luasocket => lib/luasocket}/src/mime.h | 0 {luasocket => lib/luasocket}/src/mime.lua | 0 {luasocket => lib/luasocket}/src/options.c | 0 {luasocket => lib/luasocket}/src/options.h | 0 {luasocket => lib/luasocket}/src/pierror.h | 0 {luasocket => lib/luasocket}/src/select.c | 0 {luasocket => lib/luasocket}/src/select.h | 0 {luasocket => lib/luasocket}/src/serial.c | 0 {luasocket => lib/luasocket}/src/smtp.lua | 0 {luasocket => lib/luasocket}/src/socket.h | 0 {luasocket => lib/luasocket}/src/socket.lua | 0 {luasocket => lib/luasocket}/src/tcp.c | 0 {luasocket => lib/luasocket}/src/tcp.h | 0 {luasocket => lib/luasocket}/src/timeout.c | 0 {luasocket => lib/luasocket}/src/timeout.h | 0 {luasocket => lib/luasocket}/src/tp.lua | 0 {luasocket => lib/luasocket}/src/udp.c | 0 {luasocket => lib/luasocket}/src/udp.h | 0 {luasocket => lib/luasocket}/src/unix.c | 0 {luasocket => lib/luasocket}/src/unix.h | 0 {luasocket => lib/luasocket}/src/url.lua | 0 {luasocket => lib/luasocket}/src/usocket.c | 0 {luasocket => lib/luasocket}/src/usocket.h | 0 {luasocket => lib/luasocket}/src/wsocket.c | 0 {luasocket => lib/luasocket}/src/wsocket.h | 0 {luasocket => lib/luasocket}/test/README | 0 .../luasocket}/test/auth/.htaccess | 0 .../luasocket}/test/auth/.htpasswd | 0 .../luasocket}/test/auth/index.html | 0 {luasocket => lib/luasocket}/test/cgi/cat | 0 .../luasocket}/test/cgi/cat-index-html | 0 {luasocket => lib/luasocket}/test/cgi/env | 0 .../luasocket}/test/cgi/query-string | 0 .../luasocket}/test/cgi/redirect-loop | 0 .../luasocket}/test/cgi/request-uri | 0 .../luasocket}/test/dicttest.lua | 0 .../luasocket}/test/excepttest.lua | 0 .../luasocket}/test/find-connect-limit | 0 {luasocket => lib/luasocket}/test/ftptest.lua | 0 {luasocket => lib/luasocket}/test/hello.lua | 0 .../luasocket}/test/httptest.lua | 0 {luasocket => lib/luasocket}/test/index.html | 0 .../luasocket}/test/ltn12test.lua | 0 .../luasocket}/test/luasocket.png | Bin .../luasocket}/test/mimetest.lua | 0 .../luasocket}/test/smtptest.lua | 0 .../luasocket}/test/stufftest.lua | 0 .../luasocket}/test/tcp-getoptions | 0 .../luasocket}/test/test_bind.lua | 0 .../luasocket}/test/test_getaddrinfo.lua | 0 .../luasocket}/test/test_socket_error.lua | 0 .../luasocket}/test/testclnt.lua | 0 .../luasocket}/test/testmesg.lua | 0 .../luasocket}/test/testsrvr.lua | 0 .../luasocket}/test/testsupport.lua | 0 .../luasocket}/test/tftptest.lua | 0 .../luasocket}/test/udp-zero-length-send | 0 .../luasocket}/test/udp-zero-length-send-recv | 0 .../luasocket}/test/udpconnectclnt.lua | 0 .../luasocket}/test/udpconnectsrvr.lua | 0 .../luasocket}/test/unixclnt.lua | 0 .../luasocket}/test/unixsrvr.lua | 0 {luasocket => lib/luasocket}/test/upload.html | 0 {luasocket => lib/luasocket}/test/urltest.lua | 0 .../luasocket}/test/utestclnt.lua | 0 .../luasocket}/test/utestsrvr.lua | 0 {luasocket => lib/luasocket}/win32.cmd | 0 .../lunatic-python-bugfix-1.1.1}/LICENSE | 0 .../lunatic-python-bugfix-1.1.1}/MANIFEST.in | 0 .../lunatic-python-bugfix-1.1.1}/Makefile | 0 .../lunatic-python-bugfix-1.1.1}/PKG-INFO | 0 .../lunatic-python-bugfix-1.1.1}/python.lua | 0 .../lunatic-python-bugfix-1.1.1}/setup.cfg | 0 .../lunatic-python-bugfix-1.1.1}/setup.py | 0 .../src/luainpython.c | 0 .../src/luainpython.h | 0 .../src/pythoninlua.c | 0 .../src/pythoninlua.h | 0 {magick => lib/magick}/.travis.yml | 0 {magick => lib/magick}/Makefile | 0 {magick => lib/magick}/README.md | 0 {magick => lib/magick}/magick-dev-1.rockspec | 0 {magick => lib/magick}/magick.lua | 0 {magick => lib/magick}/magick.moon | 0 {magick => lib/magick}/magick/init.lua | 0 {magick => lib/magick}/magick/init.moon | 0 {magick => lib/magick}/spec/color_test.png | Bin {magick => lib/magick}/spec/exif_test.jpg | Bin {magick => lib/magick}/spec/magick_spec.moon | 0 {magick => lib/magick}/spec/test.gif | Bin {magick => lib/magick}/spec/test_image.png | Bin lib/pngLua/30log.lua | 30 + lib/pngLua/30logLICENSE | 20 + lib/pngLua/Example.png | Bin 0 -> 2985 bytes lib/pngLua/LICENSE | 20 + lib/pngLua/README.md | 42 + lib/pngLua/deflate.lua | 856 ++++++++++++++++++ lib/pngLua/deflateLICENSE | 25 + lib/pngLua/logo.png | Bin 0 -> 8648 bytes lib/pngLua/numberlua.lua | 507 +++++++++++ lib/pngLua/numberluaLICENSE | 25 + lib/pngLua/png.lua | 277 ++++++ lib/pngLua/stream.lua | 105 +++ lib/pngLua/test.lua | 12 + rasters/demo/biomes.tif | Bin 23488 -> 19420 bytes rasters/horse/horse-dem.tif | Bin 644472 -> 220288 bytes rasters/test.jpg | Bin 0 -> 8867 bytes 310 files changed, 2153 insertions(+), 262 deletions(-) rename {graphicsmagick => lib/graphicsmagick}/Image.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/README.md (100%) rename {graphicsmagick => lib/graphicsmagick}/convert.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/exif.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/graphicsmagick-1.scm-0.rockspec (100%) rename {graphicsmagick => lib/graphicsmagick}/info.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/init.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/affine.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/city-corrupt.jpg (100%) rename {graphicsmagick => lib/graphicsmagick}/test/city.jpg (100%) rename {graphicsmagick => lib/graphicsmagick}/test/colorspace.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/corrupt.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/forest.jpg (100%) rename {graphicsmagick => lib/graphicsmagick}/test/fromTensor.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/gamma.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/gamma_3x3.jpg (100%) rename {graphicsmagick => lib/graphicsmagick}/test/lena.jpg (100%) rename {graphicsmagick => lib/graphicsmagick}/test/loadDirectory.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/loadsave.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/opacity.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/sampling_factors.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/thumb.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/toTensor.lua (100%) rename {graphicsmagick => lib/graphicsmagick}/test/transform.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/COPYRIGHT (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/Changes (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/MANIFEST (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/Makefile (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/doc/lua-imagesize.3 (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/doc/lua-imagesize.pod (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/bmp.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/gif.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/jpeg.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/mng.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/pcd.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/png.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/pnm.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/psd.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/swf.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/tiff.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/xbm.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/xcf.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/format/xpm.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/imagesize/util.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/lunit-console.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/lunit.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/468x60.psd (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/8.swf (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/DUTCH1.mng (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/anim.gif (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/anim.xcf (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/bexjdic.tif (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/letter_N.pbm (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/letter_N.pgm (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/letter_N.ppm (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/letter_T.jpg (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/lexjdic.tif (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/old-os2.bmp (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/pak38.jpg (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/pass-1_s.png (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/spacer50.xbm (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/test.gif (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/xterm.bmp (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/xterm.xpm (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/xv-thumbnail (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/data/yasp.swf (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/formats.lua (100%) rename {lua-imagesize-1.2 => lib/lua-imagesize-1.2}/test/util.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/DOCUMENTATION.mkd (100%) rename {lua-imlib2 => lib/lua-imlib2}/LICENSE (100%) rename {lua-imlib2 => lib/lua-imlib2}/Makefile (100%) rename {lua-imlib2 => lib/lua-imlib2}/README.mkd (100%) rename {lua-imlib2 => lib/lua-imlib2}/TODO (100%) rename {lua-imlib2 => lib/lua-imlib2}/examples/checkerboard.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/examples/sierpinski.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/examples/wallpaper.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/imlib2.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/limlib2.c (100%) rename {lua-imlib2 => lib/lua-imlib2}/lua-imlib2-dev-1.rockspec (100%) rename {lua-imlib2 => lib/lua-imlib2}/test/border_test.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/test/color_test.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/test/font_test.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/test/gradient_test.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/test/imlib2_test.lua (100%) rename {lua-imlib2 => lib/lua-imlib2}/test/polygon_test.lua (100%) rename {luasocket => lib/luasocket}/.gitignore (100%) rename {luasocket => lib/luasocket}/.travis.yml (100%) rename {luasocket => lib/luasocket}/FIX (100%) rename {luasocket => lib/luasocket}/LICENSE (100%) rename {luasocket => lib/luasocket}/Lua51.props (100%) rename {luasocket => lib/luasocket}/Lua52.props (100%) rename {luasocket => lib/luasocket}/NEW (100%) rename {luasocket => lib/luasocket}/README (100%) rename {luasocket => lib/luasocket}/TODO (100%) rename {luasocket => lib/luasocket}/WISH (100%) rename {luasocket => lib/luasocket}/doc/dns.html (100%) rename {luasocket => lib/luasocket}/doc/ftp.html (100%) rename {luasocket => lib/luasocket}/doc/http.html (100%) rename {luasocket => lib/luasocket}/doc/index.html (100%) rename {luasocket => lib/luasocket}/doc/installation.html (100%) rename {luasocket => lib/luasocket}/doc/introduction.html (100%) rename {luasocket => lib/luasocket}/doc/ltn12.html (100%) rename {luasocket => lib/luasocket}/doc/lua05.ppt (100%) rename {luasocket => lib/luasocket}/doc/luasocket.png (100%) rename {luasocket => lib/luasocket}/doc/mime.html (100%) rename {luasocket => lib/luasocket}/doc/reference.css (100%) rename {luasocket => lib/luasocket}/doc/reference.html (100%) rename {luasocket => lib/luasocket}/doc/smtp.html (100%) rename {luasocket => lib/luasocket}/doc/socket.html (100%) rename {luasocket => lib/luasocket}/doc/tcp.html (100%) rename {luasocket => lib/luasocket}/doc/udp.html (100%) rename {luasocket => lib/luasocket}/doc/url.html (100%) rename {luasocket => lib/luasocket}/etc/README (100%) rename {luasocket => lib/luasocket}/etc/b64.lua (100%) rename {luasocket => lib/luasocket}/etc/check-links.lua (100%) rename {luasocket => lib/luasocket}/etc/check-memory.lua (100%) rename {luasocket => lib/luasocket}/etc/cookie.lua (100%) rename {luasocket => lib/luasocket}/etc/dict.lua (100%) rename {luasocket => lib/luasocket}/etc/dispatch.lua (100%) rename {luasocket => lib/luasocket}/etc/eol.lua (100%) rename {luasocket => lib/luasocket}/etc/forward.lua (100%) rename {luasocket => lib/luasocket}/etc/get.lua (100%) rename {luasocket => lib/luasocket}/etc/links (100%) rename {luasocket => lib/luasocket}/etc/lp.lua (100%) rename {luasocket => lib/luasocket}/etc/qp.lua (100%) rename {luasocket => lib/luasocket}/etc/tftp.lua (100%) rename {luasocket => lib/luasocket}/gem/ex1.lua (100%) rename {luasocket => lib/luasocket}/gem/ex10.lua (100%) rename {luasocket => lib/luasocket}/gem/ex11.lua (100%) rename {luasocket => lib/luasocket}/gem/ex12.lua (100%) rename {luasocket => lib/luasocket}/gem/ex2.lua (100%) rename {luasocket => lib/luasocket}/gem/ex3.lua (100%) rename {luasocket => lib/luasocket}/gem/ex4.lua (100%) rename {luasocket => lib/luasocket}/gem/ex5.lua (100%) rename {luasocket => lib/luasocket}/gem/ex6.lua (100%) rename {luasocket => lib/luasocket}/gem/ex7.lua (100%) rename {luasocket => lib/luasocket}/gem/ex8.lua (100%) rename {luasocket => lib/luasocket}/gem/ex9.lua (100%) rename {luasocket => lib/luasocket}/gem/gem.c (100%) rename {luasocket => lib/luasocket}/gem/gt.b64 (100%) rename {luasocket => lib/luasocket}/gem/input.bin (100%) rename {luasocket => lib/luasocket}/gem/ltn012.tex (100%) rename {luasocket => lib/luasocket}/gem/luasocket.png (100%) rename {luasocket => lib/luasocket}/gem/makefile (100%) rename {luasocket => lib/luasocket}/gem/myps2pdf (100%) rename {luasocket => lib/luasocket}/gem/t1.lua (100%) rename {luasocket => lib/luasocket}/gem/t1lf.txt (100%) rename {luasocket => lib/luasocket}/gem/t2.lua (100%) rename {luasocket => lib/luasocket}/gem/t2.txt (100%) rename {luasocket => lib/luasocket}/gem/t2gt.qp (100%) rename {luasocket => lib/luasocket}/gem/t3.lua (100%) rename {luasocket => lib/luasocket}/gem/t4.lua (100%) rename {luasocket => lib/luasocket}/gem/t5.lua (100%) rename {luasocket => lib/luasocket}/gem/test.lua (100%) rename {luasocket => lib/luasocket}/linux.cmd (100%) rename {luasocket => lib/luasocket}/logo.ps (100%) rename {luasocket => lib/luasocket}/ltn012.wiki (100%) rename {luasocket => lib/luasocket}/ltn013.wiki (100%) rename {luasocket => lib/luasocket}/luasocket-scm-0.rockspec (100%) rename {luasocket => lib/luasocket}/luasocket.sln (100%) rename {luasocket => lib/luasocket}/macosx.cmd (100%) rename {luasocket => lib/luasocket}/makefile (100%) rename {luasocket => lib/luasocket}/makefile.dist (100%) rename {luasocket => lib/luasocket}/mime.vcxproj (100%) rename {luasocket => lib/luasocket}/mime.vcxproj.filters (100%) rename {luasocket => lib/luasocket}/mingw.cmd (100%) rename {luasocket => lib/luasocket}/samples/README (100%) rename {luasocket => lib/luasocket}/samples/cddb.lua (100%) rename {luasocket => lib/luasocket}/samples/daytimeclnt.lua (100%) rename {luasocket => lib/luasocket}/samples/echoclnt.lua (100%) rename {luasocket => lib/luasocket}/samples/echosrvr.lua (100%) rename {luasocket => lib/luasocket}/samples/listener.lua (100%) rename {luasocket => lib/luasocket}/samples/lpr.lua (100%) rename {luasocket => lib/luasocket}/samples/mclisten.lua (100%) rename {luasocket => lib/luasocket}/samples/mcsend.lua (100%) rename {luasocket => lib/luasocket}/samples/talker.lua (100%) rename {luasocket => lib/luasocket}/samples/tinyirc.lua (100%) rename {luasocket => lib/luasocket}/socket.vcxproj (100%) rename {luasocket => lib/luasocket}/socket.vcxproj.filters (100%) rename {luasocket => lib/luasocket}/src/auxiliar.c (100%) rename {luasocket => lib/luasocket}/src/auxiliar.h (100%) rename {luasocket => lib/luasocket}/src/buffer.c (100%) rename {luasocket => lib/luasocket}/src/buffer.h (100%) rename {luasocket => lib/luasocket}/src/compat.c (100%) rename {luasocket => lib/luasocket}/src/compat.h (100%) rename {luasocket => lib/luasocket}/src/except.c (100%) rename {luasocket => lib/luasocket}/src/except.h (100%) rename {luasocket => lib/luasocket}/src/ftp.lua (100%) rename {luasocket => lib/luasocket}/src/headers.lua (100%) rename {luasocket => lib/luasocket}/src/http.lua (100%) rename {luasocket => lib/luasocket}/src/inet.c (100%) rename {luasocket => lib/luasocket}/src/inet.h (100%) rename {luasocket => lib/luasocket}/src/io.c (100%) rename {luasocket => lib/luasocket}/src/io.h (100%) rename {luasocket => lib/luasocket}/src/ltn12.lua (100%) rename {luasocket => lib/luasocket}/src/luasocket.c (100%) rename {luasocket => lib/luasocket}/src/luasocket.h (100%) rename {luasocket => lib/luasocket}/src/makefile (100%) rename {luasocket => lib/luasocket}/src/mbox.lua (100%) rename {luasocket => lib/luasocket}/src/mime.c (100%) rename {luasocket => lib/luasocket}/src/mime.h (100%) rename {luasocket => lib/luasocket}/src/mime.lua (100%) rename {luasocket => lib/luasocket}/src/options.c (100%) rename {luasocket => lib/luasocket}/src/options.h (100%) rename {luasocket => lib/luasocket}/src/pierror.h (100%) rename {luasocket => lib/luasocket}/src/select.c (100%) rename {luasocket => lib/luasocket}/src/select.h (100%) rename {luasocket => lib/luasocket}/src/serial.c (100%) rename {luasocket => lib/luasocket}/src/smtp.lua (100%) rename {luasocket => lib/luasocket}/src/socket.h (100%) rename {luasocket => lib/luasocket}/src/socket.lua (100%) rename {luasocket => lib/luasocket}/src/tcp.c (100%) rename {luasocket => lib/luasocket}/src/tcp.h (100%) rename {luasocket => lib/luasocket}/src/timeout.c (100%) rename {luasocket => lib/luasocket}/src/timeout.h (100%) rename {luasocket => lib/luasocket}/src/tp.lua (100%) rename {luasocket => lib/luasocket}/src/udp.c (100%) rename {luasocket => lib/luasocket}/src/udp.h (100%) rename {luasocket => lib/luasocket}/src/unix.c (100%) rename {luasocket => lib/luasocket}/src/unix.h (100%) rename {luasocket => lib/luasocket}/src/url.lua (100%) rename {luasocket => lib/luasocket}/src/usocket.c (100%) rename {luasocket => lib/luasocket}/src/usocket.h (100%) rename {luasocket => lib/luasocket}/src/wsocket.c (100%) rename {luasocket => lib/luasocket}/src/wsocket.h (100%) rename {luasocket => lib/luasocket}/test/README (100%) rename {luasocket => lib/luasocket}/test/auth/.htaccess (100%) rename {luasocket => lib/luasocket}/test/auth/.htpasswd (100%) rename {luasocket => lib/luasocket}/test/auth/index.html (100%) rename {luasocket => lib/luasocket}/test/cgi/cat (100%) rename {luasocket => lib/luasocket}/test/cgi/cat-index-html (100%) rename {luasocket => lib/luasocket}/test/cgi/env (100%) rename {luasocket => lib/luasocket}/test/cgi/query-string (100%) rename {luasocket => lib/luasocket}/test/cgi/redirect-loop (100%) rename {luasocket => lib/luasocket}/test/cgi/request-uri (100%) rename {luasocket => lib/luasocket}/test/dicttest.lua (100%) rename {luasocket => lib/luasocket}/test/excepttest.lua (100%) rename {luasocket => lib/luasocket}/test/find-connect-limit (100%) rename {luasocket => lib/luasocket}/test/ftptest.lua (100%) rename {luasocket => lib/luasocket}/test/hello.lua (100%) rename {luasocket => lib/luasocket}/test/httptest.lua (100%) rename {luasocket => lib/luasocket}/test/index.html (100%) rename {luasocket => lib/luasocket}/test/ltn12test.lua (100%) rename {luasocket => lib/luasocket}/test/luasocket.png (100%) rename {luasocket => lib/luasocket}/test/mimetest.lua (100%) rename {luasocket => lib/luasocket}/test/smtptest.lua (100%) rename {luasocket => lib/luasocket}/test/stufftest.lua (100%) rename {luasocket => lib/luasocket}/test/tcp-getoptions (100%) rename {luasocket => lib/luasocket}/test/test_bind.lua (100%) rename {luasocket => lib/luasocket}/test/test_getaddrinfo.lua (100%) rename {luasocket => lib/luasocket}/test/test_socket_error.lua (100%) rename {luasocket => lib/luasocket}/test/testclnt.lua (100%) rename {luasocket => lib/luasocket}/test/testmesg.lua (100%) rename {luasocket => lib/luasocket}/test/testsrvr.lua (100%) rename {luasocket => lib/luasocket}/test/testsupport.lua (100%) rename {luasocket => lib/luasocket}/test/tftptest.lua (100%) rename {luasocket => lib/luasocket}/test/udp-zero-length-send (100%) rename {luasocket => lib/luasocket}/test/udp-zero-length-send-recv (100%) rename {luasocket => lib/luasocket}/test/udpconnectclnt.lua (100%) rename {luasocket => lib/luasocket}/test/udpconnectsrvr.lua (100%) rename {luasocket => lib/luasocket}/test/unixclnt.lua (100%) rename {luasocket => lib/luasocket}/test/unixsrvr.lua (100%) rename {luasocket => lib/luasocket}/test/upload.html (100%) rename {luasocket => lib/luasocket}/test/urltest.lua (100%) rename {luasocket => lib/luasocket}/test/utestclnt.lua (100%) rename {luasocket => lib/luasocket}/test/utestsrvr.lua (100%) rename {luasocket => lib/luasocket}/win32.cmd (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/LICENSE (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/MANIFEST.in (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/Makefile (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/PKG-INFO (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/python.lua (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/setup.cfg (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/setup.py (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/src/luainpython.c (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/src/luainpython.h (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/src/pythoninlua.c (100%) rename {lunatic-python-bugfix-1.1.1 => lib/lunatic-python-bugfix-1.1.1}/src/pythoninlua.h (100%) rename {magick => lib/magick}/.travis.yml (100%) rename {magick => lib/magick}/Makefile (100%) rename {magick => lib/magick}/README.md (100%) rename {magick => lib/magick}/magick-dev-1.rockspec (100%) rename {magick => lib/magick}/magick.lua (100%) rename {magick => lib/magick}/magick.moon (100%) rename {magick => lib/magick}/magick/init.lua (100%) rename {magick => lib/magick}/magick/init.moon (100%) rename {magick => lib/magick}/spec/color_test.png (100%) rename {magick => lib/magick}/spec/exif_test.jpg (100%) rename {magick => lib/magick}/spec/magick_spec.moon (100%) rename {magick => lib/magick}/spec/test.gif (100%) rename {magick => lib/magick}/spec/test_image.png (100%) create mode 100644 lib/pngLua/30log.lua create mode 100644 lib/pngLua/30logLICENSE create mode 100644 lib/pngLua/Example.png create mode 100644 lib/pngLua/LICENSE create mode 100644 lib/pngLua/README.md create mode 100644 lib/pngLua/deflate.lua create mode 100644 lib/pngLua/deflateLICENSE create mode 100644 lib/pngLua/logo.png create mode 100644 lib/pngLua/numberlua.lua create mode 100644 lib/pngLua/numberluaLICENSE create mode 100644 lib/pngLua/png.lua create mode 100644 lib/pngLua/stream.lua create mode 100644 lib/pngLua/test.lua create mode 100755 rasters/test.jpg diff --git a/README.md b/README.md index 4241862..f9ec389 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ Using a graphics editor that doesn't do anti-aliasing and preserves exact red ch - OR download DEM and USGS landcover/landuse tiles for same the same extent. Note, for true 16-bit DEMs you must use magick, not imlib2 - after you change settings exit the world and delete the map.sqlite in the world folder - relaunch the map and enjoy! +- note windows users may have to edit line 162 (or so) of magick/init.lua from "MagickWand" to "C:/Program Files/ImageMagick-6.9.2-Q16/CORE_RL_wand_" or whatever the version and location of your MagickWand install might be. ### Upgrading: - delete the realterrain.settings file in the world folder, or just create a new world diff --git a/init.lua b/init.lua index 66153d5..550d27b 100644 --- a/init.lua +++ b/init.lua @@ -1,40 +1,47 @@ +PROCESSOR = "py" -- options are: "py", "gm", "magick", "imlib2", "pngLua" +--gm does not work and requires graphicksmagick, py is buggy and requires lunatic-python to be built, and the PIL, +--imlib2 treats 16-bit as 8-bit and requires imlib2, magick requires magick wand +--convert uses commandline imagemagick "convert" or graphicsmagick "gm convert" ("convert.exe" or "gm.exe convert") +--png loads the entire image into memory so has size limitations based on your resources, but needs no libs MODPATH = minetest.get_modpath("realterrain") WORLDPATH = minetest.get_worldpath() RASTERS = MODPATH .. "/rasters/" SCHEMS = MODPATH .. "/schems/" HEIGHTMAP = false --experimental mode to build entire heightmap at once not pixel-by-pixel (requires im or gm) ---CONVERT = "gm convert" --"convert.exe", "convert", "gm convert", "gm.exe convert", etc --experimental -local magick, imlib2, py, gm, convert, socket local ie = minetest.request_insecure_environment() ---ie.require "luarocks.loader" +--ie.require "luarocks.loader" --if you use luarocks to install some of the packages below you may need this -package.path = (MODPATH.."/lua-imagesize-1.2/?.lua;"..package.path) +package.path = (MODPATH.."/lib/lua-imagesize-1.2/?.lua;"..package.path) local imagesize = ie.require "imagesize" ---[[package.loadlib("/usr/lib/x86_64-linux-gnu/libpython2.7.so", "*") --may not need to explicitly state this -package.path = (MODPATH.."/lunatic-python-bugfix-1.1.1/?.lua;"..package.path) -local py = ie.require("python", "*")--]] ---[[py.execute("import grass.script as gscript") -py.execute("from osgeo import gdal")]] - ---package.path = (MODPATH.."/luasocket/?.lua;"..MODPATH.."/luasocket/?/init.lua;"..package.path) ---local socket = ie.require "socket" - ---ONLY RUN ONE OF magick OR imlib2 OR gm OR convert AT ANY TIME -package.path = (MODPATH.."/magick/?.lua;"..MODPATH.."/magick/?/init.lua;"..package.path) -local magick = ie.require "magick"--]] - ---[[package.path = (MODPATH.."/lua-imlib2/?.lua;"..package.path) -local imlib2 = ie.require "imlib2"--]] - ---[[package.path = (MODPATH.."/?.lua;"..MODPATH.."/?/init.lua;"..package.path) -local gm = ie.require "graphicsmagick"--]] - ---you can avoid libraries if you use command line im (convert, convert.exe) or gm (gm convert, gm.exe convert) ---[[convert = "convert" --]] - +--[[package.path = (MODPATH.."/lib/luasocket/?.lua;"..MODPATH.."/lib/luasocket/?/init.lua;"..package.path) +socket = ie.require "socket"--]] +local py, gm, magick, imlib2, convert +if PROCESSOR == "py" then + package.loadlib("/usr/lib/x86_64-linux-gnu/libpython2.7.so", "*") --may not need to explicitly state this + package.path = (MODPATH.."/lib/lunatic-python-bugfix-1.1.1/?.lua;"..package.path) + py = ie.require("python", "*") + py.execute("import Image") + --py.execute("import numpy") + --py.execute("import grass.script as gscript") + --py.execute("from osgeo import gdal") +elseif PROCESSOR == "magick" then + package.path = (MODPATH.."/lib/magick/?.lua;"..MODPATH.."/lib/magick/?/init.lua;"..package.path) + magick = ie.require "magick" +elseif PROCESSOR == "imlib2" then + package.path = (MODPATH.."/lib/lua-imlib2/?.lua;"..package.path) + imlib2 = ie.require "imlib2" +elseif PROCESSOR == "gm" then + package.path = (MODPATH.."/lib/?.lua;"..MODPATH.."/lib/?/init.lua;"..package.path) + gm = ie.require "graphicsmagick" +elseif PROCESSOR == "convert" then + convert = "convert" -- could also be convert.exe, "gm convert" or "gm.exe convert" +elseif PROCESSOR == "png" then + package.path = (MODPATH.."/lib/pngLua/?.lua;"..MOPATH.."/lib/pngLua/?/init.lua;"..package.path) + ie.require "png" +end local realterrain = {} realterrain.settings = {} --defaults @@ -551,121 +558,57 @@ realterrain.input = {} realterrain.input2 = {} realterrain.input3 = {} function realterrain.init() - --[[ - py.execute("import Image") - py.execute("dem = Image.open('"..RASTERS..realterrain.settings.filedem.."')") - py.execute("cover = Image.open('"..RASTERS..realterrain.settings.filecover.."')") - local pybits = py.eval("dem.mode") - py.execute("w, l = dem.size") - realterrain.dem.width = tonumber(tostring(py.eval("w"))) - realterrain.dem.length = tonumber(tostring(py.eval("l"))) - print("[PYTHON] mode: "..pybits..", width: "..width..", length: "..length) - --]] local mode = realterrain.get_mode() local imageload if gm then imageload = gm.Image elseif magick then imageload = magick.load_image elseif imlib2 then imageload = imlib2.image.load end - - --@todo fail if there is no DEM? - realterrain.dem.image = imageload(RASTERS..realterrain.settings.filedem) - --local dem = magick.load_image(RASTERS..realterrain.settings.filedem) - - if realterrain.dem.image then - if gm then - realterrain.dem.width, realterrain.dem.length = realterrain.dem.image:size() - realterrain.dem.bits = realterrain.dem.image:depth() - else - realterrain.dem.width = realterrain.dem.image:get_width() - realterrain.dem.length = realterrain.dem.image:get_height() - realterrain.dem.bits = realterrain.settings.dembits - end - print("[DEM] depth: "..realterrain.dem.bits..", width: "..realterrain.dem.width..", length: "..realterrain.dem.length) - else - print("your dem file is missing, maybe delete or edit world/realterrain_settings") - realterrain.dem = {} - end - - if mode.get_cover and realterrain.settings.filecover and realterrain.settings.filecover ~= "" then - realterrain.cover.image = imageload(RASTERS..realterrain.settings.filecover) - if realterrain.cover.image then - if gm then - realterrain.cover.width, realterrain.cover.length = realterrain.cover.image:size() - realterrain.cover.bits = realterrain.cover.image:depth() - else - realterrain.cover.width = realterrain.cover.image:get_width() - realterrain.cover.length = realterrain.cover.image:get_height() - realterrain.cover.bits = realterrain.settings.coverbits - --print(dump(realterrain.get_unique_values(cover))) + local rasternames = {} + table.insert(rasternames, "dem") + if mode.get_cover then table.insert(rasternames, "cover") end + if mode.get_input then table.insert(rasternames, "input") end + if mode.get_input2 then table.insert(rasternames, "input2") end + if mode.get_input3 then table.insert(rasternames, "input3") end + for k,rastername in next, rasternames do + + if realterrain.settings["file"..rastername] ~= "" then + if py then + py.execute(rastername.." = Image.open('"..RASTERS..realterrain.settings["file"..rastername] .."')") + py.execute(rastername.."_w, "..rastername.."_l = "..rastername..".size") + realterrain[rastername].width = tonumber(tostring(py.eval(rastername.."_w"))) + realterrain[rastername].length = tonumber(tostring(py.eval(rastername.."_l"))) + realterrain[rastername].mode = tostring(py.eval(rastername..".mode")) + print(rastername.." mode: "..realterrain[rastername].mode) + if mode.get_input_color and realterrain[rastername].mode ~= "RGB" then + py.execute(rastername.." = "..rastername..".convert('RGB')") + realterrain[rastername].mode = "RGB" + elseif not mode.get_input_color and realterrain[rastername].mode == "RGB" then + py.execute(rastername.." = "..rastername..".convert('L')") + realterrain[rastername].mode = "L" + end + else + realterrain[rastername].image = imageload(RASTERS..realterrain.settings["file"..rastername]) + if realterrain[rastername].image then + if gm then + realterrain[rastername].width, realterrain[rastername].length = realterrain[rastername].image:size() + else--imagick or imlib2 + realterrain[rastername].width = realterrain[rastername].image:get_width() + realterrain[rastername].length = realterrain[rastername].image:get_height() + if magick then + realterrain[rastername].bits = realterrain.settings[rastername.."bits"] + end + end + else + print("your "..rastername.." file is missing (should be: "..realterrain.settings["file"..rastername].."), maybe delete or edit world/realterrain_settings") + realterrain[rastername] = {} + end end - print("[COVER] depth: "..realterrain.cover.bits..", width: "..realterrain.cover.width..", length: "..realterrain.cover.length) + print("["..PROCESSOR.."-"..rastername.."] file: "..realterrain.settings["file"..rastername].." width: "..realterrain[rastername].width..", length: "..realterrain[rastername].length) else - print("your biome file is missing, maybe delete or edit world/realterrain_settings") - realterrain.cover = {} + print("no "..rastername.." selected") + realterrain[rastername] = {} end - else - realterrain.cover = {} - end - - if mode.get_input and realterrain.settings.fileinput and realterrain.settings.fileinput ~= "" then - realterrain.input.image = imageload(RASTERS..realterrain.settings.fileinput) - if realterrain.input.image then - if gm then - realterrain.input.width, realterrain.input.length = realterrain.input.image:size() - realterrain.input.bits = realterrain.input.image:depth() - else - realterrain.input.width = realterrain.input.image:get_width() - realterrain.input.length = realterrain.input.image:get_height() - realterrain.input.bits = realterrain.settings.inputbits - end - print("[IN1] depth: "..realterrain.input.bits..", width: "..realterrain.input.width..", length: "..realterrain.input.length) - else - print("your input 1 file is missing, maybe delete or edit world/realterrain_settings") - realterrain.input = {} - end - else - realterrain.input = {} - end - - if mode.get_input2 and realterrain.settings.fileinput2 and realterrain.settings.fileinput2 ~= "" then - realterrain.input2.image = imageload(RASTERS..realterrain.settings.fileinput2) - if realterrain.input2.image then - if gm then - realterrain.input2.width, realterrain.input2.length = realterrain.input2.image:size() - realterrain.input2.bits = realterrain.input2.image:depth() - else - realterrain.input2.width = realterrain.input2.image:get_width() - realterrain.input2.length = realterrain.input2.image:get_height() - realterrain.input2.bits = realterrain.settings.input2bits - end - print("[IN2] depth: "..realterrain.input2.bits..", width: "..realterrain.input2.width..", length: "..realterrain.input2.length) - else - print("your input 2 file is missing, maybe delete or edit world/realterrain_settings") - realterrain.input2 = {} - end - else - realterrain.input2 = {} - end - - if mode.get_input3 and realterrain.settings.fileinput3 and realterrain.settings.fileinput3 ~= "" then - realterrain.input3.image = imageload(RASTERS..realterrain.settings.fileinput3) - if realterrain.input3.image then - if gm then - realterrain.input3.width, realterrain.input3.length = realterrain.input3.image:size() - realterrain.input3.bits = realterrain.input3.image:depth() - else - realterrain.input3.width = realterrain.input3.image:get_width() - realterrain.input3.length = realterrain.input3.image:get_height() - realterrain.input3.bits = realterrain.settings.input3bits - end - print("[IN3] depth: "..realterrain.input3.bits..", width: "..realterrain.input3.width..", length: "..realterrain.input3.length) - else - print("your input 3 file is missing, maybe delete or edit world/realterrain_settings") - realterrain.input3 = {} - end - else - realterrain.input3 = {} end end @@ -1148,65 +1091,61 @@ function realterrain.generate(minp, maxp) print ("[GEN] "..chugent.." ms mapchunk ("..cx0..", "..cy0..", "..cz0..")") end --the raw get pixel method that uses the selected method and accounts for bit depth -function realterrain.get_raw_pixel(x,z, raster) -- "image" is a string for python and an image object for magick / imlib2 +function realterrain.get_raw_pixel(x,z, rastername) -- "rastername" is a string local r,g,b - --[[py then --images for py need to be greyscale - v = py.eval(raster..".getpixel(("..x..","..z.."))") --no bit depth conversion required - v = tonumber(tostring(v)) - --print(e) - --]] - local bits - if raster == "dem" then - raster = realterrain.dem.image - bits = realterrain.dem.bits - elseif raster == "cover" then - raster = realterrain.cover.image - bits = realterrain.cover.bits - elseif raster == "input" then - raster = realterrain.input.image - bits = realterrain.input.bits - elseif raster == "input2" then - raster = realterrain.input2.image - bits = realterrain.input2.bits - elseif raster == "input3" then - raster = realterrain.input3.image - bits = realterrain.input3.bits - end - if raster then - --[[if gm then --this method is unusable until direct pixel access is exposed in gm! - line = raster:clone():crop(1,1,x,z):format("txt"):toString() - --print(line) - --parse the output pixels - --local firstcomma = string.find(line, ",") - --local right = tonumber(string.sub(line, 1 , firstcomma - 1)) + 1 - --print("right: "..right) - local firstcolon = string.find(line, ":") - --local down = (tonumber(string.sub(line, firstcomma + 1 , firstcolon - 1)) + 1 ) * (-1) - --print("down: "..down) - local secondcomma = string.find(line, ",", firstcolon) - v = string.sub(line, firstcolon + 3, secondcomma -1) - --print(v) - v = tonumber(v) - --print(v) - else--]] - if magick then - r,g,b = raster:get_pixel(x, z) --@todo change when magick autodetects bit depth - r = math.floor(r * (2^bits)) - g = math.floor(g * (2^bits)) - b = math.floor(b * (2^bits)) - elseif imlib2 then - r = raster:get_pixel(x, z).red - g = raster:get_pixel(x, z).green - b = raster:get_pixel(x, z).blue + --check to see if the image is even on the raster, otherwise skip + if ( x >= 0 and x < realterrain[rastername].width ) + and ( z >= 0 and z < realterrain[rastername].length ) then + --print(rastername..": x "..x..", z "..z) + if py then + if realterrain[rastername].mode == "RGB" then + py.execute(rastername.."_r, "..rastername.."_g,"..rastername.."_b = "..rastername..".getpixel(("..x..", "..z.."))") + r = tonumber(tostring(py.eval(rastername.."_r"))) + g = tonumber(tostring(py.eval(rastername.."_g"))) + b = tonumber(tostring(py.eval(rastername.."_b"))) + else + r = tonumber(tostring(py.eval(rastername..".getpixel(("..x..","..z.."))"))) --no bit depth conversion required + end + --print(r) + else + if realterrain[rastername].image then + if gm then --this method is unusably slow until direct pixel access is exposed in gm! + --[[ + line = realterrain[rastername].image:clone():crop(1,1,x,z):format("txt"):toString() + --print(line) + --parse the output pixels + --local firstcomma = string.find(line, ",") + --local right = tonumber(string.sub(line, 1 , firstcomma - 1)) + 1 + --print("right: "..right) + local firstcolon = string.find(line, ":") + --local down = (tonumber(string.sub(line, firstcomma + 1 , firstcolon - 1)) + 1 ) * (-1) + --print("down: "..down) + local secondcomma = string.find(line, ",", firstcolon) + r = string.sub(line, firstcolon + 3, secondcomma -1) + --print(r) + r = tonumber(r) + --print(r) + --]] + elseif magick then + r,g,b = realterrain[rastername].image:get_pixel(x, z) --@todo change when magick autodetects bit depth + r = math.floor(r * (2^realterrain[rastername].bits)) + g = math.floor(g * (2^realterrain[rastername].bits)) + b = math.floor(b * (2^realterrain[rastername].bits)) + elseif imlib2 then + r = realterrain[rastername].image:get_pixel(x, z).red + g = realterrain[rastername].image:get_pixel(x, z).green + b = realterrain[rastername].image:get_pixel(x, z).blue + end + end end + --print (v) + return r,g,b end - --print (v) - return r,g,b end --the main get pixel method that applies the scale and offsets function realterrain.get_pixel(x,z, get_cover, get_input, get_input2, get_input3, get_input_color) - local e, b, i, i2, i3 + local e, c, i, i2, i3 local row,col = 0 - z + tonumber(realterrain.settings.zoffset), 0 + x - tonumber(realterrain.settings.xoffset) --adjust for x and z scales row = math.floor(row / tonumber(realterrain.settings.zscale)) @@ -1225,11 +1164,11 @@ function realterrain.get_pixel(x,z, get_cover, get_input, get_input2, get_input3 --adjust for offset and scale e = math.floor((e * tonumber(realterrain.settings.yscale)) + tonumber(realterrain.settings.yoffset)) - if get_cover then - b = realterrain.get_raw_pixel(col,row, "cover") or 0 + if get_cover and realterrain.settings.filecover ~= "" then + c = realterrain.get_raw_pixel(col,row, "cover") or 0 end - if get_input then + if get_input and realterrain.settings.fileinput ~= "" then if get_input_color then i, i2, i3 = realterrain.get_raw_pixel(col,row, "input") if not i then i = 0 end @@ -1239,14 +1178,14 @@ function realterrain.get_pixel(x,z, get_cover, get_input, get_input2, get_input3 i = realterrain.get_raw_pixel(col,row, "input") or 0 end end - if get_input2 then + if get_input2 and realterrain.settings.fileinput2 ~= "" then i2 = realterrain.get_raw_pixel(col,row, "input2") or 0 end - if get_input3 then + if get_input3 and realterrain.settings.fileinput3 ~= "" then i3 = realterrain.get_raw_pixel(col,row, "input3") or 0 end --print("elev: "..e..", cover: "..b) - return e, b, i, i2, i3 + return e, c, i, i2, i3 end --this function parses a line of IM or GM pixel enumeration without any scaling or adjustment function realterrain.parse_enumeration(line) @@ -1264,17 +1203,41 @@ function realterrain.parse_enumeration(line) local value = tonumber(string.sub(line, firstcolon + 3, secondcomma -1)) return value, right, down end -function realterrain.get_enumeration(image, xstart, width, zstart, length) +function realterrain.get_enumeration(raster, xstart, width, zstart, length) --raster is a string so py can use it local enumeration - if gm then - enumeration = realterrain.dem.image:clone():crop(width,length,xstart,zstart):format("txt"):toString() - elseif magick then - local tmpimg - tmpimg = realterrain.dem.image:clone() - tmpimg:crop(width,length,xstart,zstart) - tmpimg:set_format("txt") - enumeration = tmpimg:get_blob() - tmpimg:destroy() + if py then + enumeration = py.eval(raster..".getpixels(("..x..","..z.."))") + --v = tonumber(tostring(v)) + else + local bits + if raster == "dem" then + raster = realterrain.dem.image + bits = realterrain.dem.bits + elseif raster == "cover" then + raster = realterrain.cover.image + bits = realterrain.cover.bits + elseif raster == "input" then + raster = realterrain.input.image + bits = realterrain.input.bits + elseif raster == "input2" then + raster = realterrain.input2.image + bits = realterrain.input2.bits + elseif raster == "input3" then + raster = realterrain.input3.image + bits = realterrain.input3.bits + end + if gm then + enumeration = realterrain.dem.image:clone():crop(width,length,xstart,zstart):format("txt"):toString() + elseif magick then + local tmpimg + tmpimg = realterrain.dem.image:clone() + tmpimg:crop(width,length,xstart,zstart) + tmpimg:set_format("txt") + enumeration = tmpimg:get_blob() + tmpimg:destroy() + elseif imlib2 then + --no method for this in imlib2 + end end --local cmd = convert..' "'..RASTERS..realterrain.settings.filedem..'"'..' -crop 80x80+'..col..'+'..row..' txt:-' return enumeration @@ -1289,84 +1252,92 @@ function realterrain.build_heightmap(xstart, xend, zstart, zend, get_cover, get_ --print("width: "..width ..", length: "..length) print("request entries: "..width*length) zstart = 0 - zstart - local enumeration = realterrain.get_enumeration(realterrain.dem.image, xstart, width, zstart, length) - - --print("entire enumeration: "..enumeration) - local entries = 0 - - local mincol, maxcol, minrow, maxrow - local firstline = true - for k,line in next, string.split(enumeration, "\n") do - if magick and firstline then - firstline = false --first line is a head in IM but not GM - else - entries = entries + 1 - --print(entries .." :: " .. v) - - value, right, down = realterrain.parse_enumeration(line) - - --print("elev: "..e) - value = math.floor((value / tonumber(realterrain.settings.yscale)) + tonumber(realterrain.settings.yoffset)) - - local x = xstart + right -1 - local z = 0- zstart + down - - if not mincol then - mincol = x - maxcol = x - minrow = z - maxrow = z - else - if x < mincol then mincol = x end - if x > maxcol then maxcol = x end - if z < minrow then minrow = z end - if z > maxrow then maxrow = z end - end--]] - --print ("x: "..x..", z: "..z..", elev: "..value) - if not pixels[z] then pixels[z] = {} end - pixels[z][x] = {elev=value} - end - end - local firstline = true - if get_cover then - local enumeration = realterrain.get_enumeration(realterrain.cover.image, xstart, width, zstart, length) + if py then + + v = py.eval(raster..".getpixel(("..x..","..z.."))") --no bit depth conversion required + v = tonumber(tostring(v)) + --print(e) + + else + local enumeration = realterrain.get_enumeration("dem", xstart, width, zstart, length) + + --print("entire enumeration: "..enumeration) + local entries = 0 + + local mincol, maxcol, minrow, maxrow + local firstline = true for k,line in next, string.split(enumeration, "\n") do if magick and firstline then firstline = false --first line is a head in IM but not GM else - value, right, down = realterrain.parse_enumeration(line) + entries = entries + 1 + --print(entries .." :: " .. v) + + local value, right, down = realterrain.parse_enumeration(line) + --print("elev: "..e) value = math.floor((value / tonumber(realterrain.settings.yscale)) + tonumber(realterrain.settings.yoffset)) local x = xstart + right -1 local z = 0- zstart + down + + if not mincol then + mincol = x + maxcol = x + minrow = z + maxrow = z + else + if x < mincol then mincol = x end + if x > maxcol then maxcol = x end + if z < minrow then minrow = z end + if z > maxrow then maxrow = z end + end--]] + --print ("x: "..x..", z: "..z..", elev: "..value) if not pixels[z] then pixels[z] = {} end - pixels[z][x] = {cover=value} + pixels[z][x] = {elev=value} end end - end - local firstline = true - if get_input then - local enumeration = realterrain.get_enumeration(realterrain.input.image, xstart, width, zstart, length) - for k,line in next, string.split(enumeration, "\n") do - if magick and firstline then - firstline = false --first line is a head in IM but not GM - else - value, right, down = realterrain.parse_enumeration(line) - - value = math.floor((value / tonumber(realterrain.settings.yscale)) + tonumber(realterrain.settings.yoffset)) - - local x = xstart + right -1 - local z = 0- zstart + down - if not pixels[z] then pixels[z] = {} end - pixels[z][x] = {input=value} + local firstline = true + if get_cover then + local enumeration = realterrain.get_enumeration("cover", xstart, width, zstart, length) + for k,line in next, string.split(enumeration, "\n") do + if magick and firstline then + firstline = false --first line is a head in IM but not GM + else + value, right, down = realterrain.parse_enumeration(line) + + value = math.floor((value / tonumber(realterrain.settings.yscale)) + tonumber(realterrain.settings.yoffset)) + + local x = xstart + right -1 + local z = 0- zstart + down + if not pixels[z] then pixels[z] = {} end + pixels[z][x] = {cover=value} + end end end + local firstline = true + if get_input then + local enumeration = realterrain.get_enumeration("input", xstart, width, zstart, length) + for k,line in next, string.split(enumeration, "\n") do + if magick and firstline then + firstline = false --first line is a head in IM but not GM + else + value, right, down = realterrain.parse_enumeration(line) + + value = math.floor((value / tonumber(realterrain.settings.yscale)) + tonumber(realterrain.settings.yoffset)) + + local x = xstart + right -1 + local z = 0- zstart + down + if not pixels[z] then pixels[z] = {} end + pixels[z][x] = {input=value} + end + end + end + --print(dump(pixels)) + print("result range: x:"..mincol..","..maxcol.."; z:"..minrow..","..maxrow) + print("result entries: "..entries) end - --print(dump(pixels)) - print("result range: x:"..mincol..","..maxcol.."; z:"..minrow..","..maxrow) - print("result entries: "..entries) return pixels end--]] diff --git a/graphicsmagick/Image.lua b/lib/graphicsmagick/Image.lua similarity index 100% rename from graphicsmagick/Image.lua rename to lib/graphicsmagick/Image.lua diff --git a/graphicsmagick/README.md b/lib/graphicsmagick/README.md similarity index 100% rename from graphicsmagick/README.md rename to lib/graphicsmagick/README.md diff --git a/graphicsmagick/convert.lua b/lib/graphicsmagick/convert.lua similarity index 100% rename from graphicsmagick/convert.lua rename to lib/graphicsmagick/convert.lua diff --git a/graphicsmagick/exif.lua b/lib/graphicsmagick/exif.lua similarity index 100% rename from graphicsmagick/exif.lua rename to lib/graphicsmagick/exif.lua diff --git a/graphicsmagick/graphicsmagick-1.scm-0.rockspec b/lib/graphicsmagick/graphicsmagick-1.scm-0.rockspec similarity index 100% rename from graphicsmagick/graphicsmagick-1.scm-0.rockspec rename to lib/graphicsmagick/graphicsmagick-1.scm-0.rockspec diff --git a/graphicsmagick/info.lua b/lib/graphicsmagick/info.lua similarity index 100% rename from graphicsmagick/info.lua rename to lib/graphicsmagick/info.lua diff --git a/graphicsmagick/init.lua b/lib/graphicsmagick/init.lua similarity index 100% rename from graphicsmagick/init.lua rename to lib/graphicsmagick/init.lua diff --git a/graphicsmagick/test/affine.lua b/lib/graphicsmagick/test/affine.lua similarity index 100% rename from graphicsmagick/test/affine.lua rename to lib/graphicsmagick/test/affine.lua diff --git a/graphicsmagick/test/city-corrupt.jpg b/lib/graphicsmagick/test/city-corrupt.jpg similarity index 100% rename from graphicsmagick/test/city-corrupt.jpg rename to lib/graphicsmagick/test/city-corrupt.jpg diff --git a/graphicsmagick/test/city.jpg b/lib/graphicsmagick/test/city.jpg similarity index 100% rename from graphicsmagick/test/city.jpg rename to lib/graphicsmagick/test/city.jpg diff --git a/graphicsmagick/test/colorspace.lua b/lib/graphicsmagick/test/colorspace.lua similarity index 100% rename from graphicsmagick/test/colorspace.lua rename to lib/graphicsmagick/test/colorspace.lua diff --git a/graphicsmagick/test/corrupt.lua b/lib/graphicsmagick/test/corrupt.lua similarity index 100% rename from graphicsmagick/test/corrupt.lua rename to lib/graphicsmagick/test/corrupt.lua diff --git a/graphicsmagick/test/forest.jpg b/lib/graphicsmagick/test/forest.jpg similarity index 100% rename from graphicsmagick/test/forest.jpg rename to lib/graphicsmagick/test/forest.jpg diff --git a/graphicsmagick/test/fromTensor.lua b/lib/graphicsmagick/test/fromTensor.lua similarity index 100% rename from graphicsmagick/test/fromTensor.lua rename to lib/graphicsmagick/test/fromTensor.lua diff --git a/graphicsmagick/test/gamma.lua b/lib/graphicsmagick/test/gamma.lua similarity index 100% rename from graphicsmagick/test/gamma.lua rename to lib/graphicsmagick/test/gamma.lua diff --git a/graphicsmagick/test/gamma_3x3.jpg b/lib/graphicsmagick/test/gamma_3x3.jpg similarity index 100% rename from graphicsmagick/test/gamma_3x3.jpg rename to lib/graphicsmagick/test/gamma_3x3.jpg diff --git a/graphicsmagick/test/lena.jpg b/lib/graphicsmagick/test/lena.jpg similarity index 100% rename from graphicsmagick/test/lena.jpg rename to lib/graphicsmagick/test/lena.jpg diff --git a/graphicsmagick/test/loadDirectory.lua b/lib/graphicsmagick/test/loadDirectory.lua similarity index 100% rename from graphicsmagick/test/loadDirectory.lua rename to lib/graphicsmagick/test/loadDirectory.lua diff --git a/graphicsmagick/test/loadsave.lua b/lib/graphicsmagick/test/loadsave.lua similarity index 100% rename from graphicsmagick/test/loadsave.lua rename to lib/graphicsmagick/test/loadsave.lua diff --git a/graphicsmagick/test/opacity.lua b/lib/graphicsmagick/test/opacity.lua similarity index 100% rename from graphicsmagick/test/opacity.lua rename to lib/graphicsmagick/test/opacity.lua diff --git a/graphicsmagick/test/sampling_factors.lua b/lib/graphicsmagick/test/sampling_factors.lua similarity index 100% rename from graphicsmagick/test/sampling_factors.lua rename to lib/graphicsmagick/test/sampling_factors.lua diff --git a/graphicsmagick/test/thumb.lua b/lib/graphicsmagick/test/thumb.lua similarity index 100% rename from graphicsmagick/test/thumb.lua rename to lib/graphicsmagick/test/thumb.lua diff --git a/graphicsmagick/test/toTensor.lua b/lib/graphicsmagick/test/toTensor.lua similarity index 100% rename from graphicsmagick/test/toTensor.lua rename to lib/graphicsmagick/test/toTensor.lua diff --git a/graphicsmagick/test/transform.lua b/lib/graphicsmagick/test/transform.lua similarity index 100% rename from graphicsmagick/test/transform.lua rename to lib/graphicsmagick/test/transform.lua diff --git a/lua-imagesize-1.2/COPYRIGHT b/lib/lua-imagesize-1.2/COPYRIGHT similarity index 100% rename from lua-imagesize-1.2/COPYRIGHT rename to lib/lua-imagesize-1.2/COPYRIGHT diff --git a/lua-imagesize-1.2/Changes b/lib/lua-imagesize-1.2/Changes similarity index 100% rename from lua-imagesize-1.2/Changes rename to lib/lua-imagesize-1.2/Changes diff --git a/lua-imagesize-1.2/MANIFEST b/lib/lua-imagesize-1.2/MANIFEST similarity index 100% rename from lua-imagesize-1.2/MANIFEST rename to lib/lua-imagesize-1.2/MANIFEST diff --git a/lua-imagesize-1.2/Makefile b/lib/lua-imagesize-1.2/Makefile similarity index 100% rename from lua-imagesize-1.2/Makefile rename to lib/lua-imagesize-1.2/Makefile diff --git a/lua-imagesize-1.2/doc/lua-imagesize.3 b/lib/lua-imagesize-1.2/doc/lua-imagesize.3 similarity index 100% rename from lua-imagesize-1.2/doc/lua-imagesize.3 rename to lib/lua-imagesize-1.2/doc/lua-imagesize.3 diff --git a/lua-imagesize-1.2/doc/lua-imagesize.pod b/lib/lua-imagesize-1.2/doc/lua-imagesize.pod similarity index 100% rename from lua-imagesize-1.2/doc/lua-imagesize.pod rename to lib/lua-imagesize-1.2/doc/lua-imagesize.pod diff --git a/lua-imagesize-1.2/imagesize.lua b/lib/lua-imagesize-1.2/imagesize.lua similarity index 100% rename from lua-imagesize-1.2/imagesize.lua rename to lib/lua-imagesize-1.2/imagesize.lua diff --git a/lua-imagesize-1.2/imagesize/format/bmp.lua b/lib/lua-imagesize-1.2/imagesize/format/bmp.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/bmp.lua rename to lib/lua-imagesize-1.2/imagesize/format/bmp.lua diff --git a/lua-imagesize-1.2/imagesize/format/gif.lua b/lib/lua-imagesize-1.2/imagesize/format/gif.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/gif.lua rename to lib/lua-imagesize-1.2/imagesize/format/gif.lua diff --git a/lua-imagesize-1.2/imagesize/format/jpeg.lua b/lib/lua-imagesize-1.2/imagesize/format/jpeg.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/jpeg.lua rename to lib/lua-imagesize-1.2/imagesize/format/jpeg.lua diff --git a/lua-imagesize-1.2/imagesize/format/mng.lua b/lib/lua-imagesize-1.2/imagesize/format/mng.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/mng.lua rename to lib/lua-imagesize-1.2/imagesize/format/mng.lua diff --git a/lua-imagesize-1.2/imagesize/format/pcd.lua b/lib/lua-imagesize-1.2/imagesize/format/pcd.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/pcd.lua rename to lib/lua-imagesize-1.2/imagesize/format/pcd.lua diff --git a/lua-imagesize-1.2/imagesize/format/png.lua b/lib/lua-imagesize-1.2/imagesize/format/png.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/png.lua rename to lib/lua-imagesize-1.2/imagesize/format/png.lua diff --git a/lua-imagesize-1.2/imagesize/format/pnm.lua b/lib/lua-imagesize-1.2/imagesize/format/pnm.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/pnm.lua rename to lib/lua-imagesize-1.2/imagesize/format/pnm.lua diff --git a/lua-imagesize-1.2/imagesize/format/psd.lua b/lib/lua-imagesize-1.2/imagesize/format/psd.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/psd.lua rename to lib/lua-imagesize-1.2/imagesize/format/psd.lua diff --git a/lua-imagesize-1.2/imagesize/format/swf.lua b/lib/lua-imagesize-1.2/imagesize/format/swf.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/swf.lua rename to lib/lua-imagesize-1.2/imagesize/format/swf.lua diff --git a/lua-imagesize-1.2/imagesize/format/tiff.lua b/lib/lua-imagesize-1.2/imagesize/format/tiff.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/tiff.lua rename to lib/lua-imagesize-1.2/imagesize/format/tiff.lua diff --git a/lua-imagesize-1.2/imagesize/format/xbm.lua b/lib/lua-imagesize-1.2/imagesize/format/xbm.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/xbm.lua rename to lib/lua-imagesize-1.2/imagesize/format/xbm.lua diff --git a/lua-imagesize-1.2/imagesize/format/xcf.lua b/lib/lua-imagesize-1.2/imagesize/format/xcf.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/xcf.lua rename to lib/lua-imagesize-1.2/imagesize/format/xcf.lua diff --git a/lua-imagesize-1.2/imagesize/format/xpm.lua b/lib/lua-imagesize-1.2/imagesize/format/xpm.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/format/xpm.lua rename to lib/lua-imagesize-1.2/imagesize/format/xpm.lua diff --git a/lua-imagesize-1.2/imagesize/util.lua b/lib/lua-imagesize-1.2/imagesize/util.lua similarity index 100% rename from lua-imagesize-1.2/imagesize/util.lua rename to lib/lua-imagesize-1.2/imagesize/util.lua diff --git a/lua-imagesize-1.2/lunit-console.lua b/lib/lua-imagesize-1.2/lunit-console.lua similarity index 100% rename from lua-imagesize-1.2/lunit-console.lua rename to lib/lua-imagesize-1.2/lunit-console.lua diff --git a/lua-imagesize-1.2/lunit.lua b/lib/lua-imagesize-1.2/lunit.lua similarity index 100% rename from lua-imagesize-1.2/lunit.lua rename to lib/lua-imagesize-1.2/lunit.lua diff --git a/lua-imagesize-1.2/test/data/468x60.psd b/lib/lua-imagesize-1.2/test/data/468x60.psd similarity index 100% rename from lua-imagesize-1.2/test/data/468x60.psd rename to lib/lua-imagesize-1.2/test/data/468x60.psd diff --git a/lua-imagesize-1.2/test/data/8.swf b/lib/lua-imagesize-1.2/test/data/8.swf similarity index 100% rename from lua-imagesize-1.2/test/data/8.swf rename to lib/lua-imagesize-1.2/test/data/8.swf diff --git a/lua-imagesize-1.2/test/data/DUTCH1.mng b/lib/lua-imagesize-1.2/test/data/DUTCH1.mng similarity index 100% rename from lua-imagesize-1.2/test/data/DUTCH1.mng rename to lib/lua-imagesize-1.2/test/data/DUTCH1.mng diff --git a/lua-imagesize-1.2/test/data/anim.gif b/lib/lua-imagesize-1.2/test/data/anim.gif similarity index 100% rename from lua-imagesize-1.2/test/data/anim.gif rename to lib/lua-imagesize-1.2/test/data/anim.gif diff --git a/lua-imagesize-1.2/test/data/anim.xcf b/lib/lua-imagesize-1.2/test/data/anim.xcf similarity index 100% rename from lua-imagesize-1.2/test/data/anim.xcf rename to lib/lua-imagesize-1.2/test/data/anim.xcf diff --git a/lua-imagesize-1.2/test/data/bexjdic.tif b/lib/lua-imagesize-1.2/test/data/bexjdic.tif similarity index 100% rename from lua-imagesize-1.2/test/data/bexjdic.tif rename to lib/lua-imagesize-1.2/test/data/bexjdic.tif diff --git a/lua-imagesize-1.2/test/data/letter_N.pbm b/lib/lua-imagesize-1.2/test/data/letter_N.pbm similarity index 100% rename from lua-imagesize-1.2/test/data/letter_N.pbm rename to lib/lua-imagesize-1.2/test/data/letter_N.pbm diff --git a/lua-imagesize-1.2/test/data/letter_N.pgm b/lib/lua-imagesize-1.2/test/data/letter_N.pgm similarity index 100% rename from lua-imagesize-1.2/test/data/letter_N.pgm rename to lib/lua-imagesize-1.2/test/data/letter_N.pgm diff --git a/lua-imagesize-1.2/test/data/letter_N.ppm b/lib/lua-imagesize-1.2/test/data/letter_N.ppm similarity index 100% rename from lua-imagesize-1.2/test/data/letter_N.ppm rename to lib/lua-imagesize-1.2/test/data/letter_N.ppm diff --git a/lua-imagesize-1.2/test/data/letter_T.jpg b/lib/lua-imagesize-1.2/test/data/letter_T.jpg similarity index 100% rename from lua-imagesize-1.2/test/data/letter_T.jpg rename to lib/lua-imagesize-1.2/test/data/letter_T.jpg diff --git a/lua-imagesize-1.2/test/data/lexjdic.tif b/lib/lua-imagesize-1.2/test/data/lexjdic.tif similarity index 100% rename from lua-imagesize-1.2/test/data/lexjdic.tif rename to lib/lua-imagesize-1.2/test/data/lexjdic.tif diff --git a/lua-imagesize-1.2/test/data/old-os2.bmp b/lib/lua-imagesize-1.2/test/data/old-os2.bmp similarity index 100% rename from lua-imagesize-1.2/test/data/old-os2.bmp rename to lib/lua-imagesize-1.2/test/data/old-os2.bmp diff --git a/lua-imagesize-1.2/test/data/pak38.jpg b/lib/lua-imagesize-1.2/test/data/pak38.jpg similarity index 100% rename from lua-imagesize-1.2/test/data/pak38.jpg rename to lib/lua-imagesize-1.2/test/data/pak38.jpg diff --git a/lua-imagesize-1.2/test/data/pass-1_s.png b/lib/lua-imagesize-1.2/test/data/pass-1_s.png similarity index 100% rename from lua-imagesize-1.2/test/data/pass-1_s.png rename to lib/lua-imagesize-1.2/test/data/pass-1_s.png diff --git a/lua-imagesize-1.2/test/data/spacer50.xbm b/lib/lua-imagesize-1.2/test/data/spacer50.xbm similarity index 100% rename from lua-imagesize-1.2/test/data/spacer50.xbm rename to lib/lua-imagesize-1.2/test/data/spacer50.xbm diff --git a/lua-imagesize-1.2/test/data/test.gif b/lib/lua-imagesize-1.2/test/data/test.gif similarity index 100% rename from lua-imagesize-1.2/test/data/test.gif rename to lib/lua-imagesize-1.2/test/data/test.gif diff --git a/lua-imagesize-1.2/test/data/xterm.bmp b/lib/lua-imagesize-1.2/test/data/xterm.bmp similarity index 100% rename from lua-imagesize-1.2/test/data/xterm.bmp rename to lib/lua-imagesize-1.2/test/data/xterm.bmp diff --git a/lua-imagesize-1.2/test/data/xterm.xpm b/lib/lua-imagesize-1.2/test/data/xterm.xpm similarity index 100% rename from lua-imagesize-1.2/test/data/xterm.xpm rename to lib/lua-imagesize-1.2/test/data/xterm.xpm diff --git a/lua-imagesize-1.2/test/data/xv-thumbnail b/lib/lua-imagesize-1.2/test/data/xv-thumbnail similarity index 100% rename from lua-imagesize-1.2/test/data/xv-thumbnail rename to lib/lua-imagesize-1.2/test/data/xv-thumbnail diff --git a/lua-imagesize-1.2/test/data/yasp.swf b/lib/lua-imagesize-1.2/test/data/yasp.swf similarity index 100% rename from lua-imagesize-1.2/test/data/yasp.swf rename to lib/lua-imagesize-1.2/test/data/yasp.swf diff --git a/lua-imagesize-1.2/test/formats.lua b/lib/lua-imagesize-1.2/test/formats.lua similarity index 100% rename from lua-imagesize-1.2/test/formats.lua rename to lib/lua-imagesize-1.2/test/formats.lua diff --git a/lua-imagesize-1.2/test/util.lua b/lib/lua-imagesize-1.2/test/util.lua similarity index 100% rename from lua-imagesize-1.2/test/util.lua rename to lib/lua-imagesize-1.2/test/util.lua diff --git a/lua-imlib2/DOCUMENTATION.mkd b/lib/lua-imlib2/DOCUMENTATION.mkd similarity index 100% rename from lua-imlib2/DOCUMENTATION.mkd rename to lib/lua-imlib2/DOCUMENTATION.mkd diff --git a/lua-imlib2/LICENSE b/lib/lua-imlib2/LICENSE similarity index 100% rename from lua-imlib2/LICENSE rename to lib/lua-imlib2/LICENSE diff --git a/lua-imlib2/Makefile b/lib/lua-imlib2/Makefile similarity index 100% rename from lua-imlib2/Makefile rename to lib/lua-imlib2/Makefile diff --git a/lua-imlib2/README.mkd b/lib/lua-imlib2/README.mkd similarity index 100% rename from lua-imlib2/README.mkd rename to lib/lua-imlib2/README.mkd diff --git a/lua-imlib2/TODO b/lib/lua-imlib2/TODO similarity index 100% rename from lua-imlib2/TODO rename to lib/lua-imlib2/TODO diff --git a/lua-imlib2/examples/checkerboard.lua b/lib/lua-imlib2/examples/checkerboard.lua similarity index 100% rename from lua-imlib2/examples/checkerboard.lua rename to lib/lua-imlib2/examples/checkerboard.lua diff --git a/lua-imlib2/examples/sierpinski.lua b/lib/lua-imlib2/examples/sierpinski.lua similarity index 100% rename from lua-imlib2/examples/sierpinski.lua rename to lib/lua-imlib2/examples/sierpinski.lua diff --git a/lua-imlib2/examples/wallpaper.lua b/lib/lua-imlib2/examples/wallpaper.lua similarity index 100% rename from lua-imlib2/examples/wallpaper.lua rename to lib/lua-imlib2/examples/wallpaper.lua diff --git a/lua-imlib2/imlib2.lua b/lib/lua-imlib2/imlib2.lua similarity index 100% rename from lua-imlib2/imlib2.lua rename to lib/lua-imlib2/imlib2.lua diff --git a/lua-imlib2/limlib2.c b/lib/lua-imlib2/limlib2.c similarity index 100% rename from lua-imlib2/limlib2.c rename to lib/lua-imlib2/limlib2.c diff --git a/lua-imlib2/lua-imlib2-dev-1.rockspec b/lib/lua-imlib2/lua-imlib2-dev-1.rockspec similarity index 100% rename from lua-imlib2/lua-imlib2-dev-1.rockspec rename to lib/lua-imlib2/lua-imlib2-dev-1.rockspec diff --git a/lua-imlib2/test/border_test.lua b/lib/lua-imlib2/test/border_test.lua similarity index 100% rename from lua-imlib2/test/border_test.lua rename to lib/lua-imlib2/test/border_test.lua diff --git a/lua-imlib2/test/color_test.lua b/lib/lua-imlib2/test/color_test.lua similarity index 100% rename from lua-imlib2/test/color_test.lua rename to lib/lua-imlib2/test/color_test.lua diff --git a/lua-imlib2/test/font_test.lua b/lib/lua-imlib2/test/font_test.lua similarity index 100% rename from lua-imlib2/test/font_test.lua rename to lib/lua-imlib2/test/font_test.lua diff --git a/lua-imlib2/test/gradient_test.lua b/lib/lua-imlib2/test/gradient_test.lua similarity index 100% rename from lua-imlib2/test/gradient_test.lua rename to lib/lua-imlib2/test/gradient_test.lua diff --git a/lua-imlib2/test/imlib2_test.lua b/lib/lua-imlib2/test/imlib2_test.lua similarity index 100% rename from lua-imlib2/test/imlib2_test.lua rename to lib/lua-imlib2/test/imlib2_test.lua diff --git a/lua-imlib2/test/polygon_test.lua b/lib/lua-imlib2/test/polygon_test.lua similarity index 100% rename from lua-imlib2/test/polygon_test.lua rename to lib/lua-imlib2/test/polygon_test.lua diff --git a/luasocket/.gitignore b/lib/luasocket/.gitignore similarity index 100% rename from luasocket/.gitignore rename to lib/luasocket/.gitignore diff --git a/luasocket/.travis.yml b/lib/luasocket/.travis.yml similarity index 100% rename from luasocket/.travis.yml rename to lib/luasocket/.travis.yml diff --git a/luasocket/FIX b/lib/luasocket/FIX similarity index 100% rename from luasocket/FIX rename to lib/luasocket/FIX diff --git a/luasocket/LICENSE b/lib/luasocket/LICENSE similarity index 100% rename from luasocket/LICENSE rename to lib/luasocket/LICENSE diff --git a/luasocket/Lua51.props b/lib/luasocket/Lua51.props similarity index 100% rename from luasocket/Lua51.props rename to lib/luasocket/Lua51.props diff --git a/luasocket/Lua52.props b/lib/luasocket/Lua52.props similarity index 100% rename from luasocket/Lua52.props rename to lib/luasocket/Lua52.props diff --git a/luasocket/NEW b/lib/luasocket/NEW similarity index 100% rename from luasocket/NEW rename to lib/luasocket/NEW diff --git a/luasocket/README b/lib/luasocket/README similarity index 100% rename from luasocket/README rename to lib/luasocket/README diff --git a/luasocket/TODO b/lib/luasocket/TODO similarity index 100% rename from luasocket/TODO rename to lib/luasocket/TODO diff --git a/luasocket/WISH b/lib/luasocket/WISH similarity index 100% rename from luasocket/WISH rename to lib/luasocket/WISH diff --git a/luasocket/doc/dns.html b/lib/luasocket/doc/dns.html similarity index 100% rename from luasocket/doc/dns.html rename to lib/luasocket/doc/dns.html diff --git a/luasocket/doc/ftp.html b/lib/luasocket/doc/ftp.html similarity index 100% rename from luasocket/doc/ftp.html rename to lib/luasocket/doc/ftp.html diff --git a/luasocket/doc/http.html b/lib/luasocket/doc/http.html similarity index 100% rename from luasocket/doc/http.html rename to lib/luasocket/doc/http.html diff --git a/luasocket/doc/index.html b/lib/luasocket/doc/index.html similarity index 100% rename from luasocket/doc/index.html rename to lib/luasocket/doc/index.html diff --git a/luasocket/doc/installation.html b/lib/luasocket/doc/installation.html similarity index 100% rename from luasocket/doc/installation.html rename to lib/luasocket/doc/installation.html diff --git a/luasocket/doc/introduction.html b/lib/luasocket/doc/introduction.html similarity index 100% rename from luasocket/doc/introduction.html rename to lib/luasocket/doc/introduction.html diff --git a/luasocket/doc/ltn12.html b/lib/luasocket/doc/ltn12.html similarity index 100% rename from luasocket/doc/ltn12.html rename to lib/luasocket/doc/ltn12.html diff --git a/luasocket/doc/lua05.ppt b/lib/luasocket/doc/lua05.ppt similarity index 100% rename from luasocket/doc/lua05.ppt rename to lib/luasocket/doc/lua05.ppt diff --git a/luasocket/doc/luasocket.png b/lib/luasocket/doc/luasocket.png similarity index 100% rename from luasocket/doc/luasocket.png rename to lib/luasocket/doc/luasocket.png diff --git a/luasocket/doc/mime.html b/lib/luasocket/doc/mime.html similarity index 100% rename from luasocket/doc/mime.html rename to lib/luasocket/doc/mime.html diff --git a/luasocket/doc/reference.css b/lib/luasocket/doc/reference.css similarity index 100% rename from luasocket/doc/reference.css rename to lib/luasocket/doc/reference.css diff --git a/luasocket/doc/reference.html b/lib/luasocket/doc/reference.html similarity index 100% rename from luasocket/doc/reference.html rename to lib/luasocket/doc/reference.html diff --git a/luasocket/doc/smtp.html b/lib/luasocket/doc/smtp.html similarity index 100% rename from luasocket/doc/smtp.html rename to lib/luasocket/doc/smtp.html diff --git a/luasocket/doc/socket.html b/lib/luasocket/doc/socket.html similarity index 100% rename from luasocket/doc/socket.html rename to lib/luasocket/doc/socket.html diff --git a/luasocket/doc/tcp.html b/lib/luasocket/doc/tcp.html similarity index 100% rename from luasocket/doc/tcp.html rename to lib/luasocket/doc/tcp.html diff --git a/luasocket/doc/udp.html b/lib/luasocket/doc/udp.html similarity index 100% rename from luasocket/doc/udp.html rename to lib/luasocket/doc/udp.html diff --git a/luasocket/doc/url.html b/lib/luasocket/doc/url.html similarity index 100% rename from luasocket/doc/url.html rename to lib/luasocket/doc/url.html diff --git a/luasocket/etc/README b/lib/luasocket/etc/README similarity index 100% rename from luasocket/etc/README rename to lib/luasocket/etc/README diff --git a/luasocket/etc/b64.lua b/lib/luasocket/etc/b64.lua similarity index 100% rename from luasocket/etc/b64.lua rename to lib/luasocket/etc/b64.lua diff --git a/luasocket/etc/check-links.lua b/lib/luasocket/etc/check-links.lua similarity index 100% rename from luasocket/etc/check-links.lua rename to lib/luasocket/etc/check-links.lua diff --git a/luasocket/etc/check-memory.lua b/lib/luasocket/etc/check-memory.lua similarity index 100% rename from luasocket/etc/check-memory.lua rename to lib/luasocket/etc/check-memory.lua diff --git a/luasocket/etc/cookie.lua b/lib/luasocket/etc/cookie.lua similarity index 100% rename from luasocket/etc/cookie.lua rename to lib/luasocket/etc/cookie.lua diff --git a/luasocket/etc/dict.lua b/lib/luasocket/etc/dict.lua similarity index 100% rename from luasocket/etc/dict.lua rename to lib/luasocket/etc/dict.lua diff --git a/luasocket/etc/dispatch.lua b/lib/luasocket/etc/dispatch.lua similarity index 100% rename from luasocket/etc/dispatch.lua rename to lib/luasocket/etc/dispatch.lua diff --git a/luasocket/etc/eol.lua b/lib/luasocket/etc/eol.lua similarity index 100% rename from luasocket/etc/eol.lua rename to lib/luasocket/etc/eol.lua diff --git a/luasocket/etc/forward.lua b/lib/luasocket/etc/forward.lua similarity index 100% rename from luasocket/etc/forward.lua rename to lib/luasocket/etc/forward.lua diff --git a/luasocket/etc/get.lua b/lib/luasocket/etc/get.lua similarity index 100% rename from luasocket/etc/get.lua rename to lib/luasocket/etc/get.lua diff --git a/luasocket/etc/links b/lib/luasocket/etc/links similarity index 100% rename from luasocket/etc/links rename to lib/luasocket/etc/links diff --git a/luasocket/etc/lp.lua b/lib/luasocket/etc/lp.lua similarity index 100% rename from luasocket/etc/lp.lua rename to lib/luasocket/etc/lp.lua diff --git a/luasocket/etc/qp.lua b/lib/luasocket/etc/qp.lua similarity index 100% rename from luasocket/etc/qp.lua rename to lib/luasocket/etc/qp.lua diff --git a/luasocket/etc/tftp.lua b/lib/luasocket/etc/tftp.lua similarity index 100% rename from luasocket/etc/tftp.lua rename to lib/luasocket/etc/tftp.lua diff --git a/luasocket/gem/ex1.lua b/lib/luasocket/gem/ex1.lua similarity index 100% rename from luasocket/gem/ex1.lua rename to lib/luasocket/gem/ex1.lua diff --git a/luasocket/gem/ex10.lua b/lib/luasocket/gem/ex10.lua similarity index 100% rename from luasocket/gem/ex10.lua rename to lib/luasocket/gem/ex10.lua diff --git a/luasocket/gem/ex11.lua b/lib/luasocket/gem/ex11.lua similarity index 100% rename from luasocket/gem/ex11.lua rename to lib/luasocket/gem/ex11.lua diff --git a/luasocket/gem/ex12.lua b/lib/luasocket/gem/ex12.lua similarity index 100% rename from luasocket/gem/ex12.lua rename to lib/luasocket/gem/ex12.lua diff --git a/luasocket/gem/ex2.lua b/lib/luasocket/gem/ex2.lua similarity index 100% rename from luasocket/gem/ex2.lua rename to lib/luasocket/gem/ex2.lua diff --git a/luasocket/gem/ex3.lua b/lib/luasocket/gem/ex3.lua similarity index 100% rename from luasocket/gem/ex3.lua rename to lib/luasocket/gem/ex3.lua diff --git a/luasocket/gem/ex4.lua b/lib/luasocket/gem/ex4.lua similarity index 100% rename from luasocket/gem/ex4.lua rename to lib/luasocket/gem/ex4.lua diff --git a/luasocket/gem/ex5.lua b/lib/luasocket/gem/ex5.lua similarity index 100% rename from luasocket/gem/ex5.lua rename to lib/luasocket/gem/ex5.lua diff --git a/luasocket/gem/ex6.lua b/lib/luasocket/gem/ex6.lua similarity index 100% rename from luasocket/gem/ex6.lua rename to lib/luasocket/gem/ex6.lua diff --git a/luasocket/gem/ex7.lua b/lib/luasocket/gem/ex7.lua similarity index 100% rename from luasocket/gem/ex7.lua rename to lib/luasocket/gem/ex7.lua diff --git a/luasocket/gem/ex8.lua b/lib/luasocket/gem/ex8.lua similarity index 100% rename from luasocket/gem/ex8.lua rename to lib/luasocket/gem/ex8.lua diff --git a/luasocket/gem/ex9.lua b/lib/luasocket/gem/ex9.lua similarity index 100% rename from luasocket/gem/ex9.lua rename to lib/luasocket/gem/ex9.lua diff --git a/luasocket/gem/gem.c b/lib/luasocket/gem/gem.c similarity index 100% rename from luasocket/gem/gem.c rename to lib/luasocket/gem/gem.c diff --git a/luasocket/gem/gt.b64 b/lib/luasocket/gem/gt.b64 similarity index 100% rename from luasocket/gem/gt.b64 rename to lib/luasocket/gem/gt.b64 diff --git a/luasocket/gem/input.bin b/lib/luasocket/gem/input.bin similarity index 100% rename from luasocket/gem/input.bin rename to lib/luasocket/gem/input.bin diff --git a/luasocket/gem/ltn012.tex b/lib/luasocket/gem/ltn012.tex similarity index 100% rename from luasocket/gem/ltn012.tex rename to lib/luasocket/gem/ltn012.tex diff --git a/luasocket/gem/luasocket.png b/lib/luasocket/gem/luasocket.png similarity index 100% rename from luasocket/gem/luasocket.png rename to lib/luasocket/gem/luasocket.png diff --git a/luasocket/gem/makefile b/lib/luasocket/gem/makefile similarity index 100% rename from luasocket/gem/makefile rename to lib/luasocket/gem/makefile diff --git a/luasocket/gem/myps2pdf b/lib/luasocket/gem/myps2pdf similarity index 100% rename from luasocket/gem/myps2pdf rename to lib/luasocket/gem/myps2pdf diff --git a/luasocket/gem/t1.lua b/lib/luasocket/gem/t1.lua similarity index 100% rename from luasocket/gem/t1.lua rename to lib/luasocket/gem/t1.lua diff --git a/luasocket/gem/t1lf.txt b/lib/luasocket/gem/t1lf.txt similarity index 100% rename from luasocket/gem/t1lf.txt rename to lib/luasocket/gem/t1lf.txt diff --git a/luasocket/gem/t2.lua b/lib/luasocket/gem/t2.lua similarity index 100% rename from luasocket/gem/t2.lua rename to lib/luasocket/gem/t2.lua diff --git a/luasocket/gem/t2.txt b/lib/luasocket/gem/t2.txt similarity index 100% rename from luasocket/gem/t2.txt rename to lib/luasocket/gem/t2.txt diff --git a/luasocket/gem/t2gt.qp b/lib/luasocket/gem/t2gt.qp similarity index 100% rename from luasocket/gem/t2gt.qp rename to lib/luasocket/gem/t2gt.qp diff --git a/luasocket/gem/t3.lua b/lib/luasocket/gem/t3.lua similarity index 100% rename from luasocket/gem/t3.lua rename to lib/luasocket/gem/t3.lua diff --git a/luasocket/gem/t4.lua b/lib/luasocket/gem/t4.lua similarity index 100% rename from luasocket/gem/t4.lua rename to lib/luasocket/gem/t4.lua diff --git a/luasocket/gem/t5.lua b/lib/luasocket/gem/t5.lua similarity index 100% rename from luasocket/gem/t5.lua rename to lib/luasocket/gem/t5.lua diff --git a/luasocket/gem/test.lua b/lib/luasocket/gem/test.lua similarity index 100% rename from luasocket/gem/test.lua rename to lib/luasocket/gem/test.lua diff --git a/luasocket/linux.cmd b/lib/luasocket/linux.cmd similarity index 100% rename from luasocket/linux.cmd rename to lib/luasocket/linux.cmd diff --git a/luasocket/logo.ps b/lib/luasocket/logo.ps similarity index 100% rename from luasocket/logo.ps rename to lib/luasocket/logo.ps diff --git a/luasocket/ltn012.wiki b/lib/luasocket/ltn012.wiki similarity index 100% rename from luasocket/ltn012.wiki rename to lib/luasocket/ltn012.wiki diff --git a/luasocket/ltn013.wiki b/lib/luasocket/ltn013.wiki similarity index 100% rename from luasocket/ltn013.wiki rename to lib/luasocket/ltn013.wiki diff --git a/luasocket/luasocket-scm-0.rockspec b/lib/luasocket/luasocket-scm-0.rockspec similarity index 100% rename from luasocket/luasocket-scm-0.rockspec rename to lib/luasocket/luasocket-scm-0.rockspec diff --git a/luasocket/luasocket.sln b/lib/luasocket/luasocket.sln similarity index 100% rename from luasocket/luasocket.sln rename to lib/luasocket/luasocket.sln diff --git a/luasocket/macosx.cmd b/lib/luasocket/macosx.cmd similarity index 100% rename from luasocket/macosx.cmd rename to lib/luasocket/macosx.cmd diff --git a/luasocket/makefile b/lib/luasocket/makefile similarity index 100% rename from luasocket/makefile rename to lib/luasocket/makefile diff --git a/luasocket/makefile.dist b/lib/luasocket/makefile.dist similarity index 100% rename from luasocket/makefile.dist rename to lib/luasocket/makefile.dist diff --git a/luasocket/mime.vcxproj b/lib/luasocket/mime.vcxproj similarity index 100% rename from luasocket/mime.vcxproj rename to lib/luasocket/mime.vcxproj diff --git a/luasocket/mime.vcxproj.filters b/lib/luasocket/mime.vcxproj.filters similarity index 100% rename from luasocket/mime.vcxproj.filters rename to lib/luasocket/mime.vcxproj.filters diff --git a/luasocket/mingw.cmd b/lib/luasocket/mingw.cmd similarity index 100% rename from luasocket/mingw.cmd rename to lib/luasocket/mingw.cmd diff --git a/luasocket/samples/README b/lib/luasocket/samples/README similarity index 100% rename from luasocket/samples/README rename to lib/luasocket/samples/README diff --git a/luasocket/samples/cddb.lua b/lib/luasocket/samples/cddb.lua similarity index 100% rename from luasocket/samples/cddb.lua rename to lib/luasocket/samples/cddb.lua diff --git a/luasocket/samples/daytimeclnt.lua b/lib/luasocket/samples/daytimeclnt.lua similarity index 100% rename from luasocket/samples/daytimeclnt.lua rename to lib/luasocket/samples/daytimeclnt.lua diff --git a/luasocket/samples/echoclnt.lua b/lib/luasocket/samples/echoclnt.lua similarity index 100% rename from luasocket/samples/echoclnt.lua rename to lib/luasocket/samples/echoclnt.lua diff --git a/luasocket/samples/echosrvr.lua b/lib/luasocket/samples/echosrvr.lua similarity index 100% rename from luasocket/samples/echosrvr.lua rename to lib/luasocket/samples/echosrvr.lua diff --git a/luasocket/samples/listener.lua b/lib/luasocket/samples/listener.lua similarity index 100% rename from luasocket/samples/listener.lua rename to lib/luasocket/samples/listener.lua diff --git a/luasocket/samples/lpr.lua b/lib/luasocket/samples/lpr.lua similarity index 100% rename from luasocket/samples/lpr.lua rename to lib/luasocket/samples/lpr.lua diff --git a/luasocket/samples/mclisten.lua b/lib/luasocket/samples/mclisten.lua similarity index 100% rename from luasocket/samples/mclisten.lua rename to lib/luasocket/samples/mclisten.lua diff --git a/luasocket/samples/mcsend.lua b/lib/luasocket/samples/mcsend.lua similarity index 100% rename from luasocket/samples/mcsend.lua rename to lib/luasocket/samples/mcsend.lua diff --git a/luasocket/samples/talker.lua b/lib/luasocket/samples/talker.lua similarity index 100% rename from luasocket/samples/talker.lua rename to lib/luasocket/samples/talker.lua diff --git a/luasocket/samples/tinyirc.lua b/lib/luasocket/samples/tinyirc.lua similarity index 100% rename from luasocket/samples/tinyirc.lua rename to lib/luasocket/samples/tinyirc.lua diff --git a/luasocket/socket.vcxproj b/lib/luasocket/socket.vcxproj similarity index 100% rename from luasocket/socket.vcxproj rename to lib/luasocket/socket.vcxproj diff --git a/luasocket/socket.vcxproj.filters b/lib/luasocket/socket.vcxproj.filters similarity index 100% rename from luasocket/socket.vcxproj.filters rename to lib/luasocket/socket.vcxproj.filters diff --git a/luasocket/src/auxiliar.c b/lib/luasocket/src/auxiliar.c similarity index 100% rename from luasocket/src/auxiliar.c rename to lib/luasocket/src/auxiliar.c diff --git a/luasocket/src/auxiliar.h b/lib/luasocket/src/auxiliar.h similarity index 100% rename from luasocket/src/auxiliar.h rename to lib/luasocket/src/auxiliar.h diff --git a/luasocket/src/buffer.c b/lib/luasocket/src/buffer.c similarity index 100% rename from luasocket/src/buffer.c rename to lib/luasocket/src/buffer.c diff --git a/luasocket/src/buffer.h b/lib/luasocket/src/buffer.h similarity index 100% rename from luasocket/src/buffer.h rename to lib/luasocket/src/buffer.h diff --git a/luasocket/src/compat.c b/lib/luasocket/src/compat.c similarity index 100% rename from luasocket/src/compat.c rename to lib/luasocket/src/compat.c diff --git a/luasocket/src/compat.h b/lib/luasocket/src/compat.h similarity index 100% rename from luasocket/src/compat.h rename to lib/luasocket/src/compat.h diff --git a/luasocket/src/except.c b/lib/luasocket/src/except.c similarity index 100% rename from luasocket/src/except.c rename to lib/luasocket/src/except.c diff --git a/luasocket/src/except.h b/lib/luasocket/src/except.h similarity index 100% rename from luasocket/src/except.h rename to lib/luasocket/src/except.h diff --git a/luasocket/src/ftp.lua b/lib/luasocket/src/ftp.lua similarity index 100% rename from luasocket/src/ftp.lua rename to lib/luasocket/src/ftp.lua diff --git a/luasocket/src/headers.lua b/lib/luasocket/src/headers.lua similarity index 100% rename from luasocket/src/headers.lua rename to lib/luasocket/src/headers.lua diff --git a/luasocket/src/http.lua b/lib/luasocket/src/http.lua similarity index 100% rename from luasocket/src/http.lua rename to lib/luasocket/src/http.lua diff --git a/luasocket/src/inet.c b/lib/luasocket/src/inet.c similarity index 100% rename from luasocket/src/inet.c rename to lib/luasocket/src/inet.c diff --git a/luasocket/src/inet.h b/lib/luasocket/src/inet.h similarity index 100% rename from luasocket/src/inet.h rename to lib/luasocket/src/inet.h diff --git a/luasocket/src/io.c b/lib/luasocket/src/io.c similarity index 100% rename from luasocket/src/io.c rename to lib/luasocket/src/io.c diff --git a/luasocket/src/io.h b/lib/luasocket/src/io.h similarity index 100% rename from luasocket/src/io.h rename to lib/luasocket/src/io.h diff --git a/luasocket/src/ltn12.lua b/lib/luasocket/src/ltn12.lua similarity index 100% rename from luasocket/src/ltn12.lua rename to lib/luasocket/src/ltn12.lua diff --git a/luasocket/src/luasocket.c b/lib/luasocket/src/luasocket.c similarity index 100% rename from luasocket/src/luasocket.c rename to lib/luasocket/src/luasocket.c diff --git a/luasocket/src/luasocket.h b/lib/luasocket/src/luasocket.h similarity index 100% rename from luasocket/src/luasocket.h rename to lib/luasocket/src/luasocket.h diff --git a/luasocket/src/makefile b/lib/luasocket/src/makefile similarity index 100% rename from luasocket/src/makefile rename to lib/luasocket/src/makefile diff --git a/luasocket/src/mbox.lua b/lib/luasocket/src/mbox.lua similarity index 100% rename from luasocket/src/mbox.lua rename to lib/luasocket/src/mbox.lua diff --git a/luasocket/src/mime.c b/lib/luasocket/src/mime.c similarity index 100% rename from luasocket/src/mime.c rename to lib/luasocket/src/mime.c diff --git a/luasocket/src/mime.h b/lib/luasocket/src/mime.h similarity index 100% rename from luasocket/src/mime.h rename to lib/luasocket/src/mime.h diff --git a/luasocket/src/mime.lua b/lib/luasocket/src/mime.lua similarity index 100% rename from luasocket/src/mime.lua rename to lib/luasocket/src/mime.lua diff --git a/luasocket/src/options.c b/lib/luasocket/src/options.c similarity index 100% rename from luasocket/src/options.c rename to lib/luasocket/src/options.c diff --git a/luasocket/src/options.h b/lib/luasocket/src/options.h similarity index 100% rename from luasocket/src/options.h rename to lib/luasocket/src/options.h diff --git a/luasocket/src/pierror.h b/lib/luasocket/src/pierror.h similarity index 100% rename from luasocket/src/pierror.h rename to lib/luasocket/src/pierror.h diff --git a/luasocket/src/select.c b/lib/luasocket/src/select.c similarity index 100% rename from luasocket/src/select.c rename to lib/luasocket/src/select.c diff --git a/luasocket/src/select.h b/lib/luasocket/src/select.h similarity index 100% rename from luasocket/src/select.h rename to lib/luasocket/src/select.h diff --git a/luasocket/src/serial.c b/lib/luasocket/src/serial.c similarity index 100% rename from luasocket/src/serial.c rename to lib/luasocket/src/serial.c diff --git a/luasocket/src/smtp.lua b/lib/luasocket/src/smtp.lua similarity index 100% rename from luasocket/src/smtp.lua rename to lib/luasocket/src/smtp.lua diff --git a/luasocket/src/socket.h b/lib/luasocket/src/socket.h similarity index 100% rename from luasocket/src/socket.h rename to lib/luasocket/src/socket.h diff --git a/luasocket/src/socket.lua b/lib/luasocket/src/socket.lua similarity index 100% rename from luasocket/src/socket.lua rename to lib/luasocket/src/socket.lua diff --git a/luasocket/src/tcp.c b/lib/luasocket/src/tcp.c similarity index 100% rename from luasocket/src/tcp.c rename to lib/luasocket/src/tcp.c diff --git a/luasocket/src/tcp.h b/lib/luasocket/src/tcp.h similarity index 100% rename from luasocket/src/tcp.h rename to lib/luasocket/src/tcp.h diff --git a/luasocket/src/timeout.c b/lib/luasocket/src/timeout.c similarity index 100% rename from luasocket/src/timeout.c rename to lib/luasocket/src/timeout.c diff --git a/luasocket/src/timeout.h b/lib/luasocket/src/timeout.h similarity index 100% rename from luasocket/src/timeout.h rename to lib/luasocket/src/timeout.h diff --git a/luasocket/src/tp.lua b/lib/luasocket/src/tp.lua similarity index 100% rename from luasocket/src/tp.lua rename to lib/luasocket/src/tp.lua diff --git a/luasocket/src/udp.c b/lib/luasocket/src/udp.c similarity index 100% rename from luasocket/src/udp.c rename to lib/luasocket/src/udp.c diff --git a/luasocket/src/udp.h b/lib/luasocket/src/udp.h similarity index 100% rename from luasocket/src/udp.h rename to lib/luasocket/src/udp.h diff --git a/luasocket/src/unix.c b/lib/luasocket/src/unix.c similarity index 100% rename from luasocket/src/unix.c rename to lib/luasocket/src/unix.c diff --git a/luasocket/src/unix.h b/lib/luasocket/src/unix.h similarity index 100% rename from luasocket/src/unix.h rename to lib/luasocket/src/unix.h diff --git a/luasocket/src/url.lua b/lib/luasocket/src/url.lua similarity index 100% rename from luasocket/src/url.lua rename to lib/luasocket/src/url.lua diff --git a/luasocket/src/usocket.c b/lib/luasocket/src/usocket.c similarity index 100% rename from luasocket/src/usocket.c rename to lib/luasocket/src/usocket.c diff --git a/luasocket/src/usocket.h b/lib/luasocket/src/usocket.h similarity index 100% rename from luasocket/src/usocket.h rename to lib/luasocket/src/usocket.h diff --git a/luasocket/src/wsocket.c b/lib/luasocket/src/wsocket.c similarity index 100% rename from luasocket/src/wsocket.c rename to lib/luasocket/src/wsocket.c diff --git a/luasocket/src/wsocket.h b/lib/luasocket/src/wsocket.h similarity index 100% rename from luasocket/src/wsocket.h rename to lib/luasocket/src/wsocket.h diff --git a/luasocket/test/README b/lib/luasocket/test/README similarity index 100% rename from luasocket/test/README rename to lib/luasocket/test/README diff --git a/luasocket/test/auth/.htaccess b/lib/luasocket/test/auth/.htaccess similarity index 100% rename from luasocket/test/auth/.htaccess rename to lib/luasocket/test/auth/.htaccess diff --git a/luasocket/test/auth/.htpasswd b/lib/luasocket/test/auth/.htpasswd similarity index 100% rename from luasocket/test/auth/.htpasswd rename to lib/luasocket/test/auth/.htpasswd diff --git a/luasocket/test/auth/index.html b/lib/luasocket/test/auth/index.html similarity index 100% rename from luasocket/test/auth/index.html rename to lib/luasocket/test/auth/index.html diff --git a/luasocket/test/cgi/cat b/lib/luasocket/test/cgi/cat similarity index 100% rename from luasocket/test/cgi/cat rename to lib/luasocket/test/cgi/cat diff --git a/luasocket/test/cgi/cat-index-html b/lib/luasocket/test/cgi/cat-index-html similarity index 100% rename from luasocket/test/cgi/cat-index-html rename to lib/luasocket/test/cgi/cat-index-html diff --git a/luasocket/test/cgi/env b/lib/luasocket/test/cgi/env similarity index 100% rename from luasocket/test/cgi/env rename to lib/luasocket/test/cgi/env diff --git a/luasocket/test/cgi/query-string b/lib/luasocket/test/cgi/query-string similarity index 100% rename from luasocket/test/cgi/query-string rename to lib/luasocket/test/cgi/query-string diff --git a/luasocket/test/cgi/redirect-loop b/lib/luasocket/test/cgi/redirect-loop similarity index 100% rename from luasocket/test/cgi/redirect-loop rename to lib/luasocket/test/cgi/redirect-loop diff --git a/luasocket/test/cgi/request-uri b/lib/luasocket/test/cgi/request-uri similarity index 100% rename from luasocket/test/cgi/request-uri rename to lib/luasocket/test/cgi/request-uri diff --git a/luasocket/test/dicttest.lua b/lib/luasocket/test/dicttest.lua similarity index 100% rename from luasocket/test/dicttest.lua rename to lib/luasocket/test/dicttest.lua diff --git a/luasocket/test/excepttest.lua b/lib/luasocket/test/excepttest.lua similarity index 100% rename from luasocket/test/excepttest.lua rename to lib/luasocket/test/excepttest.lua diff --git a/luasocket/test/find-connect-limit b/lib/luasocket/test/find-connect-limit similarity index 100% rename from luasocket/test/find-connect-limit rename to lib/luasocket/test/find-connect-limit diff --git a/luasocket/test/ftptest.lua b/lib/luasocket/test/ftptest.lua similarity index 100% rename from luasocket/test/ftptest.lua rename to lib/luasocket/test/ftptest.lua diff --git a/luasocket/test/hello.lua b/lib/luasocket/test/hello.lua similarity index 100% rename from luasocket/test/hello.lua rename to lib/luasocket/test/hello.lua diff --git a/luasocket/test/httptest.lua b/lib/luasocket/test/httptest.lua similarity index 100% rename from luasocket/test/httptest.lua rename to lib/luasocket/test/httptest.lua diff --git a/luasocket/test/index.html b/lib/luasocket/test/index.html similarity index 100% rename from luasocket/test/index.html rename to lib/luasocket/test/index.html diff --git a/luasocket/test/ltn12test.lua b/lib/luasocket/test/ltn12test.lua similarity index 100% rename from luasocket/test/ltn12test.lua rename to lib/luasocket/test/ltn12test.lua diff --git a/luasocket/test/luasocket.png b/lib/luasocket/test/luasocket.png similarity index 100% rename from luasocket/test/luasocket.png rename to lib/luasocket/test/luasocket.png diff --git a/luasocket/test/mimetest.lua b/lib/luasocket/test/mimetest.lua similarity index 100% rename from luasocket/test/mimetest.lua rename to lib/luasocket/test/mimetest.lua diff --git a/luasocket/test/smtptest.lua b/lib/luasocket/test/smtptest.lua similarity index 100% rename from luasocket/test/smtptest.lua rename to lib/luasocket/test/smtptest.lua diff --git a/luasocket/test/stufftest.lua b/lib/luasocket/test/stufftest.lua similarity index 100% rename from luasocket/test/stufftest.lua rename to lib/luasocket/test/stufftest.lua diff --git a/luasocket/test/tcp-getoptions b/lib/luasocket/test/tcp-getoptions similarity index 100% rename from luasocket/test/tcp-getoptions rename to lib/luasocket/test/tcp-getoptions diff --git a/luasocket/test/test_bind.lua b/lib/luasocket/test/test_bind.lua similarity index 100% rename from luasocket/test/test_bind.lua rename to lib/luasocket/test/test_bind.lua diff --git a/luasocket/test/test_getaddrinfo.lua b/lib/luasocket/test/test_getaddrinfo.lua similarity index 100% rename from luasocket/test/test_getaddrinfo.lua rename to lib/luasocket/test/test_getaddrinfo.lua diff --git a/luasocket/test/test_socket_error.lua b/lib/luasocket/test/test_socket_error.lua similarity index 100% rename from luasocket/test/test_socket_error.lua rename to lib/luasocket/test/test_socket_error.lua diff --git a/luasocket/test/testclnt.lua b/lib/luasocket/test/testclnt.lua similarity index 100% rename from luasocket/test/testclnt.lua rename to lib/luasocket/test/testclnt.lua diff --git a/luasocket/test/testmesg.lua b/lib/luasocket/test/testmesg.lua similarity index 100% rename from luasocket/test/testmesg.lua rename to lib/luasocket/test/testmesg.lua diff --git a/luasocket/test/testsrvr.lua b/lib/luasocket/test/testsrvr.lua similarity index 100% rename from luasocket/test/testsrvr.lua rename to lib/luasocket/test/testsrvr.lua diff --git a/luasocket/test/testsupport.lua b/lib/luasocket/test/testsupport.lua similarity index 100% rename from luasocket/test/testsupport.lua rename to lib/luasocket/test/testsupport.lua diff --git a/luasocket/test/tftptest.lua b/lib/luasocket/test/tftptest.lua similarity index 100% rename from luasocket/test/tftptest.lua rename to lib/luasocket/test/tftptest.lua diff --git a/luasocket/test/udp-zero-length-send b/lib/luasocket/test/udp-zero-length-send similarity index 100% rename from luasocket/test/udp-zero-length-send rename to lib/luasocket/test/udp-zero-length-send diff --git a/luasocket/test/udp-zero-length-send-recv b/lib/luasocket/test/udp-zero-length-send-recv similarity index 100% rename from luasocket/test/udp-zero-length-send-recv rename to lib/luasocket/test/udp-zero-length-send-recv diff --git a/luasocket/test/udpconnectclnt.lua b/lib/luasocket/test/udpconnectclnt.lua similarity index 100% rename from luasocket/test/udpconnectclnt.lua rename to lib/luasocket/test/udpconnectclnt.lua diff --git a/luasocket/test/udpconnectsrvr.lua b/lib/luasocket/test/udpconnectsrvr.lua similarity index 100% rename from luasocket/test/udpconnectsrvr.lua rename to lib/luasocket/test/udpconnectsrvr.lua diff --git a/luasocket/test/unixclnt.lua b/lib/luasocket/test/unixclnt.lua similarity index 100% rename from luasocket/test/unixclnt.lua rename to lib/luasocket/test/unixclnt.lua diff --git a/luasocket/test/unixsrvr.lua b/lib/luasocket/test/unixsrvr.lua similarity index 100% rename from luasocket/test/unixsrvr.lua rename to lib/luasocket/test/unixsrvr.lua diff --git a/luasocket/test/upload.html b/lib/luasocket/test/upload.html similarity index 100% rename from luasocket/test/upload.html rename to lib/luasocket/test/upload.html diff --git a/luasocket/test/urltest.lua b/lib/luasocket/test/urltest.lua similarity index 100% rename from luasocket/test/urltest.lua rename to lib/luasocket/test/urltest.lua diff --git a/luasocket/test/utestclnt.lua b/lib/luasocket/test/utestclnt.lua similarity index 100% rename from luasocket/test/utestclnt.lua rename to lib/luasocket/test/utestclnt.lua diff --git a/luasocket/test/utestsrvr.lua b/lib/luasocket/test/utestsrvr.lua similarity index 100% rename from luasocket/test/utestsrvr.lua rename to lib/luasocket/test/utestsrvr.lua diff --git a/luasocket/win32.cmd b/lib/luasocket/win32.cmd similarity index 100% rename from luasocket/win32.cmd rename to lib/luasocket/win32.cmd diff --git a/lunatic-python-bugfix-1.1.1/LICENSE b/lib/lunatic-python-bugfix-1.1.1/LICENSE similarity index 100% rename from lunatic-python-bugfix-1.1.1/LICENSE rename to lib/lunatic-python-bugfix-1.1.1/LICENSE diff --git a/lunatic-python-bugfix-1.1.1/MANIFEST.in b/lib/lunatic-python-bugfix-1.1.1/MANIFEST.in similarity index 100% rename from lunatic-python-bugfix-1.1.1/MANIFEST.in rename to lib/lunatic-python-bugfix-1.1.1/MANIFEST.in diff --git a/lunatic-python-bugfix-1.1.1/Makefile b/lib/lunatic-python-bugfix-1.1.1/Makefile similarity index 100% rename from lunatic-python-bugfix-1.1.1/Makefile rename to lib/lunatic-python-bugfix-1.1.1/Makefile diff --git a/lunatic-python-bugfix-1.1.1/PKG-INFO b/lib/lunatic-python-bugfix-1.1.1/PKG-INFO similarity index 100% rename from lunatic-python-bugfix-1.1.1/PKG-INFO rename to lib/lunatic-python-bugfix-1.1.1/PKG-INFO diff --git a/lunatic-python-bugfix-1.1.1/python.lua b/lib/lunatic-python-bugfix-1.1.1/python.lua similarity index 100% rename from lunatic-python-bugfix-1.1.1/python.lua rename to lib/lunatic-python-bugfix-1.1.1/python.lua diff --git a/lunatic-python-bugfix-1.1.1/setup.cfg b/lib/lunatic-python-bugfix-1.1.1/setup.cfg similarity index 100% rename from lunatic-python-bugfix-1.1.1/setup.cfg rename to lib/lunatic-python-bugfix-1.1.1/setup.cfg diff --git a/lunatic-python-bugfix-1.1.1/setup.py b/lib/lunatic-python-bugfix-1.1.1/setup.py similarity index 100% rename from lunatic-python-bugfix-1.1.1/setup.py rename to lib/lunatic-python-bugfix-1.1.1/setup.py diff --git a/lunatic-python-bugfix-1.1.1/src/luainpython.c b/lib/lunatic-python-bugfix-1.1.1/src/luainpython.c similarity index 100% rename from lunatic-python-bugfix-1.1.1/src/luainpython.c rename to lib/lunatic-python-bugfix-1.1.1/src/luainpython.c diff --git a/lunatic-python-bugfix-1.1.1/src/luainpython.h b/lib/lunatic-python-bugfix-1.1.1/src/luainpython.h similarity index 100% rename from lunatic-python-bugfix-1.1.1/src/luainpython.h rename to lib/lunatic-python-bugfix-1.1.1/src/luainpython.h diff --git a/lunatic-python-bugfix-1.1.1/src/pythoninlua.c b/lib/lunatic-python-bugfix-1.1.1/src/pythoninlua.c similarity index 100% rename from lunatic-python-bugfix-1.1.1/src/pythoninlua.c rename to lib/lunatic-python-bugfix-1.1.1/src/pythoninlua.c diff --git a/lunatic-python-bugfix-1.1.1/src/pythoninlua.h b/lib/lunatic-python-bugfix-1.1.1/src/pythoninlua.h similarity index 100% rename from lunatic-python-bugfix-1.1.1/src/pythoninlua.h rename to lib/lunatic-python-bugfix-1.1.1/src/pythoninlua.h diff --git a/magick/.travis.yml b/lib/magick/.travis.yml similarity index 100% rename from magick/.travis.yml rename to lib/magick/.travis.yml diff --git a/magick/Makefile b/lib/magick/Makefile similarity index 100% rename from magick/Makefile rename to lib/magick/Makefile diff --git a/magick/README.md b/lib/magick/README.md similarity index 100% rename from magick/README.md rename to lib/magick/README.md diff --git a/magick/magick-dev-1.rockspec b/lib/magick/magick-dev-1.rockspec similarity index 100% rename from magick/magick-dev-1.rockspec rename to lib/magick/magick-dev-1.rockspec diff --git a/magick/magick.lua b/lib/magick/magick.lua similarity index 100% rename from magick/magick.lua rename to lib/magick/magick.lua diff --git a/magick/magick.moon b/lib/magick/magick.moon similarity index 100% rename from magick/magick.moon rename to lib/magick/magick.moon diff --git a/magick/magick/init.lua b/lib/magick/magick/init.lua similarity index 100% rename from magick/magick/init.lua rename to lib/magick/magick/init.lua diff --git a/magick/magick/init.moon b/lib/magick/magick/init.moon similarity index 100% rename from magick/magick/init.moon rename to lib/magick/magick/init.moon diff --git a/magick/spec/color_test.png b/lib/magick/spec/color_test.png similarity index 100% rename from magick/spec/color_test.png rename to lib/magick/spec/color_test.png diff --git a/magick/spec/exif_test.jpg b/lib/magick/spec/exif_test.jpg similarity index 100% rename from magick/spec/exif_test.jpg rename to lib/magick/spec/exif_test.jpg diff --git a/magick/spec/magick_spec.moon b/lib/magick/spec/magick_spec.moon similarity index 100% rename from magick/spec/magick_spec.moon rename to lib/magick/spec/magick_spec.moon diff --git a/magick/spec/test.gif b/lib/magick/spec/test.gif similarity index 100% rename from magick/spec/test.gif rename to lib/magick/spec/test.gif diff --git a/magick/spec/test_image.png b/lib/magick/spec/test_image.png similarity index 100% rename from magick/spec/test_image.png rename to lib/magick/spec/test_image.png diff --git a/lib/pngLua/30log.lua b/lib/pngLua/30log.lua new file mode 100644 index 0000000..028b02f --- /dev/null +++ b/lib/pngLua/30log.lua @@ -0,0 +1,30 @@ +local assert, pairs, type, tostring, baseMt, _instances, _classes, class = assert, pairs, type, tostring, {}, {}, {} +local function deep_copy(t, dest, aType) + local t, r = t or {}, dest or {} + for k,v in pairs(t) do + if aType and type(v)==aType then r[k] = v elseif not aType then + if type(v) == 'table' and k ~= "__index" then r[k] = deep_copy(v) else r[k] = v end + end + end; return r +end +local function instantiate(self,...) + local instance = deep_copy(self) ; _instances[instance] = tostring(instance); setmetatable(instance,self) + if self.__init then + if type(self.__init) == 'table' then deep_copy(self.__init, instance) else self.__init(instance, ...) end + end + return instance +end +local function extends(self,extra_params) + local heirClass = deep_copy(self, class(extra_params)); heirClass.__index, heirClass.super = heirClass, self + return setmetatable(heirClass,self) +end +baseMt = { __call = function (self,...) return self:new(...) end, + __tostring = function(self,...) + if _instances[self] then return ('object (of %s): <%s>'):format((rawget(getmetatable(self),'__name') or 'Unnamed'), _instances[self]) end + return _classes[self] and ('class (%s): <%s>'):format((rawget(self,'__name') or 'Unnamed'),_classes[self]) or self + end} +class = function(attr) + local c = deep_copy(attr) ; _classes[c] = tostring(c); + c.with = function(self,include) assert(_classes[self], 'Mixins can only be used on classes') return deep_copy(include, self, 'function') end + c.new, c.extends, c.__index, c.__call, c.__tostring = instantiate, extends, c, baseMt.__call, baseMt.__tostring; return setmetatable(c,baseMt) +end; return class \ No newline at end of file diff --git a/lib/pngLua/30logLICENSE b/lib/pngLua/30logLICENSE new file mode 100644 index 0000000..6a7c501 --- /dev/null +++ b/lib/pngLua/30logLICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2012 - 2013 Roland Yonaba + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/lib/pngLua/Example.png b/lib/pngLua/Example.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8a7204e54d95beb6fd2db0df6094a34386636f GIT binary patch literal 2985 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 ZHkl{(<%}G^WiH<%Kp%ntS83Zu{1+6*F>3$- literal 0 HcmV?d00001 diff --git a/lib/pngLua/LICENSE b/lib/pngLua/LICENSE new file mode 100644 index 0000000..13c9de5 --- /dev/null +++ b/lib/pngLua/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 DelusionalLogic + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/lib/pngLua/README.md b/lib/pngLua/README.md new file mode 100644 index 0000000..d703dbe --- /dev/null +++ b/lib/pngLua/README.md @@ -0,0 +1,42 @@ +![pngLua logo](/logo.png?raw=true) + +A pure lua implementation of a PNG decoder + +Usage +----- + +To initialize a new png image: + + img = pngImage(, newRowCallback) + +The image will then be decoded. The available data from the image is as follows +``` +img.width = 0 +img.height = 0 +img.depth = 0 +img.colorType = 0 + +img:getPixel(x, y) +``` +Decoding the image is synchronous, and will take a long time for large images. + +Support +------- + +The supported colortypes are as follows: + +- Grayscale +- Truecolor +- Indexed +- Greyscale/alpha +- Truecolor/alpha + +So far the module only supports 256 Colors in png-8, png-24 as well as png-32 files. and no ancillary chunks. + +More than 256 colors might be supported (Bit-depths over 8) as long as they align with whole bytes. These have not been tested. + +Multiple IDAT chunks of arbitrary lengths are supported, as well as all filters. + +Errors +------- +So far no error-checking has been implemented. No crc32 checks are done. diff --git a/lib/pngLua/deflate.lua b/lib/pngLua/deflate.lua new file mode 100644 index 0000000..4d8276a --- /dev/null +++ b/lib/pngLua/deflate.lua @@ -0,0 +1,856 @@ +--[[ + +LUA MODULE + +compress.deflatelua - deflate (and gunzip/zlib) implemented in Lua. + +SYNOPSIS +local DEFLATE = require 'compress.deflatelua' +-- uncompress gzip file +local fh = assert(io.open'foo.txt.gz', 'rb') +local ofh = assert(io.open'foo.txt', 'wb') +DEFLATE.gunzip {input=fh, output=ofh} +fh:close(); ofh:close() +-- can also uncompress from string including zlib and raw DEFLATE formats. +DESCRIPTION +This is a pure Lua implementation of decompressing the DEFLATE format, +including the related zlib and gzip formats. +Note: This library only supports decompression. +Compression is not currently implemented. + +API + +Note: in the following functions, input stream `fh` may be +a file handle, string, or an iterator function that returns strings. +Output stream `ofh` may be a file handle or a function that +consumes one byte (number 0..255) per call. + +DEFLATE.inflate {input=fh, output=ofh} + +Decompresses input stream `fh` in the DEFLATE format +while writing to output stream `ofh`. +DEFLATE is detailed in http://tools.ietf.org/html/rfc1951 . +DEFLATE.gunzip {input=fh, output=ofh, disable_crc=disable_crc} +Decompresses input stream `fh` with the gzip format +while writing to output stream `ofh`. +`disable_crc` (defaults to `false`) will disable CRC-32 checking +to increase speed. +gzip is detailed in http://tools.ietf.org/html/rfc1952 . + +DEFLATE.inflate_zlib {input=fh, output=ofh, disable_crc=disable_crc} +Decompresses input stream `fh` with the zlib format +while writing to output stream `ofh`. +`disable_crc` (defaults to `false`) will disable CRC-32 checking +to increase speed. +zlib is detailed in http://tools.ietf.org/html/rfc1950 . + +DEFLATE.adler32(byte, crc) --> rcrc +Returns adler32 checksum of byte `byte` (number 0..255) appended +to string with adler32 checksum `crc`. This is internally used by +`inflate_zlib`. +ADLER32 in detailed in http://tools.ietf.org/html/rfc1950 . + +COMMAND LINE UTILITY + +A `gunziplua` command line utility (in folder `bin`) is also provided. +This mimicks the *nix `gunzip` utility but is a pure Lua implementation +that invokes this library. For help do +gunziplua -h +DEPENDENCIES + +Requires 'digest.crc32lua' (used for optional CRC-32 checksum checks). +https://github.com/davidm/lua-digest-crc32lua + +Will use a bit library ('bit', 'bit32', 'bit.numberlua') if available. This +is not that critical for this library but is required by digest.crc32lua. + +'pythonic.optparse' is only required by the optional `gunziplua` +command-line utilty for command line parsing. +https://github.com/davidm/lua-pythonic-optparse + +INSTALLATION + +Copy the `compress` directory into your LUA_PATH. +REFERENCES + +[1] DEFLATE Compressed Data Format Specification version 1.3 +http://tools.ietf.org/html/rfc1951 +[2] GZIP file format specification version 4.3 +http://tools.ietf.org/html/rfc1952 +[3] http://en.wikipedia.org/wiki/DEFLATE +[4] pyflate, by Paul Sladen +http://www.paul.sladen.org/projects/pyflate/ +[5] Compress::Zlib::Perl - partial pure Perl implementation of +Compress::Zlib +http://search.cpan.org/~nwclark/Compress-Zlib-Perl/Perl.pm + +LICENSE + +(c) 2008-2011 David Manura. Licensed under the same terms as Lua (MIT). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +(end license) +--]] + +local M = {_TYPE='module', _NAME='compress.deflatelua', _VERSION='0.3.20111128'} + +local assert = assert +local error = error +local ipairs = ipairs +local pairs = pairs +local print = print +local require = require +local tostring = tostring +local type = type +local setmetatable = setmetatable +local io = io +local math = math +local table_sort = table.sort +local math_max = math.max +local string_char = string.char + +--[[ +Requires the first module listed that exists, else raises like `require`. +If a non-string is encountered, it is returned. +Second return value is module name loaded (or ''). +--]] +local function requireany(...) + local errs = {} + for i = 1, select('#', ...) do local name = select(i, ...) + if type(name) ~= 'string' then return name, '' end + local ok, mod = pcall(require, name) + if ok then return mod, name end + errs[#errs+1] = mod + end + error(table.concat(errs, '\n'), 2) +end + + +--local crc32 = require "digest.crc32lua" . crc32_byte +local bit, name_ = requireany('bit', 'bit32', 'bit.numberlua', nil) + +local DEBUG = false + +-- Whether to use `bit` library functions in current module. +-- Unlike the crc32 library, it doesn't make much difference in this module. +local NATIVE_BITOPS = (bit ~= nil) + +local band, lshift, rshift +if NATIVE_BITOPS then + band = bit.band + lshift = bit.lshift + rshift = bit.rshift +end + + +local function warn(s) + io.stderr:write(s, '\n') +end + + +local function debug(...) + print('DEBUG', ...) +end + + +local function runtime_error(s, level) + level = level or 1 + error({s}, level+1) +end + + +local function make_outstate(outbs) + local outstate = {} + outstate.outbs = outbs + outstate.window = {} + outstate.window_pos = 1 + return outstate +end + + +local function output(outstate, byte) + -- debug('OUTPUT:', s) + local window_pos = outstate.window_pos + outstate.outbs(byte) + outstate.window[window_pos] = byte + outstate.window_pos = window_pos % 32768 + 1 -- 32K +end + + +local function noeof(val) + return assert(val, 'unexpected end of file') +end + + +local function hasbit(bits, bit) + return bits % (bit + bit) >= bit +end + + +local function memoize(f) + local mt = {} + local t = setmetatable({}, mt) + function mt:__index(k) + local v = f(k) + t[k] = v + return v + end + return t +end + + +-- small optimization (lookup table for powers of 2) +local pow2 = memoize(function(n) return 2^n end) + +--local tbits = memoize( +-- function(bits) +-- return memoize( function(bit) return getbit(bits, bit) end ) +-- end ) + + +-- weak metatable marking objects as bitstream type +local is_bitstream = setmetatable({}, {__mode='k'}) + + +-- DEBUG +-- prints LSB first +--[[ +local function bits_tostring(bits, nbits) +local s = '' +local tmp = bits +local function f() +local b = tmp % 2 == 1 and 1 or 0 +s = s .. b +tmp = (tmp - b) / 2 +end +if nbits then +for i=1,nbits do f() end +else +while tmp ~= 0 do f() end +end + +return s +end +--]] + +local function bytestream_from_file(fh) + local o = {} + function o:read() + local sb = fh:read(1) + if sb then return sb:byte() end + end + return o +end + + +local function bytestream_from_string(s) + local i = 1 + local o = {} + function o:read() + local by + if i <= #s then + by = s:byte(i) + i = i + 1 + end + return by + end + return o +end + + +local function bytestream_from_function(f) + local i = 0 + local buffer = '' + local o = {} + function o:read() + i = i + 1 + if i > #buffer then + buffer = f() + if not buffer then return end + i = 1 + end + return buffer:byte(i,i) + end + return o +end + + +local function bitstream_from_bytestream(bys) + local buf_byte = 0 + local buf_nbit = 0 + local o = {} + + function o:nbits_left_in_byte() + return buf_nbit + end + + if NATIVE_BITOPS then + function o:read(nbits) + nbits = nbits or 1 + while buf_nbit < nbits do + local byte = bys:read() + if not byte then return end -- note: more calls also return nil + buf_byte = buf_byte + lshift(byte, buf_nbit) + buf_nbit = buf_nbit + 8 + end + local bits + if nbits == 0 then + bits = 0 + elseif nbits == 32 then + bits = buf_byte + buf_byte = 0 + else + bits = band(buf_byte, rshift(0xffffffff, 32 - nbits)) + buf_byte = rshift(buf_byte, nbits) + end + buf_nbit = buf_nbit - nbits + return bits + end + else + function o:read(nbits) + nbits = nbits or 1 + while buf_nbit < nbits do + local byte = bys:read() + if not byte then return end -- note: more calls also return nil + buf_byte = buf_byte + pow2[buf_nbit] * byte + buf_nbit = buf_nbit + 8 + end + local m = pow2[nbits] + local bits = buf_byte % m + buf_byte = (buf_byte - bits) / m + buf_nbit = buf_nbit - nbits + return bits + end + end + + is_bitstream[o] = true + + return o +end + + +local function get_bitstream(o) + local bs + if is_bitstream[o] then + return o + elseif io.type(o) == 'file' then + bs = bitstream_from_bytestream(bytestream_from_file(o)) + elseif type(o) == 'string' then + bs = bitstream_from_bytestream(bytestream_from_string(o)) + elseif type(o) == 'function' then + bs = bitstream_from_bytestream(bytestream_from_function(o)) + else + runtime_error 'unrecognized type' + end + return bs +end + + +local function get_obytestream(o) + local bs + if io.type(o) == 'file' then + bs = function(sbyte) o:write(string_char(sbyte)) end + elseif type(o) == 'function' then + bs = o + else + runtime_error('unrecognized type: ' .. tostring(o)) + end + return bs +end + + +local function HuffmanTable(init, is_full) + local t = {} + if is_full then + for val,nbits in pairs(init) do + if nbits ~= 0 then + t[#t+1] = {val=val, nbits=nbits} + --debug('*',val,nbits) + end + end + else + for i=1,#init-2,2 do + local firstval, nbits, nextval = init[i], init[i+1], init[i+2] + --debug(val, nextval, nbits) + if nbits ~= 0 then + for val=firstval,nextval-1 do + t[#t+1] = {val=val, nbits=nbits} + end + end + end + end + table_sort(t, function(a,b) + return a.nbits == b.nbits and a.val < b.val or a.nbits < b.nbits + end) + + -- assign codes + local code = 1 -- leading 1 marker + local nbits = 0 + for i,s in ipairs(t) do + if s.nbits ~= nbits then + code = code * pow2[s.nbits - nbits] + nbits = s.nbits + end + s.code = code + --debug('huffman code:', i, s.nbits, s.val, code, bits_tostring(code)) + code = code + 1 + end + + local minbits = math.huge + local look = {} + for i,s in ipairs(t) do + minbits = math.min(minbits, s.nbits) + look[s.code] = s.val + end + + --for _,o in ipairs(t) do + -- debug(':', o.nbits, o.val) + --end + + -- function t:lookup(bits) return look[bits] end + + local msb = NATIVE_BITOPS and function(bits, nbits) + local res = 0 + for i=1,nbits do + res = lshift(res, 1) + band(bits, 1) + bits = rshift(bits, 1) + end + return res + end or function(bits, nbits) + local res = 0 + for i=1,nbits do + local b = bits % 2 + bits = (bits - b) / 2 + res = res * 2 + b + end + return res + end + + local tfirstcode = memoize( + function(bits) return pow2[minbits] + msb(bits, minbits) end) + + function t:read(bs) + local code = 1 -- leading 1 marker + local nbits = 0 + while 1 do + if nbits == 0 then -- small optimization (optional) + code = tfirstcode[noeof(bs:read(minbits))] + nbits = nbits + minbits + else + local b = noeof(bs:read()) + nbits = nbits + 1 + code = code * 2 + b -- MSB first + --[[NATIVE_BITOPS +code = lshift(code, 1) + b -- MSB first +--]] + end + --debug('code?', code, bits_tostring(code)) + local val = look[code] + if val then + --debug('FOUND', val) + return val + end + end + end + + return t +end + + +local function parse_gzip_header(bs) + -- local FLG_FTEXT = 2^0 + local FLG_FHCRC = 2^1 + local FLG_FEXTRA = 2^2 + local FLG_FNAME = 2^3 + local FLG_FCOMMENT = 2^4 + + local id1 = bs:read(8) + local id2 = bs:read(8) + if id1 ~= 31 or id2 ~= 139 then + runtime_error 'not in gzip format' + end + local cm = bs:read(8) -- compression method + local flg = bs:read(8) -- FLaGs + local mtime = bs:read(32) -- Modification TIME + local xfl = bs:read(8) -- eXtra FLags + local os = bs:read(8) -- Operating System + + if DEBUG then + debug("CM=", cm) + debug("FLG=", flg) + debug("MTIME=", mtime) + -- debug("MTIME_str=",os.date("%Y-%m-%d %H:%M:%S",mtime)) -- non-portable + debug("XFL=", xfl) + debug("OS=", os) + end + + if not os then runtime_error 'invalid header' end + + if hasbit(flg, FLG_FEXTRA) then + local xlen = bs:read(16) + local extra = 0 + for i=1,xlen do + extra = bs:read(8) + end + if not extra then runtime_error 'invalid header' end + end + + local function parse_zstring(bs) + repeat + local by = bs:read(8) + if not by then runtime_error 'invalid header' end + until by == 0 + end + + if hasbit(flg, FLG_FNAME) then + parse_zstring(bs) + end + + if hasbit(flg, FLG_FCOMMENT) then + parse_zstring(bs) + end + + if hasbit(flg, FLG_FHCRC) then + local crc16 = bs:read(16) + if not crc16 then runtime_error 'invalid header' end + -- IMPROVE: check CRC. where is an example .gz file that + -- has this set? + if DEBUG then + debug("CRC16=", crc16) + end + end +end + +local function parse_zlib_header(bs) + local cm = bs:read(4) -- Compression Method + local cinfo = bs:read(4) -- Compression info + local fcheck = bs:read(5) -- FLaGs: FCHECK (check bits for CMF and FLG) + local fdict = bs:read(1) -- FLaGs: FDICT (present dictionary) + local flevel = bs:read(2) -- FLaGs: FLEVEL (compression level) + local cmf = cinfo * 16 + cm -- CMF (Compresion Method and flags) + local flg = fcheck + fdict * 32 + flevel * 64 -- FLaGs + + if cm ~= 8 then -- not "deflate" + runtime_error("unrecognized zlib compression method: " .. cm) + end + if cinfo > 7 then + runtime_error("invalid zlib window size: cinfo=" .. cinfo) + end + local window_size = 2^(cinfo + 8) + + if (cmf*256 + flg) % 31 ~= 0 then + runtime_error("invalid zlib header (bad fcheck sum)") + end + + if fdict == 1 then + runtime_error("FIX:TODO - FDICT not currently implemented") + local dictid_ = bs:read(32) + end + + return window_size +end + +local function parse_huffmantables(bs) + local hlit = bs:read(5) -- # of literal/length codes - 257 + local hdist = bs:read(5) -- # of distance codes - 1 + local hclen = noeof(bs:read(4)) -- # of code length codes - 4 + + local ncodelen_codes = hclen + 4 + local codelen_init = {} + local codelen_vals = { + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} + for i=1,ncodelen_codes do + local nbits = bs:read(3) + local val = codelen_vals[i] + codelen_init[val] = nbits + end + local codelentable = HuffmanTable(codelen_init, true) + + local function decode(ncodes) + local init = {} + local nbits + local val = 0 + while val < ncodes do + local codelen = codelentable:read(bs) + --FIX:check nil? + local nrepeat + if codelen <= 15 then + nrepeat = 1 + nbits = codelen + --debug('w', nbits) + elseif codelen == 16 then + nrepeat = 3 + noeof(bs:read(2)) + -- nbits unchanged + elseif codelen == 17 then + nrepeat = 3 + noeof(bs:read(3)) + nbits = 0 + elseif codelen == 18 then + nrepeat = 11 + noeof(bs:read(7)) + nbits = 0 + else + error 'ASSERT' + end + for i=1,nrepeat do + init[val] = nbits + val = val + 1 + end + end + local huffmantable = HuffmanTable(init, true) + return huffmantable + end + + local nlit_codes = hlit + 257 + local ndist_codes = hdist + 1 + + local littable = decode(nlit_codes) + local disttable = decode(ndist_codes) + + return littable, disttable +end + + +local tdecode_len_base +local tdecode_len_nextrabits +local tdecode_dist_base +local tdecode_dist_nextrabits +local function parse_compressed_item(bs, outstate, littable, disttable) + local val = littable:read(bs) + --debug(val, val < 256 and string_char(val)) + if val < 256 then -- literal + output(outstate, val) + elseif val == 256 then -- end of block + return true + else + if not tdecode_len_base then + local t = {[257]=3} + local skip = 1 + for i=258,285,4 do + for j=i,i+3 do t[j] = t[j-1] + skip end + if i ~= 258 then skip = skip * 2 end + end + t[285] = 258 + tdecode_len_base = t + --for i=257,285 do debug('T1',i,t[i]) end + end + if not tdecode_len_nextrabits then + local t = {} + if NATIVE_BITOPS then + for i=257,285 do + local j = math_max(i - 261, 0) + t[i] = rshift(j, 2) + end + else + for i=257,285 do + local j = math_max(i - 261, 0) + t[i] = (j - (j % 4)) / 4 + end + end + t[285] = 0 + tdecode_len_nextrabits = t + --for i=257,285 do debug('T2',i,t[i]) end + end + local len_base = tdecode_len_base[val] + local nextrabits = tdecode_len_nextrabits[val] + local extrabits = bs:read(nextrabits) + local len = len_base + extrabits + + if not tdecode_dist_base then + local t = {[0]=1} + local skip = 1 + for i=1,29,2 do + for j=i,i+1 do t[j] = t[j-1] + skip end + if i ~= 1 then skip = skip * 2 end + end + tdecode_dist_base = t + --for i=0,29 do debug('T3',i,t[i]) end + end + if not tdecode_dist_nextrabits then + local t = {} + if NATIVE_BITOPS then + for i=0,29 do + local j = math_max(i - 2, 0) + t[i] = rshift(j, 1) + end + else + for i=0,29 do + local j = math_max(i - 2, 0) + t[i] = (j - (j % 2)) / 2 + end + end + tdecode_dist_nextrabits = t + --for i=0,29 do debug('T4',i,t[i]) end + end + local dist_val = disttable:read(bs) + local dist_base = tdecode_dist_base[dist_val] + local dist_nextrabits = tdecode_dist_nextrabits[dist_val] + local dist_extrabits = bs:read(dist_nextrabits) + local dist = dist_base + dist_extrabits + + --debug('BACK', len, dist) + for i=1,len do + local pos = (outstate.window_pos - 1 - dist) % 32768 + 1 -- 32K + output(outstate, assert(outstate.window[pos], 'invalid distance')) + end + end + return false +end + + +local function parse_block(bs, outstate) + local bfinal = bs:read(1) + local btype = bs:read(2) + + local BTYPE_NO_COMPRESSION = 0 + local BTYPE_FIXED_HUFFMAN = 1 + local BTYPE_DYNAMIC_HUFFMAN = 2 + local BTYPE_RESERVED_ = 3 + + if DEBUG then + debug('bfinal=', bfinal) + debug('btype=', btype) + end + + if btype == BTYPE_NO_COMPRESSION then + bs:read(bs:nbits_left_in_byte()) + local len = bs:read(16) + local nlen_ = noeof(bs:read(16)) + + for i=1,len do + local by = noeof(bs:read(8)) + output(outstate, by) + end + elseif btype == BTYPE_FIXED_HUFFMAN or btype == BTYPE_DYNAMIC_HUFFMAN then + local littable, disttable + if btype == BTYPE_DYNAMIC_HUFFMAN then + littable, disttable = parse_huffmantables(bs) + else + littable = HuffmanTable {0,8, 144,9, 256,7, 280,8, 288,nil} + disttable = HuffmanTable {0,5, 32,nil} + end + + repeat + local is_done = parse_compressed_item( + bs, outstate, littable, disttable) + until is_done + else + runtime_error 'unrecognized compression type' + end + + return bfinal ~= 0 +end + + +function M.inflate(t) + local bs = get_bitstream(t.input) + local outbs = get_obytestream(t.output) + local outstate = make_outstate(outbs) + + repeat + local is_final = parse_block(bs, outstate) + until is_final +end +local inflate = M.inflate + + +function M.gunzip(t) + local bs = get_bitstream(t.input) + local outbs = get_obytestream(t.output) + local disable_crc = t.disable_crc + if disable_crc == nil then disable_crc = false end + + parse_gzip_header(bs) + + local data_crc32 = 0 + + inflate{input=bs, output= + disable_crc and outbs or + function(byte) + data_crc32 = crc32(byte, data_crc32) + outbs(byte) + end + } + + bs:read(bs:nbits_left_in_byte()) + + local expected_crc32 = bs:read(32) + local isize = bs:read(32) -- ignored + if DEBUG then + debug('crc32=', expected_crc32) + debug('isize=', isize) + end + if not disable_crc and data_crc32 then + if data_crc32 ~= expected_crc32 then + runtime_error('invalid compressed data--crc error') + end + end + if bs:read() then + warn 'trailing garbage ignored' + end +end + + +function M.adler32(byte, crc) + local s1 = crc % 65536 + local s2 = (crc - s1) / 65536 + s1 = (s1 + byte) % 65521 + s2 = (s2 + s1) % 65521 + return s2*65536 + s1 +end -- 65521 is the largest prime smaller than 2^16 + + +function M.inflate_zlib(t) + local bs = get_bitstream(t.input) + local outbs = get_obytestream(t.output) + local disable_crc = t.disable_crc + if disable_crc == nil then disable_crc = false end + + local window_size_ = parse_zlib_header(bs) + + local data_adler32 = 1 + + inflate{input=bs, output= + disable_crc and outbs or + function(byte) + data_adler32 = M.adler32(byte, data_adler32) + outbs(byte) + end + } + + bs:read(bs:nbits_left_in_byte()) + + local b3 = bs:read(8) + local b2 = bs:read(8) + local b1 = bs:read(8) + local b0 = bs:read(8) + local expected_adler32 = ((b3*256 + b2)*256 + b1)*256 + b0 + if DEBUG then + debug('alder32=', expected_adler32) + end + if not disable_crc then + if data_adler32 ~= expected_adler32 then + runtime_error('invalid compressed data--crc error') + end + end + if bs:read() then + warn 'trailing garbage ignored' + end +end + + +return M \ No newline at end of file diff --git a/lib/pngLua/deflateLICENSE b/lib/pngLua/deflateLICENSE new file mode 100644 index 0000000..8ff6b51 --- /dev/null +++ b/lib/pngLua/deflateLICENSE @@ -0,0 +1,25 @@ +lua-compress-deflatelua License + +=============================================================================== + +Copyright (C) 2008, David Manura. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=============================================================================== \ No newline at end of file diff --git a/lib/pngLua/logo.png b/lib/pngLua/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..85d33b23d44512ef689d2a8e5a6bde452086f2e6 GIT binary patch literal 8648 zcmYjXbzD@>*Iq)pyIVqODd`63P(T`KSXdgQS-SBH2+|!=3n;a8igd}+4H8R;biLQ# zU+;c4?%kc8nS1V;=Q-y&6RV@8f{#Ok0|J5Y->53;fj}s}hS~ zX3Golu+Ki0qyd4LKyMV~-umSrS3dgb+je4}p1gjOCA8mpawosh#63U}SNa2nkK?B+ z8+n#wD%+1t5@+4IFwdc`3r{+XDZ(lq$6`T+qBc-+>NHUlew);5o0%3_nHJW}@_eeO zE9^!&`$p1-&85j?&hU{2I2wI_9Q7rSQhIk+}J;g5IY|urGo;!j8^| zW4;&oMf$Z)S5qeLu9Vqyl z>9ISb>LhT+NSI|O=#W*m8?!mlZ$1gNti;Su1{x%#$D$9?RutCNL>>cCbU1vV#}Vriu!ylOokUG;p1A z8$Tb!r&{t~4=t#hzhguHoj-1ABsnMFS9wRPXD`&9CW}utZhU2ln&Q>8%zI*1umzO* zBiHj11Y*?V!uk(+Vj7V7>L0x!}4w5d|z878`>*kfm)N z8lUZPn)=Z|H;|O^=|+8-lamtu65UGlhy@JoeKz8YH8PNI7!M|AnKtZ$I-2W?%@AJq0hDMh5p zYHO9>QeAZ{_)%z~kNo)O71f{nHMrj+Ezj^3nD zVjcsUI30MWOEU^zN!RZngn`mKk+hHh`cDTE0pEc+1i=(lV?<(8cdnv@BfvEl+ONd7nao$;?JzyJt!T1K3KdsW&^&vV{$rvJn$-7)B3U{s zDHJr5+=qb{K5wy>)X*S4Uh510p&BB2F*_ZJ+uKd~o!&aE?bX!ea&lJm?u_jG7;X)7mGHB&^0Z3L{4aDU@1xGQLuYtf z{iQGC#?Kq)q6;}Z!7pT1R?=9w=RMyX-vAcc_`B~c=66bRaBywrBR4}v!KXE3@zgeR z9BfR;&dv^Mv`ZYw6!=u&cuau}Zxd$~7N)4ItT$>Gqc7K{WO;Rt{kqd{E^Lw#$Bmm~QdQfcg?JV&JtE z9tml{)2HB5IlR1(PO9A8`;(&6$Gd=n`L&y$=Ip7mycs=n@4`Ys+7XdAOf0>Gf?sZ! z{+_uHG)_FyK-%kPHbc-AguR_u8X9Vg8uZ50?*a=QanwKCSpH1Y4bOAt=l?PCQpMF3 zJ1)*i$7E^LzgAJ6RcIDdSNAa{i9q(l2P#ujjANHUemnw(cAJZnFo+1TNPJ!v=98s6 zh2icV*@gupc&`+>6pjHJO!Oq?cB?gmJD!=~q^l*Rr5TN83eY@09wj#r69;DsSPNYu zM|QquqfH7$4l$??nLv;YRhst{+^V!f4&RLFljui=9v>*Drl+lR;ZjlYLd5_yQEL<*408943<| ziS#)h2HI+XEvqq2s|D1O*C8Px%-Y#nOx%pH$yF*=DgZH5m!|ewPk*br)8O4Zw8NDV zz@MvAK`w7(Loq*dTRm9~^W$9}wT51;-t`<5wB~A+4^`^V>*(o?IKl&og~6zO_bKjA zin_HAeTLCGUN;zf$ggkz7RXuKRE42|Bz*G*E)IpOhf-6Et2>n)9qE%8`S?GM_9;ZZ z_Uz9_IAUj&!Myh0Hd>o4HRTSD=i1Y|K2EyD(1-wxh{i+QiTkcp_$Q4C^OT2$|9 zR;>i|JQCIz6d-a~k3h&)SsZ?S>v6RFG3tWn=imJ|ea3OjX|uCpsp?D#1dN>tXqdqy zFqJ0FZ!m1UbIQ^vSdV3Qn{d9Td9SC~|K{lV;E$h`wWz_6I%0cz<=gx<2yl+3Cf*~2 z`{1^F`>A)6uhmkNR8G^d(j?WwhxOTcXQSj5={4($w_jIb0#sDs)tmuwqx&DM zsq1XL>gb;A+IAshK^wjJ%PsEe-Kz*p-Cn!RZ#FF-+i-$cATmqgpOr5|B>U>^G|@Ta ztc6^2aLoe+A{sBNZCwq%3UEhNJuQ{din?yha?KnT0nFk4^w8AklHA<^wT1F8&d;gpRH+ZbgNjUhPJ@wpYEu;%)Zf+S#`cAiSAPRpj=es?Rr&6EBm=*(0 zq`b)bA#!N~Mv;&u?2LDRUro!p`SbS_adr3>fHCIkwuo0feSNfXgXd`jG> z?LT3@qAE$I%J1HV4|}R4Cv^ieGq9MUAyfJiw33^_0iKfy0D56t%jW$1ydFS2FXx*F z6|m+y!f6sD`!=m>cp|_buf;n)2&J$T=nbta9G^nw_IF3ha6c{g<)x1;eU+07(gt5m zejTRENv=xu@`&}VVKfD1Gb81;aUV9F2?0&1-Z+g&X{q<52hn;Nv>0~EKA!th8BGww2WpZq&;cvp(Pb-a0^|#(rb7GLv7I>s@Z({&qMdJMy2KTk*TyKdh*t zm2`XY5)Kw|0R6+wYR|&BxEAXE&#D^DT`o&pzasOl*7ETnkc~Av)X-$YyGL6f8o&We z#p-}a(4=kug*l&uw95CG$oTn_SMsLhru$}xZV8XZ*Y`PtUuaO&Q6%ni^~+RMjR`I% zCntLz_x)|Q0oG)V&Fx!-ot@GTQU(?ikQ%!H4hKa4qe)3hhJx958biLUPWrvdVrS3!J+gfle!nos3T$7njN>e2`W?uVS!t7wylBjC_mOn@i*h}0=d*YX%Z-4lJkJS5&{a#tVxfa2v7Cox_!vwwCm&!NdsT(L?|9Z`{N!OaXA_#{JEQY?|on{c=6iPSd24l2eJK$f#S(gIPs7>A)}Z(wPArHE)e6 zMF1O6Xmeo^UXg>FHEXd*L_8u%$s=iZQD(liSZ(+~O%-p|ic@|Dsw!YkY$c`3P_4VT}M$y<9Z&QCycn0?> z*mZ009jvjMm>n#M-d=?g`d`&@O?$4`6g{Mi{#hKVK^Gl|TgoP~X7Sl`&1kTf;^O7A1{Z?;xFAZxl%j?50NTuzdQ8kcKq? zk4~jz?!btnR+lVtApV4o`*_zuG|{9v%g7=G-pWc;h)-AEcz6e;HL> z&3Y(8BQ#TuTUxmmnWeK$NQIQy-1@zDHHdL=H8Z#pW3d&DjU_?HtEwoncDv-iS|whj z)8SH-xcl&^Fi+-cVxGWhsk{l9!7W(-th#AMg<;YJJNW^#>`@exkZ^D7tg5UWJ6ajr z9%gm%NcIrG7LnziT^ZAncNwLk)PfGGvKN2KRNZ|aQ`n%FI6C^0J-M}&O8{byvzJQM z_4Ei`c(?x2Ktn}iG?x_b!~hzp*(htpDqL?DHFkR;TJK2eOWO@uHH}V|Zpf|iJP}z7 z@=fyIYImIZPi(Ezu;!QL$tvBiEx|A7e4S$R+r3lpPnK5t0s1^YyvfEDXfwB7xQRe& z`vOj|4S7>r^aBDYor7$$%8n61skkzana)1{<(u;Mc}}b(E5);aF_rWeCFTaJ;YKce zek+pDrSl7e0Gnp%Q~JB^g>k~qll%TK04TmSJHMX*!uwbDNj;0-)l)tR`~**Vsj!`n$Mqq7xO-#nVumD`Vxza;)OF8p+%gkr9uu_QE)hktLwOrA?FBL&oNkh39e)EZsN{65UsuX_Ayze zc2MR~_to!@Y!2Y1B>DwAMwe?HBR|ros}Knt6Nzsb%p}p}J!Pec}4?8L$M?k73aTU6tp zdA|EynO*)tjc^g5^0%kxy8jbiBpC;!KpPKNS4==kmdc(e>*U0}ywdvRZ{?I%QF}Xq zt?dP%8YsHECl-Wn_Q^fxs3ZCo9kO^zqMQ`Jb3v2e^?-lr($PqObgMBYM~{Ry4HsZz zpD9}wln+}|@-D-^nB4UD^QW5Rnsyiuh!ZEDIHSqh+l$tk67OnqY3c)_f_z{ge{XN# z`r#o4Bcmv=uH*_+Cj5!3~imkw&sy}o{f>H*+>y7=HWH-w@$DyMm64M6`Ne$nSYUp}8abg|xGW6t@+s!$(zBLwQ+ z=*y_L#l4G91(I$+%hCXK*IVCQ@5v;uxN8ARGx(y44amhCen}kvp8RmW%WY#%Y5YVB zOZlCwD|^CjonNyux}@yWNTC%*N|=6;SPhuskE)WJZEu8FNjb;gXPSWT0;1F8?CfeY zuWn_U^+JP%)o7+_&#f(~uZZkPRwYFAK6GGWe6QU_RNHV_)R%-HFd*T)sTH6Qk7xzA zjmbiFRc-C=R?h)3_aabw`a!3$D1buONXSXwKdp-s=X|dm$G~lb{TQ6k`7|$QDw#W> zzJ&W(24tTOJ@>H);DM$V2xN)Rq49N){d^zLzfxXVN#Aw1LU}#kl~ml`9xSWNlUPPd zD?)d$6eq^kpWO&G53jHMmwDbl%xSiR9rliQ;yxx%Y`3rQb+$zA+8x`;iwgZd8xy^! zjN+inHlOI^aWl+tm2G_sffzEk*_c?N0m80N`@`KuyT)a9qm6hVTE}ab#)=BkDg$zN z5;1&y|7z3s5!2IJ1pdlIM>I6S@3F=V22z|wC`CXz25%!1otxcOYg0|51|}XQ_K+UL zVnErXQ5T%2m9%6nP~Z2)7Ps*dSexRC>ARv3OiUeYHON z$u#Hne}G~!*nM-oCFbXchfGdK$L|pa0&77*7jrv)K8-T8oG zz^KKov(}Q?+0a0X|C#unuy+*czrkxYGl`;y81qphKdgHZ0`}tJK~6edoL+d7f-Mn0 z%K9)sosWK$Y+qE%A(Kj*vHjy_8ga8OgbUg3*{5k6Sxk6?b;Ki=qJ5Ft}y=H-Q*9FlV27)=06 z5x+2c85R!{SiHL+Zom6ep3^~*q59m<3W?))_t9;76{+zIApA|AL2RGybx(5=5_zNK z;hpKuFw5|;Fyk75k9k14r5JI-@9#tp$Du7~HoDCshj=!0@PhpO;2Q(Y27j6^)StSU z zko&xUFU4#2f_5@lw^)8-YbL;V8;Oil&-i((_U4C;9uR#{5K3oG&+~!+Y$)nn{cA>) zfxdQ_?Mzz!+Fdo zvc+fl4``$XF>rOQaeVNKe**+&#Gc9|I86v789J3@4$g?M@KA;&l-Vi@4G}U z1eLOxnvzigdKRlPdLJ+(AY=I5AyD`4-@m8#@KnFW_)jGX zFH-HfikTVi&k;?&#fz(}ZmFw&CjLoMP{EW}0r3Bu8}cBCSL%Pg%o!s(Mn?FFQC-vR z$^_&9oYIz6dd|Qcc1&9W@I(4w|5feyZQXb~IBq|^|IBoZ;qzJ+Oki!P98)-XPDJ$+^OTi_2C6H0g|=C8wu8;qlodYLw4Sm(zkg-R{GKR1rk|L@6)0x!_5+U`QJ`}n7mm#oA#n7v z5G9BFf0bhK-Tr9~7GRsf>wkLz=h6?8rZ`nsK7vx7X9 zkia|$BCRs*c}dmgB9g9P?@LZW%(=Pz%6YG5xD=)3w96~cXeetF3MUt3l7+^hucKI=@?c{@-PpuIV<3H;b#BeA kfbcN!;5*h-t|vm|)`ygr@nzS*t_#o`B`w8Tc}wX30RmB#nE(I) literal 0 HcmV?d00001 diff --git a/lib/pngLua/numberlua.lua b/lib/pngLua/numberlua.lua new file mode 100644 index 0000000..a6377f4 --- /dev/null +++ b/lib/pngLua/numberlua.lua @@ -0,0 +1,507 @@ +--[[ + +LUA MODULE + +bit.numberlua - Bitwise operations implemented in pure Lua as numbers, +with Lua 5.2 'bit32' and (LuaJIT) LuaBitOp 'bit' compatibility interfaces. + +SYNOPSIS + +local bit = require 'bit.numberlua' +print(bit.band(0xff00ff00, 0x00ff00ff)) --> 0xffffffff +-- Interface providing strong Lua 5.2 'bit32' compatibility +local bit32 = require 'bit.numberlua'.bit32 +assert(bit32.band(-1) == 0xffffffff) +-- Interface providing strong (LuaJIT) LuaBitOp 'bit' compatibility +local bit = require 'bit.numberlua'.bit +assert(bit.tobit(0xffffffff) == -1) +DESCRIPTION +This library implements bitwise operations entirely in Lua. +This module is typically intended if for some reasons you don't want +to or cannot install a popular C based bit library like BitOp 'bit' [1] +(which comes pre-installed with LuaJIT) or 'bit32' (which comes +pre-installed with Lua 5.2) but want a similar interface. +This modules represents bit arrays as non-negative Lua numbers. [1] +It can represent 32-bit bit arrays when Lua is compiled +with lua_Number as double-precision IEEE 754 floating point. + +The module is nearly the most efficient it can be but may be a few times +slower than the C based bit libraries and is orders or magnitude +slower than LuaJIT bit operations, which compile to native code. Therefore, +this library is inferior in performane to the other modules. + +The `xor` function in this module is based partly on Roberto Ierusalimschy's +post in http://lua-users.org/lists/lua-l/2002-09/msg00134.html . +The included BIT.bit32 and BIT.bit sublibraries aims to provide 100% +compatibility with the Lua 5.2 "bit32" and (LuaJIT) LuaBitOp "bit" library. +This compatbility is at the cost of some efficiency since inputted +numbers are normalized and more general forms (e.g. multi-argument +bitwise operators) are supported. +STATUS + +WARNING: Not all corner cases have been tested and documented. +Some attempt was made to make these similar to the Lua 5.2 [2] +and LuaJit BitOp [3] libraries, but this is not fully tested and there +are currently some differences. Addressing these differences may +be improved in the future but it is not yet fully determined how to +resolve these differences. +The BIT.bit32 library passes the Lua 5.2 test suite (bitwise.lua) +http://www.lua.org/tests/5.2/ . The BIT.bit library passes the LuaBitOp +test suite (bittest.lua). However, these have not been tested on +platforms with Lua compiled with 32-bit integer numbers. + +API + +BIT.tobit(x) --> z +Similar to function in BitOp. +BIT.tohex(x, n) +Similar to function in BitOp. +BIT.band(x, y) --> z +Similar to function in Lua 5.2 and BitOp but requires two arguments. +BIT.bor(x, y) --> z +Similar to function in Lua 5.2 and BitOp but requires two arguments. + +BIT.bxor(x, y) --> z +Similar to function in Lua 5.2 and BitOp but requires two arguments. +BIT.bnot(x) --> z +Similar to function in Lua 5.2 and BitOp. + +BIT.lshift(x, disp) --> z +Similar to function in Lua 5.2 (warning: BitOp uses unsigned lower 5 bits of shift), +BIT.rshift(x, disp) --> z +Similar to function in Lua 5.2 (warning: BitOp uses unsigned lower 5 bits of shift), + +BIT.extract(x, field [, width]) --> z +Similar to function in Lua 5.2. +BIT.replace(x, v, field, width) --> z +Similar to function in Lua 5.2. +BIT.bswap(x) --> z +Similar to function in Lua 5.2. + +BIT.rrotate(x, disp) --> z +BIT.ror(x, disp) --> z +Similar to function in Lua 5.2 and BitOp. + +BIT.lrotate(x, disp) --> z +BIT.rol(x, disp) --> z + +Similar to function in Lua 5.2 and BitOp. +BIT.arshift +Similar to function in Lua 5.2 and BitOp. +BIT.btest +Similar to function in Lua 5.2 with requires two arguments. + +BIT.bit32 +This table contains functions that aim to provide 100% compatibility +with the Lua 5.2 "bit32" library. +bit32.arshift (x, disp) --> z +bit32.band (...) --> z +bit32.bnot (x) --> z +bit32.bor (...) --> z +bit32.btest (...) --> true | false +bit32.bxor (...) --> z +bit32.extract (x, field [, width]) --> z +bit32.replace (x, v, field [, width]) --> z +bit32.lrotate (x, disp) --> z +bit32.lshift (x, disp) --> z +bit32.rrotate (x, disp) --> z +bit32.rshift (x, disp) --> z + +BIT.bit +This table contains functions that aim to provide 100% compatibility +with the LuaBitOp "bit" library (from LuaJIT). +bit.tobit(x) --> y +bit.tohex(x [,n]) --> y +bit.bnot(x) --> y +bit.bor(x1 [,x2...]) --> y +bit.band(x1 [,x2...]) --> y +bit.bxor(x1 [,x2...]) --> y +bit.lshift(x, n) --> y +bit.rshift(x, n) --> y +bit.arshift(x, n) --> y +bit.rol(x, n) --> y +bit.ror(x, n) --> y +bit.bswap(x) --> y +DEPENDENCIES + +None (other than Lua 5.1 or 5.2). +DOWNLOAD/INSTALLATION + +If using LuaRocks: +luarocks install lua-bit-numberlua + +Otherwise, download . +Alternately, if using git: +git clone git://github.com/davidm/lua-bit-numberlua.git +cd lua-bit-numberlua +Optionally unpack: +./util.mk +or unpack and install in LuaRocks: +./util.mk install + +REFERENCES + +[1] http://lua-users.org/wiki/FloatingPoint +[2] http://www.lua.org/manual/5.2/ +[3] http://bitop.luajit.org/ +LICENSE + +(c) 2008-2011 David Manura. Licensed under the same terms as Lua (MIT). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +(end license) + +--]] + +local M = {_TYPE='module', _NAME='bit.numberlua', _VERSION='0.3.1.20120131'} + +local floor = math.floor + +local MOD = 2^32 +local MODM = MOD-1 + +local function memoize(f) + local mt = {} + local t = setmetatable({}, mt) + function mt:__index(k) + local v = f(k); t[k] = v + return v + end + return t +end + +local function make_bitop_uncached(t, m) + local function bitop(a, b) + local res,p = 0,1 + while a ~= 0 and b ~= 0 do + local am, bm = a%m, b%m + res = res + t[am][bm]*p + a = (a - am) / m + b = (b - bm) / m + p = p*m + end + res = res + (a+b)*p + return res + end + return bitop +end + +local function make_bitop(t) + local op1 = make_bitop_uncached(t,2^1) + local op2 = memoize(function(a) + return memoize(function(b) + return op1(a, b) + end) + end) + return make_bitop_uncached(op2, 2^(t.n or 1)) +end + +-- ok? probably not if running on a 32-bit int Lua number type platform +function M.tobit(x) + return x % 2^32 +end + +M.bxor = make_bitop {[0]={[0]=0,[1]=1},[1]={[0]=1,[1]=0}, n=4} +local bxor = M.bxor + +function M.bnot(a) return MODM - a end +local bnot = M.bnot + +function M.band(a,b) return ((a+b) - bxor(a,b))/2 end +local band = M.band + +function M.bor(a,b) return MODM - band(MODM - a, MODM - b) end +local bor = M.bor + +local lshift, rshift -- forward declare + +function M.rshift(a,disp) -- Lua5.2 insipred + if disp < 0 then return lshift(a,-disp) end + return floor(a % 2^32 / 2^disp) +end +rshift = M.rshift + +function M.lshift(a,disp) -- Lua5.2 inspired + if disp < 0 then return rshift(a,-disp) end + return (a * 2^disp) % 2^32 +end +lshift = M.lshift + +function M.tohex(x, n) -- BitOp style + n = n or 8 + local up + if n <= 0 then + if n == 0 then return '' end + up = true + n = - n + end + x = band(x, 16^n-1) + return ('%0'..n..(up and 'X' or 'x')):format(x) +end +local tohex = M.tohex + +function M.extract(n, field, width) -- Lua5.2 inspired + width = width or 1 + return band(rshift(n, field), 2^width-1) +end +local extract = M.extract + +function M.replace(n, v, field, width) -- Lua5.2 inspired + width = width or 1 + local mask1 = 2^width-1 + v = band(v, mask1) -- required by spec? + local mask = bnot(lshift(mask1, field)) + return band(n, mask) + lshift(v, field) +end +local replace = M.replace + +function M.bswap(x) -- BitOp style + local a = band(x, 0xff); x = rshift(x, 8) + local b = band(x, 0xff); x = rshift(x, 8) + local c = band(x, 0xff); x = rshift(x, 8) + local d = band(x, 0xff) + return lshift(lshift(lshift(a, 8) + b, 8) + c, 8) + d +end +local bswap = M.bswap + +function M.rrotate(x, disp) -- Lua5.2 inspired + disp = disp % 32 + local low = band(x, 2^disp-1) + return rshift(x, disp) + lshift(low, 32-disp) +end +local rrotate = M.rrotate + +function M.lrotate(x, disp) -- Lua5.2 inspired + return rrotate(x, -disp) +end +local lrotate = M.lrotate + +M.rol = M.lrotate -- LuaOp inspired +M.ror = M.rrotate -- LuaOp insipred + + +function M.arshift(x, disp) -- Lua5.2 inspired + local z = rshift(x, disp) + if x >= 0x80000000 then z = z + lshift(2^disp-1, 32-disp) end + return z +end +local arshift = M.arshift + +function M.btest(x, y) -- Lua5.2 inspired + return band(x, y) ~= 0 +end + +-- +-- Start Lua 5.2 "bit32" compat section. +-- + +M.bit32 = {} -- Lua 5.2 'bit32' compatibility + + +local function bit32_bnot(x) + return (-1 - x) % MOD +end +M.bit32.bnot = bit32_bnot + +local function bit32_bxor(a, b, c, ...) + local z + if b then + a = a % MOD + b = b % MOD + z = bxor(a, b) + if c then + z = bit32_bxor(z, c, ...) + end + return z + elseif a then + return a % MOD + else + return 0 + end +end +M.bit32.bxor = bit32_bxor + +local function bit32_band(a, b, c, ...) + local z + if b then + a = a % MOD + b = b % MOD + z = ((a+b) - bxor(a,b)) / 2 + if c then + z = bit32_band(z, c, ...) + end + return z + elseif a then + return a % MOD + else + return MODM + end +end +M.bit32.band = bit32_band + +local function bit32_bor(a, b, c, ...) + local z + if b then + a = a % MOD + b = b % MOD + z = MODM - band(MODM - a, MODM - b) + if c then + z = bit32_bor(z, c, ...) + end + return z + elseif a then + return a % MOD + else + return 0 + end +end +M.bit32.bor = bit32_bor + +function M.bit32.btest(...) + return bit32_band(...) ~= 0 +end + +function M.bit32.lrotate(x, disp) + return lrotate(x % MOD, disp) +end + +function M.bit32.rrotate(x, disp) + return rrotate(x % MOD, disp) +end + +function M.bit32.lshift(x,disp) + if disp > 31 or disp < -31 then return 0 end + return lshift(x % MOD, disp) +end + +function M.bit32.rshift(x,disp) + if disp > 31 or disp < -31 then return 0 end + return rshift(x % MOD, disp) +end + +function M.bit32.arshift(x,disp) + x = x % MOD + if disp >= 0 then + if disp > 31 then + return (x >= 0x80000000) and MODM or 0 + else + local z = rshift(x, disp) + if x >= 0x80000000 then z = z + lshift(2^disp-1, 32-disp) end + return z + end + else + return lshift(x, -disp) + end +end + +function M.bit32.extract(x, field, ...) + local width = ... or 1 + if field < 0 or field > 31 or width < 0 or field+width > 32 then error 'out of range' end + x = x % MOD + return extract(x, field, ...) +end + +function M.bit32.replace(x, v, field, ...) + local width = ... or 1 + if field < 0 or field > 31 or width < 0 or field+width > 32 then error 'out of range' end + x = x % MOD + v = v % MOD + return replace(x, v, field, ...) +end + + +-- +-- Start LuaBitOp "bit" compat section. +-- + +M.bit = {} -- LuaBitOp "bit" compatibility + +function M.bit.tobit(x) + x = x % MOD + if x >= 0x80000000 then x = x - MOD end + return x +end +local bit_tobit = M.bit.tobit + +function M.bit.tohex(x, ...) + return tohex(x % MOD, ...) +end + +function M.bit.bnot(x) + return bit_tobit(bnot(x % MOD)) +end + +local function bit_bor(a, b, c, ...) + if c then + return bit_bor(bit_bor(a, b), c, ...) + elseif b then + return bit_tobit(bor(a % MOD, b % MOD)) + else + return bit_tobit(a) + end +end +M.bit.bor = bit_bor + +local function bit_band(a, b, c, ...) + if c then + return bit_band(bit_band(a, b), c, ...) + elseif b then + return bit_tobit(band(a % MOD, b % MOD)) + else + return bit_tobit(a) + end +end +M.bit.band = bit_band + +local function bit_bxor(a, b, c, ...) + if c then + return bit_bxor(bit_bxor(a, b), c, ...) + elseif b then + return bit_tobit(bxor(a % MOD, b % MOD)) + else + return bit_tobit(a) + end +end +M.bit.bxor = bit_bxor + +function M.bit.lshift(x, n) + return bit_tobit(lshift(x % MOD, n % 32)) +end + +function M.bit.rshift(x, n) + return bit_tobit(rshift(x % MOD, n % 32)) +end + +function M.bit.arshift(x, n) + return bit_tobit(arshift(x % MOD, n % 32)) +end + +function M.bit.rol(x, n) + return bit_tobit(lrotate(x % MOD, n % 32)) +end + +function M.bit.ror(x, n) + return bit_tobit(rrotate(x % MOD, n % 32)) +end + +function M.bit.bswap(x) + return bit_tobit(bswap(x % MOD)) +end + +return M \ No newline at end of file diff --git a/lib/pngLua/numberluaLICENSE b/lib/pngLua/numberluaLICENSE new file mode 100644 index 0000000..a3a63af --- /dev/null +++ b/lib/pngLua/numberluaLICENSE @@ -0,0 +1,25 @@ +lua-bit-numberlua License + +=============================================================================== + +Copyright (C) 2008, David Manura. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=============================================================================== \ No newline at end of file diff --git a/lib/pngLua/png.lua b/lib/pngLua/png.lua new file mode 100644 index 0000000..ee75a8d --- /dev/null +++ b/lib/pngLua/png.lua @@ -0,0 +1,277 @@ +class = require '30log' +deflate = require 'deflate' +require 'stream' + +Chunk = class() +Chunk.__name = "Chunk" +Chunk.length = 0 +Chunk.name = "" +Chunk.data = "" +Chunk.crc = "" + +function Chunk:__init(stream) + if stream.__name == "Chunk" then + self.length = stream.length + self.name = stream.name + self.data = stream.data + self.crc = stream.crc + else + self.length = stream:readInt() + self.name = stream:readChars(4) + self.data = stream:readChars(self.length) + self.crc = stream:readChars(4) + end +end + +function Chunk:getDataStream() + return Stream({input = self.data}) +end + +IHDR = Chunk:extends() +IHDR.__name = "IHDR" +IHDR.width = 0 +IHDR.height = 0 +IHDR.bitDepth = 0 +IHDR.colorType = 0 +IHDR.compression = 0 +IHDR.filter = 0 +IHDR.interlace = 0 + +function IHDR:__init(chunk) + self.super.__init(self, chunk) + local stream = chunk:getDataStream() + self.width = stream:readInt() + self.height = stream:readInt() + self.bitDepth = stream:readByte() + self.colorType = stream:readByte() + self.compression = stream:readByte() + self.filter = stream:readByte() + self.interlace = stream:readByte() +end + +IDAT = Chunk:extends() +IDAT.__name = "IDAT" + +function IDAT:__init(chunk) + self.super.__init(self, chunk) +end + +PLTE = Chunk:extends() +PLTE.__name = "PLTE" +PLTE.numColors = 0 +PLTE.colors = {} + +function PLTE:__init(chunk) + self.super.__init(self, chunk) + self.numColors = math.floor(chunk.length/3) + local stream = chunk:getDataStream() + for i = 1, self.numColors do + self.colors[i] = { + R = stream:readByte(), + G = stream:readByte(), + B = stream:readByte(), + } + end +end + +function PLTE:getColor(index) + return self.colors[index] +end + +Pixel = class() +Pixel.__name = "Pixel" +Pixel.R = 0 +Pixel.G = 0 +Pixel.B = 0 +Pixel.A = 0 + +function Pixel:__init(stream, depth, colorType, palette) + local bps = math.floor(depth/8) + if colorType == 0 then + local grey = stream:readInt(bps) + self.R = grey + self.G = grey + self.B = grey + self.A = 255 + end + if colorType == 2 then + self.R = stream:readInt(bps) + self.G = stream:readInt(bps) + self.B = stream:readInt(bps) + self.A = 255 + end + if colorType == 3 then + local index = stream:readInt(bps)+1 + local color = palette:getColor(index) + self.R = color.R + self.G = color.G + self.B = color.B + self.A = 255 + end + if colorType == 4 then + local grey = stream:readInt(bps) + self.R = grey + self.G = grey + self.B = grey + self.A = stream:readInt(bps) + end + if colorType == 6 then + self.R = stream:readInt(bps) + self.G = stream:readInt(bps) + self.B = stream:readInt(bps) + self.A = stream:readInt(bps) + end +end + +function Pixel:format() + return string.format("R: %d, G: %d, B: %d, A: %d", self.R, self.G, self.B, self.A) +end + +ScanLine = class() +ScanLine.__name = "ScanLine" +ScanLine.pixels = {} +ScanLine.filterType = 0 + +function ScanLine:__init(stream, depth, colorType, palette, length) + bpp = math.floor(depth/8) * self:bitFromColorType(colorType) + bpl = bpp*length + self.filterType = stream:readByte() + stream:seek(-1) + stream:writeByte(0) + local startLoc = stream.position + if self.filterType == 0 then + for i = 1, length do + self.pixels[i] = Pixel(stream, depth, colorType, palette) + end + end + if self.filterType == 1 then + for i = 1, length do + for j = 1, bpp do + local curByte = stream:readByte() + stream:seek(-(bpp+1)) + local lastByte = 0 + if stream.position >= startLoc then lastByte = stream:readByte() or 0 else stream:readByte() end + stream:seek(bpp-1) + stream:writeByte((curByte + lastByte) % 256) + end + stream:seek(-bpp) + self.pixels[i] = Pixel(stream, depth, colorType, palette) + end + end + if self.filterType == 2 then + for i = 1, length do + for j = 1, bpp do + local curByte = stream:readByte() + stream:seek(-(bpl+2)) + local lastByte = stream:readByte() or 0 + stream:seek(bpl) + stream:writeByte((curByte + lastByte) % 256) + end + stream:seek(-bpp) + self.pixels[i] = Pixel(stream, depth, colorType, palette) + end + end + if self.filterType == 3 then + for i = 1, length do + for j = 1, bpp do + local curByte = stream:readByte() + stream:seek(-(bpp+1)) + local lastByte = 0 + if stream.position >= startLoc then lastByte = stream:readByte() or 0 else stream:readByte() end + stream:seek(-(bpl)+bpp-2) + local priByte = stream:readByte() or 0 + stream:seek(bpl) + stream:writeByte((curByte + math.floor((lastByte+priByte)/2)) % 256) + end + stream:seek(-bpp) + self.pixels[i] = Pixel(stream, depth, colorType, palette) + end + end + if self.filterType == 4 then + for i = 1, length do + for j = 1, bpp do + local curByte = stream:readByte() + stream:seek(-(bpp+1)) + local lastByte = 0 + if stream.position >= startLoc then lastByte = stream:readByte() or 0 else stream:readByte() end + stream:seek(-(bpl + 2 - bpp)) + local priByte = stream:readByte() or 0 + stream:seek(-(bpp+1)) + local lastPriByte = 0 + if stream.position >= startLoc - (length * bpp + 1) then lastPriByte = stream:readByte() or 0 else stream:readByte() end + stream:seek(bpl + bpp) + stream:writeByte((curByte + self:_PaethPredict(lastByte, priByte, lastPriByte)) % 256) + end + stream:seek(-bpp) + self.pixels[i] = Pixel(stream, depth, colorType, palette) + end + end +end + +function ScanLine:bitFromColorType(colorType) + if colorType == 0 then return 1 end + if colorType == 2 then return 3 end + if colorType == 3 then return 1 end + if colorType == 4 then return 2 end + if colorType == 6 then return 4 end + error 'Invalid colortype' +end + +function ScanLine:getPixel(pixel) + return self.pixels[pixel] +end + +--Stolen right from w3. +function ScanLine:_PaethPredict(a, b, c) + local p = a + b - c + local varA = math.abs(p - a) + local varB = math.abs(p - b) + local varC = math.abs(p - c) + if varA <= varB and varA <= varC then return a end + if varB <= varC then return b end + return c +end + +pngImage = class() +pngImage.__name = "PNG" +pngImage.width = 0 +pngImage.height = 0 +pngImage.depth = 0 +pngImage.colorType = 0 +pngImage.scanLines = {} + +function pngImage:__init(path, progCallback) + local str = Stream({inputF = path}) + if str:readChars(8) ~= "\137\080\078\071\013\010\026\010" then error 'Not a PNG' end + local ihdr = {} + local plte = {} + local idat = {} + local num = 1 + while true do + ch = Chunk(str) + if ch.name == "IHDR" then ihdr = IHDR(ch) end + if ch.name == "PLTE" then plte = PLTE(ch) end + if ch.name == "IDAT" then idat[num] = IDAT(ch) num = num+1 end + if ch.name == "IEND" then break end + end + self.width = ihdr.width + self.height = ihdr.height + self.depth = ihdr.bitDepth + self.colorType = ihdr.colorType + + local dataStr = "" + for k,v in pairs(idat) do dataStr = dataStr .. v.data end + local output = {} + deflate.inflate_zlib {input = dataStr, output = function(byte) output[#output+1] = string.char(byte) end, disable_crc = true} + imStr = Stream({input = table.concat(output)}) + + for i = 1, self.height do + self.scanLines[i] = ScanLine(imStr, self.depth, self.colorType, plte, self.width) + if progCallback ~= nil then progCallback(i, self.height) end + end +end + +function pngImage:getPixel(x, y) + local pixel = self.scanLines[y].pixels[x] + return pixel +end \ No newline at end of file diff --git a/lib/pngLua/stream.lua b/lib/pngLua/stream.lua new file mode 100644 index 0000000..7e65ea3 --- /dev/null +++ b/lib/pngLua/stream.lua @@ -0,0 +1,105 @@ +class = require '30log' +Stream = class() +Stream.data = "" +Stream.position = 1 +Stream.__name = "Stream" + +function Stream:bsRight(num, pow) + return math.floor(num / 2^pow) +end + +function Stream:bsLeft(num, pow) + return math.floor(num * 2^pow) +end + +function Stream:bytesToNum(bytes) + local n = 0 + for k,v in ipairs(bytes) do + n = self:bsLeft(n, 8) + v + end + n = (n > 2147483647) and (n - 4294967296) or n + return n +end + +function Stream:__init(param) + if (param.inputF ~= nil) then + self.data = io.open(param.inputF, "rb"):read("*all") + end + if (param.input ~= nil) then + self.data = param.input + end +end + +function Stream:seek(amount) + self.position = self.position + amount +end + +function Stream:readChar() + if self.position <= 0 then self:seek(1) return nil end + local byte = self.data:sub(self.position, self.position) + self:seek(1) + return byte +end + +function Stream:readChars(num) + if self.position <= 0 then self:seek(1) return nil end + local str = "" + local i = 1 + while i <= num do + str = str .. self:readChar() + i = i + 1 + end + return str, i-1 +end + +function Stream:readByte() + if self.position <= 0 then self:seek(1) return nil end + return self:readChar():byte(1) +end + +function Stream:readBytes(num) + if self.position <= 0 then self:seek(1) return nil end + local tabl = {} + local i = 1 + while i <= num do + local curByte = self:readByte() + if curByte == nil then break end + tabl[i] = curByte + i = i + 1 + end + return tabl, i-1 +end + +function Stream:readInt(num) + if self.position <= 0 then self:seek(1) return nil end + num = num or 4 + local bytes, count = self:readBytes(num) + return self:bytesToNum(bytes), count +end + +function Stream:writeChar(char) + if self.position <= 0 then self:seek(1) return end + self.data = table.concat{self.data:sub(1,self.position-1), char, self.data:sub(self.position+1)} + self:seek(1) +end + +function writeChars(buffer) + if self.position <= 0 then self:seek(1) return end + local lenString = buffer:len() + self.data = ("%s%s%s"):format(self.data:sub(1,self.position-1), char, self.data:sub(self.position+lenString)) + self.seek(lenString) +end + +function Stream:writeByte(byte) + if self.position <= 0 then self:seek(1) return end + self:writeChar(string.char(byte)) +end + +function Stream:writeBytes(buffer) + if self.position <= 0 then self:seek(1) return end + local str = "" + for k,v in pairs(buffer) do + str = str .. string.char(v) + end + writeChars(str) +end \ No newline at end of file diff --git a/lib/pngLua/test.lua b/lib/pngLua/test.lua new file mode 100644 index 0000000..0869f29 --- /dev/null +++ b/lib/pngLua/test.lua @@ -0,0 +1,12 @@ +require 'png' + +function printProg(line, totalLine) + print(line .. " of " .. totalLine) +end + +img = pngImage("Example.png", printProg) +print("Width: " .. img.width) +print("Height: " .. img.height) +print("Depth: " .. img.depth) + +print("Color of pixel (10, 10): " .. img:getPixel(10,10):format()) \ No newline at end of file diff --git a/rasters/demo/biomes.tif b/rasters/demo/biomes.tif index 617f91fd8f1a7ffe8062ae7d1f135ba8481fa18b..f92f2e6d36ad3cfa31df960d609c4593e02894b8 100644 GIT binary patch literal 19420 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 literal 23488 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 Cj7I(d diff --git a/rasters/horse/horse-dem.tif b/rasters/horse/horse-dem.tif index cd679be89c16e611ae3db5bbce913a14d8c86720..574d3d6f8cbbfe5cbf8bbd32cc875c046692383b 100755 GIT binary patch literal 220288 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 literal 644472 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 nnWk+cPv5CC?Y$+sAQ literal 0 HcmV?d00001