# `base85`

The `base85` library provides predicates for encoding and decoding data in the Base85 (Ascii85) format. Ascii85 is used in PostScript and PDF files. The encoding uses printable ASCII characters from `!` (33) to `u` (117). A special shortcut `z` represents four zero bytes. For more details, see for example:

https://en.wikipedia.org/wiki/Ascii85

## API documentation

Open the ../../apis/library_index.html#base85 link in a web browser.

## Loading

To load all entities in this library, load the `loader.lgt` utility file:

    | ?- logtalk_load(base85(loader)).

## Testing

To test this library predicates, load the `tester.lgt` file:

    | ?- logtalk_load(base85(tester)).

## Encoding

Encoding a list of bytes in Base85 format is accomplished by the `base85::generate/2` predicate. For example:

    | ?- atom_codes('Man ', Bytes),
         base85::generate(atom(Base85), Bytes).
    Base85 = '9jqo^'
    Bytes = [77,97,110,32]
    yes

Four zero bytes are encoded as the special character `z`:

    | ?- base85::generate(atom(Base85), [0, 0, 0, 0]).
    Base85 = 'z'
    yes

## Decoding

Decoding of Base85 data is accomplished using the `base85::parse/2` predicate. For example:

    | ?- base85::parse(atom('9jqo^'), Bytes),
         atom_codes(Atom, Bytes).
    Atom = 'Man '
    Bytes = [77,97,110,32]
    yes

The parser also accepts input with optional `<~` and `~>` delimiters:

    | ?- base85::parse(atom('<~9jqo^~>'), Bytes),
         atom_codes(Atom, Bytes).
    Atom = 'Man '
    Bytes = [77,97,110,32]
    yes