<dtml-comment>
decodes the raw output from a cuecat, from the variable
"code", into a list of [cat_id, barcode_type, barcode]
Derived from cat.py
http://www.plover.net/~skip/cc/
</dtml-comment>
<dtml-let to_list="[]">
<dtml-in "_.range(64)">
<dtml-call "to_list.append(_.chr(_['sequence-item']))">
</dtml-in>
<dtml-let scan_output="[]"
tt="_.string.maketrans(
_.string.letters+_.string.digits+'+-',
_.string.join(to_list, '')
)
">
<dtml-in "_.string.split(code, '.')">
<dtml-let s=sequence-item
valid="s and s[0]>' ' and s[0]!='^'">
<dtml-if valid>
<dtml-comment>decode</dtml-comment>
<dtml-let t="_.string.translate(s, tt)"
l="_.len(t)%4"
l="l and 4-l"
t="t+l*_.chr(0)"
r="[]">
<dtml-in "_.range(0, _.len(t), 4)">
<dtml-let i=sequence-item
i="_.int(i)"
n="((_.ord(t[i]) << 6 | _.ord(t[i+1])) << 6 | _.ord(t[i+2])) << 6 | _.ord(t[i+3])">
<dtml-call "r.append(_.chr((n >> 16) ^ 67))">
<dtml-call "r.append(_.chr((n >> 8 & 255) ^ 67))">
<dtml-call "r.append(_.chr((n & 255) ^ 67))">
</dtml-let>
</dtml-in>
<dtml-call "scan_output.append(_.string.join(l and r[:-l] or r, ''))">
</dtml-let>
</dtml-if>
</dtml-let>
</dtml-in>
<dtml-return scan_output>
</dtml-let scan_output tt>
</dtml-let to_list>
|