Skip to content

A PHP library to parse and write chess games in the portable game notation (PGN) format.

License

Notifications You must be signed in to change notification settings

chesszebra/portable-game-notation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a490936 · Feb 22, 2022

History

14 Commits
Feb 22, 2022
Feb 22, 2022
Oct 11, 2017
Oct 13, 2017
Oct 13, 2017
Oct 13, 2017
Oct 13, 2017
Oct 13, 2017
Feb 24, 2020
Feb 24, 2020
Oct 11, 2017

Repository files navigation

portable-game-notation

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

A PHP library to parse and write chess games in the portable game notation (PGN) format.

Installation

Via composer

composer require chesszebra/portable-game-notation

Usage

Reading

From a string

Reading a single PGN game from a string:

use ChessZebra\PortableGameNotation\Reader\StringReader;

$reader = new StringReader('1. e4 e5');

$tokenIterator = $reader->read();

From a stream

Reading a single PGN game from a stream:

use ChessZebra\PortableGameNotation\Reader\StringReader;

$reader = new StreamReader(fopen('games.pgn', 'r'));

$tokenIterator = $reader->read();

Writing

To a string

Wriring a PGN game to a string:

use ChessZebra\PortableGameNotation\TokenIterator;
use ChessZebra\PortableGameNotation\Token\StandardAlgebraicNotation;
use ChessZebra\PortableGameNotation\Writer\StringWriter;
use ChessZebra\StandardAlgebraicNotation\Notation;

$tokenIterator = new TokenIterator([
    new MoveNumber(1),
    new StandardAlgebraicNotation(new Notation('e4')),
]);

$writer = new StringWriter();
$writer->write($tokenIterator);

$pgn = $writer->getPgn();

To a stream

Wriring a PGN game to a stream:

use ChessZebra\PortableGameNotation\TokenIterator;
use ChessZebra\PortableGameNotation\Token\StandardAlgebraicNotation;
use ChessZebra\PortableGameNotation\Writer\Stream;
use ChessZebra\StandardAlgebraicNotation\Notation;

$tokenIterator = new TokenIterator([
    new MoveNumber(1),
    new StandardAlgebraicNotation(new Notation('e4')),
]);

$writer = new Stream(fopen('game.pgn', 'w'));
$writer->write($tokenIterator);

Tokenizing games

From a string

use ChessZebra\PortableGameNotation\Lexer\StringLexer;

$lexer = new StringLexer('1. e4');

$token = $lexer->getNextToken();

From a resource

use ChessZebra\PortableGameNotation\Lexer\StreamLexer;

$lexer = new StreamLexer(fopen('my-games.pgn', 'r'));

$token = $lexer->getNextToken();

Contributing

Please see CONTRIBUTING and CONDUCT for details.

Security

If you discover any security related issues, please report them via HackerOne.

License

The MIT License (MIT). Please see License File for more information.