@atooyu/uxto-ui 1.1.35 → 1.1.36
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/dist/index.js +1617 -438
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1617 -438
- package/dist/index.mjs.map +1 -1
- package/dist/style.css +4 -4
- package/package.json +1 -1
- package/src/components/u-qrcode/u-qrcode.vue +20 -580
package/dist/index.js
CHANGED
|
@@ -503,7 +503,7 @@ const chat = "data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='htt
|
|
|
503
503
|
const clipboard = "data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%203h-4.18C14.4%201.84%2013.3%201%2012%201c-1.3%200-2.4.84-2.82%202H5c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h14c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm-7%200c.55%200%201%20.45%201%201s-.45%201-1%201-1-.45-1-1%20.45-1%201-1zm2%2014H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3e%3c/svg%3e";
|
|
504
504
|
const location = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M12%202C8.13%202%205%205.13%205%209c0%205.25%207%2013%207%2013s7-7.75%207-13c0-3.87-3.13-7-7-7zm0%209.5c-1.38%200-2.5-1.12-2.5-2.5s1.12-2.5%202.5-2.5%202.5%201.12%202.5%202.5-1.12%202.5-2.5%202.5z'/%3e%3c/svg%3e";
|
|
505
505
|
const scan = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M3%2011h8V3H3v8zm2-6h4v4H5V5zm8-2v8h8V3h-8zm6%206h-4V5h4v4zM3%2021h8v-8H3v8zm2-6h4v4H5v-4zm13-2h-2v3h-3v2h3v3h2v-3h3v-2h-3v-3z'/%3e%3c/svg%3e";
|
|
506
|
-
const qrcode = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M3%203h6v6H3V3zm2%202v2h2V5H5zm8-2h6v6h-6V3zm2%202v2h2V5h-2zM3%2013h6v6H3v-6zm2%202v2h2v-2H5zm13-2h3v2h-3v-2zm-3%200h2v4h-2v-4zm-2%202h2v2h-2v-2zm2%202h3v2h-3v-2zm3%202h2v2h-2v-2zm-5%200h2v2h-2v-2z'/%3e%3c/svg%3e";
|
|
506
|
+
const qrcode$1 = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M3%203h6v6H3V3zm2%202v2h2V5H5zm8-2h6v6h-6V3zm2%202v2h2V5h-2zM3%2013h6v6H3v-6zm2%202v2h2v-2H5zm13-2h3v2h-3v-2zm-3%200h2v4h-2v-4zm-2%202h2v2h-2v-2zm2%202h3v2h-3v-2zm3%202h2v2h-2v-2zm-5%200h2v2h-2v-2z'/%3e%3c/svg%3e";
|
|
507
507
|
const moon = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M12%203a9%209%200%20109%209c0-.46-.04-.92-.1-1.36a5.389%205.389%200%2001-4.4%202.26%205.403%205.403%200%2001-3.14-9.8c-.44-.06-.9-.1-1.36-.1z'/%3e%3c/svg%3e";
|
|
508
508
|
const icons = {
|
|
509
509
|
// 箭头类
|
|
@@ -559,7 +559,7 @@ const icons = {
|
|
|
559
559
|
"like": like,
|
|
560
560
|
"like-o": likeO,
|
|
561
561
|
"share": share,
|
|
562
|
-
"qrcode": qrcode,
|
|
562
|
+
"qrcode": qrcode$1,
|
|
563
563
|
"moon": moon,
|
|
564
564
|
// 用户类
|
|
565
565
|
"user": user,
|
|
@@ -5027,489 +5027,1658 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
5027
5027
|
}
|
|
5028
5028
|
});
|
|
5029
5029
|
const uTabbar = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-10cb84bc"]]);
|
|
5030
|
-
const
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
const moduleCount = vue.ref(0);
|
|
5050
|
-
const cellSize = vue.computed(() => {
|
|
5051
|
-
if (moduleCount.value === 0) return 0;
|
|
5052
|
-
return props.size / moduleCount.value;
|
|
5053
|
-
});
|
|
5054
|
-
const ECL = { L: 1, M: 0, Q: 3, H: 2 };
|
|
5055
|
-
const ALIGNMENT_PATTERNS = {
|
|
5056
|
-
1: [],
|
|
5057
|
-
2: [6, 18],
|
|
5058
|
-
3: [6, 22],
|
|
5059
|
-
4: [6, 26],
|
|
5060
|
-
5: [6, 30],
|
|
5061
|
-
6: [6, 34],
|
|
5062
|
-
7: [6, 22, 38],
|
|
5063
|
-
8: [6, 24, 42],
|
|
5064
|
-
9: [6, 26, 46],
|
|
5065
|
-
10: [6, 28, 50],
|
|
5066
|
-
11: [6, 30, 54],
|
|
5067
|
-
12: [6, 32, 58],
|
|
5068
|
-
13: [6, 34, 62],
|
|
5069
|
-
14: [6, 26, 46, 66],
|
|
5070
|
-
15: [6, 26, 48, 70],
|
|
5071
|
-
16: [6, 26, 50, 74],
|
|
5072
|
-
17: [6, 30, 54, 78],
|
|
5073
|
-
18: [6, 30, 56, 82],
|
|
5074
|
-
19: [6, 30, 58, 86],
|
|
5075
|
-
20: [6, 34, 62, 90]
|
|
5076
|
-
};
|
|
5077
|
-
const RS_BLOCK_TABLE = [
|
|
5078
|
-
// Version 1
|
|
5079
|
-
[1, 26, 19],
|
|
5080
|
-
[1, 26, 16],
|
|
5081
|
-
[1, 26, 13],
|
|
5082
|
-
[1, 26, 9],
|
|
5083
|
-
// Version 2
|
|
5084
|
-
[1, 44, 34],
|
|
5085
|
-
[1, 44, 28],
|
|
5086
|
-
[1, 44, 22],
|
|
5087
|
-
[1, 44, 16],
|
|
5088
|
-
// Version 3
|
|
5089
|
-
[1, 70, 55],
|
|
5090
|
-
[1, 70, 44],
|
|
5091
|
-
[2, 35, 17],
|
|
5092
|
-
[2, 35, 13],
|
|
5093
|
-
// Version 4
|
|
5094
|
-
[1, 100, 80],
|
|
5095
|
-
[2, 50, 32],
|
|
5096
|
-
[2, 50, 24],
|
|
5097
|
-
[4, 25, 9],
|
|
5098
|
-
// Version 5
|
|
5099
|
-
[1, 134, 108],
|
|
5100
|
-
[2, 67, 43],
|
|
5101
|
-
[2, 33, 15, 2, 34, 16],
|
|
5102
|
-
[2, 33, 11, 2, 34, 12],
|
|
5103
|
-
// Version 6
|
|
5104
|
-
[2, 86, 68],
|
|
5105
|
-
[4, 43, 27],
|
|
5106
|
-
[4, 43, 19],
|
|
5107
|
-
[4, 43, 15],
|
|
5108
|
-
// Version 7
|
|
5109
|
-
[2, 98, 78],
|
|
5110
|
-
[4, 49, 31],
|
|
5111
|
-
[2, 32, 14, 4, 33, 15],
|
|
5112
|
-
[4, 39, 13, 1, 40, 14],
|
|
5113
|
-
// Version 8
|
|
5114
|
-
[2, 121, 97],
|
|
5115
|
-
[2, 60, 38, 2, 61, 39],
|
|
5116
|
-
[4, 40, 18, 2, 41, 19],
|
|
5117
|
-
[4, 40, 14, 2, 41, 15],
|
|
5118
|
-
// Version 9
|
|
5119
|
-
[2, 146, 116],
|
|
5120
|
-
[3, 58, 36, 2, 59, 37],
|
|
5121
|
-
[4, 36, 16, 4, 37, 17],
|
|
5122
|
-
[4, 36, 12, 4, 37, 13],
|
|
5123
|
-
// Version 10
|
|
5124
|
-
[2, 86, 68, 2, 87, 69],
|
|
5125
|
-
[4, 69, 43, 1, 70, 44],
|
|
5126
|
-
[6, 43, 19, 2, 44, 20],
|
|
5127
|
-
[6, 43, 15, 2, 44, 16],
|
|
5128
|
-
// Version 11
|
|
5129
|
-
[4, 101, 81],
|
|
5130
|
-
[1, 80, 50, 4, 81, 51],
|
|
5131
|
-
[4, 50, 22, 4, 51, 23],
|
|
5132
|
-
[3, 36, 12, 8, 37, 13],
|
|
5133
|
-
// Version 12
|
|
5134
|
-
[2, 116, 92, 2, 117, 93],
|
|
5135
|
-
[6, 58, 36, 2, 59, 37],
|
|
5136
|
-
[4, 46, 20, 6, 47, 21],
|
|
5137
|
-
[7, 42, 14, 4, 43, 15],
|
|
5138
|
-
// Version 13
|
|
5139
|
-
[4, 133, 107],
|
|
5140
|
-
[8, 59, 37, 1, 60, 38],
|
|
5141
|
-
[8, 44, 20, 4, 45, 21],
|
|
5142
|
-
[12, 33, 11, 4, 34, 12],
|
|
5143
|
-
// Version 14
|
|
5144
|
-
[3, 145, 115, 1, 146, 116],
|
|
5145
|
-
[4, 64, 40, 5, 65, 41],
|
|
5146
|
-
[11, 36, 16, 5, 37, 17],
|
|
5147
|
-
[11, 36, 12, 5, 37, 13],
|
|
5148
|
-
// Version 15
|
|
5149
|
-
[5, 109, 87, 1, 110, 88],
|
|
5150
|
-
[5, 65, 41, 5, 66, 42],
|
|
5151
|
-
[5, 54, 24, 7, 55, 25],
|
|
5152
|
-
[11, 36, 12, 7, 37, 13],
|
|
5153
|
-
// Version 16
|
|
5154
|
-
[5, 122, 98, 1, 123, 99],
|
|
5155
|
-
[7, 73, 45, 3, 74, 46],
|
|
5156
|
-
[15, 43, 19, 2, 44, 20],
|
|
5157
|
-
[3, 45, 15, 13, 46, 16],
|
|
5158
|
-
// Version 17
|
|
5159
|
-
[1, 135, 107, 5, 136, 108],
|
|
5160
|
-
[10, 74, 46, 1, 75, 47],
|
|
5161
|
-
[1, 50, 22, 15, 51, 23],
|
|
5162
|
-
[2, 42, 14, 17, 43, 15],
|
|
5163
|
-
// Version 18
|
|
5164
|
-
[5, 150, 120, 1, 151, 121],
|
|
5165
|
-
[9, 69, 43, 4, 70, 44],
|
|
5166
|
-
[17, 50, 22, 1, 51, 23],
|
|
5167
|
-
[2, 42, 14, 19, 43, 15],
|
|
5168
|
-
// Version 19
|
|
5169
|
-
[3, 141, 113, 4, 142, 114],
|
|
5170
|
-
[3, 70, 44, 11, 71, 45],
|
|
5171
|
-
[17, 47, 21, 4, 48, 22],
|
|
5172
|
-
[9, 39, 13, 16, 40, 14],
|
|
5173
|
-
// Version 20
|
|
5174
|
-
[3, 135, 107, 5, 136, 108],
|
|
5175
|
-
[3, 67, 41, 13, 68, 42],
|
|
5176
|
-
[15, 54, 24, 5, 55, 25],
|
|
5177
|
-
[15, 43, 15, 10, 44, 16]
|
|
5178
|
-
];
|
|
5179
|
-
const GF_EXP = new Array(512);
|
|
5180
|
-
const GF_LOG = new Array(256);
|
|
5181
|
-
let gfX = 1;
|
|
5182
|
-
for (let gfI = 0; gfI < 255; gfI++) {
|
|
5183
|
-
GF_EXP[gfI] = gfX;
|
|
5184
|
-
GF_LOG[gfX] = gfI;
|
|
5185
|
-
gfX <<= 1;
|
|
5186
|
-
if (gfX & 256) {
|
|
5187
|
-
gfX ^= 285;
|
|
5030
|
+
const qrcode = function(typeNumber, errorCorrectionLevel) {
|
|
5031
|
+
const PAD0 = 236;
|
|
5032
|
+
const PAD1 = 17;
|
|
5033
|
+
let _typeNumber = typeNumber;
|
|
5034
|
+
const _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];
|
|
5035
|
+
let _modules = null;
|
|
5036
|
+
let _moduleCount = 0;
|
|
5037
|
+
let _dataCache = null;
|
|
5038
|
+
const _dataList = [];
|
|
5039
|
+
const _this = {};
|
|
5040
|
+
const makeImpl = function(test, maskPattern) {
|
|
5041
|
+
_moduleCount = _typeNumber * 4 + 17;
|
|
5042
|
+
_modules = function(moduleCount) {
|
|
5043
|
+
const modules = new Array(moduleCount);
|
|
5044
|
+
for (let row = 0; row < moduleCount; row += 1) {
|
|
5045
|
+
modules[row] = new Array(moduleCount);
|
|
5046
|
+
for (let col = 0; col < moduleCount; col += 1) {
|
|
5047
|
+
modules[row][col] = null;
|
|
5048
|
+
}
|
|
5188
5049
|
}
|
|
5050
|
+
return modules;
|
|
5051
|
+
}(_moduleCount);
|
|
5052
|
+
setupPositionProbePattern(0, 0);
|
|
5053
|
+
setupPositionProbePattern(_moduleCount - 7, 0);
|
|
5054
|
+
setupPositionProbePattern(0, _moduleCount - 7);
|
|
5055
|
+
setupPositionAdjustPattern();
|
|
5056
|
+
setupTimingPattern();
|
|
5057
|
+
setupTypeInfo(test, maskPattern);
|
|
5058
|
+
if (_typeNumber >= 7) {
|
|
5059
|
+
setupTypeNumber(test);
|
|
5189
5060
|
}
|
|
5190
|
-
|
|
5191
|
-
|
|
5192
|
-
}
|
|
5193
|
-
function gfMul(a, b) {
|
|
5194
|
-
if (a === 0 || b === 0) return 0;
|
|
5195
|
-
return GF_EXP[GF_LOG[a] + GF_LOG[b]];
|
|
5061
|
+
if (_dataCache == null) {
|
|
5062
|
+
_dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);
|
|
5196
5063
|
}
|
|
5197
|
-
|
|
5198
|
-
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
if (
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
|
|
5206
|
-
|
|
5207
|
-
|
|
5208
|
-
} else if (blockData.length === 6) {
|
|
5209
|
-
const count1 = blockData[0];
|
|
5210
|
-
const total1 = blockData[1];
|
|
5211
|
-
const data1 = blockData[2];
|
|
5212
|
-
for (let i = 0; i < count1; i++) {
|
|
5213
|
-
blocks.push({ totalCount: total1, dataCount: data1 });
|
|
5214
|
-
}
|
|
5215
|
-
const count2 = blockData[3];
|
|
5216
|
-
const total2 = blockData[4];
|
|
5217
|
-
const data2 = blockData[5];
|
|
5218
|
-
for (let i = 0; i < count2; i++) {
|
|
5219
|
-
blocks.push({ totalCount: total2, dataCount: data2 });
|
|
5064
|
+
mapData(_dataCache, maskPattern);
|
|
5065
|
+
};
|
|
5066
|
+
const setupPositionProbePattern = function(row, col) {
|
|
5067
|
+
for (let r = -1; r <= 7; r += 1) {
|
|
5068
|
+
if (row + r <= -1 || _moduleCount <= row + r) continue;
|
|
5069
|
+
for (let c = -1; c <= 7; c += 1) {
|
|
5070
|
+
if (col + c <= -1 || _moduleCount <= col + c) continue;
|
|
5071
|
+
if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {
|
|
5072
|
+
_modules[row + r][col + c] = true;
|
|
5073
|
+
} else {
|
|
5074
|
+
_modules[row + r][col + c] = false;
|
|
5220
5075
|
}
|
|
5221
5076
|
}
|
|
5222
|
-
return blocks;
|
|
5223
5077
|
}
|
|
5224
|
-
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
|
|
5233
|
-
|
|
5234
|
-
const ecc = new Array(ecCount).fill(0);
|
|
5235
|
-
for (const byte of data) {
|
|
5236
|
-
const factor = byte ^ ecc[0];
|
|
5237
|
-
ecc.shift();
|
|
5238
|
-
ecc.push(0);
|
|
5239
|
-
for (let i = 0; i < ecCount; i++) {
|
|
5240
|
-
ecc[i] ^= gfMul(gen[i + 1], factor);
|
|
5241
|
-
}
|
|
5078
|
+
};
|
|
5079
|
+
const getBestMaskPattern = function() {
|
|
5080
|
+
let minLostPoint = 0;
|
|
5081
|
+
let pattern = 0;
|
|
5082
|
+
for (let i = 0; i < 8; i += 1) {
|
|
5083
|
+
makeImpl(true, i);
|
|
5084
|
+
const lostPoint = QRUtil.getLostPoint(_this);
|
|
5085
|
+
if (i == 0 || minLostPoint > lostPoint) {
|
|
5086
|
+
minLostPoint = lostPoint;
|
|
5087
|
+
pattern = i;
|
|
5242
5088
|
}
|
|
5243
|
-
return ecc;
|
|
5244
5089
|
}
|
|
5245
|
-
|
|
5246
|
-
|
|
5247
|
-
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
|
|
5255
|
-
|
|
5256
|
-
|
|
5257
|
-
|
|
5258
|
-
|
|
5259
|
-
|
|
5260
|
-
|
|
5090
|
+
return pattern;
|
|
5091
|
+
};
|
|
5092
|
+
const setupTimingPattern = function() {
|
|
5093
|
+
for (let r = 8; r < _moduleCount - 8; r += 1) {
|
|
5094
|
+
if (_modules[r][6] != null) {
|
|
5095
|
+
continue;
|
|
5096
|
+
}
|
|
5097
|
+
_modules[r][6] = r % 2 == 0;
|
|
5098
|
+
}
|
|
5099
|
+
for (let c = 8; c < _moduleCount - 8; c += 1) {
|
|
5100
|
+
if (_modules[6][c] != null) {
|
|
5101
|
+
continue;
|
|
5102
|
+
}
|
|
5103
|
+
_modules[6][c] = c % 2 == 0;
|
|
5104
|
+
}
|
|
5105
|
+
};
|
|
5106
|
+
const setupPositionAdjustPattern = function() {
|
|
5107
|
+
const pos = QRUtil.getPatternPosition(_typeNumber);
|
|
5108
|
+
for (let i = 0; i < pos.length; i += 1) {
|
|
5109
|
+
for (let j = 0; j < pos.length; j += 1) {
|
|
5110
|
+
const row = pos[i];
|
|
5111
|
+
const col = pos[j];
|
|
5112
|
+
if (_modules[row][col] != null) {
|
|
5113
|
+
continue;
|
|
5114
|
+
}
|
|
5115
|
+
for (let r = -2; r <= 2; r += 1) {
|
|
5116
|
+
for (let c = -2; c <= 2; c += 1) {
|
|
5117
|
+
if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) {
|
|
5118
|
+
_modules[row + r][col + c] = true;
|
|
5119
|
+
} else {
|
|
5120
|
+
_modules[row + r][col + c] = false;
|
|
5121
|
+
}
|
|
5122
|
+
}
|
|
5261
5123
|
}
|
|
5262
5124
|
}
|
|
5263
|
-
|
|
5264
|
-
|
|
5265
|
-
|
|
5266
|
-
|
|
5125
|
+
}
|
|
5126
|
+
};
|
|
5127
|
+
const setupTypeNumber = function(test) {
|
|
5128
|
+
const bits = QRUtil.getBCHTypeNumber(_typeNumber);
|
|
5129
|
+
for (let i = 0; i < 18; i += 1) {
|
|
5130
|
+
const mod = !test && (bits >> i & 1) == 1;
|
|
5131
|
+
_modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;
|
|
5132
|
+
}
|
|
5133
|
+
for (let i = 0; i < 18; i += 1) {
|
|
5134
|
+
const mod = !test && (bits >> i & 1) == 1;
|
|
5135
|
+
_modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
|
|
5136
|
+
}
|
|
5137
|
+
};
|
|
5138
|
+
const setupTypeInfo = function(test, maskPattern) {
|
|
5139
|
+
const data = _errorCorrectionLevel << 3 | maskPattern;
|
|
5140
|
+
const bits = QRUtil.getBCHTypeInfo(data);
|
|
5141
|
+
for (let i = 0; i < 15; i += 1) {
|
|
5142
|
+
const mod = !test && (bits >> i & 1) == 1;
|
|
5143
|
+
if (i < 6) {
|
|
5144
|
+
_modules[i][8] = mod;
|
|
5145
|
+
} else if (i < 8) {
|
|
5146
|
+
_modules[i + 1][8] = mod;
|
|
5147
|
+
} else {
|
|
5148
|
+
_modules[_moduleCount - 15 + i][8] = mod;
|
|
5267
5149
|
}
|
|
5268
|
-
|
|
5269
|
-
|
|
5150
|
+
}
|
|
5151
|
+
for (let i = 0; i < 15; i += 1) {
|
|
5152
|
+
const mod = !test && (bits >> i & 1) == 1;
|
|
5153
|
+
if (i < 8) {
|
|
5154
|
+
_modules[8][_moduleCount - i - 1] = mod;
|
|
5155
|
+
} else if (i < 9) {
|
|
5156
|
+
_modules[8][15 - i - 1 + 1] = mod;
|
|
5157
|
+
} else {
|
|
5158
|
+
_modules[8][15 - i - 1] = mod;
|
|
5270
5159
|
}
|
|
5271
|
-
|
|
5272
|
-
|
|
5273
|
-
|
|
5274
|
-
|
|
5275
|
-
|
|
5276
|
-
|
|
5160
|
+
}
|
|
5161
|
+
_modules[_moduleCount - 8][8] = !test;
|
|
5162
|
+
};
|
|
5163
|
+
const mapData = function(data, maskPattern) {
|
|
5164
|
+
let inc = -1;
|
|
5165
|
+
let row = _moduleCount - 1;
|
|
5166
|
+
let bitIndex = 7;
|
|
5167
|
+
let byteIndex = 0;
|
|
5168
|
+
const maskFunc = QRUtil.getMaskFunction(maskPattern);
|
|
5169
|
+
for (let col = _moduleCount - 1; col > 0; col -= 2) {
|
|
5170
|
+
if (col == 6) col -= 1;
|
|
5171
|
+
while (true) {
|
|
5172
|
+
for (let c = 0; c < 2; c += 1) {
|
|
5173
|
+
if (_modules[row][col - c] == null) {
|
|
5174
|
+
let dark = false;
|
|
5175
|
+
if (byteIndex < data.length) {
|
|
5176
|
+
dark = (data[byteIndex] >>> bitIndex & 1) == 1;
|
|
5177
|
+
}
|
|
5178
|
+
const mask = maskFunc(row, col - c);
|
|
5179
|
+
if (mask) {
|
|
5180
|
+
dark = !dark;
|
|
5181
|
+
}
|
|
5182
|
+
_modules[row][col - c] = dark;
|
|
5183
|
+
bitIndex -= 1;
|
|
5184
|
+
if (bitIndex == -1) {
|
|
5185
|
+
byteIndex += 1;
|
|
5186
|
+
bitIndex = 7;
|
|
5187
|
+
}
|
|
5188
|
+
}
|
|
5277
5189
|
}
|
|
5278
|
-
|
|
5279
|
-
|
|
5280
|
-
|
|
5281
|
-
|
|
5282
|
-
|
|
5283
|
-
for (let j = 0; j < 8; j++) {
|
|
5284
|
-
byte = byte << 1 | (buffer[i + j] || 0);
|
|
5190
|
+
row += inc;
|
|
5191
|
+
if (row < 0 || _moduleCount <= row) {
|
|
5192
|
+
row -= inc;
|
|
5193
|
+
inc = -inc;
|
|
5194
|
+
break;
|
|
5285
5195
|
}
|
|
5286
|
-
dataBytes.push(byte);
|
|
5287
|
-
}
|
|
5288
|
-
let dataIndex = 0;
|
|
5289
|
-
const ecData = [];
|
|
5290
|
-
const dcData = [];
|
|
5291
|
-
for (const block of rsBlocks) {
|
|
5292
|
-
const dc = dataBytes.slice(dataIndex, dataIndex + block.dataCount);
|
|
5293
|
-
dataIndex += block.dataCount;
|
|
5294
|
-
dcData.push(dc);
|
|
5295
|
-
const ecCount = block.totalCount - block.dataCount;
|
|
5296
|
-
ecData.push(getECCodewords(dc, ecCount));
|
|
5297
5196
|
}
|
|
5298
|
-
|
|
5299
|
-
|
|
5300
|
-
|
|
5301
|
-
|
|
5302
|
-
|
|
5303
|
-
|
|
5304
|
-
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5197
|
+
}
|
|
5198
|
+
};
|
|
5199
|
+
const createBytes = function(buffer, rsBlocks) {
|
|
5200
|
+
let offset = 0;
|
|
5201
|
+
let maxDcCount = 0;
|
|
5202
|
+
let maxEcCount = 0;
|
|
5203
|
+
const dcdata = new Array(rsBlocks.length);
|
|
5204
|
+
const ecdata = new Array(rsBlocks.length);
|
|
5205
|
+
for (let r = 0; r < rsBlocks.length; r += 1) {
|
|
5206
|
+
const dcCount = rsBlocks[r].dataCount;
|
|
5207
|
+
const ecCount = rsBlocks[r].totalCount - dcCount;
|
|
5208
|
+
maxDcCount = Math.max(maxDcCount, dcCount);
|
|
5209
|
+
maxEcCount = Math.max(maxEcCount, ecCount);
|
|
5210
|
+
dcdata[r] = new Array(dcCount);
|
|
5211
|
+
for (let i = 0; i < dcdata[r].length; i += 1) {
|
|
5212
|
+
dcdata[r][i] = 255 & buffer.getBuffer()[i + offset];
|
|
5213
|
+
}
|
|
5214
|
+
offset += dcCount;
|
|
5215
|
+
const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
|
|
5216
|
+
const rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
|
|
5217
|
+
const modPoly = rawPoly.mod(rsPoly);
|
|
5218
|
+
ecdata[r] = new Array(rsPoly.getLength() - 1);
|
|
5219
|
+
for (let i = 0; i < ecdata[r].length; i += 1) {
|
|
5220
|
+
const modIndex = i + modPoly.getLength() - ecdata[r].length;
|
|
5221
|
+
ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;
|
|
5222
|
+
}
|
|
5223
|
+
}
|
|
5224
|
+
let totalCodeCount = 0;
|
|
5225
|
+
for (let i = 0; i < rsBlocks.length; i += 1) {
|
|
5226
|
+
totalCodeCount += rsBlocks[i].totalCount;
|
|
5227
|
+
}
|
|
5228
|
+
const data = new Array(totalCodeCount);
|
|
5229
|
+
let index = 0;
|
|
5230
|
+
for (let i = 0; i < maxDcCount; i += 1) {
|
|
5231
|
+
for (let r = 0; r < rsBlocks.length; r += 1) {
|
|
5232
|
+
if (i < dcdata[r].length) {
|
|
5233
|
+
data[index] = dcdata[r][i];
|
|
5234
|
+
index += 1;
|
|
5310
5235
|
}
|
|
5311
5236
|
}
|
|
5312
|
-
|
|
5313
|
-
|
|
5314
|
-
|
|
5315
|
-
|
|
5316
|
-
|
|
5237
|
+
}
|
|
5238
|
+
for (let i = 0; i < maxEcCount; i += 1) {
|
|
5239
|
+
for (let r = 0; r < rsBlocks.length; r += 1) {
|
|
5240
|
+
if (i < ecdata[r].length) {
|
|
5241
|
+
data[index] = ecdata[r][i];
|
|
5242
|
+
index += 1;
|
|
5317
5243
|
}
|
|
5318
5244
|
}
|
|
5319
|
-
return result;
|
|
5320
5245
|
}
|
|
5321
|
-
|
|
5322
|
-
|
|
5323
|
-
|
|
5324
|
-
|
|
5325
|
-
|
|
5326
|
-
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
5330
|
-
|
|
5331
|
-
|
|
5332
|
-
|
|
5333
|
-
|
|
5334
|
-
|
|
5335
|
-
|
|
5336
|
-
|
|
5337
|
-
|
|
5338
|
-
|
|
5339
|
-
|
|
5340
|
-
|
|
5341
|
-
|
|
5342
|
-
|
|
5343
|
-
|
|
5344
|
-
|
|
5345
|
-
|
|
5346
|
-
|
|
5246
|
+
return data;
|
|
5247
|
+
};
|
|
5248
|
+
const createData = function(typeNumber2, errorCorrectionLevel2, dataList) {
|
|
5249
|
+
const rsBlocks = QRRSBlock.getRSBlocks(typeNumber2, errorCorrectionLevel2);
|
|
5250
|
+
const buffer = qrBitBuffer();
|
|
5251
|
+
for (let i = 0; i < dataList.length; i += 1) {
|
|
5252
|
+
const data = dataList[i];
|
|
5253
|
+
buffer.put(data.getMode(), 4);
|
|
5254
|
+
buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber2));
|
|
5255
|
+
data.write(buffer);
|
|
5256
|
+
}
|
|
5257
|
+
let totalDataCount = 0;
|
|
5258
|
+
for (let i = 0; i < rsBlocks.length; i += 1) {
|
|
5259
|
+
totalDataCount += rsBlocks[i].dataCount;
|
|
5260
|
+
}
|
|
5261
|
+
if (buffer.getLengthInBits() > totalDataCount * 8) {
|
|
5262
|
+
throw "code length overflow. (" + buffer.getLengthInBits() + ">" + totalDataCount * 8 + ")";
|
|
5263
|
+
}
|
|
5264
|
+
if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
|
|
5265
|
+
buffer.put(0, 4);
|
|
5266
|
+
}
|
|
5267
|
+
while (buffer.getLengthInBits() % 8 != 0) {
|
|
5268
|
+
buffer.putBit(false);
|
|
5269
|
+
}
|
|
5270
|
+
while (true) {
|
|
5271
|
+
if (buffer.getLengthInBits() >= totalDataCount * 8) {
|
|
5272
|
+
break;
|
|
5273
|
+
}
|
|
5274
|
+
buffer.put(PAD0, 8);
|
|
5275
|
+
if (buffer.getLengthInBits() >= totalDataCount * 8) {
|
|
5276
|
+
break;
|
|
5347
5277
|
}
|
|
5348
|
-
|
|
5278
|
+
buffer.put(PAD1, 8);
|
|
5279
|
+
}
|
|
5280
|
+
return createBytes(buffer, rsBlocks);
|
|
5281
|
+
};
|
|
5282
|
+
_this.addData = function(data, mode) {
|
|
5283
|
+
mode = mode || "Byte";
|
|
5284
|
+
let newData = null;
|
|
5285
|
+
switch (mode) {
|
|
5286
|
+
case "Numeric":
|
|
5287
|
+
newData = qrNumber(data);
|
|
5288
|
+
break;
|
|
5289
|
+
case "Alphanumeric":
|
|
5290
|
+
newData = qrAlphaNum(data);
|
|
5291
|
+
break;
|
|
5292
|
+
case "Byte":
|
|
5293
|
+
newData = qr8BitByte(data);
|
|
5294
|
+
break;
|
|
5295
|
+
case "Kanji":
|
|
5296
|
+
newData = qrKanji(data);
|
|
5297
|
+
break;
|
|
5298
|
+
default:
|
|
5299
|
+
throw "mode:" + mode;
|
|
5300
|
+
}
|
|
5301
|
+
_dataList.push(newData);
|
|
5302
|
+
_dataCache = null;
|
|
5303
|
+
};
|
|
5304
|
+
_this.isDark = function(row, col) {
|
|
5305
|
+
if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {
|
|
5306
|
+
throw row + "," + col;
|
|
5349
5307
|
}
|
|
5350
|
-
|
|
5351
|
-
|
|
5352
|
-
|
|
5353
|
-
|
|
5354
|
-
|
|
5355
|
-
|
|
5356
|
-
|
|
5357
|
-
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5308
|
+
return _modules[row][col];
|
|
5309
|
+
};
|
|
5310
|
+
_this.getModuleCount = function() {
|
|
5311
|
+
return _moduleCount;
|
|
5312
|
+
};
|
|
5313
|
+
_this.make = function() {
|
|
5314
|
+
if (_typeNumber < 1) {
|
|
5315
|
+
let typeNumber2 = 1;
|
|
5316
|
+
for (; typeNumber2 < 40; typeNumber2++) {
|
|
5317
|
+
const rsBlocks = QRRSBlock.getRSBlocks(typeNumber2, _errorCorrectionLevel);
|
|
5318
|
+
const buffer = qrBitBuffer();
|
|
5319
|
+
for (let i = 0; i < _dataList.length; i++) {
|
|
5320
|
+
const data = _dataList[i];
|
|
5321
|
+
buffer.put(data.getMode(), 4);
|
|
5322
|
+
buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber2));
|
|
5323
|
+
data.write(buffer);
|
|
5361
5324
|
}
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
};
|
|
5366
|
-
const addFinderPattern = (baseRow, baseCol) => {
|
|
5367
|
-
for (let r = -1; r <= 7; r++) {
|
|
5368
|
-
for (let c = -1; c <= 7; c++) {
|
|
5369
|
-
const nr = baseRow + r;
|
|
5370
|
-
const nc = baseCol + c;
|
|
5371
|
-
if (nr < 0 || nr >= size || nc < 0 || nc >= size) continue;
|
|
5372
|
-
if (r >= 0 && r <= 6 && c >= 0 && c <= 6) {
|
|
5373
|
-
if (r === 0 || r === 6 || c === 0 || c === 6 || r >= 2 && r <= 4 && c >= 2 && c <= 4) {
|
|
5374
|
-
setModule(nr, nc, 1);
|
|
5375
|
-
} else {
|
|
5376
|
-
setModule(nr, nc, 0);
|
|
5377
|
-
}
|
|
5378
|
-
} else {
|
|
5379
|
-
setModule(nr, nc, 0);
|
|
5380
|
-
}
|
|
5381
|
-
}
|
|
5325
|
+
let totalDataCount = 0;
|
|
5326
|
+
for (let i = 0; i < rsBlocks.length; i++) {
|
|
5327
|
+
totalDataCount += rsBlocks[i].dataCount;
|
|
5382
5328
|
}
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
addFinderPattern(size - 7, 0);
|
|
5386
|
-
addFinderPattern(0, size - 7);
|
|
5387
|
-
const addAlignmentPattern = (row, col) => {
|
|
5388
|
-
for (let r = -2; r <= 2; r++) {
|
|
5389
|
-
for (let c = -2; c <= 2; c++) {
|
|
5390
|
-
if (Math.abs(r) === 2 || Math.abs(c) === 2 || r === 0 && c === 0) {
|
|
5391
|
-
setModule(row + r, col + c, 1);
|
|
5392
|
-
} else {
|
|
5393
|
-
setModule(row + r, col + c, 0);
|
|
5394
|
-
}
|
|
5395
|
-
}
|
|
5329
|
+
if (buffer.getLengthInBits() <= totalDataCount * 8) {
|
|
5330
|
+
break;
|
|
5396
5331
|
}
|
|
5397
|
-
}
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5332
|
+
}
|
|
5333
|
+
_typeNumber = typeNumber2;
|
|
5334
|
+
}
|
|
5335
|
+
makeImpl(false, getBestMaskPattern());
|
|
5336
|
+
};
|
|
5337
|
+
_this.createTableTag = function(cellSize, margin) {
|
|
5338
|
+
cellSize = cellSize || 2;
|
|
5339
|
+
margin = typeof margin == "undefined" ? cellSize * 4 : margin;
|
|
5340
|
+
let qrHtml = "";
|
|
5341
|
+
qrHtml += '<table style="';
|
|
5342
|
+
qrHtml += " border-width: 0px; border-style: none;";
|
|
5343
|
+
qrHtml += " border-collapse: collapse;";
|
|
5344
|
+
qrHtml += " padding: 0px; margin: " + margin + "px;";
|
|
5345
|
+
qrHtml += '">';
|
|
5346
|
+
qrHtml += "<tbody>";
|
|
5347
|
+
for (let r = 0; r < _this.getModuleCount(); r += 1) {
|
|
5348
|
+
qrHtml += "<tr>";
|
|
5349
|
+
for (let c = 0; c < _this.getModuleCount(); c += 1) {
|
|
5350
|
+
qrHtml += '<td style="';
|
|
5351
|
+
qrHtml += " border-width: 0px; border-style: none;";
|
|
5352
|
+
qrHtml += " border-collapse: collapse;";
|
|
5353
|
+
qrHtml += " padding: 0px; margin: 0px;";
|
|
5354
|
+
qrHtml += " width: " + cellSize + "px;";
|
|
5355
|
+
qrHtml += " height: " + cellSize + "px;";
|
|
5356
|
+
qrHtml += " background-color: ";
|
|
5357
|
+
qrHtml += _this.isDark(r, c) ? "#000000" : "#ffffff";
|
|
5358
|
+
qrHtml += ";";
|
|
5359
|
+
qrHtml += '"/>';
|
|
5360
|
+
}
|
|
5361
|
+
qrHtml += "</tr>";
|
|
5362
|
+
}
|
|
5363
|
+
qrHtml += "</tbody>";
|
|
5364
|
+
qrHtml += "</table>";
|
|
5365
|
+
return qrHtml;
|
|
5366
|
+
};
|
|
5367
|
+
_this.createSvgTag = function(cellSize, margin, alt, title) {
|
|
5368
|
+
let opts = {};
|
|
5369
|
+
if (typeof arguments[0] == "object") {
|
|
5370
|
+
opts = arguments[0];
|
|
5371
|
+
cellSize = opts.cellSize;
|
|
5372
|
+
margin = opts.margin;
|
|
5373
|
+
alt = opts.alt;
|
|
5374
|
+
title = opts.title;
|
|
5375
|
+
}
|
|
5376
|
+
cellSize = cellSize || 2;
|
|
5377
|
+
margin = typeof margin == "undefined" ? cellSize * 4 : margin;
|
|
5378
|
+
alt = typeof alt === "string" ? { text: alt } : alt || {};
|
|
5379
|
+
alt.text = alt.text || null;
|
|
5380
|
+
alt.id = alt.text ? alt.id || "qrcode-description" : null;
|
|
5381
|
+
title = typeof title === "string" ? { text: title } : title || {};
|
|
5382
|
+
title.text = title.text || null;
|
|
5383
|
+
title.id = title.text ? title.id || "qrcode-title" : null;
|
|
5384
|
+
const size = _this.getModuleCount() * cellSize + margin * 2;
|
|
5385
|
+
let c, mc, r, mr, qrSvg = "", rect;
|
|
5386
|
+
rect = "l" + cellSize + ",0 0," + cellSize + " -" + cellSize + ",0 0,-" + cellSize + "z ";
|
|
5387
|
+
qrSvg += '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"';
|
|
5388
|
+
qrSvg += !opts.scalable ? ' width="' + size + 'px" height="' + size + 'px"' : "";
|
|
5389
|
+
qrSvg += ' viewBox="0 0 ' + size + " " + size + '" ';
|
|
5390
|
+
qrSvg += ' preserveAspectRatio="xMinYMin meet"';
|
|
5391
|
+
qrSvg += title.text || alt.text ? ' role="img" aria-labelledby="' + escapeXml([title.id, alt.id].join(" ").trim()) + '"' : "";
|
|
5392
|
+
qrSvg += ">";
|
|
5393
|
+
qrSvg += title.text ? '<title id="' + escapeXml(title.id) + '">' + escapeXml(title.text) + "</title>" : "";
|
|
5394
|
+
qrSvg += alt.text ? '<description id="' + escapeXml(alt.id) + '">' + escapeXml(alt.text) + "</description>" : "";
|
|
5395
|
+
qrSvg += '<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>';
|
|
5396
|
+
qrSvg += '<path d="';
|
|
5397
|
+
for (r = 0; r < _this.getModuleCount(); r += 1) {
|
|
5398
|
+
mr = r * cellSize + margin;
|
|
5399
|
+
for (c = 0; c < _this.getModuleCount(); c += 1) {
|
|
5400
|
+
if (_this.isDark(r, c)) {
|
|
5401
|
+
mc = c * cellSize + margin;
|
|
5402
|
+
qrSvg += "M" + mc + "," + mr + rect;
|
|
5403
5403
|
}
|
|
5404
5404
|
}
|
|
5405
|
-
|
|
5406
|
-
|
|
5407
|
-
|
|
5405
|
+
}
|
|
5406
|
+
qrSvg += '" stroke="transparent" fill="black"/>';
|
|
5407
|
+
qrSvg += "</svg>";
|
|
5408
|
+
return qrSvg;
|
|
5409
|
+
};
|
|
5410
|
+
_this.createDataURL = function(cellSize, margin) {
|
|
5411
|
+
cellSize = cellSize || 2;
|
|
5412
|
+
margin = typeof margin == "undefined" ? cellSize * 4 : margin;
|
|
5413
|
+
const size = _this.getModuleCount() * cellSize + margin * 2;
|
|
5414
|
+
const min = margin;
|
|
5415
|
+
const max = size - margin;
|
|
5416
|
+
return createDataURL(size, size, function(x, y) {
|
|
5417
|
+
if (min <= x && x < max && min <= y && y < max) {
|
|
5418
|
+
const c = Math.floor((x - min) / cellSize);
|
|
5419
|
+
const r = Math.floor((y - min) / cellSize);
|
|
5420
|
+
return _this.isDark(r, c) ? 0 : 1;
|
|
5421
|
+
} else {
|
|
5422
|
+
return 1;
|
|
5408
5423
|
}
|
|
5409
|
-
|
|
5410
|
-
|
|
5411
|
-
|
|
5412
|
-
|
|
5424
|
+
});
|
|
5425
|
+
};
|
|
5426
|
+
_this.createImgTag = function(cellSize, margin, alt) {
|
|
5427
|
+
cellSize = cellSize || 2;
|
|
5428
|
+
margin = typeof margin == "undefined" ? cellSize * 4 : margin;
|
|
5429
|
+
const size = _this.getModuleCount() * cellSize + margin * 2;
|
|
5430
|
+
let img = "";
|
|
5431
|
+
img += "<img";
|
|
5432
|
+
img += ' src="';
|
|
5433
|
+
img += _this.createDataURL(cellSize, margin);
|
|
5434
|
+
img += '"';
|
|
5435
|
+
img += ' width="';
|
|
5436
|
+
img += size;
|
|
5437
|
+
img += '"';
|
|
5438
|
+
img += ' height="';
|
|
5439
|
+
img += size;
|
|
5440
|
+
img += '"';
|
|
5441
|
+
if (alt) {
|
|
5442
|
+
img += ' alt="';
|
|
5443
|
+
img += escapeXml(alt);
|
|
5444
|
+
img += '"';
|
|
5445
|
+
}
|
|
5446
|
+
img += "/>";
|
|
5447
|
+
return img;
|
|
5448
|
+
};
|
|
5449
|
+
const escapeXml = function(s) {
|
|
5450
|
+
let escaped = "";
|
|
5451
|
+
for (let i = 0; i < s.length; i += 1) {
|
|
5452
|
+
const c = s.charAt(i);
|
|
5453
|
+
switch (c) {
|
|
5454
|
+
case "<":
|
|
5455
|
+
escaped += "<";
|
|
5456
|
+
break;
|
|
5457
|
+
case ">":
|
|
5458
|
+
escaped += ">";
|
|
5459
|
+
break;
|
|
5460
|
+
case "&":
|
|
5461
|
+
escaped += "&";
|
|
5462
|
+
break;
|
|
5463
|
+
case '"':
|
|
5464
|
+
escaped += """;
|
|
5465
|
+
break;
|
|
5466
|
+
default:
|
|
5467
|
+
escaped += c;
|
|
5468
|
+
break;
|
|
5413
5469
|
}
|
|
5414
|
-
|
|
5415
|
-
|
|
5416
|
-
|
|
5470
|
+
}
|
|
5471
|
+
return escaped;
|
|
5472
|
+
};
|
|
5473
|
+
const _createHalfASCII = function(margin) {
|
|
5474
|
+
const cellSize = 1;
|
|
5475
|
+
margin = typeof margin == "undefined" ? cellSize * 2 : margin;
|
|
5476
|
+
const size = _this.getModuleCount() * cellSize + margin * 2;
|
|
5477
|
+
const min = margin;
|
|
5478
|
+
const max = size - margin;
|
|
5479
|
+
let y, x, r1, r2, p;
|
|
5480
|
+
const blocks = {
|
|
5481
|
+
"██": "█",
|
|
5482
|
+
"█ ": "▀",
|
|
5483
|
+
" █": "▄",
|
|
5484
|
+
" ": " "
|
|
5485
|
+
};
|
|
5486
|
+
const blocksLastLineNoMargin = {
|
|
5487
|
+
"██": "▀",
|
|
5488
|
+
"█ ": "▀",
|
|
5489
|
+
" █": " ",
|
|
5490
|
+
" ": " "
|
|
5491
|
+
};
|
|
5492
|
+
let ascii = "";
|
|
5493
|
+
for (y = 0; y < size; y += 2) {
|
|
5494
|
+
r1 = Math.floor((y - min) / cellSize);
|
|
5495
|
+
r2 = Math.floor((y + 1 - min) / cellSize);
|
|
5496
|
+
for (x = 0; x < size; x += 1) {
|
|
5497
|
+
p = "█";
|
|
5498
|
+
if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {
|
|
5499
|
+
p = " ";
|
|
5417
5500
|
}
|
|
5418
|
-
|
|
5419
|
-
|
|
5420
|
-
|
|
5421
|
-
|
|
5501
|
+
if (min <= x && x < max && min <= y + 1 && y + 1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {
|
|
5502
|
+
p += " ";
|
|
5503
|
+
} else {
|
|
5504
|
+
p += "█";
|
|
5422
5505
|
}
|
|
5506
|
+
ascii += margin < 1 && y + 1 >= max ? blocksLastLineNoMargin[p] : blocks[p];
|
|
5423
5507
|
}
|
|
5424
|
-
|
|
5425
|
-
|
|
5426
|
-
|
|
5508
|
+
ascii += "\n";
|
|
5509
|
+
}
|
|
5510
|
+
if (size % 2 && margin > 0) {
|
|
5511
|
+
return ascii.substring(0, ascii.length - size - 1) + Array(size + 1).join("▀");
|
|
5512
|
+
}
|
|
5513
|
+
return ascii.substring(0, ascii.length - 1);
|
|
5514
|
+
};
|
|
5515
|
+
_this.createASCII = function(cellSize, margin) {
|
|
5516
|
+
cellSize = cellSize || 1;
|
|
5517
|
+
if (cellSize < 2) {
|
|
5518
|
+
return _createHalfASCII(margin);
|
|
5519
|
+
}
|
|
5520
|
+
cellSize -= 1;
|
|
5521
|
+
margin = typeof margin == "undefined" ? cellSize * 2 : margin;
|
|
5522
|
+
const size = _this.getModuleCount() * cellSize + margin * 2;
|
|
5523
|
+
const min = margin;
|
|
5524
|
+
const max = size - margin;
|
|
5525
|
+
let y, x, r, p;
|
|
5526
|
+
const white = Array(cellSize + 1).join("██");
|
|
5527
|
+
const black = Array(cellSize + 1).join(" ");
|
|
5528
|
+
let ascii = "";
|
|
5529
|
+
let line = "";
|
|
5530
|
+
for (y = 0; y < size; y += 1) {
|
|
5531
|
+
r = Math.floor((y - min) / cellSize);
|
|
5532
|
+
line = "";
|
|
5533
|
+
for (x = 0; x < size; x += 1) {
|
|
5534
|
+
p = 1;
|
|
5535
|
+
if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {
|
|
5536
|
+
p = 0;
|
|
5427
5537
|
}
|
|
5538
|
+
line += p ? white : black;
|
|
5428
5539
|
}
|
|
5429
|
-
for (
|
|
5430
|
-
|
|
5431
|
-
|
|
5432
|
-
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5540
|
+
for (r = 0; r < cellSize; r += 1) {
|
|
5541
|
+
ascii += line + "\n";
|
|
5542
|
+
}
|
|
5543
|
+
}
|
|
5544
|
+
return ascii.substring(0, ascii.length - 1);
|
|
5545
|
+
};
|
|
5546
|
+
_this.renderTo2dContext = function(context, cellSize) {
|
|
5547
|
+
cellSize = cellSize || 2;
|
|
5548
|
+
const length = _this.getModuleCount();
|
|
5549
|
+
for (let row = 0; row < length; row++) {
|
|
5550
|
+
for (let col = 0; col < length; col++) {
|
|
5551
|
+
context.fillStyle = _this.isDark(row, col) ? "black" : "white";
|
|
5552
|
+
context.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);
|
|
5553
|
+
}
|
|
5554
|
+
}
|
|
5555
|
+
};
|
|
5556
|
+
return _this;
|
|
5557
|
+
};
|
|
5558
|
+
qrcode.stringToBytes = function(s) {
|
|
5559
|
+
const bytes = [];
|
|
5560
|
+
for (let i = 0; i < s.length; i += 1) {
|
|
5561
|
+
const c = s.charCodeAt(i);
|
|
5562
|
+
bytes.push(c & 255);
|
|
5563
|
+
}
|
|
5564
|
+
return bytes;
|
|
5565
|
+
};
|
|
5566
|
+
qrcode.createStringToBytes = function(unicodeData, numChars) {
|
|
5567
|
+
const unicodeMap = function() {
|
|
5568
|
+
const bin = base64DecodeInputStream(unicodeData);
|
|
5569
|
+
const read = function() {
|
|
5570
|
+
const b = bin.read();
|
|
5571
|
+
if (b == -1) throw "eof";
|
|
5572
|
+
return b;
|
|
5573
|
+
};
|
|
5574
|
+
let count = 0;
|
|
5575
|
+
const unicodeMap2 = {};
|
|
5576
|
+
while (true) {
|
|
5577
|
+
const b0 = bin.read();
|
|
5578
|
+
if (b0 == -1) break;
|
|
5579
|
+
const b1 = read();
|
|
5580
|
+
const b2 = read();
|
|
5581
|
+
const b3 = read();
|
|
5582
|
+
const k = String.fromCharCode(b0 << 8 | b1);
|
|
5583
|
+
const v = b2 << 8 | b3;
|
|
5584
|
+
unicodeMap2[k] = v;
|
|
5585
|
+
count += 1;
|
|
5586
|
+
}
|
|
5587
|
+
if (count != numChars) {
|
|
5588
|
+
throw count + " != " + numChars;
|
|
5589
|
+
}
|
|
5590
|
+
return unicodeMap2;
|
|
5591
|
+
}();
|
|
5592
|
+
const unknownChar = "?".charCodeAt(0);
|
|
5593
|
+
return function(s) {
|
|
5594
|
+
const bytes = [];
|
|
5595
|
+
for (let i = 0; i < s.length; i += 1) {
|
|
5596
|
+
const c = s.charCodeAt(i);
|
|
5597
|
+
if (c < 128) {
|
|
5598
|
+
bytes.push(c);
|
|
5599
|
+
} else {
|
|
5600
|
+
const b = unicodeMap[s.charAt(i)];
|
|
5601
|
+
if (typeof b == "number") {
|
|
5602
|
+
if ((b & 255) == b) {
|
|
5603
|
+
bytes.push(b);
|
|
5604
|
+
} else {
|
|
5605
|
+
bytes.push(b >>> 8);
|
|
5606
|
+
bytes.push(b & 255);
|
|
5443
5607
|
}
|
|
5608
|
+
} else {
|
|
5609
|
+
bytes.push(unknownChar);
|
|
5444
5610
|
}
|
|
5445
5611
|
}
|
|
5446
|
-
|
|
5447
|
-
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
|
|
5455
|
-
|
|
5456
|
-
|
|
5457
|
-
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5463
|
-
|
|
5464
|
-
|
|
5612
|
+
}
|
|
5613
|
+
return bytes;
|
|
5614
|
+
};
|
|
5615
|
+
};
|
|
5616
|
+
const QRMode = {
|
|
5617
|
+
MODE_NUMBER: 1 << 0,
|
|
5618
|
+
MODE_ALPHA_NUM: 1 << 1,
|
|
5619
|
+
MODE_8BIT_BYTE: 1 << 2,
|
|
5620
|
+
MODE_KANJI: 1 << 3
|
|
5621
|
+
};
|
|
5622
|
+
const QRErrorCorrectionLevel = {
|
|
5623
|
+
L: 1,
|
|
5624
|
+
M: 0,
|
|
5625
|
+
Q: 3,
|
|
5626
|
+
H: 2
|
|
5627
|
+
};
|
|
5628
|
+
const QRMaskPattern = {
|
|
5629
|
+
PATTERN000: 0,
|
|
5630
|
+
PATTERN001: 1,
|
|
5631
|
+
PATTERN010: 2,
|
|
5632
|
+
PATTERN011: 3,
|
|
5633
|
+
PATTERN100: 4,
|
|
5634
|
+
PATTERN101: 5,
|
|
5635
|
+
PATTERN110: 6,
|
|
5636
|
+
PATTERN111: 7
|
|
5637
|
+
};
|
|
5638
|
+
const QRUtil = function() {
|
|
5639
|
+
const PATTERN_POSITION_TABLE = [
|
|
5640
|
+
[],
|
|
5641
|
+
[6, 18],
|
|
5642
|
+
[6, 22],
|
|
5643
|
+
[6, 26],
|
|
5644
|
+
[6, 30],
|
|
5645
|
+
[6, 34],
|
|
5646
|
+
[6, 22, 38],
|
|
5647
|
+
[6, 24, 42],
|
|
5648
|
+
[6, 26, 46],
|
|
5649
|
+
[6, 28, 50],
|
|
5650
|
+
[6, 30, 54],
|
|
5651
|
+
[6, 32, 58],
|
|
5652
|
+
[6, 34, 62],
|
|
5653
|
+
[6, 26, 46, 66],
|
|
5654
|
+
[6, 26, 48, 70],
|
|
5655
|
+
[6, 26, 50, 74],
|
|
5656
|
+
[6, 30, 54, 78],
|
|
5657
|
+
[6, 30, 56, 82],
|
|
5658
|
+
[6, 30, 58, 86],
|
|
5659
|
+
[6, 34, 62, 90],
|
|
5660
|
+
[6, 28, 50, 72, 94],
|
|
5661
|
+
[6, 26, 50, 74, 98],
|
|
5662
|
+
[6, 30, 54, 78, 102],
|
|
5663
|
+
[6, 28, 54, 80, 106],
|
|
5664
|
+
[6, 32, 58, 84, 110],
|
|
5665
|
+
[6, 30, 58, 86, 114],
|
|
5666
|
+
[6, 34, 62, 90, 118],
|
|
5667
|
+
[6, 26, 50, 74, 98, 122],
|
|
5668
|
+
[6, 30, 54, 78, 102, 126],
|
|
5669
|
+
[6, 26, 52, 78, 104, 130],
|
|
5670
|
+
[6, 30, 56, 82, 108, 134],
|
|
5671
|
+
[6, 34, 60, 86, 112, 138],
|
|
5672
|
+
[6, 30, 58, 86, 114, 142],
|
|
5673
|
+
[6, 34, 62, 90, 118, 146],
|
|
5674
|
+
[6, 30, 54, 78, 102, 126, 150],
|
|
5675
|
+
[6, 24, 50, 76, 102, 128, 154],
|
|
5676
|
+
[6, 28, 54, 80, 106, 132, 158],
|
|
5677
|
+
[6, 32, 58, 84, 110, 136, 162],
|
|
5678
|
+
[6, 26, 54, 82, 110, 138, 166],
|
|
5679
|
+
[6, 30, 58, 86, 114, 142, 170]
|
|
5680
|
+
];
|
|
5681
|
+
const G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0;
|
|
5682
|
+
const G18 = 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0;
|
|
5683
|
+
const G15_MASK = 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1;
|
|
5684
|
+
const _this = {};
|
|
5685
|
+
const getBCHDigit = function(data) {
|
|
5686
|
+
let digit = 0;
|
|
5687
|
+
while (data != 0) {
|
|
5688
|
+
digit += 1;
|
|
5689
|
+
data >>>= 1;
|
|
5690
|
+
}
|
|
5691
|
+
return digit;
|
|
5692
|
+
};
|
|
5693
|
+
_this.getBCHTypeInfo = function(data) {
|
|
5694
|
+
let d = data << 10;
|
|
5695
|
+
while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
|
|
5696
|
+
d ^= G15 << getBCHDigit(d) - getBCHDigit(G15);
|
|
5697
|
+
}
|
|
5698
|
+
return (data << 10 | d) ^ G15_MASK;
|
|
5699
|
+
};
|
|
5700
|
+
_this.getBCHTypeNumber = function(data) {
|
|
5701
|
+
let d = data << 12;
|
|
5702
|
+
while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {
|
|
5703
|
+
d ^= G18 << getBCHDigit(d) - getBCHDigit(G18);
|
|
5704
|
+
}
|
|
5705
|
+
return data << 12 | d;
|
|
5706
|
+
};
|
|
5707
|
+
_this.getPatternPosition = function(typeNumber) {
|
|
5708
|
+
return PATTERN_POSITION_TABLE[typeNumber - 1];
|
|
5709
|
+
};
|
|
5710
|
+
_this.getMaskFunction = function(maskPattern) {
|
|
5711
|
+
switch (maskPattern) {
|
|
5712
|
+
case QRMaskPattern.PATTERN000:
|
|
5713
|
+
return function(i, j) {
|
|
5714
|
+
return (i + j) % 2 == 0;
|
|
5715
|
+
};
|
|
5716
|
+
case QRMaskPattern.PATTERN001:
|
|
5717
|
+
return function(i, j) {
|
|
5718
|
+
return i % 2 == 0;
|
|
5719
|
+
};
|
|
5720
|
+
case QRMaskPattern.PATTERN010:
|
|
5721
|
+
return function(i, j) {
|
|
5722
|
+
return j % 3 == 0;
|
|
5723
|
+
};
|
|
5724
|
+
case QRMaskPattern.PATTERN011:
|
|
5725
|
+
return function(i, j) {
|
|
5726
|
+
return (i + j) % 3 == 0;
|
|
5727
|
+
};
|
|
5728
|
+
case QRMaskPattern.PATTERN100:
|
|
5729
|
+
return function(i, j) {
|
|
5730
|
+
return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
|
|
5731
|
+
};
|
|
5732
|
+
case QRMaskPattern.PATTERN101:
|
|
5733
|
+
return function(i, j) {
|
|
5734
|
+
return i * j % 2 + i * j % 3 == 0;
|
|
5735
|
+
};
|
|
5736
|
+
case QRMaskPattern.PATTERN110:
|
|
5737
|
+
return function(i, j) {
|
|
5738
|
+
return (i * j % 2 + i * j % 3) % 2 == 0;
|
|
5739
|
+
};
|
|
5740
|
+
case QRMaskPattern.PATTERN111:
|
|
5741
|
+
return function(i, j) {
|
|
5742
|
+
return (i * j % 3 + (i + j) % 2) % 2 == 0;
|
|
5743
|
+
};
|
|
5744
|
+
default:
|
|
5745
|
+
throw "bad maskPattern:" + maskPattern;
|
|
5746
|
+
}
|
|
5747
|
+
};
|
|
5748
|
+
_this.getErrorCorrectPolynomial = function(errorCorrectLength) {
|
|
5749
|
+
let a = qrPolynomial([1], 0);
|
|
5750
|
+
for (let i = 0; i < errorCorrectLength; i += 1) {
|
|
5751
|
+
a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
|
|
5752
|
+
}
|
|
5753
|
+
return a;
|
|
5754
|
+
};
|
|
5755
|
+
_this.getLengthInBits = function(mode, type) {
|
|
5756
|
+
if (1 <= type && type < 10) {
|
|
5757
|
+
switch (mode) {
|
|
5758
|
+
case QRMode.MODE_NUMBER:
|
|
5759
|
+
return 10;
|
|
5760
|
+
case QRMode.MODE_ALPHA_NUM:
|
|
5761
|
+
return 9;
|
|
5762
|
+
case QRMode.MODE_8BIT_BYTE:
|
|
5763
|
+
return 8;
|
|
5764
|
+
case QRMode.MODE_KANJI:
|
|
5765
|
+
return 8;
|
|
5766
|
+
default:
|
|
5767
|
+
throw "mode:" + mode;
|
|
5768
|
+
}
|
|
5769
|
+
} else if (type < 27) {
|
|
5770
|
+
switch (mode) {
|
|
5771
|
+
case QRMode.MODE_NUMBER:
|
|
5772
|
+
return 12;
|
|
5773
|
+
case QRMode.MODE_ALPHA_NUM:
|
|
5774
|
+
return 11;
|
|
5775
|
+
case QRMode.MODE_8BIT_BYTE:
|
|
5776
|
+
return 16;
|
|
5777
|
+
case QRMode.MODE_KANJI:
|
|
5778
|
+
return 10;
|
|
5779
|
+
default:
|
|
5780
|
+
throw "mode:" + mode;
|
|
5781
|
+
}
|
|
5782
|
+
} else if (type < 41) {
|
|
5783
|
+
switch (mode) {
|
|
5784
|
+
case QRMode.MODE_NUMBER:
|
|
5785
|
+
return 14;
|
|
5786
|
+
case QRMode.MODE_ALPHA_NUM:
|
|
5787
|
+
return 13;
|
|
5788
|
+
case QRMode.MODE_8BIT_BYTE:
|
|
5789
|
+
return 16;
|
|
5790
|
+
case QRMode.MODE_KANJI:
|
|
5791
|
+
return 12;
|
|
5792
|
+
default:
|
|
5793
|
+
throw "mode:" + mode;
|
|
5794
|
+
}
|
|
5795
|
+
} else {
|
|
5796
|
+
throw "type:" + type;
|
|
5797
|
+
}
|
|
5798
|
+
};
|
|
5799
|
+
_this.getLostPoint = function(qrcode2) {
|
|
5800
|
+
const moduleCount = qrcode2.getModuleCount();
|
|
5801
|
+
let lostPoint = 0;
|
|
5802
|
+
for (let row = 0; row < moduleCount; row += 1) {
|
|
5803
|
+
for (let col = 0; col < moduleCount; col += 1) {
|
|
5804
|
+
let sameCount = 0;
|
|
5805
|
+
const dark = qrcode2.isDark(row, col);
|
|
5806
|
+
for (let r = -1; r <= 1; r += 1) {
|
|
5807
|
+
if (row + r < 0 || moduleCount <= row + r) {
|
|
5808
|
+
continue;
|
|
5465
5809
|
}
|
|
5466
|
-
|
|
5467
|
-
|
|
5468
|
-
|
|
5469
|
-
|
|
5470
|
-
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
if ((row + col
|
|
5474
|
-
|
|
5810
|
+
for (let c = -1; c <= 1; c += 1) {
|
|
5811
|
+
if (col + c < 0 || moduleCount <= col + c) {
|
|
5812
|
+
continue;
|
|
5813
|
+
}
|
|
5814
|
+
if (r == 0 && c == 0) {
|
|
5815
|
+
continue;
|
|
5816
|
+
}
|
|
5817
|
+
if (dark == qrcode2.isDark(row + r, col + c)) {
|
|
5818
|
+
sameCount += 1;
|
|
5475
5819
|
}
|
|
5476
5820
|
}
|
|
5477
5821
|
}
|
|
5822
|
+
if (sameCount > 5) {
|
|
5823
|
+
lostPoint += 3 + sameCount - 5;
|
|
5824
|
+
}
|
|
5478
5825
|
}
|
|
5479
|
-
|
|
5480
|
-
|
|
5481
|
-
for (let
|
|
5482
|
-
|
|
5826
|
+
}
|
|
5827
|
+
for (let row = 0; row < moduleCount - 1; row += 1) {
|
|
5828
|
+
for (let col = 0; col < moduleCount - 1; col += 1) {
|
|
5829
|
+
let count = 0;
|
|
5830
|
+
if (qrcode2.isDark(row, col)) count += 1;
|
|
5831
|
+
if (qrcode2.isDark(row + 1, col)) count += 1;
|
|
5832
|
+
if (qrcode2.isDark(row, col + 1)) count += 1;
|
|
5833
|
+
if (qrcode2.isDark(row + 1, col + 1)) count += 1;
|
|
5834
|
+
if (count == 0 || count == 4) {
|
|
5835
|
+
lostPoint += 3;
|
|
5836
|
+
}
|
|
5483
5837
|
}
|
|
5484
|
-
|
|
5485
|
-
|
|
5486
|
-
for (let
|
|
5487
|
-
|
|
5838
|
+
}
|
|
5839
|
+
for (let row = 0; row < moduleCount; row += 1) {
|
|
5840
|
+
for (let col = 0; col < moduleCount - 6; col += 1) {
|
|
5841
|
+
if (qrcode2.isDark(row, col) && !qrcode2.isDark(row, col + 1) && qrcode2.isDark(row, col + 2) && qrcode2.isDark(row, col + 3) && qrcode2.isDark(row, col + 4) && !qrcode2.isDark(row, col + 5) && qrcode2.isDark(row, col + 6)) {
|
|
5842
|
+
lostPoint += 40;
|
|
5843
|
+
}
|
|
5488
5844
|
}
|
|
5489
|
-
|
|
5490
|
-
|
|
5845
|
+
}
|
|
5846
|
+
for (let col = 0; col < moduleCount; col += 1) {
|
|
5847
|
+
for (let row = 0; row < moduleCount - 6; row += 1) {
|
|
5848
|
+
if (qrcode2.isDark(row, col) && !qrcode2.isDark(row + 1, col) && qrcode2.isDark(row + 2, col) && qrcode2.isDark(row + 3, col) && qrcode2.isDark(row + 4, col) && !qrcode2.isDark(row + 5, col) && qrcode2.isDark(row + 6, col)) {
|
|
5849
|
+
lostPoint += 40;
|
|
5850
|
+
}
|
|
5491
5851
|
}
|
|
5492
|
-
|
|
5493
|
-
|
|
5494
|
-
|
|
5495
|
-
for (let
|
|
5496
|
-
|
|
5852
|
+
}
|
|
5853
|
+
let darkCount = 0;
|
|
5854
|
+
for (let col = 0; col < moduleCount; col += 1) {
|
|
5855
|
+
for (let row = 0; row < moduleCount; row += 1) {
|
|
5856
|
+
if (qrcode2.isDark(row, col)) {
|
|
5857
|
+
darkCount += 1;
|
|
5858
|
+
}
|
|
5497
5859
|
}
|
|
5498
|
-
|
|
5499
|
-
|
|
5860
|
+
}
|
|
5861
|
+
const ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
|
|
5862
|
+
lostPoint += ratio * 10;
|
|
5863
|
+
return lostPoint;
|
|
5864
|
+
};
|
|
5865
|
+
return _this;
|
|
5866
|
+
}();
|
|
5867
|
+
const QRMath = function() {
|
|
5868
|
+
const EXP_TABLE = new Array(256);
|
|
5869
|
+
const LOG_TABLE = new Array(256);
|
|
5870
|
+
for (let i = 0; i < 8; i += 1) {
|
|
5871
|
+
EXP_TABLE[i] = 1 << i;
|
|
5872
|
+
}
|
|
5873
|
+
for (let i = 8; i < 256; i += 1) {
|
|
5874
|
+
EXP_TABLE[i] = EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8];
|
|
5875
|
+
}
|
|
5876
|
+
for (let i = 0; i < 255; i += 1) {
|
|
5877
|
+
LOG_TABLE[EXP_TABLE[i]] = i;
|
|
5878
|
+
}
|
|
5879
|
+
const _this = {};
|
|
5880
|
+
_this.glog = function(n) {
|
|
5881
|
+
if (n < 1) {
|
|
5882
|
+
throw "glog(" + n + ")";
|
|
5883
|
+
}
|
|
5884
|
+
return LOG_TABLE[n];
|
|
5885
|
+
};
|
|
5886
|
+
_this.gexp = function(n) {
|
|
5887
|
+
while (n < 0) {
|
|
5888
|
+
n += 255;
|
|
5889
|
+
}
|
|
5890
|
+
while (n >= 256) {
|
|
5891
|
+
n -= 255;
|
|
5892
|
+
}
|
|
5893
|
+
return EXP_TABLE[n];
|
|
5894
|
+
};
|
|
5895
|
+
return _this;
|
|
5896
|
+
}();
|
|
5897
|
+
const qrPolynomial = function(num, shift) {
|
|
5898
|
+
if (typeof num.length == "undefined") {
|
|
5899
|
+
throw num.length + "/" + shift;
|
|
5900
|
+
}
|
|
5901
|
+
const _num = function() {
|
|
5902
|
+
let offset = 0;
|
|
5903
|
+
while (offset < num.length && num[offset] == 0) {
|
|
5904
|
+
offset += 1;
|
|
5905
|
+
}
|
|
5906
|
+
const _num2 = new Array(num.length - offset + shift);
|
|
5907
|
+
for (let i = 0; i < num.length - offset; i += 1) {
|
|
5908
|
+
_num2[i] = num[i + offset];
|
|
5909
|
+
}
|
|
5910
|
+
return _num2;
|
|
5911
|
+
}();
|
|
5912
|
+
const _this = {};
|
|
5913
|
+
_this.getAt = function(index) {
|
|
5914
|
+
return _num[index];
|
|
5915
|
+
};
|
|
5916
|
+
_this.getLength = function() {
|
|
5917
|
+
return _num.length;
|
|
5918
|
+
};
|
|
5919
|
+
_this.multiply = function(e) {
|
|
5920
|
+
const num2 = new Array(_this.getLength() + e.getLength() - 1);
|
|
5921
|
+
for (let i = 0; i < _this.getLength(); i += 1) {
|
|
5922
|
+
for (let j = 0; j < e.getLength(); j += 1) {
|
|
5923
|
+
num2[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
|
|
5500
5924
|
}
|
|
5501
|
-
|
|
5502
|
-
|
|
5925
|
+
}
|
|
5926
|
+
return qrPolynomial(num2, 0);
|
|
5927
|
+
};
|
|
5928
|
+
_this.mod = function(e) {
|
|
5929
|
+
if (_this.getLength() - e.getLength() < 0) {
|
|
5930
|
+
return _this;
|
|
5931
|
+
}
|
|
5932
|
+
const ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));
|
|
5933
|
+
const num2 = new Array(_this.getLength());
|
|
5934
|
+
for (let i = 0; i < _this.getLength(); i += 1) {
|
|
5935
|
+
num2[i] = _this.getAt(i);
|
|
5936
|
+
}
|
|
5937
|
+
for (let i = 0; i < e.getLength(); i += 1) {
|
|
5938
|
+
num2[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);
|
|
5939
|
+
}
|
|
5940
|
+
return qrPolynomial(num2, 0).mod(e);
|
|
5941
|
+
};
|
|
5942
|
+
return _this;
|
|
5943
|
+
};
|
|
5944
|
+
const QRRSBlock = function() {
|
|
5945
|
+
const RS_BLOCK_TABLE = [
|
|
5946
|
+
// L
|
|
5947
|
+
// M
|
|
5948
|
+
// Q
|
|
5949
|
+
// H
|
|
5950
|
+
// 1
|
|
5951
|
+
[1, 26, 19],
|
|
5952
|
+
[1, 26, 16],
|
|
5953
|
+
[1, 26, 13],
|
|
5954
|
+
[1, 26, 9],
|
|
5955
|
+
// 2
|
|
5956
|
+
[1, 44, 34],
|
|
5957
|
+
[1, 44, 28],
|
|
5958
|
+
[1, 44, 22],
|
|
5959
|
+
[1, 44, 16],
|
|
5960
|
+
// 3
|
|
5961
|
+
[1, 70, 55],
|
|
5962
|
+
[1, 70, 44],
|
|
5963
|
+
[2, 35, 17],
|
|
5964
|
+
[2, 35, 13],
|
|
5965
|
+
// 4
|
|
5966
|
+
[1, 100, 80],
|
|
5967
|
+
[2, 50, 32],
|
|
5968
|
+
[2, 50, 24],
|
|
5969
|
+
[4, 25, 9],
|
|
5970
|
+
// 5
|
|
5971
|
+
[1, 134, 108],
|
|
5972
|
+
[2, 67, 43],
|
|
5973
|
+
[2, 33, 15, 2, 34, 16],
|
|
5974
|
+
[2, 33, 11, 2, 34, 12],
|
|
5975
|
+
// 6
|
|
5976
|
+
[2, 86, 68],
|
|
5977
|
+
[4, 43, 27],
|
|
5978
|
+
[4, 43, 19],
|
|
5979
|
+
[4, 43, 15],
|
|
5980
|
+
// 7
|
|
5981
|
+
[2, 98, 78],
|
|
5982
|
+
[4, 49, 31],
|
|
5983
|
+
[2, 32, 14, 4, 33, 15],
|
|
5984
|
+
[4, 39, 13, 1, 40, 14],
|
|
5985
|
+
// 8
|
|
5986
|
+
[2, 121, 97],
|
|
5987
|
+
[2, 60, 38, 2, 61, 39],
|
|
5988
|
+
[4, 40, 18, 2, 41, 19],
|
|
5989
|
+
[4, 40, 14, 2, 41, 15],
|
|
5990
|
+
// 9
|
|
5991
|
+
[2, 146, 116],
|
|
5992
|
+
[3, 58, 36, 2, 59, 37],
|
|
5993
|
+
[4, 36, 16, 4, 37, 17],
|
|
5994
|
+
[4, 36, 12, 4, 37, 13],
|
|
5995
|
+
// 10
|
|
5996
|
+
[2, 86, 68, 2, 87, 69],
|
|
5997
|
+
[4, 69, 43, 1, 70, 44],
|
|
5998
|
+
[6, 43, 19, 2, 44, 20],
|
|
5999
|
+
[6, 43, 15, 2, 44, 16],
|
|
6000
|
+
// 11
|
|
6001
|
+
[4, 101, 81],
|
|
6002
|
+
[1, 80, 50, 4, 81, 51],
|
|
6003
|
+
[4, 50, 22, 4, 51, 23],
|
|
6004
|
+
[3, 36, 12, 8, 37, 13],
|
|
6005
|
+
// 12
|
|
6006
|
+
[2, 116, 92, 2, 117, 93],
|
|
6007
|
+
[6, 58, 36, 2, 59, 37],
|
|
6008
|
+
[4, 46, 20, 6, 47, 21],
|
|
6009
|
+
[7, 42, 14, 4, 43, 15],
|
|
6010
|
+
// 13
|
|
6011
|
+
[4, 133, 107],
|
|
6012
|
+
[8, 59, 37, 1, 60, 38],
|
|
6013
|
+
[8, 44, 20, 4, 45, 21],
|
|
6014
|
+
[12, 33, 11, 4, 34, 12],
|
|
6015
|
+
// 14
|
|
6016
|
+
[3, 145, 115, 1, 146, 116],
|
|
6017
|
+
[4, 64, 40, 5, 65, 41],
|
|
6018
|
+
[11, 36, 16, 5, 37, 17],
|
|
6019
|
+
[11, 36, 12, 5, 37, 13],
|
|
6020
|
+
// 15
|
|
6021
|
+
[5, 109, 87, 1, 110, 88],
|
|
6022
|
+
[5, 65, 41, 5, 66, 42],
|
|
6023
|
+
[5, 54, 24, 7, 55, 25],
|
|
6024
|
+
[11, 36, 12, 7, 37, 13],
|
|
6025
|
+
// 16
|
|
6026
|
+
[5, 122, 98, 1, 123, 99],
|
|
6027
|
+
[7, 73, 45, 3, 74, 46],
|
|
6028
|
+
[15, 43, 19, 2, 44, 20],
|
|
6029
|
+
[3, 45, 15, 13, 46, 16],
|
|
6030
|
+
// 17
|
|
6031
|
+
[1, 135, 107, 5, 136, 108],
|
|
6032
|
+
[10, 74, 46, 1, 75, 47],
|
|
6033
|
+
[1, 50, 22, 15, 51, 23],
|
|
6034
|
+
[2, 42, 14, 17, 43, 15],
|
|
6035
|
+
// 18
|
|
6036
|
+
[5, 150, 120, 1, 151, 121],
|
|
6037
|
+
[9, 69, 43, 4, 70, 44],
|
|
6038
|
+
[17, 50, 22, 1, 51, 23],
|
|
6039
|
+
[2, 42, 14, 19, 43, 15],
|
|
6040
|
+
// 19
|
|
6041
|
+
[3, 141, 113, 4, 142, 114],
|
|
6042
|
+
[3, 70, 44, 11, 71, 45],
|
|
6043
|
+
[17, 47, 21, 4, 48, 22],
|
|
6044
|
+
[9, 39, 13, 16, 40, 14],
|
|
6045
|
+
// 20
|
|
6046
|
+
[3, 135, 107, 5, 136, 108],
|
|
6047
|
+
[3, 67, 41, 13, 68, 42],
|
|
6048
|
+
[15, 54, 24, 5, 55, 25],
|
|
6049
|
+
[15, 43, 15, 10, 44, 16],
|
|
6050
|
+
// 21
|
|
6051
|
+
[4, 144, 116, 4, 145, 117],
|
|
6052
|
+
[17, 68, 42],
|
|
6053
|
+
[17, 50, 22, 6, 51, 23],
|
|
6054
|
+
[19, 46, 16, 6, 47, 17],
|
|
6055
|
+
// 22
|
|
6056
|
+
[2, 139, 111, 7, 140, 112],
|
|
6057
|
+
[17, 74, 46],
|
|
6058
|
+
[7, 54, 24, 16, 55, 25],
|
|
6059
|
+
[34, 37, 13],
|
|
6060
|
+
// 23
|
|
6061
|
+
[4, 151, 121, 5, 152, 122],
|
|
6062
|
+
[4, 75, 47, 14, 76, 48],
|
|
6063
|
+
[11, 54, 24, 14, 55, 25],
|
|
6064
|
+
[16, 45, 15, 14, 46, 16],
|
|
6065
|
+
// 24
|
|
6066
|
+
[6, 147, 117, 4, 148, 118],
|
|
6067
|
+
[6, 73, 45, 14, 74, 46],
|
|
6068
|
+
[11, 54, 24, 16, 55, 25],
|
|
6069
|
+
[30, 46, 16, 2, 47, 17],
|
|
6070
|
+
// 25
|
|
6071
|
+
[8, 132, 106, 4, 133, 107],
|
|
6072
|
+
[8, 75, 47, 13, 76, 48],
|
|
6073
|
+
[7, 54, 24, 22, 55, 25],
|
|
6074
|
+
[22, 45, 15, 13, 46, 16],
|
|
6075
|
+
// 26
|
|
6076
|
+
[10, 142, 114, 2, 143, 115],
|
|
6077
|
+
[19, 74, 46, 4, 75, 47],
|
|
6078
|
+
[28, 50, 22, 6, 51, 23],
|
|
6079
|
+
[33, 46, 16, 4, 47, 17],
|
|
6080
|
+
// 27
|
|
6081
|
+
[8, 152, 122, 4, 153, 123],
|
|
6082
|
+
[22, 73, 45, 3, 74, 46],
|
|
6083
|
+
[8, 53, 23, 26, 54, 24],
|
|
6084
|
+
[12, 45, 15, 28, 46, 16],
|
|
6085
|
+
// 28
|
|
6086
|
+
[3, 147, 117, 10, 148, 118],
|
|
6087
|
+
[3, 73, 45, 23, 74, 46],
|
|
6088
|
+
[4, 54, 24, 31, 55, 25],
|
|
6089
|
+
[11, 45, 15, 31, 46, 16],
|
|
6090
|
+
// 29
|
|
6091
|
+
[7, 146, 116, 7, 147, 117],
|
|
6092
|
+
[21, 73, 45, 7, 74, 46],
|
|
6093
|
+
[1, 53, 23, 37, 54, 24],
|
|
6094
|
+
[19, 45, 15, 26, 46, 16],
|
|
6095
|
+
// 30
|
|
6096
|
+
[5, 145, 115, 10, 146, 116],
|
|
6097
|
+
[19, 75, 47, 10, 76, 48],
|
|
6098
|
+
[15, 54, 24, 25, 55, 25],
|
|
6099
|
+
[23, 45, 15, 25, 46, 16],
|
|
6100
|
+
// 31
|
|
6101
|
+
[13, 145, 115, 3, 146, 116],
|
|
6102
|
+
[2, 74, 46, 29, 75, 47],
|
|
6103
|
+
[42, 54, 24, 1, 55, 25],
|
|
6104
|
+
[23, 45, 15, 28, 46, 16],
|
|
6105
|
+
// 32
|
|
6106
|
+
[17, 145, 115],
|
|
6107
|
+
[10, 74, 46, 23, 75, 47],
|
|
6108
|
+
[10, 54, 24, 35, 55, 25],
|
|
6109
|
+
[19, 45, 15, 35, 46, 16],
|
|
6110
|
+
// 33
|
|
6111
|
+
[17, 145, 115, 1, 146, 116],
|
|
6112
|
+
[14, 74, 46, 21, 75, 47],
|
|
6113
|
+
[29, 54, 24, 19, 55, 25],
|
|
6114
|
+
[11, 45, 15, 46, 46, 16],
|
|
6115
|
+
// 34
|
|
6116
|
+
[13, 145, 115, 6, 146, 116],
|
|
6117
|
+
[14, 74, 46, 23, 75, 47],
|
|
6118
|
+
[44, 54, 24, 7, 55, 25],
|
|
6119
|
+
[59, 46, 16, 1, 47, 17],
|
|
6120
|
+
// 35
|
|
6121
|
+
[12, 151, 121, 7, 152, 122],
|
|
6122
|
+
[12, 75, 47, 26, 76, 48],
|
|
6123
|
+
[39, 54, 24, 14, 55, 25],
|
|
6124
|
+
[22, 45, 15, 41, 46, 16],
|
|
6125
|
+
// 36
|
|
6126
|
+
[6, 151, 121, 14, 152, 122],
|
|
6127
|
+
[6, 75, 47, 34, 76, 48],
|
|
6128
|
+
[46, 54, 24, 10, 55, 25],
|
|
6129
|
+
[2, 45, 15, 64, 46, 16],
|
|
6130
|
+
// 37
|
|
6131
|
+
[17, 152, 122, 4, 153, 123],
|
|
6132
|
+
[29, 74, 46, 14, 75, 47],
|
|
6133
|
+
[49, 54, 24, 10, 55, 25],
|
|
6134
|
+
[24, 45, 15, 46, 46, 16],
|
|
6135
|
+
// 38
|
|
6136
|
+
[4, 152, 122, 18, 153, 123],
|
|
6137
|
+
[13, 74, 46, 32, 75, 47],
|
|
6138
|
+
[48, 54, 24, 14, 55, 25],
|
|
6139
|
+
[42, 45, 15, 32, 46, 16],
|
|
6140
|
+
// 39
|
|
6141
|
+
[20, 147, 117, 4, 148, 118],
|
|
6142
|
+
[40, 75, 47, 7, 76, 48],
|
|
6143
|
+
[43, 54, 24, 22, 55, 25],
|
|
6144
|
+
[10, 45, 15, 67, 46, 16],
|
|
6145
|
+
// 40
|
|
6146
|
+
[19, 148, 118, 6, 149, 119],
|
|
6147
|
+
[18, 75, 47, 31, 76, 48],
|
|
6148
|
+
[34, 54, 24, 34, 55, 25],
|
|
6149
|
+
[20, 45, 15, 61, 46, 16]
|
|
6150
|
+
];
|
|
6151
|
+
const qrRSBlock = function(totalCount, dataCount) {
|
|
6152
|
+
const _this2 = {};
|
|
6153
|
+
_this2.totalCount = totalCount;
|
|
6154
|
+
_this2.dataCount = dataCount;
|
|
6155
|
+
return _this2;
|
|
6156
|
+
};
|
|
6157
|
+
const _this = {};
|
|
6158
|
+
const getRsBlockTable = function(typeNumber, errorCorrectionLevel) {
|
|
6159
|
+
switch (errorCorrectionLevel) {
|
|
6160
|
+
case QRErrorCorrectionLevel.L:
|
|
6161
|
+
return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
|
|
6162
|
+
case QRErrorCorrectionLevel.M:
|
|
6163
|
+
return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
|
|
6164
|
+
case QRErrorCorrectionLevel.Q:
|
|
6165
|
+
return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
|
|
6166
|
+
case QRErrorCorrectionLevel.H:
|
|
6167
|
+
return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
|
|
6168
|
+
default:
|
|
6169
|
+
return void 0;
|
|
6170
|
+
}
|
|
6171
|
+
};
|
|
6172
|
+
_this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {
|
|
6173
|
+
const rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);
|
|
6174
|
+
if (typeof rsBlock == "undefined") {
|
|
6175
|
+
throw "bad rs block @ typeNumber:" + typeNumber + "/errorCorrectionLevel:" + errorCorrectionLevel;
|
|
6176
|
+
}
|
|
6177
|
+
const length = rsBlock.length / 3;
|
|
6178
|
+
const list2 = [];
|
|
6179
|
+
for (let i = 0; i < length; i += 1) {
|
|
6180
|
+
const count = rsBlock[i * 3 + 0];
|
|
6181
|
+
const totalCount = rsBlock[i * 3 + 1];
|
|
6182
|
+
const dataCount = rsBlock[i * 3 + 2];
|
|
6183
|
+
for (let j = 0; j < count; j += 1) {
|
|
6184
|
+
list2.push(qrRSBlock(totalCount, dataCount));
|
|
5503
6185
|
}
|
|
5504
|
-
|
|
5505
|
-
|
|
5506
|
-
|
|
5507
|
-
|
|
5508
|
-
|
|
6186
|
+
}
|
|
6187
|
+
return list2;
|
|
6188
|
+
};
|
|
6189
|
+
return _this;
|
|
6190
|
+
}();
|
|
6191
|
+
const qrBitBuffer = function() {
|
|
6192
|
+
const _buffer = [];
|
|
6193
|
+
let _length = 0;
|
|
6194
|
+
const _this = {};
|
|
6195
|
+
_this.getBuffer = function() {
|
|
6196
|
+
return _buffer;
|
|
6197
|
+
};
|
|
6198
|
+
_this.getAt = function(index) {
|
|
6199
|
+
const bufIndex = Math.floor(index / 8);
|
|
6200
|
+
return (_buffer[bufIndex] >>> 7 - index % 8 & 1) == 1;
|
|
6201
|
+
};
|
|
6202
|
+
_this.put = function(num, length) {
|
|
6203
|
+
for (let i = 0; i < length; i += 1) {
|
|
6204
|
+
_this.putBit((num >>> length - i - 1 & 1) == 1);
|
|
6205
|
+
}
|
|
6206
|
+
};
|
|
6207
|
+
_this.getLengthInBits = function() {
|
|
6208
|
+
return _length;
|
|
6209
|
+
};
|
|
6210
|
+
_this.putBit = function(bit) {
|
|
6211
|
+
const bufIndex = Math.floor(_length / 8);
|
|
6212
|
+
if (_buffer.length <= bufIndex) {
|
|
6213
|
+
_buffer.push(0);
|
|
6214
|
+
}
|
|
6215
|
+
if (bit) {
|
|
6216
|
+
_buffer[bufIndex] |= 128 >>> _length % 8;
|
|
6217
|
+
}
|
|
6218
|
+
_length += 1;
|
|
6219
|
+
};
|
|
6220
|
+
return _this;
|
|
6221
|
+
};
|
|
6222
|
+
const qrNumber = function(data) {
|
|
6223
|
+
const _mode = QRMode.MODE_NUMBER;
|
|
6224
|
+
const _data = data;
|
|
6225
|
+
const _this = {};
|
|
6226
|
+
_this.getMode = function() {
|
|
6227
|
+
return _mode;
|
|
6228
|
+
};
|
|
6229
|
+
_this.getLength = function(buffer) {
|
|
6230
|
+
return _data.length;
|
|
6231
|
+
};
|
|
6232
|
+
_this.write = function(buffer) {
|
|
6233
|
+
const data2 = _data;
|
|
6234
|
+
let i = 0;
|
|
6235
|
+
while (i + 2 < data2.length) {
|
|
6236
|
+
buffer.put(strToNum(data2.substring(i, i + 3)), 10);
|
|
6237
|
+
i += 3;
|
|
6238
|
+
}
|
|
6239
|
+
if (i < data2.length) {
|
|
6240
|
+
if (data2.length - i == 1) {
|
|
6241
|
+
buffer.put(strToNum(data2.substring(i, i + 1)), 4);
|
|
6242
|
+
} else if (data2.length - i == 2) {
|
|
6243
|
+
buffer.put(strToNum(data2.substring(i, i + 2)), 7);
|
|
6244
|
+
}
|
|
6245
|
+
}
|
|
6246
|
+
};
|
|
6247
|
+
const strToNum = function(s) {
|
|
6248
|
+
let num = 0;
|
|
6249
|
+
for (let i = 0; i < s.length; i += 1) {
|
|
6250
|
+
num = num * 10 + chatToNum(s.charAt(i));
|
|
6251
|
+
}
|
|
6252
|
+
return num;
|
|
6253
|
+
};
|
|
6254
|
+
const chatToNum = function(c) {
|
|
6255
|
+
if ("0" <= c && c <= "9") {
|
|
6256
|
+
return c.charCodeAt(0) - "0".charCodeAt(0);
|
|
6257
|
+
}
|
|
6258
|
+
throw "illegal char :" + c;
|
|
6259
|
+
};
|
|
6260
|
+
return _this;
|
|
6261
|
+
};
|
|
6262
|
+
const qrAlphaNum = function(data) {
|
|
6263
|
+
const _mode = QRMode.MODE_ALPHA_NUM;
|
|
6264
|
+
const _data = data;
|
|
6265
|
+
const _this = {};
|
|
6266
|
+
_this.getMode = function() {
|
|
6267
|
+
return _mode;
|
|
6268
|
+
};
|
|
6269
|
+
_this.getLength = function(buffer) {
|
|
6270
|
+
return _data.length;
|
|
6271
|
+
};
|
|
6272
|
+
_this.write = function(buffer) {
|
|
6273
|
+
const s = _data;
|
|
6274
|
+
let i = 0;
|
|
6275
|
+
while (i + 1 < s.length) {
|
|
6276
|
+
buffer.put(
|
|
6277
|
+
getCode(s.charAt(i)) * 45 + getCode(s.charAt(i + 1)),
|
|
6278
|
+
11
|
|
6279
|
+
);
|
|
6280
|
+
i += 2;
|
|
6281
|
+
}
|
|
6282
|
+
if (i < s.length) {
|
|
6283
|
+
buffer.put(getCode(s.charAt(i)), 6);
|
|
6284
|
+
}
|
|
6285
|
+
};
|
|
6286
|
+
const getCode = function(c) {
|
|
6287
|
+
if ("0" <= c && c <= "9") {
|
|
6288
|
+
return c.charCodeAt(0) - "0".charCodeAt(0);
|
|
6289
|
+
} else if ("A" <= c && c <= "Z") {
|
|
6290
|
+
return c.charCodeAt(0) - "A".charCodeAt(0) + 10;
|
|
6291
|
+
} else {
|
|
6292
|
+
switch (c) {
|
|
6293
|
+
case " ":
|
|
6294
|
+
return 36;
|
|
6295
|
+
case "$":
|
|
6296
|
+
return 37;
|
|
6297
|
+
case "%":
|
|
6298
|
+
return 38;
|
|
6299
|
+
case "*":
|
|
6300
|
+
return 39;
|
|
6301
|
+
case "+":
|
|
6302
|
+
return 40;
|
|
6303
|
+
case "-":
|
|
6304
|
+
return 41;
|
|
6305
|
+
case ".":
|
|
6306
|
+
return 42;
|
|
6307
|
+
case "/":
|
|
6308
|
+
return 43;
|
|
6309
|
+
case ":":
|
|
6310
|
+
return 44;
|
|
6311
|
+
default:
|
|
6312
|
+
throw "illegal char :" + c;
|
|
6313
|
+
}
|
|
6314
|
+
}
|
|
6315
|
+
};
|
|
6316
|
+
return _this;
|
|
6317
|
+
};
|
|
6318
|
+
const qr8BitByte = function(data) {
|
|
6319
|
+
const _mode = QRMode.MODE_8BIT_BYTE;
|
|
6320
|
+
const _bytes = qrcode.stringToBytes(data);
|
|
6321
|
+
const _this = {};
|
|
6322
|
+
_this.getMode = function() {
|
|
6323
|
+
return _mode;
|
|
6324
|
+
};
|
|
6325
|
+
_this.getLength = function(buffer) {
|
|
6326
|
+
return _bytes.length;
|
|
6327
|
+
};
|
|
6328
|
+
_this.write = function(buffer) {
|
|
6329
|
+
for (let i = 0; i < _bytes.length; i += 1) {
|
|
6330
|
+
buffer.put(_bytes[i], 8);
|
|
6331
|
+
}
|
|
6332
|
+
};
|
|
6333
|
+
return _this;
|
|
6334
|
+
};
|
|
6335
|
+
const qrKanji = function(data) {
|
|
6336
|
+
const _mode = QRMode.MODE_KANJI;
|
|
6337
|
+
const stringToBytes = qrcode.stringToBytes;
|
|
6338
|
+
!function(c, code2) {
|
|
6339
|
+
const test = stringToBytes(c);
|
|
6340
|
+
if (test.length != 2 || (test[0] << 8 | test[1]) != code2) {
|
|
6341
|
+
throw "sjis not supported.";
|
|
6342
|
+
}
|
|
6343
|
+
}("友", 38726);
|
|
6344
|
+
const _bytes = stringToBytes(data);
|
|
6345
|
+
const _this = {};
|
|
6346
|
+
_this.getMode = function() {
|
|
6347
|
+
return _mode;
|
|
6348
|
+
};
|
|
6349
|
+
_this.getLength = function(buffer) {
|
|
6350
|
+
return ~~(_bytes.length / 2);
|
|
6351
|
+
};
|
|
6352
|
+
_this.write = function(buffer) {
|
|
6353
|
+
const data2 = _bytes;
|
|
6354
|
+
let i = 0;
|
|
6355
|
+
while (i + 1 < data2.length) {
|
|
6356
|
+
let c = (255 & data2[i]) << 8 | 255 & data2[i + 1];
|
|
6357
|
+
if (33088 <= c && c <= 40956) {
|
|
6358
|
+
c -= 33088;
|
|
6359
|
+
} else if (57408 <= c && c <= 60351) {
|
|
6360
|
+
c -= 49472;
|
|
6361
|
+
} else {
|
|
6362
|
+
throw "illegal char at " + (i + 1) + "/" + c;
|
|
6363
|
+
}
|
|
6364
|
+
c = (c >>> 8 & 255) * 192 + (c & 255);
|
|
6365
|
+
buffer.put(c, 13);
|
|
6366
|
+
i += 2;
|
|
6367
|
+
}
|
|
6368
|
+
if (i < data2.length) {
|
|
6369
|
+
throw "illegal char at " + (i + 1);
|
|
6370
|
+
}
|
|
6371
|
+
};
|
|
6372
|
+
return _this;
|
|
6373
|
+
};
|
|
6374
|
+
const byteArrayOutputStream = function() {
|
|
6375
|
+
const _bytes = [];
|
|
6376
|
+
const _this = {};
|
|
6377
|
+
_this.writeByte = function(b) {
|
|
6378
|
+
_bytes.push(b & 255);
|
|
6379
|
+
};
|
|
6380
|
+
_this.writeShort = function(i) {
|
|
6381
|
+
_this.writeByte(i);
|
|
6382
|
+
_this.writeByte(i >>> 8);
|
|
6383
|
+
};
|
|
6384
|
+
_this.writeBytes = function(b, off, len) {
|
|
6385
|
+
off = off || 0;
|
|
6386
|
+
len = len || b.length;
|
|
6387
|
+
for (let i = 0; i < len; i += 1) {
|
|
6388
|
+
_this.writeByte(b[i + off]);
|
|
6389
|
+
}
|
|
6390
|
+
};
|
|
6391
|
+
_this.writeString = function(s) {
|
|
6392
|
+
for (let i = 0; i < s.length; i += 1) {
|
|
6393
|
+
_this.writeByte(s.charCodeAt(i));
|
|
6394
|
+
}
|
|
6395
|
+
};
|
|
6396
|
+
_this.toByteArray = function() {
|
|
6397
|
+
return _bytes;
|
|
6398
|
+
};
|
|
6399
|
+
_this.toString = function() {
|
|
6400
|
+
let s = "";
|
|
6401
|
+
s += "[";
|
|
6402
|
+
for (let i = 0; i < _bytes.length; i += 1) {
|
|
6403
|
+
if (i > 0) {
|
|
6404
|
+
s += ",";
|
|
6405
|
+
}
|
|
6406
|
+
s += _bytes[i];
|
|
6407
|
+
}
|
|
6408
|
+
s += "]";
|
|
6409
|
+
return s;
|
|
6410
|
+
};
|
|
6411
|
+
return _this;
|
|
6412
|
+
};
|
|
6413
|
+
const base64EncodeOutputStream = function() {
|
|
6414
|
+
let _buffer = 0;
|
|
6415
|
+
let _buflen = 0;
|
|
6416
|
+
let _length = 0;
|
|
6417
|
+
let _base64 = "";
|
|
6418
|
+
const _this = {};
|
|
6419
|
+
const writeEncoded = function(b) {
|
|
6420
|
+
_base64 += String.fromCharCode(encode(b & 63));
|
|
6421
|
+
};
|
|
6422
|
+
const encode = function(n) {
|
|
6423
|
+
if (n < 0) {
|
|
6424
|
+
throw "n:" + n;
|
|
6425
|
+
} else if (n < 26) {
|
|
6426
|
+
return 65 + n;
|
|
6427
|
+
} else if (n < 52) {
|
|
6428
|
+
return 97 + (n - 26);
|
|
6429
|
+
} else if (n < 62) {
|
|
6430
|
+
return 48 + (n - 52);
|
|
6431
|
+
} else if (n == 62) {
|
|
6432
|
+
return 43;
|
|
6433
|
+
} else if (n == 63) {
|
|
6434
|
+
return 47;
|
|
6435
|
+
} else {
|
|
6436
|
+
throw "n:" + n;
|
|
6437
|
+
}
|
|
6438
|
+
};
|
|
6439
|
+
_this.writeByte = function(n) {
|
|
6440
|
+
_buffer = _buffer << 8 | n & 255;
|
|
6441
|
+
_buflen += 8;
|
|
6442
|
+
_length += 1;
|
|
6443
|
+
while (_buflen >= 6) {
|
|
6444
|
+
writeEncoded(_buffer >>> _buflen - 6);
|
|
6445
|
+
_buflen -= 6;
|
|
6446
|
+
}
|
|
6447
|
+
};
|
|
6448
|
+
_this.flush = function() {
|
|
6449
|
+
if (_buflen > 0) {
|
|
6450
|
+
writeEncoded(_buffer << 6 - _buflen);
|
|
6451
|
+
_buffer = 0;
|
|
6452
|
+
_buflen = 0;
|
|
6453
|
+
}
|
|
6454
|
+
if (_length % 3 != 0) {
|
|
6455
|
+
const padlen = 3 - _length % 3;
|
|
6456
|
+
for (let i = 0; i < padlen; i += 1) {
|
|
6457
|
+
_base64 += "=";
|
|
6458
|
+
}
|
|
6459
|
+
}
|
|
6460
|
+
};
|
|
6461
|
+
_this.toString = function() {
|
|
6462
|
+
return _base64;
|
|
6463
|
+
};
|
|
6464
|
+
return _this;
|
|
6465
|
+
};
|
|
6466
|
+
const base64DecodeInputStream = function(str) {
|
|
6467
|
+
const _str = str;
|
|
6468
|
+
let _pos = 0;
|
|
6469
|
+
let _buffer = 0;
|
|
6470
|
+
let _buflen = 0;
|
|
6471
|
+
const _this = {};
|
|
6472
|
+
_this.read = function() {
|
|
6473
|
+
while (_buflen < 8) {
|
|
6474
|
+
if (_pos >= _str.length) {
|
|
6475
|
+
if (_buflen == 0) {
|
|
6476
|
+
return -1;
|
|
5509
6477
|
}
|
|
6478
|
+
throw "unexpected end of file./" + _buflen;
|
|
6479
|
+
}
|
|
6480
|
+
const c = _str.charAt(_pos);
|
|
6481
|
+
_pos += 1;
|
|
6482
|
+
if (c == "=") {
|
|
6483
|
+
_buflen = 0;
|
|
6484
|
+
return -1;
|
|
6485
|
+
} else if (c.match(/^\s$/)) {
|
|
6486
|
+
continue;
|
|
6487
|
+
}
|
|
6488
|
+
_buffer = _buffer << 6 | decode(c.charCodeAt(0));
|
|
6489
|
+
_buflen += 6;
|
|
6490
|
+
}
|
|
6491
|
+
const n = _buffer >>> _buflen - 8 & 255;
|
|
6492
|
+
_buflen -= 8;
|
|
6493
|
+
return n;
|
|
6494
|
+
};
|
|
6495
|
+
const decode = function(c) {
|
|
6496
|
+
if (65 <= c && c <= 90) {
|
|
6497
|
+
return c - 65;
|
|
6498
|
+
} else if (97 <= c && c <= 122) {
|
|
6499
|
+
return c - 97 + 26;
|
|
6500
|
+
} else if (48 <= c && c <= 57) {
|
|
6501
|
+
return c - 48 + 52;
|
|
6502
|
+
} else if (c == 43) {
|
|
6503
|
+
return 62;
|
|
6504
|
+
} else if (c == 47) {
|
|
6505
|
+
return 63;
|
|
6506
|
+
} else {
|
|
6507
|
+
throw "c:" + c;
|
|
6508
|
+
}
|
|
6509
|
+
};
|
|
6510
|
+
return _this;
|
|
6511
|
+
};
|
|
6512
|
+
const gifImage = function(width, height) {
|
|
6513
|
+
const _width = width;
|
|
6514
|
+
const _height = height;
|
|
6515
|
+
const _data = new Array(width * height);
|
|
6516
|
+
const _this = {};
|
|
6517
|
+
_this.setPixel = function(x, y, pixel) {
|
|
6518
|
+
_data[y * _width + x] = pixel;
|
|
6519
|
+
};
|
|
6520
|
+
_this.write = function(out) {
|
|
6521
|
+
out.writeString("GIF87a");
|
|
6522
|
+
out.writeShort(_width);
|
|
6523
|
+
out.writeShort(_height);
|
|
6524
|
+
out.writeByte(128);
|
|
6525
|
+
out.writeByte(0);
|
|
6526
|
+
out.writeByte(0);
|
|
6527
|
+
out.writeByte(0);
|
|
6528
|
+
out.writeByte(0);
|
|
6529
|
+
out.writeByte(0);
|
|
6530
|
+
out.writeByte(255);
|
|
6531
|
+
out.writeByte(255);
|
|
6532
|
+
out.writeByte(255);
|
|
6533
|
+
out.writeString(",");
|
|
6534
|
+
out.writeShort(0);
|
|
6535
|
+
out.writeShort(0);
|
|
6536
|
+
out.writeShort(_width);
|
|
6537
|
+
out.writeShort(_height);
|
|
6538
|
+
out.writeByte(0);
|
|
6539
|
+
const lzwMinCodeSize = 2;
|
|
6540
|
+
const raster = getLZWRaster(lzwMinCodeSize);
|
|
6541
|
+
out.writeByte(lzwMinCodeSize);
|
|
6542
|
+
let offset = 0;
|
|
6543
|
+
while (raster.length - offset > 255) {
|
|
6544
|
+
out.writeByte(255);
|
|
6545
|
+
out.writeBytes(raster, offset, 255);
|
|
6546
|
+
offset += 255;
|
|
6547
|
+
}
|
|
6548
|
+
out.writeByte(raster.length - offset);
|
|
6549
|
+
out.writeBytes(raster, offset, raster.length - offset);
|
|
6550
|
+
out.writeByte(0);
|
|
6551
|
+
out.writeString(";");
|
|
6552
|
+
};
|
|
6553
|
+
const bitOutputStream = function(out) {
|
|
6554
|
+
const _out = out;
|
|
6555
|
+
let _bitLength = 0;
|
|
6556
|
+
let _bitBuffer = 0;
|
|
6557
|
+
const _this2 = {};
|
|
6558
|
+
_this2.write = function(data, length) {
|
|
6559
|
+
if (data >>> length != 0) {
|
|
6560
|
+
throw "length over";
|
|
6561
|
+
}
|
|
6562
|
+
while (_bitLength + length >= 8) {
|
|
6563
|
+
_out.writeByte(255 & (data << _bitLength | _bitBuffer));
|
|
6564
|
+
length -= 8 - _bitLength;
|
|
6565
|
+
data >>>= 8 - _bitLength;
|
|
6566
|
+
_bitBuffer = 0;
|
|
6567
|
+
_bitLength = 0;
|
|
6568
|
+
}
|
|
6569
|
+
_bitBuffer = data << _bitLength | _bitBuffer;
|
|
6570
|
+
_bitLength = _bitLength + length;
|
|
6571
|
+
};
|
|
6572
|
+
_this2.flush = function() {
|
|
6573
|
+
if (_bitLength > 0) {
|
|
6574
|
+
_out.writeByte(_bitBuffer);
|
|
6575
|
+
}
|
|
6576
|
+
};
|
|
6577
|
+
return _this2;
|
|
6578
|
+
};
|
|
6579
|
+
const getLZWRaster = function(lzwMinCodeSize) {
|
|
6580
|
+
const clearCode = 1 << lzwMinCodeSize;
|
|
6581
|
+
const endCode = (1 << lzwMinCodeSize) + 1;
|
|
6582
|
+
let bitLength = lzwMinCodeSize + 1;
|
|
6583
|
+
const table = lzwTable();
|
|
6584
|
+
for (let i = 0; i < clearCode; i += 1) {
|
|
6585
|
+
table.add(String.fromCharCode(i));
|
|
6586
|
+
}
|
|
6587
|
+
table.add(String.fromCharCode(clearCode));
|
|
6588
|
+
table.add(String.fromCharCode(endCode));
|
|
6589
|
+
const byteOut = byteArrayOutputStream();
|
|
6590
|
+
const bitOut = bitOutputStream(byteOut);
|
|
6591
|
+
bitOut.write(clearCode, bitLength);
|
|
6592
|
+
let dataIndex = 0;
|
|
6593
|
+
let s = String.fromCharCode(_data[dataIndex]);
|
|
6594
|
+
dataIndex += 1;
|
|
6595
|
+
while (dataIndex < _data.length) {
|
|
6596
|
+
const c = String.fromCharCode(_data[dataIndex]);
|
|
6597
|
+
dataIndex += 1;
|
|
6598
|
+
if (table.contains(s + c)) {
|
|
6599
|
+
s = s + c;
|
|
6600
|
+
} else {
|
|
6601
|
+
bitOut.write(table.indexOf(s), bitLength);
|
|
6602
|
+
if (table.size() < 4095) {
|
|
6603
|
+
if (table.size() == 1 << bitLength) {
|
|
6604
|
+
bitLength += 1;
|
|
6605
|
+
}
|
|
6606
|
+
table.add(s + c);
|
|
6607
|
+
}
|
|
6608
|
+
s = c;
|
|
5510
6609
|
}
|
|
5511
|
-
return { modules: result, moduleCount: size };
|
|
5512
6610
|
}
|
|
6611
|
+
bitOut.write(table.indexOf(s), bitLength);
|
|
6612
|
+
bitOut.write(endCode, bitLength);
|
|
6613
|
+
bitOut.flush();
|
|
6614
|
+
return byteOut.toByteArray();
|
|
6615
|
+
};
|
|
6616
|
+
const lzwTable = function() {
|
|
6617
|
+
const _map = {};
|
|
6618
|
+
let _size = 0;
|
|
6619
|
+
const _this2 = {};
|
|
6620
|
+
_this2.add = function(key) {
|
|
6621
|
+
if (_this2.contains(key)) {
|
|
6622
|
+
throw "dup key:" + key;
|
|
6623
|
+
}
|
|
6624
|
+
_map[key] = _size;
|
|
6625
|
+
_size += 1;
|
|
6626
|
+
};
|
|
6627
|
+
_this2.size = function() {
|
|
6628
|
+
return _size;
|
|
6629
|
+
};
|
|
6630
|
+
_this2.indexOf = function(key) {
|
|
6631
|
+
return _map[key];
|
|
6632
|
+
};
|
|
6633
|
+
_this2.contains = function(key) {
|
|
6634
|
+
return typeof _map[key] != "undefined";
|
|
6635
|
+
};
|
|
6636
|
+
return _this2;
|
|
6637
|
+
};
|
|
6638
|
+
return _this;
|
|
6639
|
+
};
|
|
6640
|
+
const createDataURL = function(width, height, getPixel) {
|
|
6641
|
+
const gif = gifImage(width, height);
|
|
6642
|
+
for (let y = 0; y < height; y += 1) {
|
|
6643
|
+
for (let x = 0; x < width; x += 1) {
|
|
6644
|
+
gif.setPixel(x, y, getPixel(x, y));
|
|
6645
|
+
}
|
|
6646
|
+
}
|
|
6647
|
+
const b = byteArrayOutputStream();
|
|
6648
|
+
gif.write(b);
|
|
6649
|
+
const base64 = base64EncodeOutputStream();
|
|
6650
|
+
const bytes = b.toByteArray();
|
|
6651
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
6652
|
+
base64.writeByte(bytes[i]);
|
|
6653
|
+
}
|
|
6654
|
+
base64.flush();
|
|
6655
|
+
return "data:image/gif;base64," + base64;
|
|
6656
|
+
};
|
|
6657
|
+
qrcode.stringToBytes;
|
|
6658
|
+
const __default__$1 = {
|
|
6659
|
+
options: {
|
|
6660
|
+
virtualHost: true,
|
|
6661
|
+
styleIsolation: "shared"
|
|
6662
|
+
}
|
|
6663
|
+
};
|
|
6664
|
+
const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
6665
|
+
...__default__$1,
|
|
6666
|
+
__name: "u-qrcode",
|
|
6667
|
+
props: {
|
|
6668
|
+
value: { default: "" },
|
|
6669
|
+
size: { default: 200 },
|
|
6670
|
+
color: { default: "#000000" },
|
|
6671
|
+
bgColor: { default: "#ffffff" },
|
|
6672
|
+
errorCorrectLevel: { default: "M" }
|
|
6673
|
+
},
|
|
6674
|
+
setup(__props) {
|
|
6675
|
+
const props = __props;
|
|
6676
|
+
const modules = vue.ref([]);
|
|
6677
|
+
const moduleCount = vue.ref(0);
|
|
6678
|
+
const cellSize = vue.computed(() => {
|
|
6679
|
+
if (moduleCount.value === 0) return 0;
|
|
6680
|
+
return props.size / moduleCount.value;
|
|
6681
|
+
});
|
|
5513
6682
|
const generate = () => {
|
|
5514
6683
|
if (!props.value) {
|
|
5515
6684
|
modules.value = [];
|
|
@@ -5517,9 +6686,19 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
5517
6686
|
return;
|
|
5518
6687
|
}
|
|
5519
6688
|
try {
|
|
5520
|
-
const qr =
|
|
5521
|
-
|
|
5522
|
-
|
|
6689
|
+
const qr = qrcode(0, props.errorCorrectLevel);
|
|
6690
|
+
qr.addData(props.value);
|
|
6691
|
+
qr.make();
|
|
6692
|
+
const count = qr.getModuleCount();
|
|
6693
|
+
moduleCount.value = count;
|
|
6694
|
+
const result = [];
|
|
6695
|
+
for (let row = 0; row < count; row++) {
|
|
6696
|
+
result[row] = [];
|
|
6697
|
+
for (let col = 0; col < count; col++) {
|
|
6698
|
+
result[row][col] = qr.isDark(row, col);
|
|
6699
|
+
}
|
|
6700
|
+
}
|
|
6701
|
+
modules.value = result;
|
|
5523
6702
|
} catch (e) {
|
|
5524
6703
|
console.error("QR Code generation failed:", e);
|
|
5525
6704
|
modules.value = [];
|
|
@@ -5561,7 +6740,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
5561
6740
|
};
|
|
5562
6741
|
}
|
|
5563
6742
|
});
|
|
5564
|
-
const uQrcode = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-
|
|
6743
|
+
const uQrcode = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-135fd2d5"]]);
|
|
5565
6744
|
const _hoisted_1 = { class: "u-barcode" };
|
|
5566
6745
|
const _hoisted_2 = ["canvas-id"];
|
|
5567
6746
|
const _hoisted_3 = ["src"];
|