diff --git a/packages/common/src/qrcode.ts b/packages/common/src/qrcode.ts
index d27fa82f..c5a11466 100644
--- a/packages/common/src/qrcode.ts
+++ b/packages/common/src/qrcode.ts
@@ -1,53 +1,72 @@
//---------------------------------------------------------------------
-//
-// QR Code Generator for JavaScript
+// QRCode for JavaScript
//
// Copyright (c) 2009 Kazuhiko Arase
//
// URL: http://www.d-project.com/
//
// Licensed under the MIT license:
-// http://www.opensource.org/licenses/mit-license.php
+// http://www.opensource.org/licenses/mit-license.php
//
-// The word 'QR Code' is registered trademark of
+// The word "QR Code" is registered trademark of
// DENSO WAVE INCORPORATED
-// http://www.denso-wave.com/qrcode/faqpatent-e.html
+// http://www.denso-wave.com/qrcode/faqpatent-e.html
//
//---------------------------------------------------------------------
+//---------------------------------------------------------------------
+// QR8bitByte
+//---------------------------------------------------------------------
+
+class QR8bitByte {
+ mode: number
+ data: any
+ constructor(data) {
+ this.mode = QRMode.MODE_8BIT_BYTE
+ this.data = data
+ }
+ getLength(buffer) {
+ return this.data.length
+ }
+ write(buffer) {
+ for (var i = 0; i < this.data.length; i++) {
+ // not JIS ...
+ buffer.put(this.data.charCodeAt(i), 8)
+ }
+ }
+}
+
//---------------------------------------------------------------------
// QRCode
//---------------------------------------------------------------------
+
export class QRCode {
- public static PAD0 = 0xEC
- public static PAD1 = 0x11
-
- private _typeNumber = 1
- private _errorCorrectionLevel = QRErrorCorrectionLevel.L
- private _modules = null
- private _moduleCount = 0
- private _dataCache = null
- private _dataList = []
-
- /**
- * @param typeNumber 1 to 40
- * @param errorCorrectionLevel 'L','M','Q','H'
- */
- constructor(typeNumber: number, errorCorrectionLevel: QRErrorCorrectionLevel) {
- this._typeNumber = typeNumber
- this._errorCorrectionLevel = errorCorrectionLevel
+ static PAD0 = 0xEC
+ static PAD1 = 0x11
+ typeNumber: any
+ errorCorrectLevel: any
+ modules: any
+ moduleCount: number
+ dataCache: any
+ dataList: any[]
+ constructor(typeNumber, errorCorrectLevel: QRErrorCorrectLevel) {
+ this.typeNumber = typeNumber
+ this.errorCorrectLevel = errorCorrectLevel
+ this.modules = null
+ this.moduleCount = 0
+ this.dataCache = null
+ this.dataList = new Array()
}
+ static createData(typeNumber, errorCorrectLevel, dataList) {
- static createData(typeNumber: number, errorCorrectionLevel: QRErrorCorrectionLevel, dataList: any[]) {
-
- var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel)
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel)
var buffer = new QRBitBuffer()
for (var i = 0; i < dataList.length; i++) {
var data = dataList[i]
- buffer.put(data.getMode(), 4)
- buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber))
+ buffer.put(data.mode, 4)
+ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber))
data.write(buffer)
}
@@ -58,11 +77,11 @@ export class QRCode {
}
if (buffer.getLengthInBits() > totalDataCount * 8) {
- throw 'code length overflow. ('
- + buffer.getLengthInBits()
- + '>'
- + totalDataCount * 8
- + ')'
+ throw new Error("code length overflow. ("
+ + buffer.getLengthInBits()
+ + ">"
+ + totalDataCount * 8
+ + ")")
}
// end code
@@ -91,7 +110,7 @@ export class QRCode {
return QRCode.createBytes(buffer, rsBlocks)
}
- static createBytes(buffer: QRBitBuffer, rsBlocks: any[]) {
+ static createBytes(buffer, rsBlocks) {
var offset = 0
@@ -112,7 +131,7 @@ export class QRCode {
dcdata[r] = new Array(dcCount)
for (var i = 0; i < dcdata[r].length; i++) {
- dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset]
+ dcdata[r][i] = 0xff & buffer.buffer[i + offset]
}
offset += dcCount
@@ -123,8 +142,9 @@ export class QRCode {
ecdata[r] = new Array(rsPoly.getLength() - 1)
for (var i = 0; i < ecdata[r].length; i++) {
var modIndex = i + modPoly.getLength() - ecdata[r].length
- ecdata[r][i] = (modIndex >= 0) ? modPoly.getAt(modIndex) : 0
+ ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0
}
+
}
var totalCodeCount = 0
@@ -138,8 +158,7 @@ export class QRCode {
for (var i = 0; i < maxDcCount; i++) {
for (var r = 0; r < rsBlocks.length; r++) {
if (i < dcdata[r].length) {
- data[index] = dcdata[r][i]
- index++
+ data[index++] = dcdata[r][i]
}
}
}
@@ -147,65 +166,106 @@ export class QRCode {
for (var i = 0; i < maxEcCount; i++) {
for (var r = 0; r < rsBlocks.length; r++) {
if (i < ecdata[r].length) {
- data[index] = ecdata[r][i]
- index++
+ data[index++] = ecdata[r][i]
}
}
}
return data
+
+ }
+ addData(data) {
+ var newData = new QR8bitByte(data)
+ this.dataList.push(newData)
+ this.dataCache = null
}
- makeImpl(test: boolean, maskPattern: number) {
+ isDark(row, col) {
+ if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+ throw new Error(row + "," + col)
+ }
+ return this.modules[row][col]
+ }
- this._moduleCount = this._typeNumber * 4 + 17
- this._modules = function (moduleCount) {
- var modules = new Array(moduleCount)
- for (var row = 0; row < moduleCount; row++) {
- modules[row] = new Array(moduleCount)
- for (var col = 0; col < moduleCount; col++) {
- modules[row][col] = null
+ getModuleCount() {
+ return this.moduleCount
+ }
+
+ make() {
+ // Calculate automatically typeNumber if provided is < 1
+ if (this.typeNumber < 1) {
+ var typeNumber = 1
+ for (typeNumber = 1; typeNumber < 40; typeNumber++) {
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel)
+
+ var buffer = new QRBitBuffer()
+ var totalDataCount = 0
+ for (var i = 0; i < rsBlocks.length; i++) {
+ totalDataCount += rsBlocks[i].dataCount
}
+
+ for (var i = 0; i < this.dataList.length; i++) {
+ var data = this.dataList[i]
+ buffer.put(data.mode, 4)
+ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber))
+ data.write(buffer)
+ }
+ if (buffer.getLengthInBits() <= totalDataCount * 8)
+ break
}
- return modules
- }(this._moduleCount)
+ this.typeNumber = typeNumber
+ }
+ this.makeImpl(false, this.getBestMaskPattern())
+ }
+
+ makeImpl(test, maskPattern) {
+
+ this.moduleCount = this.typeNumber * 4 + 17
+ this.modules = new Array(this.moduleCount)
+
+ for (var row = 0; row < this.moduleCount; row++) {
+
+ this.modules[row] = new Array(this.moduleCount)
+
+ for (var col = 0; col < this.moduleCount; col++) {
+ this.modules[row][col] = null//(col + row) % 3;
+ }
+ }
this.setupPositionProbePattern(0, 0)
- this.setupPositionProbePattern(this._moduleCount - 7, 0)
- this.setupPositionProbePattern(0, this._moduleCount - 7)
+ this.setupPositionProbePattern(this.moduleCount - 7, 0)
+ this.setupPositionProbePattern(0, this.moduleCount - 7)
this.setupPositionAdjustPattern()
this.setupTimingPattern()
this.setupTypeInfo(test, maskPattern)
- if (this._typeNumber >= 7) {
+ if (this.typeNumber >= 7) {
this.setupTypeNumber(test)
}
- if (this._dataCache == null) {
- this._dataCache = QRCode.createData(this._typeNumber, this._errorCorrectionLevel, this._dataList)
+ if (this.dataCache == null) {
+ this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList)
}
- this.mapData(this._dataCache, maskPattern)
+ this.mapData(this.dataCache, maskPattern)
}
- setupPositionProbePattern(row: number, col: number) {
+ setupPositionProbePattern(row, col) {
for (var r = -1; r <= 7; r++) {
- if (row + r <= -1 || this._moduleCount <= row + r)
- continue
+ if (row + r <= -1 || this.moduleCount <= row + r) continue
for (var c = -1; c <= 7; c++) {
- if (col + c <= -1 || this._moduleCount <= col + c)
- continue
+ if (col + c <= -1 || this.moduleCount <= col + c) continue
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)) {
- this._modules[row + r][col + c] = true
+ this.modules[row + r][col + c] = true
} else {
- this._modules[row + r][col + c] = false
+ this.modules[row + r][col + c] = false
}
}
}
@@ -231,26 +291,56 @@ export class QRCode {
return pattern
}
- setupTimingPattern() {
+ createMovieClip(target_mc, instance_name, depth) {
- for (var r = 8; r < this._moduleCount - 8; r++) {
- if (this._modules[r][6] != null) {
- continue
+ var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth)
+ var cs = 1
+
+ this.make()
+
+ for (var row = 0; row < this.modules.length; row++) {
+
+ var y = row * cs
+
+ for (var col = 0; col < this.modules[row].length; col++) {
+
+ var x = col * cs
+ var dark = this.modules[row][col]
+
+ if (dark) {
+ qr_mc.beginFill(0, 100)
+ qr_mc.moveTo(x, y)
+ qr_mc.lineTo(x + cs, y)
+ qr_mc.lineTo(x + cs, y + cs)
+ qr_mc.lineTo(x, y + cs)
+ qr_mc.endFill()
+ }
}
- this._modules[r][6] = (r % 2 == 0)
}
- for (var c = 8; c < this._moduleCount - 8; c++) {
- if (this._modules[6][c] != null) {
+ return qr_mc
+ }
+
+ setupTimingPattern() {
+
+ for (var r = 8; r < this.moduleCount - 8; r++) {
+ if (this.modules[r][6] != null) {
continue
}
- this._modules[6][c] = (c % 2 == 0)
+ this.modules[r][6] = (r % 2 == 0)
+ }
+
+ for (var c = 8; c < this.moduleCount - 8; c++) {
+ if (this.modules[6][c] != null) {
+ continue
+ }
+ this.modules[6][c] = (c % 2 == 0)
}
}
setupPositionAdjustPattern() {
- var pos = QRUtil.getPatternPosition(this._typeNumber)
+ var pos = QRUtil.getPatternPosition(this.typeNumber)
for (var i = 0; i < pos.length; i++) {
@@ -259,7 +349,7 @@ export class QRCode {
var row = pos[i]
var col = pos[j]
- if (this._modules[row][col] != null) {
+ if (this.modules[row][col] != null) {
continue
}
@@ -269,10 +359,9 @@ export class QRCode {
if (r == -2 || r == 2 || c == -2 || c == 2
|| (r == 0 && c == 0)) {
- this._modules[row + r][col + c] = true
- }
- else {
- this._modules[row + r][col + c] = false
+ this.modules[row + r][col + c] = true
+ } else {
+ this.modules[row + r][col + c] = false
}
}
}
@@ -280,39 +369,37 @@ export class QRCode {
}
}
- setupTypeNumber(test: any) {
+ setupTypeNumber(test) {
- var bits = QRUtil.getBCHTypeNumber(this._typeNumber)
+ var bits = QRUtil.getBCHTypeNumber(this.typeNumber)
for (var i = 0; i < 18; i++) {
var mod = (!test && ((bits >> i) & 1) == 1)
- this._modules[Math.floor(i / 3)][i % 3 + this._moduleCount - 8 - 3] = mod
+ this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod
}
for (var i = 0; i < 18; i++) {
var mod = (!test && ((bits >> i) & 1) == 1)
- this._modules[i % 3 + this._moduleCount - 8 - 3][Math.floor(i / 3)] = mod
+ this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod
}
}
- setupTypeInfo(test: any, maskPattern: number) {
+ setupTypeInfo(test, maskPattern) {
- var data = (this._errorCorrectionLevel << 3) | maskPattern
+ var data = (this.errorCorrectLevel << 3) | maskPattern
var bits = QRUtil.getBCHTypeInfo(data)
- // vertical
+ // vertical
for (var i = 0; i < 15; i++) {
var mod = (!test && ((bits >> i) & 1) == 1)
if (i < 6) {
- this._modules[i][8] = mod
- }
- else if (i < 8) {
- this._modules[i + 1][8] = mod
- }
- else {
- this._modules[this._moduleCount - 15 + i][8] = mod
+ this.modules[i][8] = mod
+ } else if (i < 8) {
+ this.modules[i + 1][8] = mod
+ } else {
+ this.modules[this.moduleCount - 15 + i][8] = mod
}
}
@@ -322,38 +409,35 @@ export class QRCode {
var mod = (!test && ((bits >> i) & 1) == 1)
if (i < 8) {
- this._modules[8][this._moduleCount - i - 1] = mod
- }
- else if (i < 9) {
- this._modules[8][15 - i - 1 + 1] = mod
- }
- else {
- this._modules[8][15 - i - 1] = mod
+ this.modules[8][this.moduleCount - i - 1] = mod
+ } else if (i < 9) {
+ this.modules[8][15 - i - 1 + 1] = mod
+ } else {
+ this.modules[8][15 - i - 1] = mod
}
}
// fixed module
- this._modules[this._moduleCount - 8][8] = (!test)
+ this.modules[this.moduleCount - 8][8] = (!test)
+
}
- mapData(data: string | any[], maskPattern: any) {
+ mapData(data, maskPattern) {
var inc = -1
- var row = this._moduleCount - 1
+ var row = this.moduleCount - 1
var bitIndex = 7
var byteIndex = 0
- var maskFunc = QRUtil.getMaskFunction(maskPattern)
- for (var col = this._moduleCount - 1; col > 0; col -= 2) {
+ for (var col = this.moduleCount - 1; col > 0; col -= 2) {
- if (col == 6)
- col -= 1
+ if (col == 6) col--
while (true) {
for (var c = 0; c < 2; c++) {
- if (this._modules[row][col - c] == null) {
+ if (this.modules[row][col - c] == null) {
var dark = false
@@ -361,14 +445,14 @@ export class QRCode {
dark = (((data[byteIndex] >>> bitIndex) & 1) == 1)
}
- var mask = maskFunc(row, col - c)
+ var mask = QRUtil.getMask(maskPattern, row, col - c)
if (mask) {
dark = !dark
}
- this._modules[row][col - c] = dark
- bitIndex -= 1
+ this.modules[row][col - c] = dark
+ bitIndex--
if (bitIndex == -1) {
byteIndex++
@@ -379,460 +463,37 @@ export class QRCode {
row += inc
- if (row < 0 || this._moduleCount <= row) {
+ if (row < 0 || this.moduleCount <= row) {
row -= inc
inc = -inc
break
}
}
}
+
}
-
- addData(data: any, mode: string) {
-
- mode = mode || 'Byte'
-
- var newData = null
-
- switch (mode) {
- // case 'Numeric':
- // newData = qrNumber(data)
- // break
- // case 'Alphanumeric':
- // newData = qrAlphaNum(data)
- // break
- case 'Byte':
- newData = new qr8BitByte(data)
- break
- // case 'Kanji':
- // newData = qrKanji(data)
- // break
- default:
- throw 'mode:' + mode
- }
-
- this._dataList.push(newData)
- this._dataCache = null
- }
-
- isDark(row: string | number, col: string | number) {
- if (row < 0 || this._moduleCount <= row || col < 0 || this._moduleCount <= col) {
- throw row + ',' + col
- }
- return this._modules[row][col]
- }
-
- getModuleCount() {
- return this._moduleCount
- }
-
- make() {
- if (this._typeNumber < 1) {
- var typeNumber = 1
-
- for (; typeNumber < 40; typeNumber++) {
- var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this._errorCorrectionLevel)
- var buffer = new QRBitBuffer()
-
- for (var i = 0; i < this._dataList.length; i++) {
- var data = this._dataList[i]
- buffer.put(data.getMode(), 4)
- buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber))
- data.write(buffer)
- }
-
- var totalDataCount = 0
- for (var i = 0; i < rsBlocks.length; i++) {
- totalDataCount += rsBlocks[i].dataCount
- }
-
- if (buffer.getLengthInBits() <= totalDataCount * 8) {
- break
- }
- }
-
- this._typeNumber = typeNumber
- }
-
- this.makeImpl(false, this.getBestMaskPattern())
- }
-
- createTableTag(cellSize: number = 2, margin: number = cellSize * 4) {
- var qrHtml = ''
-
- qrHtml += '
'
- qrHtml += ''
-
- for (var r = 0; r < this.getModuleCount(); r++) {
-
- qrHtml += ''
-
- for (var c = 0; c < this.getModuleCount(); c++) {
- qrHtml += ' | '
- }
-
- qrHtml += '
'
- }
-
- qrHtml += ''
- qrHtml += '
'
-
- return qrHtml
- }
-
- createSvgTag(cellSize: number = 2, margin: number = cellSize * 4, alt: any, title: any) {
-
- var opts: any = {}
- if (typeof arguments[0] == 'object') {
- // Called by options.
- opts = arguments[0]
- // overwrite cellSize and margin.
- cellSize = opts.cellSize
- margin = opts.margin
- alt = opts.alt
- title = opts.title
- }
-
- // Compose alt property surrogate
- alt = (typeof alt === 'string') ? { text: alt } : alt || {}
- alt.text = alt.text || null
- alt.id = (alt.text) ? alt.id || 'qrcode-description' : null
-
- // Compose title property surrogate
- title = (typeof title === 'string') ? { text: title } : title || {}
- title.text = title.text || null
- title.id = (title.text) ? title.id || 'qrcode-title' : null
-
- var size = this.getModuleCount() * cellSize + margin * 2
- var c: number, mc: number, r: number, mr: number, qrSvg = '', rect: string
-
- rect = 'l' + cellSize + ',0 0,' + cellSize +
- ' -' + cellSize + ',0 0,-' + cellSize + 'z '
-
- qrSvg += ''
-
- return qrSvg
- }
-
- // createDataURL(cellSize, margin) {
-
- // cellSize = cellSize || 2
- // margin = (typeof margin == 'undefined') ? cellSize * 4 : margin
-
- // var size = this.getModuleCount() * cellSize + margin * 2
- // var min = margin
- // var max = size - margin
-
- // return createDataURL(size, size, (x, y) => {
- // if (min <= x && x < max && min <= y && y < max) {
- // var c = Math.floor((x - min) / cellSize)
- // var r = Math.floor((y - min) / cellSize)
- // return this.isDark(r, c) ? 0 : 1
- // } else {
- // return 1
- // }
- // })
- // }
-
- // createImgTag(cellSize, margin, alt) {
-
- // cellSize = cellSize || 2
- // margin = (typeof margin == 'undefined') ? cellSize * 4 : margin
-
- // var size = this.getModuleCount() * cellSize + margin * 2
-
- // var img = ''
- // img += ''
-
- // return img
- // }
-
- escapeXml(s: string) {
- var escaped = ''
- for (var i = 0; i < s.length; i++) {
- var c = s.charAt(i)
- switch (c) {
- case '<': escaped += '<'; break
- case '>': escaped += '>'; break
- case '&': escaped += '&'; break
- case '"': escaped += '"'; break
- default: escaped += c; break
- }
- }
- return escaped
- }
-
- _createHalfASCII(margin: number) {
- var cellSize = 1
- margin = (typeof margin == 'undefined') ? cellSize * 2 : margin
-
- var size = this.getModuleCount() * cellSize + margin * 2
- var min = margin
- var max = size - margin
-
- var y: number, x: number, r1: number, r2: number, p: string
-
- var blocks = {
- '██': '█',
- '█ ': '▀',
- ' █': '▄',
- ' ': ' '
- }
-
- var blocksLastLineNoMargin = {
- '██': '▀',
- '█ ': '▀',
- ' █': ' ',
- ' ': ' '
- }
-
- var ascii = ''
- for (y = 0; y < size; y += 2) {
- r1 = Math.floor((y - min) / cellSize)
- r2 = Math.floor((y + 1 - min) / cellSize)
- for (x = 0; x < size; x++) {
- p = '█'
-
- if (min <= x && x < max && min <= y && y < max && this.isDark(r1, Math.floor((x - min) / cellSize))) {
- p = ' '
- }
-
- if (min <= x && x < max && min <= y + 1 && y + 1 < max && this.isDark(r2, Math.floor((x - min) / cellSize))) {
- p += ' '
- }
- else {
- p += '█'
- }
-
- // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.
- ascii += (margin < 1 && y + 1 >= max) ? blocksLastLineNoMargin[p] : blocks[p]
- }
-
- ascii += '\n'
- }
-
- if (size % 2 && margin > 0) {
- return ascii.substring(0, ascii.length - size - 1) + Array(size + 1).join('▀')
- }
-
- return ascii.substring(0, ascii.length - 1)
- }
-
- createASCII(cellSize: number, margin: number) {
- cellSize = cellSize || 1
-
- if (cellSize < 2) {
- return this._createHalfASCII(margin)
- }
-
- cellSize -= 1
- margin = (typeof margin == 'undefined') ? cellSize * 2 : margin
-
- var size = this.getModuleCount() * cellSize + margin * 2
- var min = margin
- var max = size - margin
-
- var y: number, x: number, r: number, p: number
-
- var white = Array(cellSize + 1).join('██')
- var black = Array(cellSize + 1).join(' ')
-
- var ascii = ''
- var line = ''
- for (y = 0; y < size; y++) {
- r = Math.floor((y - min) / cellSize)
- line = ''
- for (x = 0; x < size; x++) {
- p = 1
-
- if (min <= x && x < max && min <= y && y < max && this.isDark(r, Math.floor((x - min) / cellSize))) {
- p = 0
- }
-
- // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.
- line += p ? white : black
- }
-
- for (r = 0; r < cellSize; r++) {
- ascii += line + '\n'
- }
- }
-
- return ascii.substring(0, ascii.length - 1)
- }
-
- renderTo2dContext(context: { fillStyle: string; fillRect: (arg0: number, arg1: number, arg2: any, arg3: any) => void }, cellSize: number) {
- cellSize = cellSize || 2
- var length = this.getModuleCount()
- for (var row = 0; row < length; row++) {
- for (var col = 0; col < length; col++) {
- context.fillStyle = this.isDark(row, col) ? 'black' : 'white'
- context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize)
- }
- }
- }
-
- // //---------------------------------------------------------------------
- // // qrcode.createStringToBytes
- // //---------------------------------------------------------------------
- // /**
- // * @param unicodeData base64 string of byte array.
- // * [16bit Unicode],[16bit Bytes], ...
- // * @param numChars
- // */
- // static createStringToBytes(unicodeData, numChars) {
- // // create conversion map.
-
- // var unicodeMap = function () {
-
- // var bin = base64DecodeInputStream(unicodeData)
- // var read = function () {
- // var b = bin.read()
- // if (b == -1)
- // throw 'eof'
- // return b
- // }
-
- // var count = 0
- // var unicodeMap = {}
- // while (true) {
- // var b0 = bin.read()
- // if (b0 == -1)
- // break
- // var b1 = read()
- // var b2 = read()
- // var b3 = read()
- // var k = String.fromCharCode((b0 << 8) | b1)
- // var v = (b2 << 8) | b3
- // unicodeMap[k] = v
- // count++
- // }
- // if (count != numChars) {
- // throw count + ' != ' + numChars
- // }
-
- // return unicodeMap
- // }()
-
- // var unknownChar = '?'.charCodeAt(0)
-
- // return function (s) {
- // var bytes = []
- // for (var i = 0; i < s.length; i++) {
- // var c = s.charCodeAt(i)
- // if (c < 128) {
- // bytes.push(c)
- // }
- // else {
- // var b = unicodeMap[s.charAt(i)]
- // if (typeof b == 'number') {
- // if ((b & 0xff) == b) {
- // // 1byte
- // bytes.push(b)
- // }
- // else {
- // // 2bytes
- // bytes.push(b >>> 8)
- // bytes.push(b & 0xff)
- // }
- // }
- // else {
- // bytes.push(unknownChar)
- // }
- // }
- // }
- // return bytes
- // }
- // }
-
- // //---------------------------------------------------------------------
- // // qrcode.stringToBytes
- // //---------------------------------------------------------------------
-
- // static stringToBytesFuncs = {
- // 'default': function (s) {
- // var bytes = []
- // for (var i = 0; i < s.length; i++) {
- // var c = s.charCodeAt(i)
- // bytes.push(c & 0xff)
- // }
- // return bytes
- // }
- // }
- // static stringToBytes = QRCode.stringToBytesFuncs['default']
}
+
+
//---------------------------------------------------------------------
// QRMode
//---------------------------------------------------------------------
-var QRMode = {
- MODE_NUMBER: 1 << 0,
- MODE_ALPHA_NUM: 1 << 1,
- MODE_8BIT_BYTE: 1 << 2,
- MODE_KANJI: 1 << 3
+export enum QRMode {
+ MODE_NUMBER = 1 << 0,
+ MODE_ALPHA_NUM = 1 << 1,
+ MODE_8BIT_BYTE = 1 << 2,
+ MODE_KANJI = 1 << 3
}
//---------------------------------------------------------------------
-// QRErrorCorrectionLevel
+// QRErrorCorrectLevel
//---------------------------------------------------------------------
-export enum QRErrorCorrectionLevel {
+export enum QRErrorCorrectLevel {
L = 1,
M = 0,
Q = 3,
@@ -843,24 +504,24 @@ export enum QRErrorCorrectionLevel {
// QRMaskPattern
//---------------------------------------------------------------------
-export enum QRMaskPattern {
- PATTERN000 = 0,
- PATTERN001 = 1,
- PATTERN010 = 2,
- PATTERN011 = 3,
- PATTERN100 = 4,
- PATTERN101 = 5,
- PATTERN110 = 6,
- PATTERN111 = 7
+var QRMaskPattern = {
+ PATTERN000: 0,
+ PATTERN001: 1,
+ PATTERN010: 2,
+ PATTERN011: 3,
+ PATTERN100: 4,
+ PATTERN101: 5,
+ PATTERN110: 6,
+ PATTERN111: 7
}
//---------------------------------------------------------------------
// QRUtil
//---------------------------------------------------------------------
-export class QRUtil {
+var QRUtil = {
- static PATTERN_POSITION_TABLE = [
+ PATTERN_POSITION_TABLE: [
[],
[6, 18],
[6, 22],
@@ -901,74 +562,74 @@ export class QRUtil {
[6, 32, 58, 84, 110, 136, 162],
[6, 26, 54, 82, 110, 138, 166],
[6, 30, 58, 86, 114, 142, 170]
- ]
- static G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
- static G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
- static G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
+ ],
- static getBCHDigit(data: number) {
- var digit = 0
- while (data != 0) {
- digit++
- data >>>= 1
- }
- return digit
- }
+ G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
+ G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
+ G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
- static getBCHTypeInfo(data: number) {
+ getBCHTypeInfo: function (data) {
var d = data << 10
while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)))
}
return ((data << 10) | d) ^ QRUtil.G15_MASK
- }
+ },
- static getBCHTypeNumber(data: number) {
+ getBCHTypeNumber: function (data) {
var d = data << 12
while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)))
}
return (data << 12) | d
- }
+ },
- static getPatternPosition(typeNumber: number) {
+ getBCHDigit: function (data) {
+
+ var digit = 0
+
+ while (data != 0) {
+ digit++
+ data >>>= 1
+ }
+
+ return digit
+ },
+
+ getPatternPosition: function (typeNumber) {
return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]
- }
+ },
- static getMaskFunction(maskPattern: number) {
+ getMask: function (maskPattern, i, j) {
switch (maskPattern) {
- case QRMaskPattern.PATTERN000:
- return function (i: any, j: any) { return (i + j) % 2 == 0 }
- case QRMaskPattern.PATTERN001:
- return function (i: number, j: any) { return i % 2 == 0 }
- case QRMaskPattern.PATTERN010:
- return function (i: any, j: number) { return j % 3 == 0 }
- case QRMaskPattern.PATTERN011:
- return function (i: any, j: any) { return (i + j) % 3 == 0 }
- case QRMaskPattern.PATTERN100:
- return function (i: number, j: number) { return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0 }
- case QRMaskPattern.PATTERN101:
- return function (i: number, j: number) { return (i * j) % 2 + (i * j) % 3 == 0 }
- case QRMaskPattern.PATTERN110:
- return function (i: number, j: number) { return ((i * j) % 2 + (i * j) % 3) % 2 == 0 }
- case QRMaskPattern.PATTERN111:
- return function (i: number, j: number) { return ((i * j) % 3 + (i + j) % 2) % 2 == 0 }
+
+ case QRMaskPattern.PATTERN000: return (i + j) % 2 == 0
+ case QRMaskPattern.PATTERN001: return i % 2 == 0
+ case QRMaskPattern.PATTERN010: return j % 3 == 0
+ case QRMaskPattern.PATTERN011: return (i + j) % 3 == 0
+ case QRMaskPattern.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0
+ case QRMaskPattern.PATTERN101: return (i * j) % 2 + (i * j) % 3 == 0
+ case QRMaskPattern.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 == 0
+ case QRMaskPattern.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 == 0
default:
- throw 'bad maskPattern:' + maskPattern
+ throw new Error("bad maskPattern:" + maskPattern)
}
- }
+ },
+
+ getErrorCorrectPolynomial: function (errorCorrectLength) {
- static getErrorCorrectPolynomial(errorCorrectLength: number) {
var a = new QRPolynomial([1], 0)
+
for (var i = 0; i < errorCorrectLength; i++) {
a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0))
}
- return a
- }
- static getLengthInBits(mode: number, type: string | number) {
+ return a
+ },
+
+ getLengthInBits: function (mode, type) {
if (1 <= type && type < 10) {
@@ -980,7 +641,7 @@ export class QRUtil {
case QRMode.MODE_8BIT_BYTE: return 8
case QRMode.MODE_KANJI: return 8
default:
- throw 'mode:' + mode
+ throw new Error("mode:" + mode)
}
} else if (type < 27) {
@@ -993,7 +654,7 @@ export class QRUtil {
case QRMode.MODE_8BIT_BYTE: return 16
case QRMode.MODE_KANJI: return 10
default:
- throw 'mode:' + mode
+ throw new Error("mode:" + mode)
}
} else if (type < 41) {
@@ -1006,27 +667,28 @@ export class QRUtil {
case QRMode.MODE_8BIT_BYTE: return 16
case QRMode.MODE_KANJI: return 12
default:
- throw 'mode:' + mode
+ throw new Error("mode:" + mode)
}
} else {
- throw 'type:' + type
+ throw new Error("type:" + type)
}
- }
+ },
- static getLostPoint(qrcode: QRCode) {
+ getLostPoint: function (qrCode) {
- var moduleCount = qrcode.getModuleCount()
+ var moduleCount = qrCode.getModuleCount()
var lostPoint = 0
// LEVEL1
for (var row = 0; row < moduleCount; row++) {
+
for (var col = 0; col < moduleCount; col++) {
var sameCount = 0
- var dark = qrcode.isDark(row, col)
+ var dark = qrCode.isDark(row, col)
for (var r = -1; r <= 1; r++) {
@@ -1044,7 +706,7 @@ export class QRUtil {
continue
}
- if (dark == qrcode.isDark(row + r, col + c)) {
+ if (dark == qrCode.isDark(row + r, col + c)) {
sameCount++
}
}
@@ -1054,17 +716,17 @@ export class QRUtil {
lostPoint += (3 + sameCount - 5)
}
}
- };
+ }
// LEVEL2
for (var row = 0; row < moduleCount - 1; row++) {
for (var col = 0; col < moduleCount - 1; col++) {
var count = 0
- if (qrcode.isDark(row, col)) count++
- if (qrcode.isDark(row + 1, col)) count++
- if (qrcode.isDark(row, col + 1)) count++
- if (qrcode.isDark(row + 1, col + 1)) count++
+ if (qrCode.isDark(row, col)) count++
+ if (qrCode.isDark(row + 1, col)) count++
+ if (qrCode.isDark(row, col + 1)) count++
+ if (qrCode.isDark(row + 1, col + 1)) count++
if (count == 0 || count == 4) {
lostPoint += 3
}
@@ -1075,13 +737,13 @@ export class QRUtil {
for (var row = 0; row < moduleCount; row++) {
for (var col = 0; col < moduleCount - 6; col++) {
- if (qrcode.isDark(row, col)
- && !qrcode.isDark(row, col + 1)
- && qrcode.isDark(row, col + 2)
- && qrcode.isDark(row, col + 3)
- && qrcode.isDark(row, col + 4)
- && !qrcode.isDark(row, col + 5)
- && qrcode.isDark(row, col + 6)) {
+ if (qrCode.isDark(row, col)
+ && !qrCode.isDark(row, col + 1)
+ && qrCode.isDark(row, col + 2)
+ && qrCode.isDark(row, col + 3)
+ && qrCode.isDark(row, col + 4)
+ && !qrCode.isDark(row, col + 5)
+ && qrCode.isDark(row, col + 6)) {
lostPoint += 40
}
}
@@ -1089,13 +751,13 @@ export class QRUtil {
for (var col = 0; col < moduleCount; col++) {
for (var row = 0; row < moduleCount - 6; row++) {
- if (qrcode.isDark(row, col)
- && !qrcode.isDark(row + 1, col)
- && qrcode.isDark(row + 2, col)
- && qrcode.isDark(row + 3, col)
- && qrcode.isDark(row + 4, col)
- && !qrcode.isDark(row + 5, col)
- && qrcode.isDark(row + 6, col)) {
+ if (qrCode.isDark(row, col)
+ && !qrCode.isDark(row + 1, col)
+ && qrCode.isDark(row + 2, col)
+ && qrCode.isDark(row + 3, col)
+ && qrCode.isDark(row + 4, col)
+ && !qrCode.isDark(row + 5, col)
+ && qrCode.isDark(row + 6, col)) {
lostPoint += 40
}
}
@@ -1107,7 +769,7 @@ export class QRUtil {
for (var col = 0; col < moduleCount; col++) {
for (var row = 0; row < moduleCount; row++) {
- if (qrcode.isDark(row, col)) {
+ if (qrCode.isDark(row, col)) {
darkCount++
}
}
@@ -1118,15 +780,17 @@ export class QRUtil {
return lostPoint
}
+
}
+
//---------------------------------------------------------------------
// QRMath
//---------------------------------------------------------------------
var QRMath = {
- glog: function (n: string | number) {
+ glog: function (n) {
if (n < 1) {
throw new Error("glog(" + n + ")")
@@ -1135,7 +799,7 @@ var QRMath = {
return QRMath.LOG_TABLE[n]
},
- gexp: function (n: number) {
+ gexp: function (n) {
while (n < 0) {
n += 255
@@ -1168,361 +832,96 @@ for (var i = 0; i < 255; i++) {
}
//---------------------------------------------------------------------
-// qrPolynomial
+// QRPolynomial
//---------------------------------------------------------------------
class QRPolynomial {
- _num: any[]
- constructor(num: any[], shift: number) {
- if (typeof num.length == 'undefined') {
- throw num.length + '/' + shift
+ num: any[]
+ constructor(num, shift) {
+
+ if (num.length == undefined) {
+ throw new Error(num.length + "/" + shift)
}
var offset = 0
+
while (offset < num.length && num[offset] == 0) {
offset++
}
- this._num = new Array(num.length - offset + shift)
+
+ this.num = new Array(num.length - offset + shift)
for (var i = 0; i < num.length - offset; i++) {
- this._num[i] = num[i + offset]
+ this.num[i] = num[i + offset]
}
}
-
- getAt(index: number) {
- return this._num[index]
+ get(index) {
+ return this.num[index]
}
getLength() {
- return this._num.length
+ return this.num.length
}
- multiply(e: QRPolynomial) {
+ multiply(e) {
+
var num = new Array(this.getLength() + e.getLength() - 1)
for (var i = 0; i < this.getLength(); i++) {
for (var j = 0; j < e.getLength(); j++) {
- num[i + j] ^= QRMath.gexp(QRMath.glog(this.getAt(i)) + QRMath.glog(e.getAt(j)))
+ num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)))
}
}
+
return new QRPolynomial(num, 0)
}
- mod(e: QRPolynomial) {
+ mod(e) {
if (this.getLength() - e.getLength() < 0) {
return this
}
- var ratio = QRMath.glog(this.getAt(0)) - QRMath.glog(e.getAt(0))
+ var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0))
var num = new Array(this.getLength())
+
for (var i = 0; i < this.getLength(); i++) {
- num[i] = this.getAt(i)
+ num[i] = this.get(i)
}
for (var i = 0; i < e.getLength(); i++) {
- num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio)
+ num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio)
}
// recursive call
return new QRPolynomial(num, 0).mod(e)
}
-
}
+
//---------------------------------------------------------------------
// QRRSBlock
//---------------------------------------------------------------------
class QRRSBlock {
- static RS_BLOCK_TABLE = [
-
- // L
- // M
- // Q
- // H
-
- // 1
- [1, 26, 19],
- [1, 26, 16],
- [1, 26, 13],
- [1, 26, 9],
-
- // 2
- [1, 44, 34],
- [1, 44, 28],
- [1, 44, 22],
- [1, 44, 16],
-
- // 3
- [1, 70, 55],
- [1, 70, 44],
- [2, 35, 17],
- [2, 35, 13],
-
- // 4
- // 4
- // 4
- [1, 100, 80],
- [2, 50, 32],
- [2, 50, 24],
- [4, 25, 9],
-
- // 5
- [1, 134, 108],
- [2, 67, 43],
- [2, 33, 15, 2, 34, 16],
- [2, 33, 11, 2, 34, 12],
-
- // 6
- [2, 86, 68],
- [4, 43, 27],
- [4, 43, 19],
- [4, 43, 15],
-
- // 7
- // 7
- // 7
- [2, 98, 78],
- [4, 49, 31],
- [2, 32, 14, 4, 33, 15],
- [4, 39, 13, 1, 40, 14],
-
- // 8
- [2, 121, 97],
- [2, 60, 38, 2, 61, 39],
- [4, 40, 18, 2, 41, 19],
- [4, 40, 14, 2, 41, 15],
-
- // 9
- [2, 146, 116],
- [3, 58, 36, 2, 59, 37],
- [4, 36, 16, 4, 37, 17],
- [4, 36, 12, 4, 37, 13],
-
- // 10
- // 10
- // 10
- [2, 86, 68, 2, 87, 69],
- [4, 69, 43, 1, 70, 44],
- [6, 43, 19, 2, 44, 20],
- [6, 43, 15, 2, 44, 16],
-
- // 11
- [4, 101, 81],
- [1, 80, 50, 4, 81, 51],
- [4, 50, 22, 4, 51, 23],
- [3, 36, 12, 8, 37, 13],
-
- // 12
- [2, 116, 92, 2, 117, 93],
- [6, 58, 36, 2, 59, 37],
- [4, 46, 20, 6, 47, 21],
- [7, 42, 14, 4, 43, 15],
-
- // 13
- [4, 133, 107],
- [8, 59, 37, 1, 60, 38],
- [8, 44, 20, 4, 45, 21],
- [12, 33, 11, 4, 34, 12],
-
- // 14
- [3, 145, 115, 1, 146, 116],
- [4, 64, 40, 5, 65, 41],
- [11, 36, 16, 5, 37, 17],
- [11, 36, 12, 5, 37, 13],
-
- // 15
- [5, 109, 87, 1, 110, 88],
- [5, 65, 41, 5, 66, 42],
- [5, 54, 24, 7, 55, 25],
- [11, 36, 12, 7, 37, 13],
-
- // 16
- [5, 122, 98, 1, 123, 99],
- [7, 73, 45, 3, 74, 46],
- [15, 43, 19, 2, 44, 20],
- [3, 45, 15, 13, 46, 16],
-
- // 17
- [1, 135, 107, 5, 136, 108],
- [10, 74, 46, 1, 75, 47],
- [1, 50, 22, 15, 51, 23],
- [2, 42, 14, 17, 43, 15],
-
- // 18
- [5, 150, 120, 1, 151, 121],
- [9, 69, 43, 4, 70, 44],
- [17, 50, 22, 1, 51, 23],
- [2, 42, 14, 19, 43, 15],
-
- // 19
- [3, 141, 113, 4, 142, 114],
- [3, 70, 44, 11, 71, 45],
- [17, 47, 21, 4, 48, 22],
- [9, 39, 13, 16, 40, 14],
-
- // 20
- [3, 135, 107, 5, 136, 108],
- [3, 67, 41, 13, 68, 42],
- [15, 54, 24, 5, 55, 25],
- [15, 43, 15, 10, 44, 16],
-
- // 21
- [4, 144, 116, 4, 145, 117],
- [17, 68, 42],
- [17, 50, 22, 6, 51, 23],
- [19, 46, 16, 6, 47, 17],
-
- // 22
- [2, 139, 111, 7, 140, 112],
- [17, 74, 46],
- [7, 54, 24, 16, 55, 25],
- [34, 37, 13],
-
- // 23
- [4, 151, 121, 5, 152, 122],
- [4, 75, 47, 14, 76, 48],
- [11, 54, 24, 14, 55, 25],
- [16, 45, 15, 14, 46, 16],
-
- // 24
- [6, 147, 117, 4, 148, 118],
- [6, 73, 45, 14, 74, 46],
- [11, 54, 24, 16, 55, 25],
- [30, 46, 16, 2, 47, 17],
-
- // 25
- [8, 132, 106, 4, 133, 107],
- [8, 75, 47, 13, 76, 48],
- [7, 54, 24, 22, 55, 25],
- [22, 45, 15, 13, 46, 16],
-
- // 26
- [10, 142, 114, 2, 143, 115],
- [19, 74, 46, 4, 75, 47],
- [28, 50, 22, 6, 51, 23],
- [33, 46, 16, 4, 47, 17],
-
- // 27
- [8, 152, 122, 4, 153, 123],
- [22, 73, 45, 3, 74, 46],
- [8, 53, 23, 26, 54, 24],
- [12, 45, 15, 28, 46, 16],
-
- // 28
- [3, 147, 117, 10, 148, 118],
- [3, 73, 45, 23, 74, 46],
- [4, 54, 24, 31, 55, 25],
- [11, 45, 15, 31, 46, 16],
-
- // 29
- [7, 146, 116, 7, 147, 117],
- [21, 73, 45, 7, 74, 46],
- [1, 53, 23, 37, 54, 24],
- [19, 45, 15, 26, 46, 16],
-
- // 30
- [5, 145, 115, 10, 146, 116],
- [19, 75, 47, 10, 76, 48],
- [15, 54, 24, 25, 55, 25],
- [23, 45, 15, 25, 46, 16],
-
- // 31
- [13, 145, 115, 3, 146, 116],
- [2, 74, 46, 29, 75, 47],
- [42, 54, 24, 1, 55, 25],
- [23, 45, 15, 28, 46, 16],
-
- // 32
- [17, 145, 115],
- [10, 74, 46, 23, 75, 47],
- [10, 54, 24, 35, 55, 25],
- [19, 45, 15, 35, 46, 16],
-
- // 33
- [17, 145, 115, 1, 146, 116],
- [14, 74, 46, 21, 75, 47],
- [29, 54, 24, 19, 55, 25],
- [11, 45, 15, 46, 46, 16],
-
- // 34
- [13, 145, 115, 6, 146, 116],
- [14, 74, 46, 23, 75, 47],
- [44, 54, 24, 7, 55, 25],
- [59, 46, 16, 1, 47, 17],
-
- // 35
- [12, 151, 121, 7, 152, 122],
- [12, 75, 47, 26, 76, 48],
- [39, 54, 24, 14, 55, 25],
- [22, 45, 15, 41, 46, 16],
-
- // 36
- [6, 151, 121, 14, 152, 122],
- [6, 75, 47, 34, 76, 48],
- [46, 54, 24, 10, 55, 25],
- [2, 45, 15, 64, 46, 16],
-
- // 37
- [17, 152, 122, 4, 153, 123],
- [29, 74, 46, 14, 75, 47],
- [49, 54, 24, 10, 55, 25],
- [24, 45, 15, 46, 46, 16],
-
- // 38
- [4, 152, 122, 18, 153, 123],
- [13, 74, 46, 32, 75, 47],
- [48, 54, 24, 14, 55, 25],
- [42, 45, 15, 32, 46, 16],
-
- // 39
- [20, 147, 117, 4, 148, 118],
- [40, 75, 47, 7, 76, 48],
- [43, 54, 24, 22, 55, 25],
- [10, 45, 15, 67, 46, 16],
-
- // 40
- [19, 148, 118, 6, 149, 119],
- [18, 75, 47, 31, 76, 48],
- [34, 54, 24, 34, 55, 25],
- [20, 45, 15, 61, 46, 16]
- ]
totalCount: any
dataCount: any
- constructor(totalCount: number, dataCount: number) {
+ static RS_BLOCK_TABLE: any
+ constructor(totalCount, dataCount) {
this.totalCount = totalCount
this.dataCount = dataCount
}
+ static getRSBlocks(typeNumber, errorCorrectLevel) {
- static getRsBlockTable(typeNumber: number, errorCorrectionLevel: any) {
+ var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel)
- switch (errorCorrectionLevel) {
- case QRErrorCorrectionLevel.L:
- return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]
- case QRErrorCorrectionLevel.M:
- return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]
- case QRErrorCorrectionLevel.Q:
- return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]
- case QRErrorCorrectionLevel.H:
- return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]
- default:
- return undefined
- }
- }
-
- static getRSBlocks(typeNumber: number, errorCorrectionLevel: QRErrorCorrectionLevel) {
-
- var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectionLevel)
-
- if (typeof rsBlock == 'undefined') {
- throw 'bad rs block @ typeNumber:' + typeNumber +
- '/errorCorrectionLevel:' + errorCorrectionLevel
+ if (rsBlock == undefined) {
+ throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel)
}
var length = rsBlock.length / 3
- var list = []
+ var list = new Array()
for (var i = 0; i < length; i++) {
@@ -1537,726 +936,308 @@ class QRRSBlock {
return list
}
+ static getRsBlockTable(typeNumber: number, errorCorrectLevel: QRErrorCorrectLevel) {
+ switch (errorCorrectLevel) {
+ case QRErrorCorrectLevel.L:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]
+ case QRErrorCorrectLevel.M:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]
+ case QRErrorCorrectLevel.Q:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]
+ case QRErrorCorrectLevel.H:
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]
+ default:
+ return undefined
+ }
+ }
}
+QRRSBlock.RS_BLOCK_TABLE = [
+ // L
+ // M
+ // Q
+ // H
+
+ // 1
+ [1, 26, 19],
+ [1, 26, 16],
+ [1, 26, 13],
+ [1, 26, 9],
+
+ // 2
+ [1, 44, 34],
+ [1, 44, 28],
+ [1, 44, 22],
+ [1, 44, 16],
+
+ // 3
+ [1, 70, 55],
+ [1, 70, 44],
+ [2, 35, 17],
+ [2, 35, 13],
+
+ // 4
+ [1, 100, 80],
+ [2, 50, 32],
+ [2, 50, 24],
+ [4, 25, 9],
+
+ // 5
+ [1, 134, 108],
+ [2, 67, 43],
+ [2, 33, 15, 2, 34, 16],
+ [2, 33, 11, 2, 34, 12],
+
+ // 6
+ [2, 86, 68],
+ [4, 43, 27],
+ [4, 43, 19],
+ [4, 43, 15],
+
+ // 7
+ [2, 98, 78],
+ [4, 49, 31],
+ [2, 32, 14, 4, 33, 15],
+ [4, 39, 13, 1, 40, 14],
+
+ // 8
+ [2, 121, 97],
+ [2, 60, 38, 2, 61, 39],
+ [4, 40, 18, 2, 41, 19],
+ [4, 40, 14, 2, 41, 15],
+
+ // 9
+ [2, 146, 116],
+ [3, 58, 36, 2, 59, 37],
+ [4, 36, 16, 4, 37, 17],
+ [4, 36, 12, 4, 37, 13],
+
+ // 10
+ [2, 86, 68, 2, 87, 69],
+ [4, 69, 43, 1, 70, 44],
+ [6, 43, 19, 2, 44, 20],
+ [6, 43, 15, 2, 44, 16],
+
+ // 11
+ [4, 101, 81],
+ [1, 80, 50, 4, 81, 51],
+ [4, 50, 22, 4, 51, 23],
+ [3, 36, 12, 8, 37, 13],
+
+ // 12
+ [2, 116, 92, 2, 117, 93],
+ [6, 58, 36, 2, 59, 37],
+ [4, 46, 20, 6, 47, 21],
+ [7, 42, 14, 4, 43, 15],
+
+ // 13
+ [4, 133, 107],
+ [8, 59, 37, 1, 60, 38],
+ [8, 44, 20, 4, 45, 21],
+ [12, 33, 11, 4, 34, 12],
+
+ // 14
+ [3, 145, 115, 1, 146, 116],
+ [4, 64, 40, 5, 65, 41],
+ [11, 36, 16, 5, 37, 17],
+ [11, 36, 12, 5, 37, 13],
+
+ // 15
+ [5, 109, 87, 1, 110, 88],
+ [5, 65, 41, 5, 66, 42],
+ [5, 54, 24, 7, 55, 25],
+ [11, 36, 12],
+
+ // 16
+ [5, 122, 98, 1, 123, 99],
+ [7, 73, 45, 3, 74, 46],
+ [15, 43, 19, 2, 44, 20],
+ [3, 45, 15, 13, 46, 16],
+
+ // 17
+ [1, 135, 107, 5, 136, 108],
+ [10, 74, 46, 1, 75, 47],
+ [1, 50, 22, 15, 51, 23],
+ [2, 42, 14, 17, 43, 15],
+
+ // 18
+ [5, 150, 120, 1, 151, 121],
+ [9, 69, 43, 4, 70, 44],
+ [17, 50, 22, 1, 51, 23],
+ [2, 42, 14, 19, 43, 15],
+
+ // 19
+ [3, 141, 113, 4, 142, 114],
+ [3, 70, 44, 11, 71, 45],
+ [17, 47, 21, 4, 48, 22],
+ [9, 39, 13, 16, 40, 14],
+
+ // 20
+ [3, 135, 107, 5, 136, 108],
+ [3, 67, 41, 13, 68, 42],
+ [15, 54, 24, 5, 55, 25],
+ [15, 43, 15, 10, 44, 16],
+
+ // 21
+ [4, 144, 116, 4, 145, 117],
+ [17, 68, 42],
+ [17, 50, 22, 6, 51, 23],
+ [19, 46, 16, 6, 47, 17],
+
+ // 22
+ [2, 139, 111, 7, 140, 112],
+ [17, 74, 46],
+ [7, 54, 24, 16, 55, 25],
+ [34, 37, 13],
+
+ // 23
+ [4, 151, 121, 5, 152, 122],
+ [4, 75, 47, 14, 76, 48],
+ [11, 54, 24, 14, 55, 25],
+ [16, 45, 15, 14, 46, 16],
+
+ // 24
+ [6, 147, 117, 4, 148, 118],
+ [6, 73, 45, 14, 74, 46],
+ [11, 54, 24, 16, 55, 25],
+ [30, 46, 16, 2, 47, 17],
+
+ // 25
+ [8, 132, 106, 4, 133, 107],
+ [8, 75, 47, 13, 76, 48],
+ [7, 54, 24, 22, 55, 25],
+ [22, 45, 15, 13, 46, 16],
+
+ // 26
+ [10, 142, 114, 2, 143, 115],
+ [19, 74, 46, 4, 75, 47],
+ [28, 50, 22, 6, 51, 23],
+ [33, 46, 16, 4, 47, 17],
+
+ // 27
+ [8, 152, 122, 4, 153, 123],
+ [22, 73, 45, 3, 74, 46],
+ [8, 53, 23, 26, 54, 24],
+ [12, 45, 15, 28, 46, 16],
+
+ // 28
+ [3, 147, 117, 10, 148, 118],
+ [3, 73, 45, 23, 74, 46],
+ [4, 54, 24, 31, 55, 25],
+ [11, 45, 15, 31, 46, 16],
+
+ // 29
+ [7, 146, 116, 7, 147, 117],
+ [21, 73, 45, 7, 74, 46],
+ [1, 53, 23, 37, 54, 24],
+ [19, 45, 15, 26, 46, 16],
+
+ // 30
+ [5, 145, 115, 10, 146, 116],
+ [19, 75, 47, 10, 76, 48],
+ [15, 54, 24, 25, 55, 25],
+ [23, 45, 15, 25, 46, 16],
+
+ // 31
+ [13, 145, 115, 3, 146, 116],
+ [2, 74, 46, 29, 75, 47],
+ [42, 54, 24, 1, 55, 25],
+ [23, 45, 15, 28, 46, 16],
+
+ // 32
+ [17, 145, 115],
+ [10, 74, 46, 23, 75, 47],
+ [10, 54, 24, 35, 55, 25],
+ [19, 45, 15, 35, 46, 16],
+
+ // 33
+ [17, 145, 115, 1, 146, 116],
+ [14, 74, 46, 21, 75, 47],
+ [29, 54, 24, 19, 55, 25],
+ [11, 45, 15, 46, 46, 16],
+
+ // 34
+ [13, 145, 115, 6, 146, 116],
+ [14, 74, 46, 23, 75, 47],
+ [44, 54, 24, 7, 55, 25],
+ [59, 46, 16, 1, 47, 17],
+
+ // 35
+ [12, 151, 121, 7, 152, 122],
+ [12, 75, 47, 26, 76, 48],
+ [39, 54, 24, 14, 55, 25],
+ [22, 45, 15, 41, 46, 16],
+
+ // 36
+ [6, 151, 121, 14, 152, 122],
+ [6, 75, 47, 34, 76, 48],
+ [46, 54, 24, 10, 55, 25],
+ [2, 45, 15, 64, 46, 16],
+
+ // 37
+ [17, 152, 122, 4, 153, 123],
+ [29, 74, 46, 14, 75, 47],
+ [49, 54, 24, 10, 55, 25],
+ [24, 45, 15, 46, 46, 16],
+
+ // 38
+ [4, 152, 122, 18, 153, 123],
+ [13, 74, 46, 32, 75, 47],
+ [48, 54, 24, 14, 55, 25],
+ [42, 45, 15, 32, 46, 16],
+
+ // 39
+ [20, 147, 117, 4, 148, 118],
+ [40, 75, 47, 7, 76, 48],
+ [43, 54, 24, 22, 55, 25],
+ [10, 45, 15, 67, 46, 16],
+
+ // 40
+ [19, 148, 118, 6, 149, 119],
+ [18, 75, 47, 31, 76, 48],
+ [34, 54, 24, 34, 55, 25],
+ [20, 45, 15, 61, 46, 16]
+]
+
+
+
//---------------------------------------------------------------------
-// qrBitBuffer
+// QRBitBuffer
//---------------------------------------------------------------------
class QRBitBuffer {
- private _buffer = []
- private _length = 0
-
- getBuffer() {
- return this._buffer
+ buffer: any[]
+ length: number
+ constructor() {
+ this.buffer = new Array()
+ this.length = 0
}
-
- getAt(index: number) {
+ get(index) {
var bufIndex = Math.floor(index / 8)
- return ((this._buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1
+ return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1
}
- put(num: number, length: number) {
+ put(num, length) {
for (var i = 0; i < length; i++) {
this.putBit(((num >>> (length - i - 1)) & 1) == 1)
}
}
getLengthInBits() {
- return this._length
+ return this.length
}
- putBit(bit: boolean) {
+ putBit(bit) {
- var bufIndex = Math.floor(this._length / 8)
- if (this._buffer.length <= bufIndex) {
- this._buffer.push(0)
+ var bufIndex = Math.floor(this.length / 8)
+ if (this.buffer.length <= bufIndex) {
+ this.buffer.push(0)
}
if (bit) {
- this._buffer[bufIndex] |= (0x80 >>> (this._length % 8))
+ this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))
}
- this._length++
+ this.length++
}
}
-
-// //---------------------------------------------------------------------
-// // qrNumber
-// //---------------------------------------------------------------------
-
-// var qrNumber = function (data) {
-
-// var _mode = QRMode.MODE_NUMBER
-// var _data = data
-
-// var this = {}
-
-// this.getMode = function () {
-// return _mode
-// }
-
-// this.getLength = function (buffer) {
-// return _data.length
-// }
-
-// this.write = function (buffer) {
-
-// var data = _data
-
-// var i = 0
-
-// while (i + 2 < data.length) {
-// buffer.put(strToNum(data.substring(i, i + 3)), 10)
-// i += 3
-// }
-
-// if (i < data.length) {
-// if (data.length - i == 1) {
-// buffer.put(strToNum(data.substring(i, i + 1)), 4)
-// } else if (data.length - i == 2) {
-// buffer.put(strToNum(data.substring(i, i + 2)), 7)
-// }
-// }
-// }
-
-// var strToNum = function (s) {
-// var num = 0
-// for (var i = 0; i < s.length; i++) {
-// num = num * 10 + chatToNum(s.charAt(i))
-// }
-// return num
-// }
-
-// var chatToNum = function (c) {
-// if ('0' <= c && c <= '9') {
-// return c.charCodeAt(0) - '0'.charCodeAt(0)
-// }
-// throw 'illegal char :' + c
-// }
-
-// return this
-// }
-
-// //---------------------------------------------------------------------
-// // qrAlphaNum
-// //---------------------------------------------------------------------
-
-// var qrAlphaNum = function (data) {
-
-// var _mode = QRMode.MODE_ALPHA_NUM
-// var _data = data
-
-// var this = {}
-
-// this.getMode = function () {
-// return _mode
-// }
-
-// this.getLength = function (buffer) {
-// return _data.length
-// }
-
-// this.write = function (buffer) {
-
-// var s = _data
-
-// var i = 0
-
-// while (i + 1 < s.length) {
-// buffer.put(
-// getCode(s.charAt(i)) * 45 +
-// getCode(s.charAt(i + 1)), 11)
-// i += 2
-// }
-
-// if (i < s.length) {
-// buffer.put(getCode(s.charAt(i)), 6)
-// }
-// }
-
-// var getCode = function (c) {
-
-// if ('0' <= c && c <= '9') {
-// return c.charCodeAt(0) - '0'.charCodeAt(0)
-// } else if ('A' <= c && c <= 'Z') {
-// return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10
-// } else {
-// switch (c) {
-// case ' ': return 36
-// case '$': return 37
-// case '%': return 38
-// case '*': return 39
-// case '+': return 40
-// case '-': return 41
-// case '.': return 42
-// case '/': return 43
-// case ':': return 44
-// default:
-// throw 'illegal char :' + c
-// }
-// }
-// }
-
-// return this
-// }
-
-//---------------------------------------------------------------------
-// qr8BitByte
-//---------------------------------------------------------------------
-
-class qr8BitByte {
- private _mode: number
- private _data: any
- private _bytes: string | any[]
-
- constructor(data: any) {
- this._mode = QRMode.MODE_8BIT_BYTE
- this._data = data
- this._bytes = data// QRCode.stringToBytes(data)
- }
- getMode() {
- return this._mode
- }
-
- getLength(buffer: any) {
- return this._bytes.length
- }
-
- write(buffer: { put: (arg0: any, arg1: number) => void }) {
- for (var i = 0; i < this._bytes.length; i++) {
- buffer.put(this._bytes[i], 8)
- }
- }
-}
-
-// //---------------------------------------------------------------------
-// // qrKanji
-// //---------------------------------------------------------------------
-
-// var qrKanji = function (data) {
-
-// var _mode = QRMode.MODE_KANJI
-// var _data = data
-
-// var stringToBytes = QRCode.stringToBytesFuncs['SJIS']
-// if (!stringToBytes) {
-// throw 'sjis not supported.'
-// }
-// !function (c, code) {
-// // self test for sjis support.
-// var test = stringToBytes(c)
-// if (test.length != 2 || ((test[0] << 8) | test[1]) != code) {
-// throw 'sjis not supported.'
-// }
-// }('\u53cb', 0x9746)
-
-// var _bytes = stringToBytes(data)
-
-// var this = {}
-
-// this.getMode = function () {
-// return _mode
-// }
-
-// this.getLength = function (buffer) {
-// return ~~(_bytes.length / 2)
-// }
-
-// this.write = function (buffer) {
-
-// var data = _bytes
-
-// var i = 0
-
-// while (i + 1 < data.length) {
-
-// var c = ((0xff & data[i]) << 8) | (0xff & data[i + 1])
-
-// if (0x8140 <= c && c <= 0x9FFC) {
-// c -= 0x8140
-// } else if (0xE040 <= c && c <= 0xEBBF) {
-// c -= 0xC140
-// } else {
-// throw 'illegal char at ' + (i + 1) + '/' + c
-// }
-
-// c = ((c >>> 8) & 0xff) * 0xC0 + (c & 0xff)
-
-// buffer.put(c, 13)
-
-// i += 2
-// }
-
-// if (i < data.length) {
-// throw 'illegal char at ' + (i + 1)
-// }
-// }
-
-// return this
-// }
-
-// //=====================================================================
-// // GIF Support etc.
-// //
-
-// //---------------------------------------------------------------------
-// // byteArrayOutputStream
-// //---------------------------------------------------------------------
-
-// var byteArrayOutputStream = function () {
-
-// var _bytes = []
-
-// var this = {}
-
-// this.writeByte = function (b) {
-// _bytes.push(b & 0xff)
-// }
-
-// this.writeShort = function (i) {
-// this.writeByte(i)
-// this.writeByte(i >>> 8)
-// }
-
-// this.writeBytes = function (b, off, len) {
-// off = off || 0
-// len = len || b.length
-// for (var i = 0; i < len; i++) {
-// this.writeByte(b[i + off])
-// }
-// }
-
-// this.writeString = function (s) {
-// for (var i = 0; i < s.length; i++) {
-// this.writeByte(s.charCodeAt(i))
-// }
-// }
-
-// this.toByteArray = function () {
-// return _bytes
-// }
-
-// this.toString = function () {
-// var s = ''
-// s += '['
-// for (var i = 0; i < _bytes.length; i++) {
-// if (i > 0) {
-// s += ','
-// }
-// s += _bytes[i]
-// }
-// s += ']'
-// return s
-// }
-
-// return this
-// }
-
-// //---------------------------------------------------------------------
-// // base64EncodeOutputStream
-// //---------------------------------------------------------------------
-
-// var base64EncodeOutputStream = function () {
-
-// var _buffer = 0
-// var _buflen = 0
-// var _length = 0
-// var _base64 = ''
-
-// var this = {}
-
-// var writeEncoded = function (b) {
-// _base64 += String.fromCharCode(encode(b & 0x3f))
-// }
-
-// var encode = function (n) {
-// if (n < 0) {
-// // error.
-// } else if (n < 26) {
-// return 0x41 + n
-// } else if (n < 52) {
-// return 0x61 + (n - 26)
-// } else if (n < 62) {
-// return 0x30 + (n - 52)
-// } else if (n == 62) {
-// return 0x2b
-// } else if (n == 63) {
-// return 0x2f
-// }
-// throw 'n:' + n
-// }
-
-// this.writeByte = function (n) {
-
-// _buffer = (_buffer << 8) | (n & 0xff)
-// _buflen += 8
-// _length++
-
-// while (_buflen >= 6) {
-// writeEncoded(_buffer >>> (_buflen - 6))
-// _buflen -= 6
-// }
-// }
-
-// this.flush = function () {
-
-// if (_buflen > 0) {
-// writeEncoded(_buffer << (6 - _buflen))
-// _buffer = 0
-// _buflen = 0
-// }
-
-// if (_length % 3 != 0) {
-// // padding
-// var padlen = 3 - _length % 3
-// for (var i = 0; i < padlen; i++) {
-// _base64 += '='
-// }
-// }
-// }
-
-// this.toString = function () {
-// return _base64
-// }
-
-// return this
-// }
-
-// //---------------------------------------------------------------------
-// // base64DecodeInputStream
-// //---------------------------------------------------------------------
-
-// var base64DecodeInputStream = function (str) {
-
-// var _str = str
-// var _pos = 0
-// var _buffer = 0
-// var _buflen = 0
-
-// var this = {}
-
-// this.read = function () {
-
-// while (_buflen < 8) {
-
-// if (_pos >= _str.length) {
-// if (_buflen == 0) {
-// return -1
-// }
-// throw 'unexpected end of file./' + _buflen
-// }
-
-// var c = _str.charAt(_pos)
-// _pos++
-
-// if (c == '=') {
-// _buflen = 0
-// return -1
-// } else if (c.match(/^\s$/)) {
-// // ignore if whitespace.
-// continue
-// }
-
-// _buffer = (_buffer << 6) | decode(c.charCodeAt(0))
-// _buflen += 6
-// }
-
-// var n = (_buffer >>> (_buflen - 8)) & 0xff
-// _buflen -= 8
-// return n
-// }
-
-// var decode = function (c) {
-// if (0x41 <= c && c <= 0x5a) {
-// return c - 0x41
-// } else if (0x61 <= c && c <= 0x7a) {
-// return c - 0x61 + 26
-// } else if (0x30 <= c && c <= 0x39) {
-// return c - 0x30 + 52
-// } else if (c == 0x2b) {
-// return 62
-// } else if (c == 0x2f) {
-// return 63
-// } else {
-// throw 'c:' + c
-// }
-// }
-
-// return this
-// }
-
-// //---------------------------------------------------------------------
-// // gifImage (B/W)
-// //---------------------------------------------------------------------
-
-// var gifImage = function (width, height) {
-
-// var _width = width
-// var _height = height
-// var _data = new Array(width * height)
-
-// var this = {}
-
-// this.setPixel = function (x, y, pixel) {
-// _data[y * _width + x] = pixel
-// }
-
-// this.write = function (out) {
-
-// //---------------------------------
-// // GIF Signature
-
-// out.writeString('GIF87a')
-
-// //---------------------------------
-// // Screen Descriptor
-
-// out.writeShort(_width)
-// out.writeShort(_height)
-
-// out.writeByte(0x80) // 2bit
-// out.writeByte(0)
-// out.writeByte(0)
-
-// //---------------------------------
-// // Global Color Map
-
-// // black
-// out.writeByte(0x00)
-// out.writeByte(0x00)
-// out.writeByte(0x00)
-
-// // white
-// out.writeByte(0xff)
-// out.writeByte(0xff)
-// out.writeByte(0xff)
-
-// //---------------------------------
-// // Image Descriptor
-
-// out.writeString(',')
-// out.writeShort(0)
-// out.writeShort(0)
-// out.writeShort(_width)
-// out.writeShort(_height)
-// out.writeByte(0)
-
-// //---------------------------------
-// // Local Color Map
-
-// //---------------------------------
-// // Raster Data
-
-// var lzwMinCodeSize = 2
-// var raster = getLZWRaster(lzwMinCodeSize)
-
-// out.writeByte(lzwMinCodeSize)
-
-// var offset = 0
-
-// while (raster.length - offset > 255) {
-// out.writeByte(255)
-// out.writeBytes(raster, offset, 255)
-// offset += 255
-// }
-
-// out.writeByte(raster.length - offset)
-// out.writeBytes(raster, offset, raster.length - offset)
-// out.writeByte(0x00)
-
-// //---------------------------------
-// // GIF Terminator
-// out.writeString(';')
-// }
-
-// var bitOutputStream = function (out) {
-
-// var _out = out
-// var _bitLength = 0
-// var _bitBuffer = 0
-
-// var this = {}
-
-// this.write = function (data, length) {
-
-// if ((data >>> length) != 0) {
-// throw 'length over'
-// }
-
-// while (_bitLength + length >= 8) {
-// _out.writeByte(0xff & ((data << _bitLength) | _bitBuffer))
-// length -= (8 - _bitLength)
-// data >>>= (8 - _bitLength)
-// _bitBuffer = 0
-// _bitLength = 0
-// }
-
-// _bitBuffer = (data << _bitLength) | _bitBuffer
-// _bitLength = _bitLength + length
-// }
-
-// this.flush = function () {
-// if (_bitLength > 0) {
-// _out.writeByte(_bitBuffer)
-// }
-// }
-
-// return this
-// }
-
-// var getLZWRaster = function (lzwMinCodeSize) {
-
-// var clearCode = 1 << lzwMinCodeSize
-// var endCode = (1 << lzwMinCodeSize) + 1
-// var bitLength = lzwMinCodeSize + 1
-
-// // Setup LZWTable
-// var table = lzwTable()
-
-// for (var i = 0; i < clearCode; i++) {
-// table.add(String.fromCharCode(i))
-// }
-// table.add(String.fromCharCode(clearCode))
-// table.add(String.fromCharCode(endCode))
-
-// var byteOut = byteArrayOutputStream()
-// var bitOut = bitOutputStream(byteOut)
-
-// // clear code
-// bitOut.write(clearCode, bitLength)
-
-// var dataIndex = 0
-
-// var s = String.fromCharCode(_data[dataIndex])
-// dataIndex++
-
-// while (dataIndex < _data.length) {
-
-// var c = String.fromCharCode(_data[dataIndex])
-// dataIndex++
-
-// if (table.contains(s + c)) {
-
-// s = s + c
-
-// } else {
-
-// bitOut.write(table.indexOf(s), bitLength)
-
-// if (table.size() < 0xfff) {
-
-// if (table.size() == (1 << bitLength)) {
-// bitLength++
-// }
-
-// table.add(s + c)
-// }
-
-// s = c
-// }
-// }
-
-// bitOut.write(table.indexOf(s), bitLength)
-
-// // end code
-// bitOut.write(endCode, bitLength)
-
-// bitOut.flush()
-
-// return byteOut.toByteArray()
-// }
-
-// var lzwTable = function () {
-
-// var _map = {}
-// var _size = 0
-
-// var this = {}
-
-// this.add = function (key) {
-// if (this.contains(key)) {
-// throw 'dup key:' + key
-// }
-// _map[key] = _size
-// _size++
-// }
-
-// this.size = function () {
-// return _size
-// }
-
-// this.indexOf = function (key) {
-// return _map[key]
-// }
-
-// this.contains = function (key) {
-// return typeof _map[key] != 'undefined'
-// }
-
-// return this
-// }
-
-// return this
-// }
-
-// var createDataURL = function (width, height, getPixel) {
-// var gif = gifImage(width, height)
-// for (var y = 0; y < height; y++) {
-// for (var x = 0; x < width; x++) {
-// gif.setPixel(x, y, getPixel(x, y))
-// }
-// }
-
-// var b = byteArrayOutputStream()
-// gif.write(b)
-
-// var base64 = base64EncodeOutputStream()
-// var bytes = b.toByteArray()
-// for (var i = 0; i < bytes.length; i++) {
-// base64.writeByte(bytes[i])
-// }
-// base64.flush()
-
-// return 'data:image/gif;base64,' + base64
-// }
-
-// // multibyte support
-// !function () {
-
-// QRCode.stringToBytesFuncs['UTF-8'] = function (s) {
-// // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array
-// function toUTF8Array(str) {
-// var utf8 = []
-// for (var i = 0; i < str.length; i++) {
-// var charcode = str.charCodeAt(i)
-// if (charcode < 0x80) utf8.push(charcode)
-// else if (charcode < 0x800) {
-// utf8.push(0xc0 | (charcode >> 6),
-// 0x80 | (charcode & 0x3f))
-// }
-// else if (charcode < 0xd800 || charcode >= 0xe000) {
-// utf8.push(0xe0 | (charcode >> 12),
-// 0x80 | ((charcode >> 6) & 0x3f),
-// 0x80 | (charcode & 0x3f))
-// }
-// // surrogate pair
-// else {
-// i++
-// // UTF-16 encodes 0x10000-0x10FFFF by
-// // subtracting 0x10000 and splitting the
-// // 20 bits of 0x0-0xFFFFF into two halves
-// charcode = 0x10000 + (((charcode & 0x3ff) << 10)
-// | (str.charCodeAt(i) & 0x3ff))
-// utf8.push(0xf0 | (charcode >> 18),
-// 0x80 | ((charcode >> 12) & 0x3f),
-// 0x80 | ((charcode >> 6) & 0x3f),
-// 0x80 | (charcode & 0x3f))
-// }
-// }
-// return utf8
-// }
-// return toUTF8Array(s)
-// }
-
-// }();