Skip to content

sashite/pmn.cr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Portable Move Notation

Build Status

A Crystal interface for data serialization in PMN format.

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      pmn:
        github: sashite/pmn.cr
  2. Run shards install

Usage

Working with PMN can be very simple, for example:

require "pmn"

# Emit a PMN string

some_moves = [
  [52, 36, "", nil],
  [12, 28, "", nil],
  [53, 37, "", nil]
]

PMN.dump(*some_moves) # => "52,36,♙.12,28,♟.53,37,♙"

# Parse a PMN string

PMN.parse("52,36,♙.12,28,♟.53,37,♙") # => [[52, 36, "♙", nil], [12, 28, "♟", nil], [53, 37, "♙", nil]]

Examples

# Black castles on king-side

PMN.dump([60, 62, "", nil, 63, 61, "", nil]) # => "60,62,♔;63,61,♖"
PMN.parse("60,62,♔;63,61,♖") # => [[60, 62, "♔", nil, 63, 61, "♖", nil]]

# Promoting a chess pawn into a knight

PMN.dump([12, 4, "", nil]) # => "12,4,♘"
PMN.parse("12,4,♘") # => [[12, 4, "♘", nil]]

# Capturing a rook and promoting a shogi pawn

PMN.dump([33, 24, "+P", "R"]) # => "33,24,+P,R"
PMN.parse("33,24,+P,R") # => [[33, 24, "+P", "R"]]

# Dropping a shogi pawn

PMN.dump([nil, 42, "P", nil]) # => "*,42,P"
PMN.parse("*,42,P") # => [[nil, 42, "P", nil]]

# Capturing a white chess pawn en passant

PMN.dump([48, 32, "", nil], [33, 32, "", nil, 32, 40, "", nil]) # => "48,32,♙.33,32,♟;32,40,♟"
PMN.parse('48,32,♙.33,32,♟;32,40,♟') # => [[48, 32, "♙", nil], [33, 32, "♟", nil, 32, 40, "♟", nil]]

License

This library is available as open source under the terms of the MIT License.

About Sashite

This library is maintained by Sashite.

With some lines of code, let's share the beauty of Chinese, Japanese and Western cultures through the game of chess!