- Модуль: ui
- Путь к файлу: ~/bitrix/modules/ui/lib/barcode/barcodegenerator.php
- Класс: BitrixUIBarcodeBarcodeGenerator
- Вызов: BarcodeGenerator::code_128_normalize
private function code_128_normalize($data, $dstate, $fnc1) {
$detectcba = '/(^[0-9]{4,}|^[0-9]{2}$)|([x60-x7F])|([x00-x1F])/';
$detectc = '/(^[0-9]{6,}|^[0-9]{4,}$)/';
$detectba = '/([x60-x7F])|([x00-x1F])/';
$consumec = '/(^[0-9]{2})/';
$state = (($dstate > 0 && $dstate < 4) ? $dstate : 0);
$abstate = ((abs($dstate) == 2) ? 2 : 1);
$chars = array(102 + ($state ? $state : $abstate));
if ($fnc1) $chars[] = 102;
while (strlen($data)) {
switch ($state) {
case 0:
if (preg_match($detectcba, $data, $m)) {
if ($m[1]) {
$state = 3;
} else if ($m[2]) {
$state = 2;
} else {
$state = 1;
}
} else {
$state = $abstate;
}
$chars = array(102 + $state);
if ($fnc1) $chars[] = 102;
break;
case 1:
if ($dstate <= 0 && preg_match($detectc, $data, $m)) {
if (strlen($m[0]) % 2) {
$data = substr($data, 1);
$chars[] = 16 + substr($m[0], 0, 1);
}
$state = 3;
$chars[] = 99;
} else {
$ch = ord(substr($data, 0, 1));
$data = substr($data, 1);
if ($ch < 32) {
$chars[] = $ch + 64;
} else if ($ch < 96) {
$chars[] = $ch - 32;
} else {
if (preg_match($detectba, $data, $m)) {
if ($m[1]) {
$state = 2;
$chars[] = 100;
} else {
$chars[] = 98;
}
} else {
$chars[] = 98;
}
$chars[] = $ch - 32;
}
}
break;
case 2:
if ($dstate <= 0 && preg_match($detectc, $data, $m)) {
if (strlen($m[0]) % 2) {
$data = substr($data, 1);
$chars[] = 16 + substr($m[0], 0, 1);
}
$state = 3;
$chars[] = 99;
} else {
$ch = ord(substr($data, 0, 1));
$data = substr($data, 1);
if ($ch >= 32) {
$chars[] = $ch - 32;
} else {
if (preg_match($detectba, $data, $m)) {
if ($m[2]) {
$state = 1;
$chars[] = 101;
} else {
$chars[] = 98;
}
} else {
$chars[] = 98;
}
$chars[] = $ch + 64;
}
}
break;
case 3:
if (preg_match($consumec, $data, $m)) {
$data = substr($data, 2);
$chars[] = (int)$m[0];
} else {
if (preg_match($detectba, $data, $m)) {
if ($m[1]) {
$state = 2;
} else {
$state = 1;
}
} else {
$state = $abstate;
}
$chars[] = 102 - $state;
}
break;
}
}
return $chars;
}