npmc
Version:
a package manager for JavaScript
299 lines (243 loc) • 5.56 kB
JavaScript
var QRErrorCorrectLevel = require('./QRErrorCorrectLevel');
function QRRSBlock(totalCount, dataCount) {
this.totalCount = totalCount;
this.dataCount = dataCount;
}
QRRSBlock.RS_BLOCK_TABLE = [
// L
// M
// Q
// H
// 1
[],
[],
[],
[],
// 2
[],
[],
[],
[],
// 3
[],
[],
[],
[],
// 4
[],
[],
[],
[],
// 5
[],
[],
[],
[],
// 6
[],
[],
[],
[],
// 7
[],
[],
[],
[],
// 8
[],
[],
[],
[],
// 9
[],
[],
[],
[],
// 10
[],
[],
[],
[],
// 11
[],
[],
[],
[],
// 12
[],
[],
[],
[],
// 13
[],
[],
[],
[],
// 14
[],
[],
[],
[],
// 15
[],
[],
[],
[],
// 16
[],
[],
[],
[],
// 17
[],
[],
[],
[],
// 18
[],
[],
[],
[],
// 19
[],
[],
[],
[],
// 20
[],
[],
[],
[],
// 21
[],
[],
[],
[],
// 22
[],
[],
[],
[],
// 23
[],
[],
[],
[],
// 24
[],
[],
[],
[],
// 25
[],
[],
[],
[],
// 26
[],
[],
[],
[],
// 27
[],
[],
[],
[],
// 28
[],
[],
[],
[],
// 29
[],
[],
[],
[],
// 30
[],
[],
[],
[],
// 31
[],
[],
[],
[],
// 32
[],
[],
[],
[],
// 33
[],
[],
[],
[],
// 34
[],
[],
[],
[],
// 35
[],
[],
[],
[],
// 36
[],
[],
[],
[],
// 37
[],
[],
[],
[],
// 38
[],
[],
[],
[],
// 39
[],
[],
[],
[],
// 40
[],
[],
[],
[]
];
QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {
var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
if (rsBlock === undefined) {
throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
}
var length = rsBlock.length / 3;
var list = [];
for (var i = 0; i < length; i++) {
var count = rsBlock[i * 3 + 0];
var totalCount = rsBlock[i * 3 + 1];
var dataCount = rsBlock[i * 3 + 2];
for (var j = 0; j < count; j++) {
list.push(new QRRSBlock(totalCount, dataCount) );
}
}
return list;
};
QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {
switch(errorCorrectLevel) {
case QRErrorCorrectLevel.L :
return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
case QRErrorCorrectLevel.M :
return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
case QRErrorCorrectLevel.Q :
return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
case QRErrorCorrectLevel.H :
return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
default :
return undefined;
}
};
module.exports = QRRSBlock;