ASCII renderer in pure java with no external dependencies

Overview

Java ASCII Render

Maven Central Build Status Quality Gate Status Lines of Code GitHub

ASCII renderer in pure java with no external dependencies. Java ASCII Render supports graphical primitives/elements, layers, context, canvas.

                               EXPERIMENTAL RESULT                              
                                                                                
    Theme: Teleportation of matter through extremely dense elements             
                                                                                
    Date: 1998-11-19                                                            
    Time: 08:47                                                                 
    Subject: Gordon Freeman                                                     
                                                                                
    ┌──────────────────────────────────────┐    Observation of Einstein-Podo    
    │ 1.00┼****                       *****│    lsky-Rosen Entanglement on S    
    │ 0.75┼   ***                   ***    │    upraquantum Structures by In    
    │ 0.50┼     **                 **      │    duction Through Nonlinear Tr    
    │ 0.25┼       **             **        │    ansuranic Crystal of Extreme    
    │ 0.00┼        **           **         │    ly Long Wavelength (ELW) Pul    
    │-0.25┼         ***       ***          │    se from Mode-Locked Source A    
    │-0.50┼           *********            │    rray shows a very promising     
    │-0.75┼               *                │    result.                         
    │-1.00┼───────┼───────┼───────┼───────┼│                                    
    │     0      90      180     270    360│                 *******************
    └──────────────────────────────────────┘                 CONCLUSION: APPROVE

Download and Install

To download and install Java ASCII Render you currently have the following options.

Maven

Add dependency to com.indvd00m.ascii.render:ascii-render:

	<dependency>
		<groupId>com.indvd00m.ascii.render</groupId>
		<artifactId>ascii-render</artifactId>
		<version>2.2.0</version>
	</dependency>

Plain-old JAR

Download the following JARs and add them to your classpath:

Compatibility

Java ASCII Render requires Java 6 (or higher).

Available graphical elements and usage examples

Rectangle

┌──────────────────┐
│                  │
│                  │
│                  │
│                  │
│                  │
│                  │
│                  │
│                  │
└──────────────────┘
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(20).height(10);
		builder.element(new Rectangle());
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Dot

┌──────────────────┐
│                  │
│                  │
│                  │
│                  │
│         *        │
│                  │
│                  │
│                  │
└──────────────────┘
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(20).height(10);
		builder.element(new Rectangle());
		builder.element(new Dot());
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Line

┌──────────────────┐
│                  │
│ ●●               │
│   ●●●            │
│      ●●●         │
│         ●●●      │
│            ●●●   │
│               ●● │
│                  │
└──────────────────┘

		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(20).height(10);
		builder.element(new Rectangle());
		builder.element(new Line(new Point(2, 2), new Point(17, 7)));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Circle

┌──────────────────┐
│       ***        │
│      *   *       │
│     *     *      │
│     *     *      │
│     *     *      │
│      *   *       │
│       ***        │
│                  │
└──────────────────┘
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(20).height(10);
		builder.element(new Rectangle());
		builder.element(new Circle(9, 4, 3));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Ellipse

┌──────────────────┐
│     *******      │
│   **       **    │
│                  │
│ *             *  │
│                  │
│   **       **    │
│     *******      │
│                  │
└──────────────────┘
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(20).height(10);
		builder.element(new Rectangle());
		builder.element(new Ellipse(9, 4, 14, 6));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Label

Single-line string.

┌──────────────────┐
│                  │
│                  │
│                  │
│Label with long t…│
│                  │
│                  │
│                  │
│                  │
└──────────────────┘
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(20).height(10);
		builder.element(new Rectangle());
		builder.element(new Label("Label with long text", 1, 4, 18));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Text

Multiline string.

┌──────────────────┐
│                  │
│                  │
│Lorem Ipsum is sim│
│ply dummy text of │
│the printing and …│
│                  │
│                  │
│                  │
└──────────────────┘
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(20).height(10);
		builder.element(new Rectangle());
		builder.element(new Text("Lorem Ipsum is simply dummy text of the printing and typesetting industry.", 1, 3, 18, 3));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

