qrcode-generator-ts
Version:
Typescript QR Code generator based on https://github.com/kazuhikoarase/qrcode-generator
317 lines (260 loc) • 6.43 kB
text/typescript
import { ErrorCorrectLevel } from './ErrorCorrectLevel';
'use strict';
/**
* RSBlock
* @author Kazuhiko Arase
*/
export class RSBlock {
private static 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
[],
[],
[],
[]
];
constructor(
private totalCount: number,
private dataCount: number
) {
}
public getDataCount(): number {
return this.dataCount;
}
public getTotalCount(): number {
return this.totalCount;
}
public static getRSBlocks(
typeNumber: number,
errorCorrectLevel: ErrorCorrectLevel
): RSBlock[] {
var rsBlock = RSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
var length = rsBlock.length / 3;
var list: RSBlock[] = [];
for (var i = 0; i < length; i += 1) {
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 += 1) {
list.push(new RSBlock(totalCount, dataCount));
}
}
return list;
}
private static getRsBlockTable(
typeNumber: number,
errorCorrectLevel: ErrorCorrectLevel
): number[] {
switch (errorCorrectLevel) {
case ErrorCorrectLevel.L:
return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
case ErrorCorrectLevel.M:
return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
case ErrorCorrectLevel.Q:
return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
case ErrorCorrectLevel.H:
return RSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
default:
break;
}
throw 'tn:' + typeNumber + '/ecl:' + errorCorrectLevel;
}
}