Macros may now reference other macros (recursive macros). Macro values are fully expanded at parse time; circular references produce an error.
We now export (and document their arguments) the following movetext parsers:
piecepack_parser()process_exclamation_move() (e.g. !PieceId moves).ppdf functions.name_parser()
instead of parser_name().We now export (and document their arguments) the following movetext parsers:
alquerque_parser()default_parser()checker_parser()chess_parser()domino_parser()go_parser()marble_parser()morris_parser()tarot_parser()The following tweaks to PPN:
PieceSpec is missing Piece and is a colored suit
and it's side is not l, r, or x then it is now assumed to
be a "bit" (instead of a "tile").9L (i.e. 1" marble when visualized by {piecepackr}).1L aka the "red" suit).Functions for reading/writing Portable Piecepack Notation (PPN) files:
read_ppn() parses Portable Piecepack Notation (PPN) files.write_ppn() writes Portable Piecepack Notation files.Functions for visualizing moves in a parsed game:
plot_move() visualizes moves in a parsed game via piecepackr::render_piece().animate_game() visualizes moves in a parsed game via piecepackr::animate_game().cat_move() and cat_game() visualizes moves in a parsed game via ppcli::cat_piece().Interactive PPN viewers:
view_game() provides interactive PPN viewers with a choice of a {shiny} app and a {cli} command-line interface.