'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _constants = require('./constants'); // Match Set functions var matchSetALength = function matchSetALength(string) { return string.match(new RegExp('^' + _constants.A_CHARS + '*'))[0].length; }; var matchSetBLength = function matchSetBLength(string) { return string.match(new RegExp('^' + _constants.B_CHARS + '*'))[0].length; }; var matchSetC = function matchSetC(string) { return string.match(new RegExp('^' + _constants.C_CHARS + '*'))[0]; }; // CODE128A or CODE128B function autoSelectFromAB(string, isA) { var ranges = isA ? _constants.A_CHARS : _constants.B_CHARS; var untilC = string.match(new RegExp('^(' + ranges + '+?)(([0-9]{2}){2,})([^0-9]|$)')); if (untilC) { return untilC[1] + String.fromCharCode(204) + autoSelectFromC(string.substring(untilC[1].length)); } var chars = string.match(new RegExp('^' + ranges + '+'))[0]; if (chars.length === string.length) { return string; } return chars + String.fromCharCode(isA ? 205 : 206) + autoSelectFromAB(string.substring(chars.length), !isA); } // CODE128C function autoSelectFromC(string) { var cMatch = matchSetC(string); var length = cMatch.length; if (length === string.length) { return string; } string = string.substring(length); // Select A/B depending on the longest match var isA = matchSetALength(string) >= matchSetBLength(string); return cMatch + String.fromCharCode(isA ? 206 : 205) + autoSelectFromAB(string, isA); } // Detect Code Set (A, B or C) and format the string exports.default = function (string) { var newString = void 0; var cLength = matchSetC(string).length; // Select 128C if the string start with enough digits if (cLength >= 2) { newString = _constants.C_START_CHAR + autoSelectFromC(string); } else { // Select A/B depending on the longest match var isA = matchSetALength(string) > matchSetBLength(string); newString = (isA ? _constants.A_START_CHAR : _constants.B_START_CHAR) + autoSelectFromAB(string, isA); } return newString.replace(/[\xCD\xCE]([^])[\xCD\xCE]/, // Any sequence between 205 and 206 characters function (match, char) { return String.fromCharCode(203) + char; }); };