private function upc_a_encode($data) {
$data = $this->upc_a_normalize($data);
$blocks = array();
/* Quiet zone, start, first digit. */
$digit = substr($data, 0, 1);
$blocks[] = array(
'm' => array(array(0, 9, 0)),
'l' => array($digit, 0, 1/3)
);
$blocks[] = array(
'm' => array(
array(1, 1, 1),
array(0, 1, 1),
array(1, 1, 1),
)
);
$blocks[] = array(
'm' => array(
array(0, $this->upc_alphabet[$digit][0], 1),
array(1, $this->upc_alphabet[$digit][1], 1),
array(0, $this->upc_alphabet[$digit][2], 1),
array(1, $this->upc_alphabet[$digit][3], 1),
)
);
/* Left zone. */
for ($i = 1; $i < 6; $i++) {
$digit = substr($data, $i, 1);
$blocks[] = array(
'm' => array(
array(0, $this->upc_alphabet[$digit][0], 1),
array(1, $this->upc_alphabet[$digit][1], 1),
array(0, $this->upc_alphabet[$digit][2], 1),
array(1, $this->upc_alphabet[$digit][3], 1),
),
'l' => array($digit, 0.5, (6 - $i) / 6)
);
}
/* Middle. */
$blocks[] = array(
'm' => array(
array(0, 1, 1),
array(1, 1, 1),
array(0, 1, 1),
array(1, 1, 1),
array(0, 1, 1),
)
);
/* Right zone. */
for ($i = 6; $i < 11; $i++) {
$digit = substr($data, $i, 1);
$blocks[] = array(
'm' => array(
array(1, $this->upc_alphabet[$digit][0], 1),
array(0, $this->upc_alphabet[$digit][1], 1),
array(1, $this->upc_alphabet[$digit][2], 1),
array(0, $this->upc_alphabet[$digit][3], 1),
),
'l' => array($digit, 0.5, (11 - $i) / 6)
);
}
/* Last digit, end, quiet zone. */
$digit = substr($data, 11, 1);
$blocks[] = array(
'm' => array(
array(1, $this->upc_alphabet[$digit][0], 1),
array(0, $this->upc_alphabet[$digit][1], 1),
array(1, $this->upc_alphabet[$digit][2], 1),
array(0, $this->upc_alphabet[$digit][3], 1),
)
);
$blocks[] = array(
'm' => array(
array(1, 1, 1),
array(0, 1, 1),
array(1, 1, 1),
)
);
$blocks[] = array(
'm' => array(array(0, 9, 0)),
'l' => array($digit, 0, 2/3)
);
/* Return code. */
return array('g' => 'l', 'b' => $blocks);
}