npm
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;