Module: Sashite::Feen::Parser::PiecePlacement
- Defined in:
- lib/sashite/feen/parser/piece_placement.rb
Overview
Parser for the piece placement field (first field of FEEN).
Converts a FEEN piece placement string into a Placement object, decoding board configuration from EPIN notation with:
-
Empty square compression (numbers → consecutive nils)
-
Multi-dimensional separator preservation (exact “/” counts)
-
Support for any irregular board structure
The parser preserves the exact separator structure, enabling perfect round-trip conversion (parse → dump → parse).
Constant Summary collapse
- RANK_SEPARATOR =
Rank separator character.
"/"
Class Method Summary collapse
-
.parse(string) ⇒ Placement
Parse a FEEN piece placement string into a Placement object.
Class Method Details
.parse(string) ⇒ Placement
Parse a FEEN piece placement string into a Placement object.
Supports any valid FEEN structure:
-
1D: Single rank, no separators (e.g., “K2P”)
-
2D: Ranks separated by “/” (e.g., “8/8/8”)
-
3D+: Ranks separated by multiple “/” (e.g., “5/5//5/5”)
-
Irregular: Any combination of rank sizes and separators
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/sashite/feen/parser/piece_placement.rb', line 51 def self.parse(string) # Detect dimension before parsing dimension = detect_dimension(string) # Handle 1D case (no separators) if dimension == 1 rank = parse_rank(string) return Placement.new([rank], [], 1) end # Parse multi-dimensional structure with separators ranks, separators = parse_with_separators(string) Placement.new(ranks, separators, dimension) end |