qrcode-matrix 0.2.1 → 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -36
- package/dist/qrcodeMatrix.umd.js +1298 -1297
- package/dist/qrcodeMatrix.umd.min.js +6 -0
- package/lib/encode/sjis.d.ts +2 -2
- package/lib/encode/sjisData.d.ts +2 -2
- package/lib/encode/utf-8.d.ts +2 -2
- package/lib/index.d.ts +5 -5
- package/lib/lib/BitBuffer.d.ts +9 -9
- package/lib/lib/QRMatrix.d.ts +10 -10
- package/lib/lib/bch-encode.d.ts +31 -31
- package/lib/lib/draw.d.ts +4 -4
- package/lib/modes/Alphanumeric.d.ts +3 -3
- package/lib/modes/Byte.d.ts +3 -3
- package/lib/modes/Kanji.d.ts +3 -3
- package/lib/modes/Numeric.d.ts +3 -3
- package/lib/modes/mode.d.ts +6 -6
- package/lib/qrcode.d.ts +19 -19
- package/{dist → lib}/qrcodeMatrix.es.js +1296 -1295
- package/{dist → lib}/qrcodeMatrix.js +1301 -1294
- package/lib/utils.d.ts +26 -26
- package/package.json +7 -8
- package/LICENSE +0 -21
- package/lib/encode/sjis.js +0 -113
- package/lib/encode/sjisData.js +0 -4
- package/lib/encode/utf-8.js +0 -23
- package/lib/index.js +0 -37
- package/lib/lib/BitBuffer.js +0 -39
- package/lib/lib/QRMatrix.js +0 -31
- package/lib/lib/bch-encode.js +0 -466
- package/lib/lib/draw.js +0 -49
- package/lib/modes/Alphanumeric.js +0 -49
- package/lib/modes/Byte.js +0 -25
- package/lib/modes/Kanji.js +0 -46
- package/lib/modes/Numeric.js +0 -43
- package/lib/modes/mode.js +0 -2
- package/lib/qrcode.js +0 -124
- package/lib/utils.js +0 -379
- package/src/.DS_Store +0 -0
- package/src/encode/.DS_Store +0 -0
- package/src/encode/sjis.ts +0 -121
- package/src/encode/sjisData.ts +0 -2
- package/src/encode/utf-8.ts +0 -30
- package/src/index.ts +0 -33
- package/src/lib/BitBuffer.ts +0 -70
- package/src/lib/QRMatrix.ts +0 -39
- package/src/lib/bch-encode.ts +0 -639
- package/src/lib/draw.ts +0 -77
- package/src/modes/Alphanumeric.ts +0 -55
- package/src/modes/Byte.ts +0 -30
- package/src/modes/Kanji.ts +0 -56
- package/src/modes/Numeric.ts +0 -47
- package/src/modes/mode.ts +0 -6
- package/src/qrcode.ts +0 -237
- package/src/utils.ts +0 -459
package/src/utils.ts
DELETED
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
// var bch = require('./bch');
|
|
2
|
-
import BitMatrix from 'bitmatrix/lib/BitMatrix';
|
|
3
|
-
import BitBuffer from './lib/BitBuffer';
|
|
4
|
-
import QRMatrix from './lib/QRMatrix';
|
|
5
|
-
import {fillRect, rectBorder} from './lib/draw'
|
|
6
|
-
import {
|
|
7
|
-
QRErrorCorrectionLevel,
|
|
8
|
-
QRMode,
|
|
9
|
-
getBCHTypeInfo,
|
|
10
|
-
getRSBlocks,
|
|
11
|
-
getBCHTypeNumber,
|
|
12
|
-
getLengthInBits,
|
|
13
|
-
getBufferForModes,
|
|
14
|
-
getMaxDataCount,
|
|
15
|
-
createData
|
|
16
|
-
} from './lib/bch-encode';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const QRMaskPattern = {
|
|
20
|
-
PATTERN000: 0,
|
|
21
|
-
PATTERN001: 1,
|
|
22
|
-
PATTERN010: 2,
|
|
23
|
-
PATTERN011: 3,
|
|
24
|
-
PATTERN100: 4,
|
|
25
|
-
PATTERN101: 5,
|
|
26
|
-
PATTERN110: 6,
|
|
27
|
-
PATTERN111: 7
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const PATTERN_POSITION_TABLE: Uint8Array[] = [
|
|
31
|
-
[],
|
|
32
|
-
[6, 18],
|
|
33
|
-
[6, 22],
|
|
34
|
-
[6, 26],
|
|
35
|
-
[6, 30],
|
|
36
|
-
[6, 34],
|
|
37
|
-
[6, 22, 38],
|
|
38
|
-
[6, 24, 42],
|
|
39
|
-
[6, 26, 46],
|
|
40
|
-
[6, 28, 50],
|
|
41
|
-
[6, 30, 54],
|
|
42
|
-
[6, 32, 58],
|
|
43
|
-
[6, 34, 62],
|
|
44
|
-
[6, 26, 46, 66],
|
|
45
|
-
[6, 26, 48, 70],
|
|
46
|
-
[6, 26, 50, 74],
|
|
47
|
-
[6, 30, 54, 78],
|
|
48
|
-
[6, 30, 56, 82],
|
|
49
|
-
[6, 30, 58, 86],
|
|
50
|
-
[6, 34, 62, 90],
|
|
51
|
-
[6, 28, 50, 72, 94],
|
|
52
|
-
[6, 26, 50, 74, 98],
|
|
53
|
-
[6, 30, 54, 78, 102],
|
|
54
|
-
[6, 28, 54, 80, 106],
|
|
55
|
-
[6, 32, 58, 84, 110],
|
|
56
|
-
[6, 30, 58, 86, 114],
|
|
57
|
-
[6, 34, 62, 90, 118],
|
|
58
|
-
[6, 26, 50, 74, 98, 122],
|
|
59
|
-
[6, 30, 54, 78, 102, 126],
|
|
60
|
-
[6, 26, 52, 78, 104, 130],
|
|
61
|
-
[6, 30, 56, 82, 108, 134],
|
|
62
|
-
[6, 34, 60, 86, 112, 138],
|
|
63
|
-
[6, 30, 58, 86, 114, 142],
|
|
64
|
-
[6, 34, 62, 90, 118, 146],
|
|
65
|
-
[6, 30, 54, 78, 102, 126, 150],
|
|
66
|
-
[6, 24, 50, 76, 102, 128, 154],
|
|
67
|
-
[6, 28, 54, 80, 106, 132, 158],
|
|
68
|
-
[6, 32, 58, 84, 110, 136, 162],
|
|
69
|
-
[6, 26, 54, 82, 110, 138, 166],
|
|
70
|
-
[6, 30, 58, 86, 114, 142, 170]
|
|
71
|
-
].map(v => new Uint8Array(v));
|
|
72
|
-
|
|
73
|
-
// 获取掩模函数
|
|
74
|
-
const getQRMaskFunction: (a: number) => (a: number, b: number) => boolean = (function() {
|
|
75
|
-
const QRMaskFunctions: ((a: number, b: number) => boolean)[] = [
|
|
76
|
-
function(i: number, j: number) {
|
|
77
|
-
return (i + j) % 2 == 0;
|
|
78
|
-
},
|
|
79
|
-
function(i: number, j: number) {
|
|
80
|
-
return i % 2 == 0;
|
|
81
|
-
},
|
|
82
|
-
function(i: number, j: number) {
|
|
83
|
-
return j % 3 == 0;
|
|
84
|
-
},
|
|
85
|
-
function(i: number, j: number) {
|
|
86
|
-
return (i + j) % 3 == 0;
|
|
87
|
-
},
|
|
88
|
-
function(i: number, j: number) {
|
|
89
|
-
return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
|
|
90
|
-
},
|
|
91
|
-
function(i: number, j: number) {
|
|
92
|
-
return ((i * j) % 2) + ((i * j) % 3) == 0;
|
|
93
|
-
},
|
|
94
|
-
function(i: number, j: number) {
|
|
95
|
-
return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;
|
|
96
|
-
},
|
|
97
|
-
function(i: number, j: number) {
|
|
98
|
-
return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;
|
|
99
|
-
}
|
|
100
|
-
];
|
|
101
|
-
return function(maskPattern: number) {
|
|
102
|
-
var fn = QRMaskFunctions[maskPattern];
|
|
103
|
-
if (!fn) throw new Error('maskPattern:' + maskPattern);
|
|
104
|
-
return fn;
|
|
105
|
-
};
|
|
106
|
-
})();
|
|
107
|
-
|
|
108
|
-
// 通过size反推QR码版本
|
|
109
|
-
function size2TypeNumber(size: number) {
|
|
110
|
-
return (size - 17) / 4;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 通过QR码版本计算矩阵size
|
|
114
|
-
function typeNumber2Size(typeNumber: number) {
|
|
115
|
-
return typeNumber * 4 + 17
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// 在指定位置 绘制一个侦测图 ◈
|
|
119
|
-
const setupPositionProbePattern = function(matrix: BitMatrix, row: number, col: number) {
|
|
120
|
-
rectBorder(matrix, 0, row - 1, col - 1, 9, 9);
|
|
121
|
-
rectBorder(matrix, 1, row, col, 7, 7);
|
|
122
|
-
rectBorder(matrix, 0, row + 1, col + 1, 5, 5);
|
|
123
|
-
fillRect(matrix, 1, row + 2, col + 2, 3, 3);
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
// 填充所有侦测图
|
|
127
|
-
const setupAllPositionProbePattern = function(matrix: QRMatrix) {
|
|
128
|
-
let size = matrix.size;
|
|
129
|
-
setupPositionProbePattern(matrix, 0, 0);
|
|
130
|
-
setupPositionProbePattern(matrix, size - 7, 0);
|
|
131
|
-
setupPositionProbePattern(matrix, 0, size - 7);
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
// 填充校正图
|
|
135
|
-
const setupPositionAdjustPattern = function(matrix: QRMatrix, typeNumber?: number) {
|
|
136
|
-
let { size } = matrix;
|
|
137
|
-
typeNumber = typeNumber || size2TypeNumber(size);
|
|
138
|
-
let pos = PATTERN_POSITION_TABLE[typeNumber - 1];
|
|
139
|
-
for (let i = 0; i < pos.length; i++) {
|
|
140
|
-
for (let j = 0; j < pos.length; j++) {
|
|
141
|
-
let row = pos[i];
|
|
142
|
-
let col = pos[j];
|
|
143
|
-
// if (matrix[row][col] != null) continue;
|
|
144
|
-
if (row < 9 || col < 9) {
|
|
145
|
-
let m = size - 9;
|
|
146
|
-
if ((row < 9 || row > m) && (col < 9 || col > m)) continue;
|
|
147
|
-
}
|
|
148
|
-
for (let r = -2; r <= 2; r++) {
|
|
149
|
-
for (let c = -2; c <= 2; c++) {
|
|
150
|
-
if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
|
|
151
|
-
// matrix[row + r][col + c] = true;
|
|
152
|
-
matrix.set(col + c, row + r, 1);
|
|
153
|
-
} else {
|
|
154
|
-
matrix.set(col + c, row + r, 0);
|
|
155
|
-
// matrix[row + r][col + c] = false;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
// 填充定位图
|
|
164
|
-
const setupTimingPattern = function(matrix: BitMatrix) {
|
|
165
|
-
let mapLength = matrix.width;
|
|
166
|
-
for (let r = 8; r < mapLength - 8; r += 1) {
|
|
167
|
-
matrix.set(r, 6, r % 2 == 0);
|
|
168
|
-
matrix.set(6, r, r % 2 == 0);
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
// 填充格式信息
|
|
173
|
-
const setupTypeInfo = function(
|
|
174
|
-
matrix: BitMatrix,
|
|
175
|
-
test: boolean,
|
|
176
|
-
errorCorrectionLevel: number,
|
|
177
|
-
maskPattern: number
|
|
178
|
-
) {
|
|
179
|
-
let mapLength = matrix.width;
|
|
180
|
-
let data = (errorCorrectionLevel << 3) | maskPattern;
|
|
181
|
-
let bits = getBCHTypeInfo(data);
|
|
182
|
-
// vertical
|
|
183
|
-
for (let i = 0; i < 15; i += 1) {
|
|
184
|
-
let mod = !test && ((bits >> i) & 1) == 1;
|
|
185
|
-
if (i < 6) {
|
|
186
|
-
matrix.set(8, i, mod);
|
|
187
|
-
} else if (i < 8) {
|
|
188
|
-
matrix.set(8, i + 1, mod);
|
|
189
|
-
} else {
|
|
190
|
-
matrix.set(8, mapLength - 15 + i, mod);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
if (i < 8) {
|
|
194
|
-
matrix.set(mapLength - i - 1, 8, mod);
|
|
195
|
-
} else if (i < 9) {
|
|
196
|
-
matrix.set(15 - i, 8, mod);
|
|
197
|
-
} else {
|
|
198
|
-
matrix.set(15 - i - 1, 8, mod);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// horizontal
|
|
203
|
-
// for (var i = 0; i < 15; i += 1) {
|
|
204
|
-
// var mod = !test && ((bits >> i) & 1) == 1;
|
|
205
|
-
// if (i < 8) {
|
|
206
|
-
// matrix.set(mapLength - i - 1,8,mod);
|
|
207
|
-
// } else if (i < 9) {
|
|
208
|
-
// matrix.set(15 - i,8,mod);
|
|
209
|
-
// } else {
|
|
210
|
-
// matrix.set(15 - i - 1,8,mod);
|
|
211
|
-
// }
|
|
212
|
-
// }
|
|
213
|
-
|
|
214
|
-
// fixed module
|
|
215
|
-
matrix.set(8, mapLength - 8, !test);
|
|
216
|
-
};
|
|
217
|
-
|
|
218
|
-
// 填充版本信息
|
|
219
|
-
var setupTypeNumber = function(matrix: BitMatrix, test: boolean, typeNumber?: number) {
|
|
220
|
-
let mapLength = matrix.width;
|
|
221
|
-
typeNumber = typeNumber || size2TypeNumber(mapLength);
|
|
222
|
-
let bits = getBCHTypeNumber(typeNumber);
|
|
223
|
-
for (let i = 0; i < 18; i += 1) {
|
|
224
|
-
let mod = !test && ((bits >> i) & 1) == 1;
|
|
225
|
-
// matrix[Math.floor(i / 3)][(i % 3) + mapLength - 8 - 3] = mod;
|
|
226
|
-
matrix.set((i % 3) + mapLength - 8 - 3, Math.floor(i / 3), mod);
|
|
227
|
-
matrix.set(Math.floor(i / 3), (i % 3) + mapLength - 8 - 3, mod);
|
|
228
|
-
}
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
// 生成空矩阵
|
|
232
|
-
function mapInit(size: number): QRMatrix {
|
|
233
|
-
return new QRMatrix(size);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
const MatrixCache:QRMatrix[] = [];
|
|
237
|
-
function createQRmatrix(typeNumber:number):QRMatrix{
|
|
238
|
-
let size = typeNumber2Size(typeNumber);
|
|
239
|
-
let matrix = mapInit(size);
|
|
240
|
-
setupAllPositionProbePattern(matrix);
|
|
241
|
-
//填充矫正位图
|
|
242
|
-
setupPositionAdjustPattern(matrix);
|
|
243
|
-
//填充定位图
|
|
244
|
-
setupTimingPattern(matrix);
|
|
245
|
-
return matrix;
|
|
246
|
-
}
|
|
247
|
-
function getBaseQRMatrix(typeNumber:number):QRMatrix{
|
|
248
|
-
let matrix = MatrixCache[typeNumber] || (MatrixCache[typeNumber] = createQRmatrix(typeNumber));
|
|
249
|
-
return matrix.clone();
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
// 拷贝矩阵
|
|
255
|
-
function copyMap(matrix: QRMatrix): QRMatrix {
|
|
256
|
-
return matrix.clone();
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
//矩阵对比操作
|
|
260
|
-
function compareMap(m1: QRMatrix, m2: QRMatrix, type: string): QRMatrix {
|
|
261
|
-
type = type || 'and';
|
|
262
|
-
if (m1.total !== m2.total) throw 'Different size';
|
|
263
|
-
let matrix = new QRMatrix(m1.size);
|
|
264
|
-
|
|
265
|
-
let _d1 = m1.getPrototypeData();
|
|
266
|
-
let _m1 = m1.markMatrix.getPrototypeData();
|
|
267
|
-
|
|
268
|
-
let _d2 = m2.getPrototypeData();
|
|
269
|
-
let _m2 = m2.markMatrix.getPrototypeData();
|
|
270
|
-
|
|
271
|
-
let md = matrix.getPrototypeData();
|
|
272
|
-
let _md = matrix.markMatrix.getPrototypeData();
|
|
273
|
-
|
|
274
|
-
for (let i = 0; i < _d1.length; i++) {
|
|
275
|
-
switch (type) {
|
|
276
|
-
case 'or':
|
|
277
|
-
case '|':
|
|
278
|
-
var mk = (_md[i] = _m1[i] | _m2[i]);
|
|
279
|
-
_md[i] = (_m1[i] | _m2[i]) & mk;
|
|
280
|
-
break;
|
|
281
|
-
case 'xor':
|
|
282
|
-
case '^':
|
|
283
|
-
var mk = (_md[i] = _m1[i] ^ _m2[i]);
|
|
284
|
-
md[i] = (_d1[i] ^ _d2[i]) & mk;
|
|
285
|
-
break;
|
|
286
|
-
case 'and':
|
|
287
|
-
case '&':
|
|
288
|
-
var mk = (_md[i] = _m1[i] & _m2[i]);
|
|
289
|
-
md[i] = _d1[i] & _d2[i] & mk;
|
|
290
|
-
break;
|
|
291
|
-
default:
|
|
292
|
-
throw 'type err!';
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
return matrix;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
// 矩阵分布评分 (筛选最优掩模方案)
|
|
299
|
-
const getLostPoint = function(matrix: BitMatrix): number {
|
|
300
|
-
let size = matrix.width;
|
|
301
|
-
let lostPoint = 0;
|
|
302
|
-
let isDark = function(row, col) {
|
|
303
|
-
return matrix.get(col, row);
|
|
304
|
-
};
|
|
305
|
-
|
|
306
|
-
// LEVEL1
|
|
307
|
-
for (let row = 0; row < size; row += 1) {
|
|
308
|
-
for (let col = 0; col < size; col += 1) {
|
|
309
|
-
let sameCount = 0;
|
|
310
|
-
let dark = isDark(row, col);
|
|
311
|
-
for (let r = -1; r <= 1; r += 1) {
|
|
312
|
-
if (row + r < 0 || size <= row + r) {
|
|
313
|
-
continue;
|
|
314
|
-
}
|
|
315
|
-
for (let c = -1; c <= 1; c += 1) {
|
|
316
|
-
if (col + c < 0 || size <= col + c) {
|
|
317
|
-
continue;
|
|
318
|
-
}
|
|
319
|
-
if (r == 0 && c == 0) {
|
|
320
|
-
continue;
|
|
321
|
-
}
|
|
322
|
-
if (dark == isDark(row + r, col + c)) {
|
|
323
|
-
sameCount += 1;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
if (sameCount > 5) {
|
|
328
|
-
lostPoint += 3 + sameCount - 5;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// LEVEL2
|
|
334
|
-
for (var row = 0; row < size - 1; row += 1) {
|
|
335
|
-
for (var col = 0; col < size - 1; col += 1) {
|
|
336
|
-
var count = 0;
|
|
337
|
-
if (isDark(row, col)) count += 1;
|
|
338
|
-
if (isDark(row + 1, col)) count += 1;
|
|
339
|
-
if (isDark(row, col + 1)) count += 1;
|
|
340
|
-
if (isDark(row + 1, col + 1)) count += 1;
|
|
341
|
-
if (count == 0 || count == 4) {
|
|
342
|
-
lostPoint += 3;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// LEVEL3
|
|
348
|
-
for (var row = 0; row < size; row += 1) {
|
|
349
|
-
for (var col = 0; col < size - 6; col += 1) {
|
|
350
|
-
if (
|
|
351
|
-
isDark(row, col) &&
|
|
352
|
-
!isDark(row, col + 1) &&
|
|
353
|
-
isDark(row, col + 2) &&
|
|
354
|
-
isDark(row, col + 3) &&
|
|
355
|
-
isDark(row, col + 4) &&
|
|
356
|
-
!isDark(row, col + 5) &&
|
|
357
|
-
isDark(row, col + 6)
|
|
358
|
-
) {
|
|
359
|
-
lostPoint += 40;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
for (var col = 0; col < size; col += 1) {
|
|
365
|
-
for (var row = 0; row < size - 6; row += 1) {
|
|
366
|
-
if (
|
|
367
|
-
isDark(row, col) &&
|
|
368
|
-
!isDark(row + 1, col) &&
|
|
369
|
-
isDark(row + 2, col) &&
|
|
370
|
-
isDark(row + 3, col) &&
|
|
371
|
-
isDark(row + 4, col) &&
|
|
372
|
-
!isDark(row + 5, col) &&
|
|
373
|
-
isDark(row + 6, col)
|
|
374
|
-
) {
|
|
375
|
-
lostPoint += 40;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
// LEVEL4
|
|
381
|
-
|
|
382
|
-
var darkCount = 0;
|
|
383
|
-
|
|
384
|
-
for (var col = 0; col < size; col += 1) {
|
|
385
|
-
for (var row = 0; row < size; row += 1) {
|
|
386
|
-
if (isDark(row, col)) {
|
|
387
|
-
darkCount += 1;
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
var ratio = Math.abs((100 * darkCount) / size / size - 50) / 5;
|
|
393
|
-
lostPoint += ratio * 10;
|
|
394
|
-
|
|
395
|
-
return lostPoint;
|
|
396
|
-
};
|
|
397
|
-
|
|
398
|
-
// 填充数据
|
|
399
|
-
const setupData = function(matrix: QRMatrix, data: number[], maskPattern: number) {
|
|
400
|
-
let _moduleCount = matrix.width;
|
|
401
|
-
let inc = -1;
|
|
402
|
-
let row = _moduleCount - 1;
|
|
403
|
-
let bitIndex = 7;
|
|
404
|
-
let byteIndex = 0;
|
|
405
|
-
let maskFunc = getQRMaskFunction(maskPattern);
|
|
406
|
-
|
|
407
|
-
for (var col = _moduleCount - 1; col > 0; col -= 2) {
|
|
408
|
-
if (col == 6) col -= 1;
|
|
409
|
-
while (true) {
|
|
410
|
-
for (var c = 0; c < 2; c += 1) {
|
|
411
|
-
if (!matrix.has(col - c, row)) {
|
|
412
|
-
var dark = false;
|
|
413
|
-
if (byteIndex < data.length) {
|
|
414
|
-
dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;
|
|
415
|
-
}
|
|
416
|
-
var mask = maskFunc(row, col - c);
|
|
417
|
-
if (mask) {
|
|
418
|
-
dark = !dark;
|
|
419
|
-
}
|
|
420
|
-
matrix.set(col - c, row, dark);
|
|
421
|
-
bitIndex -= 1;
|
|
422
|
-
if (bitIndex == -1) {
|
|
423
|
-
byteIndex += 1;
|
|
424
|
-
bitIndex = 7;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
row += inc;
|
|
429
|
-
if (row < 0 || _moduleCount <= row) {
|
|
430
|
-
row -= inc;
|
|
431
|
-
inc = -inc;
|
|
432
|
-
break;
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
};
|
|
437
|
-
|
|
438
|
-
export {
|
|
439
|
-
QRMode,
|
|
440
|
-
QRErrorCorrectionLevel,
|
|
441
|
-
QRMaskPattern,
|
|
442
|
-
BitBuffer,
|
|
443
|
-
getBaseQRMatrix,
|
|
444
|
-
setupAllPositionProbePattern,
|
|
445
|
-
setupPositionAdjustPattern,
|
|
446
|
-
setupTimingPattern,
|
|
447
|
-
setupTypeInfo,
|
|
448
|
-
setupTypeNumber,
|
|
449
|
-
mapInit,
|
|
450
|
-
copyMap,
|
|
451
|
-
compareMap,
|
|
452
|
-
createData,
|
|
453
|
-
setupData,
|
|
454
|
-
getLengthInBits,
|
|
455
|
-
getLostPoint,
|
|
456
|
-
getRSBlocks,
|
|
457
|
-
getBufferForModes,
|
|
458
|
-
getMaxDataCount
|
|
459
|
-
};
|