# sparkly-rs

[![Build Status](https://travis-ci.org/remexre/sparkly-rs.svg?branch=master)](https://travis-ci.org/remexre/sparkly-rs)
[![Crates.io](https://img.shields.io/crates/v/sparkly.svg)](https://crates.io/crates/sparkly)
[![Documentation](https://docs.rs/sparkly/badge.svg)](https://docs.rs/sparkly/*/sparkly/)
![License](https://img.shields.io/crates/l/sparkly.svg)

Currently, the performance is really bad; [pretty.rs](https://crates.io/crates/pretty) may be preferred.

A pretty-printing library based on Wadler's "A Prettier Printer" with support for ANSI styling.

I'm using this to walk myself through the paper and understand it well enough to implement; plus it doesn't look like there's an existing implementation of this.

## Features and Optional Dependencies

[`termion`](https://crates.io/crates/termion): Allows the width and color support of the terminal to be autodetected.

## TODOs

 - When `impl Trait` is stabilized, use `impl Display` instead of the `Display` struct.
 - `no_std` support.
 - Opt-in [`unicode-width`](https://crates.io/crates/unicode-width)
 - Windows (before 10) support? A good project might be a `(&mut Write, &str, Style) -> IoResult<()>` function that uses Windows syscalls there and ANSI everywhere else.

## License

Licensed under either of

 * Apache License, Version 2.0, (http://www.apache.org/licenses/LICENSE-2.0)
 * MIT license (http://opensource.org/licenses/MIT)

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
