Skip to content

jczimm/asciitosvg-grid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

asciitosvg-grid

Basic ascii-to-svg renderer (built out of ivanceras/elm-examples/elm-bot-lines).

The svg output is aligned to a grid, with all text in the system-default monospace font.

Automatically optimizes svg output using SVGO, since the renderer produces inefficient SVG.

Use either locally (executable version) or with the API, which allows for ASCII diagrams embedded directly into markdown and rendered with no build step.

Executable Version

Installation

npm install --global asciitosvg-grid

Usage

$ cat input.txt
.-------------.
| Hello World |
|        .----+
|_______/
$ asciitosvg < input.txt > output.svg

output.svg:

output.svg in demo

FAQ

Are you really using Puppeteer to open a webpage running a modified version of an ancient Elm example app rather than trying to extract the core convert function from the app's source?

This is just an executable I created to replace going to this page every time I wanted to tweak my legacy ascii diagrams. If you want an ascii-to-svg renderer, you should probably use svgbob (by the same author as elm-bot-lines), which comes with its own executable:

cargo install --git https://github.com/ivanceras/svgbob/ --path svgbob_cli

API Version

$ encodeascii -f raw -m < demo/input.txt
![ascii diagram rendered with asciitosvg](https://asciitosvg.now.sh/render/raw/\
\.\-\-\-\-\-\-\-\-\-\-\-\-\-\.\
\|\ \H\e\l\l\o\ \W\o\r\l\d\ \|\
\|\ \ \ \ \ \ \ \ \.\-\-\-\-\+\
\|\_\_\_\_\_\_\_\/)
If I were a pigeon and a glass of chalces and a black bag and we stepped outside and the crowd was going on. The snow was the last wood and he spoke. I was sure I thought he was going to sleep a little now and he could afford tomorrow while he hated.

![ascii diagram rendered with asciitosvg](https://asciitosvg.now.sh/render/raw/\
\.\-\-\-\-\-\-\-\-\-\-\-\-\-\.\
\|\ \H\e\l\l\o\ \W\o\r\l\d\ \|\
\|\ \ \ \ \ \ \ \ \.\-\-\-\-\+\
\|\_\_\_\_\_\_\_\/)

If I were a pigeon and a glass of chalces and a black bag and we stepped outside and the crowd was going on. The snow was the last wood and he spoke. I was sure I thought he was going to sleep a little now and he could afford tomorrow while he hated.

same output as output.svg from demo

filler text generated using Break the Block

License

MIT

TODO

  • fix unicode format for ASCII encoding/rendering (not sure whether the problem is in ./bin/encodeascii or render.js)

  • add to README under API Version: a description of render.js/md img embed functionality (copy about running the lambdas and embedding diagrams in markdown img src)

  • write "Usage" text (USAGE) in render.js

  • put a html landing page at / — include a link to /edit

  • create editor.js with routing /edit/[\\s\\S]*: serves textarea, encoding options, and encoder result

    • redirect /edit to /edit/
    • if there is data provided after the slash, pre-load the textarea with that
    • the web app should be written using hyperapp
    • the form should POST to a [bash] lambda at /encode/[\\s\\S]+ running encodeascii and returning the result

(should leverage routes in now.json: route / and /edit to their respective html pages (using static lambda) and /render/[\\s\\S]+ to render.js)

  • change server.js to render.js and change routing to /render/[\\s\\S]+

    • update encodeascii and README
  • change encodeascii default host to asciitosvg.now.sh

  • npm publish 0.1.1 at a good milestone

  • in asciitosvg-web, automatically uglify and inline main.js into index.html @ head (using [uglify 3] and html-inline)

  • accept color option (to make the lines and text white, instead of black, for example)

  • add support for using svgbob instead of asciitosvg for renderer

  • submit <asciitosvg.now.sh> to [awesome-zeit]

  • disable Now deployment automatic aliasing to asciitosvg.now.sh; it should only be able to be set manually (so a failed deploy doesn't automatically break images everywhere)