PseudoText

Antialising option is customizable, enabled by default.

                                                ██                                                    
 ██████▒                                        ██           ██████████                         ██    
 ██ ░░██▒                                       ██               ██                             ██    
 ██   ░██                                       ██               ██                             ██    
 ██   ░██  ░▒████▓▒   ░▓███▒    ██    ██   ▒███▒██   ▒████░      ██       ░▓███▒   ▓██░░██▓   ███████ 
 ██   ░██  ▓█▓░░░▒▓  ░██░░██░   ██    ██  ░██░░███  ░██░░██░     ██      ░██░░██░  ░██▓▓██░     ██    
 ██ ░░██▒  ██▒░      ▓█▒  ░█▓   ██    ██  ▓█▒  ▒██  ▓█▒  ▒█▓     ██      ▓█▒  ░█▓   ░████░      ██    
 ██████▒   ▓████▓▒   ██░  ░██   ██    ██  ██░  ░██  ██░  ░██     ██      ██░  ░██    ▒██▒       ██    
 ██        ░▓█████▒  ████████   ██    ██  ██░  ░██  ██░  ░██     ██      ████████    ░██░       ██    
 ██           ░░▓██  ██░        ██░  ░██  ██░  ░██  ██░  ░██     ██      ██░         ▓██▓       ██    
 ██             ░██  ▓█▒        ██░  ░██  ▓█▒  ▒██  ▓█▒  ▒█▓     ██      ▓█▒        ▒████▒      ██░   
 ██        █▒░░░▓█▓  ░██▒░░▒▓   ▓█▓░░███  ░██░░███  ░██░░██░     ██      ░██▒░░▒▓  ░██▒▒██░     ▓█▒░  
 ██        ░▓████▒░   ░▓███▓░   ░▓███░██   ▒███▒██   ▒████▒      ██       ░▓███▓░  ▓██░░██▓     ░▓███ 
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(120).height(20);
		builder.element(new PseudoText("PseudoText"));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Plot

Plot with axis and labels based on array of points.

┌──────────────────────────────────────────────────────────────────────────────┐
│ 3.73┼              *                                  **                     │
│     │             **                                  *                      │
│     │             *                                  **                      │
│     │            *                                  **                       │
│ 1.87┼          **                                 ***                        │
│     │       ****                               ****                          │
│     │  ******                              *****                             │
│     │***                             *******                             ****│
│-0.00┼                            *****                              ******   │
│     │                         ****                               ****        │
│     │                       ***                                 **           │
│     │                      **                                  *             │
│-1.87┼                     **                                  *              │
│     │                     *                                  **              │
│     │                    **                                  *               │
│     │                                                        *               │
│-3.73┼─────────────────┼─────────────────┼─────────────────┼─────────────────┼│
│     0                90                180               270              360│
└──────────────────────────────────────────────────────────────────────────────┘
		List<IPlotPoint> points = new ArrayList<IPlotPoint>();
		for (int degree = 0; degree <= 360; degree++) {
			if (degree > 75 && degree < 105) {
				continue;
			}
			if (degree > 255 && degree < 285) {
				continue;
			}
			double val = Math.tan(Math.toRadians(degree));
			IPlotPoint plotPoint = new PlotPoint(degree, val);
			points.add(plotPoint);
		}
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(80).height(20);
		builder.element(new Rectangle(0, 0, 80, 20));
		builder.layer(new Region(1, 1, 78, 18));
		builder.element(new Axis(points, new Region(0, 0, 78, 18)));
		builder.element(new AxisLabels(points, new Region(0, 0, 78, 18)));
		builder.element(new Plot(points, new Region(0, 0, 78, 18)));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Table

Table with rows and columns.

