UNPKG

@mliebelt/pgn-parser

Version:

A PEG parser to read PGN (Portable Game Notation) games.

967 lines (962 loc) 454 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.PgnParser = {})); })(this, (function (exports) { 'use strict'; function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } var _pgnParser$1 = {exports: {}}; var _pgnParser = _pgnParser$1.exports; var hasRequired_pgnParser; function require_pgnParser () { if (hasRequired_pgnParser) return _pgnParser$1.exports; hasRequired_pgnParser = 1; (function (module) { // @ts-nocheck // @generated by Peggy 4.2.0. // // https://peggyjs.org/ (function (root, factory) { if (module.exports) { module.exports = factory(); } })(_pgnParser, function () { function peg$subclass(child, parent) { function C() { this.constructor = child; } C.prototype = parent.prototype; child.prototype = new C(); } function peg$SyntaxError(message, expected, found, location) { var self = Error.call(this, message); // istanbul ignore next Check is a necessary evil to support older environments if (Object.setPrototypeOf) { Object.setPrototypeOf(self, peg$SyntaxError.prototype); } self.expected = expected; self.found = found; self.location = location; self.name = "SyntaxError"; return self; } peg$subclass(peg$SyntaxError, Error); function peg$padEnd(str, targetLength, padString) { padString = padString || " "; if (str.length > targetLength) { return str; } targetLength -= str.length; padString += padString.repeat(targetLength); return str + padString.slice(0, targetLength); } peg$SyntaxError.prototype.format = function (sources) { var str = "Error: " + this.message; if (this.location) { var src = null; var k; for (k = 0; k < sources.length; k++) { if (sources[k].source === this.location.source) { src = sources[k].text.split(/\r\n|\n|\r/g); break; } } var s = this.location.start; var offset_s = (this.location.source && (typeof this.location.source.offset === "function")) ? this.location.source.offset(s) : s; var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column; if (src) { var e = this.location.end; var filler = peg$padEnd("", offset_s.line.toString().length, ' '); var line = src[s.line - 1]; var last = s.line === e.line ? e.column : line.length + 1; var hatLen = (last - s.column) || 1; str += "\n --> " + loc + "\n" + filler + " |\n" + offset_s.line + " | " + line + "\n" + filler + " | " + peg$padEnd("", s.column - 1, ' ') + peg$padEnd("", hatLen, "^"); } else { str += "\n at " + loc; } } return str; }; peg$SyntaxError.buildMessage = function (expected, found) { var DESCRIBE_EXPECTATION_FNS = { literal: function (expectation) { return "\"" + literalEscape(expectation.text) + "\""; }, class: function (expectation) { var escapedParts = expectation.parts.map(function (part) { return Array.isArray(part) ? classEscape(part[0]) + "-" + classEscape(part[1]) : classEscape(part); }); return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; }, any: function () { return "any character"; }, end: function () { return "end of input"; }, other: function (expectation) { return expectation.description; } }; function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } function literalEscape(s) { return s .replace(/\\/g, "\\\\") .replace(/"/g, "\\\"") .replace(/\0/g, "\\0") .replace(/\t/g, "\\t") .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") .replace(/[\x00-\x0F]/g, function (ch) { return "\\x0" + hex(ch); }) .replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { return "\\x" + hex(ch); }); } function classEscape(s) { return s .replace(/\\/g, "\\\\") .replace(/\]/g, "\\]") .replace(/\^/g, "\\^") .replace(/-/g, "\\-") .replace(/\0/g, "\\0") .replace(/\t/g, "\\t") .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") .replace(/[\x00-\x0F]/g, function (ch) { return "\\x0" + hex(ch); }) .replace(/[\x10-\x1F\x7F-\x9F]/g, function (ch) { return "\\x" + hex(ch); }); } function describeExpectation(expectation) { return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); } function describeExpected(expected) { var descriptions = expected.map(describeExpectation); var i, j; descriptions.sort(); if (descriptions.length > 0) { for (i = 1, j = 1; i < descriptions.length; i++) { if (descriptions[i - 1] !== descriptions[i]) { descriptions[j] = descriptions[i]; j++; } } descriptions.length = j; } switch (descriptions.length) { case 1: return descriptions[0]; case 2: return descriptions[0] + " or " + descriptions[1]; default: return descriptions.slice(0, -1).join(", ") + ", or " + descriptions[descriptions.length - 1]; } } function describeFound(found) { return found ? "\"" + literalEscape(found) + "\"" : "end of input"; } return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; }; function peg$parse(input, options) { options = options !== undefined ? options : {}; var peg$FAILED = {}; var peg$source = options.grammarSource; var peg$startRuleFunctions = { pgn: peg$parsepgn, tags: peg$parsetags, game: peg$parsegame, games: peg$parsegames }; var peg$startRuleFunction = peg$parsepgn; var peg$c0 = "\uFEFF"; var peg$c1 = "Event"; var peg$c2 = "event"; var peg$c3 = "Site"; var peg$c4 = "site"; var peg$c5 = "Date"; var peg$c6 = "date"; var peg$c7 = "Round"; var peg$c8 = "round"; var peg$c9 = "White"; var peg$c10 = "white"; var peg$c11 = "Black"; var peg$c12 = "black"; var peg$c13 = "Result"; var peg$c14 = "result"; var peg$c15 = "WhiteTitle"; var peg$c16 = "Whitetitle"; var peg$c17 = "whitetitle"; var peg$c18 = "whiteTitle"; var peg$c19 = "BlackTitle"; var peg$c20 = "Blacktitle"; var peg$c21 = "blacktitle"; var peg$c22 = "blackTitle"; var peg$c23 = "WhiteELO"; var peg$c24 = "WhiteElo"; var peg$c25 = "Whiteelo"; var peg$c26 = "whiteelo"; var peg$c27 = "whiteElo"; var peg$c28 = "BlackELO"; var peg$c29 = "BlackElo"; var peg$c30 = "Blackelo"; var peg$c31 = "blackelo"; var peg$c32 = "blackElo"; var peg$c33 = "WhiteUSCF"; var peg$c34 = "WhiteUscf"; var peg$c35 = "Whiteuscf"; var peg$c36 = "whiteuscf"; var peg$c37 = "whiteUscf"; var peg$c38 = "BlackUSCF"; var peg$c39 = "BlackUscf"; var peg$c40 = "Blackuscf"; var peg$c41 = "blackuscf"; var peg$c42 = "blackUscf"; var peg$c43 = "WhiteNA"; var peg$c44 = "WhiteNa"; var peg$c45 = "Whitena"; var peg$c46 = "whitena"; var peg$c47 = "whiteNa"; var peg$c48 = "whiteNA"; var peg$c49 = "BlackNA"; var peg$c50 = "BlackNa"; var peg$c51 = "Blackna"; var peg$c52 = "blackna"; var peg$c53 = "blackNA"; var peg$c54 = "blackNa"; var peg$c55 = "WhiteType"; var peg$c56 = "Whitetype"; var peg$c57 = "whitetype"; var peg$c58 = "whiteType"; var peg$c59 = "BlackType"; var peg$c60 = "Blacktype"; var peg$c61 = "blacktype"; var peg$c62 = "blackType"; var peg$c63 = "EventDate"; var peg$c64 = "Eventdate"; var peg$c65 = "eventdate"; var peg$c66 = "eventDate"; var peg$c67 = "EventSponsor"; var peg$c68 = "Eventsponsor"; var peg$c69 = "eventsponsor"; var peg$c70 = "eventSponsor"; var peg$c71 = "Section"; var peg$c72 = "section"; var peg$c73 = "Stage"; var peg$c74 = "stage"; var peg$c75 = "Board"; var peg$c76 = "board"; var peg$c77 = "Opening"; var peg$c78 = "opening"; var peg$c79 = "Variation"; var peg$c80 = "variation"; var peg$c81 = "SubVariation"; var peg$c82 = "Subvariation"; var peg$c83 = "subvariation"; var peg$c84 = "subVariation"; var peg$c85 = "ECO"; var peg$c86 = "Eco"; var peg$c87 = "eco"; var peg$c88 = "NIC"; var peg$c89 = "Nic"; var peg$c90 = "nic"; var peg$c91 = "Time"; var peg$c92 = "time"; var peg$c93 = "UTCTime"; var peg$c94 = "UTCtime"; var peg$c95 = "UtcTime"; var peg$c96 = "Utctime"; var peg$c97 = "utctime"; var peg$c98 = "utcTime"; var peg$c99 = "UTCDate"; var peg$c100 = "UTCdate"; var peg$c101 = "UtcDate"; var peg$c102 = "Utcdate"; var peg$c103 = "utcdate"; var peg$c104 = "utcDate"; var peg$c105 = "TimeControl"; var peg$c106 = "Timecontrol"; var peg$c107 = "timecontrol"; var peg$c108 = "timeControl"; var peg$c109 = "SetUp"; var peg$c110 = "Setup"; var peg$c111 = "setup"; var peg$c112 = "setUp"; var peg$c113 = "FEN"; var peg$c114 = "Fen"; var peg$c115 = "fen"; var peg$c116 = "Termination"; var peg$c117 = "termination"; var peg$c118 = "Annotator"; var peg$c119 = "annotator"; var peg$c120 = "Mode"; var peg$c121 = "mode"; var peg$c122 = "PlyCount"; var peg$c123 = "Plycount"; var peg$c124 = "plycount"; var peg$c125 = "plyCount"; var peg$c126 = "Variant"; var peg$c127 = "variant"; var peg$c128 = "WhiteRatingDiff"; var peg$c129 = "BlackRatingDiff"; var peg$c130 = "WhiteFideId"; var peg$c131 = "BlackFideId"; var peg$c132 = "WhiteTeam"; var peg$c133 = "BlackTeam"; var peg$c134 = "Clock"; var peg$c135 = "WhiteClock"; var peg$c136 = "BlackClock"; var peg$c138 = "\""; var peg$c139 = "\\"; var peg$c140 = "."; var peg$c141 = ":"; var peg$c142 = "/"; var peg$c143 = "?"; var peg$c144 = "-"; var peg$c145 = "+"; var peg$c146 = "*"; var peg$c147 = "1-0"; var peg$c148 = "0-1"; var peg$c149 = "1/2-1/2"; var peg$c150 = "1/2"; var peg$c151 = "="; var peg$c152 = "%csl"; var peg$c153 = "%cal"; var peg$c154 = "%"; var peg$c155 = "%eval"; var peg$c156 = "[%"; var peg$c157 = "}"; var peg$c158 = ","; var peg$c159 = "Y"; var peg$c160 = "G"; var peg$c161 = "R"; var peg$c162 = "B"; var peg$c163 = "O"; var peg$c164 = "C"; var peg$c165 = "{"; var peg$c166 = "["; var peg$c167 = "]"; var peg$c168 = ";"; var peg$c169 = "clk"; var peg$c170 = "egt"; var peg$c171 = "emt"; var peg$c172 = "mct"; var peg$c173 = "("; var peg$c174 = ")"; var peg$c175 = " "; var peg$c176 = "e.p."; var peg$c177 = "O-O-O"; var peg$c178 = "O-O"; var peg$c179 = "@"; var peg$c180 = "Z0"; var peg$c181 = "+-"; var peg$c182 = "$$$"; var peg$c183 = "#"; var peg$c184 = "$"; var peg$c185 = "!!"; var peg$c186 = "??"; var peg$c187 = "!?"; var peg$c188 = "?!"; var peg$c189 = "!"; var peg$c190 = "\u203C"; var peg$c191 = "\u2047"; var peg$c192 = "\u2049"; var peg$c193 = "\u2048"; var peg$c194 = "\u25A1"; var peg$c195 = "\u221E"; var peg$c196 = "\u2A72"; var peg$c197 = "\u2A71"; var peg$c198 = "\xB1"; var peg$c199 = "\u2213"; var peg$c200 = "-+"; var peg$c201 = "\u2A00"; var peg$c202 = "\u27F3"; var peg$c203 = "\u2192"; var peg$c204 = "\u2191"; var peg$c205 = "\u21C6"; var peg$c206 = "D"; var peg$c207 = "x"; var peg$r0 = /^[ \t\n\r]/; var peg$r1 = /^[\n\r]/; var peg$r2 = /^[\-a-zA-Z0-9_.]/; var peg$r3 = /^[^"\\\r\n]/; var peg$r4 = /^[0-9?]/; var peg$r5 = /^[0-9]/; var peg$r6 = /^[BNW]/; var peg$r7 = /^[^\n\r]/; var peg$r8 = /^[1-8a-h]/; var peg$r9 = /^[RNBQKP]/; var peg$r10 = /^[RNBQ]/; var peg$r11 = /^[a-h]/; var peg$r12 = /^[1-8]/; var peg$r13 = /^[\-x]/; var peg$e0 = peg$literalExpectation("\uFEFF", false); var peg$e1 = peg$literalExpectation("Event", false); var peg$e2 = peg$literalExpectation("event", false); var peg$e3 = peg$literalExpectation("Site", false); var peg$e4 = peg$literalExpectation("site", false); var peg$e5 = peg$literalExpectation("Date", false); var peg$e6 = peg$literalExpectation("date", false); var peg$e7 = peg$literalExpectation("Round", false); var peg$e8 = peg$literalExpectation("round", false); var peg$e9 = peg$literalExpectation("White", false); var peg$e10 = peg$literalExpectation("white", false); var peg$e11 = peg$literalExpectation("Black", false); var peg$e12 = peg$literalExpectation("black", false); var peg$e13 = peg$literalExpectation("Result", false); var peg$e14 = peg$literalExpectation("result", false); var peg$e15 = peg$literalExpectation("WhiteTitle", false); var peg$e16 = peg$literalExpectation("Whitetitle", false); var peg$e17 = peg$literalExpectation("whitetitle", false); var peg$e18 = peg$literalExpectation("whiteTitle", false); var peg$e19 = peg$literalExpectation("BlackTitle", false); var peg$e20 = peg$literalExpectation("Blacktitle", false); var peg$e21 = peg$literalExpectation("blacktitle", false); var peg$e22 = peg$literalExpectation("blackTitle", false); var peg$e23 = peg$literalExpectation("WhiteELO", false); var peg$e24 = peg$literalExpectation("WhiteElo", false); var peg$e25 = peg$literalExpectation("Whiteelo", false); var peg$e26 = peg$literalExpectation("whiteelo", false); var peg$e27 = peg$literalExpectation("whiteElo", false); var peg$e28 = peg$literalExpectation("BlackELO", false); var peg$e29 = peg$literalExpectation("BlackElo", false); var peg$e30 = peg$literalExpectation("Blackelo", false); var peg$e31 = peg$literalExpectation("blackelo", false); var peg$e32 = peg$literalExpectation("blackElo", false); var peg$e33 = peg$literalExpectation("WhiteUSCF", false); var peg$e34 = peg$literalExpectation("WhiteUscf", false); var peg$e35 = peg$literalExpectation("Whiteuscf", false); var peg$e36 = peg$literalExpectation("whiteuscf", false); var peg$e37 = peg$literalExpectation("whiteUscf", false); var peg$e38 = peg$literalExpectation("BlackUSCF", false); var peg$e39 = peg$literalExpectation("BlackUscf", false); var peg$e40 = peg$literalExpectation("Blackuscf", false); var peg$e41 = peg$literalExpectation("blackuscf", false); var peg$e42 = peg$literalExpectation("blackUscf", false); var peg$e43 = peg$literalExpectation("WhiteNA", false); var peg$e44 = peg$literalExpectation("WhiteNa", false); var peg$e45 = peg$literalExpectation("Whitena", false); var peg$e46 = peg$literalExpectation("whitena", false); var peg$e47 = peg$literalExpectation("whiteNa", false); var peg$e48 = peg$literalExpectation("whiteNA", false); var peg$e49 = peg$literalExpectation("BlackNA", false); var peg$e50 = peg$literalExpectation("BlackNa", false); var peg$e51 = peg$literalExpectation("Blackna", false); var peg$e52 = peg$literalExpectation("blackna", false); var peg$e53 = peg$literalExpectation("blackNA", false); var peg$e54 = peg$literalExpectation("blackNa", false); var peg$e55 = peg$literalExpectation("WhiteType", false); var peg$e56 = peg$literalExpectation("Whitetype", false); var peg$e57 = peg$literalExpectation("whitetype", false); var peg$e58 = peg$literalExpectation("whiteType", false); var peg$e59 = peg$literalExpectation("BlackType", false); var peg$e60 = peg$literalExpectation("Blacktype", false); var peg$e61 = peg$literalExpectation("blacktype", false); var peg$e62 = peg$literalExpectation("blackType", false); var peg$e63 = peg$literalExpectation("EventDate", false); var peg$e64 = peg$literalExpectation("Eventdate", false); var peg$e65 = peg$literalExpectation("eventdate", false); var peg$e66 = peg$literalExpectation("eventDate", false); var peg$e67 = peg$literalExpectation("EventSponsor", false); var peg$e68 = peg$literalExpectation("Eventsponsor", false); var peg$e69 = peg$literalExpectation("eventsponsor", false); var peg$e70 = peg$literalExpectation("eventSponsor", false); var peg$e71 = peg$literalExpectation("Section", false); var peg$e72 = peg$literalExpectation("section", false); var peg$e73 = peg$literalExpectation("Stage", false); var peg$e74 = peg$literalExpectation("stage", false); var peg$e75 = peg$literalExpectation("Board", false); var peg$e76 = peg$literalExpectation("board", false); var peg$e77 = peg$literalExpectation("Opening", false); var peg$e78 = peg$literalExpectation("opening", false); var peg$e79 = peg$literalExpectation("Variation", false); var peg$e80 = peg$literalExpectation("variation", false); var peg$e81 = peg$literalExpectation("SubVariation", false); var peg$e82 = peg$literalExpectation("Subvariation", false); var peg$e83 = peg$literalExpectation("subvariation", false); var peg$e84 = peg$literalExpectation("subVariation", false); var peg$e85 = peg$literalExpectation("ECO", false); var peg$e86 = peg$literalExpectation("Eco", false); var peg$e87 = peg$literalExpectation("eco", false); var peg$e88 = peg$literalExpectation("NIC", false); var peg$e89 = peg$literalExpectation("Nic", false); var peg$e90 = peg$literalExpectation("nic", false); var peg$e91 = peg$literalExpectation("Time", false); var peg$e92 = peg$literalExpectation("time", false); var peg$e93 = peg$literalExpectation("UTCTime", false); var peg$e94 = peg$literalExpectation("UTCtime", false); var peg$e95 = peg$literalExpectation("UtcTime", false); var peg$e96 = peg$literalExpectation("Utctime", false); var peg$e97 = peg$literalExpectation("utctime", false); var peg$e98 = peg$literalExpectation("utcTime", false); var peg$e99 = peg$literalExpectation("UTCDate", false); var peg$e100 = peg$literalExpectation("UTCdate", false); var peg$e101 = peg$literalExpectation("UtcDate", false); var peg$e102 = peg$literalExpectation("Utcdate", false); var peg$e103 = peg$literalExpectation("utcdate", false); var peg$e104 = peg$literalExpectation("utcDate", false); var peg$e105 = peg$literalExpectation("TimeControl", false); var peg$e106 = peg$literalExpectation("Timecontrol", false); var peg$e107 = peg$literalExpectation("timecontrol", false); var peg$e108 = peg$literalExpectation("timeControl", false); var peg$e109 = peg$literalExpectation("SetUp", false); var peg$e110 = peg$literalExpectation("Setup", false); var peg$e111 = peg$literalExpectation("setup", false); var peg$e112 = peg$literalExpectation("setUp", false); var peg$e113 = peg$literalExpectation("FEN", false); var peg$e114 = peg$literalExpectation("Fen", false); var peg$e115 = peg$literalExpectation("fen", false); var peg$e116 = peg$literalExpectation("Termination", false); var peg$e117 = peg$literalExpectation("termination", false); var peg$e118 = peg$literalExpectation("Annotator", false); var peg$e119 = peg$literalExpectation("annotator", false); var peg$e120 = peg$literalExpectation("Mode", false); var peg$e121 = peg$literalExpectation("mode", false); var peg$e122 = peg$literalExpectation("PlyCount", false); var peg$e123 = peg$literalExpectation("Plycount", false); var peg$e124 = peg$literalExpectation("plycount", false); var peg$e125 = peg$literalExpectation("plyCount", false); var peg$e126 = peg$literalExpectation("Variant", false); var peg$e127 = peg$literalExpectation("variant", false); var peg$e128 = peg$literalExpectation("WhiteRatingDiff", false); var peg$e129 = peg$literalExpectation("BlackRatingDiff", false); var peg$e130 = peg$literalExpectation("WhiteFideId", false); var peg$e131 = peg$literalExpectation("BlackFideId", false); var peg$e132 = peg$literalExpectation("WhiteTeam", false); var peg$e133 = peg$literalExpectation("BlackTeam", false); var peg$e134 = peg$literalExpectation("Clock", false); var peg$e135 = peg$literalExpectation("WhiteClock", false); var peg$e136 = peg$literalExpectation("BlackClock", false); var peg$e137 = peg$otherExpectation("whitespace"); var peg$e138 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false); var peg$e139 = peg$classExpectation(["\n", "\r"], false, false); var peg$e141 = peg$classExpectation(["-", ["a", "z"], ["A", "Z"], ["0", "9"], "_", "."], false, false); var peg$e142 = peg$literalExpectation("\"", false); var peg$e143 = peg$classExpectation(["\"", "\\", "\r", "\n"], true, false); var peg$e144 = peg$literalExpectation("\\", false); var peg$e145 = peg$classExpectation([["0", "9"], "?"], false, false); var peg$e146 = peg$literalExpectation(".", false); var peg$e147 = peg$classExpectation([["0", "9"]], false, false); var peg$e148 = peg$literalExpectation(":", false); var peg$e149 = peg$literalExpectation("/", false); var peg$e150 = peg$classExpectation(["B", "N", "W"], false, false); var peg$e151 = peg$literalExpectation("?", false); var peg$e152 = peg$literalExpectation("-", false); var peg$e153 = peg$literalExpectation("+", false); var peg$e154 = peg$literalExpectation("*", false); var peg$e155 = peg$literalExpectation("1-0", false); var peg$e156 = peg$literalExpectation("0-1", false); var peg$e157 = peg$literalExpectation("1/2-1/2", false); var peg$e158 = peg$literalExpectation("1/2", false); var peg$e159 = peg$literalExpectation("=", false); var peg$e160 = peg$literalExpectation("%csl", false); var peg$e161 = peg$literalExpectation("%cal", false); var peg$e162 = peg$literalExpectation("%", false); var peg$e163 = peg$literalExpectation("%eval", false); var peg$e164 = peg$literalExpectation("[%", false); var peg$e165 = peg$literalExpectation("}", false); var peg$e166 = peg$anyExpectation(); var peg$e167 = peg$classExpectation(["\n", "\r"], true, false); var peg$e168 = peg$literalExpectation(",", false); var peg$e169 = peg$literalExpectation("Y", false); var peg$e170 = peg$literalExpectation("G", false); var peg$e171 = peg$literalExpectation("R", false); var peg$e172 = peg$literalExpectation("B", false); var peg$e173 = peg$literalExpectation("O", false); var peg$e174 = peg$literalExpectation("C", false); var peg$e175 = peg$literalExpectation("{", false); var peg$e176 = peg$literalExpectation("[", false); var peg$e177 = peg$literalExpectation("]", false); var peg$e178 = peg$literalExpectation(";", false); var peg$e179 = peg$literalExpectation("clk", false); var peg$e180 = peg$literalExpectation("egt", false); var peg$e181 = peg$literalExpectation("emt", false); var peg$e182 = peg$literalExpectation("mct", false); var peg$e183 = peg$literalExpectation("(", false); var peg$e184 = peg$literalExpectation(")", false); var peg$e185 = peg$otherExpectation("integer"); var peg$e186 = peg$literalExpectation(" ", false); var peg$e187 = peg$literalExpectation("e.p.", false); var peg$e188 = peg$literalExpectation("O-O-O", false); var peg$e189 = peg$literalExpectation("O-O", false); var peg$e190 = peg$literalExpectation("@", false); var peg$e191 = peg$literalExpectation("Z0", false); var peg$e192 = peg$literalExpectation("+-", false); var peg$e193 = peg$literalExpectation("$$$", false); var peg$e194 = peg$literalExpectation("#", false); var peg$e195 = peg$literalExpectation("$", false); var peg$e196 = peg$literalExpectation("!!", false); var peg$e197 = peg$literalExpectation("??", false); var peg$e198 = peg$literalExpectation("!?", false); var peg$e199 = peg$literalExpectation("?!", false); var peg$e200 = peg$literalExpectation("!", false); var peg$e201 = peg$literalExpectation("\u203C", false); var peg$e202 = peg$literalExpectation("\u2047", false); var peg$e203 = peg$literalExpectation("\u2049", false); var peg$e204 = peg$literalExpectation("\u2048", false); var peg$e205 = peg$literalExpectation("\u25A1", false); var peg$e206 = peg$literalExpectation("\u221E", false); var peg$e207 = peg$literalExpectation("\u2A72", false); var peg$e208 = peg$literalExpectation("\u2A71", false); var peg$e209 = peg$literalExpectation("\xB1", false); var peg$e210 = peg$literalExpectation("\u2213", false); var peg$e211 = peg$literalExpectation("-+", false); var peg$e212 = peg$literalExpectation("\u2A00", false); var peg$e213 = peg$literalExpectation("\u27F3", false); var peg$e214 = peg$literalExpectation("\u2192", false); var peg$e215 = peg$literalExpectation("\u2191", false); var peg$e216 = peg$literalExpectation("\u21C6", false); var peg$e217 = peg$literalExpectation("D", false); var peg$e218 = peg$classExpectation([["1", "8"], ["a", "h"]], false, false); var peg$e219 = peg$classExpectation(["R", "N", "B", "Q", "K", "P"], false, false); var peg$e220 = peg$classExpectation(["R", "N", "B", "Q"], false, false); var peg$e221 = peg$classExpectation([["a", "h"]], false, false); var peg$e222 = peg$classExpectation([["1", "8"]], false, false); var peg$e223 = peg$literalExpectation("x", false); var peg$e224 = peg$classExpectation(["-", "x"], false, false); var peg$f0 = function (head, m) { return m; }; var peg$f1 = function (head, tail) { //console.log("Length tail: " + tail.length); return [head].concat(tail); }; var peg$f2 = function (games) { //console.log("Length: " + games.length); return games; }; var peg$f3 = function (t, c, p) { //console.log("Length pgn: " + p.length); var mess = messages; messages = []; return { tags: t, gameComment: c, moves: p, messages: mess }; }; var peg$f4 = function (head, m) { return m; }; var peg$f5 = function (head, tail) { var result = {}; [head].concat(tail).forEach(function (element) { result[element.name] = element.value; }); return result; }; var peg$f6 = function (members) { if (members === null) return {}; members.messages = messages; return members; }; var peg$f7 = function (tag) { return tag; }; var peg$f8 = function (value) { return { name: 'Event', value: value }; }; var peg$f9 = function (value) { return { name: 'Site', value: value }; }; var peg$f10 = function (value) { return { name: 'Date', value: value }; }; var peg$f11 = function (value) { return { name: 'Round', value: value }; }; var peg$f12 = function (value) { return { name: 'WhiteTitle', value: value }; }; var peg$f13 = function (value) { return { name: 'BlackTitle', value: value }; }; var peg$f14 = function (value) { return { name: 'WhiteElo', value: value }; }; var peg$f15 = function (value) { return { name: 'BlackElo', value: value }; }; var peg$f16 = function (value) { return { name: 'WhiteUSCF', value: value }; }; var peg$f17 = function (value) { return { name: 'BlackUSCF', value: value }; }; var peg$f18 = function (value) { return { name: 'WhiteNA', value: value }; }; var peg$f19 = function (value) { return { name: 'BlackNA', value: value }; }; var peg$f20 = function (value) { return { name: 'WhiteType', value: value }; }; var peg$f21 = function (value) { return { name: 'BlackType', value: value }; }; var peg$f22 = function (value) { return { name: 'White', value: value }; }; var peg$f23 = function (value) { return { name: 'Black', value: value }; }; var peg$f24 = function (value) { return { name: 'Result', value: value }; }; var peg$f25 = function (value) { return { name: 'EventDate', value: value }; }; var peg$f26 = function (value) { return { name: 'EventSponsor', value: value }; }; var peg$f27 = function (value) { return { name: 'Section', value: value }; }; var peg$f28 = function (value) { return { name: 'Stage', value: value }; }; var peg$f29 = function (value) { return { name: 'Board', value: value }; }; var peg$f30 = function (value) { return { name: 'Opening', value: value }; }; var peg$f31 = function (value) { return { name: 'Variation', value: value }; }; var peg$f32 = function (value) { return { name: 'SubVariation', value: value }; }; var peg$f33 = function (value) { return { name: 'ECO', value: value }; }; var peg$f34 = function (value) { return { name: 'NIC', value: value }; }; var peg$f35 = function (value) { return { name: 'Time', value: value }; }; var peg$f36 = function (value) { return { name: 'UTCTime', value: value }; }; var peg$f37 = function (value) { return { name: 'UTCDate', value: value }; }; var peg$f38 = function (value) { return { name: 'TimeControl', value: value }; }; var peg$f39 = function (value) { return { name: 'SetUp', value: value }; }; var peg$f40 = function (value) { return { name: 'FEN', value: value }; }; var peg$f41 = function (value) { return { name: 'Termination', value: value }; }; var peg$f42 = function (value) { return { name: 'Annotator', value: value }; }; var peg$f43 = function (value) { return { name: 'Mode', value: value }; }; var peg$f44 = function (value) { return { name: 'PlyCount', value: value }; }; var peg$f45 = function (value) { return { name: 'Variant', value: value }; }; var peg$f46 = function (value) { return { name: 'WhiteRatingDiff', value: value }; }; var peg$f47 = function (value) { return { name: 'BlackRatingDiff', value: value }; }; var peg$f48 = function (value) { return { name: 'WhiteFideId', value: value }; }; var peg$f49 = function (value) { return { name: 'BlackFideId', value: value }; }; var peg$f50 = function (value) { return { name: 'WhiteTeam', value: value }; }; var peg$f51 = function (value) { return { name: 'BlackTeam', value: value }; }; var peg$f52 = function (value) { return { name: 'Clock', value: value }; }; var peg$f53 = function (value) { return { name: 'WhiteClock', value: value }; }; var peg$f54 = function (value) { return { name: 'BlackClock', value: value }; }; var peg$f55 = function (a, value) { addMessage({ key: a, value: value, message: `Format of tag: "${a}" not correct: "${value}"` }); return { name: a, value: value }; }; var peg$f56 = function (a, value) { addMessage({ key: a, value: value, message: `Tag: "${a}" not known: "${value}"` }); return { name: a, value: value }; }; var peg$f58 = function (chars) { return chars.join(""); }; var peg$f59 = function (stringContent) { return stringContent.map(c => c.char || c).join(''); }; var peg$f60 = function () { return { type: "char", char: "\\" }; }; var peg$f61 = function () { return { type: "char", char: '"' }; }; var peg$f62 = function (sequence) { return sequence; }; var peg$f63 = function (year, month, day) { let val = "" + year.join("") + '.' + month.join("") + '.' + day.join(""); return { value: val, year: mi(year), month: mi(month), day: mi(day) }; }; var peg$f64 = function (hour, minute, second, millis) { let val = hour.join("") + ':' + minute.join("") + ':' + second.join(""); let ms = 0; if (millis) { val = val + '.' + millis; addMessage({ message: `Unusual use of millis in time: ${val}` }); mi(millis); } return { value: val, hour: mi(hour), minute: mi(minute), second: mi(second), millis: ms }; }; var peg$f65 = function (millis) { return millis.join(""); }; var peg$f66 = function (value) { return value; }; var peg$f67 = function (c, t) { return c + '/' + t; }; var peg$f68 = function (value) { return value; }; var peg$f69 = function (value) { return value; }; var peg$f70 = function (res) { if (!res) { addMessage({ message: "Tag TimeControl has to have a value" }); return ""; } return res; }; var peg$f71 = function (head, m) { return m; }; var peg$f72 = function (head, tail) { let ret = [head].concat(tail); ret.value = ret.map(ret => ret.value).join(':'); return ret; }; var peg$f73 = function (tcnqs) { return tcnqs; }; var peg$f74 = function () { return { kind: 'unknown', value: '?' }; }; var peg$f75 = function () { return { kind: 'unlimited', value: '-' }; }; var peg$f76 = function (moves, seconds, incr) { return { kind: 'movesInSecondsIncrement', moves: moves, seconds: seconds, increment: incr, value: '' + moves + '/' + seconds + '+' + incr }; }; var peg$f77 = function (moves, seconds) { return { kind: 'movesInSeconds', moves: moves, seconds: seconds, value: '' + moves + '/' + seconds }; }; var peg$f78 = function (seconds, incr) { return { kind: 'increment', seconds: seconds, increment: incr, value: '' + seconds + '+' + incr }; }; var peg$f79 = function (seconds) { return { kind: 'suddenDeath', seconds: seconds, value: '' + seconds }; }; var peg$f80 = function (seconds) { return { kind: 'hourglass', seconds: seconds, value: '*' + seconds }; }; var peg$f81 = function (res) { return res; }; var peg$f82 = function (res) { return res; }; var peg$f83 = function (res) { return res; }; var peg$f84 = function (res) { return res; }; var peg$f85 = function () { return "1/2-1/2"; }; var peg$f86 = function (res) { return res; }; var peg$f87 = function (v) { return v; }; var peg$f88 = function () { return 0; }; var peg$f89 = function () { addMessage({ message: 'Use "-" for an unknown value' }); return 0; }; var peg$f90 = function (digits) { return makeInteger(digits); }; var peg$f91 = function (cm, mn, hm, nag, dr, ca, vari, all) { var arr = (all ? all : []); var move = {}; move.moveNumber = mn; move.notation = hm; if (ca) { move.commentAfter = ca.comment; } if (cm) { move.commentMove = cm.comment; } if (dr) { move.drawOffer = true; } move.variations = (vari ? vari : []); move.nag = (nag ? nag : null); arr.unshift(move); move.commentDiag = ca; return arr; }; var peg$f92 = function (e) { return e; }; var peg$f93 = function (eg) { return [eg]; }; var peg$f94 = function (cf, c) { return c; }; var peg$f95 = function (cf, cfl) { return merge([cf].concat(cfl)); }; var peg$f96 = function () { return; }; var peg$f97 = function (cm) { return cm; }; var peg$f98 = function (cm) { return { comment: cm }; }; var peg$f99 = function (cf, ic) { return ic; }; var peg$f100 = function (cf, tail) { return merge([{ colorFields: cf }].concat(tail[0])); }; var peg$f101 = function (ca, ic) { return ic; }; var peg$f102 = function (ca, tail) { return merge([{ colorArrows: ca }].concat(tail[0])); }; var peg$f103 = function (cc, cv, ic) { return ic; }; var peg$f104 = function (cc, cv, tail) { var ret = {}; ret[cc] = cv; return merge([ret].concat(tail[0])); }; var peg$f105 = function (cc, cv, ic) { return ic; }; var peg$f106 = function (cc, cv, tail) { var ret = {}; ret[cc] = cv; return merge([ret].concat(tail[0])); }; var peg$f107 = function (ev, ic) { return ic; }; var peg$f108 = function (ev, tail) { var ret = {}; ret["eval"] = parseFloat(ev); return merge([ret].concat(tail[0])); }; var peg$f109 = function (ac, val, ic) { return ic; }; var peg$f110 = function (ac, val, tail) { var ret = {}; ret[ac] = val.join(""); return merge([ret].concat(tail[0])); }; var peg$f111 = function (c, ic) { return ic; }; var peg$f112 = function (c, tail) { if (tail.length > 0) { return merge([{ comment: trimEnd(c.join("")) }].concat(trimStart(tail[0]))); } else { return { comment: c.join("") }; } }; var peg$f113 = function (ch) { return ch; }; var peg$f114 = function (ch) { return ch; }; var peg$f115 = function (cm) { return cm.join(""); }; var peg$f116 = function (cf, cfl) { var arr = []; arr.push(cf); for (var i = 0; i < cfl.length; i++) { arr.push(cfl[i][2]); } return arr; }; var peg$f117 = function (col, f) { return col + f; }; var peg$f118 = function (cf, cfl) { var arr = []; arr.push(cf); for (var i = 0; i < cfl.length; i++) { arr.push(cfl[i][2]); } return arr; }; var peg$f119 = function (col, ff, ft) { return col + ff + ft; }; var peg$f120 = function () { return "Y"; }; var peg$f121 = function () { return "G"; }; var peg$f122 = function () { return "R"; }; var peg$f123 = function () { return "B"; }; var peg$f124 = function () { return "O"; }; var peg$f125 = function () { return "C"; }; var peg$f126 = function (col, row) { return col + row; }; var peg$f131 = function () { return "clk"; }; var peg$f132 = function () { return "egt"; }; var peg$f133 = function () { return "emt"; }; var peg$f134 = function () { return "mct"; }; var peg$f135 = function (hm, s1, s2, millis) { let ret = s1; if (!hm) { addMessage({ message: `Hours and minutes missing` }); } else { ret = hm + ret; } if (hm && ((hm.match(/:/g) || []).length == 2)) { if (hm.search(':') == 2) { addMessage({ message: `Only 1 digit for hours normally used` }); } } if (!s2) { addMessage({ message: `Only 2 digit for seconds normally used` }); } else { ret += s2; } if (millis) { addMessage({ message: `Unusual use of millis in clock value` }); ret += '.' + millis; } return ret; }; var peg$f136 = function (hm, s1, s2) { let ret = s1; if (!hm) { addMessage({ message: `Hours and minutes missing` }); } else { ret = hm + ret; } if (hm && ((hm.match(/:/g) || []).length == 2)) { if (hm.search(':') == 1) { addMessage({ message: `Only 2 digits for hours normally used` }); } } if (!s2) { addMessage({ message: `Only 2 digit for seconds normally used` }); } else { ret += s2; } return ret; }; var peg$f137 = function (hours, minutes) { if (!minutes) { addMessage({ message: `No hours found` }); return hours; } return hours + minutes; }; var peg$f138 = function (h1, h2) { let ret = h1; if (h2) { ret += h2 + ":"; } else { ret += ":"; } return ret; }; var peg$f139 = function (m1, m2) { let ret = m1; if (m2) { ret += m2 + ":"; } else { ret += ":"; addMessage({ message: `Only 2 digits for minutes normally used` }); } return ret; }; var peg$f140 = function (d) { return d; }; var peg$f141 = function (vari, all) { var arr = (all ? all : []); arr.unshift(vari); return arr; }; var peg$f142 = function (num) { return num; }; var peg$f143 = function (digits) { return makeInteger(digits); }; var peg$f144 = function () { return ''; }; var peg$f145 = function (fig, disc, str, col, row, pr, ch) { var hm = {}; hm.fig = (fig ? fig : null); hm.disc = (disc ? disc : null); hm.strike = (str ? str : null); hm.col = col; hm.row = row; hm.check = (ch ? ch : null); hm.promotion = pr; hm.notation = (fig ? fig : "") + (disc ? disc : "") + (str ? str : "") + col + row + (pr ? pr : "") + (ch ? ch : ""); return hm; }; var peg$f146 = function (fig, cols, rows, str, col, row, pr, ch) { var hm = {}; hm.fig = (fig ? fig : null); hm.strike = (str == 'x' ? str : null); hm.col = col; hm.row = row; hm.notation = (fig && (fig !== 'P') ? fig : "") + cols + rows + (str == 'x' ? str : "-") + col + row + (pr ? pr : "") + (ch ? ch : ""); hm.check = (ch ? ch : null); hm.promotion = pr; return hm; }; var peg$f147 = function (fig, str, col, row, pr, ch) { var hm = {}; hm.fig = (fig ? fig : null); hm.strike = (str ? str : null); hm.col = col; hm.row = row; hm.check = (ch ? ch : null); hm.promotion = pr; hm.notation = (fig ? fig : "") + (str ? str : "") + col + row + (pr ? pr : "") + (ch ? ch : ""); return hm; }; var peg$f148 = function (ch) { var hm = {}; hm.notation = 'O-O-O' + (ch ? ch : ""); hm.check = (ch ? ch : null); return hm; }; var peg$f149 = function (ch) { var hm = {}; hm.notation = 'O-O' + (ch ? ch : ""); hm.check = (ch ? ch : null); return hm; }; var peg$f150 = function (fig, col, row) { var hm = {}; hm.fig = fig; hm.drop = true; hm.col = col; hm.row = row; hm.notation = fig + '@' + col + row; return hm; }; var peg$f151 = function () { var hm = {}; hm.notation = "Z0"; return hm; }; var peg$f152 = function (ch) { return ch[1]; }; var peg$f153 = function (ch) { return ch[1]; }; var peg$f154 = function (f) { return '=' + f; }; var peg$f155 = function (nag, nags) { var arr = (nags ? nags : []); arr.unshift(nag); return arr; }; var peg$f156 = function (num) { return '$' + num; }; var peg$f157 = function () { return '$3'; }; var peg$f158 = function () { return '$4'; }; var peg$f159 = function () { return '$5'; }; var peg$f160 = function () { return '$6'; }; var peg$f161 = function () { return '$1'; }; var peg$f162 = function () { return '$2'; }; var peg$f163 = function () { return '$3'; }; var peg$f164 = function () { return '$4'; }; var peg$f165 = function () { return '$5'; }; var peg$f166 = function () { return '$6'; }; var peg$f167 = function () { return '$7'; }; var peg$f168 = function () { return '$10'; }; var peg$f169 = function () { return '$13'; }; var peg$f170 = function () { return '$14'; }; var peg$f171 = function () { return '$15'; }; var peg$f