/termestry

A Terminal Tapestry

Primary LanguageJavaScriptCreative Commons Attribution 4.0 InternationalCC-BY-4.0

Termestry

Version 0.0.1

A dependency free tapestry for the terminal


With Termestry, you can draw on terminal with ease.

Installation

Termestry is a Node.js module available through the npm registry. Installation is done using the npm install command:

$ npm install termestry

You can also just add it to your package.json file, and it will be installed the next time you run npm install:

{
  "dependencies": {
    "termestry": "^0.0.1"
  }
}

Basic Usage

Drawing a Rectangle

import { Canvas, Paint, Color, Size, Point } from "termestry";

const myPaint = new Paint(
  Color.RED /* stroke color */,
  Color.BLUE /* fill color */
);

const myCanvas = new Canvas(myPaint); /* create a canvas with the paint */

const size = new Size(10, 10);

myCanvas.rect(
  Point.centerFor(size),
  size
); /* draw a rectangle at the center of the screen */

myCanvas.draw(); // draw the canvas

Creating a stick figure

import { Paint, Color, Size, Point, Canvas } from './src/index.js';

const myPaint = new Paint(
    Color.Red, /* stroke color */
    Color.None, /* fill color */
);
const myCanvas = new Canvas(myPaint); /* create a canvas with the paint */

// What is a stick figure?
//  O <- A circle (head)
// --- <- A long line (arms)
//  | <- A line (body)
// / \ <- Two lines (legs)

const head = new Size(6, 6);
const body = new Size(1, 5);
const arms = new Size(5, 1);
const legs = new Size(5, 2);

const center = Point.centerFor(head);

// The head
myCanvas.ellipse(
    center, // Where to draw the head
    head.width / 2, // The X radius
    head.height / 2, // The Y radius
    0, // The rotation
    0, // The start angle
    2 * Math.PI, // The end angle (2 * PI is a full circle)
);

// The arms
let arms_subpath = myCanvas.subpathAt(
    new Point(
        center.x - arms.width / 2,
        center.y + head.height - arms.height
    )
); // Create a subpath at the center of the head

arms_subpath.lineTo(
    new Point(
        center.x + arms.width / 2,
        center.y + head.height - arms.height
    )
); // Draw the arms

// The body
let body_subpath = myCanvas.subpathAt(
    new Point(
        center.x,
        center.y + head.height / 2
    )
); // Create a subpath at the bottom of the head

body_subpath.lineTo(
    new Point(
        center.x,
        center.y + head.height / 2 + body.height
    )
); // Draw the body

// The legs
let legs_subpath = myCanvas.subpathAt(
    new Point(
        center.x,
        center.y + head.height / 2 + body.height
    )
); // Create a subpath at the bottom of the body

legs_subpath.lineTo(
    new Point(
        center.x - legs.width,
        center.y + head.height / 2 + body.height + legs.height
    )
); // Draw the left leg

let legs_subpath_2 = myCanvas.subpathAt(
    new Point(
        center.x,
        center.y + head.height / 2 + body.height
    )
); // Create a subpath at the bottom of the body

legs_subpath_2.lineTo(
    new Point(
        center.x + legs.width,
        center.y + head.height / 2 + body.height + legs.height
    )
); // Draw the right leg

myCanvas.draw(); // Draw the canvas

For API usage, and more specific examples, refer to the API.

Project Status

Termestry is currently in alpha. While the current API is stable, there may be breaking changes in the future, and more features will be added.

To help with the development of Termestry, you can contribute to the project by submitting issues, pull requests, or shooting me an email at RedYetiDev@gmail.com.

License

Termestry is licensed under the CC BY 4.0 license. This means that you can use Termestry in any way you want, as long as you give credit to me, the original author (RedYetiDev).

What is "as long as you give credit to me"?

Giving credit is showing that you used Termestry in your project. This can be done by linking to the GitHub repository, or by linking to the npm package.

Can I use Termestry in a commercial project?

Of course! You can use Termestry in any project, commercial or not, as long as you give credit to me.