┌────────┬────────┬────────┬────────┐
│12345678│        │        │        │
├────────┼────────┼────────┼────────┤
│        │        │        │        │
├────────╆━━━━━━━━╅────────╆━━━━━━━━┪
│        ┃        ┃        ┃1234567…┃
└────────┺━━━━━━━━┹────────┺━━━━━━━━┛
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(37).height(7);
		Table table = new Table(4, 3);
		table.setElement(1, 1, new Label("1234567890"));
		table.setElement(4, 3, new Text("1234567890"), true);
		table.setHighlighted(2, 3, true);
		builder.element(table);
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Overlay

Possibility to combine results of several renders.

┌──────────────────┐
│                  │
│                  │
│Lore┌───────┐s sim│
│ply │Overlay│t of │
│the └───────┘and …│
│                  │
│                  │
│                  │
└──────────────────┘
		IRender render1 = new Render();
		IContextBuilder builder1 = render1.newBuilder();
		builder1.width(9).height(3);
		builder1.element(new Rectangle());
		builder1.element(new Text("Overlay", 1, 1, 7, 1));
		ICanvas canvas1 = render1.render(builder1.build());

		IRender render2 = new Render();
		IContextBuilder builder2 = render2.newBuilder();
		builder2.width(20).height(10);
		builder2.element(new Rectangle());
		builder2.element(
				new Text("Lorem Ipsum is simply dummy text of the printing and typesetting industry.", 1, 3, 18, 3));
		builder2.element(new Overlay(5, 3, canvas1, true));
		ICanvas canvas2 = render2.render(builder2.build());
		String s = canvas2.getText();
		System.out.println(s);

PseudoCanvas

In some cases you can get better results by synthetic increasing of "pixel resolution". This is possible by calling render.setPseudoCanvas(true) method. After that render would use ▖▗▘▙▚▛▜▝▞▟▄▐▌▀█ chars for drawing 4 points in 1 char. This is would work only if you do not use any special symbols for drawing (but you still can use Overlay to combine two different renders).

Example 1: line in 30x10 resolution:

██                            
  ███                         
     ████                     
         ███                  
            ███               
               ███            
                  ███         
                     ████     
                         ███  
                            ██
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(30).height(10);
		builder.element(new Line(new Point(0, 0), new Point(29, 9), ''));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

And same line in 60x20 resolution:

▀▄▖                           
  ▝▀▄▖                        
     ▝▀▄▄                     
         ▀▚▄                  
            ▀▚▄               
               ▀▚▄            
                  ▀▚▄         
                     ▀▀▄▖     
                        ▝▀▄▖  
                           ▝▀▄
		IRender render = new Render();
		render.setPseudoCanvas(true);
		IContextBuilder builder = render.newBuilder();
		builder.width(60).height(20);
		builder.element(new Line(new Point(0, 0), new Point(59, 19)));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Example 2: pseudo text in 60x10 resolution:

                                                            
                          █                                 
 ███                      █      █████                      
 █  █                     █        █               █        
 █  █ ████   ██  █  █   ███  ██    █    ██  █  █  ████      
 ███  █     █  █ █  █  █  █ █  █   █   █  █  ██    █        
 █     ███  ████ █  █  █  █ █  █   █   ████  ██    █        
 █       █  █    █  █  █  █ █  █   █   █     ██    █        
 █    ████   ███ ████   ███  ██    █    ███ █  █   ███      
                                                            
		IRender render = new Render();
		IContextBuilder builder = render.newBuilder();
		builder.width(60).height(10);
		builder.element(new PseudoText("PseudoText", false));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

And same pseudo text in 120x20 resolution:

                                                            
                                                            
                        ▄                                   
▐▛▀▙                    █      ▀▀█▀▀            ▐▌          
▐▌ ▐▌ ▗▄▄   ▄▄  ▄  ▄  ▄▖█  ▗▄▖   █   ▗▄▖  ▄▖▗▄ ▗▟▙▄         
▐▌ ▟▘▐▌  ▘ ▟▘▝▙ █  █ ▟▘▝█ ▗▛ ▜▖  █  ▗▛ ▜▖ ▝██▘  ▐▌          
▐▛▀▘ ▝██▙▖ █▄▄█ █  █ █  █ ▐▌ ▐▌  █  ▐▙▄▟▌  ▐▌   ▐▌          
▐▌      ▜▌ █    █  █ █  █ ▐▌ ▐▌  █  ▐▌     ██   ▐▌          
▐▌   ▝▄▄▞▘ ▝▙▄▞ ▜▙▞█ ▝▙▞█  ▜▄▛   █   ▜▄▄▘ ▟▌▐▙  ▝▙▄         
                                                            
		IRender render = new Render();
		render.setPseudoCanvas(true);
		IContextBuilder builder = render.newBuilder();
		builder.width(120).height(20);
		builder.element(new PseudoText("PseudoText", false));
		ICanvas canvas = render.render(builder.build());
		String s = canvas.getText();
		System.out.println(s);

Download release

https://github.com/indvd00m/java-ascii-render/releases

Release notes

Version 0.9.0

Version 1.0.0

  • Reworking API. Add new elements.

Version 1.1.0

  • Add PseudoText element.
  • Use Bresenham's algorithm for line drawing.

Version 1.2.0

  • Simplify extending existing elements.

Version 1.2.1

  • Pass axis type to format method in AxisLabels element.

Version 1.2.2

  • Add deploy to maven central.

Version 1.2.3

  • Add url to pom's.

Version 1.2.4

  • Add some useful methods to builder.

Version 1.3.0

  • Add table element.

Version 1.4.0

  • Add overlay element.
  • Added possibility to trim canvas.
  • Simplified extending of existing implementation.

Version 1.5.0

  • Improved canvas draw performance.

Version 2.0.0

  • Canvas now is empty by default - contains only \0 and \n symbols. Previous Canvas implementation contained \s and \n symbols. This new changes break backward compatibility for drawing behavior in some cases (but do not break compile time API compatibility). Now overlapping of layers would work correctly when you directly draw spaces \s to layer.
  • Added opacity for layers.

Version 2.1.0

  • Added table cells highlighting.

Version 2.1.1

  • Added some useful constructors.

Version 2.1.2

  • Fixed javadoc.

Version 2.1.3

  • Simplified extending of Table element.

Version 2.2.0

  • Added possibility to increase "pixel" resolution.

Roadmap

This component is developed as a hobby with no public roadmap or any guarantees of upcoming releases. That said, the following features are planned for upcoming releases:

  • Fluent API for elements.

Issue tracking

The issues for this project are tracked on its github.com page. All bug reports and feature requests are appreciated.

Building and running tests

git clone https://github.com/indvd00m/java-ascii-render.git
cd java-ascii-render
mvn clean install

Contributions

Contributions are welcome, but there are no guarantees that they are accepted as such. Process for contributing is the following:

  • Fork this project
  • Create an issue to this project about the contribution (bug or feature) if there is no such issue about it already. Try to keep the scope minimal.
  • Develop and test the fix or functionality carefully. Only include minimum amount of code needed to fix the issue.
  • Refer to the fixed issue in commit
  • Send a pull request for the original project
  • Comment on the original issue that you have implemented a fix for it

License & Author

Java ASCII Render is distributed under Apache License 2.0. For license terms, see LICENSE.

Java ASCII Render is written by David E. Veliev.

