12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- '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;
- });
- };
|