Thanks to visit codestin.com
Credit goes to lib.rs

11 releases (6 stable)

1.0.6 Jun 14, 2022
1.0.3 Jun 13, 2022
1.0.1 Oct 22, 2021
0.2.3 Oct 22, 2021
0.1.2 Oct 19, 2021

#2397 in Parser implementations

40 downloads per month
Used in aaa

GPL-3.0 license

53KB
1K SLoC

rs3a

This library provides a structural representation of 3a ascii animations format and methods for reading and writing it.
This lib on crates.io

Used in

  • aaa - Tui tool for 3a files rendering

Usage

Add this to your Cargo.toml:

[dependencies]
rs3a = "1"

Here's a simple example that parsing a string in 3a format and displaying a header:

use rs3a;

const COLORTABLE_EXAMPLE: &str = "	
width 32
height 19
loop false
colors full
title colortable demo
author Moth

in ' ab '                       ffffffffffffffffffffffffffffffff00000000000000000000000000000000
a-foreground, b-background      ffffffffffffffffffffffffffffffff00000000000000000000000000000000
                                ffffffffffffffffffffffffffffffff00000000000000000000000000000000
 00  01  02  03  04  05  06  07 0000000000000000000000000000000000001111222233334444555566667777
 10  11  12  13  14  15  16  17 1111111111111111111111111111111100001111222233334444555566667777
 20  21  22  23  24  25  26  27 2222222222222222222222222222222200001111222233334444555566667777
 30  31  32  33  34  35  36  37 3333333333333333333333333333333300001111222233334444555566667777
 40  41  42  43  44  45  46  47 4444444444444444444444444444444400001111222233334444555566667777
 50  51  52  53  54  55  56  57 5555555555555555555555555555555500001111222233334444555566667777
 60  61  62  63  64  65  66  67 6666666666666666666666666666666600001111222233334444555566667777
 70  71  72  73  74  75  76  77 7777777777777777777777777777777700001111222233334444555566667777
 80  81  82  83  84  85  86  87 8888888888888888888888888888888800001111222233334444555566667777
 90  91  92  93  94  95  96  97 9999999999999999999999999999999900001111222233334444555566667777
 a0  a1  a2  a3  a4  a5  a6  a7 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00001111222233334444555566667777
 b0  b1  b2  b3  b4  b5  b6  b7 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00001111222233334444555566667777
 c0  c1  c2  c3  c4  c5  c6  c7 cccccccccccccccccccccccccccccccc00001111222233334444555566667777
 d0  d1  d2  d3  d4  d5  d6  d7 dddddddddddddddddddddddddddddddd00001111222233334444555566667777
 e0  e1  e2  e3  e4  e5  e6  e7 eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00001111222233334444555566667777
 f0  f1  f2  f3  f4  f5  f6  f7 ffffffffffffffffffffffffffffffff00001111222233334444555566667777";

fn main() {
    let art = rs3a::load(COLORTABLE_EXAMPLE.to_string()).unwrap();
    println!("{:?}", art.header);
}

Short API description

Structs

The core of the library is the Art type, which implements the 3a structure:

struct Art{
    pub header: Header,
    pub body: Body,
}

Header type contains information about the header of 3a file:

struct Header{
    width: u16,
    height: u16,
    delay: u16,
    loop_enable: bool,
    color_mod: ColorMod,
    utf8: bool,
    datacols: u16,
    preview: u16,
    audio: Option<String>,
    title: Option<String>,
    author: Option<String>,
}

Body type contains an array of frames, where each frame is an array of rows, and each row is an array of row fragments:

struct Body{
    frames: Vec<Frame>
}
type Frame = Vec<Row>;
type Row = Vec<RowFragment>;

Each RowFragment is a set of consecutive symbols with the same values of foreground and background colors:

struct RowFragment{
    text: String,
    fg_color: Option<Color>,
    bg_color: Option<Color>,
}

Functions

load and save functions allow you to convert strings to Art and back.
load_file and save_file functions allow you to read 3a files to Art and write Art to 3a files.

Dependencies

~2–3MB
~52K SLoC