Use const/let instead of var
This commit is contained in:
parent
a5a8563ba4
commit
9cc0e3b78d
71 changed files with 772 additions and 772 deletions
examples
helper
lib
browser.js
test.jscore
alignment-pattern.jsalphanumeric-data.jsbit-buffer.jsbit-matrix.jsbyte-data.jserror-correction-code.jserror-correction-level.jsfinder-pattern.jsformat-info.jsgalois-field.jskanji-data.jsmask-pattern.jsmode.jsnumeric-data.jspolynomial.jsqrcode.jsreed-solomon-encoder.jsregex.jssegments.jsutils.jsversion.js
renderer
server.jstest
e2e
helpers.jsmocks
unit
core
alignment-pattern.test.jsalphanumeric-data.test.jsbit-buffer.test.jsbit-matrix.test.jsbyte-data.test.jserror-correction-code.test.jserror-correction-level.test.jsfinder-pattern.test.jsformat-info.test.jsgalois-field.test.jskanji-data.test.jsmask-pattern.test.jsmode.test.jsnumeric-data.test.jspolynomial.test.jsqrcode.test.jsreed-solomon-encoder.test.jsregex.test.jssegments.test.jsutils.test.jsversion.test.js
helper
renderer
|
@ -1,4 +1,4 @@
|
||||||
var QRCode = require('../lib')
|
const QRCode = require('../lib')
|
||||||
|
|
||||||
QRCode.toString('yo yo yo', function (error, data) {
|
QRCode.toString('yo yo yo', function (error, data) {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
var express = require('express')
|
const express = require('express')
|
||||||
var app = express()// .createServer()
|
const app = express()// .createServer()
|
||||||
var http = require('http')
|
const http = require('http')
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var QRCode = require('../lib')
|
const QRCode = require('../lib')
|
||||||
var canvasutil = require('canvasutil')
|
const canvasutil = require('canvasutil')
|
||||||
var { createCanvas, loadImage } = require('canvas')
|
const { createCanvas, loadImage } = require('canvas')
|
||||||
|
|
||||||
var path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
// app.use(express.methodOverride())
|
// app.use(express.methodOverride())
|
||||||
// app.use(express.bodyParser())
|
// app.use(express.bodyParser())
|
||||||
|
@ -29,12 +29,12 @@ app.get('/', function (req, res) {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
var effectHandlers = {}
|
const effectHandlers = {}
|
||||||
|
|
||||||
app.get('/generate', function (req, res) {
|
app.get('/generate', function (req, res) {
|
||||||
var q = req.query || {}
|
const q = req.query || {}
|
||||||
|
|
||||||
var effect = q.effect || 'plain'
|
let effect = q.effect || 'plain'
|
||||||
if (!effectHandlers[effect]) {
|
if (!effectHandlers[effect]) {
|
||||||
effect = 'plain'
|
effect = 'plain'
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ app.get('/generate', function (req, res) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
var msg = error.message + '\n' + error.stack
|
const msg = error.message + '\n' + error.stack
|
||||||
res.header('Content-Type', 'text/plain')
|
res.header('Content-Type', 'text/plain')
|
||||||
res.send(msg)
|
res.send(msg)
|
||||||
console.error(msg)
|
console.error(msg)
|
||||||
|
@ -72,28 +72,28 @@ effectHandlers.bacon = function (args, cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
effectHandlers.rounded = function (args, cb) {
|
effectHandlers.rounded = function (args, cb) {
|
||||||
var canvas = createCanvas(200, 200)
|
const canvas = createCanvas(200, 200)
|
||||||
QRCode.toCanvas(canvas, args.text || '', function (err) {
|
QRCode.toCanvas(canvas, args.text || '', function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
cb(err, canvas)
|
cb(err, canvas)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var tpx = new canvasutil.PixelCore()
|
const tpx = new canvasutil.PixelCore()
|
||||||
var luma709Only = canvasutil.conversionLib.luma709Only
|
const luma709Only = canvasutil.conversionLib.luma709Only
|
||||||
var up = []
|
const up = []
|
||||||
var down = []
|
const down = []
|
||||||
var left = []
|
const left = []
|
||||||
var right = []
|
const right = []
|
||||||
var upPx
|
let upPx
|
||||||
var downPx
|
let downPx
|
||||||
var leftPx
|
let leftPx
|
||||||
var rightPx
|
let rightPx
|
||||||
var r
|
let r
|
||||||
var t
|
let t
|
||||||
var l
|
let l
|
||||||
var d
|
let d
|
||||||
var corner = 0
|
let corner = 0
|
||||||
|
|
||||||
tpx.threshold = 100
|
tpx.threshold = 100
|
||||||
|
|
||||||
|
@ -166,16 +166,16 @@ effectHandlers.rounded = function (args, cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
effectHandlers.remoteImage = function (args, cb) {
|
effectHandlers.remoteImage = function (args, cb) {
|
||||||
var src = args.src
|
let src = args.src
|
||||||
var domain
|
let domain
|
||||||
var uri
|
let uri
|
||||||
|
|
||||||
if (!src) {
|
if (!src) {
|
||||||
cb(new Error('src required'), null)
|
cb(new Error('src required'), null)
|
||||||
} else {
|
} else {
|
||||||
if (src.indexof('://') !== -1) {
|
if (src.indexof('://') !== -1) {
|
||||||
src = src.split('://').unshift()
|
src = src.split('://').unshift()
|
||||||
var parts = src.split('/')
|
const parts = src.split('/')
|
||||||
|
|
||||||
domain = parts.shift()
|
domain = parts.shift()
|
||||||
uri = parts.join('/')
|
uri = parts.join('/')
|
||||||
|
@ -187,14 +187,14 @@ effectHandlers.remoteImage = function (args, cb) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var options = {
|
const options = {
|
||||||
host: domain,
|
host: domain,
|
||||||
port: 80,
|
port: 80,
|
||||||
path: uri,
|
path: uri,
|
||||||
method: 'GET'
|
method: 'GET'
|
||||||
}
|
}
|
||||||
|
|
||||||
var req = http.request(options, function (res) {
|
const req = http.request(options, function (res) {
|
||||||
if (res.statusCode < 200 || res.statusCode > 299) {
|
if (res.statusCode < 200 || res.statusCode > 299) {
|
||||||
cb(new Error('http ' + res.statusCode + ' response code'), null)
|
cb(new Error('http ' + res.statusCode + ' response code'), null)
|
||||||
return
|
return
|
||||||
|
@ -202,7 +202,7 @@ effectHandlers.remoteImage = function (args, cb) {
|
||||||
|
|
||||||
res.setEncoding('utf8')
|
res.setEncoding('utf8')
|
||||||
|
|
||||||
var data = ''
|
let data = ''
|
||||||
res.on('data', function (chunk) {
|
res.on('data', function (chunk) {
|
||||||
data += chunk
|
data += chunk
|
||||||
console.log('BODY: ' + chunk)
|
console.log('BODY: ' + chunk)
|
||||||
|
@ -223,27 +223,27 @@ effectHandlers.remoteImage = function (args, cb) {
|
||||||
|
|
||||||
effectHandlers.image = function (args, cb) {
|
effectHandlers.image = function (args, cb) {
|
||||||
loadImage(args.src || '').then((img) => {
|
loadImage(args.src || '').then((img) => {
|
||||||
var convert = canvasutil.conversionLib
|
const convert = canvasutil.conversionLib
|
||||||
var canvas = createCanvas(200, 200)
|
const canvas = createCanvas(200, 200)
|
||||||
QRCode.toCanvas(canvas, args.text || '', function (err) {
|
QRCode.toCanvas(canvas, args.text || '', function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
cb(err, false)
|
cb(err, false)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var codeCtx = canvas.getContext('2d')
|
const codeCtx = canvas.getContext('2d')
|
||||||
var frame = codeCtx.getImageData(0, 0, canvas.width, canvas.width)
|
const frame = codeCtx.getImageData(0, 0, canvas.width, canvas.width)
|
||||||
var tpx = new canvasutil.PixelCore()
|
const tpx = new canvasutil.PixelCore()
|
||||||
var baconCanvas = createCanvas(canvas.width, canvas.width)
|
const baconCanvas = createCanvas(canvas.width, canvas.width)
|
||||||
var ctx = baconCanvas.getContext('2d')
|
const ctx = baconCanvas.getContext('2d')
|
||||||
var topThreshold = args.darkThreshold || 25
|
const topThreshold = args.darkThreshold || 25
|
||||||
var bottomThreshold = args.lightThreshold || 75
|
const bottomThreshold = args.lightThreshold || 75
|
||||||
|
|
||||||
tpx.threshold = 50
|
tpx.threshold = 50
|
||||||
|
|
||||||
// scale image
|
// scale image
|
||||||
var w = canvas.width
|
let w = canvas.width
|
||||||
var h = canvas.height
|
let h = canvas.height
|
||||||
|
|
||||||
if (img.width > img.height) {
|
if (img.width > img.height) {
|
||||||
w = w * (canvas.height / h)
|
w = w * (canvas.height / h)
|
||||||
|
@ -256,10 +256,10 @@ effectHandlers.image = function (args, cb) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
tpx.iterate(baconCanvas, function (px, i, l, pixels, w, h, pixelCore) {
|
tpx.iterate(baconCanvas, function (px, i, l, pixels, w, h, pixelCore) {
|
||||||
var luma = (0.2125 * px.r + 0.7154 * px.g + 0.0721 * px.b)
|
const luma = (0.2125 * px.r + 0.7154 * px.g + 0.0721 * px.b)
|
||||||
var codeLuma = convert.luma709Only(frame.data[i * 4], frame.data[i * 4 + 1], frame.data[i * 4 + 2])
|
const codeLuma = convert.luma709Only(frame.data[i * 4], frame.data[i * 4 + 1], frame.data[i * 4 + 2])
|
||||||
var yuv
|
let yuv
|
||||||
var rgb
|
let rgb
|
||||||
|
|
||||||
if (codeLuma > pixelCore.threshold) {
|
if (codeLuma > pixelCore.threshold) {
|
||||||
if (luma < bottomThreshold) {
|
if (luma < bottomThreshold) {
|
||||||
|
@ -296,8 +296,8 @@ effectHandlers.image = function (args, cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
effectHandlers.plain = function (args, cb) {
|
effectHandlers.plain = function (args, cb) {
|
||||||
var canvas = createCanvas(200, 200)
|
const canvas = createCanvas(200, 200)
|
||||||
var text = args.text || ''
|
const text = args.text || ''
|
||||||
QRCode.toCanvas(canvas, text || '', function (err) {
|
QRCode.toCanvas(canvas, text || '', function (err) {
|
||||||
cb(err, canvas)
|
cb(err, canvas)
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
var QRCode = require('../lib')
|
const QRCode = require('../lib')
|
||||||
|
|
||||||
var path = './tmp.png'
|
const path = './tmp.png'
|
||||||
QRCode.toFile(path, 'life of the party bros', {
|
QRCode.toFile(path, 'life of the party bros', {
|
||||||
color: {
|
color: {
|
||||||
dark: '#00F', // Blue modules
|
dark: '#00F', // Blue modules
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
var QRCode = require('../lib')
|
const QRCode = require('../lib')
|
||||||
var http = require('http')
|
const http = require('http')
|
||||||
|
|
||||||
function testQRCode (req, res) {
|
function testQRCode (req, res) {
|
||||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||||
|
|
||||||
var jungleBook = "The moonlight was blocked out of the mouth of the cave, for Shere Khan's\n" +
|
const jungleBook = "The moonlight was blocked out of the mouth of the cave, for Shere Khan's\n" +
|
||||||
'great square head and shoulders were thrust into the entrance. Tabaqui,\n' +
|
'great square head and shoulders were thrust into the entrance. Tabaqui,\n' +
|
||||||
'behind him, was squeaking: "My lord, my lord, it went in here!"\n' +
|
'behind him, was squeaking: "My lord, my lord, it went in here!"\n' +
|
||||||
'\n' +
|
'\n' +
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var SJIS_UTF8 = [
|
const SJIS_UTF8 = [
|
||||||
[0x8140, ' 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×'],
|
[0x8140, ' 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×'],
|
||||||
[0x8180, '÷=≠<>'],
|
[0x8180, '÷=≠<>'],
|
||||||
[0x818f, '¥$¢£%#&*@§☆★'],
|
[0x818f, '¥$¢£%#&*@§☆★'],
|
||||||
|
@ -89,10 +89,10 @@ var SJIS_UTF8 = [
|
||||||
module.exports = function toSJIS (utf8Char) {
|
module.exports = function toSJIS (utf8Char) {
|
||||||
if (!utf8Char || utf8Char === '') return
|
if (!utf8Char || utf8Char === '') return
|
||||||
|
|
||||||
for (var i = 0; i < SJIS_UTF8.length; i++) {
|
for (let i = 0; i < SJIS_UTF8.length; i++) {
|
||||||
var kanji = SJIS_UTF8[i][1]
|
const kanji = SJIS_UTF8[i][1]
|
||||||
|
|
||||||
var posIndex = kanji.indexOf(utf8Char)
|
const posIndex = kanji.indexOf(utf8Char)
|
||||||
if (posIndex >= 0) {
|
if (posIndex >= 0) {
|
||||||
return SJIS_UTF8[i][0] + posIndex
|
return SJIS_UTF8[i][0] + posIndex
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
|
|
||||||
var canPromise = require('./can-promise')
|
const canPromise = require('./can-promise')
|
||||||
|
|
||||||
var QRCode = require('./core/qrcode')
|
const QRCode = require('./core/qrcode')
|
||||||
var CanvasRenderer = require('./renderer/canvas')
|
const CanvasRenderer = require('./renderer/canvas')
|
||||||
var SvgRenderer = require('./renderer/svg-tag.js')
|
const SvgRenderer = require('./renderer/svg-tag.js')
|
||||||
|
|
||||||
function renderCanvas (renderFunc, canvas, text, opts, cb) {
|
function renderCanvas (renderFunc, canvas, text, opts, cb) {
|
||||||
var args = [].slice.call(arguments, 1)
|
const args = [].slice.call(arguments, 1)
|
||||||
var argsNum = args.length
|
const argsNum = args.length
|
||||||
var isLastArgCb = typeof args[argsNum - 1] === 'function'
|
const isLastArgCb = typeof args[argsNum - 1] === 'function'
|
||||||
|
|
||||||
if (!isLastArgCb && !canPromise()) {
|
if (!isLastArgCb && !canPromise()) {
|
||||||
throw new Error('Callback required as last argument')
|
throw new Error('Callback required as last argument')
|
||||||
|
@ -50,7 +50,7 @@ function renderCanvas (renderFunc, canvas, text, opts, cb) {
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
try {
|
try {
|
||||||
var data = QRCode.create(text, opts)
|
const data = QRCode.create(text, opts)
|
||||||
resolve(renderFunc(data, canvas, opts))
|
resolve(renderFunc(data, canvas, opts))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
reject(e)
|
reject(e)
|
||||||
|
@ -59,7 +59,7 @@ function renderCanvas (renderFunc, canvas, text, opts, cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var data = QRCode.create(text, opts)
|
const data = QRCode.create(text, opts)
|
||||||
cb(null, renderFunc(data, canvas, opts))
|
cb(null, renderFunc(data, canvas, opts))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
cb(e)
|
cb(e)
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* and their number depends on the symbol version.
|
* and their number depends on the symbol version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var getSymbolSize = require('./utils').getSymbolSize
|
const getSymbolSize = require('./utils').getSymbolSize
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the row/column coordinates of the center module of each alignment pattern
|
* Calculate the row/column coordinates of the center module of each alignment pattern
|
||||||
|
@ -27,12 +27,12 @@ var getSymbolSize = require('./utils').getSymbolSize
|
||||||
exports.getRowColCoords = function getRowColCoords (version) {
|
exports.getRowColCoords = function getRowColCoords (version) {
|
||||||
if (version === 1) return []
|
if (version === 1) return []
|
||||||
|
|
||||||
var posCount = Math.floor(version / 7) + 2
|
const posCount = Math.floor(version / 7) + 2
|
||||||
var size = getSymbolSize(version)
|
const size = getSymbolSize(version)
|
||||||
var intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
|
const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
|
||||||
var positions = [size - 7] // Last coord is always (size - 7)
|
const positions = [size - 7] // Last coord is always (size - 7)
|
||||||
|
|
||||||
for (var i = 1; i < posCount - 1; i++) {
|
for (let i = 1; i < posCount - 1; i++) {
|
||||||
positions[i] = positions[i - 1] - intervals
|
positions[i] = positions[i - 1] - intervals
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,19 +55,19 @@ exports.getRowColCoords = function getRowColCoords (version) {
|
||||||
* Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns
|
* Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns
|
||||||
* and are not therefore used for alignment patterns.
|
* and are not therefore used for alignment patterns.
|
||||||
*
|
*
|
||||||
* var pos = getPositions(7)
|
* let pos = getPositions(7)
|
||||||
* // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]
|
* // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]
|
||||||
*
|
*
|
||||||
* @param {Number} version QR Code version
|
* @param {Number} version QR Code version
|
||||||
* @return {Array} Array of coordinates
|
* @return {Array} Array of coordinates
|
||||||
*/
|
*/
|
||||||
exports.getPositions = function getPositions (version) {
|
exports.getPositions = function getPositions (version) {
|
||||||
var coords = []
|
const coords = []
|
||||||
var pos = exports.getRowColCoords(version)
|
const pos = exports.getRowColCoords(version)
|
||||||
var posLength = pos.length
|
const posLength = pos.length
|
||||||
|
|
||||||
for (var i = 0; i < posLength; i++) {
|
for (let i = 0; i < posLength; i++) {
|
||||||
for (var j = 0; j < posLength; j++) {
|
for (let j = 0; j < posLength; j++) {
|
||||||
// Skip if position is occupied by finder patterns
|
// Skip if position is occupied by finder patterns
|
||||||
if ((i === 0 && j === 0) || // top-left
|
if ((i === 0 && j === 0) || // top-left
|
||||||
(i === 0 && j === posLength - 1) || // bottom-left
|
(i === 0 && j === posLength - 1) || // bottom-left
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var Mode = require('./mode')
|
const Mode = require('./mode')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array of characters available in alphanumeric mode
|
* Array of characters available in alphanumeric mode
|
||||||
|
@ -9,7 +9,7 @@ var Mode = require('./mode')
|
||||||
*
|
*
|
||||||
* @type {Array}
|
* @type {Array}
|
||||||
*/
|
*/
|
||||||
var ALPHA_NUM_CHARS = [
|
const ALPHA_NUM_CHARS = [
|
||||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
||||||
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
|
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
|
||||||
|
@ -34,13 +34,13 @@ AlphanumericData.prototype.getBitsLength = function getBitsLength () {
|
||||||
}
|
}
|
||||||
|
|
||||||
AlphanumericData.prototype.write = function write (bitBuffer) {
|
AlphanumericData.prototype.write = function write (bitBuffer) {
|
||||||
var i
|
let i
|
||||||
|
|
||||||
// Input data characters are divided into groups of two characters
|
// Input data characters are divided into groups of two characters
|
||||||
// and encoded as 11-bit binary codes.
|
// and encoded as 11-bit binary codes.
|
||||||
for (i = 0; i + 2 <= this.data.length; i += 2) {
|
for (i = 0; i + 2 <= this.data.length; i += 2) {
|
||||||
// The character value of the first character is multiplied by 45
|
// The character value of the first character is multiplied by 45
|
||||||
var value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45
|
let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45
|
||||||
|
|
||||||
// The character value of the second digit is added to the product
|
// The character value of the second digit is added to the product
|
||||||
value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])
|
value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])
|
||||||
|
|
|
@ -6,12 +6,12 @@ function BitBuffer () {
|
||||||
BitBuffer.prototype = {
|
BitBuffer.prototype = {
|
||||||
|
|
||||||
get: function (index) {
|
get: function (index) {
|
||||||
var bufIndex = Math.floor(index / 8)
|
const bufIndex = Math.floor(index / 8)
|
||||||
return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1
|
return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1
|
||||||
},
|
},
|
||||||
|
|
||||||
put: function (num, length) {
|
put: function (num, length) {
|
||||||
for (var i = 0; i < length; i++) {
|
for (let i = 0; i < length; i++) {
|
||||||
this.putBit(((num >>> (length - i - 1)) & 1) === 1)
|
this.putBit(((num >>> (length - i - 1)) & 1) === 1)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -21,7 +21,7 @@ BitBuffer.prototype = {
|
||||||
},
|
},
|
||||||
|
|
||||||
putBit: function (bit) {
|
putBit: function (bit) {
|
||||||
var bufIndex = Math.floor(this.length / 8)
|
const bufIndex = Math.floor(this.length / 8)
|
||||||
if (this.buffer.length <= bufIndex) {
|
if (this.buffer.length <= bufIndex) {
|
||||||
this.buffer.push(0)
|
this.buffer.push(0)
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ function BitMatrix (size) {
|
||||||
* @param {Boolean} reserved
|
* @param {Boolean} reserved
|
||||||
*/
|
*/
|
||||||
BitMatrix.prototype.set = function (row, col, value, reserved) {
|
BitMatrix.prototype.set = function (row, col, value, reserved) {
|
||||||
var index = row * this.size + col
|
const index = row * this.size + col
|
||||||
this.data[index] = value
|
this.data[index] = value
|
||||||
if (reserved) this.reservedBit[index] = true
|
if (reserved) this.reservedBit[index] = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var encodeUtf8 = require('encode-utf8')
|
const encodeUtf8 = require('encode-utf8')
|
||||||
var Mode = require('./mode')
|
const Mode = require('./mode')
|
||||||
|
|
||||||
function ByteData (data) {
|
function ByteData (data) {
|
||||||
this.mode = Mode.BYTE
|
this.mode = Mode.BYTE
|
||||||
|
@ -19,7 +19,7 @@ ByteData.prototype.getBitsLength = function getBitsLength () {
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteData.prototype.write = function (bitBuffer) {
|
ByteData.prototype.write = function (bitBuffer) {
|
||||||
for (var i = 0, l = this.data.length; i < l; i++) {
|
for (let i = 0, l = this.data.length; i < l; i++) {
|
||||||
bitBuffer.put(this.data[i], 8)
|
bitBuffer.put(this.data[i], 8)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
var ECLevel = require('./error-correction-level')
|
const ECLevel = require('./error-correction-level')
|
||||||
|
|
||||||
var EC_BLOCKS_TABLE = [
|
const EC_BLOCKS_TABLE = [
|
||||||
// L M Q H
|
// L M Q H
|
||||||
1, 1, 1, 1,
|
1, 1, 1, 1,
|
||||||
1, 1, 1, 1,
|
1, 1, 1, 1,
|
||||||
|
@ -44,7 +44,7 @@ var EC_BLOCKS_TABLE = [
|
||||||
25, 49, 68, 81
|
25, 49, 68, 81
|
||||||
]
|
]
|
||||||
|
|
||||||
var EC_CODEWORDS_TABLE = [
|
const EC_CODEWORDS_TABLE = [
|
||||||
// L M Q H
|
// L M Q H
|
||||||
7, 10, 13, 17,
|
7, 10, 13, 17,
|
||||||
10, 16, 22, 28,
|
10, 16, 22, 28,
|
||||||
|
|
|
@ -8,7 +8,7 @@ function fromString (string) {
|
||||||
throw new Error('Param is not a string')
|
throw new Error('Param is not a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
var lcStr = string.toLowerCase()
|
const lcStr = string.toLowerCase()
|
||||||
|
|
||||||
switch (lcStr) {
|
switch (lcStr) {
|
||||||
case 'l':
|
case 'l':
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var getSymbolSize = require('./utils').getSymbolSize
|
const getSymbolSize = require('./utils').getSymbolSize
|
||||||
var FINDER_PATTERN_SIZE = 7
|
const FINDER_PATTERN_SIZE = 7
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array containing the positions of each finder pattern.
|
* Returns an array containing the positions of each finder pattern.
|
||||||
|
@ -9,7 +9,7 @@ var FINDER_PATTERN_SIZE = 7
|
||||||
* @return {Array} Array of coordinates
|
* @return {Array} Array of coordinates
|
||||||
*/
|
*/
|
||||||
exports.getPositions = function getPositions (version) {
|
exports.getPositions = function getPositions (version) {
|
||||||
var size = getSymbolSize(version)
|
const size = getSymbolSize(version)
|
||||||
|
|
||||||
return [
|
return [
|
||||||
// top-left
|
// top-left
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
|
|
||||||
var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
|
const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
|
||||||
var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
|
const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
|
||||||
var G15_BCH = Utils.getBCHDigit(G15)
|
const G15_BCH = Utils.getBCHDigit(G15)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns format information with relative error correction bits
|
* Returns format information with relative error correction bits
|
||||||
|
@ -15,8 +15,8 @@ var G15_BCH = Utils.getBCHDigit(G15)
|
||||||
* @return {Number} Encoded format information bits
|
* @return {Number} Encoded format information bits
|
||||||
*/
|
*/
|
||||||
exports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {
|
exports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {
|
||||||
var data = ((errorCorrectionLevel.bit << 3) | mask)
|
const data = ((errorCorrectionLevel.bit << 3) | mask)
|
||||||
var d = data << 10
|
let d = data << 10
|
||||||
|
|
||||||
while (Utils.getBCHDigit(d) - G15_BCH >= 0) {
|
while (Utils.getBCHDigit(d) - G15_BCH >= 0) {
|
||||||
d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))
|
d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var EXP_TABLE = new Uint8Array(512)
|
const EXP_TABLE = new Uint8Array(512)
|
||||||
var LOG_TABLE = new Uint8Array(256)
|
const LOG_TABLE = new Uint8Array(256)
|
||||||
/**
|
/**
|
||||||
* Precompute the log and anti-log tables for faster computation later
|
* Precompute the log and anti-log tables for faster computation later
|
||||||
*
|
*
|
||||||
|
@ -9,8 +9,8 @@ var LOG_TABLE = new Uint8Array(256)
|
||||||
* ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}
|
* ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}
|
||||||
*/
|
*/
|
||||||
;(function initTables () {
|
;(function initTables () {
|
||||||
var x = 1
|
let x = 1
|
||||||
for (var i = 0; i < 255; i++) {
|
for (let i = 0; i < 255; i++) {
|
||||||
EXP_TABLE[i] = x
|
EXP_TABLE[i] = x
|
||||||
LOG_TABLE[x] = i
|
LOG_TABLE[x] = i
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ var LOG_TABLE = new Uint8Array(256)
|
||||||
// stay inside the bounds (because we will mainly use this table for the multiplication of
|
// stay inside the bounds (because we will mainly use this table for the multiplication of
|
||||||
// two GF numbers, no more).
|
// two GF numbers, no more).
|
||||||
// @see {@link mul}
|
// @see {@link mul}
|
||||||
for (i = 255; i < 512; i++) {
|
for (let i = 255; i < 512; i++) {
|
||||||
EXP_TABLE[i] = EXP_TABLE[i - 255]
|
EXP_TABLE[i] = EXP_TABLE[i - 255]
|
||||||
}
|
}
|
||||||
}())
|
}())
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var Mode = require('./mode')
|
const Mode = require('./mode')
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
|
|
||||||
function KanjiData (data) {
|
function KanjiData (data) {
|
||||||
this.mode = Mode.KANJI
|
this.mode = Mode.KANJI
|
||||||
|
@ -19,13 +19,13 @@ KanjiData.prototype.getBitsLength = function getBitsLength () {
|
||||||
}
|
}
|
||||||
|
|
||||||
KanjiData.prototype.write = function (bitBuffer) {
|
KanjiData.prototype.write = function (bitBuffer) {
|
||||||
var i
|
let i
|
||||||
|
|
||||||
// In the Shift JIS system, Kanji characters are represented by a two byte combination.
|
// In the Shift JIS system, Kanji characters are represented by a two byte combination.
|
||||||
// These byte values are shifted from the JIS X 0208 values.
|
// These byte values are shifted from the JIS X 0208 values.
|
||||||
// JIS X 0208 gives details of the shift coded representation.
|
// JIS X 0208 gives details of the shift coded representation.
|
||||||
for (i = 0; i < this.data.length; i++) {
|
for (i = 0; i < this.data.length; i++) {
|
||||||
var value = Utils.toSJIS(this.data[i])
|
let value = Utils.toSJIS(this.data[i])
|
||||||
|
|
||||||
// For characters with Shift JIS values from 0x8140 to 0x9FFC:
|
// For characters with Shift JIS values from 0x8140 to 0x9FFC:
|
||||||
if (value >= 0x8140 && value <= 0x9FFC) {
|
if (value >= 0x8140 && value <= 0x9FFC) {
|
||||||
|
|
|
@ -17,7 +17,7 @@ exports.Patterns = {
|
||||||
* Weighted penalty scores for the undesirable features
|
* Weighted penalty scores for the undesirable features
|
||||||
* @type {Object}
|
* @type {Object}
|
||||||
*/
|
*/
|
||||||
var PenaltyScores = {
|
const PenaltyScores = {
|
||||||
N1: 3,
|
N1: 3,
|
||||||
N2: 3,
|
N2: 3,
|
||||||
N3: 40,
|
N3: 40,
|
||||||
|
@ -53,19 +53,19 @@ exports.from = function from (value) {
|
||||||
* i is the amount by which the number of adjacent modules of the same color exceeds 5
|
* i is the amount by which the number of adjacent modules of the same color exceeds 5
|
||||||
*/
|
*/
|
||||||
exports.getPenaltyN1 = function getPenaltyN1 (data) {
|
exports.getPenaltyN1 = function getPenaltyN1 (data) {
|
||||||
var size = data.size
|
const size = data.size
|
||||||
var points = 0
|
let points = 0
|
||||||
var sameCountCol = 0
|
let sameCountCol = 0
|
||||||
var sameCountRow = 0
|
let sameCountRow = 0
|
||||||
var lastCol = null
|
let lastCol = null
|
||||||
var lastRow = null
|
let lastRow = null
|
||||||
|
|
||||||
for (var row = 0; row < size; row++) {
|
for (let row = 0; row < size; row++) {
|
||||||
sameCountCol = sameCountRow = 0
|
sameCountCol = sameCountRow = 0
|
||||||
lastCol = lastRow = null
|
lastCol = lastRow = null
|
||||||
|
|
||||||
for (var col = 0; col < size; col++) {
|
for (let col = 0; col < size; col++) {
|
||||||
var module = data.get(row, col)
|
let module = data.get(row, col)
|
||||||
if (module === lastCol) {
|
if (module === lastCol) {
|
||||||
sameCountCol++
|
sameCountCol++
|
||||||
} else {
|
} else {
|
||||||
|
@ -97,12 +97,12 @@ exports.getPenaltyN1 = function getPenaltyN1 (data) {
|
||||||
* Points: N2 * (m - 1) * (n - 1)
|
* Points: N2 * (m - 1) * (n - 1)
|
||||||
*/
|
*/
|
||||||
exports.getPenaltyN2 = function getPenaltyN2 (data) {
|
exports.getPenaltyN2 = function getPenaltyN2 (data) {
|
||||||
var size = data.size
|
const size = data.size
|
||||||
var points = 0
|
let points = 0
|
||||||
|
|
||||||
for (var row = 0; row < size - 1; row++) {
|
for (let row = 0; row < size - 1; row++) {
|
||||||
for (var col = 0; col < size - 1; col++) {
|
for (let col = 0; col < size - 1; col++) {
|
||||||
var last = data.get(row, col) +
|
const last = data.get(row, col) +
|
||||||
data.get(row, col + 1) +
|
data.get(row, col + 1) +
|
||||||
data.get(row + 1, col) +
|
data.get(row + 1, col) +
|
||||||
data.get(row + 1, col + 1)
|
data.get(row + 1, col + 1)
|
||||||
|
@ -121,14 +121,14 @@ exports.getPenaltyN2 = function getPenaltyN2 (data) {
|
||||||
* Points: N3 * number of pattern found
|
* Points: N3 * number of pattern found
|
||||||
*/
|
*/
|
||||||
exports.getPenaltyN3 = function getPenaltyN3 (data) {
|
exports.getPenaltyN3 = function getPenaltyN3 (data) {
|
||||||
var size = data.size
|
const size = data.size
|
||||||
var points = 0
|
let points = 0
|
||||||
var bitsCol = 0
|
let bitsCol = 0
|
||||||
var bitsRow = 0
|
let bitsRow = 0
|
||||||
|
|
||||||
for (var row = 0; row < size; row++) {
|
for (let row = 0; row < size; row++) {
|
||||||
bitsCol = bitsRow = 0
|
bitsCol = bitsRow = 0
|
||||||
for (var col = 0; col < size; col++) {
|
for (let col = 0; col < size; col++) {
|
||||||
bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)
|
bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)
|
||||||
if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++
|
if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++
|
||||||
|
|
||||||
|
@ -149,12 +149,12 @@ exports.getPenaltyN3 = function getPenaltyN3 (data) {
|
||||||
* in the symbol from 50% in steps of 5%
|
* in the symbol from 50% in steps of 5%
|
||||||
*/
|
*/
|
||||||
exports.getPenaltyN4 = function getPenaltyN4 (data) {
|
exports.getPenaltyN4 = function getPenaltyN4 (data) {
|
||||||
var darkCount = 0
|
let darkCount = 0
|
||||||
var modulesCount = data.data.length
|
const modulesCount = data.data.length
|
||||||
|
|
||||||
for (var i = 0; i < modulesCount; i++) darkCount += data.data[i]
|
for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]
|
||||||
|
|
||||||
var k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)
|
const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)
|
||||||
|
|
||||||
return k * PenaltyScores.N4
|
return k * PenaltyScores.N4
|
||||||
}
|
}
|
||||||
|
@ -189,10 +189,10 @@ function getMaskAt (maskPattern, i, j) {
|
||||||
* @param {BitMatrix} data BitMatrix data
|
* @param {BitMatrix} data BitMatrix data
|
||||||
*/
|
*/
|
||||||
exports.applyMask = function applyMask (pattern, data) {
|
exports.applyMask = function applyMask (pattern, data) {
|
||||||
var size = data.size
|
const size = data.size
|
||||||
|
|
||||||
for (var col = 0; col < size; col++) {
|
for (let col = 0; col < size; col++) {
|
||||||
for (var row = 0; row < size; row++) {
|
for (let row = 0; row < size; row++) {
|
||||||
if (data.isReserved(row, col)) continue
|
if (data.isReserved(row, col)) continue
|
||||||
data.xor(row, col, getMaskAt(pattern, row, col))
|
data.xor(row, col, getMaskAt(pattern, row, col))
|
||||||
}
|
}
|
||||||
|
@ -206,16 +206,16 @@ exports.applyMask = function applyMask (pattern, data) {
|
||||||
* @return {Number} Mask pattern reference number
|
* @return {Number} Mask pattern reference number
|
||||||
*/
|
*/
|
||||||
exports.getBestMask = function getBestMask (data, setupFormatFunc) {
|
exports.getBestMask = function getBestMask (data, setupFormatFunc) {
|
||||||
var numPatterns = Object.keys(exports.Patterns).length
|
const numPatterns = Object.keys(exports.Patterns).length
|
||||||
var bestPattern = 0
|
let bestPattern = 0
|
||||||
var lowerPenalty = Infinity
|
let lowerPenalty = Infinity
|
||||||
|
|
||||||
for (var p = 0; p < numPatterns; p++) {
|
for (let p = 0; p < numPatterns; p++) {
|
||||||
setupFormatFunc(p)
|
setupFormatFunc(p)
|
||||||
exports.applyMask(p, data)
|
exports.applyMask(p, data)
|
||||||
|
|
||||||
// Calculate penalty
|
// Calculate penalty
|
||||||
var penalty =
|
const penalty =
|
||||||
exports.getPenaltyN1(data) +
|
exports.getPenaltyN1(data) +
|
||||||
exports.getPenaltyN2(data) +
|
exports.getPenaltyN2(data) +
|
||||||
exports.getPenaltyN3(data) +
|
exports.getPenaltyN3(data) +
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var VersionCheck = require('./version-check')
|
const VersionCheck = require('./version-check')
|
||||||
var Regex = require('./regex')
|
const Regex = require('./regex')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Numeric mode encodes data from the decimal digit set (0 - 9)
|
* Numeric mode encodes data from the decimal digit set (0 - 9)
|
||||||
|
@ -130,7 +130,7 @@ function fromString (string) {
|
||||||
throw new Error('Param is not a string')
|
throw new Error('Param is not a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
var lcStr = string.toLowerCase()
|
const lcStr = string.toLowerCase()
|
||||||
|
|
||||||
switch (lcStr) {
|
switch (lcStr) {
|
||||||
case 'numeric':
|
case 'numeric':
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var Mode = require('./mode')
|
const Mode = require('./mode')
|
||||||
|
|
||||||
function NumericData (data) {
|
function NumericData (data) {
|
||||||
this.mode = Mode.NUMERIC
|
this.mode = Mode.NUMERIC
|
||||||
|
@ -18,7 +18,7 @@ NumericData.prototype.getBitsLength = function getBitsLength () {
|
||||||
}
|
}
|
||||||
|
|
||||||
NumericData.prototype.write = function write (bitBuffer) {
|
NumericData.prototype.write = function write (bitBuffer) {
|
||||||
var i, group, value
|
let i, group, value
|
||||||
|
|
||||||
// The input data string is divided into groups of three digits,
|
// The input data string is divided into groups of three digits,
|
||||||
// and each group is converted to its 10-bit binary equivalent.
|
// and each group is converted to its 10-bit binary equivalent.
|
||||||
|
@ -31,7 +31,7 @@ NumericData.prototype.write = function write (bitBuffer) {
|
||||||
|
|
||||||
// If the number of input digits is not an exact multiple of three,
|
// If the number of input digits is not an exact multiple of three,
|
||||||
// the final one or two digits are converted to 4 or 7 bits respectively.
|
// the final one or two digits are converted to 4 or 7 bits respectively.
|
||||||
var remainingNum = this.data.length - i
|
const remainingNum = this.data.length - i
|
||||||
if (remainingNum > 0) {
|
if (remainingNum > 0) {
|
||||||
group = this.data.substr(i)
|
group = this.data.substr(i)
|
||||||
value = parseInt(group, 10)
|
value = parseInt(group, 10)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var GF = require('./galois-field')
|
const GF = require('./galois-field')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Multiplies two polynomials inside Galois Field
|
* Multiplies two polynomials inside Galois Field
|
||||||
|
@ -8,10 +8,10 @@ var GF = require('./galois-field')
|
||||||
* @return {Uint8Array} Product of p1 and p2
|
* @return {Uint8Array} Product of p1 and p2
|
||||||
*/
|
*/
|
||||||
exports.mul = function mul (p1, p2) {
|
exports.mul = function mul (p1, p2) {
|
||||||
var coeff = new Uint8Array(p1.length + p2.length - 1)
|
const coeff = new Uint8Array(p1.length + p2.length - 1)
|
||||||
|
|
||||||
for (var i = 0; i < p1.length; i++) {
|
for (let i = 0; i < p1.length; i++) {
|
||||||
for (var j = 0; j < p2.length; j++) {
|
for (let j = 0; j < p2.length; j++) {
|
||||||
coeff[i + j] ^= GF.mul(p1[i], p2[j])
|
coeff[i + j] ^= GF.mul(p1[i], p2[j])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,17 +27,17 @@ exports.mul = function mul (p1, p2) {
|
||||||
* @return {Uint8Array} Remainder
|
* @return {Uint8Array} Remainder
|
||||||
*/
|
*/
|
||||||
exports.mod = function mod (divident, divisor) {
|
exports.mod = function mod (divident, divisor) {
|
||||||
var result = new Uint8Array(divident)
|
let result = new Uint8Array(divident)
|
||||||
|
|
||||||
while ((result.length - divisor.length) >= 0) {
|
while ((result.length - divisor.length) >= 0) {
|
||||||
var coeff = result[0]
|
const coeff = result[0]
|
||||||
|
|
||||||
for (var i = 0; i < divisor.length; i++) {
|
for (let i = 0; i < divisor.length; i++) {
|
||||||
result[i] ^= GF.mul(divisor[i], coeff)
|
result[i] ^= GF.mul(divisor[i], coeff)
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove all zeros from buffer head
|
// remove all zeros from buffer head
|
||||||
var offset = 0
|
let offset = 0
|
||||||
while (offset < result.length && result[offset] === 0) offset++
|
while (offset < result.length && result[offset] === 0) offset++
|
||||||
result = result.slice(offset)
|
result = result.slice(offset)
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,8 @@ exports.mod = function mod (divident, divisor) {
|
||||||
* @return {Uint8Array} Buffer containing polynomial coefficients
|
* @return {Uint8Array} Buffer containing polynomial coefficients
|
||||||
*/
|
*/
|
||||||
exports.generateECPolynomial = function generateECPolynomial (degree) {
|
exports.generateECPolynomial = function generateECPolynomial (degree) {
|
||||||
var poly = new Uint8Array([1])
|
let poly = new Uint8Array([1])
|
||||||
for (var i = 0; i < degree; i++) {
|
for (let i = 0; i < degree; i++) {
|
||||||
poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))
|
poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
var ECLevel = require('./error-correction-level')
|
const ECLevel = require('./error-correction-level')
|
||||||
var BitBuffer = require('./bit-buffer')
|
const BitBuffer = require('./bit-buffer')
|
||||||
var BitMatrix = require('./bit-matrix')
|
const BitMatrix = require('./bit-matrix')
|
||||||
var AlignmentPattern = require('./alignment-pattern')
|
const AlignmentPattern = require('./alignment-pattern')
|
||||||
var FinderPattern = require('./finder-pattern')
|
const FinderPattern = require('./finder-pattern')
|
||||||
var MaskPattern = require('./mask-pattern')
|
const MaskPattern = require('./mask-pattern')
|
||||||
var ECCode = require('./error-correction-code')
|
const ECCode = require('./error-correction-code')
|
||||||
var ReedSolomonEncoder = require('./reed-solomon-encoder')
|
const ReedSolomonEncoder = require('./reed-solomon-encoder')
|
||||||
var Version = require('./version')
|
const Version = require('./version')
|
||||||
var FormatInfo = require('./format-info')
|
const FormatInfo = require('./format-info')
|
||||||
var Mode = require('./mode')
|
const Mode = require('./mode')
|
||||||
var Segments = require('./segments')
|
const Segments = require('./segments')
|
||||||
var isArray = require('isarray')
|
const isArray = require('isarray')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* QRCode for JavaScript
|
* QRCode for JavaScript
|
||||||
|
@ -46,17 +46,17 @@ var isArray = require('isarray')
|
||||||
* @param {Number} version QR Code version
|
* @param {Number} version QR Code version
|
||||||
*/
|
*/
|
||||||
function setupFinderPattern (matrix, version) {
|
function setupFinderPattern (matrix, version) {
|
||||||
var size = matrix.size
|
const size = matrix.size
|
||||||
var pos = FinderPattern.getPositions(version)
|
const pos = FinderPattern.getPositions(version)
|
||||||
|
|
||||||
for (var i = 0; i < pos.length; i++) {
|
for (let i = 0; i < pos.length; i++) {
|
||||||
var row = pos[i][0]
|
const row = pos[i][0]
|
||||||
var col = pos[i][1]
|
const col = pos[i][1]
|
||||||
|
|
||||||
for (var r = -1; r <= 7; r++) {
|
for (let r = -1; r <= 7; r++) {
|
||||||
if (row + r <= -1 || size <= row + r) continue
|
if (row + r <= -1 || size <= row + r) continue
|
||||||
|
|
||||||
for (var c = -1; c <= 7; c++) {
|
for (let c = -1; c <= 7; c++) {
|
||||||
if (col + c <= -1 || size <= col + c) continue
|
if (col + c <= -1 || size <= col + c) continue
|
||||||
|
|
||||||
if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||
|
if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||
|
||||||
|
@ -79,10 +79,10 @@ function setupFinderPattern (matrix, version) {
|
||||||
* @param {BitMatrix} matrix Modules matrix
|
* @param {BitMatrix} matrix Modules matrix
|
||||||
*/
|
*/
|
||||||
function setupTimingPattern (matrix) {
|
function setupTimingPattern (matrix) {
|
||||||
var size = matrix.size
|
const size = matrix.size
|
||||||
|
|
||||||
for (var r = 8; r < size - 8; r++) {
|
for (let r = 8; r < size - 8; r++) {
|
||||||
var value = r % 2 === 0
|
const value = r % 2 === 0
|
||||||
matrix.set(r, 6, value, true)
|
matrix.set(r, 6, value, true)
|
||||||
matrix.set(6, r, value, true)
|
matrix.set(6, r, value, true)
|
||||||
}
|
}
|
||||||
|
@ -97,14 +97,14 @@ function setupTimingPattern (matrix) {
|
||||||
* @param {Number} version QR Code version
|
* @param {Number} version QR Code version
|
||||||
*/
|
*/
|
||||||
function setupAlignmentPattern (matrix, version) {
|
function setupAlignmentPattern (matrix, version) {
|
||||||
var pos = AlignmentPattern.getPositions(version)
|
const pos = AlignmentPattern.getPositions(version)
|
||||||
|
|
||||||
for (var i = 0; i < pos.length; i++) {
|
for (let i = 0; i < pos.length; i++) {
|
||||||
var row = pos[i][0]
|
const row = pos[i][0]
|
||||||
var col = pos[i][1]
|
const col = pos[i][1]
|
||||||
|
|
||||||
for (var r = -2; r <= 2; r++) {
|
for (let r = -2; r <= 2; r++) {
|
||||||
for (var c = -2; c <= 2; c++) {
|
for (let c = -2; c <= 2; c++) {
|
||||||
if (r === -2 || r === 2 || c === -2 || c === 2 ||
|
if (r === -2 || r === 2 || c === -2 || c === 2 ||
|
||||||
(r === 0 && c === 0)) {
|
(r === 0 && c === 0)) {
|
||||||
matrix.set(row + r, col + c, true, true)
|
matrix.set(row + r, col + c, true, true)
|
||||||
|
@ -123,11 +123,11 @@ function setupAlignmentPattern (matrix, version) {
|
||||||
* @param {Number} version QR Code version
|
* @param {Number} version QR Code version
|
||||||
*/
|
*/
|
||||||
function setupVersionInfo (matrix, version) {
|
function setupVersionInfo (matrix, version) {
|
||||||
var size = matrix.size
|
const size = matrix.size
|
||||||
var bits = Version.getEncodedBits(version)
|
const bits = Version.getEncodedBits(version)
|
||||||
var row, col, mod
|
let row, col, mod
|
||||||
|
|
||||||
for (var i = 0; i < 18; i++) {
|
for (let i = 0; i < 18; i++) {
|
||||||
row = Math.floor(i / 3)
|
row = Math.floor(i / 3)
|
||||||
col = i % 3 + size - 8 - 3
|
col = i % 3 + size - 8 - 3
|
||||||
mod = ((bits >> i) & 1) === 1
|
mod = ((bits >> i) & 1) === 1
|
||||||
|
@ -145,9 +145,9 @@ function setupVersionInfo (matrix, version) {
|
||||||
* @param {Number} maskPattern Mask pattern reference value
|
* @param {Number} maskPattern Mask pattern reference value
|
||||||
*/
|
*/
|
||||||
function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
|
function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
|
||||||
var size = matrix.size
|
const size = matrix.size
|
||||||
var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
|
const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
|
||||||
var i, mod
|
let i, mod
|
||||||
|
|
||||||
for (i = 0; i < 15; i++) {
|
for (i = 0; i < 15; i++) {
|
||||||
mod = ((bits >> i) & 1) === 1
|
mod = ((bits >> i) & 1) === 1
|
||||||
|
@ -182,19 +182,19 @@ function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
|
||||||
* @param {Uint8Array} data Data codewords
|
* @param {Uint8Array} data Data codewords
|
||||||
*/
|
*/
|
||||||
function setupData (matrix, data) {
|
function setupData (matrix, data) {
|
||||||
var size = matrix.size
|
const size = matrix.size
|
||||||
var inc = -1
|
let inc = -1
|
||||||
var row = size - 1
|
let row = size - 1
|
||||||
var bitIndex = 7
|
let bitIndex = 7
|
||||||
var byteIndex = 0
|
let byteIndex = 0
|
||||||
|
|
||||||
for (var col = size - 1; col > 0; col -= 2) {
|
for (let col = size - 1; col > 0; col -= 2) {
|
||||||
if (col === 6) col--
|
if (col === 6) col--
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
for (var c = 0; c < 2; c++) {
|
for (let c = 0; c < 2; c++) {
|
||||||
if (!matrix.isReserved(row, col - c)) {
|
if (!matrix.isReserved(row, col - c)) {
|
||||||
var dark = false
|
let dark = false
|
||||||
|
|
||||||
if (byteIndex < data.length) {
|
if (byteIndex < data.length) {
|
||||||
dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)
|
dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)
|
||||||
|
@ -231,7 +231,7 @@ function setupData (matrix, data) {
|
||||||
*/
|
*/
|
||||||
function createData (version, errorCorrectionLevel, segments) {
|
function createData (version, errorCorrectionLevel, segments) {
|
||||||
// Prepare data buffer
|
// Prepare data buffer
|
||||||
var buffer = new BitBuffer()
|
const buffer = new BitBuffer()
|
||||||
|
|
||||||
segments.forEach(function (data) {
|
segments.forEach(function (data) {
|
||||||
// prefix data with mode indicator (4 bits)
|
// prefix data with mode indicator (4 bits)
|
||||||
|
@ -251,9 +251,9 @@ function createData (version, errorCorrectionLevel, segments) {
|
||||||
})
|
})
|
||||||
|
|
||||||
// Calculate required number of bits
|
// Calculate required number of bits
|
||||||
var totalCodewords = Utils.getSymbolTotalCodewords(version)
|
const totalCodewords = Utils.getSymbolTotalCodewords(version)
|
||||||
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||||
var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
|
const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
|
||||||
|
|
||||||
// Add a terminator.
|
// Add a terminator.
|
||||||
// If the bit string is shorter than the total number of required bits,
|
// If the bit string is shorter than the total number of required bits,
|
||||||
|
@ -277,8 +277,8 @@ function createData (version, errorCorrectionLevel, segments) {
|
||||||
// Extend the buffer to fill the data capacity of the symbol corresponding to
|
// Extend the buffer to fill the data capacity of the symbol corresponding to
|
||||||
// the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)
|
// the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)
|
||||||
// and 00010001 (0x11) alternately.
|
// and 00010001 (0x11) alternately.
|
||||||
var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
|
const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
|
||||||
for (var i = 0; i < remainingByte; i++) {
|
for (let i = 0; i < remainingByte; i++) {
|
||||||
buffer.put(i % 2 ? 0x11 : 0xEC, 8)
|
buffer.put(i % 2 ? 0x11 : 0xEC, 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,41 +296,41 @@ function createData (version, errorCorrectionLevel, segments) {
|
||||||
*/
|
*/
|
||||||
function createCodewords (bitBuffer, version, errorCorrectionLevel) {
|
function createCodewords (bitBuffer, version, errorCorrectionLevel) {
|
||||||
// Total codewords for this QR code version (Data + Error correction)
|
// Total codewords for this QR code version (Data + Error correction)
|
||||||
var totalCodewords = Utils.getSymbolTotalCodewords(version)
|
const totalCodewords = Utils.getSymbolTotalCodewords(version)
|
||||||
|
|
||||||
// Total number of error correction codewords
|
// Total number of error correction codewords
|
||||||
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||||
|
|
||||||
// Total number of data codewords
|
// Total number of data codewords
|
||||||
var dataTotalCodewords = totalCodewords - ecTotalCodewords
|
const dataTotalCodewords = totalCodewords - ecTotalCodewords
|
||||||
|
|
||||||
// Total number of blocks
|
// Total number of blocks
|
||||||
var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)
|
const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)
|
||||||
|
|
||||||
// Calculate how many blocks each group should contain
|
// Calculate how many blocks each group should contain
|
||||||
var blocksInGroup2 = totalCodewords % ecTotalBlocks
|
const blocksInGroup2 = totalCodewords % ecTotalBlocks
|
||||||
var blocksInGroup1 = ecTotalBlocks - blocksInGroup2
|
const blocksInGroup1 = ecTotalBlocks - blocksInGroup2
|
||||||
|
|
||||||
var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)
|
const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)
|
||||||
|
|
||||||
var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
|
const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
|
||||||
var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1
|
const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1
|
||||||
|
|
||||||
// Number of EC codewords is the same for both groups
|
// Number of EC codewords is the same for both groups
|
||||||
var ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1
|
const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1
|
||||||
|
|
||||||
// Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount
|
// Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount
|
||||||
var rs = new ReedSolomonEncoder(ecCount)
|
const rs = new ReedSolomonEncoder(ecCount)
|
||||||
|
|
||||||
var offset = 0
|
let offset = 0
|
||||||
var dcData = new Array(ecTotalBlocks)
|
const dcData = new Array(ecTotalBlocks)
|
||||||
var ecData = new Array(ecTotalBlocks)
|
const ecData = new Array(ecTotalBlocks)
|
||||||
var maxDataSize = 0
|
let maxDataSize = 0
|
||||||
var buffer = new Uint8Array(bitBuffer.buffer)
|
const buffer = new Uint8Array(bitBuffer.buffer)
|
||||||
|
|
||||||
// Divide the buffer into the required number of blocks
|
// Divide the buffer into the required number of blocks
|
||||||
for (var b = 0; b < ecTotalBlocks; b++) {
|
for (let b = 0; b < ecTotalBlocks; b++) {
|
||||||
var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2
|
const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2
|
||||||
|
|
||||||
// extract a block of data from buffer
|
// extract a block of data from buffer
|
||||||
dcData[b] = buffer.slice(offset, offset + dataSize)
|
dcData[b] = buffer.slice(offset, offset + dataSize)
|
||||||
|
@ -344,9 +344,9 @@ function createCodewords (bitBuffer, version, errorCorrectionLevel) {
|
||||||
|
|
||||||
// Create final data
|
// Create final data
|
||||||
// Interleave the data and error correction codewords from each block
|
// Interleave the data and error correction codewords from each block
|
||||||
var data = new Uint8Array(totalCodewords)
|
const data = new Uint8Array(totalCodewords)
|
||||||
var index = 0
|
let index = 0
|
||||||
var i, r
|
let i, r
|
||||||
|
|
||||||
// Add data codewords
|
// Add data codewords
|
||||||
for (i = 0; i < maxDataSize; i++) {
|
for (i = 0; i < maxDataSize; i++) {
|
||||||
|
@ -377,15 +377,15 @@ function createCodewords (bitBuffer, version, errorCorrectionLevel) {
|
||||||
* @return {Object} Object containing symbol data
|
* @return {Object} Object containing symbol data
|
||||||
*/
|
*/
|
||||||
function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
|
function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
|
||||||
var segments
|
let segments
|
||||||
|
|
||||||
if (isArray(data)) {
|
if (isArray(data)) {
|
||||||
segments = Segments.fromArray(data)
|
segments = Segments.fromArray(data)
|
||||||
} else if (typeof data === 'string') {
|
} else if (typeof data === 'string') {
|
||||||
var estimatedVersion = version
|
let estimatedVersion = version
|
||||||
|
|
||||||
if (!estimatedVersion) {
|
if (!estimatedVersion) {
|
||||||
var rawSegments = Segments.rawSplit(data)
|
const rawSegments = Segments.rawSplit(data)
|
||||||
|
|
||||||
// Estimate best version that can contain raw splitted segments
|
// Estimate best version that can contain raw splitted segments
|
||||||
estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)
|
estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)
|
||||||
|
@ -399,7 +399,7 @@ function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the min version that can contain data
|
// Get the min version that can contain data
|
||||||
var bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)
|
const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)
|
||||||
|
|
||||||
// If no version is found, data cannot be stored
|
// If no version is found, data cannot be stored
|
||||||
if (!bestVersion) {
|
if (!bestVersion) {
|
||||||
|
@ -418,11 +418,11 @@ function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
var dataBits = createData(version, errorCorrectionLevel, segments)
|
const dataBits = createData(version, errorCorrectionLevel, segments)
|
||||||
|
|
||||||
// Allocate matrix buffer
|
// Allocate matrix buffer
|
||||||
var moduleCount = Utils.getSymbolSize(version)
|
const moduleCount = Utils.getSymbolSize(version)
|
||||||
var modules = new BitMatrix(moduleCount)
|
const modules = new BitMatrix(moduleCount)
|
||||||
|
|
||||||
// Add function modules
|
// Add function modules
|
||||||
setupFinderPattern(modules, version)
|
setupFinderPattern(modules, version)
|
||||||
|
@ -477,9 +477,9 @@ exports.create = function create (data, options) {
|
||||||
throw new Error('No input text')
|
throw new Error('No input text')
|
||||||
}
|
}
|
||||||
|
|
||||||
var errorCorrectionLevel = ECLevel.M
|
let errorCorrectionLevel = ECLevel.M
|
||||||
var version
|
let version
|
||||||
var mask
|
let mask
|
||||||
|
|
||||||
if (typeof options !== 'undefined') {
|
if (typeof options !== 'undefined') {
|
||||||
// Use higher error correction level as default
|
// Use higher error correction level as default
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var Polynomial = require('./polynomial')
|
const Polynomial = require('./polynomial')
|
||||||
|
|
||||||
function ReedSolomonEncoder (degree) {
|
function ReedSolomonEncoder (degree) {
|
||||||
this.genPoly = undefined
|
this.genPoly = undefined
|
||||||
|
@ -32,19 +32,19 @@ ReedSolomonEncoder.prototype.encode = function encode (data) {
|
||||||
|
|
||||||
// Calculate EC for this data block
|
// Calculate EC for this data block
|
||||||
// extends data size to data+genPoly size
|
// extends data size to data+genPoly size
|
||||||
var paddedData = new Uint8Array(data.length + this.degree)
|
const paddedData = new Uint8Array(data.length + this.degree)
|
||||||
paddedData.set(data)
|
paddedData.set(data)
|
||||||
|
|
||||||
// The error correction codewords are the remainder after dividing the data codewords
|
// The error correction codewords are the remainder after dividing the data codewords
|
||||||
// by a generator polynomial
|
// by a generator polynomial
|
||||||
var remainder = Polynomial.mod(paddedData, this.genPoly)
|
const remainder = Polynomial.mod(paddedData, this.genPoly)
|
||||||
|
|
||||||
// return EC data blocks (last n byte, where n is the degree of genPoly)
|
// return EC data blocks (last n byte, where n is the degree of genPoly)
|
||||||
// If coefficients number in remainder are less than genPoly degree,
|
// If coefficients number in remainder are less than genPoly degree,
|
||||||
// pad with 0s to the left to reach the needed number of coefficients
|
// pad with 0s to the left to reach the needed number of coefficients
|
||||||
var start = this.degree - remainder.length
|
const start = this.degree - remainder.length
|
||||||
if (start > 0) {
|
if (start > 0) {
|
||||||
var buff = new Uint8Array(this.degree)
|
const buff = new Uint8Array(this.degree)
|
||||||
buff.set(remainder, start)
|
buff.set(remainder, start)
|
||||||
|
|
||||||
return buff
|
return buff
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
var numeric = '[0-9]+'
|
const numeric = '[0-9]+'
|
||||||
var alphanumeric = '[A-Z $%*+\\-./:]+'
|
const alphanumeric = '[A-Z $%*+\\-./:]+'
|
||||||
var kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
|
let kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
|
||||||
'[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +
|
'[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +
|
||||||
'[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +
|
'[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +
|
||||||
'[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'
|
'[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'
|
||||||
kanji = kanji.replace(/u/g, '\\u')
|
kanji = kanji.replace(/u/g, '\\u')
|
||||||
|
|
||||||
var byte = '(?:(?![A-Z0-9 $%*+\\-./:]|' + kanji + ')(?:.|[\r\n]))+'
|
const byte = '(?:(?![A-Z0-9 $%*+\\-./:]|' + kanji + ')(?:.|[\r\n]))+'
|
||||||
|
|
||||||
exports.KANJI = new RegExp(kanji, 'g')
|
exports.KANJI = new RegExp(kanji, 'g')
|
||||||
exports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\-./:]+', 'g')
|
exports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\-./:]+', 'g')
|
||||||
|
@ -14,9 +14,9 @@ exports.BYTE = new RegExp(byte, 'g')
|
||||||
exports.NUMERIC = new RegExp(numeric, 'g')
|
exports.NUMERIC = new RegExp(numeric, 'g')
|
||||||
exports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')
|
exports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')
|
||||||
|
|
||||||
var TEST_KANJI = new RegExp('^' + kanji + '$')
|
const TEST_KANJI = new RegExp('^' + kanji + '$')
|
||||||
var TEST_NUMERIC = new RegExp('^' + numeric + '$')
|
const TEST_NUMERIC = new RegExp('^' + numeric + '$')
|
||||||
var TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')
|
const TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')
|
||||||
|
|
||||||
exports.testKanji = function testKanji (str) {
|
exports.testKanji = function testKanji (str) {
|
||||||
return TEST_KANJI.test(str)
|
return TEST_KANJI.test(str)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
var Mode = require('./mode')
|
const Mode = require('./mode')
|
||||||
var NumericData = require('./numeric-data')
|
const NumericData = require('./numeric-data')
|
||||||
var AlphanumericData = require('./alphanumeric-data')
|
const AlphanumericData = require('./alphanumeric-data')
|
||||||
var ByteData = require('./byte-data')
|
const ByteData = require('./byte-data')
|
||||||
var KanjiData = require('./kanji-data')
|
const KanjiData = require('./kanji-data')
|
||||||
var Regex = require('./regex')
|
const Regex = require('./regex')
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
var dijkstra = require('dijkstrajs')
|
const dijkstra = require('dijkstrajs')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns UTF8 byte length
|
* Returns UTF8 byte length
|
||||||
|
@ -26,8 +26,8 @@ function getStringByteLength (str) {
|
||||||
* @return {Array} Array of object with segments data
|
* @return {Array} Array of object with segments data
|
||||||
*/
|
*/
|
||||||
function getSegments (regex, mode, str) {
|
function getSegments (regex, mode, str) {
|
||||||
var segments = []
|
const segments = []
|
||||||
var result
|
let result
|
||||||
|
|
||||||
while ((result = regex.exec(str)) !== null) {
|
while ((result = regex.exec(str)) !== null) {
|
||||||
segments.push({
|
segments.push({
|
||||||
|
@ -49,10 +49,10 @@ function getSegments (regex, mode, str) {
|
||||||
* @return {Array} Array of object with segments data
|
* @return {Array} Array of object with segments data
|
||||||
*/
|
*/
|
||||||
function getSegmentsFromString (dataStr) {
|
function getSegmentsFromString (dataStr) {
|
||||||
var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
|
const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
|
||||||
var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
|
const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
|
||||||
var byteSegs
|
let byteSegs
|
||||||
var kanjiSegs
|
let kanjiSegs
|
||||||
|
|
||||||
if (Utils.isKanjiModeEnabled()) {
|
if (Utils.isKanjiModeEnabled()) {
|
||||||
byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)
|
byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)
|
||||||
|
@ -62,7 +62,7 @@ function getSegmentsFromString (dataStr) {
|
||||||
kanjiSegs = []
|
kanjiSegs = []
|
||||||
}
|
}
|
||||||
|
|
||||||
var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)
|
const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)
|
||||||
|
|
||||||
return segs
|
return segs
|
||||||
.sort(function (s1, s2) {
|
.sort(function (s1, s2) {
|
||||||
|
@ -106,7 +106,7 @@ function getSegmentBitsLength (length, mode) {
|
||||||
*/
|
*/
|
||||||
function mergeSegments (segs) {
|
function mergeSegments (segs) {
|
||||||
return segs.reduce(function (acc, curr) {
|
return segs.reduce(function (acc, curr) {
|
||||||
var prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null
|
const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null
|
||||||
if (prevSeg && prevSeg.mode === curr.mode) {
|
if (prevSeg && prevSeg.mode === curr.mode) {
|
||||||
acc[acc.length - 1].data += curr.data
|
acc[acc.length - 1].data += curr.data
|
||||||
return acc
|
return acc
|
||||||
|
@ -134,9 +134,9 @@ function mergeSegments (segs) {
|
||||||
* @return {Array} Array of object with segments data
|
* @return {Array} Array of object with segments data
|
||||||
*/
|
*/
|
||||||
function buildNodes (segs) {
|
function buildNodes (segs) {
|
||||||
var nodes = []
|
const nodes = []
|
||||||
for (var i = 0; i < segs.length; i++) {
|
for (let i = 0; i < segs.length; i++) {
|
||||||
var seg = segs[i]
|
const seg = segs[i]
|
||||||
|
|
||||||
switch (seg.mode) {
|
switch (seg.mode) {
|
||||||
case Mode.NUMERIC:
|
case Mode.NUMERIC:
|
||||||
|
@ -178,24 +178,24 @@ function buildNodes (segs) {
|
||||||
* @return {Object} Graph of all possible segments
|
* @return {Object} Graph of all possible segments
|
||||||
*/
|
*/
|
||||||
function buildGraph (nodes, version) {
|
function buildGraph (nodes, version) {
|
||||||
var table = {}
|
const table = {}
|
||||||
var graph = { start: {} }
|
const graph = { start: {} }
|
||||||
var prevNodeIds = ['start']
|
let prevNodeIds = ['start']
|
||||||
|
|
||||||
for (var i = 0; i < nodes.length; i++) {
|
for (let i = 0; i < nodes.length; i++) {
|
||||||
var nodeGroup = nodes[i]
|
const nodeGroup = nodes[i]
|
||||||
var currentNodeIds = []
|
const currentNodeIds = []
|
||||||
|
|
||||||
for (var j = 0; j < nodeGroup.length; j++) {
|
for (let j = 0; j < nodeGroup.length; j++) {
|
||||||
var node = nodeGroup[j]
|
const node = nodeGroup[j]
|
||||||
var key = '' + i + j
|
const key = '' + i + j
|
||||||
|
|
||||||
currentNodeIds.push(key)
|
currentNodeIds.push(key)
|
||||||
table[key] = { node: node, lastCount: 0 }
|
table[key] = { node: node, lastCount: 0 }
|
||||||
graph[key] = {}
|
graph[key] = {}
|
||||||
|
|
||||||
for (var n = 0; n < prevNodeIds.length; n++) {
|
for (let n = 0; n < prevNodeIds.length; n++) {
|
||||||
var prevNodeId = prevNodeIds[n]
|
const prevNodeId = prevNodeIds[n]
|
||||||
|
|
||||||
if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {
|
if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {
|
||||||
graph[prevNodeId][key] =
|
graph[prevNodeId][key] =
|
||||||
|
@ -215,7 +215,7 @@ function buildGraph (nodes, version) {
|
||||||
prevNodeIds = currentNodeIds
|
prevNodeIds = currentNodeIds
|
||||||
}
|
}
|
||||||
|
|
||||||
for (n = 0; n < prevNodeIds.length; n++) {
|
for (let n = 0; n < prevNodeIds.length; n++) {
|
||||||
graph[prevNodeIds[n]].end = 0
|
graph[prevNodeIds[n]].end = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,8 +231,8 @@ function buildGraph (nodes, version) {
|
||||||
* @return {Segment} Segment
|
* @return {Segment} Segment
|
||||||
*/
|
*/
|
||||||
function buildSingleSegment (data, modesHint) {
|
function buildSingleSegment (data, modesHint) {
|
||||||
var mode
|
let mode
|
||||||
var bestMode = Mode.getBestModeForData(data)
|
const bestMode = Mode.getBestModeForData(data)
|
||||||
|
|
||||||
mode = Mode.from(modesHint, bestMode)
|
mode = Mode.from(modesHint, bestMode)
|
||||||
|
|
||||||
|
@ -299,14 +299,14 @@ exports.fromArray = function fromArray (array) {
|
||||||
* @return {Array} Array of segments
|
* @return {Array} Array of segments
|
||||||
*/
|
*/
|
||||||
exports.fromString = function fromString (data, version) {
|
exports.fromString = function fromString (data, version) {
|
||||||
var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())
|
const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())
|
||||||
|
|
||||||
var nodes = buildNodes(segs)
|
const nodes = buildNodes(segs)
|
||||||
var graph = buildGraph(nodes, version)
|
const graph = buildGraph(nodes, version)
|
||||||
var path = dijkstra.find_path(graph.map, 'start', 'end')
|
const path = dijkstra.find_path(graph.map, 'start', 'end')
|
||||||
|
|
||||||
var optimizedSegs = []
|
const optimizedSegs = []
|
||||||
for (var i = 1; i < path.length - 1; i++) {
|
for (let i = 1; i < path.length - 1; i++) {
|
||||||
optimizedSegs.push(graph.table[path[i]].node)
|
optimizedSegs.push(graph.table[path[i]].node)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var toSJISFunction
|
let toSJISFunction
|
||||||
var CODEWORDS_COUNT = [
|
const CODEWORDS_COUNT = [
|
||||||
0, // Not used
|
0, // Not used
|
||||||
26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
|
26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
|
||||||
404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,
|
404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,
|
||||||
|
@ -36,7 +36,7 @@ exports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {
|
||||||
* @return {Number} Encoded value
|
* @return {Number} Encoded value
|
||||||
*/
|
*/
|
||||||
exports.getBCHDigit = function (data) {
|
exports.getBCHDigit = function (data) {
|
||||||
var digit = 0
|
let digit = 0
|
||||||
|
|
||||||
while (data !== 0) {
|
while (data !== 0) {
|
||||||
digit++
|
digit++
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
var ECCode = require('./error-correction-code')
|
const ECCode = require('./error-correction-code')
|
||||||
var ECLevel = require('./error-correction-level')
|
const ECLevel = require('./error-correction-level')
|
||||||
var Mode = require('./mode')
|
const Mode = require('./mode')
|
||||||
var VersionCheck = require('./version-check')
|
const VersionCheck = require('./version-check')
|
||||||
var isArray = require('isarray')
|
const isArray = require('isarray')
|
||||||
|
|
||||||
// Generator polynomial used to encode version information
|
// Generator polynomial used to encode version information
|
||||||
var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
|
const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
|
||||||
var G18_BCH = Utils.getBCHDigit(G18)
|
const G18_BCH = Utils.getBCHDigit(G18)
|
||||||
|
|
||||||
function getBestVersionForDataLength (mode, length, errorCorrectionLevel) {
|
function getBestVersionForDataLength (mode, length, errorCorrectionLevel) {
|
||||||
for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
|
for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {
|
||||||
if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {
|
if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {
|
||||||
return currentVersion
|
return currentVersion
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,10 @@ function getReservedBitsCount (mode, version) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTotalBitsFromDataArray (segments, version) {
|
function getTotalBitsFromDataArray (segments, version) {
|
||||||
var totalBits = 0
|
let totalBits = 0
|
||||||
|
|
||||||
segments.forEach(function (data) {
|
segments.forEach(function (data) {
|
||||||
var reservedBits = getReservedBitsCount(data.mode, version)
|
const reservedBits = getReservedBitsCount(data.mode, version)
|
||||||
totalBits += reservedBits + data.getBitsLength()
|
totalBits += reservedBits + data.getBitsLength()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -36,8 +36,8 @@ function getTotalBitsFromDataArray (segments, version) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBestVersionForMixedData (segments, errorCorrectionLevel) {
|
function getBestVersionForMixedData (segments, errorCorrectionLevel) {
|
||||||
for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
|
for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {
|
||||||
var length = getTotalBitsFromDataArray(segments, currentVersion)
|
const length = getTotalBitsFromDataArray(segments, currentVersion)
|
||||||
if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {
|
if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {
|
||||||
return currentVersion
|
return currentVersion
|
||||||
}
|
}
|
||||||
|
@ -80,17 +80,17 @@ exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode)
|
||||||
if (typeof mode === 'undefined') mode = Mode.BYTE
|
if (typeof mode === 'undefined') mode = Mode.BYTE
|
||||||
|
|
||||||
// Total codewords for this QR code version (Data + Error correction)
|
// Total codewords for this QR code version (Data + Error correction)
|
||||||
var totalCodewords = Utils.getSymbolTotalCodewords(version)
|
const totalCodewords = Utils.getSymbolTotalCodewords(version)
|
||||||
|
|
||||||
// Total number of error correction codewords
|
// Total number of error correction codewords
|
||||||
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||||
|
|
||||||
// Total number of data codewords
|
// Total number of data codewords
|
||||||
var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
|
const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
|
||||||
|
|
||||||
if (mode === Mode.MIXED) return dataTotalCodewordsBits
|
if (mode === Mode.MIXED) return dataTotalCodewordsBits
|
||||||
|
|
||||||
var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)
|
const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)
|
||||||
|
|
||||||
// Return max number of storable codewords
|
// Return max number of storable codewords
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
|
@ -118,9 +118,9 @@ exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode)
|
||||||
* @return {Number} QR Code version
|
* @return {Number} QR Code version
|
||||||
*/
|
*/
|
||||||
exports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {
|
exports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {
|
||||||
var seg
|
let seg
|
||||||
|
|
||||||
var ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)
|
const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)
|
||||||
|
|
||||||
if (isArray(data)) {
|
if (isArray(data)) {
|
||||||
if (data.length > 1) {
|
if (data.length > 1) {
|
||||||
|
@ -154,7 +154,7 @@ exports.getEncodedBits = function getEncodedBits (version) {
|
||||||
throw new Error('Invalid QR Code version')
|
throw new Error('Invalid QR Code version')
|
||||||
}
|
}
|
||||||
|
|
||||||
var d = version << 12
|
let d = version << 12
|
||||||
|
|
||||||
while (Utils.getBCHDigit(d) - G18_BCH >= 0) {
|
while (Utils.getBCHDigit(d) - G18_BCH >= 0) {
|
||||||
d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))
|
d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
|
|
||||||
function clearCanvas (ctx, canvas, size) {
|
function clearCanvas (ctx, canvas, size) {
|
||||||
ctx.clearRect(0, 0, canvas.width, canvas.height)
|
ctx.clearRect(0, 0, canvas.width, canvas.height)
|
||||||
|
@ -19,8 +19,8 @@ function getCanvasElement () {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.render = function render (qrData, canvas, options) {
|
exports.render = function render (qrData, canvas, options) {
|
||||||
var opts = options
|
let opts = options
|
||||||
var canvasEl = canvas
|
let canvasEl = canvas
|
||||||
|
|
||||||
if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
|
if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
|
||||||
opts = canvas
|
opts = canvas
|
||||||
|
@ -32,10 +32,10 @@ exports.render = function render (qrData, canvas, options) {
|
||||||
}
|
}
|
||||||
|
|
||||||
opts = Utils.getOptions(opts)
|
opts = Utils.getOptions(opts)
|
||||||
var size = Utils.getImageWidth(qrData.modules.size, opts)
|
const size = Utils.getImageWidth(qrData.modules.size, opts)
|
||||||
|
|
||||||
var ctx = canvasEl.getContext('2d')
|
const ctx = canvasEl.getContext('2d')
|
||||||
var image = ctx.createImageData(size, size)
|
const image = ctx.createImageData(size, size)
|
||||||
Utils.qrToImageData(image.data, qrData, opts)
|
Utils.qrToImageData(image.data, qrData, opts)
|
||||||
|
|
||||||
clearCanvas(ctx, canvasEl, size)
|
clearCanvas(ctx, canvasEl, size)
|
||||||
|
@ -45,7 +45,7 @@ exports.render = function render (qrData, canvas, options) {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
|
exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
|
||||||
var opts = options
|
let opts = options
|
||||||
|
|
||||||
if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
|
if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
|
||||||
opts = canvas
|
opts = canvas
|
||||||
|
@ -54,10 +54,10 @@ exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
|
||||||
|
|
||||||
if (!opts) opts = {}
|
if (!opts) opts = {}
|
||||||
|
|
||||||
var canvasEl = exports.render(qrData, canvas, opts)
|
const canvasEl = exports.render(qrData, canvas, opts)
|
||||||
|
|
||||||
var type = opts.type || 'image/png'
|
const type = opts.type || 'image/png'
|
||||||
var rendererOpts = opts.rendererOpts || {}
|
const rendererOpts = opts.rendererOpts || {}
|
||||||
|
|
||||||
return canvasEl.toDataURL(type, rendererOpts.quality)
|
return canvasEl.toDataURL(type, rendererOpts.quality)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var PNG = require('pngjs').PNG
|
const PNG = require('pngjs').PNG
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
|
|
||||||
exports.render = function render (qrData, options) {
|
exports.render = function render (qrData, options) {
|
||||||
var opts = Utils.getOptions(options)
|
const opts = Utils.getOptions(options)
|
||||||
var pngOpts = opts.rendererOpts
|
const pngOpts = opts.rendererOpts
|
||||||
var size = Utils.getImageWidth(qrData.modules.size, opts)
|
const size = Utils.getImageWidth(qrData.modules.size, opts)
|
||||||
|
|
||||||
pngOpts.width = size
|
pngOpts.width = size
|
||||||
pngOpts.height = size
|
pngOpts.height = size
|
||||||
|
|
||||||
var pngImage = new PNG(pngOpts)
|
const pngImage = new PNG(pngOpts)
|
||||||
Utils.qrToImageData(pngImage.data, qrData, opts)
|
Utils.qrToImageData(pngImage.data, qrData, opts)
|
||||||
|
|
||||||
return pngImage
|
return pngImage
|
||||||
|
@ -24,7 +24,7 @@ exports.renderToDataURL = function renderToDataURL (qrData, options, cb) {
|
||||||
|
|
||||||
exports.renderToBuffer(qrData, options, function (err, output) {
|
exports.renderToBuffer(qrData, options, function (err, output) {
|
||||||
if (err) cb(err)
|
if (err) cb(err)
|
||||||
var url = 'data:image/png;base64,'
|
let url = 'data:image/png;base64,'
|
||||||
url += output.toString('base64')
|
url += output.toString('base64')
|
||||||
cb(null, url)
|
cb(null, url)
|
||||||
})
|
})
|
||||||
|
@ -36,8 +36,8 @@ exports.renderToBuffer = function renderToBuffer (qrData, options, cb) {
|
||||||
options = undefined
|
options = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
var png = exports.render(qrData, options)
|
const png = exports.render(qrData, options)
|
||||||
var buffer = []
|
const buffer = []
|
||||||
|
|
||||||
png.on('error', cb)
|
png.on('error', cb)
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
||||||
options = undefined
|
options = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
var stream = fs.createWriteStream(path)
|
const stream = fs.createWriteStream(path)
|
||||||
stream.on('error', cb)
|
stream.on('error', cb)
|
||||||
stream.on('close', cb)
|
stream.on('close', cb)
|
||||||
|
|
||||||
|
@ -66,6 +66,6 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.renderToFileStream = function renderToFileStream (stream, qrData, options) {
|
exports.renderToFileStream = function renderToFileStream (stream, qrData, options) {
|
||||||
var png = exports.render(qrData, options)
|
const png = exports.render(qrData, options)
|
||||||
png.pack().pipe(stream)
|
png.pack().pipe(stream)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
|
|
||||||
function getColorAttrib (color, attrib) {
|
function getColorAttrib (color, attrib) {
|
||||||
var alpha = color.a / 255
|
const alpha = color.a / 255
|
||||||
var str = attrib + '="' + color.hex + '"'
|
const str = attrib + '="' + color.hex + '"'
|
||||||
|
|
||||||
return alpha < 1
|
return alpha < 1
|
||||||
? str + ' ' + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"'
|
? str + ' ' + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"'
|
||||||
|
@ -10,21 +10,21 @@ function getColorAttrib (color, attrib) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function svgCmd (cmd, x, y) {
|
function svgCmd (cmd, x, y) {
|
||||||
var str = cmd + x
|
let str = cmd + x
|
||||||
if (typeof y !== 'undefined') str += ' ' + y
|
if (typeof y !== 'undefined') str += ' ' + y
|
||||||
|
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
function qrToPath (data, size, margin) {
|
function qrToPath (data, size, margin) {
|
||||||
var path = ''
|
let path = ''
|
||||||
var moveBy = 0
|
let moveBy = 0
|
||||||
var newRow = false
|
let newRow = false
|
||||||
var lineLength = 0
|
let lineLength = 0
|
||||||
|
|
||||||
for (var i = 0; i < data.length; i++) {
|
for (let i = 0; i < data.length; i++) {
|
||||||
var col = Math.floor(i % size)
|
const col = Math.floor(i % size)
|
||||||
var row = Math.floor(i / size)
|
const row = Math.floor(i / size)
|
||||||
|
|
||||||
if (!col && !newRow) newRow = true
|
if (!col && !newRow) newRow = true
|
||||||
|
|
||||||
|
@ -53,25 +53,25 @@ function qrToPath (data, size, margin) {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.render = function render (qrData, options, cb) {
|
exports.render = function render (qrData, options, cb) {
|
||||||
var opts = Utils.getOptions(options)
|
const opts = Utils.getOptions(options)
|
||||||
var size = qrData.modules.size
|
const size = qrData.modules.size
|
||||||
var data = qrData.modules.data
|
const data = qrData.modules.data
|
||||||
var qrcodesize = size + opts.margin * 2
|
const qrcodesize = size + opts.margin * 2
|
||||||
|
|
||||||
var bg = !opts.color.light.a
|
const bg = !opts.color.light.a
|
||||||
? ''
|
? ''
|
||||||
: '<path ' + getColorAttrib(opts.color.light, 'fill') +
|
: '<path ' + getColorAttrib(opts.color.light, 'fill') +
|
||||||
' d="M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z"/>'
|
' d="M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z"/>'
|
||||||
|
|
||||||
var path =
|
const path =
|
||||||
'<path ' + getColorAttrib(opts.color.dark, 'stroke') +
|
'<path ' + getColorAttrib(opts.color.dark, 'stroke') +
|
||||||
' d="' + qrToPath(data, size, opts.margin) + '"/>'
|
' d="' + qrToPath(data, size, opts.margin) + '"/>'
|
||||||
|
|
||||||
var viewBox = 'viewBox="' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '"'
|
const viewBox = 'viewBox="' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '"'
|
||||||
|
|
||||||
var width = !opts.width ? '' : 'width="' + opts.width + '" height="' + opts.width + '" '
|
const width = !opts.width ? '' : 'width="' + opts.width + '" height="' + opts.width + '" '
|
||||||
|
|
||||||
var svgTag = '<svg xmlns="http://www.w3.org/2000/svg" ' + width + viewBox + ' shape-rendering="crispEdges">' + bg + path + '</svg>\n'
|
const svgTag = '<svg xmlns="http://www.w3.org/2000/svg" ' + width + viewBox + ' shape-rendering="crispEdges">' + bg + path + '</svg>\n'
|
||||||
|
|
||||||
if (typeof cb === 'function') {
|
if (typeof cb === 'function') {
|
||||||
cb(null, svgTag)
|
cb(null, svgTag)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var svgTagRenderer = require('./svg-tag')
|
const svgTagRenderer = require('./svg-tag')
|
||||||
|
|
||||||
exports.render = svgTagRenderer.render
|
exports.render = svgTagRenderer.render
|
||||||
|
|
||||||
|
@ -8,10 +8,10 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
||||||
options = undefined
|
options = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var svgTag = exports.render(qrData, options)
|
const svgTag = exports.render(qrData, options)
|
||||||
|
|
||||||
var xmlStr = '<?xml version="1.0" encoding="utf-8"?>' +
|
const xmlStr = '<?xml version="1.0" encoding="utf-8"?>' +
|
||||||
'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">' +
|
'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">' +
|
||||||
svgTag
|
svgTag
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
// var Utils = require('./utils')
|
// let Utils = require('./utils')
|
||||||
|
|
||||||
exports.render = function (qrData, options, cb) {
|
exports.render = function (qrData, options, cb) {
|
||||||
var size = qrData.modules.size
|
const size = qrData.modules.size
|
||||||
var data = qrData.modules.data
|
const data = qrData.modules.data
|
||||||
|
|
||||||
// var opts = Utils.getOptions(options)
|
// let opts = Utils.getOptions(options)
|
||||||
|
|
||||||
// use same scheme as https://github.com/gtanner/qrcode-terminal because it actually works! =)
|
// use same scheme as https://github.com/gtanner/qrcode-terminal because it actually works! =)
|
||||||
var black = '\x1b[40m \x1b[0m'
|
const black = '\x1b[40m \x1b[0m'
|
||||||
var white = '\x1b[47m \x1b[0m'
|
const white = '\x1b[47m \x1b[0m'
|
||||||
|
|
||||||
var output = ''
|
let output = ''
|
||||||
var hMargin = Array(size + 3).join(white)
|
const hMargin = Array(size + 3).join(white)
|
||||||
var vMargin = Array(2).join(white)
|
const vMargin = Array(2).join(white)
|
||||||
|
|
||||||
output += hMargin + '\n'
|
output += hMargin + '\n'
|
||||||
for (var i = 0; i < size; ++i) {
|
for (let i = 0; i < size; ++i) {
|
||||||
output += white
|
output += white
|
||||||
for (var j = 0; j < size; j++) {
|
for (let j = 0; j < size; j++) {
|
||||||
// var topModule = data[i * size + j]
|
// let topModule = data[i * size + j]
|
||||||
// var bottomModule = data[(i + 1) * size + j]
|
// let bottomModule = data[(i + 1) * size + j]
|
||||||
|
|
||||||
output += data[i * size + j] ? black : white// getBlockChar(topModule, bottomModule)
|
output += data[i * size + j] ? black : white// getBlockChar(topModule, bottomModule)
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,8 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
||||||
options = undefined
|
options = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
var fs = require('fs')
|
let fs = require('fs')
|
||||||
var utf8 = exports.render(qrData, options)
|
let utf8 = exports.render(qrData, options)
|
||||||
fs.writeFile(path, utf8, cb)
|
fs.writeFile(path, utf8, cb)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
var Utils = require('./utils')
|
const Utils = require('./utils')
|
||||||
|
|
||||||
var BLOCK_CHAR = {
|
const BLOCK_CHAR = {
|
||||||
WW: ' ',
|
WW: ' ',
|
||||||
WB: '▄',
|
WB: '▄',
|
||||||
BB: '█',
|
BB: '█',
|
||||||
BW: '▀'
|
BW: '▀'
|
||||||
}
|
}
|
||||||
|
|
||||||
var INVERTED_BLOCK_CHAR = {
|
const INVERTED_BLOCK_CHAR = {
|
||||||
BB: ' ',
|
BB: ' ',
|
||||||
BW: '▄',
|
BW: '▄',
|
||||||
WW: '█',
|
WW: '█',
|
||||||
|
@ -22,27 +22,27 @@ function getBlockChar (top, bottom, blocks) {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.render = function (qrData, options, cb) {
|
exports.render = function (qrData, options, cb) {
|
||||||
var opts = Utils.getOptions(options)
|
const opts = Utils.getOptions(options)
|
||||||
var blocks = BLOCK_CHAR
|
let blocks = BLOCK_CHAR
|
||||||
if (opts.color.dark.hex === '#ffffff' || opts.color.light.hex === '#000000') {
|
if (opts.color.dark.hex === '#ffffff' || opts.color.light.hex === '#000000') {
|
||||||
blocks = INVERTED_BLOCK_CHAR
|
blocks = INVERTED_BLOCK_CHAR
|
||||||
}
|
}
|
||||||
|
|
||||||
var size = qrData.modules.size
|
const size = qrData.modules.size
|
||||||
var data = qrData.modules.data
|
const data = qrData.modules.data
|
||||||
|
|
||||||
var output = ''
|
let output = ''
|
||||||
var hMargin = Array(size + (opts.margin * 2) + 1).join(blocks.WW)
|
let hMargin = Array(size + (opts.margin * 2) + 1).join(blocks.WW)
|
||||||
hMargin = Array((opts.margin / 2) + 1).join(hMargin + '\n')
|
hMargin = Array((opts.margin / 2) + 1).join(hMargin + '\n')
|
||||||
|
|
||||||
var vMargin = Array(opts.margin + 1).join(blocks.WW)
|
const vMargin = Array(opts.margin + 1).join(blocks.WW)
|
||||||
|
|
||||||
output += hMargin
|
output += hMargin
|
||||||
for (var i = 0; i < size; i += 2) {
|
for (let i = 0; i < size; i += 2) {
|
||||||
output += vMargin
|
output += vMargin
|
||||||
for (var j = 0; j < size; j++) {
|
for (let j = 0; j < size; j++) {
|
||||||
var topModule = data[i * size + j]
|
const topModule = data[i * size + j]
|
||||||
var bottomModule = data[(i + 1) * size + j]
|
const bottomModule = data[(i + 1) * size + j]
|
||||||
|
|
||||||
output += getBlockChar(topModule, bottomModule, blocks)
|
output += getBlockChar(topModule, bottomModule, blocks)
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
||||||
options = undefined
|
options = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var utf8 = exports.render(qrData, options)
|
const utf8 = exports.render(qrData, options)
|
||||||
fs.writeFile(path, utf8, cb)
|
fs.writeFile(path, utf8, cb)
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ function hex2rgba (hex) {
|
||||||
throw new Error('Color should be defined as hex string')
|
throw new Error('Color should be defined as hex string')
|
||||||
}
|
}
|
||||||
|
|
||||||
var hexCode = hex.slice().replace('#', '').split('')
|
let hexCode = hex.slice().replace('#', '').split('')
|
||||||
if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {
|
if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {
|
||||||
throw new Error('Invalid hex color: ' + hex)
|
throw new Error('Invalid hex color: ' + hex)
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ function hex2rgba (hex) {
|
||||||
// Add default alpha value
|
// Add default alpha value
|
||||||
if (hexCode.length === 6) hexCode.push('F', 'F')
|
if (hexCode.length === 6) hexCode.push('F', 'F')
|
||||||
|
|
||||||
var hexValue = parseInt(hexCode.join(''), 16)
|
const hexValue = parseInt(hexCode.join(''), 16)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
r: (hexValue >> 24) & 255,
|
r: (hexValue >> 24) & 255,
|
||||||
|
@ -37,12 +37,12 @@ exports.getOptions = function getOptions (options) {
|
||||||
if (!options) options = {}
|
if (!options) options = {}
|
||||||
if (!options.color) options.color = {}
|
if (!options.color) options.color = {}
|
||||||
|
|
||||||
var margin = typeof options.margin === 'undefined' ||
|
const margin = typeof options.margin === 'undefined' ||
|
||||||
options.margin === null ||
|
options.margin === null ||
|
||||||
options.margin < 0 ? 4 : options.margin
|
options.margin < 0 ? 4 : options.margin
|
||||||
|
|
||||||
var width = options.width && options.width >= 21 ? options.width : undefined
|
const width = options.width && options.width >= 21 ? options.width : undefined
|
||||||
var scale = options.scale || 4
|
const scale = options.scale || 4
|
||||||
|
|
||||||
return {
|
return {
|
||||||
width: width,
|
width: width,
|
||||||
|
@ -64,27 +64,27 @@ exports.getScale = function getScale (qrSize, opts) {
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.getImageWidth = function getImageWidth (qrSize, opts) {
|
exports.getImageWidth = function getImageWidth (qrSize, opts) {
|
||||||
var scale = exports.getScale(qrSize, opts)
|
const scale = exports.getScale(qrSize, opts)
|
||||||
return Math.floor((qrSize + opts.margin * 2) * scale)
|
return Math.floor((qrSize + opts.margin * 2) * scale)
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.qrToImageData = function qrToImageData (imgData, qr, opts) {
|
exports.qrToImageData = function qrToImageData (imgData, qr, opts) {
|
||||||
var size = qr.modules.size
|
const size = qr.modules.size
|
||||||
var data = qr.modules.data
|
const data = qr.modules.data
|
||||||
var scale = exports.getScale(size, opts)
|
const scale = exports.getScale(size, opts)
|
||||||
var symbolSize = Math.floor((size + opts.margin * 2) * scale)
|
const symbolSize = Math.floor((size + opts.margin * 2) * scale)
|
||||||
var scaledMargin = opts.margin * scale
|
const scaledMargin = opts.margin * scale
|
||||||
var palette = [opts.color.light, opts.color.dark]
|
const palette = [opts.color.light, opts.color.dark]
|
||||||
|
|
||||||
for (var i = 0; i < symbolSize; i++) {
|
for (let i = 0; i < symbolSize; i++) {
|
||||||
for (var j = 0; j < symbolSize; j++) {
|
for (let j = 0; j < symbolSize; j++) {
|
||||||
var posDst = (i * symbolSize + j) * 4
|
let posDst = (i * symbolSize + j) * 4
|
||||||
var pxColor = opts.color.light
|
let pxColor = opts.color.light
|
||||||
|
|
||||||
if (i >= scaledMargin && j >= scaledMargin &&
|
if (i >= scaledMargin && j >= scaledMargin &&
|
||||||
i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {
|
i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {
|
||||||
var iSrc = Math.floor((i - scaledMargin) / scale)
|
const iSrc = Math.floor((i - scaledMargin) / scale)
|
||||||
var jSrc = Math.floor((j - scaledMargin) / scale)
|
const jSrc = Math.floor((j - scaledMargin) / scale)
|
||||||
pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]
|
pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
var canPromise = require('./can-promise')
|
const canPromise = require('./can-promise')
|
||||||
var QRCode = require('./core/qrcode')
|
const QRCode = require('./core/qrcode')
|
||||||
var PngRenderer = require('./renderer/png')
|
const PngRenderer = require('./renderer/png')
|
||||||
var Utf8Renderer = require('./renderer/utf8')
|
const Utf8Renderer = require('./renderer/utf8')
|
||||||
var TerminalRenderer = require('./renderer/terminal')
|
const TerminalRenderer = require('./renderer/terminal')
|
||||||
var SvgRenderer = require('./renderer/svg')
|
const SvgRenderer = require('./renderer/svg')
|
||||||
|
|
||||||
function checkParams (text, opts, cb) {
|
function checkParams (text, opts, cb) {
|
||||||
if (typeof text === 'undefined') {
|
if (typeof text === 'undefined') {
|
||||||
|
@ -68,7 +68,7 @@ function render (renderFunc, text, params) {
|
||||||
if (!params.cb) {
|
if (!params.cb) {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
try {
|
try {
|
||||||
var data = QRCode.create(text, params.opts)
|
const data = QRCode.create(text, params.opts)
|
||||||
return renderFunc(data, params.opts, function (err, data) {
|
return renderFunc(data, params.opts, function (err, data) {
|
||||||
return err ? reject(err) : resolve(data)
|
return err ? reject(err) : resolve(data)
|
||||||
})
|
})
|
||||||
|
@ -79,7 +79,7 @@ function render (renderFunc, text, params) {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var data = QRCode.create(text, params.opts)
|
const data = QRCode.create(text, params.opts)
|
||||||
return renderFunc(data, params.opts, params.cb)
|
return renderFunc(data, params.opts, params.cb)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
params.cb(e)
|
params.cb(e)
|
||||||
|
@ -91,20 +91,20 @@ exports.create = QRCode.create
|
||||||
exports.toCanvas = require('./browser').toCanvas
|
exports.toCanvas = require('./browser').toCanvas
|
||||||
|
|
||||||
exports.toString = function toString (text, opts, cb) {
|
exports.toString = function toString (text, opts, cb) {
|
||||||
var params = checkParams(text, opts, cb)
|
const params = checkParams(text, opts, cb)
|
||||||
var renderer = getStringRendererFromType(params.opts.type)
|
const renderer = getStringRendererFromType(params.opts.type)
|
||||||
return render(renderer.render, text, params)
|
return render(renderer.render, text, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.toDataURL = function toDataURL (text, opts, cb) {
|
exports.toDataURL = function toDataURL (text, opts, cb) {
|
||||||
var params = checkParams(text, opts, cb)
|
const params = checkParams(text, opts, cb)
|
||||||
var renderer = getRendererFromType(params.opts.type)
|
const renderer = getRendererFromType(params.opts.type)
|
||||||
return render(renderer.renderToDataURL, text, params)
|
return render(renderer.renderToDataURL, text, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.toBuffer = function toBuffer (text, opts, cb) {
|
exports.toBuffer = function toBuffer (text, opts, cb) {
|
||||||
var params = checkParams(text, opts, cb)
|
const params = checkParams(text, opts, cb)
|
||||||
var renderer = getRendererFromType(params.opts.type)
|
const renderer = getRendererFromType(params.opts.type)
|
||||||
return render(renderer.renderToBuffer, text, params)
|
return render(renderer.renderToBuffer, text, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,10 +117,10 @@ exports.toFile = function toFile (path, text, opts, cb) {
|
||||||
throw new Error('Too few arguments provided')
|
throw new Error('Too few arguments provided')
|
||||||
}
|
}
|
||||||
|
|
||||||
var params = checkParams(text, opts, cb)
|
const params = checkParams(text, opts, cb)
|
||||||
var type = params.opts.type || getTypeFromFilename(path)
|
const type = params.opts.type || getTypeFromFilename(path)
|
||||||
var renderer = getRendererFromType(type)
|
const renderer = getRendererFromType(type)
|
||||||
var renderToFile = renderer.renderToFile.bind(null, path)
|
const renderToFile = renderer.renderToFile.bind(null, path)
|
||||||
|
|
||||||
return render(renderToFile, text, params)
|
return render(renderToFile, text, params)
|
||||||
}
|
}
|
||||||
|
@ -130,8 +130,8 @@ exports.toFileStream = function toFileStream (stream, text, opts) {
|
||||||
throw new Error('Too few arguments provided')
|
throw new Error('Too few arguments provided')
|
||||||
}
|
}
|
||||||
|
|
||||||
var params = checkParams(text, opts, stream.emit.bind(stream, 'error'))
|
const params = checkParams(text, opts, stream.emit.bind(stream, 'error'))
|
||||||
var renderer = getRendererFromType('png') // Only png support for now
|
const renderer = getRendererFromType('png') // Only png support for now
|
||||||
var renderToFileStream = renderer.renderToFileStream.bind(null, stream)
|
const renderToFileStream = renderer.renderToFileStream.bind(null, stream)
|
||||||
render(renderToFileStream, text, params)
|
render(renderToFileStream, text, params)
|
||||||
}
|
}
|
||||||
|
|
6
test.js
6
test.js
|
@ -1,7 +1,7 @@
|
||||||
var spawn = require('child_process').spawn
|
const spawn = require('child_process').spawn
|
||||||
var path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
var opt = {
|
const opt = {
|
||||||
cwd: __dirname,
|
cwd: __dirname,
|
||||||
env: (function () {
|
env: (function () {
|
||||||
process.env.NODE_PATH = './' + path.delimiter + './lib'
|
process.env.NODE_PATH = './' + path.delimiter + './lib'
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var { Canvas, createCanvas } = require('canvas')
|
const { Canvas, createCanvas } = require('canvas')
|
||||||
var QRCode = require('lib')
|
const QRCode = require('lib')
|
||||||
var Helpers = require('test/helpers')
|
const Helpers = require('test/helpers')
|
||||||
|
|
||||||
test('toCanvas - no promise available', function (t) {
|
test('toCanvas - no promise available', function (t) {
|
||||||
Helpers.removeNativePromise()
|
Helpers.removeNativePromise()
|
||||||
|
@ -14,7 +14,7 @@ test('toCanvas - no promise available', function (t) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var canvasEl = createCanvas(200, 200)
|
const canvasEl = createCanvas(200, 200)
|
||||||
|
|
||||||
t.throw(function () { QRCode.toCanvas() },
|
t.throw(function () { QRCode.toCanvas() },
|
||||||
'Should throw if no arguments are provided')
|
'Should throw if no arguments are provided')
|
||||||
|
@ -79,7 +79,7 @@ test('toCanvas', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toCanvas with specified canvas element', function (t) {
|
test('toCanvas with specified canvas element', function (t) {
|
||||||
var canvasEl = createCanvas(200, 200)
|
const canvasEl = createCanvas(200, 200)
|
||||||
|
|
||||||
t.plan(6)
|
t.plan(6)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var QRCode = require('lib')
|
const QRCode = require('lib')
|
||||||
var QRCodeBrowser = require('lib/browser')
|
const QRCodeBrowser = require('lib/browser')
|
||||||
var { createCanvas } = require('canvas')
|
const { createCanvas } = require('canvas')
|
||||||
var Helpers = require('test/helpers')
|
const Helpers = require('test/helpers')
|
||||||
|
|
||||||
test('toDataURL - no promise available', function (t) {
|
test('toDataURL - no promise available', function (t) {
|
||||||
Helpers.removeNativePromise()
|
Helpers.removeNativePromise()
|
||||||
|
@ -37,7 +37,7 @@ test('toDataURL - no promise available', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toDataURL - image/png', function (t) {
|
test('toDataURL - image/png', function (t) {
|
||||||
var expectedDataURL = [
|
const expectedDataURL = [
|
||||||
'data:image/png;base64,',
|
'data:image/png;base64,',
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAAAklEQVR4AewaftIAAAKzSU',
|
'iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAAAklEQVR4AewaftIAAAKzSU',
|
||||||
'RBVO3BQW7kQAwEwSxC//9y7h55akCQxvYQjIj/scYo1ijFGqVYoxRrlGKNUqxRijVKsUYp',
|
'RBVO3BQW7kQAwEwSxC//9y7h55akCQxvYQjIj/scYo1ijFGqVYoxRrlGKNUqxRijVKsUYp',
|
||||||
|
@ -99,7 +99,7 @@ test('toDataURL - image/png', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Canvas toDataURL - image/png', function (t) {
|
test('Canvas toDataURL - image/png', function (t) {
|
||||||
var expectedDataURL = [
|
const expectedDataURL = [
|
||||||
'data:image/png;base64,',
|
'data:image/png;base64,',
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAYAAABRRIOnAAAABmJLR0QA/wD/AP+gvaeTAA',
|
'iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAYAAABRRIOnAAAABmJLR0QA/wD/AP+gvaeTAA',
|
||||||
'AC20lEQVR4nO3dQY7jMAwEwM1i///lzGUurYtWEEknQNV1EidjNGhFpuTX+/1+/4Fff5/+',
|
'AC20lEQVR4nO3dQY7jMAwEwM1i///lzGUurYtWEEknQNV1EidjNGhFpuTX+/1+/4Fff5/+',
|
||||||
|
@ -126,7 +126,7 @@ test('Canvas toDataURL - image/png', function (t) {
|
||||||
t.throw(function () { QRCodeBrowser.toDataURL(function () {}) },
|
t.throw(function () { QRCodeBrowser.toDataURL(function () {}) },
|
||||||
'Should throw if text is not provided')
|
'Should throw if text is not provided')
|
||||||
|
|
||||||
var canvas = createCanvas(200, 200)
|
const canvas = createCanvas(200, 200)
|
||||||
QRCodeBrowser.toDataURL(canvas, 'i am a pony!', {
|
QRCodeBrowser.toDataURL(canvas, 'i am a pony!', {
|
||||||
errorCorrectionLevel: 'H',
|
errorCorrectionLevel: 'H',
|
||||||
type: 'image/png'
|
type: 'image/png'
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var path = require('path')
|
const path = require('path')
|
||||||
var os = require('os')
|
const os = require('os')
|
||||||
var sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
var QRCode = require('lib')
|
const QRCode = require('lib')
|
||||||
var Helpers = require('test/helpers')
|
const Helpers = require('test/helpers')
|
||||||
var StreamMock = require('test/mocks/writable-stream')
|
const StreamMock = require('test/mocks/writable-stream')
|
||||||
|
|
||||||
test('toFile - no promise available', function (t) {
|
test('toFile - no promise available', function (t) {
|
||||||
Helpers.removeNativePromise()
|
Helpers.removeNativePromise()
|
||||||
var fileName = path.join(os.tmpdir(), 'qrimage.png')
|
const fileName = path.join(os.tmpdir(), 'qrimage.png')
|
||||||
|
|
||||||
t.throw(function () { QRCode.toFile(fileName, 'some text') },
|
t.throw(function () { QRCode.toFile(fileName, 'some text') },
|
||||||
'Should throw if a callback is not provided')
|
'Should throw if a callback is not provided')
|
||||||
|
@ -23,7 +23,7 @@ test('toFile - no promise available', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toFile', function (t) {
|
test('toFile', function (t) {
|
||||||
var fileName = path.join(os.tmpdir(), 'qrimage.png')
|
const fileName = path.join(os.tmpdir(), 'qrimage.png')
|
||||||
|
|
||||||
t.throw(function () { QRCode.toFile('some text', function () {}) },
|
t.throw(function () { QRCode.toFile('some text', function () {}) },
|
||||||
'Should throw if path is not provided')
|
'Should throw if path is not provided')
|
||||||
|
@ -38,8 +38,8 @@ test('toFile', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toFile png', function (t) {
|
test('toFile png', function (t) {
|
||||||
var fileName = path.join(os.tmpdir(), 'qrimage.png')
|
const fileName = path.join(os.tmpdir(), 'qrimage.png')
|
||||||
var expectedBase64Output = [
|
const expectedBase64Output = [
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAAAklEQVR4AewaftIAAAKzSU',
|
'iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAAAklEQVR4AewaftIAAAKzSU',
|
||||||
'RBVO3BQW7kQAwEwSxC//9y7h55akCQxvYQjIj/scYo1ijFGqVYoxRrlGKNUqxRijVKsUYp',
|
'RBVO3BQW7kQAwEwSxC//9y7h55akCQxvYQjIj/scYo1ijFGqVYoxRrlGKNUqxRijVKsUYp',
|
||||||
'1ijFGqVYoxRrlGKNUqxRijXKxUNJ+EkqdyShU+mS0Kl0SfhJKk8Ua5RijVKsUS5epvKmJD',
|
'1ijFGqVYoxRrlGKNUqxRijXKxUNJ+EkqdyShU+mS0Kl0SfhJKk8Ua5RijVKsUS5epvKmJD',
|
||||||
|
@ -99,7 +99,7 @@ test('toFile png', function (t) {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
var fsStub = sinon.stub(fs, 'createWriteStream')
|
const fsStub = sinon.stub(fs, 'createWriteStream')
|
||||||
fsStub.returns(new StreamMock().forceErrorOnWrite())
|
fsStub.returns(new StreamMock().forceErrorOnWrite())
|
||||||
|
|
||||||
QRCode.toFile(fileName, 'i am a pony!', {
|
QRCode.toFile(fileName, 'i am a pony!', {
|
||||||
|
@ -118,8 +118,8 @@ test('toFile png', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toFile svg', function (t) {
|
test('toFile svg', function (t) {
|
||||||
var fileName = path.join(os.tmpdir(), 'qrimage.svg')
|
const fileName = path.join(os.tmpdir(), 'qrimage.svg')
|
||||||
var expectedOutput = fs.readFileSync(
|
const expectedOutput = fs.readFileSync(
|
||||||
path.join(__dirname, '/svg.expected.out'), 'UTF-8')
|
path.join(__dirname, '/svg.expected.out'), 'UTF-8')
|
||||||
|
|
||||||
t.plan(6)
|
t.plan(6)
|
||||||
|
@ -165,8 +165,8 @@ test('toFile svg', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toFile utf8', function (t) {
|
test('toFile utf8', function (t) {
|
||||||
var fileName = path.join(os.tmpdir(), 'qrimage.txt')
|
const fileName = path.join(os.tmpdir(), 'qrimage.txt')
|
||||||
var expectedOutput = [
|
const expectedOutput = [
|
||||||
' ',
|
' ',
|
||||||
' ',
|
' ',
|
||||||
' █▀▀▀▀▀█ █ ▄█ ▀ █ █▀▀▀▀▀█ ',
|
' █▀▀▀▀▀█ █ ▄█ ▀ █ █▀▀▀▀▀█ ',
|
||||||
|
@ -225,12 +225,12 @@ test('toFile utf8', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toFile manual segments', function (t) {
|
test('toFile manual segments', function (t) {
|
||||||
var fileName = path.join(os.tmpdir(), 'qrimage.txt')
|
const fileName = path.join(os.tmpdir(), 'qrimage.txt')
|
||||||
var segs = [
|
const segs = [
|
||||||
{ data: 'ABCDEFG', mode: 'alphanumeric' },
|
{ data: 'ABCDEFG', mode: 'alphanumeric' },
|
||||||
{ data: '0123456', mode: 'numeric' }
|
{ data: '0123456', mode: 'numeric' }
|
||||||
]
|
]
|
||||||
var expectedOutput = [
|
const expectedOutput = [
|
||||||
' ',
|
' ',
|
||||||
' ',
|
' ',
|
||||||
' █▀▀▀▀▀█ ██▀██ █▀▀▀▀▀█ ',
|
' █▀▀▀▀▀█ ██▀██ █▀▀▀▀▀█ ',
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
var QRCode = require('lib')
|
const QRCode = require('lib')
|
||||||
var StreamMock = require('../mocks/writable-stream')
|
const StreamMock = require('../mocks/writable-stream')
|
||||||
|
|
||||||
test('toFileStream png', function (t) {
|
test('toFileStream png', function (t) {
|
||||||
t.throw(function () { QRCode.toFileStream('some text') },
|
t.throw(function () { QRCode.toFileStream('some text') },
|
||||||
|
@ -10,8 +10,8 @@ test('toFileStream png', function (t) {
|
||||||
t.throw(function () { QRCode.toFileStream(new StreamMock()) },
|
t.throw(function () { QRCode.toFileStream(new StreamMock()) },
|
||||||
'Should throw if text is not provided')
|
'Should throw if text is not provided')
|
||||||
|
|
||||||
var fstream = new StreamMock()
|
const fstream = new StreamMock()
|
||||||
var spy = sinon.spy(fstream, 'emit')
|
const spy = sinon.spy(fstream, 'emit')
|
||||||
|
|
||||||
QRCode.toFileStream(fstream, 'i am a pony!')
|
QRCode.toFileStream(fstream, 'i am a pony!')
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ test('toFileStream png', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toFileStream png with write error', function (t) {
|
test('toFileStream png with write error', function (t) {
|
||||||
var fstreamErr = new StreamMock().forceErrorOnWrite()
|
const fstreamErr = new StreamMock().forceErrorOnWrite()
|
||||||
QRCode.toFileStream(fstreamErr, 'i am a pony!')
|
QRCode.toFileStream(fstreamErr, 'i am a pony!')
|
||||||
|
|
||||||
t.plan(2)
|
t.plan(2)
|
||||||
|
@ -38,8 +38,8 @@ test('toFileStream png with write error', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toFileStream png with qrcode error', function (t) {
|
test('toFileStream png with qrcode error', function (t) {
|
||||||
var fstreamErr = new StreamMock()
|
const fstreamErr = new StreamMock()
|
||||||
var bigString = Array(200).join('i am a pony!')
|
const bigString = Array(200).join('i am a pony!')
|
||||||
|
|
||||||
t.plan(2)
|
t.plan(2)
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var path = require('path')
|
const path = require('path')
|
||||||
var QRCode = require('lib')
|
const QRCode = require('lib')
|
||||||
var browser = require('lib/browser')
|
const browser = require('lib/browser')
|
||||||
var Helpers = require('test/helpers')
|
const Helpers = require('test/helpers')
|
||||||
|
|
||||||
test('toString - no promise available', function (t) {
|
test('toString - no promise available', function (t) {
|
||||||
Helpers.removeNativePromise()
|
Helpers.removeNativePromise()
|
||||||
|
@ -76,7 +76,7 @@ test('toString (browser)', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toString svg', function (t) {
|
test('toString svg', function (t) {
|
||||||
var file = path.join(__dirname, '/svgtag.expected.out')
|
const file = path.join(__dirname, '/svgtag.expected.out')
|
||||||
t.plan(6)
|
t.plan(6)
|
||||||
|
|
||||||
QRCode.toString('http://www.google.com', {
|
QRCode.toString('http://www.google.com', {
|
||||||
|
@ -121,7 +121,7 @@ test('toString svg', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toString browser svg', function (t) {
|
test('toString browser svg', function (t) {
|
||||||
var file = path.join(__dirname, '/svgtag.expected.out')
|
const file = path.join(__dirname, '/svgtag.expected.out')
|
||||||
|
|
||||||
t.plan(3)
|
t.plan(3)
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ test('toString browser svg', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toString utf8', function (t) {
|
test('toString utf8', function (t) {
|
||||||
var expectedUtf8 = [
|
const expectedUtf8 = [
|
||||||
' ',
|
' ',
|
||||||
' ',
|
' ',
|
||||||
' █▀▀▀▀▀█ █ ▄█ ▀ █ █▀▀▀▀▀█ ',
|
' █▀▀▀▀▀█ █ ▄█ ▀ █ █▀▀▀▀▀█ ',
|
||||||
|
@ -212,7 +212,7 @@ test('toString utf8', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('toString terminal', function (t) {
|
test('toString terminal', function (t) {
|
||||||
var expectedTerminal = fs.readFileSync(path.join(__dirname, '/terminal.expected.out')) + ''
|
const expectedTerminal = fs.readFileSync(path.join(__dirname, '/terminal.expected.out')) + ''
|
||||||
|
|
||||||
t.plan(3)
|
t.plan(3)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var nativePromise = global.Promise
|
const nativePromise = global.Promise
|
||||||
|
|
||||||
exports.removeNativePromise = function () {
|
exports.removeNativePromise = function () {
|
||||||
if (global.Promise) {
|
if (global.Promise) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var stream = require('stream')
|
const stream = require('stream')
|
||||||
var util = require('util')
|
const util = require('util')
|
||||||
|
|
||||||
function WritableStream () {
|
function WritableStream () {
|
||||||
stream.Writable.call(this)
|
stream.Writable.call(this)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var pattern = require('core/alignment-pattern')
|
const pattern = require('core/alignment-pattern')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Row/column coordinates of the center module of each alignment pattern.
|
* Row/column coordinates of the center module of each alignment pattern.
|
||||||
|
@ -7,7 +7,7 @@ var pattern = require('core/alignment-pattern')
|
||||||
*
|
*
|
||||||
* @type {Array}
|
* @type {Array}
|
||||||
*/
|
*/
|
||||||
var EXPECTED_POSITION_TABLE = [
|
const EXPECTED_POSITION_TABLE = [
|
||||||
[],
|
[],
|
||||||
[6, 18],
|
[6, 18],
|
||||||
[6, 22],
|
[6, 22],
|
||||||
|
@ -53,17 +53,17 @@ var EXPECTED_POSITION_TABLE = [
|
||||||
test('Alignment pattern - Row/Col coords', function (t) {
|
test('Alignment pattern - Row/Col coords', function (t) {
|
||||||
t.plan(40)
|
t.plan(40)
|
||||||
|
|
||||||
for (var i = 1; i <= 40; i++) {
|
for (let i = 1; i <= 40; i++) {
|
||||||
var pos = pattern.getRowColCoords(i)
|
const pos = pattern.getRowColCoords(i)
|
||||||
t.deepEqual(pos, EXPECTED_POSITION_TABLE[i - 1], 'Should return correct coords')
|
t.deepEqual(pos, EXPECTED_POSITION_TABLE[i - 1], 'Should return correct coords')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Alignment pattern - Positions', function (t) {
|
test('Alignment pattern - Positions', function (t) {
|
||||||
for (var i = 1; i <= 40; i++) {
|
for (let i = 1; i <= 40; i++) {
|
||||||
var pos = pattern.getPositions(i)
|
const pos = pattern.getPositions(i)
|
||||||
var expectedPos = EXPECTED_POSITION_TABLE[i - 1]
|
const expectedPos = EXPECTED_POSITION_TABLE[i - 1]
|
||||||
var expectedLength = (Math.pow(expectedPos.length, 2) || 3) - 3
|
const expectedLength = (Math.pow(expectedPos.length, 2) || 3) - 3
|
||||||
|
|
||||||
t.equal(pos.length, expectedLength, 'Should return correct number of positions')
|
t.equal(pos.length, expectedLength, 'Should return correct number of positions')
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var BitBuffer = require('core/bit-buffer')
|
const BitBuffer = require('core/bit-buffer')
|
||||||
var AlphanumericData = require('core/alphanumeric-data')
|
const AlphanumericData = require('core/alphanumeric-data')
|
||||||
var Mode = require('core/mode')
|
const Mode = require('core/mode')
|
||||||
|
|
||||||
var testData = [
|
const testData = [
|
||||||
{
|
{
|
||||||
data: 'A',
|
data: 'A',
|
||||||
length: 1,
|
length: 1,
|
||||||
|
@ -26,13 +26,13 @@ var testData = [
|
||||||
|
|
||||||
test('Alphanumeric Data', function (t) {
|
test('Alphanumeric Data', function (t) {
|
||||||
testData.forEach(function (data) {
|
testData.forEach(function (data) {
|
||||||
var alphanumericData = new AlphanumericData(data.data)
|
const alphanumericData = new AlphanumericData(data.data)
|
||||||
|
|
||||||
t.equal(alphanumericData.mode, Mode.ALPHANUMERIC, 'Mode should be ALPHANUMERIC')
|
t.equal(alphanumericData.mode, Mode.ALPHANUMERIC, 'Mode should be ALPHANUMERIC')
|
||||||
t.equal(alphanumericData.getLength(), data.length, 'Should return correct length')
|
t.equal(alphanumericData.getLength(), data.length, 'Should return correct length')
|
||||||
t.equal(alphanumericData.getBitsLength(), data.bitLength, 'Should return correct bit length')
|
t.equal(alphanumericData.getBitsLength(), data.bitLength, 'Should return correct bit length')
|
||||||
|
|
||||||
var bitBuffer = new BitBuffer()
|
const bitBuffer = new BitBuffer()
|
||||||
alphanumericData.write(bitBuffer)
|
alphanumericData.write(bitBuffer)
|
||||||
t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
|
t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var BitBuffer = require('core/bit-buffer')
|
const BitBuffer = require('core/bit-buffer')
|
||||||
|
|
||||||
test('Bit Buffer', function (t) {
|
test('Bit Buffer', function (t) {
|
||||||
var testData = 0x41 // 'A'
|
const testData = 0x41 // 'A'
|
||||||
var expectedDataBits = [false, true, false, false, false, false, false, true]
|
const expectedDataBits = [false, true, false, false, false, false, false, true]
|
||||||
|
|
||||||
var bitBuffer = new BitBuffer()
|
const bitBuffer = new BitBuffer()
|
||||||
|
|
||||||
t.equal(bitBuffer.getLengthInBits(), 0, 'Initial length should be 0')
|
t.equal(bitBuffer.getLengthInBits(), 0, 'Initial length should be 0')
|
||||||
|
|
||||||
bitBuffer.put(testData, 8)
|
bitBuffer.put(testData, 8)
|
||||||
t.equal(bitBuffer.getLengthInBits(), 8, 'Length should be 8')
|
t.equal(bitBuffer.getLengthInBits(), 8, 'Length should be 8')
|
||||||
|
|
||||||
for (var i = 0; i < 8; i++) {
|
for (let i = 0; i < 8; i++) {
|
||||||
t.deepEqual(bitBuffer.get(i), expectedDataBits[i], 'Should return correct bit value')
|
t.deepEqual(bitBuffer.get(i), expectedDataBits[i], 'Should return correct bit value')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var BitMatrix = require('core/bit-matrix')
|
const BitMatrix = require('core/bit-matrix')
|
||||||
|
|
||||||
test('Bit Matrix', function (t) {
|
test('Bit Matrix', function (t) {
|
||||||
t.throw(function () { BitMatrix(0) }, 'Should throw if size is 0')
|
t.throw(function () { BitMatrix(0) }, 'Should throw if size is 0')
|
||||||
t.throw(function () { BitMatrix(-1) }, 'Should throw if size less than 0')
|
t.throw(function () { BitMatrix(-1) }, 'Should throw if size less than 0')
|
||||||
|
|
||||||
var bm = new BitMatrix(2)
|
const bm = new BitMatrix(2)
|
||||||
|
|
||||||
t.equal(bm.size, 2, 'Should have correct size')
|
t.equal(bm.size, 2, 'Should have correct size')
|
||||||
t.equal(bm.data.length, 4, 'Should correctly set buffer size')
|
t.equal(bm.data.length, 4, 'Should correctly set buffer size')
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var BitBuffer = require('core/bit-buffer')
|
const BitBuffer = require('core/bit-buffer')
|
||||||
var ByteData = require('core/byte-data')
|
const ByteData = require('core/byte-data')
|
||||||
var Mode = require('core/mode')
|
const Mode = require('core/mode')
|
||||||
|
|
||||||
test('Byte Data', function (t) {
|
test('Byte Data', function (t) {
|
||||||
var text = '1234'
|
const text = '1234'
|
||||||
var textBitLength = 32
|
const textBitLength = 32
|
||||||
var textByte = [49, 50, 51, 52] // 1, 2, 3, 4
|
const textByte = [49, 50, 51, 52] // 1, 2, 3, 4
|
||||||
var utf8Text = '\u00bd + \u00bc = \u00be' // 9 char, 12 byte
|
const utf8Text = '\u00bd + \u00bc = \u00be' // 9 char, 12 byte
|
||||||
|
|
||||||
var byteData = new ByteData(text)
|
const byteData = new ByteData(text)
|
||||||
|
|
||||||
t.equal(byteData.mode, Mode.BYTE, 'Mode should be BYTE')
|
t.equal(byteData.mode, Mode.BYTE, 'Mode should be BYTE')
|
||||||
t.equal(byteData.getLength(), text.length, 'Should return correct length')
|
t.equal(byteData.getLength(), text.length, 'Should return correct length')
|
||||||
t.equal(byteData.getBitsLength(), textBitLength, 'Should return correct bit length')
|
t.equal(byteData.getBitsLength(), textBitLength, 'Should return correct bit length')
|
||||||
|
|
||||||
var bitBuffer = new BitBuffer()
|
const bitBuffer = new BitBuffer()
|
||||||
byteData.write(bitBuffer)
|
byteData.write(bitBuffer)
|
||||||
t.deepEqual(bitBuffer.buffer, textByte, 'Should write correct data to buffer')
|
t.deepEqual(bitBuffer.buffer, textByte, 'Should write correct data to buffer')
|
||||||
|
|
||||||
var byteDataUtf8 = new ByteData(utf8Text)
|
const byteDataUtf8 = new ByteData(utf8Text)
|
||||||
t.equal(byteDataUtf8.getLength(), 12, 'Should return correct length for utf8 chars')
|
t.equal(byteDataUtf8.getLength(), 12, 'Should return correct length for utf8 chars')
|
||||||
|
|
||||||
t.end()
|
t.end()
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var Utils = require('core/utils')
|
const Utils = require('core/utils')
|
||||||
var Version = require('core/version')
|
const Version = require('core/version')
|
||||||
var ECLevel = require('core/error-correction-level')
|
const ECLevel = require('core/error-correction-level')
|
||||||
var ECCode = require('core/error-correction-code')
|
const ECCode = require('core/error-correction-code')
|
||||||
var Mode = require('core/mode')
|
const Mode = require('core/mode')
|
||||||
|
|
||||||
test('Error correction codewords', function (t) {
|
test('Error correction codewords', function (t) {
|
||||||
var levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
const levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
||||||
|
|
||||||
for (var v = 1; v <= 40; v++) {
|
for (let v = 1; v <= 40; v++) {
|
||||||
var totalCodewords = Utils.getSymbolTotalCodewords(v)
|
const totalCodewords = Utils.getSymbolTotalCodewords(v)
|
||||||
var reservedByte = Math.ceil((Mode.getCharCountIndicator(Mode.BYTE, v) + 4) / 8)
|
const reservedByte = Math.ceil((Mode.getCharCountIndicator(Mode.BYTE, v) + 4) / 8)
|
||||||
|
|
||||||
for (var l = 0; l < levels.length; l++) {
|
for (let l = 0; l < levels.length; l++) {
|
||||||
var dataCodewords = Version.getCapacity(v, levels[l], Mode.BYTE) + reservedByte
|
const dataCodewords = Version.getCapacity(v, levels[l], Mode.BYTE) + reservedByte
|
||||||
|
|
||||||
var expectedCodewords = totalCodewords - dataCodewords
|
const expectedCodewords = totalCodewords - dataCodewords
|
||||||
|
|
||||||
t.equal(ECCode.getTotalCodewordsCount(v, levels[l]), expectedCodewords,
|
t.equal(ECCode.getTotalCodewordsCount(v, levels[l]), expectedCodewords,
|
||||||
'Should return correct codewords number')
|
'Should return correct codewords number')
|
||||||
|
@ -29,10 +29,10 @@ test('Error correction codewords', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Error correction blocks', function (t) {
|
test('Error correction blocks', function (t) {
|
||||||
var levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
const levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
||||||
|
|
||||||
for (var v = 1; v <= 40; v++) {
|
for (let v = 1; v <= 40; v++) {
|
||||||
for (var l = 0; l < levels.length; l++) {
|
for (let l = 0; l < levels.length; l++) {
|
||||||
t.ok(ECCode.getBlocksCount(v, levels[l]), 'Should return a positive number')
|
t.ok(ECCode.getBlocksCount(v, levels[l]), 'Should return a positive number')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var ECLevel = require('core/error-correction-level')
|
const ECLevel = require('core/error-correction-level')
|
||||||
|
|
||||||
var EC_LEVELS = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
const EC_LEVELS = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
||||||
|
|
||||||
test('Error level from input value', function (t) {
|
test('Error level from input value', function (t) {
|
||||||
var values = [['l', 'low'], ['m', 'medium'], ['q', 'quartile'], ['h', 'high']]
|
const values = [['l', 'low'], ['m', 'medium'], ['q', 'quartile'], ['h', 'high']]
|
||||||
|
|
||||||
for (var l = 0; l < values.length; l++) {
|
for (let l = 0; l < values.length; l++) {
|
||||||
for (var i = 0; i < values[l].length; i++) {
|
for (let i = 0; i < values[l].length; i++) {
|
||||||
t.equal(ECLevel.from(values[l][i]), EC_LEVELS[l])
|
t.equal(ECLevel.from(values[l][i]), EC_LEVELS[l])
|
||||||
t.equal(ECLevel.from(values[l][i].toUpperCase()), EC_LEVELS[l])
|
t.equal(ECLevel.from(values[l][i].toUpperCase()), EC_LEVELS[l])
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ test('Error level from input value', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Error level validity', function (t) {
|
test('Error level validity', function (t) {
|
||||||
for (var l = 0; l < EC_LEVELS.length; l++) {
|
for (let l = 0; l < EC_LEVELS.length; l++) {
|
||||||
t.ok(ECLevel.isValid(EC_LEVELS[l]), 'Should return true if error level is valid')
|
t.ok(ECLevel.isValid(EC_LEVELS[l]), 'Should return true if error level is valid')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var pattern = require('core/finder-pattern')
|
const pattern = require('core/finder-pattern')
|
||||||
|
|
||||||
test('Finder pattern', function (t) {
|
test('Finder pattern', function (t) {
|
||||||
for (var i = 1; i <= 40; i++) {
|
for (let i = 1; i <= 40; i++) {
|
||||||
t.equal(pattern.getPositions(i).length, 3, 'Should always return 3 pattern positions')
|
t.equal(pattern.getPositions(i).length, 3, 'Should always return 3 pattern positions')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var FormatInfo = require('core/format-info')
|
const FormatInfo = require('core/format-info')
|
||||||
var ECLevel = require('core/error-correction-level')
|
const ECLevel = require('core/error-correction-level')
|
||||||
var MaskPattern = require('core/mask-pattern')
|
const MaskPattern = require('core/mask-pattern')
|
||||||
|
|
||||||
var EXPECTED_FORMAT_BITS = [
|
const EXPECTED_FORMAT_BITS = [
|
||||||
[0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976],
|
[0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976],
|
||||||
[0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0],
|
[0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0],
|
||||||
[0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed],
|
[0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed],
|
||||||
|
@ -11,12 +11,12 @@ var EXPECTED_FORMAT_BITS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
test('Format encoded info', function (t) {
|
test('Format encoded info', function (t) {
|
||||||
var levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
const levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
||||||
var patterns = Object.keys(MaskPattern.Patterns).length
|
const patterns = Object.keys(MaskPattern.Patterns).length
|
||||||
|
|
||||||
for (var l = 0; l < levels.length; l++) {
|
for (let l = 0; l < levels.length; l++) {
|
||||||
for (var p = 0; p < patterns; p++) {
|
for (let p = 0; p < patterns; p++) {
|
||||||
var bch = FormatInfo.getEncodedBits(levels[l], p)
|
const bch = FormatInfo.getEncodedBits(levels[l], p)
|
||||||
t.equal(bch, EXPECTED_FORMAT_BITS[l][p], 'Should return correct bits')
|
t.equal(bch, EXPECTED_FORMAT_BITS[l][p], 'Should return correct bits')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var GF = require('core/galois-field')
|
const GF = require('core/galois-field')
|
||||||
|
|
||||||
test('Galois Field', function (t) {
|
test('Galois Field', function (t) {
|
||||||
t.throw(function () { GF.log(0) }, 'Should throw for log(n) with n < 1')
|
t.throw(function () { GF.log(0) }, 'Should throw for log(n) with n < 1')
|
||||||
|
|
||||||
for (var i = 1; i < 255; i++) {
|
for (let i = 1; i < 255; i++) {
|
||||||
t.equal(GF.log(GF.exp(i)), i, 'log and exp should be one the inverse of the other')
|
t.equal(GF.log(GF.exp(i)), i, 'log and exp should be one the inverse of the other')
|
||||||
t.equal(GF.exp(GF.log(i)), i, 'exp and log should be one the inverse of the other')
|
t.equal(GF.exp(GF.log(i)), i, 'exp and log should be one the inverse of the other')
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ test('Galois Field', function (t) {
|
||||||
t.equal(GF.mul(1, 0), 0, 'Should return 0 if second param is 0')
|
t.equal(GF.mul(1, 0), 0, 'Should return 0 if second param is 0')
|
||||||
t.equal(GF.mul(0, 0), 0, 'Should return 0 if both params are 0')
|
t.equal(GF.mul(0, 0), 0, 'Should return 0 if both params are 0')
|
||||||
|
|
||||||
for (var j = 1; j < 255; j++) {
|
for (let j = 1; j < 255; j++) {
|
||||||
t.equal(GF.mul(j, 255 - j), GF.mul(255 - j, j), 'Multiplication should be commutative')
|
t.equal(GF.mul(j, 255 - j), GF.mul(255 - j, j), 'Multiplication should be commutative')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var BitBuffer = require('core/bit-buffer')
|
const BitBuffer = require('core/bit-buffer')
|
||||||
var KanjiData = require('core/kanji-data')
|
const KanjiData = require('core/kanji-data')
|
||||||
var Mode = require('core/mode')
|
const Mode = require('core/mode')
|
||||||
var toSJIS = require('helper/to-sjis')
|
const toSJIS = require('helper/to-sjis')
|
||||||
require('core/utils').setToSJISFunction(toSJIS)
|
require('core/utils').setToSJISFunction(toSJIS)
|
||||||
|
|
||||||
test('Kanji Data', function (t) {
|
test('Kanji Data', function (t) {
|
||||||
var data = '漢字漾癶'
|
const data = '漢字漾癶'
|
||||||
var length = 4
|
const length = 4
|
||||||
var bitLength = 52 // length * 13
|
const bitLength = 52 // length * 13
|
||||||
|
|
||||||
var dataBit = [57, 250, 134, 174, 129, 134, 0]
|
const dataBit = [57, 250, 134, 174, 129, 134, 0]
|
||||||
|
|
||||||
var kanjiData = new KanjiData(data)
|
let kanjiData = new KanjiData(data)
|
||||||
|
|
||||||
t.equal(kanjiData.mode, Mode.KANJI, 'Mode should be KANJI')
|
t.equal(kanjiData.mode, Mode.KANJI, 'Mode should be KANJI')
|
||||||
t.equal(kanjiData.getLength(), length, 'Should return correct length')
|
t.equal(kanjiData.getLength(), length, 'Should return correct length')
|
||||||
t.equal(kanjiData.getBitsLength(), bitLength, 'Should return correct bit length')
|
t.equal(kanjiData.getBitsLength(), bitLength, 'Should return correct bit length')
|
||||||
|
|
||||||
var bitBuffer = new BitBuffer()
|
let bitBuffer = new BitBuffer()
|
||||||
kanjiData.write(bitBuffer)
|
kanjiData.write(bitBuffer)
|
||||||
t.deepEqual(bitBuffer.buffer, dataBit, 'Should write correct data to buffer')
|
t.deepEqual(bitBuffer.buffer, dataBit, 'Should write correct data to buffer')
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var BitMatrix = require('core/bit-matrix')
|
const BitMatrix = require('core/bit-matrix')
|
||||||
var MaskPattern = require('core/mask-pattern')
|
const MaskPattern = require('core/mask-pattern')
|
||||||
|
|
||||||
test('Mask pattern - Pattern references', function (t) {
|
test('Mask pattern - Pattern references', function (t) {
|
||||||
var patternsCount = Object.keys(MaskPattern.Patterns).length
|
const patternsCount = Object.keys(MaskPattern.Patterns).length
|
||||||
t.equals(patternsCount, 8, 'Should return 8 patterns')
|
t.equals(patternsCount, 8, 'Should return 8 patterns')
|
||||||
|
|
||||||
t.end()
|
t.end()
|
||||||
})
|
})
|
||||||
|
|
||||||
var expectedPattern000 = [
|
const expectedPattern000 = [
|
||||||
1, 0, 1, 0, 1, 0,
|
1, 0, 1, 0, 1, 0,
|
||||||
0, 1, 0, 1, 0, 1,
|
0, 1, 0, 1, 0, 1,
|
||||||
1, 0, 1, 0, 1, 0,
|
1, 0, 1, 0, 1, 0,
|
||||||
|
@ -18,7 +18,7 @@ var expectedPattern000 = [
|
||||||
0, 1, 0, 1, 0, 1
|
0, 1, 0, 1, 0, 1
|
||||||
]
|
]
|
||||||
|
|
||||||
var expectedPattern001 = [
|
const expectedPattern001 = [
|
||||||
1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1,
|
||||||
0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0,
|
||||||
1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1,
|
||||||
|
@ -27,7 +27,7 @@ var expectedPattern001 = [
|
||||||
0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0
|
||||||
]
|
]
|
||||||
|
|
||||||
var expectedPattern010 = [
|
const expectedPattern010 = [
|
||||||
1, 0, 0, 1, 0, 0,
|
1, 0, 0, 1, 0, 0,
|
||||||
1, 0, 0, 1, 0, 0,
|
1, 0, 0, 1, 0, 0,
|
||||||
1, 0, 0, 1, 0, 0,
|
1, 0, 0, 1, 0, 0,
|
||||||
|
@ -36,7 +36,7 @@ var expectedPattern010 = [
|
||||||
1, 0, 0, 1, 0, 0
|
1, 0, 0, 1, 0, 0
|
||||||
]
|
]
|
||||||
|
|
||||||
var expectedPattern011 = [
|
const expectedPattern011 = [
|
||||||
1, 0, 0, 1, 0, 0,
|
1, 0, 0, 1, 0, 0,
|
||||||
0, 0, 1, 0, 0, 1,
|
0, 0, 1, 0, 0, 1,
|
||||||
0, 1, 0, 0, 1, 0,
|
0, 1, 0, 0, 1, 0,
|
||||||
|
@ -45,7 +45,7 @@ var expectedPattern011 = [
|
||||||
0, 1, 0, 0, 1, 0
|
0, 1, 0, 0, 1, 0
|
||||||
]
|
]
|
||||||
|
|
||||||
var expectedPattern100 = [
|
const expectedPattern100 = [
|
||||||
1, 1, 1, 0, 0, 0,
|
1, 1, 1, 0, 0, 0,
|
||||||
1, 1, 1, 0, 0, 0,
|
1, 1, 1, 0, 0, 0,
|
||||||
0, 0, 0, 1, 1, 1,
|
0, 0, 0, 1, 1, 1,
|
||||||
|
@ -54,7 +54,7 @@ var expectedPattern100 = [
|
||||||
1, 1, 1, 0, 0, 0
|
1, 1, 1, 0, 0, 0
|
||||||
]
|
]
|
||||||
|
|
||||||
var expectedPattern101 = [
|
const expectedPattern101 = [
|
||||||
1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1,
|
||||||
1, 0, 0, 0, 0, 0,
|
1, 0, 0, 0, 0, 0,
|
||||||
1, 0, 0, 1, 0, 0,
|
1, 0, 0, 1, 0, 0,
|
||||||
|
@ -63,7 +63,7 @@ var expectedPattern101 = [
|
||||||
1, 0, 0, 0, 0, 0
|
1, 0, 0, 0, 0, 0
|
||||||
]
|
]
|
||||||
|
|
||||||
var expectedPattern110 = [
|
const expectedPattern110 = [
|
||||||
1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 0, 0, 0,
|
1, 1, 1, 0, 0, 0,
|
||||||
1, 1, 0, 1, 1, 0,
|
1, 1, 0, 1, 1, 0,
|
||||||
|
@ -72,7 +72,7 @@ var expectedPattern110 = [
|
||||||
1, 0, 0, 0, 1, 1
|
1, 0, 0, 0, 1, 1
|
||||||
]
|
]
|
||||||
|
|
||||||
var expectedPattern111 = [
|
const expectedPattern111 = [
|
||||||
1, 0, 1, 0, 1, 0,
|
1, 0, 1, 0, 1, 0,
|
||||||
0, 0, 0, 1, 1, 1,
|
0, 0, 0, 1, 1, 1,
|
||||||
1, 0, 0, 0, 1, 1,
|
1, 0, 0, 0, 1, 1,
|
||||||
|
@ -100,19 +100,19 @@ test('MaskPattern from value', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Mask pattern - Apply mask', function (t) {
|
test('Mask pattern - Apply mask', function (t) {
|
||||||
var patterns = Object.keys(MaskPattern.Patterns).length
|
const patterns = Object.keys(MaskPattern.Patterns).length
|
||||||
var expectedPatterns = [
|
const expectedPatterns = [
|
||||||
expectedPattern000, expectedPattern001, expectedPattern010, expectedPattern011,
|
expectedPattern000, expectedPattern001, expectedPattern010, expectedPattern011,
|
||||||
expectedPattern100, expectedPattern101, expectedPattern110, expectedPattern111
|
expectedPattern100, expectedPattern101, expectedPattern110, expectedPattern111
|
||||||
]
|
]
|
||||||
|
|
||||||
for (var p = 0; p < patterns; p++) {
|
for (let p = 0; p < patterns; p++) {
|
||||||
var matrix = new BitMatrix(6)
|
const matrix = new BitMatrix(6)
|
||||||
MaskPattern.applyMask(p, matrix)
|
MaskPattern.applyMask(p, matrix)
|
||||||
t.deepEqual(matrix.data, new Uint8Array(expectedPatterns[p]), 'Should return correct pattern')
|
t.deepEqual(matrix.data, new Uint8Array(expectedPatterns[p]), 'Should return correct pattern')
|
||||||
}
|
}
|
||||||
|
|
||||||
matrix = new BitMatrix(2)
|
const matrix = new BitMatrix(2)
|
||||||
matrix.set(0, 0, false, true)
|
matrix.set(0, 0, false, true)
|
||||||
matrix.set(0, 1, false, true)
|
matrix.set(0, 1, false, true)
|
||||||
matrix.set(1, 0, false, true)
|
matrix.set(1, 0, false, true)
|
||||||
|
@ -127,7 +127,7 @@ test('Mask pattern - Apply mask', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Mask pattern - Penalty N1', function (t) {
|
test('Mask pattern - Penalty N1', function (t) {
|
||||||
var matrix = new BitMatrix(11)
|
let matrix = new BitMatrix(11)
|
||||||
matrix.data = [
|
matrix.data = [
|
||||||
1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
|
1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
|
||||||
1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
|
1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
|
||||||
|
@ -170,7 +170,7 @@ test('Mask pattern - Penalty N1', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Mask pattern - Penalty N2', function (t) {
|
test('Mask pattern - Penalty N2', function (t) {
|
||||||
var matrix = new BitMatrix(8)
|
let matrix = new BitMatrix(8)
|
||||||
matrix.data = [
|
matrix.data = [
|
||||||
1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
1, 1, 1, 0, 0, 0, 1, 1,
|
1, 1, 1, 0, 0, 0, 1, 1,
|
||||||
|
@ -205,7 +205,7 @@ test('Mask pattern - Penalty N2', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Mask pattern - Penalty N3', function (t) {
|
test('Mask pattern - Penalty N3', function (t) {
|
||||||
var matrix = new BitMatrix(11)
|
const matrix = new BitMatrix(11)
|
||||||
matrix.data = [
|
matrix.data = [
|
||||||
0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
|
0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
|
||||||
0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
|
0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
|
||||||
|
@ -244,19 +244,19 @@ test('Mask pattern - Penalty N3', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Mask pattern - Penalty N4', function (t) {
|
test('Mask pattern - Penalty N4', function (t) {
|
||||||
var matrix = new BitMatrix(10)
|
const matrix = new BitMatrix(10)
|
||||||
matrix.data = new Array(50).fill(1).concat(new Array(50).fill(0))
|
matrix.data = new Array(50).fill(1).concat(new Array(50).fill(0))
|
||||||
|
|
||||||
t.equals(MaskPattern.getPenaltyN4(matrix), 0,
|
t.equals(MaskPattern.getPenaltyN4(matrix), 0,
|
||||||
'Should return correct penalty points')
|
'Should return correct penalty points')
|
||||||
|
|
||||||
var matrix2 = new BitMatrix(21)
|
const matrix2 = new BitMatrix(21)
|
||||||
matrix2.data = new Array(190).fill(1).concat(new Array(251).fill(0))
|
matrix2.data = new Array(190).fill(1).concat(new Array(251).fill(0))
|
||||||
|
|
||||||
t.equals(MaskPattern.getPenaltyN4(matrix2), 10,
|
t.equals(MaskPattern.getPenaltyN4(matrix2), 10,
|
||||||
'Should return correct penalty points')
|
'Should return correct penalty points')
|
||||||
|
|
||||||
var matrix3 = new BitMatrix(10)
|
const matrix3 = new BitMatrix(10)
|
||||||
matrix3.data = new Array(22).fill(1).concat(new Array(78).fill(0))
|
matrix3.data = new Array(22).fill(1).concat(new Array(78).fill(0))
|
||||||
|
|
||||||
t.equals(MaskPattern.getPenaltyN4(matrix3), 50,
|
t.equals(MaskPattern.getPenaltyN4(matrix3), 50,
|
||||||
|
@ -266,7 +266,7 @@ test('Mask pattern - Penalty N4', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Mask pattern - Best mask', function (t) {
|
test('Mask pattern - Best mask', function (t) {
|
||||||
var matrix = new BitMatrix(11)
|
const matrix = new BitMatrix(11)
|
||||||
matrix.data = [
|
matrix.data = [
|
||||||
0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
|
0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
|
||||||
0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
|
0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
|
||||||
|
@ -281,7 +281,7 @@ test('Mask pattern - Best mask', function (t) {
|
||||||
1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0
|
1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0
|
||||||
]
|
]
|
||||||
|
|
||||||
var mask = MaskPattern.getBestMask(matrix, function () {})
|
const mask = MaskPattern.getBestMask(matrix, function () {})
|
||||||
t.ok(!isNaN(mask), 'Should return a number')
|
t.ok(!isNaN(mask), 'Should return a number')
|
||||||
|
|
||||||
t.ok(mask >= 0 && mask < 8,
|
t.ok(mask >= 0 && mask < 8,
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var Mode = require('core/mode')
|
const Mode = require('core/mode')
|
||||||
|
|
||||||
test('Mode bits', function (t) {
|
test('Mode bits', function (t) {
|
||||||
var EXPECTED_BITS = {
|
const EXPECTED_BITS = {
|
||||||
numeric: 1,
|
numeric: 1,
|
||||||
alphanumeric: 2,
|
alphanumeric: 2,
|
||||||
byte: 4,
|
byte: 4,
|
||||||
|
@ -20,14 +20,14 @@ test('Mode bits', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Char count bits', function (t) {
|
test('Char count bits', function (t) {
|
||||||
var EXPECTED_BITS = {
|
const EXPECTED_BITS = {
|
||||||
numeric: [10, 12, 14],
|
numeric: [10, 12, 14],
|
||||||
alphanumeric: [9, 11, 13],
|
alphanumeric: [9, 11, 13],
|
||||||
byte: [8, 16, 16],
|
byte: [8, 16, 16],
|
||||||
kanji: [8, 10, 12]
|
kanji: [8, 10, 12]
|
||||||
}
|
}
|
||||||
|
|
||||||
var v
|
let v
|
||||||
for (v = 1; v < 10; v++) {
|
for (v = 1; v < 10; v++) {
|
||||||
t.equal(Mode.getCharCountIndicator(Mode.NUMERIC, v), EXPECTED_BITS.numeric[0])
|
t.equal(Mode.getCharCountIndicator(Mode.NUMERIC, v), EXPECTED_BITS.numeric[0])
|
||||||
t.equal(Mode.getCharCountIndicator(Mode.ALPHANUMERIC, v), EXPECTED_BITS.alphanumeric[0])
|
t.equal(Mode.getCharCountIndicator(Mode.ALPHANUMERIC, v), EXPECTED_BITS.alphanumeric[0])
|
||||||
|
@ -60,7 +60,7 @@ test('Char count bits', function (t) {
|
||||||
|
|
||||||
test('Best mode', function (t) {
|
test('Best mode', function (t) {
|
||||||
/* eslint-disable quote-props */
|
/* eslint-disable quote-props */
|
||||||
var EXPECTED_MODE = {
|
const EXPECTED_MODE = {
|
||||||
'12345': Mode.NUMERIC,
|
'12345': Mode.NUMERIC,
|
||||||
'abcde': Mode.BYTE,
|
'abcde': Mode.BYTE,
|
||||||
'1234a': Mode.BYTE,
|
'1234a': Mode.BYTE,
|
||||||
|
@ -94,14 +94,14 @@ test('Is valid', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('From value', function (t) {
|
test('From value', function (t) {
|
||||||
var modes = [
|
const modes = [
|
||||||
{ name: 'numeric', mode: Mode.NUMERIC },
|
{ name: 'numeric', mode: Mode.NUMERIC },
|
||||||
{ name: 'alphanumeric', mode: Mode.ALPHANUMERIC },
|
{ name: 'alphanumeric', mode: Mode.ALPHANUMERIC },
|
||||||
{ name: 'kanji', mode: Mode.KANJI },
|
{ name: 'kanji', mode: Mode.KANJI },
|
||||||
{ name: 'byte', mode: Mode.BYTE }
|
{ name: 'byte', mode: Mode.BYTE }
|
||||||
]
|
]
|
||||||
|
|
||||||
for (var m = 0; m < modes.length; m++) {
|
for (let m = 0; m < modes.length; m++) {
|
||||||
t.equal(Mode.from(modes[m].name), modes[m].mode)
|
t.equal(Mode.from(modes[m].name), modes[m].mode)
|
||||||
t.equal(Mode.from(modes[m].name.toUpperCase()), modes[m].mode)
|
t.equal(Mode.from(modes[m].name.toUpperCase()), modes[m].mode)
|
||||||
t.equal(Mode.from(modes[m].mode), modes[m].mode)
|
t.equal(Mode.from(modes[m].mode), modes[m].mode)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var BitBuffer = require('core/bit-buffer')
|
const BitBuffer = require('core/bit-buffer')
|
||||||
var NumericData = require('core/numeric-data')
|
const NumericData = require('core/numeric-data')
|
||||||
var Mode = require('core/mode')
|
const Mode = require('core/mode')
|
||||||
|
|
||||||
var testData = [
|
const testData = [
|
||||||
{
|
{
|
||||||
data: 8,
|
data: 8,
|
||||||
length: 1,
|
length: 1,
|
||||||
|
@ -39,13 +39,13 @@ var testData = [
|
||||||
|
|
||||||
test('Numeric Data', function (t) {
|
test('Numeric Data', function (t) {
|
||||||
testData.forEach(function (data) {
|
testData.forEach(function (data) {
|
||||||
var numericData = new NumericData(data.data)
|
const numericData = new NumericData(data.data)
|
||||||
|
|
||||||
t.equal(numericData.mode, Mode.NUMERIC, 'Mode should be NUMERIC')
|
t.equal(numericData.mode, Mode.NUMERIC, 'Mode should be NUMERIC')
|
||||||
t.equal(numericData.getLength(), data.length, 'Should return correct length')
|
t.equal(numericData.getLength(), data.length, 'Should return correct length')
|
||||||
t.equal(numericData.getBitsLength(), data.bitLength, 'Should return correct bit length')
|
t.equal(numericData.getBitsLength(), data.bitLength, 'Should return correct bit length')
|
||||||
|
|
||||||
var bitBuffer = new BitBuffer()
|
const bitBuffer = new BitBuffer()
|
||||||
numericData.write(bitBuffer)
|
numericData.write(bitBuffer)
|
||||||
t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
|
t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var Poly = require('core/polynomial')
|
const Poly = require('core/polynomial')
|
||||||
|
|
||||||
test('Generator polynomial', function (t) {
|
test('Generator polynomial', function (t) {
|
||||||
var result = Poly.generateECPolynomial(0)
|
const result = Poly.generateECPolynomial(0)
|
||||||
t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
|
t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
|
||||||
t.deepEqual(result, new Uint8Array([1]), 'Should return coeff [1] for polynomial of degree 0')
|
t.deepEqual(result, new Uint8Array([1]), 'Should return coeff [1] for polynomial of degree 0')
|
||||||
|
|
||||||
for (var e = 2; e <= 68; e++) {
|
for (let e = 2; e <= 68; e++) {
|
||||||
t.equal(Poly.generateECPolynomial(e).length, e + 1, 'Should return a number of coefficients equal to (degree + 1)')
|
t.equal(Poly.generateECPolynomial(e).length, e + 1, 'Should return a number of coefficients equal to (degree + 1)')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,10 +14,10 @@ test('Generator polynomial', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Polynomial', function (t) {
|
test('Polynomial', function (t) {
|
||||||
var p1 = [0, 1, 2, 3, 4]
|
const p1 = [0, 1, 2, 3, 4]
|
||||||
var p2 = [5, 6]
|
const p2 = [5, 6]
|
||||||
|
|
||||||
var result = Poly.mul(p1, p2)
|
let result = Poly.mul(p1, p2)
|
||||||
t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
|
t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
|
||||||
t.equal(result.length, 6, 'Should return correct number of coefficients')
|
t.equal(result.length, 6, 'Should return correct number of coefficients')
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var ECLevel = require('core/error-correction-level')
|
const ECLevel = require('core/error-correction-level')
|
||||||
var Version = require('core/version')
|
const Version = require('core/version')
|
||||||
var QRCode = require('core/qrcode')
|
const QRCode = require('core/qrcode')
|
||||||
var toSJIS = require('helper/to-sjis')
|
const toSJIS = require('helper/to-sjis')
|
||||||
|
|
||||||
test('QRCode interface', function (t) {
|
test('QRCode interface', function (t) {
|
||||||
t.type(QRCode.create, 'function', 'Should have "create" function')
|
t.type(QRCode.create, 'function', 'Should have "create" function')
|
||||||
t.throw(function () { QRCode.create() }, 'Should throw if no data is provided')
|
t.throw(function () { QRCode.create() }, 'Should throw if no data is provided')
|
||||||
t.notThrow(function () { QRCode.create('1234567') }, 'Should not throw')
|
t.notThrow(function () { QRCode.create('1234567') }, 'Should not throw')
|
||||||
|
|
||||||
var qr = QRCode.create('a123456A', {
|
let qr = QRCode.create('a123456A', {
|
||||||
version: 1,
|
version: 1,
|
||||||
maskPattern: 1,
|
maskPattern: 1,
|
||||||
errorCorrectionLevel: 'H'
|
errorCorrectionLevel: 'H'
|
||||||
|
@ -17,7 +17,7 @@ test('QRCode interface', function (t) {
|
||||||
t.equal(qr.modules.size, 21, 'Should return correct modules count')
|
t.equal(qr.modules.size, 21, 'Should return correct modules count')
|
||||||
t.equal(qr.maskPattern, 1, 'Should return correct mask pattern')
|
t.equal(qr.maskPattern, 1, 'Should return correct mask pattern')
|
||||||
|
|
||||||
var darkModule = qr.modules.get(qr.modules.size - 8, 8)
|
const darkModule = qr.modules.get(qr.modules.size - 8, 8)
|
||||||
t.ok(darkModule, 'Should have a dark module at coords [size-8][8]')
|
t.ok(darkModule, 'Should have a dark module at coords [size-8][8]')
|
||||||
|
|
||||||
t.throw(function () {
|
t.throw(function () {
|
||||||
|
@ -46,16 +46,16 @@ test('QRCode interface', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('QRCode error correction', function (t) {
|
test('QRCode error correction', function (t) {
|
||||||
var qr
|
let qr
|
||||||
var ecValues = [
|
const ecValues = [
|
||||||
{ name: ['l', 'low'], level: ECLevel.L },
|
{ name: ['l', 'low'], level: ECLevel.L },
|
||||||
{ name: ['m', 'medium'], level: ECLevel.M },
|
{ name: ['m', 'medium'], level: ECLevel.M },
|
||||||
{ name: ['q', 'quartile'], level: ECLevel.Q },
|
{ name: ['q', 'quartile'], level: ECLevel.Q },
|
||||||
{ name: ['h', 'high'], level: ECLevel.H }
|
{ name: ['h', 'high'], level: ECLevel.H }
|
||||||
]
|
]
|
||||||
|
|
||||||
for (var l = 0; l < ecValues.length; l++) {
|
for (let l = 0; l < ecValues.length; l++) {
|
||||||
for (var i = 0; i < ecValues[l].name.length; i++) {
|
for (let i = 0; i < ecValues[l].name.length; i++) {
|
||||||
t.notThrow(function () {
|
t.notThrow(function () {
|
||||||
qr = QRCode.create('ABCDEFG', { errorCorrectionLevel: ecValues[l].name[i] })
|
qr = QRCode.create('ABCDEFG', { errorCorrectionLevel: ecValues[l].name[i] })
|
||||||
}, 'Should accept errorCorrectionLevel value: ' + ecValues[l].name[i])
|
}, 'Should accept errorCorrectionLevel value: ' + ecValues[l].name[i])
|
||||||
|
@ -79,7 +79,7 @@ test('QRCode error correction', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('QRCode version', function (t) {
|
test('QRCode version', function (t) {
|
||||||
var qr = QRCode.create('data', { version: 9, errorCorrectionLevel: ECLevel.M })
|
let qr = QRCode.create('data', { version: 9, errorCorrectionLevel: ECLevel.M })
|
||||||
|
|
||||||
t.equal(qr.version, 9, 'Should create qrcode with correct version')
|
t.equal(qr.version, 9, 'Should create qrcode with correct version')
|
||||||
t.equal(qr.errorCorrectionLevel, ECLevel.M, 'Should set correct EC level')
|
t.equal(qr.errorCorrectionLevel, ECLevel.M, 'Should set correct EC level')
|
||||||
|
@ -102,7 +102,7 @@ test('QRCode version', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('QRCode capacity', function (t) {
|
test('QRCode capacity', function (t) {
|
||||||
var qr
|
let qr
|
||||||
|
|
||||||
qr = QRCode.create([{ data: 'abcdefg', mode: 'byte' }])
|
qr = QRCode.create([{ data: 'abcdefg', mode: 'byte' }])
|
||||||
t.equal(qr.version, 1, 'Should contain 7 byte characters')
|
t.equal(qr.version, 1, 'Should contain 7 byte characters')
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var RS = require('core/reed-solomon-encoder')
|
const RS = require('core/reed-solomon-encoder')
|
||||||
|
|
||||||
test('Reed-Solomon encoder', function (t) {
|
test('Reed-Solomon encoder', function (t) {
|
||||||
var enc = new RS()
|
let enc = new RS()
|
||||||
|
|
||||||
t.notOk(enc.genPoly, 'Should have an undefined generator polynomial')
|
t.notOk(enc.genPoly, 'Should have an undefined generator polynomial')
|
||||||
t.throw(function () { enc.encode([]) }, 'Should throw if generator polynomial is undefined')
|
t.throw(function () { enc.encode([]) }, 'Should throw if generator polynomial is undefined')
|
||||||
|
@ -11,11 +11,11 @@ test('Reed-Solomon encoder', function (t) {
|
||||||
t.equal(enc.degree, 2, 'Should set correct degree value')
|
t.equal(enc.degree, 2, 'Should set correct degree value')
|
||||||
t.ok(enc.genPoly, 'Generator polynomial should be defined')
|
t.ok(enc.genPoly, 'Generator polynomial should be defined')
|
||||||
|
|
||||||
var result = enc.encode(new Uint8Array([48, 49, 50, 51, 52]))
|
const result = enc.encode(new Uint8Array([48, 49, 50, 51, 52]))
|
||||||
t.equal(result.length, 2, 'Should return a number of codewords equal to gen poly degree')
|
t.equal(result.length, 2, 'Should return a number of codewords equal to gen poly degree')
|
||||||
|
|
||||||
enc = new RS(2)
|
enc = new RS(2)
|
||||||
var genPoly = enc.genPoly
|
const genPoly = enc.genPoly
|
||||||
t.equal(enc.degree, 2, 'Should set correct degree value')
|
t.equal(enc.degree, 2, 'Should set correct degree value')
|
||||||
t.ok(genPoly, 'Generator polynomial should be defined')
|
t.ok(genPoly, 'Generator polynomial should be defined')
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var Regex = require('core/regex')
|
const Regex = require('core/regex')
|
||||||
|
|
||||||
test('Regex', function (t) {
|
test('Regex', function (t) {
|
||||||
t.ok(Regex.NUMERIC instanceof RegExp,
|
t.ok(Regex.NUMERIC instanceof RegExp,
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var Mode = require('core/mode')
|
const Mode = require('core/mode')
|
||||||
var Segments = require('core/segments')
|
const Segments = require('core/segments')
|
||||||
var NumericData = require('core/numeric-data')
|
const NumericData = require('core/numeric-data')
|
||||||
var AlphanumericData = require('core/alphanumeric-data')
|
const AlphanumericData = require('core/alphanumeric-data')
|
||||||
var ByteData = require('core/byte-data')
|
const ByteData = require('core/byte-data')
|
||||||
var toSJIS = require('helper/to-sjis')
|
const toSJIS = require('helper/to-sjis')
|
||||||
var Utils = require('core/utils')
|
const Utils = require('core/utils')
|
||||||
|
|
||||||
var testData = [
|
let testData = [
|
||||||
{
|
{
|
||||||
input: '1A1',
|
input: '1A1',
|
||||||
result: [{ data: '1A1', mode: Mode.ALPHANUMERIC }]
|
result: [{ data: '1A1', mode: Mode.ALPHANUMERIC }]
|
||||||
|
@ -135,7 +135,7 @@ var testData = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
var kanjiTestData = [
|
const kanjiTestData = [
|
||||||
{
|
{
|
||||||
input: '乂ЁЖぞβ',
|
input: '乂ЁЖぞβ',
|
||||||
result: [{ data: '乂ЁЖぞβ', mode: Mode.KANJI }]
|
result: [{ data: '乂ЁЖぞβ', mode: Mode.KANJI }]
|
||||||
|
@ -209,7 +209,7 @@ test('Segments optimization', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Segments raw split', function (t) {
|
test('Segments raw split', function (t) {
|
||||||
var splitted = [
|
const splitted = [
|
||||||
new ByteData('abc'),
|
new ByteData('abc'),
|
||||||
new AlphanumericData('DEF'),
|
new AlphanumericData('DEF'),
|
||||||
new NumericData('123')
|
new NumericData('123')
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var Utils = require('core/utils')
|
const Utils = require('core/utils')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* QR Code sizes. Each element refers to a version
|
* QR Code sizes. Each element refers to a version
|
||||||
* @type {Array}
|
* @type {Array}
|
||||||
*/
|
*/
|
||||||
var EXPECTED_SYMBOL_SIZES = [
|
const EXPECTED_SYMBOL_SIZES = [
|
||||||
21, 25, 29, 33, 37, 41, 45,
|
21, 25, 29, 33, 37, 41, 45,
|
||||||
49, 53, 57, 61, 65, 69, 73,
|
49, 53, 57, 61, 65, 69, 73,
|
||||||
77, 81, 85, 89, 93, 97, 101,
|
77, 81, 85, 89, 93, 97, 101,
|
||||||
|
@ -18,7 +18,7 @@ test('Symbol size', function (t) {
|
||||||
t.throws(function () { Utils.getSymbolSize(0) }, 'Should throw if version is not in range')
|
t.throws(function () { Utils.getSymbolSize(0) }, 'Should throw if version is not in range')
|
||||||
t.throws(function () { Utils.getSymbolSize(41) }, 'Should throw if version is not in range')
|
t.throws(function () { Utils.getSymbolSize(41) }, 'Should throw if version is not in range')
|
||||||
|
|
||||||
for (var i = 1; i <= 40; i++) {
|
for (let i = 1; i <= 40; i++) {
|
||||||
t.equal(Utils.getSymbolSize(i), EXPECTED_SYMBOL_SIZES[i - 1], 'Should return correct symbol size')
|
t.equal(Utils.getSymbolSize(i), EXPECTED_SYMBOL_SIZES[i - 1], 'Should return correct symbol size')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ test('Symbol size', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Symbol codewords', function (t) {
|
test('Symbol codewords', function (t) {
|
||||||
for (var i = 1; i <= 40; i++) {
|
for (let i = 1; i <= 40; i++) {
|
||||||
t.ok(Utils.getSymbolTotalCodewords(i), 'Should return positive number')
|
t.ok(Utils.getSymbolTotalCodewords(i), 'Should return positive number')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ test('Symbol codewords', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('BCH Digit', function (t) {
|
test('BCH Digit', function (t) {
|
||||||
var testData = [
|
const testData = [
|
||||||
{ data: 0, bch: 0 },
|
{ data: 0, bch: 0 },
|
||||||
{ data: 1, bch: 1 },
|
{ data: 1, bch: 1 },
|
||||||
{ data: 2, bch: 2 },
|
{ data: 2, bch: 2 },
|
||||||
|
@ -57,7 +57,7 @@ test('Set/Get SJIS function', function (t) {
|
||||||
t.notOk(Utils.isKanjiModeEnabled(),
|
t.notOk(Utils.isKanjiModeEnabled(),
|
||||||
'Kanji mode should be disabled if "toSJIS" function is not set')
|
'Kanji mode should be disabled if "toSJIS" function is not set')
|
||||||
|
|
||||||
var testFunc = function testFunc (c) {
|
const testFunc = function testFunc (c) {
|
||||||
return 'test_' + c
|
return 'test_' + c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var Version = require('core/version')
|
const Version = require('core/version')
|
||||||
var VersionCheck = require('core/version-check')
|
const VersionCheck = require('core/version-check')
|
||||||
var ECLevel = require('core/error-correction-level')
|
const ECLevel = require('core/error-correction-level')
|
||||||
var Mode = require('core/mode')
|
const Mode = require('core/mode')
|
||||||
var NumericData = require('core/numeric-data')
|
const NumericData = require('core/numeric-data')
|
||||||
var AlphanumericData = require('core/alphanumeric-data')
|
const AlphanumericData = require('core/alphanumeric-data')
|
||||||
var KanjiData = require('core/kanji-data')
|
const KanjiData = require('core/kanji-data')
|
||||||
var ByteData = require('core/byte-data')
|
const ByteData = require('core/byte-data')
|
||||||
|
|
||||||
var EC_LEVELS = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
const EC_LEVELS = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
||||||
|
|
||||||
var EXPECTED_NUMERIC_CAPACITY = [
|
const EXPECTED_NUMERIC_CAPACITY = [
|
||||||
[41, 34, 27, 17], [77, 63, 48, 34], [127, 101, 77, 58], [187, 149, 111, 82],
|
[41, 34, 27, 17], [77, 63, 48, 34], [127, 101, 77, 58], [187, 149, 111, 82],
|
||||||
[255, 202, 144, 106], [322, 255, 178, 139], [370, 293, 207, 154], [461, 365, 259, 202],
|
[255, 202, 144, 106], [322, 255, 178, 139], [370, 293, 207, 154], [461, 365, 259, 202],
|
||||||
[552, 432, 312, 235], [652, 513, 364, 288], [772, 604, 427, 331], [883, 691, 489, 374],
|
[552, 432, 312, 235], [652, 513, 364, 288], [772, 604, 427, 331], [883, 691, 489, 374],
|
||||||
|
@ -23,7 +23,7 @@ var EXPECTED_NUMERIC_CAPACITY = [
|
||||||
[6153, 4775, 3417, 2625], [6479, 5039, 3599, 2735], [6743, 5313, 3791, 2927], [7089, 5596, 3993, 3057]
|
[6153, 4775, 3417, 2625], [6479, 5039, 3599, 2735], [6743, 5313, 3791, 2927], [7089, 5596, 3993, 3057]
|
||||||
]
|
]
|
||||||
|
|
||||||
var EXPECTED_ALPHANUMERIC_CAPACITY = [
|
const EXPECTED_ALPHANUMERIC_CAPACITY = [
|
||||||
[25, 20, 16, 10], [47, 38, 29, 20], [77, 61, 47, 35], [114, 90, 67, 50],
|
[25, 20, 16, 10], [47, 38, 29, 20], [77, 61, 47, 35], [114, 90, 67, 50],
|
||||||
[154, 122, 87, 64], [195, 154, 108, 84], [224, 178, 125, 93], [279, 221, 157, 122],
|
[154, 122, 87, 64], [195, 154, 108, 84], [224, 178, 125, 93], [279, 221, 157, 122],
|
||||||
[335, 262, 189, 143], [395, 311, 221, 174], [468, 366, 259, 200], [535, 419, 296, 227],
|
[335, 262, 189, 143], [395, 311, 221, 174], [468, 366, 259, 200], [535, 419, 296, 227],
|
||||||
|
@ -36,7 +36,7 @@ var EXPECTED_ALPHANUMERIC_CAPACITY = [
|
||||||
[3729, 2894, 2071, 1591], [3927, 3054, 2181, 1658], [4087, 3220, 2298, 1774], [4296, 3391, 2420, 1852]
|
[3729, 2894, 2071, 1591], [3927, 3054, 2181, 1658], [4087, 3220, 2298, 1774], [4296, 3391, 2420, 1852]
|
||||||
]
|
]
|
||||||
|
|
||||||
var EXPECTED_KANJI_CAPACITY = [
|
const EXPECTED_KANJI_CAPACITY = [
|
||||||
[10, 8, 7, 4], [20, 16, 12, 8], [32, 26, 20, 15], [48, 38, 28, 21],
|
[10, 8, 7, 4], [20, 16, 12, 8], [32, 26, 20, 15], [48, 38, 28, 21],
|
||||||
[65, 52, 37, 27], [82, 65, 45, 36], [95, 75, 53, 39], [118, 93, 66, 52],
|
[65, 52, 37, 27], [82, 65, 45, 36], [95, 75, 53, 39], [118, 93, 66, 52],
|
||||||
[141, 111, 80, 60], [167, 131, 93, 74], [198, 155, 109, 85], [226, 177, 125, 96],
|
[141, 111, 80, 60], [167, 131, 93, 74], [198, 155, 109, 85], [226, 177, 125, 96],
|
||||||
|
@ -49,7 +49,7 @@ var EXPECTED_KANJI_CAPACITY = [
|
||||||
[1577, 1224, 876, 673], [1661, 1292, 923, 701], [1729, 1362, 972, 750], [1817, 1435, 1024, 784]
|
[1577, 1224, 876, 673], [1661, 1292, 923, 701], [1729, 1362, 972, 750], [1817, 1435, 1024, 784]
|
||||||
]
|
]
|
||||||
|
|
||||||
var EXPECTED_BYTE_CAPACITY = [
|
const EXPECTED_BYTE_CAPACITY = [
|
||||||
[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34],
|
[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34],
|
||||||
[106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84],
|
[106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84],
|
||||||
[230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155],
|
[230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155],
|
||||||
|
@ -62,7 +62,7 @@ var EXPECTED_BYTE_CAPACITY = [
|
||||||
[2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]
|
[2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]
|
||||||
]
|
]
|
||||||
|
|
||||||
var EXPECTED_VERSION_BITS = [
|
const EXPECTED_VERSION_BITS = [
|
||||||
0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847, 0x0E60D,
|
0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847, 0x0E60D,
|
||||||
0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683, 0x168C9,
|
0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683, 0x168C9,
|
||||||
0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E, 0x1CC1A, 0x1D33F, 0x1ED75,
|
0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E, 0x1CC1A, 0x1D33F, 0x1ED75,
|
||||||
|
@ -94,8 +94,8 @@ test('Version capacity', function (t) {
|
||||||
t.throws(function () { Version.getCapacity(0) }, 'Should throw if version is not in range')
|
t.throws(function () { Version.getCapacity(0) }, 'Should throw if version is not in range')
|
||||||
t.throws(function () { Version.getCapacity(41) }, 'Should throw if version is not in range')
|
t.throws(function () { Version.getCapacity(41) }, 'Should throw if version is not in range')
|
||||||
|
|
||||||
for (var l = 0; l < EC_LEVELS.length; l++) {
|
for (let l = 0; l < EC_LEVELS.length; l++) {
|
||||||
for (var i = 1; i <= 40; i++) {
|
for (let i = 1; i <= 40; i++) {
|
||||||
t.equal(Version.getCapacity(i, EC_LEVELS[l], Mode.NUMERIC),
|
t.equal(Version.getCapacity(i, EC_LEVELS[l], Mode.NUMERIC),
|
||||||
EXPECTED_NUMERIC_CAPACITY[i - 1][l], 'Should return correct numeric mode capacity')
|
EXPECTED_NUMERIC_CAPACITY[i - 1][l], 'Should return correct numeric mode capacity')
|
||||||
|
|
||||||
|
@ -118,10 +118,10 @@ test('Version capacity', function (t) {
|
||||||
|
|
||||||
test('Version best match', function (t) {
|
test('Version best match', function (t) {
|
||||||
function testBestVersionForCapacity (expectedCapacity, DataCtor) {
|
function testBestVersionForCapacity (expectedCapacity, DataCtor) {
|
||||||
for (var v = 0; v < 40; v++) {
|
for (let v = 0; v < 40; v++) {
|
||||||
for (var l = 0; l < EC_LEVELS.length; l++) {
|
for (let l = 0; l < EC_LEVELS.length; l++) {
|
||||||
var capacity = expectedCapacity[v][l]
|
const capacity = expectedCapacity[v][l]
|
||||||
var data = new DataCtor(new Array(capacity + 1).join('-'))
|
const data = new DataCtor(new Array(capacity + 1).join('-'))
|
||||||
|
|
||||||
t.equal(Version.getBestVersionForData(data, EC_LEVELS[l]), v + 1, 'Should return best version')
|
t.equal(Version.getBestVersionForData(data, EC_LEVELS[l]), v + 1, 'Should return best version')
|
||||||
t.equal(Version.getBestVersionForData([data], EC_LEVELS[l]), v + 1, 'Should return best version')
|
t.equal(Version.getBestVersionForData([data], EC_LEVELS[l]), v + 1, 'Should return best version')
|
||||||
|
@ -135,10 +135,10 @@ test('Version best match', function (t) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < EC_LEVELS.length; i++) {
|
for (let i = 0; i < EC_LEVELS.length; i++) {
|
||||||
var exceededCapacity = expectedCapacity[39][i] + 1
|
const exceededCapacity = expectedCapacity[39][i] + 1
|
||||||
var tooBigData = new DataCtor(new Array(exceededCapacity + 1).join('-'))
|
const tooBigData = new DataCtor(new Array(exceededCapacity + 1).join('-'))
|
||||||
var tooBigDataArray = [
|
const tooBigDataArray = [
|
||||||
new DataCtor(new Array(Math.floor(exceededCapacity / 2)).join('-')),
|
new DataCtor(new Array(Math.floor(exceededCapacity / 2)).join('-')),
|
||||||
new DataCtor(new Array(Math.floor(exceededCapacity / 2) + 1).join('-'))
|
new DataCtor(new Array(Math.floor(exceededCapacity / 2) + 1).join('-'))
|
||||||
]
|
]
|
||||||
|
@ -167,7 +167,7 @@ test('Version best match', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Version encoded info', function (t) {
|
test('Version encoded info', function (t) {
|
||||||
var v
|
let v
|
||||||
|
|
||||||
for (v = 0; v < 7; v++) {
|
for (v = 0; v < 7; v++) {
|
||||||
t.throws(function () { Version.getEncodedBits(v) },
|
t.throws(function () { Version.getEncodedBits(v) },
|
||||||
|
@ -175,7 +175,7 @@ test('Version encoded info', function (t) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (v = 7; v <= 40; v++) {
|
for (v = 7; v <= 40; v++) {
|
||||||
var bch = Version.getEncodedBits(v)
|
const bch = Version.getEncodedBits(v)
|
||||||
t.equal(bch, EXPECTED_VERSION_BITS[v - 7], 'Should return correct bits')
|
t.equal(bch, EXPECTED_VERSION_BITS[v - 7], 'Should return correct bits')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var toSJIS = require('helper/to-sjis')
|
const toSJIS = require('helper/to-sjis')
|
||||||
|
|
||||||
test('SJIS from char', function (t) {
|
test('SJIS from char', function (t) {
|
||||||
t.notOk(toSJIS(''),
|
t.notOk(toSJIS(''),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var { Canvas, createCanvas } = require('canvas')
|
const { Canvas, createCanvas } = require('canvas')
|
||||||
var QRCode = require('core/qrcode')
|
const QRCode = require('core/qrcode')
|
||||||
var CanvasRenderer = require('renderer/canvas')
|
const CanvasRenderer = require('renderer/canvas')
|
||||||
|
|
||||||
test('CanvasRenderer interface', function (t) {
|
test('CanvasRenderer interface', function (t) {
|
||||||
t.type(CanvasRenderer.render, 'function',
|
t.type(CanvasRenderer.render, 'function',
|
||||||
|
@ -23,8 +23,8 @@ test('CanvasRenderer render', function (t) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var canvasEl
|
let canvasEl
|
||||||
|
|
||||||
t.notThrow(function () { canvasEl = CanvasRenderer.render(sampleQrData) },
|
t.notThrow(function () { canvasEl = CanvasRenderer.render(sampleQrData) },
|
||||||
'Should not throw if canvas is not provided')
|
'Should not throw if canvas is not provided')
|
||||||
|
@ -55,8 +55,8 @@ test('CanvasRenderer render', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('CanvasRenderer render to provided canvas', function (t) {
|
test('CanvasRenderer render to provided canvas', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var canvasEl = createCanvas(200, 200)
|
const canvasEl = createCanvas(200, 200)
|
||||||
|
|
||||||
t.notThrow(function () { CanvasRenderer.render(sampleQrData, canvasEl) },
|
t.notThrow(function () { CanvasRenderer.render(sampleQrData, canvasEl) },
|
||||||
'Should not throw with only qrData and canvas param')
|
'Should not throw with only qrData and canvas param')
|
||||||
|
@ -88,8 +88,8 @@ test('CanvasRenderer renderToDataURL', function (t) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var url
|
let url
|
||||||
|
|
||||||
t.notThrow(function () { url = CanvasRenderer.renderToDataURL(sampleQrData) },
|
t.notThrow(function () { url = CanvasRenderer.renderToDataURL(sampleQrData) },
|
||||||
'Should not throw if canvas is not provided')
|
'Should not throw if canvas is not provided')
|
||||||
|
@ -108,7 +108,7 @@ test('CanvasRenderer renderToDataURL', function (t) {
|
||||||
t.equal(url.split(',')[0], 'data:image/png;base64',
|
t.equal(url.split(',')[0], 'data:image/png;base64',
|
||||||
'Should have correct header')
|
'Should have correct header')
|
||||||
|
|
||||||
var b64png = url.split(',')[1]
|
const b64png = url.split(',')[1]
|
||||||
t.equal(b64png.length % 4, 0,
|
t.equal(b64png.length % 4, 0,
|
||||||
'Should have a correct length')
|
'Should have a correct length')
|
||||||
|
|
||||||
|
@ -117,9 +117,9 @@ test('CanvasRenderer renderToDataURL', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('CanvasRenderer renderToDataURL to provided canvas', function (t) {
|
test('CanvasRenderer renderToDataURL to provided canvas', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var canvasEl = createCanvas(200, 200)
|
const canvasEl = createCanvas(200, 200)
|
||||||
var url
|
let url
|
||||||
|
|
||||||
t.notThrow(function () {
|
t.notThrow(function () {
|
||||||
url = CanvasRenderer.renderToDataURL(sampleQrData, canvasEl)
|
url = CanvasRenderer.renderToDataURL(sampleQrData, canvasEl)
|
||||||
|
@ -139,7 +139,7 @@ test('CanvasRenderer renderToDataURL to provided canvas', function (t) {
|
||||||
t.equal(url.split(',')[0], 'data:image/png;base64',
|
t.equal(url.split(',')[0], 'data:image/png;base64',
|
||||||
'Should have correct header')
|
'Should have correct header')
|
||||||
|
|
||||||
var b64png = url.split(',')[1]
|
const b64png = url.split(',')[1]
|
||||||
t.equal(b64png.length % 4, 0,
|
t.equal(b64png.length % 4, 0,
|
||||||
'Should have a correct length')
|
'Should have a correct length')
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var QRCode = require('core/qrcode')
|
const QRCode = require('core/qrcode')
|
||||||
var PngRenderer = require('renderer/png')
|
const PngRenderer = require('renderer/png')
|
||||||
var PNG = require('pngjs').PNG
|
const PNG = require('pngjs').PNG
|
||||||
var StreamMock = require('../../mocks/writable-stream')
|
const StreamMock = require('../../mocks/writable-stream')
|
||||||
|
|
||||||
test('PNG renderer interface', function (t) {
|
test('PNG renderer interface', function (t) {
|
||||||
t.type(PngRenderer.render, 'function',
|
t.type(PngRenderer.render, 'function',
|
||||||
|
@ -23,8 +23,8 @@ test('PNG renderer interface', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('PNG render', function (t) {
|
test('PNG render', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var png
|
let png
|
||||||
|
|
||||||
t.notThrow(function () { png = PngRenderer.render(sampleQrData) },
|
t.notThrow(function () { png = PngRenderer.render(sampleQrData) },
|
||||||
'Should not throw with only qrData param')
|
'Should not throw with only qrData param')
|
||||||
|
@ -57,7 +57,7 @@ test('PNG render', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('PNG renderToDataURL', function (t) {
|
test('PNG renderToDataURL', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
|
|
||||||
t.plan(6)
|
t.plan(6)
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ test('PNG renderToDataURL', function (t) {
|
||||||
t.equal(url.split(',')[0], 'data:image/png;base64',
|
t.equal(url.split(',')[0], 'data:image/png;base64',
|
||||||
'Should have correct header')
|
'Should have correct header')
|
||||||
|
|
||||||
var b64png = url.split(',')[1]
|
const b64png = url.split(',')[1]
|
||||||
t.equal(b64png.length % 4, 0,
|
t.equal(b64png.length % 4, 0,
|
||||||
'Should have a correct length')
|
'Should have a correct length')
|
||||||
}
|
}
|
||||||
|
@ -87,9 +87,9 @@ test('PNG renderToDataURL', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('PNG renderToFile', function (t) {
|
test('PNG renderToFile', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var fileName = 'qrimage.png'
|
const fileName = 'qrimage.png'
|
||||||
var fsStub = sinon.stub(fs, 'createWriteStream')
|
let fsStub = sinon.stub(fs, 'createWriteStream')
|
||||||
fsStub.returns(new StreamMock())
|
fsStub.returns(new StreamMock())
|
||||||
|
|
||||||
t.plan(6)
|
t.plan(6)
|
||||||
|
@ -126,7 +126,7 @@ test('PNG renderToFile', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('PNG renderToFileStream', function (t) {
|
test('PNG renderToFileStream', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
|
|
||||||
t.notThrow(function () {
|
t.notThrow(function () {
|
||||||
PngRenderer.renderToFileStream(new StreamMock(), sampleQrData)
|
PngRenderer.renderToFileStream(new StreamMock(), sampleQrData)
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var htmlparser = require('htmlparser2')
|
const htmlparser = require('htmlparser2')
|
||||||
var QRCode = require('core/qrcode')
|
const QRCode = require('core/qrcode')
|
||||||
var SvgRenderer = require('renderer/svg')
|
const SvgRenderer = require('renderer/svg')
|
||||||
|
|
||||||
function getExpectedViewbox (size, margin) {
|
function getExpectedViewbox (size, margin) {
|
||||||
var expectedQrCodeSize = size + margin * 2
|
const expectedQrCodeSize = size + margin * 2
|
||||||
return '0 0 ' + expectedQrCodeSize + ' ' + expectedQrCodeSize
|
return '0 0 ' + expectedQrCodeSize + ' ' + expectedQrCodeSize
|
||||||
}
|
}
|
||||||
|
|
||||||
function testSvgFragment (t, svgFragment, expectedTags) {
|
function testSvgFragment (t, svgFragment, expectedTags) {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
var parser = new htmlparser.Parser({
|
const parser = new htmlparser.Parser({
|
||||||
onopentag: function (name, attribs) {
|
onopentag: function (name, attribs) {
|
||||||
var tag = expectedTags.shift()
|
const tag = expectedTags.shift()
|
||||||
|
|
||||||
t.equal(tag.name, name,
|
t.equal(tag.name, name,
|
||||||
'Should have a ' + tag.name + ' tag')
|
'Should have a ' + tag.name + ' tag')
|
||||||
|
@ -40,7 +40,7 @@ function testSvgFragment (t, svgFragment, expectedTags) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildTest (t, data, opts, expectedTags) {
|
function buildTest (t, data, opts, expectedTags) {
|
||||||
var svg = SvgRenderer.render(data, opts)
|
const svg = SvgRenderer.render(data, opts)
|
||||||
return testSvgFragment(t, svg, expectedTags.slice())
|
return testSvgFragment(t, svg, expectedTags.slice())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,10 +55,10 @@ test('svgrender interface', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Svg render', function (t) {
|
test('Svg render', function (t) {
|
||||||
var tests = []
|
const tests = []
|
||||||
|
|
||||||
var data = QRCode.create('sample text', { version: 2 })
|
const data = QRCode.create('sample text', { version: 2 })
|
||||||
var size = data.modules.size
|
const size = data.modules.size
|
||||||
|
|
||||||
tests.push(buildTest(t, data, {
|
tests.push(buildTest(t, data, {
|
||||||
scale: 4,
|
scale: 4,
|
||||||
|
@ -141,9 +141,9 @@ test('Svg render', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Svg renderToFile', function (t) {
|
test('Svg renderToFile', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var fileName = 'qrimage.svg'
|
const fileName = 'qrimage.svg'
|
||||||
var fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
|
let fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
|
||||||
|
|
||||||
t.plan(5)
|
t.plan(5)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var QRCode = require('core/qrcode')
|
const QRCode = require('core/qrcode')
|
||||||
var TerminalRenderer = require('renderer/terminal')
|
const TerminalRenderer = require('renderer/terminal')
|
||||||
|
|
||||||
test('TerminalRenderer interface', function (t) {
|
test('TerminalRenderer interface', function (t) {
|
||||||
t.type(TerminalRenderer.render, 'function',
|
t.type(TerminalRenderer.render, 'function',
|
||||||
|
@ -10,8 +10,8 @@ test('TerminalRenderer interface', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('TerminalRenderer render', function (t) {
|
test('TerminalRenderer render', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var str
|
let str
|
||||||
|
|
||||||
t.notThrow(function () { str = TerminalRenderer.render(sampleQrData) },
|
t.notThrow(function () { str = TerminalRenderer.render(sampleQrData) },
|
||||||
'Should not throw with only qrData param')
|
'Should not throw with only qrData param')
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var sinon = require('sinon')
|
const sinon = require('sinon')
|
||||||
var fs = require('fs')
|
const fs = require('fs')
|
||||||
var QRCode = require('core/qrcode')
|
const QRCode = require('core/qrcode')
|
||||||
var Utf8Renderer = require('renderer/utf8')
|
const Utf8Renderer = require('renderer/utf8')
|
||||||
|
|
||||||
test('Utf8Renderer interface', function (t) {
|
test('Utf8Renderer interface', function (t) {
|
||||||
t.type(Utf8Renderer.render, 'function',
|
t.type(Utf8Renderer.render, 'function',
|
||||||
|
@ -12,8 +12,8 @@ test('Utf8Renderer interface', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Utf8Renderer render', function (t) {
|
test('Utf8Renderer render', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var str
|
let str
|
||||||
|
|
||||||
t.notThrow(function () { str = Utf8Renderer.render(sampleQrData) },
|
t.notThrow(function () { str = Utf8Renderer.render(sampleQrData) },
|
||||||
'Should not throw with only qrData param')
|
'Should not throw with only qrData param')
|
||||||
|
@ -32,9 +32,9 @@ test('Utf8Renderer render', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Utf8 renderToFile', function (t) {
|
test('Utf8 renderToFile', function (t) {
|
||||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||||
var fileName = 'qrimage.txt'
|
const fileName = 'qrimage.txt'
|
||||||
var fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
|
let fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
|
||||||
|
|
||||||
t.plan(5)
|
t.plan(5)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
var test = require('tap').test
|
const test = require('tap').test
|
||||||
var Utils = require('renderer/utils')
|
const Utils = require('renderer/utils')
|
||||||
|
|
||||||
test('Utils getOptions', function (t) {
|
test('Utils getOptions', function (t) {
|
||||||
var defaultOptions = {
|
const defaultOptions = {
|
||||||
width: undefined,
|
width: undefined,
|
||||||
scale: 4,
|
scale: 4,
|
||||||
margin: 4,
|
margin: 4,
|
||||||
|
@ -59,7 +59,7 @@ test('Utils getOptions', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Utils getScale', function (t) {
|
test('Utils getScale', function (t) {
|
||||||
var symbolSize = 21
|
const symbolSize = 21
|
||||||
|
|
||||||
t.equal(Utils.getScale(symbolSize, { scale: 5 }), 5,
|
t.equal(Utils.getScale(symbolSize, { scale: 5 }), 5,
|
||||||
'Should return correct scale value')
|
'Should return correct scale value')
|
||||||
|
@ -74,7 +74,7 @@ test('Utils getScale', function (t) {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Utils getImageWidth', function (t) {
|
test('Utils getImageWidth', function (t) {
|
||||||
var symbolSize = 21
|
const symbolSize = 21
|
||||||
|
|
||||||
t.equal(Utils.getImageWidth(symbolSize, { scale: 5, margin: 0 }), 105,
|
t.equal(Utils.getImageWidth(symbolSize, { scale: 5, margin: 0 }), 105,
|
||||||
'Should return correct width value')
|
'Should return correct width value')
|
||||||
|
@ -92,7 +92,7 @@ test('Utils qrToImageData', function (t) {
|
||||||
t.ok(Utils.qrToImageData,
|
t.ok(Utils.qrToImageData,
|
||||||
'qrToImageData should be defined')
|
'qrToImageData should be defined')
|
||||||
|
|
||||||
var sampleQrData = {
|
const sampleQrData = {
|
||||||
modules: {
|
modules: {
|
||||||
data: [
|
data: [
|
||||||
1, 0, 1, 0,
|
1, 0, 1, 0,
|
||||||
|
@ -104,24 +104,24 @@ test('Utils qrToImageData', function (t) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var margin = 4
|
const margin = 4
|
||||||
var scale = 2
|
const scale = 2
|
||||||
var width = 100
|
const width = 100
|
||||||
|
|
||||||
var color = {
|
const color = {
|
||||||
dark: { r: 255, g: 255, b: 255, a: 255 },
|
dark: { r: 255, g: 255, b: 255, a: 255 },
|
||||||
light: { r: 0, g: 0, b: 0, a: 255 }
|
light: { r: 0, g: 0, b: 0, a: 255 }
|
||||||
}
|
}
|
||||||
|
|
||||||
var opts = {
|
const opts = {
|
||||||
margin: margin,
|
margin: margin,
|
||||||
scale: scale,
|
scale: scale,
|
||||||
color: color
|
color: color
|
||||||
}
|
}
|
||||||
|
|
||||||
var imageData = []
|
let imageData = []
|
||||||
var expectedImageSize = (sampleQrData.modules.size + margin * 2) * scale
|
const expectedImageSize = (sampleQrData.modules.size + margin * 2) * scale
|
||||||
var expectedImageDataLength = Math.pow(expectedImageSize, 2) * 4
|
let expectedImageDataLength = Math.pow(expectedImageSize, 2) * 4
|
||||||
|
|
||||||
Utils.qrToImageData(imageData, sampleQrData, opts)
|
Utils.qrToImageData(imageData, sampleQrData, opts)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue