# FrenchCurve v0.1.3 - Table of Contents

> Terminal graphics in pure Elixir. Draw charts, curves and sprites into an RGBA raster and emit it over the kitty, sixel, iTerm2 or braille protocol.

## Pages

- [FrenchCurve](readme.md)
- [LICENSE](license.md)

## Modules

- [FrenchCurve](FrenchCurve.md): Draws pixel rasters to a terminal over whichever graphics protocol it supports.

- Drawing
  - [FrenchCurve.Chart](FrenchCurve.Chart.md): Plots a series of numbers as a line or filled-area chart on a `FrenchCurve.Raster`.
  - [FrenchCurve.Curve](FrenchCurve.Curve.md): Smooths a path of control points into a dense curve and rounds points to pixels.
  - [FrenchCurve.Draw](FrenchCurve.Draw.md): Rasterises lines, rectangles and circles into a `FrenchCurve.Raster`.
  - [FrenchCurve.Raster](FrenchCurve.Raster.md): A fixed-size RGBA pixel buffer, the value every drawing and backend function operates on.

- Backends
  - [FrenchCurve.Backend.Braille](FrenchCurve.Backend.Braille.md): Renders a raster as braille characters, for terminals with no graphics protocol at all.
  - [FrenchCurve.Backend.Iterm2](FrenchCurve.Backend.Iterm2.md): Renders a raster with iTerm2's inline-image protocol, as a base64 PNG in an OSC 1337
sequence.
  - [FrenchCurve.Backend.Kitty](FrenchCurve.Backend.Kitty.md): Renders a raster with the kitty graphics protocol, as raw RGBA (`f=32`) in APC sequences.
  - [FrenchCurve.Backend.Sixel](FrenchCurve.Backend.Sixel.md): Renders a raster as a sixel image, a palette-indexed DCS sequence.

- Sprites
  - [FrenchCurve.Sprite](FrenchCurve.Sprite.md): A raster that is drawn many times, uploaded once where the protocol allows it.
  - [FrenchCurve.Sprite.Registry](FrenchCurve.Sprite.Registry.md): Remembers which sprite ids have been uploaded, so a render loop uploads each one once.

- Terminal
  - [FrenchCurve.Capability](FrenchCurve.Capability.md): Chooses a graphics protocol from the environment and maps it to a backend module.
  - [FrenchCurve.Geometry](FrenchCurve.Geometry.md): Converts between terminal cells and pixels.

- Encoding
  - [FrenchCurve.Png](FrenchCurve.Png.md): Encodes raw RGBA pixels as a PNG.

