├── README.md ├── NEWS ├── tests ├── 1x1-inv.txt ├── no-output.txt ├── dalsnuten-jp2a-2000x2000-md5.txt ├── Makefile ├── test-term.txt ├── grind.jpg ├── jp2a.jpg ├── jp2a.webp ├── long.jpg ├── long.png ├── jp2a-colorful.png ├── jp2a-colormap.png ├── jp2a-rotate-180.jpg ├── jp2a-rotate-270.jpg ├── jp2a-rotate-90.jpg ├── logo-40x25-gray.jpg ├── jp2a-horizontal-90.jpg ├── jp2a-horizontal-270.jpg ├── jp2a-mirror-vertical.jpg ├── jp2a-interlaced-16-bit.png ├── jp2a-mirror-horizontal.jpg ├── dalsnuten-640x480-gray-low.jpg ├── jp2a-colorful-horizontal-270.jpg ├── 10h.txt ├── html-title.txt ├── html-raw.txt ├── 40x40.txt ├── normal.txt ├── jp2a-webp.txt ├── flip-xy-invert.txt ├── jp2a-rotate-180.txt ├── jp2a-mirror-vertical.txt ├── jp2a-mirror-horizontal.txt ├── normal-clear.txt ├── jp2a-mirror-horizontal-flipx.txt ├── normal-b.txt ├── dalsnuten-invert.txt ├── dalsnuten-normal.txt ├── grind.txt ├── grind-blue.txt ├── grind-green.txt ├── grind-red.txt ├── logo-30.txt ├── 110x30-i-b.txt ├── dalsnuten-color-ANSI.txt ├── dalsnuten-80x49-inv.txt ├── grind-color-ANSI.txt ├── 2xnormal-b.txt ├── grind-2grayscale-ANSI-fill.txt ├── logo.html ├── html-title-entities.html ├── jp2a-webp-scale-up.txt ├── logo-x.html ├── jp2a-rotate-90.txt ├── jp2a-horizontal-270.txt ├── jp2a-horizontal-90.txt ├── jp2a-rotate-270.txt ├── jp2a-rotate-90-flipy.txt ├── edges.txt ├── edges-only.txt ├── edges-only-invert.txt ├── jp2a-png-colormap.txt ├── normal-verbose.txt ├── dalsnuten-256.html ├── dalsnuten-256-light.html ├── dalsnuten-256-x.html ├── dalsnuten-256-light-x.html └── grind-ANSI-fill.txt ├── .github ├── jp2a.jpg └── workflows │ ├── full-check.yml │ └── publish-docker-image.yml ├── src ├── Makefile.am ├── aspect_ratio.c ├── terminal.c ├── curl.c └── html.c ├── AUTHORS ├── autogen.sh ├── .dockerignore ├── .gitignore ├── Doxyfile.in ├── Dockerfile ├── include ├── round.h ├── aspect_ratio.h ├── terminal.h ├── curl.h ├── jp2a.h ├── options.h └── html.h ├── BUGS ├── completion ├── bash │ └── jp2a └── zsh │ └── _jp2a ├── Makefile.am └── configure.ac /README.md: -------------------------------------------------------------------------------- 1 | README -------------------------------------------------------------------------------- /NEWS: -------------------------------------------------------------------------------- 1 | See ChangeLog 2 | -------------------------------------------------------------------------------- /tests/1x1-inv.txt: -------------------------------------------------------------------------------- 1 | ' 2 | -------------------------------------------------------------------------------- /tests/no-output.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/dalsnuten-jp2a-2000x2000-md5.txt: -------------------------------------------------------------------------------- 1 | 8004000 2 | -------------------------------------------------------------------------------- /tests/Makefile: -------------------------------------------------------------------------------- 1 | check: test 2 | 3 | test: 4 | ./run-tests.sh 5 | -------------------------------------------------------------------------------- /tests/test-term.txt: -------------------------------------------------------------------------------- 1 | Terminal type 'dummy-term' not recognized. 2 | -------------------------------------------------------------------------------- /tests/grind.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/grind.jpg -------------------------------------------------------------------------------- /tests/jp2a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a.jpg -------------------------------------------------------------------------------- /tests/jp2a.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a.webp -------------------------------------------------------------------------------- /tests/long.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/long.jpg -------------------------------------------------------------------------------- /tests/long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/long.png -------------------------------------------------------------------------------- /.github/jp2a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/.github/jp2a.jpg -------------------------------------------------------------------------------- /tests/jp2a-colorful.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-colorful.png -------------------------------------------------------------------------------- /tests/jp2a-colormap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-colormap.png -------------------------------------------------------------------------------- /tests/jp2a-rotate-180.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-rotate-180.jpg -------------------------------------------------------------------------------- /tests/jp2a-rotate-270.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-rotate-270.jpg -------------------------------------------------------------------------------- /tests/jp2a-rotate-90.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-rotate-90.jpg -------------------------------------------------------------------------------- /tests/logo-40x25-gray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/logo-40x25-gray.jpg -------------------------------------------------------------------------------- /tests/jp2a-horizontal-90.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-horizontal-90.jpg -------------------------------------------------------------------------------- /tests/jp2a-horizontal-270.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-horizontal-270.jpg -------------------------------------------------------------------------------- /tests/jp2a-mirror-vertical.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-mirror-vertical.jpg -------------------------------------------------------------------------------- /tests/jp2a-interlaced-16-bit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-interlaced-16-bit.png -------------------------------------------------------------------------------- /tests/jp2a-mirror-horizontal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-mirror-horizontal.jpg -------------------------------------------------------------------------------- /tests/dalsnuten-640x480-gray-low.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/dalsnuten-640x480-gray-low.jpg -------------------------------------------------------------------------------- /tests/jp2a-colorful-horizontal-270.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Talinx/jp2a/HEAD/tests/jp2a-colorful-horizontal-270.jpg -------------------------------------------------------------------------------- /src/Makefile.am: -------------------------------------------------------------------------------- 1 | bin_PROGRAMS = jp2a 2 | jp2a_SOURCES = aspect_ratio.c html.c terminal.c curl.c jp2a.c options.c image.c 3 | AM_CPPFLAGS = -I../include 4 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | jp2a is written by Christian Stigen Larsen and Christoph Raitzig 2 | 3 | This program uses dynamically linked libraries from other authors. 4 | For an overview, see the file LICENSES. 5 | -------------------------------------------------------------------------------- /autogen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | autoreconf -vi 3 | 4 | while (( "$#" )); do 5 | if [ $1 == "-c" ]; then 6 | ./configure --with-jpeg-prefix=/usr/local \ 7 | --with-curl-config=`which curl-config` 8 | fi 9 | shift 10 | done 11 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .github 3 | Doxyfile.in 4 | README.md 5 | tests 6 | 7 | aclocal.m4 8 | autom4te.cache 9 | compile 10 | config.h 11 | config.h.in 12 | config.log 13 | config.status 14 | configure 15 | depcomp 16 | install-sh 17 | Makefile 18 | Makefile.in 19 | missing 20 | stamp-h1 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.o 3 | Makefile 4 | Makefile.in 5 | aclocal.m4 6 | autom4te.cache 7 | compile 8 | config.h 9 | config.h.in 10 | config.log 11 | config.status 12 | configure 13 | depcomp 14 | install-sh 15 | missing 16 | src/.deps 17 | src/jp2a 18 | stamp-h1 19 | Doxyfile 20 | doxygen-doc/ 21 | INSTALL 22 | -------------------------------------------------------------------------------- /Doxyfile.in: -------------------------------------------------------------------------------- 1 | PROJECT_NAME = @PACKAGE_NAME@ 2 | PROJECT_NUMBER = @PACKAGE_VERSION@ 3 | PROJECT_BRIEF = "Convert JPEG and PNG images to ASCII" 4 | OUTPUT_DIRECTORY = doxygen-doc 5 | STRIP_FROM_PATH = @top_srcdir@ 6 | OPTIMIZE_OUTPUT_FOR_C = YES 7 | INPUT = include,doc 8 | PREDEFINED = FEAT_CURL 9 | -------------------------------------------------------------------------------- /tests/10h.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMNNMMMMMMMMMMMMMNXXWMMMMMMMMMMM 3 | MW:'XMMMMMMMMMMx. .oWMMMMMMMMM 4 | M0..xN;.';'.;OM00NX' .XWo::;.,OM 5 | MO oN. 'NN, .NMMMx .0MWOkoc cM 6 | MO oN. .xx. ,WWO, ;cxX. ;k. ;X 7 | Mx oN. .lclxNM0llllllxWxcldoclO 8 | W; ,XN' ;MMMMMMMMMMMMMMMMMMMMMMM 9 | MWNMMMNNNMMMMMMMMMMMMMMMMMMMMMMM 10 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 11 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu AS builder 2 | WORKDIR /app 3 | COPY . . 4 | ENV DEBIAN_FRONTEND=noninteractive 5 | RUN apt-get update && apt-get install -y gcc make autoconf libjpeg-dev libpng-dev libwebp-dev libcurl4-gnutls-dev libncurses5-dev libexif-dev pkg-config 6 | RUN ./autogen.sh && ./configure && make 7 | 8 | FROM ubuntu 9 | WORKDIR /app 10 | RUN apt-get update && apt-get install -y libc6 libjpeg8 libpng16-16t64 libwebp7 libcurl3t64-gnutls libtinfo6 libexif12 11 | COPY --from=builder /app/src/jp2a /usr/bin/jp2a 12 | ENTRYPOINT ["jp2a"] 13 | -------------------------------------------------------------------------------- /include/round.h: -------------------------------------------------------------------------------- 1 | /*! \file 2 | * \noop Copyright 2006-2016 Christian Stigen Larsen 3 | * \noop Copyright 2020 Christoph Raitzig 4 | * 5 | * \brief Round macro. 6 | * 7 | * \author Christian Stigen Larsen 8 | * \author Christoph Raitzig 9 | * \copyright Distributed under the GNU General Public License (GPL) v2. 10 | */ 11 | 12 | #ifndef INC_JP2A_ROUND_H 13 | #define INC_JP2A_ROUND_H 14 | 15 | /*! 16 | * \brief Rounds a float to the nearest integer and casts to integer. 17 | */ 18 | # define ROUND(xfloat) (int) ( 0.5f + xfloat ) 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /tests/html-title.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | just testing 6 | 17 | 18 | 19 |
20 | XNMMWk0MMM
21 | ol'c0x:Oco
22 | 0X0MMMMMMM
23 | 
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /include/aspect_ratio.h: -------------------------------------------------------------------------------- 1 | /*! \file 2 | * \noop Copyright 2006-2016 Christian Stigen Larsen 3 | * \noop Copyright 2020 Christoph Raitzig 4 | * 5 | * \brief Function for calculating the output width or height. 6 | * 7 | * \author Christian Stigen Larsen 8 | * \author Christoph Raitzig 9 | * \copyright Distributed under the GNU General Public License (GPL) v2. 10 | */ 11 | 12 | #ifndef INC_JP2A_ASPECT_RATIO_H 13 | #define INC_JP2A_ASPECT_RATIO_H 14 | 15 | /*! 16 | * \brief Calculate the output width or height, but not both. 17 | * 18 | * \param jpeg_width,jpeg_height dimensions of the input image 19 | * \param switch_x_y whether to switch x and y dimensions, this is the case when the stored pixels differ from the displayed pixels due to a rotation 20 | */ 21 | void aspect_ratio(const int jpeg_width, const int jpeg_height, const int switch_x_y); 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /BUGS: -------------------------------------------------------------------------------- 1 | TODO 2 | - What about making a Windows installer? 3 | - What about making a small GUI for windows? If run, open a file browser, then convert and display 4 | result in notepad, or internet explorer. 5 | - About process_scanline, it might be much better (clearer, faster) to pass a function pointer to the 6 | read pixels algorithm, so we don't have to do all those "if"s in the innerloop. Might also be slower, though, 7 | because of the increased stack pushing and popping. 8 | - Check j2pa --color ~/tmp/cola.jpg, should not get blue color there, because we are using grayscale colors! 9 | - Consider using Bresenham scaling (search for "Image scanling with Bresenham" on DDJ.com) 10 | - Consider using other libs for image conversions, e.g. would be nice to read GIF. (See gdlib.) 11 | 12 | BUGS 13 | - Floating-point calculation (and rounding) is not 100% equal from compiler to compiler. Try to fix this. 14 | -------------------------------------------------------------------------------- /include/terminal.h: -------------------------------------------------------------------------------- 1 | /*! \file 2 | * \noop Copyright 2020 Christoph Raitzig 3 | * 4 | * \brief Functions for querying terminal features. 5 | * 6 | * \author Christoph Raitzig 7 | * \copyright Distributed under the GNU General Public License (GPL) v2. 8 | */ 9 | 10 | #ifndef INC_JP2A_TERMINAL_H 11 | #define INC_JP2A_TERMINAL_H 12 | 13 | /*! 14 | * \brief Get the terminal dimensions. 15 | * 16 | * \param width_,height_ stores the dimensions 17 | * \param error stores an error (if one occurs) 18 | * \return 1 success\n 19 | * 0 terminal type not defined\n 20 | * -1 termcap database inaccessible\n 21 | * -2 environment variable TERM not set\n 22 | */ 23 | int get_termsize(int* width_, int* height_, char** error); 24 | 25 | /*! 26 | * \brief Checks whether the terminal supports true color. 27 | * 28 | * \return true if the terminal supports true color, false otherwise 29 | */ 30 | int supports_true_color(); 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /tests/html-raw.txt: -------------------------------------------------------------------------------- 1 | XNMMWk0MMM
ol'c0x:Oco
0X0MMMMMMM
-------------------------------------------------------------------------------- /completion/bash/jp2a: -------------------------------------------------------------------------------- 1 | # bash completion for jp2a -*- shell-script -*- 2 | 3 | _jp2a() 4 | { 5 | local cur prev OPTS 6 | COMPREPLY=() 7 | cur="${COMP_WORDS[COMP_CWORD]}" 8 | prev="${COMP_WORDS[COMP_CWORD-1]}" 9 | OPTS="--help --verbose --debug --clear --colors --color-depth= --fill 10 | --grayscale --html --htmlls --xhtml --html-fill --html-no-bold --html-raw --border 11 | --invert --background= --flipx --flipy --version --width= --height= 12 | --red= --green= --blue= --html-fontsize= --size= --term-zoom 13 | --term-center --term-height --term-width --term-fit --output= --html-title= 14 | --chars= --edge-threshold= --edges-only" 15 | case $cur in 16 | --*) 17 | COMPREPLY=( $(compgen -W "${OPTS}" -- $cur) ) 18 | # Add space if there is not a '=' in suggestions 19 | [[ ! "${COMPREPLY[@]}" =~ "=" ]] && compopt +o nospace 20 | return 0 21 | ;; 22 | esac 23 | local IFS=$'\n' 24 | compopt -o filenames 25 | COMPREPLY=( $(compgen -f -- $cur) ) 26 | return 0 27 | } 28 | complete -F _jp2a -o nospace jp2a 29 | 30 | # ex: filetype=sh 31 | -------------------------------------------------------------------------------- /Makefile.am: -------------------------------------------------------------------------------- 1 | VERSION = @VERSION@ 2 | SUBDIRS = src 3 | man_MANS = man/jp2a.1 4 | bashcompdir = @bashcompdir@ 5 | dist_bashcomp_DATA = completion/bash/jp2a 6 | zshcompdir = @zshcompdir@ 7 | dist_zshcomp_DATA = completion/zsh/_jp2a 8 | EXTRA_DIST = tests/??*.txt tests/??*.html tests/??*.jpg tests/??*.png tests/run-tests.sh tests/Makefile include/??*.h man/jp2a.1 Doxyfile.in LICENSES 9 | MOSTLYCLEANFILES = $(DX_CLEANFILES) 10 | CLEANFILES = Doxyfile 11 | 12 | .PHONY: doc test check 13 | 14 | test: check 15 | 16 | check: all 17 | $(MAKE) -C tests check 18 | 19 | if DOC 20 | @DX_RULES@ 21 | editdx = sed -e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' -e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' -e 's|@top_srcdir[@]|$(top_srcdir)|g' 22 | Doxyfile: Doxyfile.in 23 | $(editdx) $(srcdir)/$@.in > $@.tmp 24 | mv $@.tmp $@ 25 | else !DOC 26 | Doxyfile: 27 | @echo "Building doxygen documentation not enabled." 28 | @echo "To build doxygen documentation:" 29 | @echo "1. Install autoconf-archive and doxygen" 30 | @echo "2. autoreconf -vi" 31 | @echo "3. ./configure" 32 | @echo "4. make Doxyfile" 33 | @echo "5. doxygen" 34 | @false 35 | endif 36 | 37 | doc: Doxyfile doc/*.md include/*.h 38 | @echo "Running doxygen..." 39 | doxygen 40 | @echo "Documentation build to doxygen-doc/" 41 | @echo "You can view the HTML documentation by opening doxygen-doc/html/index.html, e. g. with:" 42 | @echo "xdg-open doxygen-doc/html/index.html" 43 | -------------------------------------------------------------------------------- /include/curl.h: -------------------------------------------------------------------------------- 1 | /*! \file 2 | * \noop Copyright 2020 Christoph Raitzig 3 | * 4 | * \brief Functions for downloading images (with cURL). 5 | * 6 | * \author Christoph Raitzig 7 | * \copyright Distributed under the GNU General Public License (GPL) v2. 8 | */ 9 | 10 | #ifndef INC_JP2A_CURL_H 11 | #define INC_JP2A_CURL_H 12 | 13 | #ifdef FEAT_CURL 14 | 15 | /*! 16 | * \brief Checks whether it is a supported URL. 17 | * 18 | * \param s the URL 19 | * \return 1 if it is a supported URL 20 | */ 21 | int is_url(const char* s); 22 | 23 | /*! 24 | * \brief Downloads an image. 25 | * 26 | * \param url URL of the image 27 | * \param debug true if cURL should print debug information 28 | * \return read-only file-descriptor that must be closed. 29 | */ 30 | int curl_download(const char* url, const int debug); 31 | 32 | #ifdef WIN32 33 | 34 | /*! 35 | * \brief A custom write function. 36 | * 37 | * Required for Windows. Does the same as fwrite(). 38 | * 39 | * \param buffer buffer to read data from 40 | * \param size the size of one item 41 | * \param nmemb the number of items 42 | * \param userp the file stream to write to 43 | * \return the number of items written 44 | */ 45 | size_t passthru_write(void *buffer, size_t size, size_t nmemb, void *userp); 46 | 47 | /*! 48 | * \brief Actually download an image. 49 | */ 50 | void curl_download_child(void*); 51 | #else 52 | 53 | /*! 54 | * \brief Actually download an image. 55 | */ 56 | void curl_download_child(); 57 | #endif 58 | 59 | #endif 60 | 61 | #endif 62 | -------------------------------------------------------------------------------- /src/aspect_ratio.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2006-2016 Christian Stigen Larsen 3 | * Copyright 2020 Christoph Raitzig 4 | * Distributed under the GNU General Public License (GPL) v2. 5 | */ 6 | 7 | #include "options.h" 8 | #include "round.h" 9 | 10 | void aspect_ratio(const int jpeg_width, const int jpeg_height, const int switch_x_y) { 11 | 12 | // the 2.0f and 0.5f factors are used for text displays that (usually) have characters 13 | // that are taller than they are wide. 14 | 15 | const int stored_width = switch_x_y ? jpeg_height : jpeg_width; 16 | const int stored_height = switch_x_y ? jpeg_width : jpeg_height; 17 | 18 | #define CALC_WIDTH ROUND(2.0f * (float) height * (float) stored_width / (float) stored_height) 19 | #define CALC_HEIGHT ROUND(0.5f * (float) width * (float) stored_height / (float) stored_width) 20 | 21 | // calc width 22 | if ( auto_width && !auto_height ) { 23 | width = CALC_WIDTH; 24 | 25 | // adjust for too small dimensions 26 | while ( width==0 ) { 27 | ++height; 28 | aspect_ratio(stored_width, stored_height, 0); 29 | } 30 | 31 | while ( termfit==TERM_FIT_AUTO && (width + use_border*2)>term_width ) { 32 | width = term_width - use_border*2; 33 | height = 0; 34 | auto_height = 1; 35 | auto_width = 0; 36 | aspect_ratio(stored_width, stored_height, 0); 37 | } 38 | 39 | } 40 | 41 | // calc height 42 | if ( !auto_width && auto_height ) { 43 | height = CALC_HEIGHT; 44 | 45 | // adjust for too small dimensions 46 | if ( height==0 ) { 47 | height = ( stored_height == 1 )? 0 : 1; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /.github/workflows/full-check.yml: -------------------------------------------------------------------------------- 1 | # Version 20240908, by Eriberto Mota, modified by Christoph Raitzig 2 | 3 | name: full-check 4 | 5 | on: [push, pull_request] 6 | 7 | jobs: 8 | build: 9 | 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v6 14 | - name: install_dependencies 15 | run: sudo apt update && sudo apt install libjpeg-dev libpng-dev libwebp-dev libcurl4-gnutls-dev libncurses5-dev libexif-dev pkg-config 16 | - name: first_build 17 | run: | 18 | ./autogen.sh 19 | ./configure 20 | make 21 | sudo make install 22 | sudo make uninstall 23 | make distclean 24 | - name: second_build 25 | run: | 26 | ./autogen.sh 27 | ./configure 28 | make 29 | sudo make install 30 | - name: run_program 31 | run: | 32 | TERM=xterm-256color jp2a --colors .github/jp2a.jpg 33 | TERM=xterm-256color jp2a --background=light -b -f -x -y --colors .github/jp2a.jpg 34 | - name: run_tests 35 | run: | 36 | make test 37 | 38 | zig-test: 39 | runs-on: ubuntu-latest 40 | steps: 41 | - uses: actions/checkout@v6 42 | - name: install_dependencies 43 | run: sudo apt update && sudo apt install libjpeg-dev libpng-dev libwebp-dev libcurl4-gnutls-dev libncurses5-dev libexif-dev pkg-config 44 | - uses: mlugg/setup-zig@v2 45 | - name: build with zig 46 | run: | 47 | ./autogen.sh 48 | CC="zig cc" ./configure 49 | make 50 | - name: run tests 51 | run: | 52 | make test 53 | -------------------------------------------------------------------------------- /.github/workflows/publish-docker-image.yml: -------------------------------------------------------------------------------- 1 | name: Publish Docker image on Docker Hub 2 | 3 | on: 4 | release: 5 | types: [published] 6 | schedule: 7 | - cron: '21 12 21 * *' 8 | 9 | jobs: 10 | push_to_registry: 11 | name: Push Docker image to Docker Hub 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Check out the repo 15 | uses: actions/checkout@v6 16 | 17 | - name: Log in to Docker Hub 18 | uses: docker/login-action@v3 19 | with: 20 | username: ${{ secrets.DOCKER_HUB_USERNAME }} 21 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 22 | 23 | - name: Set up QEMU 24 | uses: docker/setup-qemu-action@v3 25 | with: 26 | platforms: all 27 | 28 | - name: Set up Docker Buildx 29 | id: buildx 30 | uses: docker/setup-buildx-action@v3 31 | 32 | - name: Extract metadata (tags, labels) for Docker 33 | id: meta 34 | uses: docker/metadata-action@v5 35 | with: 36 | images: talinx/jp2a 37 | tags: | 38 | type=semver,pattern={{version}} 39 | type=semver,pattern={{major}}.{{minor}} 40 | type=schedule,pattern=nightly 41 | flavor: | 42 | latest=true 43 | 44 | - name: Build and push 45 | uses: docker/build-push-action@v6 46 | with: 47 | context: . 48 | platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/arm/v7 49 | push: true 50 | tags: ${{ steps.meta.outputs.tags }} 51 | labels: ${{ steps.meta.outputs.labels }} 52 | 53 | - name: Image digest 54 | run: echo ${{ steps.docker_build.outputs.digest }} 55 | -------------------------------------------------------------------------------- /tests/40x40.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMWk0MMMMMMMMMMMMMMMMXkxkXMMMMMMMMMMMMMM 8 | MMk .XMMMMMMMMMMMMMWO; 'KMMMMMMMMMMMMM 9 | MMo OMMMMMMMMMMMMMk. cWMMMMMMMMMMMM 10 | MMo OMMMMMMMMMMMMW; .KMMMMMMMMMMMM 11 | MM0,cNMMMMMMMMMMMMW' . oMMMMMMMMMMMM 12 | MMKOOXMN00KWOxKMMMW' ckc :MMMWXkxkNMMM 13 | MWc''xMk''cd..,OMMW:oNMX. :MMWx;...cXMM 14 | MW, oMo .. 'XMWONMMM; :MMk. lMM 15 | MW, oMo cWMWMMMM: cMW, .. .0M 16 | MW, oMo .; .KMMMMMW, xMW'.xKd xM 17 | MW, oMo .OX: kMMMMMN. 0MW:xMMN. dM 18 | MW, oMo ,WMk xMMMMMO 'NMWOWMWO. dM 19 | MW, oMo ;MMX. oMMMMW: dMMMWNx:. dM 20 | MW, oMo ,MMN. oMMMMO 'NMMMX: .. dM 21 | MW, oMo ,MMK. dMMMW: oMMMMd .k' dM 22 | MW, oMo 'NMd kMMMx lxx0X. xN' dM 23 | MW, oMo ;o. .KMMK. :0 0X. lN 24 | MW, oMo ;WMNc :0. cc .d 25 | MW, oMo dMMk :X. : 26 | MW, oMo .. .lNMN:........lWo. ,; .d 27 | MW' oMo ;KddOWMMN000000000XMWOdxXXdd0W 28 | MX. oMo ;MMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | Mx dMo ,MMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | N, OMo ,MMMMMMMMMMMMMMMMMMMMMMMMMMMMM 31 | M; ,NMo ,MMMMMMMMMMMMMMMMMMMMMMMMMMMMM 32 | Mo dMMo ,MMMMMMMMMMMMMMMMMMMMMMMMMMMMM 33 | Mk.:NMMd..:MMMMMMMMMMMMMMMMMMMMMMMMMMMMM 34 | MN0NMMMN00KMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 36 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 37 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 38 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 39 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 40 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 41 | -------------------------------------------------------------------------------- /include/jp2a.h: -------------------------------------------------------------------------------- 1 | /*! \file 2 | * \noop Copyright 2006-2016 Christian Stigen Larsen 3 | * \noop Copyright 2020 Christoph Raitzig 4 | * 5 | * \brief The main function and a helper function. 6 | * 7 | * \author Christian Stigen Larsen 8 | * \author Christoph Raitzig 9 | * \copyright Distributed under the GNU General Public License (GPL) v2. 10 | */ 11 | 12 | #ifndef INC_JP2A_H 13 | #define INC_JP2A_H 14 | 15 | #ifdef _WIN32 16 | #include 17 | #endif 18 | 19 | /*! 20 | * \brief The main function. 21 | * 22 | * \param argc argument count 23 | * \param argv the arguments 24 | */ 25 | int main(int argc, char** argv); 26 | 27 | /*! 28 | * \brief Reads from a stream into a buffer. 29 | * 30 | * This function is used to make a seekable stream from a non-seekable stream: 31 | * Read the contents of the non-seekable stream into a buffer (with this function) and open a stream to this buffer (with fmemopen()). 32 | * The buffer is (re)allocated as needed. 33 | * 34 | * \param fp stream to read into buffer 35 | * \param buffer the buffer to read into 36 | * \param buffer_size the allocated size of the buffer 37 | * \param actual_size the number of bytes read into the buffer 38 | * \return true if sucessful, false otherwise 39 | */ 40 | int read_into_buffer(FILE *fp, char **buffer, size_t *buffer_size, size_t *actual_size); 41 | 42 | #ifdef _WIN32 43 | 44 | /*! 45 | * \brief fmemopen alternative for Windows. 46 | * 47 | * Windows does not support opening a file stream to part of the RAM. 48 | * This function creates a temporary file and writes the contents of the buffer to it. 49 | * 50 | * \param buf data to write to the file 51 | * \param size number of bytes to write 52 | * \param mode ignored, for compatibility with the actual fmemopen() 53 | * \return the file handle (or NULL if an error occurred) 54 | */ 55 | HANDLE fmemopen(void *buf, size_t size, const char *mode); 56 | #endif 57 | 58 | #endif 59 | -------------------------------------------------------------------------------- /tests/normal.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMWk:';oXMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxl;,''';cdKWMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMK, .dMMMMMMMMMMMMMMMMMMMMMMMMMMWo. .cKMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMWx;',oXMMMMMMMMMMMMMMMMMMMMMMMMMMN' . ,KMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMMWOllcllxNMMNklllllOKxlc:cldONMMMMMN;;dO0KOo. dMMMMMWKkdoc:::clokXWMMMM 9 | MMMWc '0MMK, .cOWMMWXWMMMMMMd .kMMMWx'. ... .:0MMM 10 | MMMWc '0MMK, .:oxd:. .xMMMMMMMMMMN: oWMMMNc.,ok0XXXx. :NMM 11 | MMMWc '0MMK, lWMMMWx. :XMMMMMMMMXc .dNMMMMW00WMWNKkdc. ;XMM 12 | MMMWc '0MMK, lWMMMMK, ,KMMMMMMWO, 'OWMMMMMMMXkl;.. .. ;XMM 13 | MMMWc '0MMK, lWMMMMk. :NMMMMM0c. .cKWWWWWMMWx. .oOK: ;XMM 14 | MMMWc '0MMK, .oxOkl. .kMMMMXo. .'''''';OMO. .xMMK; ,0NN 15 | MMMWc '0MMK, .kWMMM0, .xM0' .c:. .,k 16 | MMMNc '0MMK, 'c;,''',:okNMMMMXo;;;;;;;;;;;;;;;c0MW0o;,''',:odc,'',;:oK 17 | MMNx. ,KMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 18 | MXc .dWMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 19 | MMk. 'xNMMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMWk::okNMMMMMNd::::cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 21 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | -------------------------------------------------------------------------------- /tests/jp2a-webp.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMXl',oXMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxc,,'',cxXMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMWl :MMMMMMMMMMMMMMMMMMMMMMMMMMWl. ;KMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMWK:..cKMMMMMMMMMMMMMMMMMMMMMMMMMMX .0MMMMMMWMMMMMMMMMMMMMMMMM 8 | MMMMXcc::coKMMNxcccccOKdc;,;cx0WMMMMMX .o0XXXO; lMMMMMWKkdc;,;,;cd0WMMMMM 9 | MMMM0 .kMMX: .xWMMMWKWMMMMMMX. lMMMWd. .dWMMM 10 | MMMM0 .kMMX: .';' cWMMMMMMMMMMM0 ,KMMMN: ,ldkOx, KMMM 11 | MMMM0 .OMMX: lNMMWX; OMMMMMMMMMMX' 'KMMMMWkdXWMMMWXd. kWMM 12 | MMMM0 .OMMX: oMMMMM0. oWMMMMMMMWk. :NMMMMMMMMNOo;. kMMM 13 | MMMM0 .OMMX: oMMMMWx. xWMMMMMMK, .kWMMMMMMM0, .:k0. kMMM 14 | MMMM0 .OMMX: ,ONWXd. .XMMMMMXc ,;;;;;:OMO. .OMMK. kWWM 15 | MMMM0 .OMMX: .KMMMMWd. oMO. ;oc. .';W 16 | MMMM0 .OMMX: .. .,xNMMMMk' .dMWx' .,;. .cM 17 | MMMWx .OMMX: oNK0OOO0NWMMMMMMXKKKKKKKKKKKKKKKKXNMMMWK0OOO0NWMKOOOOKWMM 18 | MMKc .XMMX: oWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 19 | MM0 .kMMMX: oWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMWO. .,dXMMMMXc dWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 21 | MMMMNXNWMMMMMMWNXXXXXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | -------------------------------------------------------------------------------- /tests/flip-xy-invert.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 'odddd: ,cdd, 6 | lWMMMMk. ;OWMMM0, 7 | lWMMMMk. :XMMMMMNo. 8 | lWMMMMk. .kMMMMM0; 9 | .cdxkOOko:cdkOOOkxc. .oxxxxxxxxxxxxxxxc. ,cdkOOOkxoOWMMMMk. .OMMMMMo 10 | ,kKNMMMMMN0do0WMMMMO. ;XMMMMMMMMMMMMMWk. ,0WMMMMMWWWMMMMMMMk. .OMMMMMo 11 | .kMMMMMx. ;XMMMM0' 'xOOOOOOXMMMMMKc. ,KMMMMMKl,';c0MMMMMk. .OMMMMMo 12 | .xMMMMMd.'c0WMMW0; .oXMMMXo. dMMMMMK, lWMMMMk. .OMMMMMo 13 | .xMMMMMXKNWX0xl,. 'OWMMWk' .kMMMMMk. lWMMMMk. .OMMMMMo 14 | .xMMMMMKo:,. .. :KMMMNo. .dMMMMMK; lWMMMMk. .OMMMMMo 15 | dMMMMM0;....,ckXo cNMMMWd ;XMMMMMXd:;cdKMMMMMk. .OMMMMMo 16 | .dXWMMMWXKXNWWXO; ,KMMMMN: . 'o0WMMMMMMWNNMMMMMk. .OMMMMMo 17 | .,clodddoc:,. :NMMMMM0c'..':xx ':lodol;.'lllll, ;lloll' 18 | .kWMMMMMWNXNWMMO .ckOx; 19 | .oXMMMMMMMMMWXc :XMMMk. 20 | .:oxOOOkxl;. .cxOd, 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /tests/jp2a-rotate-180.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMOc::::dNMMMMMNko::kWMM 6 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWl ,KMMMNx' .kMM 7 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWl ,KMMWd. cXM 8 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWl ,KMMK, .xNMM 9 | Ko:;,'',cdo:,''',;o0WM0c;;;;;;;;;;;;;;;oXMMMMNko:,''',;c' ,KMM0' cNMMM 10 | k,. .:c. '0Mx. ,0MMMWk. ,KMM0' cWMMM 11 | NN0, ;KMMx. .OMO;''''''. .oXMMMMk. .lkOxo. ,KMM0' cWMMM 12 | MMX; :KOo. .xWMMWWWWWKc. .c0MMMMMN: .kMMMMWl ,KMM0' cWMMM 13 | MMX; .. ..;lkXMMMMMMMWO' ,OWMMMMMMK, ,KMMMMWl ,KMM0' cWMMM 14 | MMX; .cdkKNWMW00WMMMMNd. cXMMMMMMMMX: .xWMMMWl ,KMM0' cWMMM 15 | MMN: .xXXX0ko,.cNMMMWo :NMMMMMMMMMMx. .:dxo:. ,KMM0' cWMMM 16 | MMM0:. ... .'xWMMMk. dMMMMMMWXWMMWOc. ,KMM0' cWMMM 17 | MMMMWXkolc:::codkKWMMMMMd .oOK0Od;;NMMMMMNOdlc:clxKOlllllkNMMNxllcllOWMMM 18 | MMMMMMMMMMMMMMMMMMMMMMMMK, . 'NMMMMMMMMMMMMMMMMMMMMMMMMMMXo,';xWMMMM 19 | MMMMMMMMMMMMMMMMMMMMMMMMMKc. .oWMMMMMMMMMMMMMMMMMMMMMMMMMMd. ,KMMMM 20 | MMMMMMMMMMMMMMMMMMMMMMMMMMWKdc;''',;lxKWMMMMMMMMMMMMMMMMMMMMMMMMMMMXo;':kWMMMM 21 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | -------------------------------------------------------------------------------- /tests/jp2a-mirror-vertical.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMWk::okNMMMMMNd::::cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMk. 'xNMMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MXc .dWMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMNx. ,KMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 9 | MMMNc '0MMK, 'c;,''',:okNMMMMXo;;;;;;;;;;;;;;;c0MW0o;,''',:odc,'',;:oK 10 | MMMWc '0MMK, .kWMMM0, .xM0' .c:. .,k 11 | MMMWc '0MMK, .oxOkl. .kMMMMXo. .'''''';OMO. .xMMK; ,0NN 12 | MMMWc '0MMK, lWMMMMk. :NMMMMM0c. .cKWWWWWMMWx. .oOK: ;XMM 13 | MMMWc '0MMK, lWMMMMK, ,KMMMMMMWO, 'OWMMMMMMMXkl;.. .. ;XMM 14 | MMMWc '0MMK, lWMMMWx. :XMMMMMMMMXc .dNMMMMW00WMWNKkdc. ;XMM 15 | MMMWc '0MMK, .:oxd:. .xMMMMMMMMMMN: oWMMMNc.,ok0XXXx. :NMM 16 | MMMWc '0MMK, .cOWMMWXWMMMMMMd .kMMMWx'. ... .:0MMM 17 | MMMWOllcllxNMMNklllllOKxlc:cldONMMMMMN;;dO0KOo. dMMMMMWKkdoc:::clokXWMMMM 18 | MMMMWx;',oXMMMMMMMMMMMMMMMMMMMMMMMMMMN' . ,KMMMMMMMMMMMMMMMMMMMMMMMM 19 | MMMMK, .dMMMMMMMMMMMMMMMMMMMMMMMMMMWo. .cKMMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMMMWk:';oXMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxl;,''';cdKWMMMMMMMMMMMMMMMMMMMMMMMMMM 21 | MMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | -------------------------------------------------------------------------------- /tests/jp2a-mirror-horizontal.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMMMMWKdc;''',;lxKWMMMMMMMMMMMMMMMMMMMMMMMMMMMXo;':kWMMMM 6 | MMMMMMMMMMMMMMMMMMMMMMMMMKc. .oWMMMMMMMMMMMMMMMMMMMMMMMMMMd. ,KMMMM 7 | MMMMMMMMMMMMMMMMMMMMMMMMK, . 'NMMMMMMMMMMMMMMMMMMMMMMMMMMXo,';xWMMMM 8 | MMMMWXkolc:::codkKWMMMMMd .oOK0Od;;NMMMMMNOdlc:clxKOlllllkNMMNxllcllOWMMM 9 | MMM0:. ... .'xWMMMk. dMMMMMMWXWMMWOc. ,KMM0' cWMMM 10 | MMN: .xXXX0ko,.cNMMMWo :NMMMMMMMMMMx. .:dxo:. ,KMM0' cWMMM 11 | MMX; .cdkKNWMW00WMMMMNd. cXMMMMMMMMX: .xWMMMWl ,KMM0' cWMMM 12 | MMX; .. ..;lkXMMMMMMMWO' ,OWMMMMMMK, ,KMMMMWl ,KMM0' cWMMM 13 | MMX; :KOo. .xWMMWWWWWKc. .c0MMMMMN: .kMMMMWl ,KMM0' cWMMM 14 | NN0, ;KMMx. .OMO;''''''. .oXMMMMk. .lkOxo. ,KMM0' cWMMM 15 | k,. .:c. '0Mx. ,0MMMWk. ,KMM0' cWMMM 16 | Ko:;,'',cdo:,''',;o0WM0c;;;;;;;;;;;;;;;oXMMMMNko:,''',;c' ,KMM0' cNMMM 17 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWl ,KMMK, .xNMM 18 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWl ,KMMWd. cXM 19 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWl ,KMMMNx' .kMM 20 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMOc::::dNMMMMMNko::kWMM 21 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | -------------------------------------------------------------------------------- /tests/normal-clear.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMWk:';oXMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxl;,''';cdKWMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMK, .dMMMMMMMMMMMMMMMMMMMMMMMMMMWo. .cKMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMWx;',oXMMMMMMMMMMMMMMMMMMMMMMMMMMN' . ,KMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMMWOllcllxNMMNklllllOKxlc:cldONMMMMMN;;dO0KOo. dMMMMMWKkdoc:::clokXWMMMM 9 | MMMWc '0MMK, .cOWMMWXWMMMMMMd .kMMMWx'. ... .:0MMM 10 | MMMWc '0MMK, .:oxd:. .xMMMMMMMMMMN: oWMMMNc.,ok0XXXx. :NMM 11 | MMMWc '0MMK, lWMMMWx. :XMMMMMMMMXc .dNMMMMW00WMWNKkdc. ;XMM 12 | MMMWc '0MMK, lWMMMMK, ,KMMMMMMWO, 'OWMMMMMMMXkl;.. .. ;XMM 13 | MMMWc '0MMK, lWMMMMk. :NMMMMM0c. .cKWWWWWMMWx. .oOK: ;XMM 14 | MMMWc '0MMK, .oxOkl. .kMMMMXo. .'''''';OMO. .xMMK; ,0NN 15 | MMMWc '0MMK, .kWMMM0, .xM0' .c:. .,k 16 | MMMNc '0MMK, 'c;,''',:okNMMMMXo;;;;;;;;;;;;;;;c0MW0o;,''',:odc,'',;:oK 17 | MMNx. ,KMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 18 | MXc .dWMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 19 | MMk. 'xNMMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMWk::okNMMMMMNd::::cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 21 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | -------------------------------------------------------------------------------- /tests/jp2a-mirror-horizontal-flipx.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMWk:';oXMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxl;,''';cdKWMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMK, .dMMMMMMMMMMMMMMMMMMMMMMMMMMWo. .cKMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMWx;',oXMMMMMMMMMMMMMMMMMMMMMMMMMMN' . ,KMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMMWOllcllxNMMNklllllOKxlc:cldONMMMMMN;;dO0KOo. dMMMMMWKkdoc:::clokXWMMMM 9 | MMMWc '0MMK, .cOWMMWXWMMMMMMd .kMMMWx'. ... .:0MMM 10 | MMMWc '0MMK, .:oxd:. .xMMMMMMMMMMN: oWMMMNc.,ok0XXXx. :NMM 11 | MMMWc '0MMK, lWMMMWx. :XMMMMMMMMXc .dNMMMMW00WMWNKkdc. ;XMM 12 | MMMWc '0MMK, lWMMMMK, ,KMMMMMMWO, 'OWMMMMMMMXkl;.. .. ;XMM 13 | MMMWc '0MMK, lWMMMMk. :NMMMMM0c. .cKWWWWWMMWx. .oOK: ;XMM 14 | MMMWc '0MMK, .oxOkl. .kMMMMXo. .'''''';OMO. .xMMK; ,0NN 15 | MMMWc '0MMK, .kWMMM0, .xM0' .c:. .,k 16 | MMMNc '0MMK, 'c;,''',:okNMMMMXo;;;;;;;;;;;;;;;c0MW0o;,''',:odc,'',;:oK 17 | MMNx. ,KMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 18 | MXc .dWMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 19 | MMk. 'xNMMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMWk::okNMMMMMNd::::cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 21 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | -------------------------------------------------------------------------------- /tests/normal-b.txt: -------------------------------------------------------------------------------- 1 | +------------------------------------------------------------------------------+ 2 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 3 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 4 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 5 | |MMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 6 | |MMMMWk:';oXMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxl;,''';cdKWMMMMMMMMMMMMMMMMMMMMMMMMMM| 7 | |MMMMK, .dMMMMMMMMMMMMMMMMMMMMMMMMMMWo. .cKMMMMMMMMMMMMMMMMMMMMMMMMM| 8 | |MMMMWx;',oXMMMMMMMMMMMMMMMMMMMMMMMMMMN' . ,KMMMMMMMMMMMMMMMMMMMMMMMM| 9 | |MMMWOllcllxNMMNklllllOKxlc:cldONMMMMMN;;dO0KOo. dMMMMMWKkdoc:::clokXWMMMM| 10 | |MMMWc '0MMK, .cOWMMWXWMMMMMMd .kMMMWx'. ... .:0MMM| 11 | |MMMWc '0MMK, .:oxd:. .xMMMMMMMMMMN: oWMMMNc.,ok0XXXx. :NMM| 12 | |MMMWc '0MMK, lWMMMWx. :XMMMMMMMMXc .dNMMMMW00WMWNKkdc. ;XMM| 13 | |MMMWc '0MMK, lWMMMMK, ,KMMMMMMWO, 'OWMMMMMMMXkl;.. .. ;XMM| 14 | |MMMWc '0MMK, lWMMMMk. :NMMMMM0c. .cKWWWWWMMWx. .oOK: ;XMM| 15 | |MMMWc '0MMK, .oxOkl. .kMMMMXo. .'''''';OMO. .xMMK; ,0NN| 16 | |MMMWc '0MMK, .kWMMM0, .xM0' .c:. .,k| 17 | |MMMNc '0MMK, 'c;,''',:okNMMMMXo;;;;;;;;;;;;;;;c0MW0o;,''',:odc,'',;:oK| 18 | |MMNx. ,KMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 19 | |MXc .dWMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 20 | |MMk. 'xNMMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 21 | |MMWk::okNMMMMMNd::::cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 22 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 23 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 24 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 25 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 26 | +------------------------------------------------------------------------------+ 27 | -------------------------------------------------------------------------------- /tests/dalsnuten-invert.txt: -------------------------------------------------------------------------------- 1 | ......................................................''''',,,,;;;;:::::cccccl 2 | ............. ..........................''''',,,,;;;;::::cccc 3 | .... ......................''''',,,,;;;;::::ccc 4 | ...................''''',,,,;;;:::::c 5 | ..................'''',,,,;;;;:::: 6 | .................''''',,,,;;;;:: 7 | ..................'''',,,,;;;;; 8 | .................''''',,,,,;; 9 | ................''''',,,,;;; 10 | ................'''',,,;;;; 11 | ..... ...............'''',,,,;;;; 12 | .',;;:clodxxxkkkko:,................'''',,,,;;;;:: 13 | :;'..... ...'... .':ldddxxxkkkOOOOOOO0000000xxdlc;'....'''',,,,;::;;:::c 14 | xxdooolllllloooolloxxkOO00000OO000KKKXXXXXXXXXXXXXXXXNNNXK0KXNNNNN00XNWWNKKXNX 15 | OOkkxxxxxxxxxkkOOOkkO0000KKXXXXXXXXXXXXXXNNNNNNNNNNNWWNNNWWWWWWWWWWWWWMMMMMMMM 16 | K000OOOOOOOO0000KKKKK0KKXXXXXXNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMM 17 | KKKK00000000KKKKXXXXXXXXXXNNNNNNWWNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMM 18 | XXK00K0OOOOOOO0000KKKK000000KNWWWWWKXNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 19 | XK0OOko:;;;;;;colcddddddddddxNWWWWNNKKXXNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWMMW 20 | NXKOxl;. .,;;lOOkOXXK00KXXNXNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWMMM 21 | KOkxxc. .;cx00KXXNNNNNNWNWWWNNNWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWMMMMMMMMMMMMMM 22 | XXKOkdc::ldxkO0KXXNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMM 23 | XXXK0OOOO000KKKKXXXNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMM 24 | NNNXXXKKXXXXXXNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | WWNNNNNNNNNNNNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 26 | WWWWWWWNNWWWWWNWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 27 | MWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 28 | WWWWWWWWWWWWMMMWWMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | WWWWMWWWMMMMMMMMMMMMMMMMMMMWWMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | -------------------------------------------------------------------------------- /tests/dalsnuten-normal.txt: -------------------------------------------------------------------------------- 1 | KKKKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKK000000OOOOOkkkkxxxxdddddoooool 2 | XXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXKKKKKKK000000OOOOOkkkkxxxxddddoooo 3 | XXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXKKKKKKK00000OOOOOkkkkxxxxddddooo 4 | NNNNNNNNNNWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNXXXXXXXXKKKKKK00000OOOOOkkkkxxxdddddo 5 | NNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNXXXXXXXKKKKKK00000OOOOkkkkxxxxdddd 6 | WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNXXXXXXKKKKKK00000OOOOOkkkkxxxxdd 7 | WWWWMMMMMMMMMMMMMMMWWMMWWWWWWWWWWWWWWWNNNNNNNNNXXXXXXXKKKKK000000OOOOkkkkxxxxx 8 | WMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWNNNNNNNNNXXXXXXKKKKKK00000OOOOOkkkkkxx 9 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWNNNNNNNNXXXXXXKKKKK00000OOOOOkkkkxxx 10 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWNNNNNNNNXXXXXXKKKKK00000OOOOkkkxxxx 11 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWNXK00KNNNNNNNXXXXXXKKKKK0000OOOOkkkkxxxx 12 | MMMMMMMMMMMMMMMMMMMMMMMMMMMWKOkxxdolc:;;;,,,,cdk0XXXXXKKKKKK0000OOOOkkkkxxxxdd 13 | dxO00KKXNNNNNNXK0O0KXNNXOdl:::;;;,,,'''''''.......;;:loxO0000OOOOkkkkxddxxdddo 14 | ;;:cccllllllccccllc;;,''.....''...................... ..... ... ... . 15 | '',,;;;;;;;;;,,''',,'.................... 16 | ....''''''''.................. 17 | .......................... 18 | .......'''''''............... .. 19 | ...'',cdxxxxxxoclo::::::::::; .... 20 | ..';lxXM0kxxl'','........ . 21 | .',;;oKWMN0xo;..... 22 | ...',:oddl:;,'.... 23 | .....''''.......... 24 | ........... 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/grind.txt: -------------------------------------------------------------------------------- 1 | OOO00kxOdd:::... 2 | OKKXKOxOkkxdolc; 3 | kOKXXXK00Okxxxo;. . 4 | XXXXXNK000OOkxl,. 5 | NXXXXKxk00Okkxl:. 6 | XXKKKXOx0oxkkodl:'... ... 7 | 0KNXKXOlOkOolcoxoll:,.............................. 8 | 0KXXXXKK0KOxxxkdc,,..................................... ................ 9 | OO0KXN00O0xkxdlc,.....'',.''..,:c:;,;:cc:;,''''';,''',,.........;;,,'...''',,;;: 10 | KK0k0XOOOk:;;;;'',''''';;;::,;loolcclooooc;,,,::::;;;:,'........,;;,,...'''',,,, 11 | OkOxkNOdko:'',,;;;;;;:lllcc:;:loollccccc:;;;;;c:;;;,,,''......'..''..'''''',,,;; 12 | XK0O0X0ddxxc;;:c::::lddolc::c:::;:;:;;;;;;;;;,l,,',,,,,,''''',,;;;;;;;;;:;;;;;:: 13 | KKK00XK0kOkkOOddl:;;;:::::ccc:;;;;;;;,;,,;;;,:l;;;;,;;;,,,,;;::::;;::::::ccccccc 14 | 00OOxxxdxdxdoodoolloc'......;collc:;;,,,;,,;;l;',,,,;;::;;,;:;;;;;;;::cc::cccllc 15 | OXKXkoddolododxxooddd:.......',:oool:;;;c;,,;l;,;,,,,,;;;;;::::::::cccccclccllll 16 | OKXKOkddolxxccOdoxxo;. .x. .O'.,oddllc:c::c:o;,;;;::::;:ccc:cc::::ccllccloodooo 17 | XOOXK0KXxoOOxx0xoxxl,:Ok.x. .Ool,;oOkdodoc:oodccc:ccc::::ccccccllooololloooldddo 18 | N00XN0KX0O00kk00O00xdddxooolokkkooxkxxkOxlldxkxl:::;;c:;;:::::llllloddooollloood 19 | WK0XN00XxxOOdx0OKK0o:;X0,OO0O00Oc:o0lxOOxxkOOO0K0kxllkodoolcoooxOkddkoddoxkkkxO0 20 | NK0XNKKX00KK00K0KOOd000OOOOOOkkkdodkdxOKKK0O0OOXkkxxO0KOddxdxddOOk00OOxkk00KNKXN 21 | WK0XNXKXKXNNXKKOdx0:;:KO;xo:::xkOOOOddk00OOO0OONNNNXXNK0OkkkkOK0OO00XX0kOXNNNXNN 22 | WN0XNNNNNXXKOOKOddOc;:0O,xc...dk;:xKkox0OokkkkOWXKXXXKK00KKKXXXKkxO00KNKXXNXXNXX 23 | WXXNWWWWK0K0xd00oo0olo0OdkxoddkkxxxOOO00OoxxkOKKddk0KOKXXNNNNNXXKO0KKXNNWNNNNKXX 24 | MNNWWNNNKKKko;,,.,:...cc';,...ox;,,;:cd0kddx0KX0kkOXXXXXXXKXXNNX00O0OkkkOOO000kk 25 | WWNNNNNXKOdllc::::c::;;,;,,;c::cld::cldxkkkONWWWWWNNNNNNXXXXXXXXKXKXXkxddxxxxxkx 26 | NXKKXXXK0Odlccc:::;::::::::dxkxONKKxllllodddxkOOOOkOO0KKXXNNXX00KNXNNXOO0K0Oxddd 27 | NNNNXXKkoccc:::::;::;;:::::kkOKKNXXOcccccccclcllllllooodxO0KX0000KXXKKKXNXXKkddo 28 | NNXXK00Odl::;;;;;;;;;;;;;:ck00NWOc::;:;;;::::cccc:ccccookOkxxOOkxxkddooddddddodd 29 | XXXXXK0dlc;,,,,,,,,;;;::cclodd0Wd::;,,;,,,;;::::::cccclclodoooxkkkkOkxddoxdodddo 30 | XKKKX0xlc:;;,,;,,,;;;::;::clllodc:;;,,;;;,;;;::c:::::ccc::clllokOkOkxxxoooollddd 31 | -------------------------------------------------------------------------------- /tests/grind-blue.txt: -------------------------------------------------------------------------------- 1 | K0KKK00KOkllo';, 2 | 0XXNXKOK00OOkxdl. 3 | O0XNNNXKXK00OOkc' . 4 | WWWNWNNXNX0K00x:. .. 5 | WWWNNXKKXXKKK0ko,. 6 | NNNNNNKOKx0K0kOko;''. 7 | NNWNXNXxK0KxxdxOkdoc;'...................................... 8 | NWWNNNXNXNK0000Oo;'...................''........''..............,;;;,........... 9 | XXNNNWXX0Kk0Okol:.....',:,,;'';col;,:loolc,,',,;lc;,;cc,',,'''':doodo;,,,,,;;;;c 10 | XNNXXNKX0O:;:;;,',,,,,,cccll::dxddoodxxddo:;;,clllc:cl:;;,,,,,,;cllll;;;;;;;;;;: 11 | K0K0KW0Okdc,,,;;;;;;;ldxdllc::oddlllccllc:::::occ::::::::::::::::ccccclllllllloo 12 | NXKKXXKOO0Ooc:cc::::oxxdolccccllclcllooloooodoxdooooddoddooodddxxxkxxkkkkxxxxxxx 13 | XXXKXWXXXXXXXK00koooloodddxxxdddddddddxxxxkkxkOkxxxxkxxxxxxkOOOOOkkkkkkkkOOOOkkO 14 | KKK0kOkkO0KKKXKKKKKKk:.....':xOkkkxxdoddxxkkkOkxxxxkkkOOkkkOOOOkxkkOOOOOkOOOOOO0 15 | 0XKXOxkkxdxkOKKKXKKXKd...'...';lO00OkxdoxdxxxOxkkxxkkxkOOOO00000000KKKK0KKKKKKKK 16 | OKNX0OxkddOkodKOKOO0l'...k'..O'.:O00OOkxxdxkk0kkkkkOOkOO0K0K0KK00O000KKKKKXKK0KO 17 | NO0XXKXXkx00OOKkOOkx;c0k'x' .Ooo;ck0K0OOOkxkk00OOOOOOxxxkOO00KKKKXXXKX00KXXKKKOk 18 | N00NNKXXKKK0Ok0K00KxdddxooolokkkooxkOOOOOkOxkkkoccddodxddxxxxdK0kkk0XKXKKKKKXKK0 19 | WK0XNXNNXXXKXKK0XK0d:;NK;O0K0K00c:d0lk00O00O0O0K0kkookddoolcoodx0kddOdxkxkOOO0O0 20 | NKKXNXXXKXXKKKK0K0Ox0000OOOOOkkkdodkdk0KXNKO0O0Nkkxx0KKOxdxxkddOOx0OkOxxkOOKN0XN 21 | NX0XNNXNNWNNWNX0kx0::cK0:kocccxk0OOOxdk0KK0O0OONNNNNNNXK0kkOk0X0Ok00XXOkOXNNNKXN 22 | WN0XNNNNNXXKKKK0xdOc:cKO;xl'''xO:ckKkdxKOdkkOkONXKXNNNXKKKKKXNNKOO0OOKN0KXNXXXKX 23 | WXXNWWWWNWWXOxK0dd0dod00dkkddxkkxxkOOOO0OdxxkOKXddk0K0XNNWWNNNNNNNXK0KNNNNNXXKKX 24 | MNWMWWWWNNX0kc;;,;c,',ol,::'''dx:;::clx0OxdxKXX0kk0NNNNWWNNNNWWWNWXXKkxkkOO000OO 25 | MWWWWWWWN0dlcc::::c::;;;;;;:c::cld::cloxkkkONWWWWWWNWWWWWWWWWNNNNWNWW0kdxkkkkkkk 26 | WWNNWWNXK0xlc::::;;;:;:::::dkOxONK0xlcllloodxkkOOkkk00XXNNWWWWXKNWWWWNK0KNX0xddd 27 | WWWWWNX0dccc::::;;;:;;:::::kkO0KNXXOc:::::ccccccclccllodkKXXNXK0KXXXX0KXNNNXkdoo 28 | MWWWNXK0xl::;;;;;;;;;;;:::ckO0NWOc::;;;;;:::::::c:::ccloOKOxOKXOxkkdooloooooolod 29 | WWWWWWKxcc:;,,;;;,;;;;::cclodd0Nd::;,;;;,;;;::::::::cccccoddodkO0O00Oxddoxdollol 30 | WWWWWKxlcc;;;;;;;;;;:::;::clllodl::;;,;;;,;;;::c:::::ccc::ccloxKK0K0xxxllolllooo 31 | -------------------------------------------------------------------------------- /tests/grind-green.txt: -------------------------------------------------------------------------------- 1 | OkO0Okxkdo:;:... 2 | k0KK0Oxkkxdolcc; 3 | xkKKKXKO0Oxxddo,. . 4 | XXXXXXK000kkxdc'. 5 | NXKKKKxkO0kkxdl;. 6 | KK00KXkxOlxkxool;.... 7 | OKXK0XOlkxOolcldoll:,........... ................... 8 | 0KKXKX0000kdxxxoc,'....................................... ................ 9 | OOO0KN00k0dxdoc:,.......'..'..,;::,,,:c:;;'''''';,''',,........';;;;,'.'''',,,;: 10 | K00kOXOOkk:,,,,'''''''',;;;:,,looccclloolc,,,,::;:;;;:;''.......,;;;,...'''',,,, 11 | 0kOxkNOdxo:''',,,;,,,:lll:::;:cooccc::cc:;;;;;l::;;,,,''.''..'''.''...'.'''',,,, 12 | XK00KX0ddxd:;;;:::;:cdoll::::::;;:;;;;;,,,,,,'c,'''',''''''''',,,,,,,,,,;,,,,,;; 13 | KKK00XK0kkkkkOddl:;;;:::::c::;,;;;,;;',''',,';c,'''',,,'''',,,;,,,,;;;;;;;;::::: 14 | 00OOxxxxxddoclolcccc:'.....';clcc:;;,',',.'''c,..'.''';,,,',,,,',,,,;;:c:;;::cc: 15 | OXKXkoddolodloddllloo:.......',:lllc:;;;:,'',c,''''''',,,,,,,,;,;;;;;;:;:::::::: 16 | OKXKOkddolxxlcOdlddo;.. .x' .O'.,llolc:;:;;:,l'''',;;;;,,;:;;;;;,;;;;:c:::cclcll 17 | NOOXK0KKxoOOkx0klxdc,:0k.x. .Ool,;oOxoodoc;loo::;;::::::;:::::;:cllcclccccc:lool 18 | N00XNO0XOk00kk00k00xdddxooolokkkooxkxxkOxccdxkxl:::;;c;;;::;;:ccclllollccc::ccld 19 | WK0XNOOXxokOod0O0K0o:;NK,O00O00Oc:o0ldOOxdxOKO0K0kkllkodoolcoooxOkdxkoddoxkxxdO0 20 | NK0XNKKX00KK00K0KOOx000OOOOOOkkkdodkdxOKKK0O0OOXkkxxO0KOxdxdxddOOk00OOkkk00KNKXN 21 | WK0XNXKNKKNNK0KOdx0:;:K0:ko:::xkOOOOddk00OOO0OONNNNXXXK0OkkkkOK0OO00XX0kOXNNNXNN 22 | WN0XNNXNNXXKOk0OddOc::0O,xl'..dO::xKkox0OokxkkOWXKXXX0K00KKKXXXKkdO00KNKXXNXXNXX 23 | WXXNWNNWKOK0dd00od0olo0OdkxdddkkxxkOOO00OdxxkOKKddk00O0KXNNXNNKK0kO0KXNNWNNNNKXX 24 | WNNWNXXXK00kl;,,',:'.'lc':;...ox;,;;clx0kddx00K0kkOKXKXXKKKKKXXXOOkOkxkkOOO000kO 25 | NNNNXXXK0Odolc::::c:::;;;;;:c:ccld::cldxkkkOXNNWWNNXXXXXKKKKKKXK00OKKxxddxxxkkkk 26 | XKKKKKK0OOdlccc:::;::::::ccdkOxONKKxllllodddxkkOOkkkOOKKKKXXK000KNXXNKOk000kxddx 27 | XXXXKK0kollc::::::::::::c::kk0KXNXXOcccccccclcllllllooodxOO0K0OO0KKKK0KKXXXKkddo 28 | XXKK00Okdlc:;;;;;;;;;;;:::ck00NWOcc:::::::cc:cccc:ccccooxkkdxkkxxxxddooddddddodd 29 | KKKKK0Odlc:;,,;;;,;;;;::cclodd0Wd::;,;;;,;;;::::::cccclclloooodxxxkkkxddoxdooddo 30 | K00KK0xlcc;;;;;;;,;;:::;ccclloodl::;,,;;;,;;;::c:::::ccc::clllokkkOkdxxoooollddd 31 | -------------------------------------------------------------------------------- /tests/grind-red.txt: -------------------------------------------------------------------------------- 1 | OO000kxOdo;;:... 2 | kKXXX0kOOkxdolc; 3 | xkKXXXK0K0kkxxo,. 4 | NNNNXNK0KKOOkxc' 5 | NNXXXKxk00Okkxl;. 6 | NNXKKXkdOlxkkooc;'.............. 7 | 0XNXKXOcOkOoc:lxoolc;'........................... 8 | 0XXNNNKK0KOxxkkxl;;'''................''..'.......... ...... 9 | kO0KXN0KO0kkxxoc;'''.''',.''.',:cc;,;:cc:;,''''',,....... ...........'',,;: 10 | 000k0XO0Ok:;;;:,,;,,,'';;;::;;oddllloooooc;,,,::;:;,,;'... ......''.........'',, 11 | kkOdxNkdkdc,,,;:::::;coooccc:clddllccclc:;;;;,:;;,,'''......................'''' 12 | KKOO0KOddkdc;:cccc:clxdolc:::::;;:;;;;;,,,,,,,c,'''','........',,,,,,;;;;;,,,,;; 13 | K0KOkXK0kOOkkkddl:;;;:::;:c::;',,,,;;,,,,;;;,:c;,,,,,,,,,,,,;::::;;:::;::cccc::c 14 | 0OOkoddddoxdloooooooc' ...,clcc:;,,',',',;,c;'''',,;:;;,,;;;;,,;;;::cc:::ccllc 15 | OKKXdlodlclolxkxdddxx: . .';odoc;;,,:,,',c,,,'',,';;;;;:::c::ccclllcllllloll 16 | kKXKkxoolcxxc:Odoxdo,. x. .k..'odolc:;:;;:;l;,,,;::;:;:ccccccc::ccclollodododo 17 | XOOX00XXdokkdd0xoxdl';kd.x. .klc';oOkdool::lodlcc:cc:;;;::ccclllodddoollodoldxdo 18 | N00XN0KX0O00kk00kO0xdddxloolokxklldxxxxkd:cdxkxc;;;;,:;',:;;;;olllldxddooollooox 19 | WK0KNO0XxxOOxx0O0K0l;,XO'kOOO0OO:;o0lxOOxdxkdk0K0kxclkodllc:ooodOkddklddoxkkkxO0 20 | NK0KNKKX00KK00K0KOOdOOOOOOkkOkkkdodkdxOK0KOOOOOXkkxdO0KOdoxdxddOOk00OOxkO00KNKXN 21 | WK0XNX0XKXNNXKKkddO;,;0k,xl;;;dkOOOOddk0000O0O0NNNNXXNK0kxkkkOK0OO00XX0kOXNNWXNN 22 | WN0XWNNNNNXK0OKOooO:,;Ox.d:...dk,,xKkld0koxxkkOWXKXXXKK00K0KXXXKOxO00KWKXXNXXNXX 23 | MXXWWWWWKKX0xoOOlo0lclOOoxxoodxkxdxkOOO0koxxkOKXdxk0K0KXNNNNNNXNXK0KKXNNWXNNNXXX 24 | MNWMWWWNXXKOo,....;...:;.,'...ld'.'';:d0kddkKXN0kk0XNNNNWNXXXNNNKX0K0OOOOOOO0Oxk 25 | WWWWWWWNX0dlcc:;;;::;;,,,,,;;;::co;;:ldkkkk0NWWWWWWNWWWWNNNNNXNXXNXNNkxoddddxxxx 26 | WNXXNNNX0Odcc::::;;::::::::odxdkN00xlllloddxkOO00OOO0KXXNNWWWNKKXWNWWN0OKK0kdddd 27 | WWWWNNKOocc:::::;;;;;;;:::;kkO0KXXXkc::c:ccclcllllllooddk0XXNXK0KXXXXKXXNNNKkddo 28 | WWNNXKKOdc:;;,,;,,,,;,,;;::kO0NWOc:;;;;;;:::::::c::cclodO0OxkO0kxkkxdddddxxxxodo 29 | NNNNNX0dc:;,'',,,',,,;:::cloodOWo;;,',;,',,;;;::::::cclclodooodkOkOOOxxdoxddddxd 30 | NXXXNKdlc:,,,,,,,,,;;;:;::clllodc;;,'',,,',;;::::::::ccc::ccclokOkOOxxxoodoooddd 31 | -------------------------------------------------------------------------------- /src/terminal.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2006-2016 Christian Stigen Larsen 3 | * Copyright 2020 Christoph Raitzig 4 | * Distributed under the GNU General Public License (GPL) v2. 5 | */ 6 | 7 | #include "terminal.h" 8 | 9 | #include "config.h" 10 | 11 | #include 12 | 13 | #ifdef HAVE_STRING_H 14 | #include 15 | #endif 16 | 17 | #ifdef HAVE_STDLIB_H 18 | #include 19 | #endif 20 | 21 | #ifdef HAVE_CURSES_H 22 | #include 23 | #endif 24 | 25 | #ifdef FEAT_TERMLIB 26 | #ifdef HAVE_TERM_H 27 | #include 28 | #else 29 | #ifdef HAVE_NCURSES_TERM_H 30 | #include 31 | #endif 32 | #endif 33 | 34 | #ifdef WIN32 35 | #define WIN32_LEAN_AND_MEAN 36 | #include 37 | #endif 38 | #endif 39 | 40 | #include 41 | 42 | int get_termsize(int* _width, int* _height, char** err) { 43 | static char errstr[1024]; 44 | 45 | #ifndef WIN32 46 | char *termtype = getenv("TERM"); 47 | char term_buffer[2048]; 48 | int i; 49 | #endif 50 | 51 | errstr[0] = 0; 52 | 53 | if ( err != NULL ) 54 | *err = errstr; 55 | 56 | #ifdef FEAT_TERMLIB 57 | 58 | #ifdef WIN32 59 | CONSOLE_SCREEN_BUFFER_INFO io; 60 | if ( !GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &io) ) { 61 | strcpy(errstr, "Could not determine console window size."); 62 | return -1; 63 | } 64 | *_width = io.srWindow.Right - io.srWindow.Left; 65 | *_height = io.srWindow.Bottom - io.srWindow.Top; 66 | return 1; 67 | #else 68 | 69 | if ( !termtype ) { 70 | strcpy(errstr, "Environment variable TERM not set."); 71 | return -2; 72 | } 73 | 74 | i = tgetent(term_buffer, termtype); 75 | 76 | // There seems to be some confusion regarding the tgetent return 77 | // values. The following two values should be swapped, according 78 | // to the man-pages, but on Mac OS X at least, they are like this. 79 | // I've also seen some indication of a bug in curses on USENET, so 80 | // I leave this one like this. 81 | 82 | if ( i == 0 ) { 83 | snprintf(errstr, sizeof(errstr)/sizeof(char) - 1, 84 | "Terminal type '%s' not recognized.", termtype); 85 | return 0; 86 | } 87 | 88 | if ( i < 0 ) { 89 | strcpy(errstr, "Could not access the termcap database."); 90 | return -1; 91 | } 92 | 93 | *_width = tgetnum("co"); 94 | *_height = tgetnum("li"); 95 | 96 | return 1; 97 | 98 | #endif // non-WIN32 99 | 100 | #else 101 | strcpy(errstr, "Compiled without termlib support."); 102 | return 0; 103 | 104 | #endif // FEAT_TERMLIB 105 | } 106 | 107 | int supports_true_color() { 108 | char *colorterm = getenv("COLORTERM"); 109 | if ( colorterm==NULL ) { 110 | return 0; 111 | } 112 | // some terminals have COLORTERM set, although true color is not supported 113 | if ( strcmp(colorterm, "rxvt")==0 ) { 114 | return 0; 115 | } 116 | return 1; 117 | } 118 | -------------------------------------------------------------------------------- /tests/logo-30.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMX00OOXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNXKOOOOO00KNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMWXXd''..l0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWN0xxl;,.....'';cxKKNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMNKKc ;kXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMKd;.. .,,xWWMMMMMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMMWXXx::;;dKNMMWWNXXXXXNWMMNXKKKKXNWWMMMMMMMk:. .',;;'. ;OXMMMMMMMMWNXXKKKKKXXNWMMMMMMM 9 | MMMKxxl,,,,co0MNXXx;;;;;:lddl;,,,,;cooOXWMMMM0olllx0KXX0k; ,dKMMMMXOOxlc;;,,,,,;;clkXXNMMM 10 | MMMO::. .'xMN00: ... ..c0XMMMMXk0XXWMMMMMWo ,dKMMMWOll' :kkXMMM 11 | MMMOcc. .'xMN00: ':kWWWMNXNWWWMMMMMMo.. ,kKMMWNd... ..... .::kWMM 12 | MMMOcc. .,xMN00: .,,;c;''. ;OOXMMMMMMMMMMMWNl lXWMMNXl..':ldxkkoc. lNWM 13 | MMMOcc. .,xMN00: :KKXWX00c. .ccOMMMMMMMMMMM0o' .ccOMMMMWN0xx0NNNKOOxl. cXNM 14 | MMMOcc. .,xMN00: lWWMMMMMx'. .,,kMMMMMMMMX00c. ..oXXWMMMMMMWNN0xl:,..... cXNM 15 | MMMOcc. .,xMN00: lWWWMMMMk,. .,,xMMMMMMMM0oo' .cOMMMMMMMMMN00l'. .'. cXNM 16 | MMMOcc. .,xMN00: lWWWMMMMd.. .;;kMMMMMMNKo''. ;x0NNNNWMMWWk::'. .::ld, cXWM 17 | MMMOcc. .,xMN00: ,xxk0kxx; ,ddKMMMWNNx;. ..'ccccccxXXK0: .lNNXK: :0XW 18 | MMMOcc. .,xMN00: ...'... .oXXWMWNkcc. ;OOO0; ,ooc;. .,o0 19 | MMMOcc. .,xMN00: .... .''lkXMMMMKd;...................:OOKNd''. ...,'... ..cO 20 | MMMk;;. .,xMN00: :kkxdoooddk00NMMMMMMXOkxxxxxxxxxxxxxxxxxxx0XXWMN00kdoooddkK0OOxooddxkKN 21 | MMMx''. .,xMN00: oMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMWWMMMMMM 22 | MXOc.. .:kMN00: lWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MOl. ;kXMN00: lWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MXO: ..,ccOWWMNKKc ..oWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 25 | MMW0ddxx0NNWMMMWNN0ddddxxKWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 26 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 27 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 28 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 31 | -------------------------------------------------------------------------------- /src/curl.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2006-2016 Christian Stigen Larsen 3 | * Copyright 2020 Christoph Raitzig 4 | * Distributed under the GNU General Public License (GPL) v2. 5 | */ 6 | 7 | #include "curl.h" 8 | 9 | #include "config.h" 10 | 11 | #ifdef FEAT_CURL 12 | 13 | #ifdef WIN32 14 | #include 15 | #include 16 | #endif 17 | 18 | #include 19 | 20 | #ifdef HAVE_CURL_CURL_H 21 | #include "curl/curl.h" 22 | #endif 23 | 24 | #ifdef HAVE_STDLIB_H 25 | #include 26 | #endif 27 | 28 | #ifdef HAVE_STRING_H 29 | #include 30 | #endif 31 | 32 | #ifdef HAVE_UNISTD_H 33 | #include 34 | #endif 35 | 36 | #ifdef WIN32 37 | #include 38 | #include 39 | #define close _close 40 | #define pipe(x) _pipe(x, 256, O_BINARY) 41 | #endif 42 | 43 | // local variables to curl.c 44 | int fd[2], debugopt; 45 | const char* URL; 46 | 47 | int is_url(const char* s) { 48 | return !strncmp(s, "ftp://", 6) 49 | | !strncmp(s, "ftps://", 7) 50 | | !strncmp(s, "file://", 7) 51 | | !strncmp(s, "http://", 7) 52 | | !strncmp(s, "tftp://", 7) 53 | | !strncmp(s, "https://", 8); 54 | } 55 | 56 | #ifdef WIN32 57 | size_t passthru_write(void *buffer, size_t size, size_t nmemb, void *userp) { 58 | FILE *f = (FILE*) userp; 59 | return f!=NULL? fwrite(buffer, size, nmemb, f) : 0; 60 | } 61 | #endif 62 | 63 | #ifndef WIN32 64 | void curl_download_child() 65 | #else 66 | void curl_download_child(void*) 67 | #endif 68 | { 69 | FILE *fw; 70 | CURL *curl; 71 | #ifndef WIN32 72 | close(fd[0]); // close read-end 73 | #endif 74 | 75 | if ( (fw = fdopen(fd[1], "wb")) == NULL ) { 76 | fputs("Could not open pipe for writing.\n", stderr); 77 | exit(1); 78 | } 79 | 80 | curl_global_init(CURL_GLOBAL_ALL); 81 | 82 | curl = curl_easy_init(); 83 | curl_easy_setopt(curl, CURLOPT_URL, URL); 84 | 85 | if ( debugopt ) 86 | curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); 87 | 88 | curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1); // fail silently 89 | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); // redirects 90 | curl_easy_setopt(curl, CURLOPT_WRITEDATA, fw); 91 | #ifdef WIN32 92 | curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, passthru_write); 93 | #endif 94 | 95 | curl_easy_perform(curl); 96 | curl_easy_cleanup(curl); 97 | 98 | fclose(fw); 99 | close(fd[1]); // close write-end 100 | 101 | curl_global_cleanup(); 102 | 103 | #ifdef WIN32 104 | _endthread(); 105 | #endif 106 | } 107 | 108 | int curl_download(const char* url, const int debug) { 109 | #ifndef WIN32 110 | int pid; 111 | #endif 112 | 113 | URL = url; 114 | debugopt = debug; 115 | 116 | if ( pipe(fd) != 0 ) { 117 | fputs("Could not create pipe\n", stderr); 118 | exit(1); 119 | } 120 | 121 | #ifndef WIN32 122 | 123 | if ( (pid = fork()) == 0 ) { 124 | // CHILD process 125 | curl_download_child(); 126 | exit(0); 127 | } else if ( pid < 0 ) { 128 | fputs("Could not fork.\n", stderr); 129 | exit(1); 130 | } 131 | 132 | #else 133 | if ( _beginthread(curl_download_child, 0, NULL) <= 0 ) { 134 | fputs("Could not create thread", stderr); 135 | exit(1); 136 | } 137 | #endif 138 | 139 | // PARENT process 140 | 141 | #ifndef WIN32 142 | close(fd[1]); // close write end of pipe 143 | #endif 144 | 145 | return fd[0]; 146 | } 147 | 148 | #endif 149 | -------------------------------------------------------------------------------- /completion/zsh/_jp2a: -------------------------------------------------------------------------------- 1 | #compdef jp2a 2 | 3 | _arguments -C \ 4 | '--red=[Set RGB to grayscale conversion weight, default is 0.2989]::' \ 5 | '--green=[Set RGB to grayscale conversion weight, default is 0.5866]::' \ 6 | '--blue=[Set RGB to grayscale conversion weight, default is 0.1145]::' \ 7 | '-[Read images from standard input.]' \ 8 | '(-b --border)'{-b,--border}'[Print a border around the output image.]' \ 9 | '--chars=[Select character palette used to paint the image. Leftmost character corresponds to black pixel, right-most to white. Minimum two characters must be specified.]':: \ 10 | '--clear[Clears screen before drawing each output image.]' \ 11 | '--colors[Use true colors or, if true color is not supported, ANSI in output.]' \ 12 | '--color-depth=[Use a specific color-depth for terminal output. Valid values are: 4 (for ANSI), 8 (for 256 color palette) and 24 (for truecolor or 24-bit color).]:colordepth:(4 8 24)' \ 13 | '(-d --debug)'{-d,--debug}'[Print additional debug information.]' \ 14 | '--edge-threshold=[Image gradient above which to shade lines and edges with directional glyphs (such as -/|\).]' \ 15 | '--edges-only[Only draw edges - make sure you use it with the edge-threshold option so edges are drawn.]' \ 16 | "(--fill --html-fill)--fill[When used with --color and/or --htmlls or --xhtml, color each character's background.]" \ 17 | '(-x --flipx)'{-x,--flipx}'[Flip image in X direction.]' \ 18 | '(-y --flipy)'{-y,--flipy}'[Flip image in Y direction.]' \ 19 | '(-f --term-fit)'{-f,--term-fit}'[Use the largest image dimension that fits in your terminal display with correct aspect ratio.]' \ 20 | '--term-height[Use terminal display height.]' \ 21 | '--term-width[Use terminal display width.]' \ 22 | '(-z --term-zoom)'{-z,--term-zoom}'[Use terminal display dimension for output.]' \ 23 | '(-c --term-center)'{-c,--term-center}'[Center image in terminal.]' \ 24 | '--grayscale[Convert image to grayscale when using --htmlls or --xhtml or --colors.]' \ 25 | '--height=[Set output height, calculate width from aspect ratio.]':: \ 26 | '(- *)'{-h,--help}'[Print program help.]' \ 27 | '--htmlls[Produce HTML (Living Standard) output.]' \ 28 | '--html[Produce strict XHTML 1.0 output (will produce HTML output from version 2.0.0 onward).]' \ 29 | '--xhtml[Produce strict XHTML 1.0 output.]' \ 30 | '(--fill --html-fill)--html-fill[Same as --fill (will be phased out).]' \ 31 | '--html-fontsize=[Set fontsize to N pt, default is 4.]' \ 32 | '--html-no-bold[Do not use bold characters with HTML output.]' \ 33 | '--html-raw[Output raw HTML codes, i.e. without the section etc. (Will use
for version 2.0.0 and above.)]' \ 34 | '--html-title=[Set HTML output title]' \ 35 | '(-i --invert --background)'{-i,--invert}'[Invert output image. Use if your display has a dark background.]' \ 36 | '(-i --invert --background)--background=[dark or light. These are just mnemonics whether to use --invert or not. If your console has light characters on a dark background, use --background=dark.]:background:(dark light)' \ 37 | '--output=[Write output to file.]::' \ 38 | '--size=[Set output width and height.]::' \ 39 | '(-v --verbose)'{-v,--verbose}'[Verbose output.]' \ 40 | '(- *)'{-v,--version}'[Print program version.]' \ 41 | '--width=[Set output width, calculate height from ratio.]::' \ 42 | '*:images:->images' 43 | 44 | case "$state" in 45 | images) 46 | local -a image_files 47 | image_files=( *.{jpg,jpeg,png,webp} "http://" "https://" "file://" ) 48 | _multi_parts / image_files 49 | ;; 50 | esac 51 | -------------------------------------------------------------------------------- /tests/110x30-i-b.txt: -------------------------------------------------------------------------------- 1 | +--------------------------------------------------------------------------------------------------------------+ 2 | | | 3 | | | 4 | | | 5 | | | 6 | | | 7 | | ,ldOxdc. .;clxkOOOOOxol:. | 8 | | .kMMMMMN: .lx0WMMMMMMMMMMMMW0d; | 9 | | .dNWMWW0, lWMMMMMMMMMMMMMMMMMMX: | 10 | | ':colc,. ....... ....... oMMN0kxoood0NWMMMMMMMK, .......... | 11 | | cKKKKKKKd;. .oKKKKKKKxcoO0KNNNNK0Od:'. :o:, .'dWMMMMMMN: ..,ldxOKKXNNNNNXX0xdc. | 12 | | .oMMMMMMMO:. .kMMMMMMMMMMMMMMMMMMMMMWXx. ;XMMMMMMX; lXNMMMMMMMMMMMMMMMMMWk:. | 13 | | .oMMMMMMMO:. .kMMMMMMMMWN0OO0NWMMMMMMMWx;. cNMMMMMMx. dMMWX0xolcclokNMMMMMMWXl | 14 | | .oMMMMMMMO:. .kMMMMMMWx;' ';xWMMMMMMWNl 'o0MMMMWWk. :ko,.. .,OMMMMMMMMd | 15 | | .oMMMMMMMO:. .kMMMMMMWl '0MMMMMMMMx. .kWMMMMM0l' ..,lxkKWMMMMMMMMx. | 16 | | .oMMMMMMMO:. .kMMMMMMWl .kMMMMMMMMk. 'lkWMMMWNO' .,:lx0KXWNXKXMMMMMMMMx. | 17 | | .oMMMMMMMO:. .kMMMMMMWl ,KMMMMMMMWd .oXMMMMMXo,. ;d0WMMMWW0c'..dMMMMMMMMx. | 18 | | .oMMMMMMMO:. .kMMMMMMMx;. 'cOMMMMMMMNK: .cOWMMMMMMKxodddddddl. 'OMMMMMMXO; dMMMMMMMMd | 19 | | .oMMMMMMMO:. .kMMMMMMMWXKkxxkKNWMMMMMMWd,. .;0WWMMMMMMMMMMMMMMMMMX; ,KMMMMMMNKo.',c0MMMMMMMMKl::.| 20 | | .oMMMMMMMO:. .kMMMMMMMWWWMMMMMMMMMMWOd:. ,kXNMMMMMMMMMMMMMMMMMMMMX; .oKNMMMMMMWNNWNXXWMMMMMMMMXO;| 21 | | .oMMMMMMMO:. .kMMMMMMWkco0XNNNNNX0kc. 'x0OOOOOOOOOOOOOOOOOOOOOOk' ..cOXXNNNNXko:,,dXNNNNXKx:,.| 22 | | .,xMMMMMMMk:. .kMMMMMMWl ..'''''... ......................... ..'''''.. ..'''''. | 23 | | ;kXNMMMMMMWd. .kMMMMMMWl | 24 | | oNMMMMMMWNk. .kMMMMMMWl | 25 | | .kMMMMMNd;. .kMMMMMMWl | 26 | | ,oddoc, :ddddddo' | 27 | | | 28 | | | 29 | | | 30 | | | 31 | | | 32 | +--------------------------------------------------------------------------------------------------------------+ 33 | -------------------------------------------------------------------------------- /tests/dalsnuten-color-ANSI.txt: -------------------------------------------------------------------------------- 1 | KKKKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKK000000OOOOOkkkkxxxxdddddoooool 2 | XXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXKKKKKKK000000OOOOOkkkkxxxxddddoooo 3 | XXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXKKKKKKK00000OOOOOkkkkxxxxddddooo 4 | NNNNNNNNNNWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNXXXXXXXXKKKKKK00000OOOOOkkkkxxxdddddo 5 | NNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNXXXXXXXKKKKKK00000OOOOkkkkxxxxdddd 6 | WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNXXXXXXKKKKKK00000OOOOOkkkkxxxxdd 7 | WWWWMMMMMMMMMMMMMMMWWMMWWWWWWWWWWWWWWWNNNNNNNNNXXXXXXXKKKKK000000OOOOkkkkxxxxx 8 | WMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWNNNNNNNNNXXXXXXKKKKKK00000OOOOOkkkkkxx 9 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWNNNNNNNNXXXXXXKKKKK00000OOOOOkkkkxxx 10 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWNNNNNNNNXXXXXXKKKKK00000OOOOkkkxxxx 11 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWNXK00KNNNNNNNXXXXXXKKKKK0000OOOOkkkkxxxx 12 | MMMMMMMMMMMMMMMMMMMMMMMMMMMWKOkxxdolc:;;;,,,,cdk0XXXXXKKKKKK0000OOOOkkkkxxxxdd 13 | dxO00KKXNNNNNNXK0O0KXNNXOdl:::;;;,,,'''''''.......;;:loxO0000OOOOkkkkxddxxdddo 14 | ;;:cccllllllccccllc;;,''.....''...................... ..... ... ... . 15 | '',,;;;;;;;;;,,''',,'....................  16 | ....''''''''..................  17 | ..........................  18 | .......'''''''............... ..  19 | ...'',cdxxxxxxoclo::::::::::; ....  20 |  ..';lxXM0kxxl'','........ .  21 | .',;;oKWMN0xo;.....  22 | ...',:oddl:;,'....  23 | .....''''..........  24 |  ...........  25 |   26 |   27 |   28 |   29 |   30 | -------------------------------------------------------------------------------- /tests/dalsnuten-80x49-inv.txt: -------------------------------------------------------------------------------- 1 | .......................................................''''',,,,;;;;;::::cccccll 2 | ............... ............................'''''',,,,,;;;;::::ccccc 3 | ............. ..........................'''''',,,,;;;;::::cccc 4 | ....... ........................''''',,,,,;;;;::::ccc 5 | ... ......................''''',,,,;;;;:::::cc 6 | ....................''''',,,,,;;;:::::c 7 | ...................'''',,,,;;;;::::: 8 | ...................'''',,,,;;;;:::: 9 | .................''''',,,,;;;;::: 10 | .................''''',,,,;;;;:: 11 | ...................'''',,,,;;;;: 12 | ..................''''',,,,;;;; 13 | .................''''',,,,,;;; 14 | ................'''''',,,,,;; 15 | .................''''',,,,;;; 16 | .................'''',,,;;;; 17 | ...............''''',,,;;;; 18 | ................'''',,,,;;;; 19 | ..';cldoo:. ................'''',,,,;;;;: 20 | .,ccloddxxxxkkkkkko;................''''',,,,;;;;:: 21 | .. .;odddxxxxkkkkOOOOOOOOOOxl:;..........'''',,,,;;;;;::: 22 | dolc:;,'.......';:c:,...;odxxxxxkkkkOOO00000000000000K0Odc,..'';;,;,,,;lllc:::cc 23 | xddoollcccclooolcloddxkOOOOOOOOOO0KKKKXXXXXXXXXXXXXXXXXXXXX0OXXNNNNXOOXNWNN00KNK 24 | kkxxdddoooooddxxxddkkkkO0KKKKKKKKKKKKXXXXXXXXXXNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWMW 25 | OOkkxxxxxxxxxkkOOOOkO00000KXXXXXXXXXXXXXXXXNNNNNNNNNNWWWNNNWWWWWWWWWWWWMMMMMMMMM 26 | 00OOOkkkkkkkOOO000K0O00KKKKKXXXXXXNNNNNNNNNNNNNNWWNNNWWWWWWWWWWWWWWWMMMMMMMMMMMM 27 | K0000OOOOOO0000KKKKKKKKKXXXXXXNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMM 28 | KKK00000000000KKKXXXXXXKXXXXNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMM 29 | XKKKKK0000KKKKKKXXXXXXXXXXXNNNNNWWWWNNWWWWWWWWWWWMMMWWWWWWWWWWWWWWWWWWWWWMMMMMMM 30 | XXKKKKK0000000KKKXXXXNNXXXXXXNWWWWWWXNNNNNNWWWWWMMMMWWWWWWWWWWWWWWWWWWWWWWWWWWWW 31 | NX0kO0koodoloooooooddoollllloOWWWWWX0kOKKNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMW 32 | XK00Oxo:,;;,,;;llcoddoxxxxdddkWWWWNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWMW 33 | XX0Okdc' .;;::xOOx0XX0Ok00KKKXNNNWWWWNNNNWWWWWWWMWWWWWWWWWWWMMWWWWWWWMWWWMMWWMMM 34 | NXK0xl;. .,,;:xOOOKXXXXXNNNNNWWWNNNNNNWWWWWWWWWWWWWWWWWWMMMMWWWWWWWWWWWMWMWMMMMM 35 | KOkxxc. ..,ckO0KXXNNNNNWWNWWWNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMM 36 | K0Okxl,. .;lxO0KKXNNNNNNNWNWWNNNWWWWWWWWWWWWWMMMMMMWWWWWWWWWWWWMMMMMMMMMMMMMMMMM 37 | XXK0kxl:cldxkOOKXXNNNNNNNNWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMM 38 | XXKK0OxxkOO00K0KKKXNNNNNWWWWWWWWWWWWWWWWMMMMWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMM 39 | NXXK000O0000KKXXXXXNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMWMMMMMMMMMMMMMM 40 | NXNXXKKKKKKXXXNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 41 | NNNNNXXXXXXXXNNNNNWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 42 | WWNNNNNNNNNNNNWWNWWNNWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 43 | WWWNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWWMMMMMMMMMMWWWWMMMMMMMMMMMMMMMMMMMMMMM 44 | WWWWWWWNNWWWWWNWWWWWWWWWWWWWWWWWMWMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 45 | MWWWWWWWWWWNNNWWWWWWWWWWWWWMMMMMMMMMMMMMMMMWMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW 46 | MWWWWWWWWWWWWWWWWWWMMMWMMMMMMMMMMMMMMWWMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 47 | WWWWWWWWWWWWWMMMWWMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWM 48 | WWWWMWWWMMMWMMMMMMMMMMMMMMMMMWMWMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 49 | WWWWMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 50 | -------------------------------------------------------------------------------- /tests/grind-color-ANSI.txt: -------------------------------------------------------------------------------- 1 | ''..;';ldd00MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW 2 | ,...''',;ccoKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNW 3 | .......'';:xNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNMM 4 |  ...',..,,:oKWMMMMWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMM 5 | .....c,:,:lcoxk0XXXXXXXNNNNNNNNNNNNNNNWWWWMMMMMMMMMMMMMMMMMM 6 | .....,..:::;ldkO0KKKKXXXXKKK0000KKKKKKXXNNNNWWWWWNNNNNNNNNNN 7 | .......',;:ox0000OO0O0OxdxkkddxkOOOOkO0OO0KXXXXKkkkO00OOOkkx 8 | ..,..,;ckkkkkkkkkxdddxdcclollclxkkxddxkxkO00KK00OkkO00OOOkkk 9 | ..'..:::xkxxdxxoc:cddddoodddddxxxxodkkkkOOOOOOOkkkkkkkkkkkxx 10 | ......,';,;:ldddooddodxxxxxxxxkxxkoxxxxxxkkkxxxdxxddddddoooo 11 | ..';;;::cc::clco0XXKKkollodxxkxkkxokkkkkxdxxxddxxxddooddolll 12 | ...,cccc;l:;c::l0NKxNKd0occodddxxookkkxxxxxdddddddoolollllll 13 | ......::':;,c;lOocOcW0;xko,;ccldlcodddoodddooooolcclclccc::: 14 |  .....''.,'.'.'cc,c;::,,c:;;;,:l:,,cooddoxddddlcllc:cclllcc; 15 |  .....''.,'...:l;.l.'..'lo'l,.'.'''.';c;',ccc:c,.,,,;,;'..'. 16 |  .. .... ...;,:o:'l,olc,',';;...'.' ......,,,,..,....,'.  .  17 |  ..  ...'..:,:d:'d,kOd,dl.,c.;;;,' ............,,.. ..  . . 18 |  . ...clcxlokl;o:ddl'clc:;.,;:'..c;....... ............. 19 |  ..,codxxxxkkkkkkxxoooxdl;,;'. ..........;::;;,,; 20 | ......';looodxddddddc;,,..,lllc::,,'',''... .... .'..';:: 21 |  ...,coodddxxxxxddd;'...';odddooooooollc:,....''..'''...;:: 22 | .....,ldxkkxkkkxxddo:;' :dxxxxxxddddddoool:;::;,,,;;::::cc:: 23 | ....'codxkkkkkxxddoollc;oxxkkxkkxxddddddoodollc,''';;cc:cc:: 24 | -------------------------------------------------------------------------------- /tests/2xnormal-b.txt: -------------------------------------------------------------------------------- 1 | +------------------------------------------------------------------------------+ 2 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 3 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 4 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 5 | |MMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 6 | |MMMMWk:';oXMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxl;,''';cdKWMMMMMMMMMMMMMMMMMMMMMMMMMM| 7 | |MMMMK, .dMMMMMMMMMMMMMMMMMMMMMMMMMMWo. .cKMMMMMMMMMMMMMMMMMMMMMMMMM| 8 | |MMMMWx;',oXMMMMMMMMMMMMMMMMMMMMMMMMMMN' . ,KMMMMMMMMMMMMMMMMMMMMMMMM| 9 | |MMMWOllcllxNMMNklllllOKxlc:cldONMMMMMN;;dO0KOo. dMMMMMWKkdoc:::clokXWMMMM| 10 | |MMMWc '0MMK, .cOWMMWXWMMMMMMd .kMMMWx'. ... .:0MMM| 11 | |MMMWc '0MMK, .:oxd:. .xMMMMMMMMMMN: oWMMMNc.,ok0XXXx. :NMM| 12 | |MMMWc '0MMK, lWMMMWx. :XMMMMMMMMXc .dNMMMMW00WMWNKkdc. ;XMM| 13 | |MMMWc '0MMK, lWMMMMK, ,KMMMMMMWO, 'OWMMMMMMMXkl;.. .. ;XMM| 14 | |MMMWc '0MMK, lWMMMMk. :NMMMMM0c. .cKWWWWWMMWx. .oOK: ;XMM| 15 | |MMMWc '0MMK, .oxOkl. .kMMMMXo. .'''''';OMO. .xMMK; ,0NN| 16 | |MMMWc '0MMK, .kWMMM0, .xM0' .c:. .,k| 17 | |MMMNc '0MMK, 'c;,''',:okNMMMMXo;;;;;;;;;;;;;;;c0MW0o;,''',:odc,'',;:oK| 18 | |MMNx. ,KMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 19 | |MXc .dWMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 20 | |MMk. 'xNMMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 21 | |MMWk::okNMMMMMNd::::cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 22 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 23 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 24 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 25 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 26 | +------------------------------------------------------------------------------+ 27 | +------------------------------------------------------------------------------+ 28 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 29 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 30 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 31 | |MMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 32 | |MMMMWk:';oXMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxl;,''';cdKWMMMMMMMMMMMMMMMMMMMMMMMMMM| 33 | |MMMMK, .dMMMMMMMMMMMMMMMMMMMMMMMMMMWo. .cKMMMMMMMMMMMMMMMMMMMMMMMMM| 34 | |MMMMWx;',oXMMMMMMMMMMMMMMMMMMMMMMMMMMN' . ,KMMMMMMMMMMMMMMMMMMMMMMMM| 35 | |MMMWOllcllxNMMNklllllOKxlc:cldONMMMMMN;;dO0KOo. dMMMMMWKkdoc:::clokXWMMMM| 36 | |MMMWc '0MMK, .cOWMMWXWMMMMMMd .kMMMWx'. ... .:0MMM| 37 | |MMMWc '0MMK, .:oxd:. .xMMMMMMMMMMN: oWMMMNc.,ok0XXXx. :NMM| 38 | |MMMWc '0MMK, lWMMMWx. :XMMMMMMMMXc .dNMMMMW00WMWNKkdc. ;XMM| 39 | |MMMWc '0MMK, lWMMMMK, ,KMMMMMMWO, 'OWMMMMMMMXkl;.. .. ;XMM| 40 | |MMMWc '0MMK, lWMMMMk. :NMMMMM0c. .cKWWWWWMMWx. .oOK: ;XMM| 41 | |MMMWc '0MMK, .oxOkl. .kMMMMXo. .'''''';OMO. .xMMK; ,0NN| 42 | |MMMWc '0MMK, .kWMMM0, .xM0' .c:. .,k| 43 | |MMMNc '0MMK, 'c;,''',:okNMMMMXo;;;;;;;;;;;;;;;c0MW0o;,''',:odc,'',;:oK| 44 | |MMNx. ,KMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 45 | |MXc .dWMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 46 | |MMk. 'xNMMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 47 | |MMWk::okNMMMMMNd::::cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 48 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 49 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 50 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 51 | |MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM| 52 | +------------------------------------------------------------------------------+ 53 | -------------------------------------------------------------------------------- /tests/grind-2grayscale-ANSI-fill.txt: -------------------------------------------------------------------------------- 1 | '''..,,,;lxoxXOXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW 2 | '....',',;;:cookWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWM 3 | ,'.......,;;;;lOXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNWW 4 | .......'..'',:o0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNWMM 5 |  .....;,..,,,:lxXMMMMMMWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | ......,;'c',:lclxkO0XXXXXXXXXNNNNNNNNNNNNNNNNNNNWWWWWWMMMMMMMMMMMMMMMMMMMMMMMM 7 | '. ...':.',lcc;;lldkO0KKKXXXXXXXXXXXKKKKKKKKKXXXXXXNNNWWWWWMMMMWWWWWWWWWWWMMMM 8 | ..........,',,,cxO0000000KKKKKK0O000OOkOO00O000O0KKKKKXXXNNNNXK0000KXKK0000OOO 9 | ''......''c:clxkO0000OOkOOkOOxllldxdollodkOOOkkdxkkxxk00KKKKK0xdxxkO0OOOkkxxxd 10 | ...,..;.::kkOOkkkkkkkkxdddoxxo::cllolccldxkkkoxxdxkxkO000KKKKK0OkOO0000O0Okkkk 11 | ..','.,;:;dkkkxxxxxxoc:cldoddollooodddddxddxklxxkkkkOOOOOOOOkkkkkkkkkkkkkkkkxx 12 | .......,;';ccllcoxxdoloodxdxxxxxxxxxkkkkkkkkdoxkxxxxkkkkkkkkkxxxxxxddddddddddd 13 | ...''...''',,,:cloooxxxxxdooldddxxkxkxxxxxxxldxxkxxxxxkkkxxxdxxxxxdddoddooooll 14 | ....:cccclccc::ccccclOXXXXXKkoolllodxxkdkkkkokkkOOkkxdxxxxdxdxxddddolloddollll 15 | ....,ccccl,:lc,::;::o0XNOxNNxk0xlccoodddxxxdlkkkkxxxkxxxddddddddddooloolllllll 16 | .'.....,oo':c:.::,cdKko0xlWWco0Odc;;:looddllcddddddddddoooooooolllllclcccl:::c 17 |  .' ........''.',':ll;':llOk:''lxl,;;;';ol:;;cdxkxoodxxdooodlclccc:;:cllclccc: 18 |  ... '..;;.':,.'..'lkc.cl,'',',:c:';;,':c:,,,';;;:xocoolododl:::cc;llccc::cc:, 19 |  ... ...''.','....lc;'.,;',''''cdo.cc'....'''..';c:,.';c::;;c;.',''''',''..'.. 20 |  ... ...... ...',';ll;.;:,ccc:,,,,,,,'...''.'. ........,;;;;'..,....';,.. .  21 |  .. ... ..''.;d,l0Kc.ox,KXXl,cl'.;ol.,;,,',. ......'....',.... ... .... 22 |  .. ....,,..;''::,';;,ccc;,:lc''''.,:;;,'..;,,...... ..,,... .... 23 |  ...,lxdxOdxKKd:dxlOOOl,lxddol:.,::,...,;;'.......... ....''''......'. 24 |  ...,cloddxxddxxxkkkkkxxdddcdddoc;,;,. ............';::;;;;,,; 25 |  ........':loooddxddddddddl;,::...;llll:::;,'...''...... .... .. ..,'..,;::; 26 |  ...;coodddddddddxdddodc''.. .cooooololllllllccc:;,.............. .,::c 27 |  .....,coddxxxxxxxxxxxxdol.'. .lodddddddoddoooodooolc:'';;,',;;,;;:c::;;;:cc: 28 | ......'codxkkkkkkkxxxdddolcc:, ,ddxkkxxkkxxddddddoooooolcccc:,,,,,,;::c;:c:::c 29 | ......:oodxkkkkxkxxxxdddooollc:ldxxkkkxxkxxxddoddddoooodololl;','';;;clccll::: 30 | -------------------------------------------------------------------------------- /tests/logo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jp2a converted image 6 | 17 | 18 | 19 |
20 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
21 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
25 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
26 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
27 | MMMMMMWNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
28 | MMMMMXdcl0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0dcc:clkXMMMMMMMMMMMMMMMMMMMMMMMMMMMM
29 | MMMMNo.  ;KMMMMMMMMMMMMMMMMMMMMMMMMMMMMNXOc'      .:kWMMMMMMMMMMMMMMMMMMMMMMMMMM
30 | MMMMK,    dMMMMMMMMMMMMMMMMMMMMMMMMMMMKl;.          .xWMMMMMMMMMMMMMMMMMMMMMMMMM
31 | MMMM0'    dMMMMMMMMMMMMMMMMMMMMMMMMMMWo              .OMMMMMMMMMMMMMMMMMMMMMMMMM
32 | MMMMNl   ,0MMMMMMMMMMMMMMMMMMMMMMMMMMN:               cNMMMMMMMMMMMMMMMMMMMMMMMM
33 | MMMMMKo:lOWMMMMMMMMMMMMMMMMMMMMMMMMMMNc     ...       .OMMMMMMMMMMMMMMMMMMMMMMMM
34 | MMMMX0OkO0KWMMWK00000XMN0xxxOXWMMMMMMN:   ;okkx;      .dMMMMMMMWNKkxxxxOXWMMMMMM
35 | MMMWd'''''cKMMXl'''''dkc'....;dXMMMMMNc.;oKMMMM0,      dMMMMMW0o:,......;o0WMMMM
36 | MMMWc     '0MMK,     ..       .:0MMMMNkkXNMMMMMWo      dMMMMKl'           ,OWMMM
37 | MMMWc     '0MMK,                ;KMMMWNWMMMMMMMMx.    .xMMMWl              ,0MMM
38 | MMMWc     '0MMK,                 lNMMMMMMMMMMMMMd     .OMMMN:    .','.      dMMM
39 | MMMWc     '0MMK,      .;c;.      .OMMMMMMMMMMMMWl     cNMMMNc  ,ok0K0l.     cWMM
40 | MMMWc     '0MMK,     'xXNXd.      oMMMMMMMMMMMMK;    .xMMMMNc.lKWMMMMK,     :NMM
41 | MMMWc     '0MMK,     lWMMMWo      cNMMMMMMMMMMWd.    :XMMMMWkxNMMMMWXx'     ;XMM
42 | MMMWc     '0MMK,     lWMMMMO.     ;XMMMMMMMMMMK,    .OMMMMMMWWMMWXkl;.      ;XMM
43 | MMMWc     '0MMK,     lWMMMMK,     ,KMMMMMMMMMNc    .oWMMMMMMMMW0o;.         ;XMM
44 | MMMWc     '0MMK,     lWMMMMX;     ,KMMMMMMMMNo.    :XMMMMMMMMKl'    .,.     ;XMM
45 | MMMWc     '0MMK,     lWMMMM0'     ;XMMMMMMMWx.    ,0MMMMMMMM0;     ,d0;     ;XMM
46 | MMMWc     '0MMK,     lMMMMWd      cWMMMMMMWk.    .xNNNNNNWMNc     ;KWN:     ;XMM
47 | MMMWc     '0MMK,     ;0WMWO'      dMMMMMMM0'     .;:::::l0MO'    .xMMN:     :NMM
48 | MMMWc     '0MMK,      'ldl'      '0MMMMMMK;             .xMx.    .xMMK,     ,OKN
49 | MMMWc     '0MMK,                 lWMMMMXOc              .xMk.     ;xd;       ,:k
50 | MMMWc     '0MMK,                ;KMMMMXl.               .xMK,      ..          d
51 | MMMWc     '0MMK,               ;0MMMMXl.                .xMWd.       ..       .x
52 | MMMNc     '0MMK,     ,c.    .,oKMMMMMO;.'''''''''''''''',OMMXo'.   .,dk:.   .;dX
53 | MMMN:     '0MMK,     lNOddddxKWMMMMMMX0O00000000000000000NMMMW0xdddxKWMKxdddkKWM
54 | MMMK,     ,KMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
55 | MWKl      ;XMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
56 | MXc.      lWMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
57 | MX;      .kMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
58 | MWd      cNMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
59 | MMK,    :KMMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
60 | MMWo..'oKMMMMMX:.....oWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
61 | MMMKxx0WMMMMMMW0xxxxxKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
62 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
63 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
64 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
65 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
66 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
67 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
68 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
69 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
70 | 
71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /tests/html-title-entities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | C&amp;"&'<script> 6 | 17 | 18 | 19 |
20 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
21 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
25 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
26 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
27 | MMMMMMWNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
28 | MMMMMXdcl0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0dcc:clkXMMMMMMMMMMMMMMMMMMMMMMMMMMMM
29 | MMMMNo.  ;KMMMMMMMMMMMMMMMMMMMMMMMMMMMMNXOc'      .:kWMMMMMMMMMMMMMMMMMMMMMMMMMM
30 | MMMMK,    dMMMMMMMMMMMMMMMMMMMMMMMMMMMKl;.          .xWMMMMMMMMMMMMMMMMMMMMMMMMM
31 | MMMM0'    dMMMMMMMMMMMMMMMMMMMMMMMMMMWo              .OMMMMMMMMMMMMMMMMMMMMMMMMM
32 | MMMMNl   ,0MMMMMMMMMMMMMMMMMMMMMMMMMMN:               cNMMMMMMMMMMMMMMMMMMMMMMMM
33 | MMMMMKo:lOWMMMMMMMMMMMMMMMMMMMMMMMMMMNc     ...       .OMMMMMMMMMMMMMMMMMMMMMMMM
34 | MMMMX0OkO0KWMMWK00000XMN0xxxOXWMMMMMMN:   ;okkx;      .dMMMMMMMWNKkxxxxOXWMMMMMM
35 | MMMWd'''''cKMMXl'''''dkc'....;dXMMMMMNc.;oKMMMM0,      dMMMMMW0o:,......;o0WMMMM
36 | MMMWc     '0MMK,     ..       .:0MMMMNkkXNMMMMMWo      dMMMMKl'           ,OWMMM
37 | MMMWc     '0MMK,                ;KMMMWNWMMMMMMMMx.    .xMMMWl              ,0MMM
38 | MMMWc     '0MMK,                 lNMMMMMMMMMMMMMd     .OMMMN:    .','.      dMMM
39 | MMMWc     '0MMK,      .;c;.      .OMMMMMMMMMMMMWl     cNMMMNc  ,ok0K0l.     cWMM
40 | MMMWc     '0MMK,     'xXNXd.      oMMMMMMMMMMMMK;    .xMMMMNc.lKWMMMMK,     :NMM
41 | MMMWc     '0MMK,     lWMMMWo      cNMMMMMMMMMMWd.    :XMMMMWkxNMMMMWXx'     ;XMM
42 | MMMWc     '0MMK,     lWMMMMO.     ;XMMMMMMMMMMK,    .OMMMMMMWWMMWXkl;.      ;XMM
43 | MMMWc     '0MMK,     lWMMMMK,     ,KMMMMMMMMMNc    .oWMMMMMMMMW0o;.         ;XMM
44 | MMMWc     '0MMK,     lWMMMMX;     ,KMMMMMMMMNo.    :XMMMMMMMMKl'    .,.     ;XMM
45 | MMMWc     '0MMK,     lWMMMM0'     ;XMMMMMMMWx.    ,0MMMMMMMM0;     ,d0;     ;XMM
46 | MMMWc     '0MMK,     lMMMMWd      cWMMMMMMWk.    .xNNNNNNWMNc     ;KWN:     ;XMM
47 | MMMWc     '0MMK,     ;0WMWO'      dMMMMMMM0'     .;:::::l0MO'    .xMMN:     :NMM
48 | MMMWc     '0MMK,      'ldl'      '0MMMMMMK;             .xMx.    .xMMK,     ,OKN
49 | MMMWc     '0MMK,                 lWMMMMXOc              .xMk.     ;xd;       ,:k
50 | MMMWc     '0MMK,                ;KMMMMXl.               .xMK,      ..          d
51 | MMMWc     '0MMK,               ;0MMMMXl.                .xMWd.       ..       .x
52 | MMMNc     '0MMK,     ,c.    .,oKMMMMMO;.'''''''''''''''',OMMXo'.   .,dk:.   .;dX
53 | MMMN:     '0MMK,     lNOddddxKWMMMMMMX0O00000000000000000NMMMW0xdddxKWMKxdddkKWM
54 | MMMK,     ,KMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
55 | MWKl      ;XMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
56 | MXc.      lWMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
57 | MX;      .kMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
58 | MWd      cNMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
59 | MMK,    :KMMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
60 | MMWo..'oKMMMMMX:.....oWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
61 | MMMKxx0WMMMMMMW0xxxxxKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
62 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
63 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
64 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
65 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
66 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
67 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
68 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
69 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
70 | 
71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /tests/jp2a-webp-scale-up.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMMMMMWNKOOKNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMWNXK0OOOkOKXNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMMMMMMWk,. ,xNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0d:'. .'cxXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 9 | MMMMMMMO: .kMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0o,. .oNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 10 | MMMMMMM0c 'OMMMMMWWMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMWXc '0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMWWXo:'':dXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWX: ... :OMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMM 12 | MMMMMMWKOOkxxkkkKNWMMMNKOOOOOOOOKMMNKkxooodkKNWMMMMMMMMMWX: .,lxOOOOx:. .oMMMMMMMMMMMWNX0kdooooodk0XWMMMMMMMMMM 13 | MMMMMWX; :OWMMMKo. 'xc.. ..;dXWMMMMMWWXl.o0NWMMMMMMW0. .oWMMMMMMWKkc'.. ..':kXWMMMMMM 14 | MMMMMWX, ;kWMMMKl c0WMMMMMWWNWMMMMMMMMMMN:. .oMMMMMMX; 'xXMMMMM 15 | MMMMMWX, ;kWMMMKl 'ONMMMMMMMMMMMMMMMMMMN;. ;OMMMMMW0. ..,;;,'. .OMMMMM 16 | MMMMMWX, ;kWMMMKl .,lkkxc' 'kMMMMMMMMMMMMMMMMMNO. .OWMWMMMNO. 'l0KXNNWWNOc. oXMMMM 17 | MMMMMWX, ;kWMMMKl 'KWMMMMWNk. cXWMMMMMMMMMMMMMMMk, ,kNMMMMMMWKclONMMMMMMMWNKd. oXMMMM 18 | MMMMMWX, ;kWMMMKl ,XWMMMMMMXo. ;OWMMMMMMMMMMMMMWk, :OMMMMMMWMMWWWWMMMWX0xl:,. oXMMMM 19 | MMMMMWX, ;kWMMMKl 'XMMMMMMMNO, ,kWMMMMMMMMMMMMKo. .cKWMMMMMMWWMMMMMKxc'.. oXMMMM 20 | MMMMMWX, ;kWMMMKl 'XMMMMMMMNx' ;0WMMMMMMMMMMNx' ,xWMMMMMMMMMMMWKo. .'lxO. oXMMMM 21 | MMMMMWX, ;kWMMMKl 'XMMMMMMW0,. cXMMMMMMMMMWk; .cKNNNWWWWWWWMWN0' .l0WWN0' oXMMMM 22 | MMMMMWX, ;kWMMMKl .cONWMWNd, .dWMMMMWMMWXl. .........';kMMO: .;KMMMNK' oXMMMM 23 | MMMMMWX, ;kWMMMKl ... .xXMMMWMMMNd. .oMMO, .xXNKd;. 'cdokM 24 | MMMMMWX, ;kWMMMKl ;kWMMMMMMNk,. .dMMKo. .. .lM 25 | MMMMMWN, ;kWMMM0c .;kXMMMMMMWO:. .oWMWXl. .,'. 'dM 26 | MMMMMWX, ;OWMMMKl '00d:;,''',:o0XWMMMMMMMMNxooooooooooooooooooooooooood0MMMMWXOl;,''',;lkXWNO:;,,,,,cxKNMM 27 | MMMMMXx. ;OWMMMKl 'XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMWMMMMMMMMMMMMMMMMMMMM 28 | MMMN0l. cKMMMMKl 'XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | MMXx. .xWMMMM0c 'XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | MMWN: 'kNMMMMM0c 'XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 31 | WMMM0c .l0MMMMMMM0c 'XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 32 | MMMMWO;'';oONWMMMMMMMMXx,'''''',lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 33 | MMMMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 34 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 36 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 37 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 38 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 39 | -------------------------------------------------------------------------------- /include/options.h: -------------------------------------------------------------------------------- 1 | /*! \file 2 | * \noop Copyright 2006-2016 Christian Stigen Larsen 3 | * \noop Copyright 2020 Christoph Raitzig 4 | * 5 | * \brief Functions for parsing command line arguments. 6 | * 7 | * \author Christian Stigen Larsen 8 | * \author Christoph Raitzig 9 | * \copyright Distributed under the GNU General Public License (GPL) v2. 10 | */ 11 | 12 | #ifndef INC_JP2A_OPTIONS_H 13 | #define INC_JP2A_OPTIONS_H 14 | 15 | //! size of the ASCII palette (in chars) 16 | #define ASCII_PALETTE_SIZE 256 17 | //! default ASCII palette 18 | #define ASCII_PALETTE_DEFAULT " ...',;:clodxkO0KXNWM"; 19 | //! default title for HTML/XHTML documents 20 | #define HTML_DEFAULT_TITLE "jp2a converted image" 21 | //! default edge_threshold - very high so no edges will be drawn 22 | #define EDGE_THRESHOLD_DEFAULT 1000. 23 | 24 | extern int verbose; //!< produce verbose output 25 | extern int auto_height; //!< automatically calculate the output width from the height 26 | extern int auto_width; //!< automatically calculate the output height from the width 27 | extern int width; //!< output width 28 | extern int height; //!< output height 29 | extern int use_border; //!< print a border around images 30 | extern int invert; //!< invert output (color/gray channels, not alpha) 31 | extern int flipx; //!< flip output along x axis 32 | extern int flipy; //!< flip output along y axis 33 | extern int centerx; //!< center output along the x axis 34 | extern int centery; //!< center output along the y axis 35 | extern int html; //!< produce HTML output 36 | extern int xhtml; //!< produce XHTML output 37 | extern int html_fontsize; //!< font size for HTML/XHTML output 38 | extern int colorfill; //!< also fill the background 39 | extern int convert_grayscale; //!< produce grayscale output 40 | extern const char *html_title_raw; //!< HTML title 41 | extern char *html_title; //!< HTML title with escaped HTML entities 42 | extern int html_rawoutput; //!< produce only the image part and not the rest of the website 43 | extern int html_bold; //!< use bold characters in HTML output 44 | extern int debug; //!< print debug information 45 | extern int clearscr; //!< clear the screen before printing an image 46 | extern float edge_threshold; //!< image gradient above which edges should be drawn with /-\| characters 47 | extern int edges_only; //!< only draw edges - make sure you use it with the edge-threshold option so edges are drawn 48 | extern int ascii_palette_length; //!< number of charactrs in the palette 49 | extern char ascii_palette[]; //!< the palette 50 | #if ! ASCII 51 | extern unsigned char ascii_palette_indizes[]; //!< indizes of the first byte of each char in the palette 52 | extern char ascii_palette_lengths[]; //!< byte lengths of the chars in the palette 53 | #endif 54 | extern float redweight; //!< weight for red 55 | extern float greenweight; //!< weight for green 56 | extern float blueweight; //!< weight for blue 57 | extern float RED[256]; //!< red channel lookup table 58 | extern float GREEN[256]; //!< green channel lookup table 59 | extern float BLUE[256]; //!< blue channel lookup table 60 | extern float ALPHA[256]; //!< alpha channel lookup table 61 | extern float GRAY[256]; //!< gray channel lookup table 62 | extern const char *fileout; //!< name of the output file (or - for stdout) 63 | extern int usecolors; //!< produce colored output 64 | extern int colorDepth; //!< output color bit depth (4 for ANSI, 8 for 256 colors, 24 for true color) 65 | extern int termfit; //!< the way the output dimensions are calculated 66 | extern int term_width; //!< width of the terminal 67 | extern int term_height; //!< height of the terminal 68 | #define TERM_FIT_ZOOM 1 //!< stretch image to fill the terminal 69 | #define TERM_FIT_WIDTH 2 //!< calculate the width (based on the height) 70 | #define TERM_FIT_HEIGHT 3 //!< calculate the height (based on the width) 71 | #define TERM_FIT_AUTO 4 //!< use the largest possible dimensions while retaining the input image aspect ratio 72 | 73 | /*! 74 | * \brief Prints version information. 75 | */ 76 | void print_version(); 77 | 78 | /*! 79 | * \brief Prints usage, version information etc. 80 | */ 81 | void help(); 82 | 83 | /*! 84 | * \brief Calculates red, green, blue, gray and alpha 8-bit to float lookup tables. 85 | * 86 | * \param red,green,blue weights for each color 87 | */ 88 | void precalc_rgb(const float red, const float green, const float blue); 89 | 90 | /*! 91 | * \brief Parses the command line arguments. 92 | * 93 | * Options are saved with the global variables. 94 | * Exits if help or the version is printed. 95 | * 96 | * \param argc argument count 97 | * \param argv the arguments 98 | */ 99 | void parse_options(int argc, char** argv); 100 | 101 | #endif 102 | -------------------------------------------------------------------------------- /tests/logo-x.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jp2a converted image 6 | 17 | 18 | 19 |
20 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
21 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
22 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
23 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
24 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
25 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
26 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
27 | MMMMMMWNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
28 | MMMMMXdcl0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0dcc:clkXMMMMMMMMMMMMMMMMMMMMMMMMMMMM
29 | MMMMNo.  ;KMMMMMMMMMMMMMMMMMMMMMMMMMMMMNXOc'      .:kWMMMMMMMMMMMMMMMMMMMMMMMMMM
30 | MMMMK,    dMMMMMMMMMMMMMMMMMMMMMMMMMMMKl;.          .xWMMMMMMMMMMMMMMMMMMMMMMMMM
31 | MMMM0'    dMMMMMMMMMMMMMMMMMMMMMMMMMMWo              .OMMMMMMMMMMMMMMMMMMMMMMMMM
32 | MMMMNl   ,0MMMMMMMMMMMMMMMMMMMMMMMMMMN:               cNMMMMMMMMMMMMMMMMMMMMMMMM
33 | MMMMMKo:lOWMMMMMMMMMMMMMMMMMMMMMMMMMMNc     ...       .OMMMMMMMMMMMMMMMMMMMMMMMM
34 | MMMMX0OkO0KWMMWK00000XMN0xxxOXWMMMMMMN:   ;okkx;      .dMMMMMMMWNKkxxxxOXWMMMMMM
35 | MMMWd'''''cKMMXl'''''dkc'....;dXMMMMMNc.;oKMMMM0,      dMMMMMW0o:,......;o0WMMMM
36 | MMMWc     '0MMK,     ..       .:0MMMMNkkXNMMMMMWo      dMMMMKl'           ,OWMMM
37 | MMMWc     '0MMK,                ;KMMMWNWMMMMMMMMx.    .xMMMWl              ,0MMM
38 | MMMWc     '0MMK,                 lNMMMMMMMMMMMMMd     .OMMMN:    .','.      dMMM
39 | MMMWc     '0MMK,      .;c;.      .OMMMMMMMMMMMMWl     cNMMMNc  ,ok0K0l.     cWMM
40 | MMMWc     '0MMK,     'xXNXd.      oMMMMMMMMMMMMK;    .xMMMMNc.lKWMMMMK,     :NMM
41 | MMMWc     '0MMK,     lWMMMWo      cNMMMMMMMMMMWd.    :XMMMMWkxNMMMMWXx'     ;XMM
42 | MMMWc     '0MMK,     lWMMMMO.     ;XMMMMMMMMMMK,    .OMMMMMMWWMMWXkl;.      ;XMM
43 | MMMWc     '0MMK,     lWMMMMK,     ,KMMMMMMMMMNc    .oWMMMMMMMMW0o;.         ;XMM
44 | MMMWc     '0MMK,     lWMMMMX;     ,KMMMMMMMMNo.    :XMMMMMMMMKl'    .,.     ;XMM
45 | MMMWc     '0MMK,     lWMMMM0'     ;XMMMMMMMWx.    ,0MMMMMMMM0;     ,d0;     ;XMM
46 | MMMWc     '0MMK,     lMMMMWd      cWMMMMMMWk.    .xNNNNNNWMNc     ;KWN:     ;XMM
47 | MMMWc     '0MMK,     ;0WMWO'      dMMMMMMM0'     .;:::::l0MO'    .xMMN:     :NMM
48 | MMMWc     '0MMK,      'ldl'      '0MMMMMMK;             .xMx.    .xMMK,     ,OKN
49 | MMMWc     '0MMK,                 lWMMMMXOc              .xMk.     ;xd;       ,:k
50 | MMMWc     '0MMK,                ;KMMMMXl.               .xMK,      ..          d
51 | MMMWc     '0MMK,               ;0MMMMXl.                .xMWd.       ..       .x
52 | MMMNc     '0MMK,     ,c.    .,oKMMMMMO;.'''''''''''''''',OMMXo'.   .,dk:.   .;dX
53 | MMMN:     '0MMK,     lNOddddxKWMMMMMMX0O00000000000000000NMMMW0xdddxKWMKxdddkKWM
54 | MMMK,     ,KMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
55 | MWKl      ;XMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
56 | MXc.      lWMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
57 | MX;      .kMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
58 | MWd      cNMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
59 | MMK,    :KMMMMK,     lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
60 | MMWo..'oKMMMMMX:.....oWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
61 | MMMKxx0WMMMMMMW0xxxxxKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
62 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
63 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
64 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
65 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
66 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
67 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
68 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
69 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
70 | 
71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /tests/jp2a-rotate-90.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMWWXOxdx0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMKo:, ..lOKNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMx. .,:cccccccccccccccccccccccccccdOXMMNK0KXNMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMx. 'l0MKl,',;oXMMMMMMMMMMMMM 6 | MMMMMMMMMMMMMX:. 'oONl oNWMMMMMMMMMMM 7 | MMMMMMMMMMMMMMKk: 'oONl lNWMMMMMMMMMMM 8 | MMMMMMMMMMMMMMMMKc'. 'l0MO,. .;0MMMMMMMMMMMMM 9 | MMMMMMMMMMMMMMMMMN0kl:;,,'''''''''''''''''','''''''''cxKMW0xddxKWMMMMMMMMMMMMM 10 | MMMMMMMMMMMMMMMMMMMMWWNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNNWMMMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 12 | MMMMMMMMMMMMMWXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKXNWMMMMMMMMMMMMMMMMMMMMMM 13 | MMMMMMMMMMMMMO,......................................:dKMMMMMMMMMMMMMMMMMMMMMM 14 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 15 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 16 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 17 | MMMMMMMMMMMMM0:,,,,,;;,,;;;. ..;;,,;;;;,,. .ckKMMMMMMMMMMMMMMMMMMMMMM 18 | MMMMMMMMMMMMMMWWWWWWWWWWWNKc 'd0MWWWWWWWWNx. .kWMMMMMMMMMMMMMMMMMMMMMMM 19 | MMMMMMMMMMMMMMMMMMMMMMMMMOc. lNWMMMMMMMMMMX; cKNMMMMMMMMMMMMMMMMMMMMMM 20 | MMMMMMMMMMMMMMMMMMMMMMMMMd. .dMMMMMMMMMMMMNc 'l0MMMMMMMMMMMMMMMMMMMMMM 21 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ;kKMMMMMMMMWNO' .'xMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMMd. 'dk0XXKOko:. .,xMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMMx,. .';;,.. .cOMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMMXOc lKNMMMMMMMMMMMMMMMMMMMMMM 25 | MMMMMMMMMMMMMMMMMMMMMMMMMMMK; .:XMMMMMMMMMMMMMMMMMMMMMMMM 26 | MMMMMMMMMMMMMMMMMMMMMMMMMMMM0d; ;d0MMMMMMMMMMMMMMMMMMMMMMMMM 27 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKl;'. .,lKWMMMMMMMMMMMMMMMMMMMMMMMMMM 28 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNK0OxddoooodxxkKNWMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | MMMMMMMMMMMMMMMMMMMMMMMMMXOOXMMMMMMMMMMMMMMMMMMMMMWWNNNNNNNNWMMMMMMMMMMMMMMMMM 31 | MMMMMMMMMMMMMMMMMMMMMMMMM0l,,lkNMMMMMMMMMMMMMMMMMMWNO:'''''';kNWMMMMMMMMMMMMMM 32 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' ckKWMMMMMMMMMMMMMMMMMNo. .cOMMMMMMMMMMMMMM 33 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .;d0WMMMMMMMMMMMMMMMMKk; cNMMMMMMMMMMMMM 34 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' 'kNWMMMMMMMMMMMMMMMWo. '0MMMMMMMMMMMMM 35 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .':OXNMMMMMMMMMMMMMk;. oNWMMMMMMMMMMM 36 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .'cKWWMMMMMMMMMWx'. cXNMMMMMMMMMMM 37 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' ,cd0KWMMMMW0x; :KNMMMMMMMMMMM 38 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .';lodxxo,. cXNMMMMMMMMMMM 39 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' 'c;. .dWWMMMMMMMMMMM 40 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NW0:.. :XMMMMMMMMMMMMM 41 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMXOo. .ckMMMMMMMMMMMMMM 42 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMMMWKOxl:'.. .';l0NWMMMMMMMMMMMMMM 43 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMMMMMMMMMNKOxdddddxONMMMMMMMMMMMMMMMMMMM 44 | MMMMMMMMMMMMMMMMMMMMMMMMM0o,.......lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 45 | MMMMMMMMMMMMMMMMMMMMMMMMMNKOxxxxxxx0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 46 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMWWX0000KWMMMMMMWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMM 47 | MMMMMMMMMMMMMMMMMMMMMMMMMMMXd:,....'cd0MMMWXkcccc:lxKMMMMMMMMMMMMMMMMMMMMMMMMM 48 | MMMMMMMMMMMMMMMMMMMMMMMMMWXo. .;KMMWNx;. .lWMMMMMMMMMMMMMMMMMMMMMMMM 49 | MMMMMMMMMMMMMMMMMMMMMMMMM0o' lXWMMNKl '0MMMMMMMMMMMMMMMMMMMMMMMM 50 | MMMMMMMMMMMMMMMMMMMMMMMMMd. .;xWMMMX: lXNMMMMMMMMMMMMMMMMMMMMMM 51 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ... ;XMMMMk;. ,dKMMMMMMMMMMMMMMMMMMMMMM 52 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ;dxkx;. .kMMMM0d' .:kMMMMMMMMMMMMMMMMMMMMMM 53 | MMMMMMMMMMMMMMMMMMMMMMMMMOl' .dWMMMXOc cKNMM0d' .'xMMMMMMMMMMMMMMMMMMMMMM 54 | MMMMMMMMMMMMMMMMMMMMMMMMMWNd. ;kKNNNN0, .:xNKl.. .'xMMMMMMMMMMMMMMMMMMMMMM 55 | MMMMMMMMMMMMMMMMMMMMMMMMMMMk. .,::::;. ':,. .,xMMMMMMMMMMMMMMMMMMMMMM 56 | MMMMMMMMMMMMMMMMMMMMMMMMMKx: .cOMMMMMMMMMMMMMMMMMMMMMM 57 | MMMMMMMMMMMMMMMMMMMMMMMMMd.. cKNMMMMMMMMMMMMMMMMMMMMMM 58 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ,0MMMMMMMMMMMMMMMMMMMMMMMM 59 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ,lOWMMMMMMMMMMMMMMMMMMMMMMMM 60 | MMMMMMMMMMMMMMMMMMMMMMMMMk;. .,::;;;;;;;;;;:cld0WWMMMMMMMMMMMMMMMMMMMMMMMMM 61 | MMMMMMMMMMMMMMMMMMMMMMMMMN0c ,d0NNNNNNNNNNNNNWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 62 | MMMMMMMMMMMMMMMMMMMMMMMMMMMXxxdk0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 63 | -------------------------------------------------------------------------------- /tests/jp2a-horizontal-270.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0xdxOXWWMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNKOl.. ,:oKMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMNXK0KNMMXOdccccccccccccccccccccccccccc:,. .xMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMXo;,',lKM0l' .xMMMMMMMMMMMMM 6 | MMMMMMMMMMMWNo lNOo' .:XMMMMMMMMMMMMM 7 | MMMMMMMMMMMWNl lNOo' :kKMMMMMMMMMMMMMM 8 | MMMMMMMMMMMMM0;. .,OM0l' .'cKMMMMMMMMMMMMMMMM 9 | MMMMMMMMMMMMMWKxddx0WMKxc''''''''','''''''''''''''''',,;:lk0NMMMMMMMMMMMMMMMMM 10 | MMMMMMMMMMMMMMMMMMMMMMWNNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNWWMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 12 | MMMMMMMMMMMMMMMMMMMMMMWNXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKXWMMMMMMMMMMMMM 13 | MMMMMMMMMMMMMMMMMMMMMMKd:......................................,OMMMMMMMMMMMMM 14 | MMMMMMMMMMMMMMMMMMMMMM0l' .xMMMMMMMMMMMMM 15 | MMMMMMMMMMMMMMMMMMMMMM0l' .xMMMMMMMMMMMMM 16 | MMMMMMMMMMMMMMMMMMMMMM0l' .xMMMMMMMMMMMMM 17 | MMMMMMMMMMMMMMMMMMMMMMKkc. .,,;;;;,,;;.. .;;;,,;;,,,,,:0MMMMMMMMMMMMM 18 | MMMMMMMMMMMMMMMMMMMMMMMWk. .xNWWWWWWWWM0d' cKNWWWWWWWWWWWMMMMMMMMMMMMMM 19 | MMMMMMMMMMMMMMMMMMMMMMNKc ;XMMMMMMMMMMWNl .cOMMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMMMMMMMMMMMMMMMMMMMMM0l' cNMMMMMMMMMMMMd. .dMMMMMMMMMMMMMMMMMMMMMMMMM 21 | MMMMMMMMMMMMMMMMMMMMMMx'. 'ONWMMMMMMMMKk; .dMMMMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMx,. .:okOKXX0kd' .dMMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMOc. ..,;;'. .,xMMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMNKl cOXMMMMMMMMMMMMMMMMMMMMMMMMM 25 | MMMMMMMMMMMMMMMMMMMMMMMMX:. ;KMMMMMMMMMMMMMMMMMMMMMMMMMMM 26 | MMMMMMMMMMMMMMMMMMMMMMMMM0d; ;d0MMMMMMMMMMMMMMMMMMMMMMMMMMMM 27 | MMMMMMMMMMMMMMMMMMMMMMMMMMWKl,. .';lKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 28 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMWNKkxxdooooddxO0KNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | MMMMMMMMMMMMMMMMMWNNNNNNNNWWMMMMMMMMMMMMMMMMMMMMMXOOXMMMMMMMMMMMMMMMMMMMMMMMMM 31 | MMMMMMMMMMMMMMWNk;'''''':ONWMMMMMMMMMMMMMMMMMMNkl,,l0MMMMMMMMMMMMMMMMMMMMMMMMM 32 | MMMMMMMMMMMMMMOc. .oNMMMMMMMMMMMMMMMMMWKkc 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 33 | MMMMMMMMMMMMMNc ;kKMMMMMMMMMMMMMMMMW0d;. 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 34 | MMMMMMMMMMMMM0' .oWMMMMMMMMMMMMMMMWNk' 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 35 | MMMMMMMMMMMWNo .;kMMMMMMMMMMMMMNXO:'. 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 36 | MMMMMMMMMMMNXc .'xWMMMMMMMMMWWKc'. 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 37 | MMMMMMMMMMMNK: ;x0WMMMMWK0dc, 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 38 | MMMMMMMMMMMNXc .,oxxdol;'. 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 39 | MMMMMMMMMMMWWd. .;c' 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 40 | MMMMMMMMMMMMMX: ..:0WN: 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 41 | MMMMMMMMMMMMMMkc. .oOXMMN: 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 42 | MMMMMMMMMMMMMMWN0l;'. ..':lxOKWMMMMN: 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 43 | MMMMMMMMMMMMMMMMMMMNOxdddddxOKNMMMMMMMMMMN: 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 44 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNl.......,o0MMMMMMMMMMMMMMMMMMMMMMMMM 45 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0xxxxxxxOKNMMMMMMMMMMMMMMMMMMMMMMMMM 46 | MMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWMMMMMMWK0000XWWMMMMMMMMMMMMMMMMMMMMMMMMMMMM 47 | MMMMMMMMMMMMMMMMMMMMMMMMMKxl:cccckXWMMM0dc'....,:dXMMMMMMMMMMMMMMMMMMMMMMMMMMM 48 | MMMMMMMMMMMMMMMMMMMMMMMMWl. .;xNWMMK;. .oXWMMMMMMMMMMMMMMMMMMMMMMMMM 49 | MMMMMMMMMMMMMMMMMMMMMMMM0' lKNMMWXl 'o0MMMMMMMMMMMMMMMMMMMMMMMMM 50 | MMMMMMMMMMMMMMMMMMMMMMNXl :XMMMWx;. .dMMMMMMMMMMMMMMMMMMMMMMMMM 51 | MMMMMMMMMMMMMMMMMMMMMMKd, .;kMMMMX; ... .dMMMMMMMMMMMMMMMMMMMMMMMMM 52 | MMMMMMMMMMMMMMMMMMMMMMk:. 'd0MMMMk. .;xkxd; .dMMMMMMMMMMMMMMMMMMMMMMMMM 53 | MMMMMMMMMMMMMMMMMMMMMMx'. 'd0MMNKc cOXMMMWd. 'lOMMMMMMMMMMMMMMMMMMMMMMMMM 54 | MMMMMMMMMMMMMMMMMMMMMMx'. ..lKNx:. ,0NNNNKk; .dNWMMMMMMMMMMMMMMMMMMMMMMMMM 55 | MMMMMMMMMMMMMMMMMMMMMMx,. .,:' .;::::,. .kMMMMMMMMMMMMMMMMMMMMMMMMMMM 56 | MMMMMMMMMMMMMMMMMMMMMMOc. :xKMMMMMMMMMMMMMMMMMMMMMMMMM 57 | MMMMMMMMMMMMMMMMMMMMMMNKc ..dMMMMMMMMMMMMMMMMMMMMMMMMM 58 | MMMMMMMMMMMMMMMMMMMMMMMM0, .dMMMMMMMMMMMMMMMMMMMMMMMMM 59 | MMMMMMMMMMMMMMMMMMMMMMMMWOl, .dMMMMMMMMMMMMMMMMMMMMMMMMM 60 | MMMMMMMMMMMMMMMMMMMMMMMMMWW0dlc:;;;;;;;;;;::,. .;kMMMMMMMMMMMMMMMMMMMMMMMMM 61 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNNNNNNNNNNNN0d, c0NMMMMMMMMMMMMMMMMMMMMMMMMM 62 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0kdxxXMMMMMMMMMMMMMMMMMMMMMMMMMMM 63 | -------------------------------------------------------------------------------- /tests/jp2a-horizontal-90.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMXxxdk0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMN0c ,d0NNNNNNNNNNNNNWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMk;. .,::;;;;;;;;;;:cld0WWMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ,lOWMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ,0MMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMMMMMMMMMMMMMMMMMMMMMMd.. cKNMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMMMMMMMMMMMMMMMMMMMMMMKx: .cOMMMMMMMMMMMMMMMMMMMMMM 8 | MMMMMMMMMMMMMMMMMMMMMMMMMMMk. .,::::;. ':,. .,xMMMMMMMMMMMMMMMMMMMMMM 9 | MMMMMMMMMMMMMMMMMMMMMMMMMWNd. ;kKNNNN0, .:xNKl.. .'xMMMMMMMMMMMMMMMMMMMMMM 10 | MMMMMMMMMMMMMMMMMMMMMMMMMOl' .dWMMMXOc cKNMM0d' .'xMMMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ;dxkx;. .kMMMM0d' .:kMMMMMMMMMMMMMMMMMMMMMM 12 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ... ;XMMMMk;. ,dKMMMMMMMMMMMMMMMMMMMMMM 13 | MMMMMMMMMMMMMMMMMMMMMMMMMd. .;xWMMMX: lXNMMMMMMMMMMMMMMMMMMMMMM 14 | MMMMMMMMMMMMMMMMMMMMMMMMM0o' lXWMMNKl '0MMMMMMMMMMMMMMMMMMMMMMMM 15 | MMMMMMMMMMMMMMMMMMMMMMMMMWXo. .;KMMWNx;. .lWMMMMMMMMMMMMMMMMMMMMMMMM 16 | MMMMMMMMMMMMMMMMMMMMMMMMMMMXd:,....'cd0MMMWXkcccc:lxKMMMMMMMMMMMMMMMMMMMMMMMMM 17 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMWWX0000KWMMMMMMWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMM 18 | MMMMMMMMMMMMMMMMMMMMMMMMMNKOxxxxxxx0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 19 | MMMMMMMMMMMMMMMMMMMMMMMMM0o,.......lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMMMMMMMMMNKOxdddddxONMMMMMMMMMMMMMMMMMMM 21 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMMMWKOxl:'.. .';l0NWMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMXOo. .ckMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NW0:.. :XMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' 'c;. .dWWMMMMMMMMMMM 25 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .';lodxxo,. cXNMMMMMMMMMMM 26 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' ,cd0KWMMMMW0x; :KNMMMMMMMMMMM 27 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .'cKWWMMMMMMMMMWx'. cXNMMMMMMMMMMM 28 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .':OXNMMMMMMMMMMMMMk;. oNWMMMMMMMMMMM 29 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' 'kNWMMMMMMMMMMMMMMMWo. '0MMMMMMMMMMMMM 30 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .;d0WMMMMMMMMMMMMMMMMKk; cNMMMMMMMMMMMMM 31 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' ckKWMMMMMMMMMMMMMMMMMNo. .cOMMMMMMMMMMMMMM 32 | MMMMMMMMMMMMMMMMMMMMMMMMM0l,,lkNMMMMMMMMMMMMMMMMMMWNO:'''''';kNWMMMMMMMMMMMMMM 33 | MMMMMMMMMMMMMMMMMMMMMMMMMXOOXMMMMMMMMMMMMMMMMMMMMMWWNNNNNNNNWMMMMMMMMMMMMMMMMM 34 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNK0OxddoooodxxkKNWMMMMMMMMMMMMMMMMMMMMMMMMMMMM 36 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKl;'. .,lKWMMMMMMMMMMMMMMMMMMMMMMMMMM 37 | MMMMMMMMMMMMMMMMMMMMMMMMMMMM0d; ;d0MMMMMMMMMMMMMMMMMMMMMMMMM 38 | MMMMMMMMMMMMMMMMMMMMMMMMMMMK; .:XMMMMMMMMMMMMMMMMMMMMMMMM 39 | MMMMMMMMMMMMMMMMMMMMMMMMMXOc lKNMMMMMMMMMMMMMMMMMMMMMM 40 | MMMMMMMMMMMMMMMMMMMMMMMMMx,. .';;,.. .cOMMMMMMMMMMMMMMMMMMMMMM 41 | MMMMMMMMMMMMMMMMMMMMMMMMMd. 'dk0XXKOko:. .,xMMMMMMMMMMMMMMMMMMMMMM 42 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ;kKMMMMMMMMWNO' .'xMMMMMMMMMMMMMMMMMMMMMM 43 | MMMMMMMMMMMMMMMMMMMMMMMMMd. .dMMMMMMMMMMMMNc 'l0MMMMMMMMMMMMMMMMMMMMMM 44 | MMMMMMMMMMMMMMMMMMMMMMMMMOc. lNWMMMMMMMMMMX; cKNMMMMMMMMMMMMMMMMMMMMMM 45 | MMMMMMMMMMMMMMWWWWWWWWWWWNKc 'd0MWWWWWWWWNx. .kWMMMMMMMMMMMMMMMMMMMMMMM 46 | MMMMMMMMMMMMM0:,,,,,;;,,;;;. ..;;,,;;;;,,. .ckKMMMMMMMMMMMMMMMMMMMMMM 47 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 48 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 49 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 50 | MMMMMMMMMMMMMO,......................................:dKMMMMMMMMMMMMMMMMMMMMMM 51 | MMMMMMMMMMMMMWXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKXNWMMMMMMMMMMMMMMMMMMMMMM 52 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 53 | MMMMMMMMMMMMMMMMMMMMWWNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNNWMMMMMMMMMMMMMMMMMMMMMM 54 | MMMMMMMMMMMMMMMMMN0kl:;,,'''''''''''''''''','''''''''cxKMW0xddxKWMMMMMMMMMMMMM 55 | MMMMMMMMMMMMMMMMKc'. 'l0MO,. .;0MMMMMMMMMMMMM 56 | MMMMMMMMMMMMMMKk: 'oONl lNWMMMMMMMMMMM 57 | MMMMMMMMMMMMMX:. 'oONl oNWMMMMMMMMMMM 58 | MMMMMMMMMMMMMx. 'l0MKl,',;oXMMMMMMMMMMMMM 59 | MMMMMMMMMMMMMx. .,:cccccccccccccccccccccccccccdOXMMNK0KXNMMMMMMMMMMMMMM 60 | MMMMMMMMMMMMMKo:, ..lOKNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMM 61 | MMMMMMMMMMMMMMWWXOxdx0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 62 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 63 | -------------------------------------------------------------------------------- /tests/jp2a-rotate-270.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0kdxxXMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNNNNNNNNNNNN0d, c0NMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMWW0dlc:;;;;;;;;;;::,. .;kMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMWOl, .dMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMM0, .dMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMMMMMMMMMMMMMMMMMMMNKc ..dMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMMMMMMMMMMMMMMMMMMMOc. :xKMMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMMMMMMMMMMMMMMMMMMMMMx,. .,:' .;::::,. .kMMMMMMMMMMMMMMMMMMMMMMMMMMM 9 | MMMMMMMMMMMMMMMMMMMMMMx'. ..lKNx:. ,0NNNNKk; .dNWMMMMMMMMMMMMMMMMMMMMMMMMM 10 | MMMMMMMMMMMMMMMMMMMMMMx'. 'd0MMNKc cOXMMMWd. 'lOMMMMMMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMMMMMMMMMMMMMMMMMk:. 'd0MMMMk. .;xkxd; .dMMMMMMMMMMMMMMMMMMMMMMMMM 12 | MMMMMMMMMMMMMMMMMMMMMMKd, .;kMMMMX; ... .dMMMMMMMMMMMMMMMMMMMMMMMMM 13 | MMMMMMMMMMMMMMMMMMMMMMNXl :XMMMWx;. .dMMMMMMMMMMMMMMMMMMMMMMMMM 14 | MMMMMMMMMMMMMMMMMMMMMMMM0' lKNMMWXl 'o0MMMMMMMMMMMMMMMMMMMMMMMMM 15 | MMMMMMMMMMMMMMMMMMMMMMMMWl. .;xNWMMK;. .oXWMMMMMMMMMMMMMMMMMMMMMMMMM 16 | MMMMMMMMMMMMMMMMMMMMMMMMMKxl:cccckXWMMM0dc'....,:dXMMMMMMMMMMMMMMMMMMMMMMMMMMM 17 | MMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWMMMMMMWK0000XWWMMMMMMMMMMMMMMMMMMMMMMMMMMMM 18 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0xxxxxxxOKNMMMMMMMMMMMMMMMMMMMMMMMMM 19 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNl.......,o0MMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMMMMMMMMMMMMMMMMMMNOxdddddxOKNMMMMMMMMMMN: 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 21 | MMMMMMMMMMMMMMWN0l;'. ..':lxOKWMMMMN: 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMkc. .oOXMMN: 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMX: ..:0WN: 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 24 | MMMMMMMMMMMWWd. .;c' 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 25 | MMMMMMMMMMMNXc .,oxxdol;'. 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 26 | MMMMMMMMMMMNK: ;x0WMMMMWK0dc, 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 27 | MMMMMMMMMMMNXc .'xWMMMMMMMMMWWKc'. 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 28 | MMMMMMMMMMMWNo .;kMMMMMMMMMMMMMNXO:'. 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 29 | MMMMMMMMMMMMM0' .oWMMMMMMMMMMMMMMMWNk' 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 30 | MMMMMMMMMMMMMNc ;kKMMMMMMMMMMMMMMMMW0d;. 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 31 | MMMMMMMMMMMMMMOc. .oNMMMMMMMMMMMMMMMMMWKkc 'l0MMMMMMMMMMMMMMMMMMMMMMMMM 32 | MMMMMMMMMMMMMMWNk;'''''':ONWMMMMMMMMMMMMMMMMMMNkl,,l0MMMMMMMMMMMMMMMMMMMMMMMMM 33 | MMMMMMMMMMMMMMMMMWNNNNNNNNWWMMMMMMMMMMMMMMMMMMMMMXOOXMMMMMMMMMMMMMMMMMMMMMMMMM 34 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMWNKkxxdooooddxO0KNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 36 | MMMMMMMMMMMMMMMMMMMMMMMMMMWKl,. .';lKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 37 | MMMMMMMMMMMMMMMMMMMMMMMMM0d; ;d0MMMMMMMMMMMMMMMMMMMMMMMMMMMM 38 | MMMMMMMMMMMMMMMMMMMMMMMMX:. ;KMMMMMMMMMMMMMMMMMMMMMMMMMMM 39 | MMMMMMMMMMMMMMMMMMMMMMNKl cOXMMMMMMMMMMMMMMMMMMMMMMMMM 40 | MMMMMMMMMMMMMMMMMMMMMMOc. ..,;;'. .,xMMMMMMMMMMMMMMMMMMMMMMMMM 41 | MMMMMMMMMMMMMMMMMMMMMMx,. .:okOKXX0kd' .dMMMMMMMMMMMMMMMMMMMMMMMMM 42 | MMMMMMMMMMMMMMMMMMMMMMx'. 'ONWMMMMMMMMKk; .dMMMMMMMMMMMMMMMMMMMMMMMMM 43 | MMMMMMMMMMMMMMMMMMMMMM0l' cNMMMMMMMMMMMMd. .dMMMMMMMMMMMMMMMMMMMMMMMMM 44 | MMMMMMMMMMMMMMMMMMMMMMNKc ;XMMMMMMMMMMWNl .cOMMMMMMMMMMMMMMMMMMMMMMMMM 45 | MMMMMMMMMMMMMMMMMMMMMMMWk. .xNWWWWWWWWM0d' cKNWWWWWWWWWWWMMMMMMMMMMMMMM 46 | MMMMMMMMMMMMMMMMMMMMMMKkc. .,,;;;;,,;;.. .;;;,,;;,,,,,:0MMMMMMMMMMMMM 47 | MMMMMMMMMMMMMMMMMMMMMM0l' .xMMMMMMMMMMMMM 48 | MMMMMMMMMMMMMMMMMMMMMM0l' .xMMMMMMMMMMMMM 49 | MMMMMMMMMMMMMMMMMMMMMM0l' .xMMMMMMMMMMMMM 50 | MMMMMMMMMMMMMMMMMMMMMMKd:......................................,OMMMMMMMMMMMMM 51 | MMMMMMMMMMMMMMMMMMMMMMWNXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKXWMMMMMMMMMMMMM 52 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 53 | MMMMMMMMMMMMMMMMMMMMMMWNNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNWWMMMMMMMMMMMMMMMMMMMM 54 | MMMMMMMMMMMMMWKxddx0WMKxc''''''''','''''''''''''''''',,;:lk0NMMMMMMMMMMMMMMMMM 55 | MMMMMMMMMMMMM0;. .,OM0l' .'cKMMMMMMMMMMMMMMMM 56 | MMMMMMMMMMMWNl lNOo' :kKMMMMMMMMMMMMMM 57 | MMMMMMMMMMMWNo lNOo' .:XMMMMMMMMMMMMM 58 | MMMMMMMMMMMMMXo;,',lKM0l' .xMMMMMMMMMMMMM 59 | MMMMMMMMMMMMMMNXK0KNMMXOdccccccccccccccccccccccccccc:,. .xMMMMMMMMMMMMM 60 | MMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNKOl.. ,:oKMMMMMMMMMMMMM 61 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0xdxOXWWMMMMMMMMMMMMMM 62 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 63 | -------------------------------------------------------------------------------- /tests/jp2a-rotate-90-flipy.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMXxxdk0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMN0c ,d0NNNNNNNNNNNNNWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMk;. .,::;;;;;;;;;;:cld0WWMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ,lOWMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ,0MMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMMMMMMMMMMMMMMMMMMMMMMd.. cKNMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMMMMMMMMMMMMMMMMMMMMMMKx: .cOMMMMMMMMMMMMMMMMMMMMMM 8 | MMMMMMMMMMMMMMMMMMMMMMMMMMMk. .,::::;. ':,. .,xMMMMMMMMMMMMMMMMMMMMMM 9 | MMMMMMMMMMMMMMMMMMMMMMMMMWNd. ;kKNNNN0, .:xNKl.. .'xMMMMMMMMMMMMMMMMMMMMMM 10 | MMMMMMMMMMMMMMMMMMMMMMMMMOl' .dWMMMXOc cKNMM0d' .'xMMMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ;dxkx;. .kMMMM0d' .:kMMMMMMMMMMMMMMMMMMMMMM 12 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ... ;XMMMMk;. ,dKMMMMMMMMMMMMMMMMMMMMMM 13 | MMMMMMMMMMMMMMMMMMMMMMMMMd. .;xWMMMX: lXNMMMMMMMMMMMMMMMMMMMMMM 14 | MMMMMMMMMMMMMMMMMMMMMMMMM0o' lXWMMNKl '0MMMMMMMMMMMMMMMMMMMMMMMM 15 | MMMMMMMMMMMMMMMMMMMMMMMMMWXo. .;KMMWNx;. .lWMMMMMMMMMMMMMMMMMMMMMMMM 16 | MMMMMMMMMMMMMMMMMMMMMMMMMMMXd:,....'cd0MMMWXkcccc:lxKMMMMMMMMMMMMMMMMMMMMMMMMM 17 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMWWX0000KWMMMMMMWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMM 18 | MMMMMMMMMMMMMMMMMMMMMMMMMNKOxxxxxxx0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 19 | MMMMMMMMMMMMMMMMMMMMMMMMM0o,.......lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 20 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMMMMMMMMMNKOxdddddxONMMMMMMMMMMMMMMMMMMM 21 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMMMWKOxl:'.. .';l0NWMMMMMMMMMMMMMM 22 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NMMXOo. .ckMMMMMMMMMMMMMM 23 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' :NW0:.. :XMMMMMMMMMMMMM 24 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' 'c;. .dWWMMMMMMMMMMM 25 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .';lodxxo,. cXNMMMMMMMMMMM 26 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' ,cd0KWMMMMW0x; :KNMMMMMMMMMMM 27 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .'cKWWMMMMMMMMMWx'. cXNMMMMMMMMMMM 28 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .':OXNMMMMMMMMMMMMMk;. oNWMMMMMMMMMMM 29 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' 'kNWMMMMMMMMMMMMMMMWo. '0MMMMMMMMMMMMM 30 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' .;d0WMMMMMMMMMMMMMMMMKk; cNMMMMMMMMMMMMM 31 | MMMMMMMMMMMMMMMMMMMMMMMMM0l' ckKWMMMMMMMMMMMMMMMMMNo. .cOMMMMMMMMMMMMMM 32 | MMMMMMMMMMMMMMMMMMMMMMMMM0l,,lkNMMMMMMMMMMMMMMMMMMWNO:'''''';kNWMMMMMMMMMMMMMM 33 | MMMMMMMMMMMMMMMMMMMMMMMMMXOOXMMMMMMMMMMMMMMMMMMMMMWWNNNNNNNNWMMMMMMMMMMMMMMMMM 34 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNK0OxddoooodxxkKNWMMMMMMMMMMMMMMMMMMMMMMMMMMMM 36 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKl;'. .,lKWMMMMMMMMMMMMMMMMMMMMMMMMMM 37 | MMMMMMMMMMMMMMMMMMMMMMMMMMMM0d; ;d0MMMMMMMMMMMMMMMMMMMMMMMMM 38 | MMMMMMMMMMMMMMMMMMMMMMMMMMMK; .:XMMMMMMMMMMMMMMMMMMMMMMMM 39 | MMMMMMMMMMMMMMMMMMMMMMMMMXOc lKNMMMMMMMMMMMMMMMMMMMMMM 40 | MMMMMMMMMMMMMMMMMMMMMMMMMx,. .';;,.. .cOMMMMMMMMMMMMMMMMMMMMMM 41 | MMMMMMMMMMMMMMMMMMMMMMMMMd. 'dk0XXKOko:. .,xMMMMMMMMMMMMMMMMMMMMMM 42 | MMMMMMMMMMMMMMMMMMMMMMMMMd. ;kKMMMMMMMMWNO' .'xMMMMMMMMMMMMMMMMMMMMMM 43 | MMMMMMMMMMMMMMMMMMMMMMMMMd. .dMMMMMMMMMMMMNc 'l0MMMMMMMMMMMMMMMMMMMMMM 44 | MMMMMMMMMMMMMMMMMMMMMMMMMOc. lNWMMMMMMMMMMX; cKNMMMMMMMMMMMMMMMMMMMMMM 45 | MMMMMMMMMMMMMMWWWWWWWWWWWNKc 'd0MWWWWWWWWNx. .kWMMMMMMMMMMMMMMMMMMMMMMM 46 | MMMMMMMMMMMMM0:,,,,,;;,,;;;. ..;;,,;;;;,,. .ckKMMMMMMMMMMMMMMMMMMMMMM 47 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 48 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 49 | MMMMMMMMMMMMMx. 'l0MMMMMMMMMMMMMMMMMMMMMM 50 | MMMMMMMMMMMMMO,......................................:dKMMMMMMMMMMMMMMMMMMMMMM 51 | MMMMMMMMMMMMMWXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKXNWMMMMMMMMMMMMMMMMMMMMMM 52 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 53 | MMMMMMMMMMMMMMMMMMMMWWNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNNWMMMMMMMMMMMMMMMMMMMMMM 54 | MMMMMMMMMMMMMMMMMN0kl:;,,'''''''''''''''''','''''''''cxKMW0xddxKWMMMMMMMMMMMMM 55 | MMMMMMMMMMMMMMMMKc'. 'l0MO,. .;0MMMMMMMMMMMMM 56 | MMMMMMMMMMMMMMKk: 'oONl lNWMMMMMMMMMMM 57 | MMMMMMMMMMMMMX:. 'oONl oNWMMMMMMMMMMM 58 | MMMMMMMMMMMMMx. 'l0MKl,',;oXMMMMMMMMMMMMM 59 | MMMMMMMMMMMMMx. .,:cccccccccccccccccccccccccccdOXMMNK0KXNMMMMMMMMMMMMMM 60 | MMMMMMMMMMMMMKo:, ..lOKNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMM 61 | MMMMMMMMMMMMMMWWXOxdx0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 62 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 63 | -------------------------------------------------------------------------------- /tests/edges.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMMMMMMMM===MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM========MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMMMMM=========MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM=================MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMMMMMM|/.. \\KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM====/'. .=====MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 9 | MMMMMMM|| ||MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW/==. .\\WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 10 | MMMMMMM|\== ===//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW|| \\=MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMMWx======okXMMMMMMMMMMMMMMMMMMMMMM======MMMMMMMMMMMMMMN|| ========= |\\KMMMMMMMMMMMMMMMMMM=======MMMMMMMMMMMMMM 12 | MMMMMMW===========WMMMMWN==========MM=============MMMMMMMMMMN|| ===/===O==\\ .||MMMMMMMMMMM===================MMMMMMMMM 13 | MMMMMW|/''''''''\\KMMMMXOl'''''''\\===/'.......=====MMMMMMMMN|\==//KMMMMMMW|\ ||MMMMMMMM=/======..........=====WMMMMMMM 14 | MMMMMW|| |0MMMMK|| .=. ..\===MMMMMNXk/XNMMMMMMMMM||. /|MMMMMMW/=/'. .\\=WMMMMM 15 | MMMMMW|| |0MMMMK|| ==== \\\WMMMMMWWWMMMMMMMMMMM||.. ///MMMMMW|| ========== .\\MMMMM 16 | MMMMMW|| |0MMMMK|| ========= |\MMMMMMMMMMMMMMMMMMM|| |/KNMMMMMN|| ==/===00KK\\=. ||WMMMM 17 | MMMMMW|| |0MMMMK|| /=/0XNNX\\\ ||WMMMMMMMMMMMMMMMMMM// //MMMMMMMN|\=/==KWMMMMMMMK/| ||NMMMM 18 | MMMMMW|| |0MMMMK|| ||NWMMMMMW|\= ||KNMMMMMMMMMMMMMMM=//. =//XMMMMMMMWX\=/NMM=========// ||XMMMM 19 | MMMMMW|| |0MMMMK|| ||WWMMMMMMM0\' ||xKMMMMMMMMMMMMMM///. =///KMMMMMMMMMWWWW========='.. ||XMMMM 20 | MMMMMW|| |0MMMMK|| ||WWMMMMMMMX/| ||xKMMMMMMMMMMMM=//. ///XMMMMMMMMMMMMM=/==/ ====\. ||XMMMM 21 | MMMMMW|| |0MMMMK|| ||WWMMMMMM//// |/OXMMMMMMMMMM=///. /|0========MMMMM//// /===0|| ||XMMMM 22 | MMMMMW|| |0MMMMK|| |\========//. //NWMMMMMMMM////. .\===========XMMK// ||XWMN/| ||NMMMM 23 | MMMMMW|| |0MMMMK|| .=====// //MMMMMMMM//// .||M||,. .\\==/=// |\====N 24 | MMMMMW|| |0MMMMK|| =//WMMMMMMM=//. .||M||\. \==//. ==:\k 25 | MMMMMW|| |0MMMMK|| = ==///KMMMMMM=//. .||MMK\\== ...==== ==/d 26 | MMMMMW|| |0MMMMK|| /================/XMMMMMMMKk\===========================//MMWW\=============================/0 27 | MMMMMN/| |0MMMMK|| ||WNKO=======/KNWMMMMMMMMMMX00O00000000000000000000000000KNMMMMMMW0=========KWMMMK=======/KNWMM 28 | MMMMM/// ||KMMMMK|| ||WWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | MMWW//. //XMMMMK|| ||WWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | MMX\| =//WMMMMK|| ||WWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 31 | MMW|\ =//0NMMMMMK|| ||WWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 32 | MMMM|\ =///KMMMMMMMK|| ||WWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 33 | MMMM|\======/KMMMMMMMMMX\\=======//WWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 34 | MMMMMN0000XNWMMMMMMMMMMWNK00000000XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 36 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 37 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 38 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 39 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 40 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 41 | -------------------------------------------------------------------------------- /tests/edges-only.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | === ======== 7 | ========= ================= 8 | |/ \\ ====/ ===== 9 | || || /== \\ 10 | |\== ===// || \\= 11 | ====== ====== || ========= |\\ ======= 12 | =========== ========== ============= || ===/=== ==\\ || =================== 13 | |/ \\ \\===/ ===== |\==// |\ || =/====== ===== 14 | || | || = \=== / || /| /=/ \\= 15 | || | || ==== \\\ || /// || ========== \\ 16 | || | || ========= |\ || |/ || ==/=== \\= || 17 | || | || /=/ \\\ || // // |\=/== /| || 18 | || | || || |\= || =// =// \=/ =========// || 19 | || | || || \ || /// =/// ========= || 20 | || | || || /| || =// /// =/==/ ====\ || 21 | || | || || //// |/ =/// /| ======== //// /=== || || 22 | || | || |\========// // //// \=========== // || /| || 23 | || | || =====// // //// || || \\==/=// |\==== 24 | || | || =// =// || ||\ \==// == \ 25 | || | || = ==/// =// || \\== ==== ==/ 26 | || | || /================/ \===========================// \=============================/ 27 | /| | || || =======/ ========= =======/ 28 | /// || || || 29 | // // || || 30 | \| =// || || 31 | |\ =// || || 32 | |\ =/// || || 33 | |\======/ \\=======// 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /tests/edges-only-invert.txt: -------------------------------------------------------------------------------- 1 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 2 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 3 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 4 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 5 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | MMMMMMMMMMM===MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM========MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 7 | MMMMMMMM=========MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM=================MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 8 | MMMMMMM|/MMMMMM\\MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM====/MMMMMMMMMMMMM=====MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 9 | MMMMMMM||MMMMMMM||MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM/==MMMMMMMMMMMMMMMMMMM\\MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 10 | MMMMMMM|\==MM===//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM||MMMMMMMMMMMMMMMMMMMMMM\\=MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMMMM======MMMMMMMMMMMMMMMMMMMMMMMMM======MMMMMMMMMMMMMMM||MMMM=========MMMMMMMMM|\\MMMMMMMMMMMMMMMMMMM=======MMMMMMMMMMMMMM 12 | MMMMMMM===========MMMMMMM==========MM=============MMMMMMMMMMM||M===/===M==\\MMMMMMMMMMM||MMMMMMMMMMM===================MMMMMMMMM 13 | MMMMMM|/MMMMMMMM\\MMMMMMMMMMMMMMM\\===/MMMMMMMM=====MMMMMMMMM|\==//MMMMMMMM|\MMMMMMMMMM||MMMMMMMM=/======MMMMMMMMMM=====MMMMMMMM 14 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMMMM=MMMMMMMMMMMMMMM\===MMMMMMMM/MMMMMMMMMMM||MMMMMMMMMM/|MMMMMMM/=/MMMMMMMMMMMMMMMMMMMM\\=MMMMMM 15 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMMMMMMM====MMMMMMMMMM\\\MMMMMMMMMMMMMMMMMMMM||MMMMMMMMM///MMMMMM||MMMM==========MMMMMMMMMM\\MMMMM 16 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMMMM=========MMMMMMMMMM|\MMMMMMMMMMMMMMMMMMM||MMMMMMMM|/MMMMMMMM||MM==/===MMMM\\=MMMMMMMMM||MMMMM 17 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMMM/=/MMMMM\\\MMMMMMMMM||MMMMMMMMMMMMMMMMMMM//MMMMMMMM//MMMMMMMM|\=/==MMMMMMMMMM/|MMMMMMMM||MMMMM 18 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMM||MMMMMMMM|\=MMMMMMMM||MMMMMMMMMMMMMMMMM=//MMMMMMM=//MMMMMMMMMM\=/MMM=========//MMMMMMMM||MMMMM 19 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMM||MMMMMMMMMM\MMMMMMMM||MMMMMMMMMMMMMMMM///MMMMMM=///MMMMMMMMMMMMMM=========MMMMMMMMMMMMM||MMMMM 20 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMM||MMMMMMMMMM/|MMMMMMM||MMMMMMMMMMMMMM=//MMMMMMM///MMMMMMMMMMMMMM=/==/MMMMM====\MMMMMMMMM||MMMMM 21 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMM||MMMMMMMM////MMMMMMM|/MMMMMMMMMMMM=///MMMMMMM/|M========MMMMM////MMMMMMM/===M||MMMMMMMM||MMMMM 22 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMM|\========//MMMMMMMMM//MMMMMMMMMM////MMMMMMMMM\===========MMMM//MMMMMMMM||MMMM/|MMMMMMMM||MMMMM 23 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMMMMM=====//MMMMMMMMMMM//MMMMMMMM////MMMMMMMMMMMMMMMMMMMMMM||M||MMMMMMMMMM\\==/=//MMMMMMMM|\====M 24 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMMMMMMMMMMMMMMMMMMMMM=//MMMMMMMM=//MMMMMMMMMMMMMMMMMMMMMMMM||M||\MMMMMMMMMM\==//MMMMMMMMMMMM==M\M 25 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMMMM=MMMMMMMMMMMMM==///MMMMMMM=//MMMMMMMMMMMMMMMMMMMMMMMMMM||MMM\\==MMMMMMMMMMM====MMMMMMMMMM==/M 26 | MMMMMM||MMMMMMMMM|MMMMMM||MMMMMMMM/================/MMMMMMMMMM\===========================//MMMM\=============================/M 27 | MMMMMM/|MMMMMMMMM|MMMMMM||MMMMMMM||MMMM=======/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM=========MMMMMM=======/MMMMM 28 | MMMMM///MMMMMMMM||MMMMMM||MMMMMMM||MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | MMMM//MMMMMMMMMM//MMMMMM||MMMMMMM||MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | MMM\|MMMMMMMMMM=//MMMMMM||MMMMMMM||MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 31 | MMM|\MMMMMMMM=//MMMMMMMM||MMMMMMM||MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 32 | MMMM|\MMMMM=///MMMMMMMMM||MMMMMMM||MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 33 | MMMM|\======/MMMMMMMMMMM\\=======//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 34 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 36 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 37 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 38 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 39 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 40 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 41 | -------------------------------------------------------------------------------- /include/html.h: -------------------------------------------------------------------------------- 1 | /*! \file 2 | * \noop Copyright 2020 Christoph Raitzig 3 | * 4 | * \brief HTML/XHTML functions. 5 | * 6 | * \author Christoph Raitzig 7 | * \copyright Distributed under the GNU General Public License (GPL) v2. 8 | */ 9 | 10 | #ifndef INC_JP2A_HTML_H 11 | #define INC_JP2A_HTML_H 12 | 13 | #include "config.h" 14 | 15 | /*! 16 | * \brief Prints the start of a HTML document. 17 | * 18 | * \param fontsize font size 19 | * \param fout stream to print to 20 | */ 21 | void print_html_document_start(const int fontsize, FILE *fout); 22 | 23 | /*! 24 | * \brief Prints the start of a HTML image. 25 | * 26 | * \param f stream to print to 27 | */ 28 | void print_html_image_start(FILE *f); 29 | 30 | /*! 31 | * \brief Prints the end of a HTML document. 32 | * 33 | * \param fout stream to print to 34 | */ 35 | void print_html_document_end(FILE *fout); 36 | 37 | /*! 38 | * \brief Prints the end of a HTML image. 39 | * 40 | * \param f stream to print to 41 | */ 42 | void print_html_image_end(FILE *f); 43 | #if ASCII 44 | 45 | /*! 46 | * \brief Prints a char of the output image for HTML. 47 | * 48 | * \param fout stream to print to 49 | * \param ch char to print 50 | * \param red_fg,green_fg,blue_fg foreground color 51 | * \param red_bg,green_bg,blue_bg background color 52 | */ 53 | void print_html_char(FILE *fout, const char ch, 54 | const int red_fg, const int green_fg, const int blue_fg, 55 | const int red_bg, const int green_bg, const int blue_bg); 56 | #else 57 | 58 | /*! 59 | * \brief Prints a char of the output image for HTML. 60 | * 61 | * \param fout stream to print to 62 | * \param ch char to print 63 | * \param red_fg,green_fg,blue_fg foreground color 64 | * \param red_bg,green_bg,blue_bg background color 65 | */ 66 | void print_html_char(FILE *fout, const char* ch, 67 | const int red_fg, const int green_fg, const int blue_fg, 68 | const int red_bg, const int green_bg, const int blue_bg); 69 | #endif 70 | 71 | /*! 72 | * \brief Prints a new line (for HTML, i.e. "
"). 73 | * 74 | * \param fout stream to print to 75 | */ 76 | void print_html_newline(FILE *fout); 77 | 78 | /*! 79 | * \brief Prints the start of a XHTML document. 80 | * 81 | * \param fontsize font size 82 | * \param fout stream to print to 83 | */ 84 | void print_xhtml_document_start(const int fontsize, FILE *fout); 85 | 86 | /*! 87 | * \brief Prints the start of a XHTML image. 88 | * 89 | * \param f stream to print to 90 | */ 91 | void print_xhtml_image_start(FILE *f); 92 | 93 | /*! 94 | * \brief Prints the end of a XHTML document. 95 | * 96 | * \param fout stream to print to 97 | */ 98 | void print_xhtml_document_end(FILE *fout); 99 | 100 | /*! 101 | * \brief Prints the end of a XHTML image. 102 | * 103 | * \param f stream to print to 104 | */ 105 | void print_xhtml_image_end(FILE *f); 106 | #if ASCII 107 | 108 | /*! 109 | * \brief Prints a char of the output image for XHTML. 110 | * 111 | * \param fout stream to print to 112 | * \param ch char to print 113 | * \param red_fg,green_fg,blue_fg foreground color 114 | * \param red_bg,green_bg,blue_bg background color 115 | */ 116 | void print_xhtml_char(FILE *fout, const char ch, 117 | const int red_fg, const int green_fg, const int blue_fg, 118 | const int red_bg, const int green_bg, const int blue_bg); 119 | #else 120 | 121 | /*! 122 | * \brief Prints a char of the output image for XHTML. 123 | * 124 | * \param fout stream to print to 125 | * \param ch char to print 126 | * \param red_fg,green_fg,blue_fg foreground color 127 | * \param red_bg,green_bg,blue_bg background color 128 | */ 129 | void print_xhtml_char(FILE *fout, const char* ch, 130 | const int red_fg, const int green_fg, const int blue_fg, 131 | const int red_bg, const int green_bg, const int blue_bg); 132 | #endif 133 | 134 | /*! 135 | * \brief Prints a new line (for XHTML, i.e. "
"). 136 | * 137 | * \param fout stream to print to 138 | */ 139 | void print_xhtml_newline(FILE *fout); 140 | #if ASCII 141 | 142 | /*! 143 | * \brief Converts a char to a HTML entity if necessary. 144 | * 145 | * For example, "<" is converted to "<". 146 | * 147 | * \param ch char to convert 148 | * \return the HTML entity or the original char if a conversion is not necassary 149 | */ 150 | const char* html_entity(const char ch); 151 | #else 152 | 153 | /*! 154 | * \brief Converts a char to a HTML entity if necessary. 155 | * 156 | * For example, "<" is converted to "<". 157 | * 158 | * \param ch char to convert 159 | * \return the HTML entity or the original char if a conversion is not necassary 160 | */ 161 | const char* html_entity(const char* ch); 162 | #endif 163 | 164 | /*! 165 | * \brief Prints the CSS for a HTML/XHTML document. 166 | * 167 | * \param fontsize font size 168 | * \param f stream to print to 169 | */ 170 | void print_css(const int fontsize, FILE *f); 171 | 172 | /*! 173 | * \brief Escapes the title as necesary. 174 | * 175 | * Takes the title in #html_title_raw and escapes chars to HTML entities as necessary and saves the resulting title in #html_title. 176 | * 177 | * \return true if successful, false otherwise 178 | */ 179 | int escape_title(); 180 | 181 | #endif 182 | -------------------------------------------------------------------------------- /tests/jp2a-png-colormap.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ..... 5 | ......... 6 | .......... 7 | ......... 8 | ..... 9 | 10 | 11 | 12 | .,,,,,,,, ,,,,,, ..';;cccc:;,'. 13 | .:::::::: cccccc' .:cccccccccccccc:,. 14 | .:::::::: ccccccccccccccccccccccccccc;. 15 | .:::::::: cccccccccc cccccccccc. 16 | .:::::::: cccccccc ccccccccc. 17 | .:::::::: cccccccc cccccccc: 18 | .:::::::: cccccccc cccccccc 19 | .:::::::: cccccccc cccccccc. 20 | .:::::::: cccccccc cccccccc 21 | .:::::::: cccccccc .cccccccc 22 | .:::::::: cccccccc ;ccccccc, 23 | .:::::::: cccccccc' ,cccccccc 24 | .:::::::: ccccccccc:,.. .,ccccccccc 25 | .:::::::: ccccccccccccccccccccccccccc' 26 | .:::::::: ccccccccccccccccccccccccc. 27 | .:::::::: cccccccc ccccccccccc 28 | .:::::::: cccccccc 29 | ::::::::' cccccccc 30 | .:::::::: cccccccc 31 | .:::::::: cccccccc 32 | .,:::::::. cccccccc 33 | ':::::::. cccccccc 34 | ':::' cccccccc 35 | 36 | 37 | -------------------------------------------------------------------------------- /tests/normal-verbose.txt: -------------------------------------------------------------------------------- 1 | File: jp2a.jpg 2 | Source width: 80 3 | Source height: 50 4 | Source color components: 1 5 | Orientation: 1 (Horizontal/normal) 6 | Output width: 78 7 | Output height: 24 8 | Output palette (23 chars): ' ...',;:clodxkO0KXNWM' 9 | Decompressing image [##....................................................]Decompressing image [###...................................................]Decompressing image [####..................................................]Decompressing image [#####.................................................]Decompressing image [######................................................]Decompressing image [########..............................................]Decompressing image [#########.............................................]Decompressing image [##########............................................]Decompressing image [###########...........................................]Decompressing image [############..........................................]Decompressing image [#############.........................................]Decompressing image [##############........................................]Decompressing image [###############.......................................]Decompressing image [################......................................]Decompressing image [#################.....................................]Decompressing image [##################....................................]Decompressing image [###################...................................]Decompressing image [#####################.................................]Decompressing image [######################................................]Decompressing image [#######################...............................]Decompressing image [########################..............................]Decompressing image [#########################.............................]Decompressing image [##########################............................]Decompressing image [###########################...........................]Decompressing image [############################..........................]Decompressing image [#############################.........................]Decompressing image [##############################........................]Decompressing image [###############################.......................]Decompressing image [################################......................]Decompressing image [#################################.....................]Decompressing image [###################################...................]Decompressing image [####################################..................]Decompressing image [#####################################.................]Decompressing image [######################################................]Decompressing image [#######################################...............]Decompressing image [########################################..............]Decompressing image [#########################################.............]Decompressing image [##########################################............]Decompressing image [###########################################...........]Decompressing image [############################################..........]Decompressing image [#############################################.........]Decompressing image [##############################################........]Decompressing image [################################################......]Decompressing image [#################################################.....]Decompressing image [##################################################....]Decompressing image [###################################################...]Decompressing image [####################################################..]Decompressing image [#####################################################.]Decompressing image [######################################################]Decompressing image [#######################################################] 10 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 11 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 12 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 13 | MMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 14 | MMMMWk:';oXMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxl;,''';cdKWMMMMMMMMMMMMMMMMMMMMMMMMMM 15 | MMMMK, .dMMMMMMMMMMMMMMMMMMMMMMMMMMWo. .cKMMMMMMMMMMMMMMMMMMMMMMMMM 16 | MMMMWx;',oXMMMMMMMMMMMMMMMMMMMMMMMMMMN' . ,KMMMMMMMMMMMMMMMMMMMMMMMM 17 | MMMWOllcllxNMMNklllllOKxlc:cldONMMMMMN;;dO0KOo. dMMMMMWKkdoc:::clokXWMMMM 18 | MMMWc '0MMK, .cOWMMWXWMMMMMMd .kMMMWx'. ... .:0MMM 19 | MMMWc '0MMK, .:oxd:. .xMMMMMMMMMMN: oWMMMNc.,ok0XXXx. :NMM 20 | MMMWc '0MMK, lWMMMWx. :XMMMMMMMMXc .dNMMMMW00WMWNKkdc. ;XMM 21 | MMMWc '0MMK, lWMMMMK, ,KMMMMMMWO, 'OWMMMMMMMXkl;.. .. ;XMM 22 | MMMWc '0MMK, lWMMMMk. :NMMMMM0c. .cKWWWWWMMWx. .oOK: ;XMM 23 | MMMWc '0MMK, .oxOkl. .kMMMMXo. .'''''';OMO. .xMMK; ,0NN 24 | MMMWc '0MMK, .kWMMM0, .xM0' .c:. .,k 25 | MMMNc '0MMK, 'c;,''',:okNMMMMXo;;;;;;;;;;;;;;;c0MW0o;,''',:odc,'',;:oK 26 | MMNx. ,KMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 27 | MXc .dWMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 28 | MMk. 'xNMMMK, lWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 29 | MMWk::okNMMMMMNd::::cOMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 30 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 31 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 32 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 33 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 34 | -------------------------------------------------------------------------------- /src/html.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2006-2016 Christian Stigen Larsen 3 | * Copyright 2020 Christoph Raitzig 4 | * Distributed under the GNU General Public License (GPL) v2. 5 | */ 6 | 7 | #include "config.h" 8 | 9 | #include 10 | #include 11 | #include 12 | #include "html.h" 13 | #include "options.h" 14 | 15 | void print_html_document_start(const int fontsize, FILE *f) { 16 | 17 | fputs("\n" 18 | "\n" 19 | " \n" 20 | " \n", f); 21 | fprintf(f, 22 | " %s\n", html_title); 23 | fputs( 24 | " \n" 28 | " \n" 29 | "\n", f); 30 | } 31 | 32 | void print_html_image_start(FILE *f) { 33 | fputs("
\n", f);
 34 | }
 35 | 
 36 | void print_html_document_end(FILE *f) {
 37 | 	fputs("\n\n", f);
 38 | }
 39 | 
 40 | void print_html_image_end(FILE *f) {
 41 | 	fputs("
\n
\n", f); 42 | } 43 | 44 | #if ASCII 45 | void print_html_char(FILE *f, const char ch, 46 | const int r_fg, const int g_fg, const int b_fg, 47 | const int r_bg, const int g_bg, const int b_bg) 48 | #else 49 | void print_html_char(FILE *f, const char* ch, 50 | const int r_fg, const int g_fg, const int b_fg, 51 | const int r_bg, const int g_bg, const int b_bg) 52 | #endif 53 | { 54 | if ( colorfill ) { 55 | fprintf(f, "%s", 56 | r_fg, g_fg, b_fg, 57 | r_bg, g_bg, b_bg, 58 | html_entity(ch)); 59 | } else 60 | fprintf(f, "%s", 61 | r_fg, g_fg, b_fg, html_entity(ch)); 62 | } 63 | 64 | void print_html_newline(FILE *f) { 65 | fputs("
", f); 66 | } 67 | 68 | void print_xhtml_document_start(const int fontsize, FILE *f) { 69 | 70 | fputs( "\n" 71 | "\n" 73 | "\n" 74 | "\n", f); 75 | fprintf(f, 76 | "%s\n", html_title); 77 | fputs( 78 | "\n" 82 | "\n" 83 | "\n", f); 84 | } 85 | 86 | void print_xhtml_image_start(FILE *f) { 87 | fputs("
\n", f);
 88 | }
 89 | 
 90 | void print_xhtml_document_end(FILE *f) {
 91 | 	fputs("\n\n", f);
 92 | }
 93 | 
 94 | void print_xhtml_image_end(FILE *f) {
 95 | 	fputs("
\n
\n", f); 96 | } 97 | 98 | #if ASCII 99 | void print_xhtml_char(FILE *f, const char ch, 100 | const int r_fg, const int g_fg, const int b_fg, 101 | const int r_bg, const int g_bg, const int b_bg) 102 | #else 103 | void print_xhtml_char(FILE *f, const char* ch, 104 | const int r_fg, const int g_fg, const int b_fg, 105 | const int r_bg, const int g_bg, const int b_bg) 106 | #endif 107 | { 108 | if ( colorfill ) { 109 | fprintf(f, "%s", 110 | r_fg, g_fg, b_fg, 111 | r_bg, g_bg, b_bg, 112 | html_entity(ch)); 113 | } else 114 | fprintf(f, "%s", 115 | r_fg, g_fg, b_fg, html_entity(ch)); 116 | } 117 | 118 | void print_xhtml_newline(FILE *f) { 119 | fputs("
", f); 120 | } 121 | 122 | void print_css(const int fontsize, FILE *f) { 123 | fputs("body {\n", f); 124 | fputs(!invert? 125 | " background-color: white;\n" : "background-color: black;\n", f); 126 | if ( centerx || centery ) 127 | fputs( " margin: 0;\n padding: 0;\n", f); // only perform CSS reset in these conditions for backward compatibility 128 | fputs( "}\n" 129 | ".ascii {\n" 130 | " font-family: Courier;\n", f); // should be a monospaced font 131 | if ( !usecolors ) 132 | fputs(!invert? 133 | " color: black;\n" : " color: white;\n", f); 134 | fprintf(f, 135 | " font-size:%dpt;\n", fontsize); 136 | if ( centerx && centery ) 137 | fprintf(f, 138 | " display: flex;\n min-height: 100vh;\n align-items: center;\n justify-content: center;\n"); 139 | else if ( centerx ) 140 | fprintf(f, 141 | " display: flex;\n justify-content: center;\n"); 142 | else if ( centery ) 143 | fprintf(f, 144 | " display: flex;\n min-height: 100vh;\n align-items: center;\n"); 145 | if ( html_bold ) 146 | fputs( " font-weight: bold;\n", f); 147 | else 148 | fputs( " font-weight: normal;\n", f); 149 | fputs( 150 | "}\n", f); 151 | } 152 | 153 | #if ASCII 154 | const char* html_entity(const char ch) { // if a html entity is larger than 6 155 | // chars, change escape_title accordingly 156 | static char s[2]; 157 | switch ( ch ) { 158 | #else 159 | const char* html_entity(const char* ch) { 160 | switch ( ch[0] ) { 161 | #endif 162 | case ' ': return " "; break; 163 | case '<': return "<"; break; 164 | case '>': return ">"; break; 165 | case '&': return "&"; break; 166 | default: 167 | #if ASCII 168 | s[0]=ch; s[1]=0; return s; break; 169 | #else 170 | return ch; 171 | #endif 172 | } 173 | } 174 | 175 | int escape_title() { 176 | if ( strlen(html_title_raw)==0 ) { 177 | return 1; 178 | } 179 | html_title = calloc(strlen(html_title_raw)*6 +1, sizeof(char)); // at most 180 | // 6 characters are returned by html_entity for each character 181 | if ( html_title==NULL ) { 182 | return 0; 183 | } 184 | int j = 0; 185 | int sizeNew; 186 | char* newChar; 187 | for (int i = 0; i < strlen(html_title_raw); i++) { 188 | if ( html_title_raw[i]=='&' ) { // otherwise HTML entities could not be 189 | // used on purpose 190 | html_title[j++] = '&'; 191 | continue; 192 | } 193 | #if ASCII 194 | const char* newChar = html_entity(html_title_raw[i]); 195 | #else 196 | char tempString[2]; 197 | tempString[0] = html_title_raw[i]; 198 | tempString[1] = '\0'; 199 | const char* newChar = html_entity(tempString); 200 | #endif 201 | sizeNew = strlen(newChar); 202 | for (int k = 0; k < sizeNew; k++) { 203 | html_title[j+k] = newChar[k]; 204 | } 205 | j += sizeNew; 206 | } 207 | if ( realloc(html_title, (j+1) * sizeof(char))==NULL ) 208 | return 0; 209 | return 1; 210 | } 211 | -------------------------------------------------------------------------------- /configure.ac: -------------------------------------------------------------------------------- 1 | # -*- Autoconf -*- 2 | # Process this file with autoconf to produce a configure script. 3 | 4 | AC_PREREQ([2.69]) 5 | AC_INIT([jp2a],[1.3.3],[chris-r@posteo.net], [jp2a], [https://github.com/Talinx/jp2a]) 6 | m4_ifdef([DX_INIT_DOXYGEN], 7 | [doc=true 8 | DX_INIT_DOXYGEN([jp2a])],[doc=false]) 9 | AM_INIT_AUTOMAKE(dist-bzip2 dist-zip) 10 | AM_CONDITIONAL([DOC], [test x$doc = xtrue]) 11 | AC_CONFIG_SRCDIR(src/jp2a.c) 12 | AC_CONFIG_HEADERS([config.h]) 13 | AC_CONFIG_FILES([Makefile src/Makefile]) 14 | 15 | # Checks for programs. 16 | AC_PROG_CC 17 | 18 | # Checks for libraries. 19 | AC_ARG_WITH([jpeg-include], 20 | AS_HELP_STRING([--with-jpeg-include=PATH],[specify path to directory containing jpeglib.h -- http://www.ijg.org/]), 21 | [CPPFLAGS="$CPPFLAGS -I$withval"]) 22 | 23 | AC_ARG_WITH([jpeg-lib], 24 | AS_HELP_STRING([--with-jpeg-lib=PATH],[specify path to directory containing jpeglib lib file -- http://www.ijg.org/]), 25 | [LDFLAGS="$LDFLAGS -L$withval"]) 26 | 27 | AC_ARG_WITH([jpeg-prefix], 28 | AS_HELP_STRING([--with-jpeg-prefix=PATH],[this is the same as --with-jpeg-include=PATH/include and --with-jpeg-lib=PATH/lib]), 29 | [CPPFLAGS="$CPPFLAGS -I$withval/include" LDFLAGS="$LDFLAGS -L$withval/lib"]) 30 | 31 | AC_ARG_WITH([curl-config], 32 | AS_HELP_STRING([--with-curl-config=PATH],[specify path to curl-config]), 33 | [curl_config_path="$withval" enable_curl="yes"], 34 | [curl_config_path="$PATH"]) 35 | 36 | AC_CHECK_LIB([jpeg], [jpeg_start_decompress], [LIBS="$LIBS -ljpeg"]) 37 | AC_CHECK_LIB([png], [png_create_read_struct], [LIBS="$LIBS -lpng"]) 38 | AC_CHECK_LIB([webp], [WebPGetInfo], [LIBS="$LIBS -lwebp"]) 39 | AC_CHECK_LIB([exif], [exif_data_new_from_file], [LIBS="$LIBS -lexif"]) 40 | # jp2a uses isfinite from math.h but that can be implemented as a macro so search for another actual function (floor) instead 41 | AC_SEARCH_LIBS([floor], [m]) 42 | 43 | if test "x$ac_cv_lib_jpeg_jpeg_start_decompress" != "xyes" ; then 44 | AC_MSG_ERROR([I need a working jpeglib; please specify --with-jpeg-lib=PATH or see --help for more explicit options. 45 | 46 | On many systems, this is installed in /usr/local/lib/ so you can try --with-jpeg-prefix=/usr/local/ 47 | ]) 48 | fi 49 | 50 | AC_ARG_ENABLE([curl], 51 | AS_HELP_STRING([--enable-curl],[enable to be to use libcurl (http://curl.haxx.se) to download images from the net (default: yes)]), 52 | [enable_curl=$enableval], 53 | [enable_curl="yes"]) 54 | 55 | AC_ARG_ENABLE([termlib], 56 | AS_HELP_STRING([--enable-termlib],[enable to use term/curses for detecting terminal dimensions (default: yes)]), 57 | [enable_termlib=$enableval], 58 | [enable_termlib="yes"]) 59 | 60 | AC_ARG_ENABLE([pure-ascii], 61 | AS_HELP_STRING([--enable-pure-ascii],[only support ASCII (and not UTF-8 or other character encodings) and ignore the locale (default: no)]), 62 | [pure_ascii=$enableval], 63 | [pure_ascii="no"]) 64 | 65 | AC_MSG_CHECKING([enable-curl]) 66 | AC_MSG_RESULT([$enable_curl]) 67 | 68 | if test "x$enable_curl" = "xyes" ; then 69 | AC_PATH_PROGS([curl_config], [curl-config], [no], [$curl_config_path]) 70 | 71 | if test "x$curl_config" != "xno" ; then 72 | curl_cflags="`$curl_config --cflags`" 73 | curl_libs="`$curl_config --libs`" 74 | CPPFLAGS="$CPPFLAGS $curl_cflags" 75 | 76 | AC_MSG_CHECKING([curl-config --cflags]) 77 | AC_MSG_RESULT([$curl_cflags]) 78 | 79 | AC_MSG_CHECKING([curl-config --libs]) 80 | AC_MSG_RESULT([$curl_libs]) 81 | fi 82 | 83 | if test "x$curl_libs" = "x" ; then 84 | curl_libs="-lcurl" 85 | fi 86 | 87 | AC_CHECK_LIB([curl], [curl_easy_init], [LIBS="$LIBS $curl_libs" AC_DEFINE([FEAT_CURL], [1], [Found working libcurl environment])], [ 88 | AC_MSG_WARN([I need a working libcurl (use --with-curl-config=PATH); download-support will be disabled]) 89 | enable_curl="no" 90 | ]) 91 | fi 92 | 93 | if test "x$pure_ascii" = "xyes" ; then 94 | AC_DEFINE([ASCII], [1], [only support ASCII, not UTF-8 or other encodings]) 95 | fi 96 | 97 | AC_CHECK_HEADER([jpeglib.h], 98 | [ AC_DEFINE([HAVE_JPEGLIB_H], [1], [Define to 1 if you have header file.]) ], 99 | [ AC_MSG_ERROR([required header file jpeglib.h not found, use --with-jpeg-include=PATH or see --help]) ]) 100 | 101 | if test "x$enable_curl" = "xyes" ; then 102 | AC_CHECK_HEADER([curl/curl.h], 103 | [ AC_DEFINE([HAVE_CURL_CURL_H], [1], [Define to 1 if you have the header file]) ], 104 | [ AC_MSG_WARN([required header file curl/curl.h not found, libcurl will be disabled (see --help)]) ]) 105 | fi 106 | 107 | AC_CHECK_HEADERS([fcntl.h curses.h term.h ncurses/term.h math.h limits.h locale.h stdlib.h string.h unistd.h wchar.h setjmp.h]) 108 | 109 | if test "$enable_termlib" = "yes" ; then 110 | 111 | # Some GNU/Linux systems (e.g., SuSE 4.3, 1996) don't have curses, but 112 | # rather ncurses. So we check for it. 113 | TERMLIBS= 114 | # Check for termlib before termcap because Solaris termcap needs libucb. 115 | TERMLIB_VARIANTS="ncurses curses termlib termcap terminfo" 116 | for termlib in ${TERMLIB_VARIANTS}; do 117 | AC_CHECK_LIB(${termlib}, tgetent, 118 | [TERMLIBS="${TERMLIBS} -l${termlib}"; break]) 119 | done 120 | # don't bother warning on djgpp, it doesn't have a term library, it 121 | # ports each termcap-needing program separately according to its needs. 122 | if test -z "$TERMLIBS" && echo "$build" | grep -v djgpp >/dev/null; then 123 | AC_MSG_WARN([probably need a terminal library, one of: ${TERMLIB_VARIANTS}]) 124 | else 125 | LIBS="$LIBS $TERMLIBS" 126 | AC_DEFINE([FEAT_TERMLIB], [1], [Found working term/curses environment]) 127 | fi 128 | 129 | fi 130 | 131 | # Checks for bash-completion 132 | PKG_CHECK_VAR(bashcompdir, [bash-completion], [completionsdir], , 133 | bashcompdir="${sysconfdir}/bash_completion.d") 134 | AC_SUBST(bashcompdir) 135 | PKG_CHECK_VAR(zshcompdir, [zsh-completion], [zshcompletionsdir], , 136 | zshcompdir="${datarootdir}/zsh/site-functions") 137 | AC_SUBST(zshcompdir) 138 | 139 | # Checks for typedefs, structures, and compiler characteristics. 140 | AC_C_CONST 141 | AC_C_INLINE 142 | AC_C_RESTRICT 143 | AC_TYPE_SIZE_T 144 | AC_CHECK_HEADER_STDBOOL 145 | 146 | # Checks for library functions. 147 | AC_FUNC_FORK 148 | AC_TYPE_PID_T 149 | AC_CHECK_FUNCS([memset atexit mbrlen memset setlocale strerror]) 150 | 151 | AC_HEADER_ASSERT 152 | 153 | AC_OUTPUT 154 | -------------------------------------------------------------------------------- /tests/dalsnuten-256.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jp2a converted image 6 | 17 | 18 | 19 |
20 | KKKKKKKKKKKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKK00000000000OOOOOOOOkkkkkkkkxxxxxxddddddooooooooolll
21 | KXXXXXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKK00000000OOOOOOOOOkkkkkkkkxxxxxxdddddddoooooooo
22 | XXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKK000000000OOOOOOOOOkkkkkkkxxxxxxddddddooooooo
23 | XXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXKKKKKKKKKKK000000000OOOOOOOOkkkkkkkxxxxxxdddddddooooo
24 | XXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXKKKKKKKKKKK00000000OOOOOOOOOkkkkkxxxxxxxxddddddoooo
25 | NNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXKKKKKKKKKK00000000OOOOOOOOkkkkkkkxxxxxxddddddddo
26 | NNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXKKKKKKKKK000000000OOOOOOOkkkkkkxxxxxxdddddddd
27 | NNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXKKKKKKKKK00000000OOOOOOOkkkkkkkxxxxxxdddddd
28 | NWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKKK00000000OOOOOOOOkkkkkkkxxxxxddddd
29 | WWWWWWWWWWMMMMMMMMMMMMMMMMMWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKK000000000OOOOOOOkkkkkkxxxxxxxddd
30 | WWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNXXXXXXXXXXXKKKKKKKKK0000000000OOOOOOOkkkkkkxxxxxxxd
31 | WWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKK000000000OOOOOOOkkkkkkkkxxxxx
32 | WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKKK00000000OOOOOOOOkkkkkkkkxxxx
33 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKK00000000OOOOOOOOkkkkkkkkxxxx
34 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNXXXXXXXXXXXKKKKKKKK00000000OOOOOOOkkkkkkxxxxxx
35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKK00000000OOOOOOkkkkkkxxxxxx
36 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNXXXXXXXXKKKKKKKKKK000000OOOOOOOkkkkkkkxxxxx
37 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWNXK0OOO00XNNNNNNNNNNXXXXXXXXXXKKKKKKKK0000000OOOOOOkkkkkkkxxxxxxd
38 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNXXK00OOkxoool:::;;;;;;;:okXNNNNXXXXXXXXXKKKKKKKKK0000000OOOOOOOkkkkkkxxxxxxddd
39 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWX0xdlc:::::;;;;;;,,,,,,,,,'''''',:ldkOKXXXXXKKKKKKKKK0000000OOOOOOOkkkkkkxxxxxxxdddd
40 | dxxO0KXXXNNWWWMMMMMMMMMWNXKK00XNWMMMMMMNKkoc::::::;;;;;,,,,,,,''''''''''..........';;:codk0KKK00000000OOOOOOkkkkkkkxxxxxxddddddo
41 | ::ccclllooodddxxxxxxxxddxxddollcclooooc;;,,,,,,,,,,,,,'''...................................;clddlccc;;:;:;:lddd::,',';,lolcc;::
42 | ,;;;:::ccccclllcllccc:::::clcc;;;;;,''........................................                                                  
43 | '',,,;;;::::::::::::;;;,,,,,,;;,''''''...................................                                                       
44 | ..''',,,;;;;;;;,,,,,,,''''.....'''.........................                                                                     
45 | ......''''''''''''''''..........................                                                                                
46 | ............''................................                                                                                  
47 | ...........................................                                                                                     
48 | ...................................  ........                                                                                   
49 |  ...'''...',,,,,,,,,,,,,,,,,,,''''',,;;;;;;;;;,.         .........                                                              
50 | ....','.',:ldxdddxxxxxxddooddollllooolllllllcc:.           ......                                                               
51 | ......',;cox0XX0kkkxxdl:,',cc,....,''''......''.                                                                                
52 |  .....,:lodOWMWOxxxdxxl,'.',............                                                                                        
53 | .....';;cxKWMMMWXXKOOx;'''......                                                                                                
54 | .'';,;;;cd0XWMWX0xoc;''.......                                                                                                  
55 | ......,;:cdxkkxocc:;,''.....                                                                                                    
56 | .......',;;:::;,,''............                                                                                                 
57 |  ........'''''.................                                                                                                 
58 |  ..  .................. .                                                                                                       
59 |        ..............                                                                                                           
60 |              . .                                                                                                                
61 |                                                                                                                                 
62 |                                                                                                                                 
63 |                                                                                                                                 
64 |                                                                                                                                 
65 |                                                                                                                                 
66 |                                                                                                                                 
67 |                                                                                                                                 
68 | 
69 |
70 | 71 | 72 | -------------------------------------------------------------------------------- /tests/dalsnuten-256-light.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jp2a converted image 6 | 17 | 18 | 19 |
20 | ........................................................................................'''''''',,,,,,,,;;;;;;::::::ccccccccclll
21 | ........................                      ............................................''''''''',,,,,,,,;;;;;;:::::::cccccccc
22 | ....................                               ..........................................''''''''',,,,,,,;;;;;;::::::ccccccc
23 | ..........                                              .......................................'''''''',,,,,,,;;;;;;:::::::ccccc
24 | ....                                                          ..................................''''''''',,,,,;;;;;;;;::::::cccc
25 |                                                                    ...............................'''''''',,,,,,,;;;;;;::::::::c
26 |                                                                        ..............................''''''',,,,,,;;;;;;::::::::
27 |                                                                          .............................''''''',,,,,,,;;;;;;::::::
28 |                                                                            ............................'''''''',,,,,,,;;;;;:::::
29 |                                                                              ............................''''''',,,,,,;;;;;;;:::
30 |                                                                              ..............................''''''',,,,,,;;;;;;;:
31 |                                                                                 ............................''''''',,,,,,,,;;;;;
32 |                                                                                 ............................'''''''',,,,,,,,;;;;
33 |                                                                                   ..........................'''''''',,,,,,,,;;;;
34 |                                                                                   ...........................''''''',,,,,,;;;;;;
35 |                                                                                    ...........................'''''',,,,,,;;;;;;
36 |                                                                                      ........................''''''',,,,,,,;;;;;
37 |                                                                 ...'''...          .........................'''''',,,,,,,;;;;;;:
38 |                                                   .....'',;cccldddxxxxxxxdc,.    .........................''''''',,,,,,;;;;;;:::
39 |                                             ..;:lodddddxxxxxxkkkkkkkkkOOOOOOkdl:,'......................''''''',,,,,,;;;;;;;::::
40 | :;;'.....                ......         .,coddddddxxxxxkkkkkkkOOOOOOOOOO0000000000Oxxdoc:,............'''''',,,,,,,;;;;;;::::::c
41 | ddooolllccc:::;;;;;;;;::;;::clloolccccoxxkkkkkkkkkkkkkOOO0000KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0xol::loooxxdxdxdl:::ddkOkOxklclooxdd
42 | kxxxdddooooolllollooodddddolooxxxxxkOO000000000000000KKKKKKXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWW
43 | OOkkkxxxddddddddddddxxxkkkkkkxxkOOOOOO000KKKKXKKKKKXXXXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNWNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWMMMMMM
44 | 00OOOkkkxxxxxxxkkkkkkkOOOO00000OOO00KKKKKKKKKXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWNNNNNWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMM
45 | K00000OOOOOOOOOOOOOOOO0000KKKKKKK0000KKKXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMM
46 | KKK000000000OO000000000KKKKKKKXXXXXKKKKXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMM
47 | XKKKKK00000000000KKKKKKKKKXXXXXXXXXXXXXXXXXNNNNNNNNWWWWWWNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMM
48 | XXXKKKKKKKK00000000000KKKKKXXXXXXXXNNXXXXXXXXNNNNWWWWWWWWWNNNNNNNNWNNWWWWWWWWMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
49 | NXXKOOO0K0OkkkkkkkkkkkkkkkkkkkOOOOOkkxxxxxxxxxkKWWWWWWWWW000KKXXKXNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWW
50 | XXK0OkO0Okdl:;:::;;;;;;::cc::cllllcccllllllloodKWWWWWWWWWNN000KXXNNNNNWWNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMWMMW
51 | XXK000Okxoc;....,,,;;:ldkOkook0000kOOOO0000K0OO0NNNNNNWNNWWWWNNNNNWWWWWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWWMMMMM
52 | NXXXK0kdlc:'   ';;;:;;lkO0Ok0KXXXXK00KXXNNNNNNNNNWWWWWNNNNNNNNWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWMMMMMMWWWWWWWWWWWWWMWWMWWMWWMMMMMMMM
53 | XKK00Oxxo;.     ...'';xOOO0KKXXXNNNNNNNNNWWWNNWWWWNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWMMMWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMM
54 | KOOxkxxxo:..   ..;coxOO0KKKXXXNNNNNNNNWWWWNNWWNNNNNNNWWWWWWWWWWWWWWWWWWWWMMMMMMMMWWWWWWWWWWWWWWWWWWWWWMWMMMMMMMMMMMMMMMMMMMMMMMM
55 | XXXKK0kxdo:;,,;coodxkOO0KKXXNNNNWNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWMWWMMMMMMWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMWWMMMMMMMM
56 | XXXKKK0OkxxdddxkkOO000000KKKXXXNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
57 | NXXXXKK00OOOOO000000KKKKKXXXXXXNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
58 | NXXNNXXXKKK00KKKKKXKXXXNXNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
59 | NNNNNNNXXXXXXXXXXXXXXNNNNNNNWWWNNWWWNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
60 | WWWNNNNNNNNNNXNXNNNNNNNWNNNNWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMM
61 | WWWWNNNWNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWWWMMMMMMMMMMMMMMMMWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
62 | WWWWWWWWWWWNNNWWNWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
63 | MWWWWWWWWWWWWWWWNWNNNNWWWWWWWWWWWWWWWWWWWMWWMMMMMMMMMMMMMMMMMMMMMMMWMWWMWWWWWMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW
64 | MWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWWMMMMMMMMMMMMMMMMMMMMMMWWWWMMWMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
65 | WWWWWWWWWWWWWWWWWWWWWMMMMWWWWMMMMMWMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMM
66 | WWWWWWWMWWWWWWMWMWWWMMMMWMWMMMMMMMMMMMMMMMMMMMMWMMWMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
67 | MWWWMWMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
68 | 
69 |
70 | 71 | 72 | -------------------------------------------------------------------------------- /tests/dalsnuten-256-x.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jp2a converted image 6 | 17 | 18 | 19 |
20 | KKKKKKKKKKKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKK00000000000OOOOOOOOkkkkkkkkxxxxxxddddddooooooooolll
21 | KXXXXXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKK00000000OOOOOOOOOkkkkkkkkxxxxxxdddddddoooooooo
22 | XXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKK000000000OOOOOOOOOkkkkkkkxxxxxxddddddooooooo
23 | XXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXKKKKKKKKKKK000000000OOOOOOOOkkkkkkkxxxxxxdddddddooooo
24 | XXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXKKKKKKKKKKK00000000OOOOOOOOOkkkkkxxxxxxxxddddddoooo
25 | NNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXKKKKKKKKKK00000000OOOOOOOOkkkkkkkxxxxxxddddddddo
26 | NNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXKKKKKKKKK000000000OOOOOOOkkkkkkxxxxxxdddddddd
27 | NNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXKKKKKKKKK00000000OOOOOOOkkkkkkkxxxxxxdddddd
28 | NWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKKK00000000OOOOOOOOkkkkkkkxxxxxddddd
29 | WWWWWWWWWWMMMMMMMMMMMMMMMMMWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKK000000000OOOOOOOkkkkkkxxxxxxxddd
30 | WWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNXXXXXXXXXXXKKKKKKKKK0000000000OOOOOOOkkkkkkxxxxxxxd
31 | WWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKK000000000OOOOOOOkkkkkkkkxxxxx
32 | WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKKK00000000OOOOOOOOkkkkkkkkxxxx
33 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKK00000000OOOOOOOOkkkkkkkkxxxx
34 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNXXXXXXXXXXXKKKKKKKK00000000OOOOOOOkkkkkkxxxxxx
35 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNXXXXXXXXXXKKKKKKKKK00000000OOOOOOkkkkkkxxxxxx
36 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWNNNNNNNNNNNNNNNXXXXXXXXKKKKKKKKKK000000OOOOOOOkkkkkkkxxxxx
37 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWWWWNXK0OOO00XNNNNNNNNNNXXXXXXXXXXKKKKKKKK0000000OOOOOOkkkkkkkxxxxxxd
38 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNXXK00OOkxoool:::;;;;;;;:okXNNNNXXXXXXXXXKKKKKKKKK0000000OOOOOOOkkkkkkxxxxxxddd
39 | MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWX0xdlc:::::;;;;;;,,,,,,,,,'''''',:ldkOKXXXXXKKKKKKKKK0000000OOOOOOOkkkkkkxxxxxxxdddd
40 | dxxO0KXXXNNWWWMMMMMMMMMWNXKK00XNWMMMMMMNKkoc::::::;;;;;,,,,,,,''''''''''..........';;:codk0KKK00000000OOOOOOkkkkkkkxxxxxxddddddo
41 | ::ccclllooodddxxxxxxxxddxxddollcclooooc;;,,,,,,,,,,,,,'''...................................;clddlccc;;:;:;:lddd::,',';,lolcc;::
42 | ,;;;:::ccccclllcllccc:::::clcc;;;;;,''........................................                                                  
43 | '',,,;;;::::::::::::;;;,,,,,,;;,''''''...................................                                                       
44 | ..''',,,;;;;;;;,,,,,,,''''.....'''.........................                                                                     
45 | ......''''''''''''''''..........................                                                                                
46 | ............''................................                                                                                  
47 | ...........................................                                                                                     
48 | ...................................  ........                                                                                   
49 |  ...'''...',,,,,,,,,,,,,,,,,,,''''',,;;;;;;;;;,.         .........                                                              
50 | ....','.',:ldxdddxxxxxxddooddollllooolllllllcc:.           ......                                                               
51 | ......',;cox0XX0kkkxxdl:,',cc,....,''''......''.                                                                                
52 |  .....,:lodOWMWOxxxdxxl,'.',............                                                                                        
53 | .....';;cxKWMMMWXXKOOx;'''......                                                                                                
54 | .'';,;;;cd0XWMWX0xoc;''.......                                                                                                  
55 | ......,;:cdxkkxocc:;,''.....                                                                                                    
56 | .......',;;:::;,,''............                                                                                                 
57 |  ........'''''.................                                                                                                 
58 |  ..  .................. .                                                                                                       
59 |        ..............                                                                                                           
60 |              . .                                                                                                                
61 |                                                                                                                                 
62 |                                                                                                                                 
63 |                                                                                                                                 
64 |                                                                                                                                 
65 |                                                                                                                                 
66 |                                                                                                                                 
67 |                                                                                                                                 
68 | 
69 |
70 | 71 | 72 | -------------------------------------------------------------------------------- /tests/dalsnuten-256-light-x.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | jp2a converted image 6 | 17 | 18 | 19 |
20 | ........................................................................................'''''''',,,,,,,,;;;;;;::::::ccccccccclll
21 | ........................                      ............................................''''''''',,,,,,,,;;;;;;:::::::cccccccc
22 | ....................                               ..........................................''''''''',,,,,,,;;;;;;::::::ccccccc
23 | ..........                                              .......................................'''''''',,,,,,,;;;;;;:::::::ccccc
24 | ....                                                          ..................................''''''''',,,,,;;;;;;;;::::::cccc
25 |                                                                    ...............................'''''''',,,,,,,;;;;;;::::::::c
26 |                                                                        ..............................''''''',,,,,,;;;;;;::::::::
27 |                                                                          .............................''''''',,,,,,,;;;;;;::::::
28 |                                                                            ............................'''''''',,,,,,,;;;;;:::::
29 |                                                                              ............................''''''',,,,,,;;;;;;;:::
30 |                                                                              ..............................''''''',,,,,,;;;;;;;:
31 |                                                                                 ............................''''''',,,,,,,,;;;;;
32 |                                                                                 ............................'''''''',,,,,,,,;;;;
33 |                                                                                   ..........................'''''''',,,,,,,,;;;;
34 |                                                                                   ...........................''''''',,,,,,;;;;;;
35 |                                                                                    ...........................'''''',,,,,,;;;;;;
36 |                                                                                      ........................''''''',,,,,,,;;;;;
37 |                                                                 ...'''...          .........................'''''',,,,,,,;;;;;;:
38 |                                                   .....'',;cccldddxxxxxxxdc,.    .........................''''''',,,,,,;;;;;;:::
39 |                                             ..;:lodddddxxxxxxkkkkkkkkkOOOOOOkdl:,'......................''''''',,,,,,;;;;;;;::::
40 | :;;'.....                ......         .,coddddddxxxxxkkkkkkkOOOOOOOOOO0000000000Oxxdoc:,............'''''',,,,,,,;;;;;;::::::c
41 | ddooolllccc:::;;;;;;;;::;;::clloolccccoxxkkkkkkkkkkkkkOOO0000KKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0xol::loooxxdxdxdl:::ddkOkOxklclooxdd
42 | kxxxdddooooolllollooodddddolooxxxxxkOO000000000000000KKKKKKXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWW
43 | OOkkkxxxddddddddddddxxxkkkkkkxxkOOOOOO000KKKKXKKKKKXXXXXXXXXXXXXXXXXXXXXXNNNNNNNNNNNNNNNWNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWMMMMMM
44 | 00OOOkkkxxxxxxxkkkkkkkOOOO00000OOO00KKKKKKKKKXXXXXXXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWNNNNNWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMM
45 | K00000OOOOOOOOOOOOOOOO0000KKKKKKK0000KKKXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMM
46 | KKK000000000OO000000000KKKKKKKXXXXXKKKKXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMM
47 | XKKKKK00000000000KKKKKKKKKXXXXXXXXXXXXXXXXXNNNNNNNNWWWWWWNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMM
48 | XXXKKKKKKKK00000000000KKKKKXXXXXXXXNNXXXXXXXXNNNNWWWWWWWWWNNNNNNNNWNNWWWWWWWWMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
49 | NXXKOOO0K0OkkkkkkkkkkkkkkkkkkkOOOOOkkxxxxxxxxxkKWWWWWWWWW000KKXXKXNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWW
50 | XXK0OkO0Okdl:;:::;;;;;;::cc::cllllcccllllllloodKWWWWWWWWWNN000KXXNNNNNWWNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMWMMW
51 | XXK000Okxoc;....,,,;;:ldkOkook0000kOOOO0000K0OO0NNNNNNWNNWWWWNNNNNWWWWWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWWMMMMM
52 | NXXXK0kdlc:'   ';;;:;;lkO0Ok0KXXXXK00KXXNNNNNNNNNWWWWWNNNNNNNNWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWMMMMMMWWWWWWWWWWWWWMWWMWWMWWMMMMMMMM
53 | XKK00Oxxo;.     ...'';xOOO0KKXXXNNNNNNNNNWWWNNWWWWNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWMMMWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMM
54 | KOOxkxxxo:..   ..;coxOO0KKKXXXNNNNNNNNWWWWNNWWNNNNNNNWWWWWWWWWWWWWWWWWWWWMMMMMMMMWWWWWWWWWWWWWWWWWWWWWMWMMMMMMMMMMMMMMMMMMMMMMMM
55 | XXXKK0kxdo:;,,;coodxkOO0KKXXNNNNWNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWMWWMMMMMMWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMWWMMMMMMMM
56 | XXXKKK0OkxxdddxkkOO000000KKKXXXNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
57 | NXXXXKK00OOOOO000000KKKKKXXXXXXNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
58 | NXXNNXXXKKK00KKKKKXKXXXNXNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
59 | NNNNNNNXXXXXXXXXXXXXXNNNNNNNWWWNNWWWNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
60 | WWWNNNNNNNNNNXNXNNNNNNNWNNNNWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMM
61 | WWWWNNNWNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWWWMMMMMMMMMMMMMMMMWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
62 | WWWWWWWWWWWNNNWWNWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
63 | MWWWWWWWWWWWWWWWNWNNNNWWWWWWWWWWWWWWWWWWWMWWMMMMMMMMMMMMMMMMMMMMMMMWMWWMWWWWWMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW
64 | MWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWWMMMMMMMMMMMMMMMMMMMMMMWWWWMMWMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
65 | WWWWWWWWWWWWWWWWWWWWWMMMMWWWWMMMMMWMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMM
66 | WWWWWWWMWWWWWWMWMWWWMMMMWMWMMMMMMMMMMMMMMMMMMMMWMMWMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
67 | MWWWMWMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
68 | 
69 |
70 | 71 | 72 | -------------------------------------------------------------------------------- /tests/grind-ANSI-fill.txt: -------------------------------------------------------------------------------- 1 | '''..,,,;lxoxXOXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW 2 | '....',',;;:cookWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWM 3 | ,'.......,;;;;lOXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNWW 4 | .......'..'',:o0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNWMM 5 |  .....;,..,,,:lxXMMMMMMWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM 6 | ......,;'c',:lclxkO0XXXXXXXXXNNNNNNNNNNNNNNNNNNNWWWWWWMMMMMMMMMMMMMMMMMMMMMMMM 7 | '. ...':.',lcc;;lldkO0KKKXXXXXXXXXXXKKKKKKKKKXXXXXXNNNWWWWWMMMMWWWWWWWWWWWMMMM 8 | ..........,',,,cxO0000000KKKKKK0O000OOkOO00O000O0KKKKKXXXNNNNXK0000KXKK0000OOO 9 | ''......''c:clxkO0000OOkOOkOOxllldxdollodkOOOkkdxkkxxk00KKKKK0xdxxkO0OOOkkxxxd 10 | ...,..;.::kkOOkkkkkkkkxdddoxxo::cllolccldxkkkoxxdxkxkO000KKKKK0OkOO0000O0Okkkk 11 | ..','.,;:;dkkkxxxxxxoc:cldoddollooodddddxddxklxxkkkkOOOOOOOOkkkkkkkkkkkkkkkkxx 12 | .......,;';ccllcoxxdoloodxdxxxxxxxxxkkkkkkkkdoxkxxxxkkkkkkkkkxxxxxxddddddddddd 13 | ...''...''',,,:cloooxxxxxdooldddxxkxkxxxxxxxldxxkxxxxxkkkxxxdxxxxxdddoddooooll 14 | ....:cccclccc::ccccclOXXXXXKkoolllodxxkdkkkkokkkOOkkxdxxxxdxdxxddddolloddollll 15 | ....,ccccl,:lc,::;::o0XNOxNNxk0xlccoodddxxxdlkkkkxxxkxxxddddddddddooloolllllll 16 | .'.....,oo':c:.::,cdKko0xlWWco0Odc;;:looddllcddddddddddoooooooolllllclcccl:::c 17 |  .' ........''.',':ll;':llOk:''lxl,;;;';ol:;;cdxkxoodxxdooodlclccc:;:cllclccc: 18 |  ... '..;;.':,.'..'lkc.cl,'',',:c:';;,':c:,,,';;;:xocoolododl:::cc;llccc::cc:, 19 |  ... ...''.','....lc;'.,;',''''cdo.cc'....'''..';c:,.';c::;;c;.',''''',''..'.. 20 |  ... ...... ...',';ll;.;:,ccc:,,,,,,,'...''.'. ........,;;;;'..,....';,.. .   21 |  .. ...  ..''.;d,l0Kc.ox,KXXl,cl'.;ol.,;,,',. ......'....',.... ...  .... 22 |  .. ....,,..;''::,';;,ccc;,:lc''''.,:;;,'..;,,...... ..,,...      .... 23 |  ...,lxdxOdxKKd:dxlOOOl,lxddol:.,::,...,;;'.......... ....''''......'. 24 |  ...,cloddxxddxxxkkkkkxxdddcdddoc;,;,. ............';::;;;;,,; 25 |  ........':loooddxddddddddl;,::...;llll:::;,'...''......  .... .. ..,'..,;::; 26 |  ...;coodddddddddxdddodc''..   .cooooololllllllccc:;,.............. .,::c 27 |  .....,coddxxxxxxxxxxxxdol.'. .lodddddddoddoooodooolc:'';;,',;;,;;:c::;;;:cc: 28 | ......'codxkkkkkkkxxxdddolcc:, ,ddxkkxxkkxxddddddoooooolcccc:,,,,,,;::c;:c:::c 29 | ......:oodxkkkkxkxxxxdddooollc:ldxxkkkxxkxxxddoddddoooodololl;','';;;clccll::: 30 | --------------------------------------------------------------------------------