protected function get128ABsequence($code)
{
$len = strlen($code);
$sequence = array();
// get A sequences (if any)
$numseq = array();
preg_match_all('/([\\0-\\31])/', $code, $numseq, PREG_OFFSET_CAPTURE);
if (isset($numseq[1]) and !empty($numseq[1])) {
$end_offset = 0;
foreach ($numseq[1] as $val) {
$offset = $val[1];
if ($offset > $end_offset) {
// B sequence
$sequence[] = array('B', substr($code, $end_offset, $offset - $end_offset), $offset - $end_offset);
}
// A sequence
$slen = strlen($val[0]);
$sequence[] = array('A', substr($code, $offset, $slen), $slen);
$end_offset = $offset + $slen;
}
if ($end_offset < $len) {
$sequence[] = array('B', substr($code, $end_offset), $len - $end_offset);
}
} else {
// only B sequence
$sequence[] = array('B', $code, $len);
}
return $sequence;
}