Comments
  • Is there a way to put a format the values X, Y value axis labels?

    Is there a way to put a format the values X, Y value axis labels?

    Sorry if this is s stupid question, I looked through the code and didn't see an obvious answer.

    I'd like to make the Y axis values in megabytes, gigabytes, or bytes and have it autoscale. The X-Axis values are time stamps (longs). I'd like to format those as human readable dates.

    If not, where would a good place to insert those into the stack? Perhaps I could hack on it.

    Thanks, and awesome project!

    enhancement 
    opened by exabrial 3
  • Bump junit from 4.12 to 4.13.1 in /ascii-render

    Bump junit from 4.12 to 4.13.1 in /ascii-render

    Bumps junit from 4.12 to 4.13.1.

    Release notes

    Sourced from junit's releases.

    JUnit 4.13.1

    Please refer to the release notes for details.

    JUnit 4.13

    Please refer to the release notes for details.

    JUnit 4.13 RC 2

    Please refer to the release notes for details.

    JUnit 4.13 RC 1

    Please refer to the release notes for details.

    JUnit 4.13 Beta 3

    Please refer to the release notes for details.

    JUnit 4.13 Beta 2

    Please refer to the release notes for details.

    JUnit 4.13 Beta 1

    Please refer to the release notes for details.

    Commits
    • 1b683f4 [maven-release-plugin] prepare release r4.13.1
    • ce6ce3a Draft 4.13.1 release notes
    • c29dd82 Change version to 4.13.1-SNAPSHOT
    • 1d17486 Add a link to assertThrows in exception testing
    • 543905d Use separate line for annotation in Javadoc
    • 510e906 Add sub headlines to class Javadoc
    • 610155b Merge pull request from GHSA-269g-pwp5-87pp
    • b6cfd1e Explicitly wrap float parameter for consistency (#1671)
    • a5d205c Fix GitHub link in FAQ (#1672)
    • 3a5c6b4 Deprecated since jdk9 replacing constructor instance of Double and Float (#1660)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Issue #8 - allow format for axis label to be passed in.

    Issue #8 - allow format for axis label to be passed in.

    On issue #8 (now closed), I've been writing code like this to adjust the format of axis labels:

    		builder.element(new AxisLabels(overallErrPoints, new Region(0, 0, 78, 18)) {
    			@Override
    			public String format(AxisType type, double value, double labelsStep) {
    				String label = null;
    				if (labelsStep < 10d) {
    					label = String.format("%1$,.4f", value);
    				} else {
    					label = String.format("%,d", (int) value);
    				}
    				return label;
    			}
    		});
    

    To tidy up, here is a pull request to allow the format string to be passed in on the AxisType constructor. This reduces the necessary code to a single line:

    builder.element(new AxisLabels(overallErrPoints, new Region(0, 0, 78, 18),"%1$,.4f"));
    
    opened by JohnGreenhow 0
  • Simplify extending existing elements

    Simplify extending existing elements

    First of all need change visibility of some methods to protected (#8). Next - allow searching in context not only by exact class but with successors too (IContext.lookupTyped).

    enhancement 
    opened by indvd00m 0
  • Fix PseudoText tests

    Fix PseudoText tests

    It seems it's impossible to render pixel-by-pixel identical result with Graphics2D.drawString on all java platforms. It is necessary to either disable the tests, or to find a solution for this.

    bug 
    opened by indvd00m 0
  • Support of PseudoCanvas in Overlay element

    Support of PseudoCanvas in Overlay element

    We need to support the new type of canvas in Overlay element

    https://github.com/indvd00m/java-ascii-render#pseudocanvas https://github.com/indvd00m/java-ascii-render#overlay

    enhancement 
    opened by indvd00m 0
Owner
David E. Veliev
David E. Veliev
Java annotation-based framework for parsing Git like command line structures

Airline Airline is a Java annotation-based framework for parsing Git like command line structures. Latest release is 0.8, available from Maven Central

null 847 Nov 26, 2022
Jansi is a small java library that allows you to use ANSI escape sequences to format your console output which works even on windows.

Description Jansi is a small java library that allows you to use ANSI escape codes to format your console output which works even on Windows. It also

FuseSource 955 Dec 28, 2022
JLine is a Java library for handling console input.

JLine JLine is a Java library for handling console input. It is similar in functionality to BSD editline and GNU readline but with additional features

null 1.2k Jan 5, 2023
A library for creating interactive console applications in Java

Text-IO Text-IO is a library for creating Java console applications. It can be used in applications that need to read interactive input from the user.

Beryx 295 Jan 5, 2023
Java library for creating text-based GUIs

Lanterna Lanterna is a Java library allowing you to write easy semi-graphical user interfaces in a text-only environment, very similar to the C librar

null 2k Dec 31, 2022
Command line parsing framework for Java

JCommander This is an annotation based parameter parsing framework for Java 8. Here is a quick example: public class JCommanderTest { @Parameter

Cedric Beust 1.8k Dec 29, 2022
XML/XHTML and CSS 2.1 renderer in pure Java

Flying Saucer OVERVIEW Flying Saucer is a pure-Java library for rendering arbitrary well-formed XML (or XHTML) using CSS 2.1 for layout and formatting

null 1.8k Jan 2, 2023
Docker-compose-integration-tstst - An exploration of how to run integration tests against an application that has inconvenient external dependencies (e.g. a SQL database).

Tstst? it was supposed to be docker-compose-integration-tests but i was too lazy to fix it at the outset, and now im trying to convince myself its fun

null 1 Jan 4, 2022
A lightweight, simple FTP server. Pure Java, no dependencies.

MinimalFTP A lightweight, simple FTP server. Pure Java, no libraries. Features Although it's named "minimal", it supports a bunch of features: 100% Ja

Guilherme Chaguri 131 Jan 5, 2023
Creates ASCII art in Java from Images

Creates ASCII art in Java from Images. It can also save the ASCII art as image (.png) as well

Navjot Singh Rakhra 4 Jul 12, 2022
Java SVG renderer

JSVG - A Java SVG implementation The SVG logo rendered using JSVG JSVG is an SVG user agent using AWT graphics. Its aim is to provide a small and fast

Jannis Weis 30 Dec 13, 2022
Yet another very simple java 3D software renderer using only standard 2D libraries (Java2D, AWT & Swing). Video: https://youtu.be/hWUX1t9f6zE

Another very simple 3D software renderer Another very simple 3D software renderer implemented in java using only standard libraries (java 2D, AWT & Sw

Leo 13 Oct 17, 2022
Several implementations of a text table, originally using ASCII and UTF-8 characters for borders.

ASCII Table ASCII table - A simple tool to format tables with various row/column options for indentation, indentation character, alignment, padding (l

Sven van der Meer 415 Dec 26, 2022
Turbomodule and Fabric renderer boilerplate

REACT NATIVE TURBOMODULE FABRIC RENDERER BOILERPATE This is BOILERPATE template for enable turbomodule and fabric renderer Generate Codegen native fil

Numan 9 Jul 17, 2022
ASCII Roguelike with Euro Strategy Board Game Influences

EuroRogue ASCII Roguelike with Euro Strategy Board Game Influences --Run the RunEuroRogue.bat file in the bin folder. Requires Java - https://www.java

null 4 Feb 1, 2022
Usign ascii characters, recreate an image following a local path

CMDImage Usign ascii characters, recreate an image following a local path README El código toma una imagen desde una ruta local para convertirlo en ca

Alexander Hernández 13 Aug 30, 2022
JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface that is bound to the external C library using method names.

JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface t

null 28 Dec 30, 2022
One file java script for visualizing JDK flight recorder execution logs as flamegraphs without any dependencies except Java and a browser.

Flamegraph from JFR logs Simple one file Java script to generate flamegraphs from Java flight recordings without installing Perl and the Brendan Gregg

Billy Sjöberg 17 Oct 2, 2022
External-Memory Sorting in Java

Externalsortinginjava External-Memory Sorting in Java: useful to sort very large files using multiple cores and an external-memory algorithm. The vers

Daniel Lemire 235 Dec 29, 2022