Merge pull request #226 from LinusU/uint8array
Avoid dependency on Buffer
This commit is contained in:
commit
f829dd296a
80 changed files with 6628 additions and 5952 deletions
.travis.ymlREADME.mdbuild.js
examples
helper
lib
browser.js
package-lock.jsonpackage.jsonrollup.config.jstest.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.jsutils
test
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
21
.travis.yml
21
.travis.yml
|
@ -1,22 +1,7 @@
|
|||
language: node_js
|
||||
|
||||
dist: bionic
|
||||
node_js:
|
||||
- '4'
|
||||
- '6'
|
||||
- '8'
|
||||
- '10.13.0'
|
||||
- '10'
|
||||
- '12'
|
||||
- 'node'
|
||||
|
||||
env:
|
||||
- CXX=g++-4.8
|
||||
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-4.8
|
||||
|
||||
before_install:
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install -y libgif-dev
|
||||
|
|
|
@ -104,7 +104,7 @@ QRCode.toCanvas(canvas, 'sample text', function (error) {
|
|||
```html
|
||||
<canvas id="canvas"></canvas>
|
||||
|
||||
<script src="/build/qrcode.min.js"></script>
|
||||
<script src="/build/qrcode.js"></script>
|
||||
<script>
|
||||
QRCode.toCanvas(document.getElementById('canvas'), 'sample text', function (error) {
|
||||
if (error) console.error(error)
|
||||
|
@ -113,7 +113,9 @@ QRCode.toCanvas(canvas, 'sample text', function (error) {
|
|||
</script>
|
||||
```
|
||||
|
||||
If you install through `npm`, precompiled files will be available in `node_modules/qrcode/build/` folder.<br>
|
||||
If you install through `npm`, precompiled files will be available in `node_modules/qrcode/build/` folder.
|
||||
|
||||
The precompiled bundle have support for [Internet Explorer 10+, Safari 5.1+, and all evergreen browsers](https://browserl.ist/?q=defaults%2C+IE+%3E%3D+10%2C+Safari+%3E%3D+5.1).
|
||||
|
||||
### NodeJS
|
||||
Require the module `qrcode`
|
||||
|
@ -347,7 +349,7 @@ QRCode.toFile(
|
|||
)
|
||||
```
|
||||
|
||||
TypeScript users: if you are using [@types/qrcode](https://www.npmjs.com/package/@types/qrcode), you will need to add a `// @ts-ignore` above the data segment because it expects `data: string`.
|
||||
TypeScript users: if you are using [@types/qrcode](https://www.npmjs.com/package/@types/qrcode), you will need to add a `// @ts-ignore` above the data segment because it expects `data: string`.
|
||||
|
||||
## Multibyte characters
|
||||
Support for multibyte characters isn't present in the initial QR Code standard, but is possible to encode UTF-8 characters in Byte mode.
|
||||
|
|
85
build.js
85
build.js
|
@ -1,85 +0,0 @@
|
|||
var spawn = require('child_process').spawn
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
require('colors')
|
||||
|
||||
function createFolder (folderPath, onDone) {
|
||||
console.log('*'.green + ' creating folder: '.grey + folderPath.white)
|
||||
|
||||
if (!fs.existsSync(folderPath)) {
|
||||
fs.mkdirSync(folderPath)
|
||||
}
|
||||
|
||||
onDone()
|
||||
}
|
||||
|
||||
function bundle (inputFile, exportName, outputFile, onDone) {
|
||||
console.log('*'.green + ' bundling: '.grey +
|
||||
inputFile.white + ' -> '.grey + outputFile.white)
|
||||
|
||||
var browserify = spawn('node', [
|
||||
'node_modules/.bin/browserify',
|
||||
inputFile,
|
||||
'-s', exportName,
|
||||
'-d',
|
||||
'-o', outputFile
|
||||
])
|
||||
|
||||
browserify.stdin.end()
|
||||
browserify.stdout.pipe(process.stdout)
|
||||
browserify.stderr.pipe(process.stderr)
|
||||
browserify.on('exit', function (code) {
|
||||
if (code) {
|
||||
console.error('browserify failed!')
|
||||
process.exit(code)
|
||||
}
|
||||
|
||||
onDone()
|
||||
})
|
||||
}
|
||||
|
||||
function minify (inputFile, outputFile, onDone) {
|
||||
console.log('*'.green + ' minifying: '.grey +
|
||||
inputFile.white + ' -> '.grey + outputFile.white)
|
||||
|
||||
var uglify = spawn('node', [
|
||||
'node_modules/.bin/uglifyjs',
|
||||
'--compress', '--mangle',
|
||||
'--source-map', outputFile + '.map',
|
||||
'--source-map-url', path.basename(outputFile) + '.map',
|
||||
'--', inputFile])
|
||||
|
||||
var minStream = fs.createWriteStream(outputFile)
|
||||
uglify.stdout.pipe(minStream)
|
||||
uglify.stdin.end()
|
||||
uglify.on('exit', function (code) {
|
||||
if (code) {
|
||||
console.error('uglify failed!')
|
||||
fs.unlink(outputFile, function () {
|
||||
process.exit(code)
|
||||
})
|
||||
}
|
||||
|
||||
onDone()
|
||||
})
|
||||
}
|
||||
|
||||
var q = [
|
||||
createFolder.bind(null, './build', done),
|
||||
bundle.bind(null, 'lib/index.js', 'QRCode', 'build/qrcode.js', done),
|
||||
bundle.bind(null, 'helper/to-sjis.js', 'QRCode.toSJIS', 'build/qrcode.tosjis.js', done),
|
||||
minify.bind(null, 'build/qrcode.js', 'build/qrcode.min.js', done),
|
||||
minify.bind(null, 'build/qrcode.tosjis.js', 'build/qrcode.tosjis.min.js', done)
|
||||
]
|
||||
|
||||
function done () {
|
||||
var j = q.shift()
|
||||
if (j) j()
|
||||
else complete()
|
||||
}
|
||||
|
||||
function complete () {
|
||||
console.log('\nBuild complete =)\n'.green)
|
||||
}
|
||||
|
||||
done()
|
|
@ -1,4 +1,4 @@
|
|||
var QRCode = require('../lib')
|
||||
const QRCode = require('../lib')
|
||||
|
||||
QRCode.toString('yo yo yo', function (error, data) {
|
||||
if (error) {
|
||||
|
|
|
@ -1,18 +1,17 @@
|
|||
var express = require('express')
|
||||
var app = express()// .createServer()
|
||||
var http = require('http')
|
||||
var fs = require('fs')
|
||||
var QRCode = require('../lib')
|
||||
var canvasutil = require('canvasutil')
|
||||
var Canvas = require('canvas')
|
||||
var Image = Canvas.Image
|
||||
const express = require('express')
|
||||
const app = express()// .createServer()
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const QRCode = require('../lib')
|
||||
const canvasutil = require('canvasutil')
|
||||
const { createCanvas, loadImage } = require('canvas')
|
||||
|
||||
var path = require('path')
|
||||
const path = require('path')
|
||||
|
||||
// app.use(express.methodOverride())
|
||||
// app.use(express.bodyParser())
|
||||
// app.use(app.router)
|
||||
// app.use(express.static(path.resolve(__dirname, '..')))
|
||||
// app.use(express.methodOverride())
|
||||
// app.use(express.bodyParser())
|
||||
// app.use(app.router)
|
||||
// app.use(express.static(path.resolve(__dirname, '..')))
|
||||
|
||||
app.get('/qrcode.js', (req, res) => {
|
||||
res.set('content-type', 'text/javascript')
|
||||
|
@ -30,12 +29,12 @@ app.get('/', function (req, res) {
|
|||
})
|
||||
})
|
||||
|
||||
var effectHandlers = {}
|
||||
const effectHandlers = {}
|
||||
|
||||
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]) {
|
||||
effect = 'plain'
|
||||
}
|
||||
|
@ -49,7 +48,7 @@ app.get('/generate', function (req, res) {
|
|||
}
|
||||
})
|
||||
} else {
|
||||
var msg = error.message + '\n' + error.stack
|
||||
const msg = error.message + '\n' + error.stack
|
||||
res.header('Content-Type', 'text/plain')
|
||||
res.send(msg)
|
||||
console.error(msg)
|
||||
|
@ -73,28 +72,28 @@ effectHandlers.bacon = function (args, cb) {
|
|||
}
|
||||
|
||||
effectHandlers.rounded = function (args, cb) {
|
||||
var canvas = new Canvas(200, 200)
|
||||
const canvas = createCanvas(200, 200)
|
||||
QRCode.toCanvas(canvas, args.text || '', function (err) {
|
||||
if (err) {
|
||||
cb(err, canvas)
|
||||
return
|
||||
}
|
||||
|
||||
var tpx = new canvasutil.PixelCore()
|
||||
var luma709Only = canvasutil.conversionLib.luma709Only
|
||||
var up = []
|
||||
var down = []
|
||||
var left = []
|
||||
var right = []
|
||||
var upPx
|
||||
var downPx
|
||||
var leftPx
|
||||
var rightPx
|
||||
var r
|
||||
var t
|
||||
var l
|
||||
var d
|
||||
var corner = 0
|
||||
const tpx = new canvasutil.PixelCore()
|
||||
const luma709Only = canvasutil.conversionLib.luma709Only
|
||||
const up = []
|
||||
const down = []
|
||||
const left = []
|
||||
const right = []
|
||||
let upPx
|
||||
let downPx
|
||||
let leftPx
|
||||
let rightPx
|
||||
let r
|
||||
let t
|
||||
let l
|
||||
let d
|
||||
let corner = 0
|
||||
|
||||
tpx.threshold = 100
|
||||
|
||||
|
@ -162,21 +161,21 @@ effectHandlers.rounded = function (args, cb) {
|
|||
}
|
||||
}
|
||||
})
|
||||
cb(false, canvas)
|
||||
cb(null, canvas)
|
||||
})
|
||||
}
|
||||
|
||||
effectHandlers.remoteImage = function (args, cb) {
|
||||
var src = args.src
|
||||
var domain
|
||||
var uri
|
||||
let src = args.src
|
||||
let domain
|
||||
let uri
|
||||
|
||||
if (!src) {
|
||||
cb(new Error('src required'), null)
|
||||
} else {
|
||||
if (src.indexof('://') !== -1) {
|
||||
src = src.split('://').unshift()
|
||||
var parts = src.split('/')
|
||||
const parts = src.split('/')
|
||||
|
||||
domain = parts.shift()
|
||||
uri = parts.join('/')
|
||||
|
@ -188,14 +187,14 @@ effectHandlers.remoteImage = function (args, cb) {
|
|||
return
|
||||
}
|
||||
|
||||
var options = {
|
||||
const options = {
|
||||
host: domain,
|
||||
port: 80,
|
||||
path: uri,
|
||||
method: 'GET'
|
||||
}
|
||||
|
||||
var req = http.request(options, function (res) {
|
||||
const req = http.request(options, function (res) {
|
||||
if (res.statusCode < 200 || res.statusCode > 299) {
|
||||
cb(new Error('http ' + res.statusCode + ' response code'), null)
|
||||
return
|
||||
|
@ -203,14 +202,14 @@ effectHandlers.remoteImage = function (args, cb) {
|
|||
|
||||
res.setEncoding('utf8')
|
||||
|
||||
var data = ''
|
||||
let data = ''
|
||||
res.on('data', function (chunk) {
|
||||
data += chunk
|
||||
console.log('BODY: ' + chunk)
|
||||
})
|
||||
|
||||
res.on('complete', function () {
|
||||
cb(false, data)
|
||||
cb(null, data)
|
||||
})
|
||||
|
||||
res.on('error', function (error) {
|
||||
|
@ -223,31 +222,28 @@ effectHandlers.remoteImage = function (args, cb) {
|
|||
}
|
||||
|
||||
effectHandlers.image = function (args, cb) {
|
||||
var src = args.src || ''
|
||||
|
||||
var img = new Image()
|
||||
var convert = canvasutil.conversionLib
|
||||
img.onload = function () {
|
||||
var canvas = new Canvas(200, 200)
|
||||
loadImage(args.src || '').then((img) => {
|
||||
const convert = canvasutil.conversionLib
|
||||
const canvas = createCanvas(200, 200)
|
||||
QRCode.toCanvas(canvas, args.text || '', function (err) {
|
||||
if (err) {
|
||||
cb(err, false)
|
||||
return
|
||||
}
|
||||
|
||||
var codeCtx = canvas.getContext('2d')
|
||||
var frame = codeCtx.getImageData(0, 0, canvas.width, canvas.width)
|
||||
var tpx = new canvasutil.PixelCore()
|
||||
var baconCanvas = new Canvas(canvas.width, canvas.width)
|
||||
var ctx = baconCanvas.getContext('2d')
|
||||
var topThreshold = args.darkThreshold || 25
|
||||
var bottomThreshold = args.lightThreshold || 75
|
||||
const codeCtx = canvas.getContext('2d')
|
||||
const frame = codeCtx.getImageData(0, 0, canvas.width, canvas.width)
|
||||
const tpx = new canvasutil.PixelCore()
|
||||
const baconCanvas = createCanvas(canvas.width, canvas.width)
|
||||
const ctx = baconCanvas.getContext('2d')
|
||||
const topThreshold = args.darkThreshold || 25
|
||||
const bottomThreshold = args.lightThreshold || 75
|
||||
|
||||
tpx.threshold = 50
|
||||
|
||||
// scale image
|
||||
var w = canvas.width
|
||||
var h = canvas.height
|
||||
let w = canvas.width
|
||||
let h = canvas.height
|
||||
|
||||
if (img.width > img.height) {
|
||||
w = w * (canvas.height / h)
|
||||
|
@ -260,10 +256,10 @@ effectHandlers.image = function (args, cb) {
|
|||
|
||||
try {
|
||||
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)
|
||||
var codeLuma = convert.luma709Only(frame.data[i * 4], frame.data[i * 4 + 1], frame.data[i * 4 + 2])
|
||||
var yuv
|
||||
var rgb
|
||||
const luma = (0.2125 * px.r + 0.7154 * px.g + 0.0721 * px.b)
|
||||
const codeLuma = convert.luma709Only(frame.data[i * 4], frame.data[i * 4 + 1], frame.data[i * 4 + 2])
|
||||
let yuv
|
||||
let rgb
|
||||
|
||||
if (codeLuma > pixelCore.threshold) {
|
||||
if (luma < bottomThreshold) {
|
||||
|
@ -292,21 +288,16 @@ effectHandlers.image = function (args, cb) {
|
|||
cb(err, false)
|
||||
}
|
||||
|
||||
cb(false, baconCanvas)
|
||||
cb(null, baconCanvas)
|
||||
})
|
||||
}
|
||||
|
||||
img.onerror = function (error) {
|
||||
error.message += ' (' + src + ')'
|
||||
}, (error) => {
|
||||
cb(error, null)
|
||||
}
|
||||
|
||||
img.src = src
|
||||
})
|
||||
}
|
||||
|
||||
effectHandlers.plain = function (args, cb) {
|
||||
var canvas = new Canvas(200, 200)
|
||||
var text = args.text || ''
|
||||
const canvas = createCanvas(200, 200)
|
||||
const text = args.text || ''
|
||||
QRCode.toCanvas(canvas, text || '', function (err) {
|
||||
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', {
|
||||
color: {
|
||||
dark: '#00F', // Blue modules
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
var QRCode = require('../lib')
|
||||
var http = require('http')
|
||||
const QRCode = require('../lib')
|
||||
const http = require('http')
|
||||
|
||||
function testQRCode (req, res) {
|
||||
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' +
|
||||
'behind him, was squeaking: "My lord, my lord, it went in here!"\n' +
|
||||
'\n' +
|
||||
|
|
2
helper/to-sjis-browser.js
Normal file
2
helper/to-sjis-browser.js
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* global QRCode */
|
||||
QRCode.toSJIS = require('./to-sjis')
|
|
@ -1,4 +1,4 @@
|
|||
var SJIS_UTF8 = [
|
||||
const SJIS_UTF8 = [
|
||||
[0x8140, ' 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×'],
|
||||
[0x8180, '÷=≠<>'],
|
||||
[0x818f, '¥$¢£%#&*@§☆★'],
|
||||
|
@ -89,10 +89,10 @@ var SJIS_UTF8 = [
|
|||
module.exports = function toSJIS (utf8Char) {
|
||||
if (!utf8Char || utf8Char === '') return
|
||||
|
||||
for (var i = 0; i < SJIS_UTF8.length; i++) {
|
||||
var kanji = SJIS_UTF8[i][1]
|
||||
for (let i = 0; i < SJIS_UTF8.length; i++) {
|
||||
const kanji = SJIS_UTF8[i][1]
|
||||
|
||||
var posIndex = kanji.indexOf(utf8Char)
|
||||
const posIndex = kanji.indexOf(utf8Char)
|
||||
if (posIndex >= 0) {
|
||||
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')
|
||||
var CanvasRenderer = require('./renderer/canvas')
|
||||
var SvgRenderer = require('./renderer/svg-tag.js')
|
||||
const QRCode = require('./core/qrcode')
|
||||
const CanvasRenderer = require('./renderer/canvas')
|
||||
const SvgRenderer = require('./renderer/svg-tag.js')
|
||||
|
||||
function renderCanvas (renderFunc, canvas, text, opts, cb) {
|
||||
var args = [].slice.call(arguments, 1)
|
||||
var argsNum = args.length
|
||||
var isLastArgCb = typeof args[argsNum - 1] === 'function'
|
||||
const args = [].slice.call(arguments, 1)
|
||||
const argsNum = args.length
|
||||
const isLastArgCb = typeof args[argsNum - 1] === 'function'
|
||||
|
||||
if (!isLastArgCb && !canPromise()) {
|
||||
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) {
|
||||
try {
|
||||
var data = QRCode.create(text, opts)
|
||||
const data = QRCode.create(text, opts)
|
||||
resolve(renderFunc(data, canvas, opts))
|
||||
} catch (e) {
|
||||
reject(e)
|
||||
|
@ -59,7 +59,7 @@ function renderCanvas (renderFunc, canvas, text, opts, cb) {
|
|||
}
|
||||
|
||||
try {
|
||||
var data = QRCode.create(text, opts)
|
||||
const data = QRCode.create(text, opts)
|
||||
cb(null, renderFunc(data, canvas, opts))
|
||||
} catch (e) {
|
||||
cb(e)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* 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
|
||||
|
@ -27,12 +27,12 @@ var getSymbolSize = require('./utils').getSymbolSize
|
|||
exports.getRowColCoords = function getRowColCoords (version) {
|
||||
if (version === 1) return []
|
||||
|
||||
var posCount = Math.floor(version / 7) + 2
|
||||
var size = getSymbolSize(version)
|
||||
var intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
|
||||
var positions = [size - 7] // Last coord is always (size - 7)
|
||||
const posCount = Math.floor(version / 7) + 2
|
||||
const size = getSymbolSize(version)
|
||||
const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2
|
||||
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
|
||||
}
|
||||
|
||||
|
@ -55,21 +55,21 @@ exports.getRowColCoords = function getRowColCoords (version) {
|
|||
* Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder 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]]
|
||||
*
|
||||
* @param {Number} version QR Code version
|
||||
* @return {Array} Array of coordinates
|
||||
*/
|
||||
exports.getPositions = function getPositions (version) {
|
||||
var coords = []
|
||||
var pos = exports.getRowColCoords(version)
|
||||
var posLength = pos.length
|
||||
const coords = []
|
||||
const pos = exports.getRowColCoords(version)
|
||||
const posLength = pos.length
|
||||
|
||||
for (var i = 0; i < posLength; i++) {
|
||||
for (var j = 0; j < posLength; j++) {
|
||||
for (let i = 0; i < posLength; i++) {
|
||||
for (let j = 0; j < posLength; j++) {
|
||||
// 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 === posLength - 1 && j === 0)) { // top-right
|
||||
continue
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
var Mode = require('./mode')
|
||||
const Mode = require('./mode')
|
||||
|
||||
/**
|
||||
* Array of characters available in alphanumeric mode
|
||||
|
@ -9,7 +9,7 @@ var Mode = require('./mode')
|
|||
*
|
||||
* @type {Array}
|
||||
*/
|
||||
var ALPHA_NUM_CHARS = [
|
||||
const ALPHA_NUM_CHARS = [
|
||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||
'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',
|
||||
|
@ -34,13 +34,13 @@ AlphanumericData.prototype.getBitsLength = function getBitsLength () {
|
|||
}
|
||||
|
||||
AlphanumericData.prototype.write = function write (bitBuffer) {
|
||||
var i
|
||||
let i
|
||||
|
||||
// Input data characters are divided into groups of two characters
|
||||
// and encoded as 11-bit binary codes.
|
||||
for (i = 0; i + 2 <= this.data.length; i += 2) {
|
||||
// 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
|
||||
value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])
|
||||
|
|
|
@ -6,12 +6,12 @@ function BitBuffer () {
|
|||
BitBuffer.prototype = {
|
||||
|
||||
get: function (index) {
|
||||
var bufIndex = Math.floor(index / 8)
|
||||
const bufIndex = Math.floor(index / 8)
|
||||
return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1
|
||||
},
|
||||
|
||||
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)
|
||||
}
|
||||
},
|
||||
|
@ -21,7 +21,7 @@ BitBuffer.prototype = {
|
|||
},
|
||||
|
||||
putBit: function (bit) {
|
||||
var bufIndex = Math.floor(this.length / 8)
|
||||
const bufIndex = Math.floor(this.length / 8)
|
||||
if (this.buffer.length <= bufIndex) {
|
||||
this.buffer.push(0)
|
||||
}
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
var BufferUtil = require('../utils/buffer')
|
||||
|
||||
/**
|
||||
* Helper class to handle QR Code symbol modules
|
||||
*
|
||||
|
@ -11,8 +9,8 @@ function BitMatrix (size) {
|
|||
}
|
||||
|
||||
this.size = size
|
||||
this.data = BufferUtil.alloc(size * size)
|
||||
this.reservedBit = BufferUtil.alloc(size * size)
|
||||
this.data = new Uint8Array(size * size)
|
||||
this.reservedBit = new Uint8Array(size * size)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -25,7 +23,7 @@ function BitMatrix (size) {
|
|||
* @param {Boolean} 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
|
||||
if (reserved) this.reservedBit[index] = true
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
var BufferUtil = require('../utils/buffer')
|
||||
var Mode = require('./mode')
|
||||
const encodeUtf8 = require('encode-utf8')
|
||||
const Mode = require('./mode')
|
||||
|
||||
function ByteData (data) {
|
||||
this.mode = Mode.BYTE
|
||||
this.data = BufferUtil.from(data)
|
||||
this.data = new Uint8Array(encodeUtf8(data))
|
||||
}
|
||||
|
||||
ByteData.getBitsLength = function getBitsLength (length) {
|
||||
|
@ -19,7 +19,7 @@ ByteData.prototype.getBitsLength = function getBitsLength () {
|
|||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
1, 1, 1, 1,
|
||||
1, 1, 1, 1,
|
||||
|
@ -44,7 +44,7 @@ var EC_BLOCKS_TABLE = [
|
|||
25, 49, 68, 81
|
||||
]
|
||||
|
||||
var EC_CODEWORDS_TABLE = [
|
||||
const EC_CODEWORDS_TABLE = [
|
||||
// L M Q H
|
||||
7, 10, 13, 17,
|
||||
10, 16, 22, 28,
|
||||
|
|
|
@ -8,7 +8,7 @@ function fromString (string) {
|
|||
throw new Error('Param is not a string')
|
||||
}
|
||||
|
||||
var lcStr = string.toLowerCase()
|
||||
const lcStr = string.toLowerCase()
|
||||
|
||||
switch (lcStr) {
|
||||
case 'l':
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var getSymbolSize = require('./utils').getSymbolSize
|
||||
var FINDER_PATTERN_SIZE = 7
|
||||
const getSymbolSize = require('./utils').getSymbolSize
|
||||
const FINDER_PATTERN_SIZE = 7
|
||||
|
||||
/**
|
||||
* Returns an array containing the positions of each finder pattern.
|
||||
|
@ -9,7 +9,7 @@ var FINDER_PATTERN_SIZE = 7
|
|||
* @return {Array} Array of coordinates
|
||||
*/
|
||||
exports.getPositions = function getPositions (version) {
|
||||
var size = getSymbolSize(version)
|
||||
const size = getSymbolSize(version)
|
||||
|
||||
return [
|
||||
// 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)
|
||||
var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
|
||||
var G15_BCH = Utils.getBCHDigit(G15)
|
||||
const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
|
||||
const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)
|
||||
const G15_BCH = Utils.getBCHDigit(G15)
|
||||
|
||||
/**
|
||||
* Returns format information with relative error correction bits
|
||||
|
@ -15,8 +15,8 @@ var G15_BCH = Utils.getBCHDigit(G15)
|
|||
* @return {Number} Encoded format information bits
|
||||
*/
|
||||
exports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {
|
||||
var data = ((errorCorrectionLevel.bit << 3) | mask)
|
||||
var d = data << 10
|
||||
const data = ((errorCorrectionLevel.bit << 3) | mask)
|
||||
let d = data << 10
|
||||
|
||||
while (Utils.getBCHDigit(d) - G15_BCH >= 0) {
|
||||
d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
var BufferUtil = require('../utils/buffer')
|
||||
|
||||
var EXP_TABLE = BufferUtil.alloc(512)
|
||||
var LOG_TABLE = BufferUtil.alloc(256)
|
||||
const EXP_TABLE = new Uint8Array(512)
|
||||
const LOG_TABLE = new Uint8Array(256)
|
||||
/**
|
||||
* Precompute the log and anti-log tables for faster computation later
|
||||
*
|
||||
|
@ -11,8 +9,8 @@ var LOG_TABLE = BufferUtil.alloc(256)
|
|||
* ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}
|
||||
*/
|
||||
;(function initTables () {
|
||||
var x = 1
|
||||
for (var i = 0; i < 255; i++) {
|
||||
let x = 1
|
||||
for (let i = 0; i < 255; i++) {
|
||||
EXP_TABLE[i] = x
|
||||
LOG_TABLE[x] = i
|
||||
|
||||
|
@ -29,7 +27,7 @@ var LOG_TABLE = BufferUtil.alloc(256)
|
|||
// stay inside the bounds (because we will mainly use this table for the multiplication of
|
||||
// two GF numbers, no more).
|
||||
// @see {@link mul}
|
||||
for (i = 255; i < 512; i++) {
|
||||
for (let i = 255; i < 512; i++) {
|
||||
EXP_TABLE[i] = EXP_TABLE[i - 255]
|
||||
}
|
||||
}())
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var Mode = require('./mode')
|
||||
var Utils = require('./utils')
|
||||
const Mode = require('./mode')
|
||||
const Utils = require('./utils')
|
||||
|
||||
function KanjiData (data) {
|
||||
this.mode = Mode.KANJI
|
||||
|
@ -19,13 +19,13 @@ KanjiData.prototype.getBitsLength = function getBitsLength () {
|
|||
}
|
||||
|
||||
KanjiData.prototype.write = function (bitBuffer) {
|
||||
var i
|
||||
let i
|
||||
|
||||
// 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.
|
||||
// JIS X 0208 gives details of the shift coded representation.
|
||||
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:
|
||||
if (value >= 0x8140 && value <= 0x9FFC) {
|
||||
|
|
|
@ -17,7 +17,7 @@ exports.Patterns = {
|
|||
* Weighted penalty scores for the undesirable features
|
||||
* @type {Object}
|
||||
*/
|
||||
var PenaltyScores = {
|
||||
const PenaltyScores = {
|
||||
N1: 3,
|
||||
N2: 3,
|
||||
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
|
||||
*/
|
||||
exports.getPenaltyN1 = function getPenaltyN1 (data) {
|
||||
var size = data.size
|
||||
var points = 0
|
||||
var sameCountCol = 0
|
||||
var sameCountRow = 0
|
||||
var lastCol = null
|
||||
var lastRow = null
|
||||
const size = data.size
|
||||
let points = 0
|
||||
let sameCountCol = 0
|
||||
let sameCountRow = 0
|
||||
let lastCol = null
|
||||
let lastRow = null
|
||||
|
||||
for (var row = 0; row < size; row++) {
|
||||
for (let row = 0; row < size; row++) {
|
||||
sameCountCol = sameCountRow = 0
|
||||
lastCol = lastRow = null
|
||||
|
||||
for (var col = 0; col < size; col++) {
|
||||
var module = data.get(row, col)
|
||||
for (let col = 0; col < size; col++) {
|
||||
let module = data.get(row, col)
|
||||
if (module === lastCol) {
|
||||
sameCountCol++
|
||||
} else {
|
||||
|
@ -97,12 +97,12 @@ exports.getPenaltyN1 = function getPenaltyN1 (data) {
|
|||
* Points: N2 * (m - 1) * (n - 1)
|
||||
*/
|
||||
exports.getPenaltyN2 = function getPenaltyN2 (data) {
|
||||
var size = data.size
|
||||
var points = 0
|
||||
const size = data.size
|
||||
let points = 0
|
||||
|
||||
for (var row = 0; row < size - 1; row++) {
|
||||
for (var col = 0; col < size - 1; col++) {
|
||||
var last = data.get(row, col) +
|
||||
for (let row = 0; row < size - 1; row++) {
|
||||
for (let col = 0; col < size - 1; col++) {
|
||||
const last = data.get(row, col) +
|
||||
data.get(row, col + 1) +
|
||||
data.get(row + 1, col) +
|
||||
data.get(row + 1, col + 1)
|
||||
|
@ -121,14 +121,14 @@ exports.getPenaltyN2 = function getPenaltyN2 (data) {
|
|||
* Points: N3 * number of pattern found
|
||||
*/
|
||||
exports.getPenaltyN3 = function getPenaltyN3 (data) {
|
||||
var size = data.size
|
||||
var points = 0
|
||||
var bitsCol = 0
|
||||
var bitsRow = 0
|
||||
const size = data.size
|
||||
let points = 0
|
||||
let bitsCol = 0
|
||||
let bitsRow = 0
|
||||
|
||||
for (var row = 0; row < size; row++) {
|
||||
for (let row = 0; row < size; row++) {
|
||||
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)
|
||||
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%
|
||||
*/
|
||||
exports.getPenaltyN4 = function getPenaltyN4 (data) {
|
||||
var darkCount = 0
|
||||
var modulesCount = data.data.length
|
||||
let darkCount = 0
|
||||
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
|
||||
}
|
||||
|
@ -189,10 +189,10 @@ function getMaskAt (maskPattern, i, j) {
|
|||
* @param {BitMatrix} data BitMatrix data
|
||||
*/
|
||||
exports.applyMask = function applyMask (pattern, data) {
|
||||
var size = data.size
|
||||
const size = data.size
|
||||
|
||||
for (var col = 0; col < size; col++) {
|
||||
for (var row = 0; row < size; row++) {
|
||||
for (let col = 0; col < size; col++) {
|
||||
for (let row = 0; row < size; row++) {
|
||||
if (data.isReserved(row, col)) continue
|
||||
data.xor(row, col, getMaskAt(pattern, row, col))
|
||||
}
|
||||
|
@ -206,16 +206,16 @@ exports.applyMask = function applyMask (pattern, data) {
|
|||
* @return {Number} Mask pattern reference number
|
||||
*/
|
||||
exports.getBestMask = function getBestMask (data, setupFormatFunc) {
|
||||
var numPatterns = Object.keys(exports.Patterns).length
|
||||
var bestPattern = 0
|
||||
var lowerPenalty = Infinity
|
||||
const numPatterns = Object.keys(exports.Patterns).length
|
||||
let bestPattern = 0
|
||||
let lowerPenalty = Infinity
|
||||
|
||||
for (var p = 0; p < numPatterns; p++) {
|
||||
for (let p = 0; p < numPatterns; p++) {
|
||||
setupFormatFunc(p)
|
||||
exports.applyMask(p, data)
|
||||
|
||||
// Calculate penalty
|
||||
var penalty =
|
||||
const penalty =
|
||||
exports.getPenaltyN1(data) +
|
||||
exports.getPenaltyN2(data) +
|
||||
exports.getPenaltyN3(data) +
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var VersionCheck = require('./version-check')
|
||||
var Regex = require('./regex')
|
||||
const VersionCheck = require('./version-check')
|
||||
const Regex = require('./regex')
|
||||
|
||||
/**
|
||||
* 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')
|
||||
}
|
||||
|
||||
var lcStr = string.toLowerCase()
|
||||
const lcStr = string.toLowerCase()
|
||||
|
||||
switch (lcStr) {
|
||||
case 'numeric':
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
var Mode = require('./mode')
|
||||
const Mode = require('./mode')
|
||||
|
||||
function NumericData (data) {
|
||||
this.mode = Mode.NUMERIC
|
||||
|
@ -18,7 +18,7 @@ NumericData.prototype.getBitsLength = function getBitsLength () {
|
|||
}
|
||||
|
||||
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,
|
||||
// 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,
|
||||
// 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) {
|
||||
group = this.data.substr(i)
|
||||
value = parseInt(group, 10)
|
||||
|
|
|
@ -1,18 +1,17 @@
|
|||
var BufferUtil = require('../utils/buffer')
|
||||
var GF = require('./galois-field')
|
||||
const GF = require('./galois-field')
|
||||
|
||||
/**
|
||||
* Multiplies two polynomials inside Galois Field
|
||||
*
|
||||
* @param {Buffer} p1 Polynomial
|
||||
* @param {Buffer} p2 Polynomial
|
||||
* @return {Buffer} Product of p1 and p2
|
||||
* @param {Uint8Array} p1 Polynomial
|
||||
* @param {Uint8Array} p2 Polynomial
|
||||
* @return {Uint8Array} Product of p1 and p2
|
||||
*/
|
||||
exports.mul = function mul (p1, p2) {
|
||||
var coeff = BufferUtil.alloc(p1.length + p2.length - 1)
|
||||
const coeff = new Uint8Array(p1.length + p2.length - 1)
|
||||
|
||||
for (var i = 0; i < p1.length; i++) {
|
||||
for (var j = 0; j < p2.length; j++) {
|
||||
for (let i = 0; i < p1.length; i++) {
|
||||
for (let j = 0; j < p2.length; j++) {
|
||||
coeff[i + j] ^= GF.mul(p1[i], p2[j])
|
||||
}
|
||||
}
|
||||
|
@ -23,22 +22,22 @@ exports.mul = function mul (p1, p2) {
|
|||
/**
|
||||
* Calculate the remainder of polynomials division
|
||||
*
|
||||
* @param {Buffer} divident Polynomial
|
||||
* @param {Buffer} divisor Polynomial
|
||||
* @return {Buffer} Remainder
|
||||
* @param {Uint8Array} divident Polynomial
|
||||
* @param {Uint8Array} divisor Polynomial
|
||||
* @return {Uint8Array} Remainder
|
||||
*/
|
||||
exports.mod = function mod (divident, divisor) {
|
||||
var result = BufferUtil.from(divident)
|
||||
let result = new Uint8Array(divident)
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
// remove all zeros from buffer head
|
||||
var offset = 0
|
||||
let offset = 0
|
||||
while (offset < result.length && result[offset] === 0) offset++
|
||||
result = result.slice(offset)
|
||||
}
|
||||
|
@ -51,12 +50,12 @@ exports.mod = function mod (divident, divisor) {
|
|||
* (used by Reed-Solomon encoder)
|
||||
*
|
||||
* @param {Number} degree Degree of the generator polynomial
|
||||
* @return {Buffer} Buffer containing polynomial coefficients
|
||||
* @return {Uint8Array} Buffer containing polynomial coefficients
|
||||
*/
|
||||
exports.generateECPolynomial = function generateECPolynomial (degree) {
|
||||
var poly = BufferUtil.from([1])
|
||||
for (var i = 0; i < degree; i++) {
|
||||
poly = exports.mul(poly, [1, GF.exp(i)])
|
||||
let poly = new Uint8Array([1])
|
||||
for (let i = 0; i < degree; i++) {
|
||||
poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))
|
||||
}
|
||||
|
||||
return poly
|
||||
|
|
|
@ -1,18 +1,16 @@
|
|||
var BufferUtil = require('../utils/buffer')
|
||||
var Utils = require('./utils')
|
||||
var ECLevel = require('./error-correction-level')
|
||||
var BitBuffer = require('./bit-buffer')
|
||||
var BitMatrix = require('./bit-matrix')
|
||||
var AlignmentPattern = require('./alignment-pattern')
|
||||
var FinderPattern = require('./finder-pattern')
|
||||
var MaskPattern = require('./mask-pattern')
|
||||
var ECCode = require('./error-correction-code')
|
||||
var ReedSolomonEncoder = require('./reed-solomon-encoder')
|
||||
var Version = require('./version')
|
||||
var FormatInfo = require('./format-info')
|
||||
var Mode = require('./mode')
|
||||
var Segments = require('./segments')
|
||||
var isArray = require('isarray')
|
||||
const Utils = require('./utils')
|
||||
const ECLevel = require('./error-correction-level')
|
||||
const BitBuffer = require('./bit-buffer')
|
||||
const BitMatrix = require('./bit-matrix')
|
||||
const AlignmentPattern = require('./alignment-pattern')
|
||||
const FinderPattern = require('./finder-pattern')
|
||||
const MaskPattern = require('./mask-pattern')
|
||||
const ECCode = require('./error-correction-code')
|
||||
const ReedSolomonEncoder = require('./reed-solomon-encoder')
|
||||
const Version = require('./version')
|
||||
const FormatInfo = require('./format-info')
|
||||
const Mode = require('./mode')
|
||||
const Segments = require('./segments')
|
||||
|
||||
/**
|
||||
* QRCode for JavaScript
|
||||
|
@ -47,17 +45,17 @@ var isArray = require('isarray')
|
|||
* @param {Number} version QR Code version
|
||||
*/
|
||||
function setupFinderPattern (matrix, version) {
|
||||
var size = matrix.size
|
||||
var pos = FinderPattern.getPositions(version)
|
||||
const size = matrix.size
|
||||
const pos = FinderPattern.getPositions(version)
|
||||
|
||||
for (var i = 0; i < pos.length; i++) {
|
||||
var row = pos[i][0]
|
||||
var col = pos[i][1]
|
||||
for (let i = 0; i < pos.length; i++) {
|
||||
const row = pos[i][0]
|
||||
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
|
||||
|
||||
for (var c = -1; c <= 7; c++) {
|
||||
for (let c = -1; c <= 7; c++) {
|
||||
if (col + c <= -1 || size <= col + c) continue
|
||||
|
||||
if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||
|
||||
|
@ -80,10 +78,10 @@ function setupFinderPattern (matrix, version) {
|
|||
* @param {BitMatrix} matrix Modules matrix
|
||||
*/
|
||||
function setupTimingPattern (matrix) {
|
||||
var size = matrix.size
|
||||
const size = matrix.size
|
||||
|
||||
for (var r = 8; r < size - 8; r++) {
|
||||
var value = r % 2 === 0
|
||||
for (let r = 8; r < size - 8; r++) {
|
||||
const value = r % 2 === 0
|
||||
matrix.set(r, 6, value, true)
|
||||
matrix.set(6, r, value, true)
|
||||
}
|
||||
|
@ -98,14 +96,14 @@ function setupTimingPattern (matrix) {
|
|||
* @param {Number} version QR Code version
|
||||
*/
|
||||
function setupAlignmentPattern (matrix, version) {
|
||||
var pos = AlignmentPattern.getPositions(version)
|
||||
const pos = AlignmentPattern.getPositions(version)
|
||||
|
||||
for (var i = 0; i < pos.length; i++) {
|
||||
var row = pos[i][0]
|
||||
var col = pos[i][1]
|
||||
for (let i = 0; i < pos.length; i++) {
|
||||
const row = pos[i][0]
|
||||
const col = pos[i][1]
|
||||
|
||||
for (var r = -2; r <= 2; r++) {
|
||||
for (var c = -2; c <= 2; c++) {
|
||||
for (let r = -2; r <= 2; r++) {
|
||||
for (let c = -2; c <= 2; c++) {
|
||||
if (r === -2 || r === 2 || c === -2 || c === 2 ||
|
||||
(r === 0 && c === 0)) {
|
||||
matrix.set(row + r, col + c, true, true)
|
||||
|
@ -124,11 +122,11 @@ function setupAlignmentPattern (matrix, version) {
|
|||
* @param {Number} version QR Code version
|
||||
*/
|
||||
function setupVersionInfo (matrix, version) {
|
||||
var size = matrix.size
|
||||
var bits = Version.getEncodedBits(version)
|
||||
var row, col, mod
|
||||
const size = matrix.size
|
||||
const bits = Version.getEncodedBits(version)
|
||||
let row, col, mod
|
||||
|
||||
for (var i = 0; i < 18; i++) {
|
||||
for (let i = 0; i < 18; i++) {
|
||||
row = Math.floor(i / 3)
|
||||
col = i % 3 + size - 8 - 3
|
||||
mod = ((bits >> i) & 1) === 1
|
||||
|
@ -146,9 +144,9 @@ function setupVersionInfo (matrix, version) {
|
|||
* @param {Number} maskPattern Mask pattern reference value
|
||||
*/
|
||||
function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
|
||||
var size = matrix.size
|
||||
var bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
|
||||
var i, mod
|
||||
const size = matrix.size
|
||||
const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)
|
||||
let i, mod
|
||||
|
||||
for (i = 0; i < 15; i++) {
|
||||
mod = ((bits >> i) & 1) === 1
|
||||
|
@ -179,23 +177,23 @@ function setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {
|
|||
/**
|
||||
* Add encoded data bits to matrix
|
||||
*
|
||||
* @param {BitMatrix} matrix Modules matrix
|
||||
* @param {Buffer} data Data codewords
|
||||
* @param {BitMatrix} matrix Modules matrix
|
||||
* @param {Uint8Array} data Data codewords
|
||||
*/
|
||||
function setupData (matrix, data) {
|
||||
var size = matrix.size
|
||||
var inc = -1
|
||||
var row = size - 1
|
||||
var bitIndex = 7
|
||||
var byteIndex = 0
|
||||
const size = matrix.size
|
||||
let inc = -1
|
||||
let row = size - 1
|
||||
let bitIndex = 7
|
||||
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--
|
||||
|
||||
while (true) {
|
||||
for (var c = 0; c < 2; c++) {
|
||||
for (let c = 0; c < 2; c++) {
|
||||
if (!matrix.isReserved(row, col - c)) {
|
||||
var dark = false
|
||||
let dark = false
|
||||
|
||||
if (byteIndex < data.length) {
|
||||
dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)
|
||||
|
@ -228,11 +226,11 @@ function setupData (matrix, data) {
|
|||
* @param {Number} version QR Code version
|
||||
* @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
|
||||
* @param {ByteData} data Data input
|
||||
* @return {Buffer} Buffer containing encoded codewords
|
||||
* @return {Uint8Array} Buffer containing encoded codewords
|
||||
*/
|
||||
function createData (version, errorCorrectionLevel, segments) {
|
||||
// Prepare data buffer
|
||||
var buffer = new BitBuffer()
|
||||
const buffer = new BitBuffer()
|
||||
|
||||
segments.forEach(function (data) {
|
||||
// prefix data with mode indicator (4 bits)
|
||||
|
@ -252,9 +250,9 @@ function createData (version, errorCorrectionLevel, segments) {
|
|||
})
|
||||
|
||||
// Calculate required number of bits
|
||||
var totalCodewords = Utils.getSymbolTotalCodewords(version)
|
||||
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||
var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
|
||||
const totalCodewords = Utils.getSymbolTotalCodewords(version)
|
||||
const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||
const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
|
||||
|
||||
// Add a terminator.
|
||||
// If the bit string is shorter than the total number of required bits,
|
||||
|
@ -278,8 +276,8 @@ function createData (version, errorCorrectionLevel, segments) {
|
|||
// 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)
|
||||
// and 00010001 (0x11) alternately.
|
||||
var remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
|
||||
for (var i = 0; i < remainingByte; i++) {
|
||||
const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8
|
||||
for (let i = 0; i < remainingByte; i++) {
|
||||
buffer.put(i % 2 ? 0x11 : 0xEC, 8)
|
||||
}
|
||||
|
||||
|
@ -293,45 +291,45 @@ function createData (version, errorCorrectionLevel, segments) {
|
|||
* @param {BitBuffer} bitBuffer Data to encode
|
||||
* @param {Number} version QR Code version
|
||||
* @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level
|
||||
* @return {Buffer} Buffer containing encoded codewords
|
||||
* @return {Uint8Array} Buffer containing encoded codewords
|
||||
*/
|
||||
function createCodewords (bitBuffer, version, errorCorrectionLevel) {
|
||||
// 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
|
||||
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||
const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||
|
||||
// Total number of data codewords
|
||||
var dataTotalCodewords = totalCodewords - ecTotalCodewords
|
||||
const dataTotalCodewords = totalCodewords - ecTotalCodewords
|
||||
|
||||
// Total number of blocks
|
||||
var ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)
|
||||
const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)
|
||||
|
||||
// Calculate how many blocks each group should contain
|
||||
var blocksInGroup2 = totalCodewords % ecTotalBlocks
|
||||
var blocksInGroup1 = ecTotalBlocks - blocksInGroup2
|
||||
const blocksInGroup2 = totalCodewords % ecTotalBlocks
|
||||
const blocksInGroup1 = ecTotalBlocks - blocksInGroup2
|
||||
|
||||
var totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)
|
||||
const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)
|
||||
|
||||
var dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
|
||||
var dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1
|
||||
const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)
|
||||
const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1
|
||||
|
||||
// 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
|
||||
var rs = new ReedSolomonEncoder(ecCount)
|
||||
const rs = new ReedSolomonEncoder(ecCount)
|
||||
|
||||
var offset = 0
|
||||
var dcData = new Array(ecTotalBlocks)
|
||||
var ecData = new Array(ecTotalBlocks)
|
||||
var maxDataSize = 0
|
||||
var buffer = BufferUtil.from(bitBuffer.buffer)
|
||||
let offset = 0
|
||||
const dcData = new Array(ecTotalBlocks)
|
||||
const ecData = new Array(ecTotalBlocks)
|
||||
let maxDataSize = 0
|
||||
const buffer = new Uint8Array(bitBuffer.buffer)
|
||||
|
||||
// Divide the buffer into the required number of blocks
|
||||
for (var b = 0; b < ecTotalBlocks; b++) {
|
||||
var dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2
|
||||
for (let b = 0; b < ecTotalBlocks; b++) {
|
||||
const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2
|
||||
|
||||
// extract a block of data from buffer
|
||||
dcData[b] = buffer.slice(offset, offset + dataSize)
|
||||
|
@ -345,9 +343,9 @@ function createCodewords (bitBuffer, version, errorCorrectionLevel) {
|
|||
|
||||
// Create final data
|
||||
// Interleave the data and error correction codewords from each block
|
||||
var data = BufferUtil.alloc(totalCodewords)
|
||||
var index = 0
|
||||
var i, r
|
||||
const data = new Uint8Array(totalCodewords)
|
||||
let index = 0
|
||||
let i, r
|
||||
|
||||
// Add data codewords
|
||||
for (i = 0; i < maxDataSize; i++) {
|
||||
|
@ -378,19 +376,18 @@ function createCodewords (bitBuffer, version, errorCorrectionLevel) {
|
|||
* @return {Object} Object containing symbol data
|
||||
*/
|
||||
function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
|
||||
var segments
|
||||
let segments
|
||||
|
||||
if (isArray(data)) {
|
||||
if (Array.isArray(data)) {
|
||||
segments = Segments.fromArray(data)
|
||||
} else if (typeof data === 'string') {
|
||||
var estimatedVersion = version
|
||||
let estimatedVersion = version
|
||||
|
||||
if (!estimatedVersion) {
|
||||
var rawSegments = Segments.rawSplit(data)
|
||||
const rawSegments = Segments.rawSplit(data)
|
||||
|
||||
// Estimate best version that can contain raw splitted segments
|
||||
estimatedVersion = Version.getBestVersionForData(rawSegments,
|
||||
errorCorrectionLevel)
|
||||
estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)
|
||||
}
|
||||
|
||||
// Build optimized segments
|
||||
|
@ -401,8 +398,7 @@ function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
|
|||
}
|
||||
|
||||
// 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 (!bestVersion) {
|
||||
|
@ -421,11 +417,11 @@ function createSymbol (data, version, errorCorrectionLevel, maskPattern) {
|
|||
)
|
||||
}
|
||||
|
||||
var dataBits = createData(version, errorCorrectionLevel, segments)
|
||||
const dataBits = createData(version, errorCorrectionLevel, segments)
|
||||
|
||||
// Allocate matrix buffer
|
||||
var moduleCount = Utils.getSymbolSize(version)
|
||||
var modules = new BitMatrix(moduleCount)
|
||||
const moduleCount = Utils.getSymbolSize(version)
|
||||
const modules = new BitMatrix(moduleCount)
|
||||
|
||||
// Add function modules
|
||||
setupFinderPattern(modules, version)
|
||||
|
@ -480,9 +476,9 @@ exports.create = function create (data, options) {
|
|||
throw new Error('No input text')
|
||||
}
|
||||
|
||||
var errorCorrectionLevel = ECLevel.M
|
||||
var version
|
||||
var mask
|
||||
let errorCorrectionLevel = ECLevel.M
|
||||
let version
|
||||
let mask
|
||||
|
||||
if (typeof options !== 'undefined') {
|
||||
// Use higher error correction level as default
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
var BufferUtil = require('../utils/buffer')
|
||||
var Polynomial = require('./polynomial')
|
||||
var Buffer = require('buffer/').Buffer
|
||||
const Polynomial = require('./polynomial')
|
||||
|
||||
function ReedSolomonEncoder (degree) {
|
||||
this.genPoly = undefined
|
||||
|
@ -24,8 +22,8 @@ ReedSolomonEncoder.prototype.initialize = function initialize (degree) {
|
|||
/**
|
||||
* Encodes a chunk of data
|
||||
*
|
||||
* @param {Buffer} data Buffer containing input data
|
||||
* @return {Buffer} Buffer containing encoded data
|
||||
* @param {Uint8Array} data Buffer containing input data
|
||||
* @return {Uint8Array} Buffer containing encoded data
|
||||
*/
|
||||
ReedSolomonEncoder.prototype.encode = function encode (data) {
|
||||
if (!this.genPoly) {
|
||||
|
@ -34,20 +32,20 @@ ReedSolomonEncoder.prototype.encode = function encode (data) {
|
|||
|
||||
// Calculate EC for this data block
|
||||
// extends data size to data+genPoly size
|
||||
var pad = BufferUtil.alloc(this.degree)
|
||||
var paddedData = Buffer.concat([data, pad], data.length + this.degree)
|
||||
const paddedData = new Uint8Array(data.length + this.degree)
|
||||
paddedData.set(data)
|
||||
|
||||
// The error correction codewords are the remainder after dividing the data codewords
|
||||
// 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)
|
||||
// If coefficients number in remainder are less than genPoly degree,
|
||||
// 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) {
|
||||
var buff = BufferUtil.alloc(this.degree)
|
||||
remainder.copy(buff, start)
|
||||
const buff = new Uint8Array(this.degree)
|
||||
buff.set(remainder, start)
|
||||
|
||||
return buff
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
var numeric = '[0-9]+'
|
||||
var alphanumeric = '[A-Z $%*+\\-./:]+'
|
||||
var kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
|
||||
const numeric = '[0-9]+'
|
||||
const alphanumeric = '[A-Z $%*+\\-./:]+'
|
||||
let kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +
|
||||
'[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +
|
||||
'[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +
|
||||
'[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'
|
||||
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.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.ALPHANUMERIC = new RegExp(alphanumeric, 'g')
|
||||
|
||||
var TEST_KANJI = new RegExp('^' + kanji + '$')
|
||||
var TEST_NUMERIC = new RegExp('^' + numeric + '$')
|
||||
var TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')
|
||||
const TEST_KANJI = new RegExp('^' + kanji + '$')
|
||||
const TEST_NUMERIC = new RegExp('^' + numeric + '$')
|
||||
const TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\-./:]+$')
|
||||
|
||||
exports.testKanji = function testKanji (str) {
|
||||
return TEST_KANJI.test(str)
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
var Mode = require('./mode')
|
||||
var NumericData = require('./numeric-data')
|
||||
var AlphanumericData = require('./alphanumeric-data')
|
||||
var ByteData = require('./byte-data')
|
||||
var KanjiData = require('./kanji-data')
|
||||
var Regex = require('./regex')
|
||||
var Utils = require('./utils')
|
||||
var dijkstra = require('dijkstrajs')
|
||||
const Mode = require('./mode')
|
||||
const NumericData = require('./numeric-data')
|
||||
const AlphanumericData = require('./alphanumeric-data')
|
||||
const ByteData = require('./byte-data')
|
||||
const KanjiData = require('./kanji-data')
|
||||
const Regex = require('./regex')
|
||||
const Utils = require('./utils')
|
||||
const dijkstra = require('dijkstrajs')
|
||||
|
||||
/**
|
||||
* Returns UTF8 byte length
|
||||
|
@ -26,8 +26,8 @@ function getStringByteLength (str) {
|
|||
* @return {Array} Array of object with segments data
|
||||
*/
|
||||
function getSegments (regex, mode, str) {
|
||||
var segments = []
|
||||
var result
|
||||
const segments = []
|
||||
let result
|
||||
|
||||
while ((result = regex.exec(str)) !== null) {
|
||||
segments.push({
|
||||
|
@ -49,10 +49,10 @@ function getSegments (regex, mode, str) {
|
|||
* @return {Array} Array of object with segments data
|
||||
*/
|
||||
function getSegmentsFromString (dataStr) {
|
||||
var numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
|
||||
var alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
|
||||
var byteSegs
|
||||
var kanjiSegs
|
||||
const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)
|
||||
const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)
|
||||
let byteSegs
|
||||
let kanjiSegs
|
||||
|
||||
if (Utils.isKanjiModeEnabled()) {
|
||||
byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)
|
||||
|
@ -62,7 +62,7 @@ function getSegmentsFromString (dataStr) {
|
|||
kanjiSegs = []
|
||||
}
|
||||
|
||||
var segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)
|
||||
const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)
|
||||
|
||||
return segs
|
||||
.sort(function (s1, s2) {
|
||||
|
@ -106,7 +106,7 @@ function getSegmentBitsLength (length, mode) {
|
|||
*/
|
||||
function mergeSegments (segs) {
|
||||
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) {
|
||||
acc[acc.length - 1].data += curr.data
|
||||
return acc
|
||||
|
@ -134,9 +134,9 @@ function mergeSegments (segs) {
|
|||
* @return {Array} Array of object with segments data
|
||||
*/
|
||||
function buildNodes (segs) {
|
||||
var nodes = []
|
||||
for (var i = 0; i < segs.length; i++) {
|
||||
var seg = segs[i]
|
||||
const nodes = []
|
||||
for (let i = 0; i < segs.length; i++) {
|
||||
const seg = segs[i]
|
||||
|
||||
switch (seg.mode) {
|
||||
case Mode.NUMERIC:
|
||||
|
@ -178,24 +178,24 @@ function buildNodes (segs) {
|
|||
* @return {Object} Graph of all possible segments
|
||||
*/
|
||||
function buildGraph (nodes, version) {
|
||||
var table = {}
|
||||
var graph = {'start': {}}
|
||||
var prevNodeIds = ['start']
|
||||
const table = {}
|
||||
const graph = { start: {} }
|
||||
let prevNodeIds = ['start']
|
||||
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
var nodeGroup = nodes[i]
|
||||
var currentNodeIds = []
|
||||
for (let i = 0; i < nodes.length; i++) {
|
||||
const nodeGroup = nodes[i]
|
||||
const currentNodeIds = []
|
||||
|
||||
for (var j = 0; j < nodeGroup.length; j++) {
|
||||
var node = nodeGroup[j]
|
||||
var key = '' + i + j
|
||||
for (let j = 0; j < nodeGroup.length; j++) {
|
||||
const node = nodeGroup[j]
|
||||
const key = '' + i + j
|
||||
|
||||
currentNodeIds.push(key)
|
||||
table[key] = { node: node, lastCount: 0 }
|
||||
graph[key] = {}
|
||||
|
||||
for (var n = 0; n < prevNodeIds.length; n++) {
|
||||
var prevNodeId = prevNodeIds[n]
|
||||
for (let n = 0; n < prevNodeIds.length; n++) {
|
||||
const prevNodeId = prevNodeIds[n]
|
||||
|
||||
if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {
|
||||
graph[prevNodeId][key] =
|
||||
|
@ -215,8 +215,8 @@ function buildGraph (nodes, version) {
|
|||
prevNodeIds = currentNodeIds
|
||||
}
|
||||
|
||||
for (n = 0; n < prevNodeIds.length; n++) {
|
||||
graph[prevNodeIds[n]]['end'] = 0
|
||||
for (let n = 0; n < prevNodeIds.length; n++) {
|
||||
graph[prevNodeIds[n]].end = 0
|
||||
}
|
||||
|
||||
return { map: graph, table: table }
|
||||
|
@ -231,8 +231,8 @@ function buildGraph (nodes, version) {
|
|||
* @return {Segment} Segment
|
||||
*/
|
||||
function buildSingleSegment (data, modesHint) {
|
||||
var mode
|
||||
var bestMode = Mode.getBestModeForData(data)
|
||||
let mode
|
||||
const bestMode = Mode.getBestModeForData(data)
|
||||
|
||||
mode = Mode.from(modesHint, bestMode)
|
||||
|
||||
|
@ -299,14 +299,14 @@ exports.fromArray = function fromArray (array) {
|
|||
* @return {Array} Array of segments
|
||||
*/
|
||||
exports.fromString = function fromString (data, version) {
|
||||
var segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())
|
||||
const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())
|
||||
|
||||
var nodes = buildNodes(segs)
|
||||
var graph = buildGraph(nodes, version)
|
||||
var path = dijkstra.find_path(graph.map, 'start', 'end')
|
||||
const nodes = buildNodes(segs)
|
||||
const graph = buildGraph(nodes, version)
|
||||
const path = dijkstra.find_path(graph.map, 'start', 'end')
|
||||
|
||||
var optimizedSegs = []
|
||||
for (var i = 1; i < path.length - 1; i++) {
|
||||
const optimizedSegs = []
|
||||
for (let i = 1; i < path.length - 1; i++) {
|
||||
optimizedSegs.push(graph.table[path[i]].node)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var toSJISFunction
|
||||
var CODEWORDS_COUNT = [
|
||||
let toSJISFunction
|
||||
const CODEWORDS_COUNT = [
|
||||
0, // Not used
|
||||
26, 44, 70, 100, 134, 172, 196, 242, 292, 346,
|
||||
404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,
|
||||
|
@ -36,7 +36,7 @@ exports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {
|
|||
* @return {Number} Encoded value
|
||||
*/
|
||||
exports.getBCHDigit = function (data) {
|
||||
var digit = 0
|
||||
let digit = 0
|
||||
|
||||
while (data !== 0) {
|
||||
digit++
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
var Utils = require('./utils')
|
||||
var ECCode = require('./error-correction-code')
|
||||
var ECLevel = require('./error-correction-level')
|
||||
var Mode = require('./mode')
|
||||
var VersionCheck = require('./version-check')
|
||||
var isArray = require('isarray')
|
||||
const Utils = require('./utils')
|
||||
const ECCode = require('./error-correction-code')
|
||||
const ECLevel = require('./error-correction-level')
|
||||
const Mode = require('./mode')
|
||||
const VersionCheck = require('./version-check')
|
||||
|
||||
// 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)
|
||||
var G18_BCH = Utils.getBCHDigit(G18)
|
||||
const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)
|
||||
const G18_BCH = Utils.getBCHDigit(G18)
|
||||
|
||||
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)) {
|
||||
return currentVersion
|
||||
}
|
||||
|
@ -25,10 +24,10 @@ function getReservedBitsCount (mode, version) {
|
|||
}
|
||||
|
||||
function getTotalBitsFromDataArray (segments, version) {
|
||||
var totalBits = 0
|
||||
let totalBits = 0
|
||||
|
||||
segments.forEach(function (data) {
|
||||
var reservedBits = getReservedBitsCount(data.mode, version)
|
||||
const reservedBits = getReservedBitsCount(data.mode, version)
|
||||
totalBits += reservedBits + data.getBitsLength()
|
||||
})
|
||||
|
||||
|
@ -36,8 +35,8 @@ function getTotalBitsFromDataArray (segments, version) {
|
|||
}
|
||||
|
||||
function getBestVersionForMixedData (segments, errorCorrectionLevel) {
|
||||
for (var currentVersion = 1; currentVersion <= 40; currentVersion++) {
|
||||
var length = getTotalBitsFromDataArray(segments, currentVersion)
|
||||
for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {
|
||||
const length = getTotalBitsFromDataArray(segments, currentVersion)
|
||||
if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {
|
||||
return currentVersion
|
||||
}
|
||||
|
@ -80,17 +79,17 @@ exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode)
|
|||
if (typeof mode === 'undefined') mode = Mode.BYTE
|
||||
|
||||
// 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
|
||||
var ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||
const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)
|
||||
|
||||
// Total number of data codewords
|
||||
var dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
|
||||
const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8
|
||||
|
||||
if (mode === Mode.MIXED) return dataTotalCodewordsBits
|
||||
|
||||
var usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)
|
||||
const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)
|
||||
|
||||
// Return max number of storable codewords
|
||||
switch (mode) {
|
||||
|
@ -118,11 +117,11 @@ exports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode)
|
|||
* @return {Number} QR Code version
|
||||
*/
|
||||
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 (Array.isArray(data)) {
|
||||
if (data.length > 1) {
|
||||
return getBestVersionForMixedData(data, ecl)
|
||||
}
|
||||
|
@ -154,7 +153,7 @@ exports.getEncodedBits = function getEncodedBits (version) {
|
|||
throw new Error('Invalid QR Code version')
|
||||
}
|
||||
|
||||
var d = version << 12
|
||||
let d = version << 12
|
||||
|
||||
while (Utils.getBCHDigit(d) - G18_BCH >= 0) {
|
||||
d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
var Utils = require('./utils')
|
||||
const Utils = require('./utils')
|
||||
|
||||
function clearCanvas (ctx, canvas, size) {
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height)
|
||||
|
@ -19,8 +19,8 @@ function getCanvasElement () {
|
|||
}
|
||||
|
||||
exports.render = function render (qrData, canvas, options) {
|
||||
var opts = options
|
||||
var canvasEl = canvas
|
||||
let opts = options
|
||||
let canvasEl = canvas
|
||||
|
||||
if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
|
||||
opts = canvas
|
||||
|
@ -32,10 +32,10 @@ exports.render = function render (qrData, canvas, options) {
|
|||
}
|
||||
|
||||
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')
|
||||
var image = ctx.createImageData(size, size)
|
||||
const ctx = canvasEl.getContext('2d')
|
||||
const image = ctx.createImageData(size, size)
|
||||
Utils.qrToImageData(image.data, qrData, opts)
|
||||
|
||||
clearCanvas(ctx, canvasEl, size)
|
||||
|
@ -45,7 +45,7 @@ exports.render = function render (qrData, canvas, options) {
|
|||
}
|
||||
|
||||
exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
|
||||
var opts = options
|
||||
let opts = options
|
||||
|
||||
if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {
|
||||
opts = canvas
|
||||
|
@ -54,10 +54,10 @@ exports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {
|
|||
|
||||
if (!opts) opts = {}
|
||||
|
||||
var canvasEl = exports.render(qrData, canvas, opts)
|
||||
const canvasEl = exports.render(qrData, canvas, opts)
|
||||
|
||||
var type = opts.type || 'image/png'
|
||||
var rendererOpts = opts.rendererOpts || {}
|
||||
const type = opts.type || 'image/png'
|
||||
const rendererOpts = opts.rendererOpts || {}
|
||||
|
||||
return canvasEl.toDataURL(type, rendererOpts.quality)
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
var fs = require('fs')
|
||||
var PNG = require('pngjs').PNG
|
||||
var Utils = require('./utils')
|
||||
const fs = require('fs')
|
||||
const PNG = require('pngjs').PNG
|
||||
const Utils = require('./utils')
|
||||
|
||||
exports.render = function render (qrData, options) {
|
||||
var opts = Utils.getOptions(options)
|
||||
var pngOpts = opts.rendererOpts
|
||||
var size = Utils.getImageWidth(qrData.modules.size, opts)
|
||||
const opts = Utils.getOptions(options)
|
||||
const pngOpts = opts.rendererOpts
|
||||
const size = Utils.getImageWidth(qrData.modules.size, opts)
|
||||
|
||||
pngOpts.width = size
|
||||
pngOpts.height = size
|
||||
|
||||
var pngImage = new PNG(pngOpts)
|
||||
const pngImage = new PNG(pngOpts)
|
||||
Utils.qrToImageData(pngImage.data, qrData, opts)
|
||||
|
||||
return pngImage
|
||||
|
@ -24,7 +24,7 @@ exports.renderToDataURL = function renderToDataURL (qrData, options, cb) {
|
|||
|
||||
exports.renderToBuffer(qrData, options, function (err, output) {
|
||||
if (err) cb(err)
|
||||
var url = 'data:image/png;base64,'
|
||||
let url = 'data:image/png;base64,'
|
||||
url += output.toString('base64')
|
||||
cb(null, url)
|
||||
})
|
||||
|
@ -36,8 +36,8 @@ exports.renderToBuffer = function renderToBuffer (qrData, options, cb) {
|
|||
options = undefined
|
||||
}
|
||||
|
||||
var png = exports.render(qrData, options)
|
||||
var buffer = []
|
||||
const png = exports.render(qrData, options)
|
||||
const buffer = []
|
||||
|
||||
png.on('error', cb)
|
||||
|
||||
|
@ -58,7 +58,7 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
|||
options = undefined
|
||||
}
|
||||
|
||||
var stream = fs.createWriteStream(path)
|
||||
const stream = fs.createWriteStream(path)
|
||||
stream.on('error', cb)
|
||||
stream.on('close', cb)
|
||||
|
||||
|
@ -66,6 +66,6 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
|||
}
|
||||
|
||||
exports.renderToFileStream = function renderToFileStream (stream, qrData, options) {
|
||||
var png = exports.render(qrData, options)
|
||||
const png = exports.render(qrData, options)
|
||||
png.pack().pipe(stream)
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
var Utils = require('./utils')
|
||||
const Utils = require('./utils')
|
||||
|
||||
function getColorAttrib (color, attrib) {
|
||||
var alpha = color.a / 255
|
||||
var str = attrib + '="' + color.hex + '"'
|
||||
const alpha = color.a / 255
|
||||
const str = attrib + '="' + color.hex + '"'
|
||||
|
||||
return alpha < 1
|
||||
? str + ' ' + attrib + '-opacity="' + alpha.toFixed(2).slice(1) + '"'
|
||||
|
@ -10,21 +10,21 @@ function getColorAttrib (color, attrib) {
|
|||
}
|
||||
|
||||
function svgCmd (cmd, x, y) {
|
||||
var str = cmd + x
|
||||
let str = cmd + x
|
||||
if (typeof y !== 'undefined') str += ' ' + y
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
function qrToPath (data, size, margin) {
|
||||
var path = ''
|
||||
var moveBy = 0
|
||||
var newRow = false
|
||||
var lineLength = 0
|
||||
let path = ''
|
||||
let moveBy = 0
|
||||
let newRow = false
|
||||
let lineLength = 0
|
||||
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var col = Math.floor(i % size)
|
||||
var row = Math.floor(i / size)
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
const col = Math.floor(i % size)
|
||||
const row = Math.floor(i / size)
|
||||
|
||||
if (!col && !newRow) newRow = true
|
||||
|
||||
|
@ -53,25 +53,25 @@ function qrToPath (data, size, margin) {
|
|||
}
|
||||
|
||||
exports.render = function render (qrData, options, cb) {
|
||||
var opts = Utils.getOptions(options)
|
||||
var size = qrData.modules.size
|
||||
var data = qrData.modules.data
|
||||
var qrcodesize = size + opts.margin * 2
|
||||
const opts = Utils.getOptions(options)
|
||||
const size = qrData.modules.size
|
||||
const data = qrData.modules.data
|
||||
const qrcodesize = size + opts.margin * 2
|
||||
|
||||
var bg = !opts.color.light.a
|
||||
const bg = !opts.color.light.a
|
||||
? ''
|
||||
: '<path ' + getColorAttrib(opts.color.light, 'fill') +
|
||||
' d="M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z"/>'
|
||||
|
||||
var path =
|
||||
const path =
|
||||
'<path ' + getColorAttrib(opts.color.dark, 'stroke') +
|
||||
' 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') {
|
||||
cb(null, svgTag)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
var svgTagRenderer = require('./svg-tag')
|
||||
const svgTagRenderer = require('./svg-tag')
|
||||
|
||||
exports.render = svgTagRenderer.render
|
||||
|
||||
|
@ -8,10 +8,10 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
|||
options = undefined
|
||||
}
|
||||
|
||||
var fs = require('fs')
|
||||
var svgTag = exports.render(qrData, options)
|
||||
const fs = require('fs')
|
||||
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">' +
|
||||
svgTag
|
||||
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
// var Utils = require('./utils')
|
||||
// let Utils = require('./utils')
|
||||
|
||||
exports.render = function (qrData, options, cb) {
|
||||
var size = qrData.modules.size
|
||||
var data = qrData.modules.data
|
||||
const size = qrData.modules.size
|
||||
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! =)
|
||||
var black = '\x1b[40m \x1b[0m'
|
||||
var white = '\x1b[47m \x1b[0m'
|
||||
const black = '\x1b[40m \x1b[0m'
|
||||
const white = '\x1b[47m \x1b[0m'
|
||||
|
||||
var output = ''
|
||||
var hMargin = Array(size + 3).join(white)
|
||||
var vMargin = Array(2).join(white)
|
||||
let output = ''
|
||||
const hMargin = Array(size + 3).join(white)
|
||||
const vMargin = Array(2).join(white)
|
||||
|
||||
output += hMargin + '\n'
|
||||
for (var i = 0; i < size; ++i) {
|
||||
for (let i = 0; i < size; ++i) {
|
||||
output += white
|
||||
for (var j = 0; j < size; j++) {
|
||||
// var topModule = data[i * size + j]
|
||||
// var bottomModule = data[(i + 1) * size + j]
|
||||
for (let j = 0; j < size; j++) {
|
||||
// let topModule = data[i * size + j]
|
||||
// let bottomModule = data[(i + 1) * size + j]
|
||||
|
||||
output += data[i * size + j] ? black : white// getBlockChar(topModule, bottomModule)
|
||||
}
|
||||
|
@ -42,8 +42,8 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
|||
options = undefined
|
||||
}
|
||||
|
||||
var fs = require('fs')
|
||||
var utf8 = exports.render(qrData, options)
|
||||
let fs = require('fs')
|
||||
let utf8 = exports.render(qrData, options)
|
||||
fs.writeFile(path, utf8, cb)
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
var Utils = require('./utils')
|
||||
const Utils = require('./utils')
|
||||
|
||||
var BLOCK_CHAR = {
|
||||
const BLOCK_CHAR = {
|
||||
WW: ' ',
|
||||
WB: '▄',
|
||||
BB: '█',
|
||||
BW: '▀'
|
||||
}
|
||||
|
||||
var INVERTED_BLOCK_CHAR = {
|
||||
const INVERTED_BLOCK_CHAR = {
|
||||
BB: ' ',
|
||||
BW: '▄',
|
||||
WW: '█',
|
||||
|
@ -22,27 +22,27 @@ function getBlockChar (top, bottom, blocks) {
|
|||
}
|
||||
|
||||
exports.render = function (qrData, options, cb) {
|
||||
var opts = Utils.getOptions(options)
|
||||
var blocks = BLOCK_CHAR
|
||||
const opts = Utils.getOptions(options)
|
||||
let blocks = BLOCK_CHAR
|
||||
if (opts.color.dark.hex === '#ffffff' || opts.color.light.hex === '#000000') {
|
||||
blocks = INVERTED_BLOCK_CHAR
|
||||
}
|
||||
|
||||
var size = qrData.modules.size
|
||||
var data = qrData.modules.data
|
||||
const size = qrData.modules.size
|
||||
const data = qrData.modules.data
|
||||
|
||||
var output = ''
|
||||
var hMargin = Array(size + (opts.margin * 2) + 1).join(blocks.WW)
|
||||
let output = ''
|
||||
let hMargin = Array(size + (opts.margin * 2) + 1).join(blocks.WW)
|
||||
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
|
||||
for (var i = 0; i < size; i += 2) {
|
||||
for (let i = 0; i < size; i += 2) {
|
||||
output += vMargin
|
||||
for (var j = 0; j < size; j++) {
|
||||
var topModule = data[i * size + j]
|
||||
var bottomModule = data[(i + 1) * size + j]
|
||||
for (let j = 0; j < size; j++) {
|
||||
const topModule = data[i * size + j]
|
||||
const bottomModule = data[(i + 1) * size + j]
|
||||
|
||||
output += getBlockChar(topModule, bottomModule, blocks)
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ exports.renderToFile = function renderToFile (path, qrData, options, cb) {
|
|||
options = undefined
|
||||
}
|
||||
|
||||
var fs = require('fs')
|
||||
var utf8 = exports.render(qrData, options)
|
||||
const fs = require('fs')
|
||||
const utf8 = exports.render(qrData, options)
|
||||
fs.writeFile(path, utf8, cb)
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ function hex2rgba (hex) {
|
|||
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) {
|
||||
throw new Error('Invalid hex color: ' + hex)
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ function hex2rgba (hex) {
|
|||
// Add default alpha value
|
||||
if (hexCode.length === 6) hexCode.push('F', 'F')
|
||||
|
||||
var hexValue = parseInt(hexCode.join(''), 16)
|
||||
const hexValue = parseInt(hexCode.join(''), 16)
|
||||
|
||||
return {
|
||||
r: (hexValue >> 24) & 255,
|
||||
|
@ -37,12 +37,12 @@ exports.getOptions = function getOptions (options) {
|
|||
if (!options) options = {}
|
||||
if (!options.color) options.color = {}
|
||||
|
||||
var margin = typeof options.margin === 'undefined' ||
|
||||
const margin = typeof options.margin === 'undefined' ||
|
||||
options.margin === null ||
|
||||
options.margin < 0 ? 4 : options.margin
|
||||
|
||||
var width = options.width && options.width >= 21 ? options.width : undefined
|
||||
var scale = options.scale || 4
|
||||
const width = options.width && options.width >= 21 ? options.width : undefined
|
||||
const scale = options.scale || 4
|
||||
|
||||
return {
|
||||
width: width,
|
||||
|
@ -64,27 +64,27 @@ exports.getScale = function getScale (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)
|
||||
}
|
||||
|
||||
exports.qrToImageData = function qrToImageData (imgData, qr, opts) {
|
||||
var size = qr.modules.size
|
||||
var data = qr.modules.data
|
||||
var scale = exports.getScale(size, opts)
|
||||
var symbolSize = Math.floor((size + opts.margin * 2) * scale)
|
||||
var scaledMargin = opts.margin * scale
|
||||
var palette = [opts.color.light, opts.color.dark]
|
||||
const size = qr.modules.size
|
||||
const data = qr.modules.data
|
||||
const scale = exports.getScale(size, opts)
|
||||
const symbolSize = Math.floor((size + opts.margin * 2) * scale)
|
||||
const scaledMargin = opts.margin * scale
|
||||
const palette = [opts.color.light, opts.color.dark]
|
||||
|
||||
for (var i = 0; i < symbolSize; i++) {
|
||||
for (var j = 0; j < symbolSize; j++) {
|
||||
var posDst = (i * symbolSize + j) * 4
|
||||
var pxColor = opts.color.light
|
||||
for (let i = 0; i < symbolSize; i++) {
|
||||
for (let j = 0; j < symbolSize; j++) {
|
||||
let posDst = (i * symbolSize + j) * 4
|
||||
let pxColor = opts.color.light
|
||||
|
||||
if (i >= scaledMargin && j >= scaledMargin &&
|
||||
i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {
|
||||
var iSrc = Math.floor((i - scaledMargin) / scale)
|
||||
var jSrc = Math.floor((j - scaledMargin) / scale)
|
||||
const iSrc = Math.floor((i - scaledMargin) / scale)
|
||||
const jSrc = Math.floor((j - scaledMargin) / scale)
|
||||
pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
var canPromise = require('./can-promise')
|
||||
var QRCode = require('./core/qrcode')
|
||||
var PngRenderer = require('./renderer/png')
|
||||
var Utf8Renderer = require('./renderer/utf8')
|
||||
var TerminalRenderer = require('./renderer/terminal')
|
||||
var SvgRenderer = require('./renderer/svg')
|
||||
const canPromise = require('./can-promise')
|
||||
const QRCode = require('./core/qrcode')
|
||||
const PngRenderer = require('./renderer/png')
|
||||
const Utf8Renderer = require('./renderer/utf8')
|
||||
const TerminalRenderer = require('./renderer/terminal')
|
||||
const SvgRenderer = require('./renderer/svg')
|
||||
|
||||
function checkParams (text, opts, cb) {
|
||||
if (typeof text === 'undefined') {
|
||||
|
@ -68,7 +68,7 @@ function render (renderFunc, text, params) {
|
|||
if (!params.cb) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
try {
|
||||
var data = QRCode.create(text, params.opts)
|
||||
const data = QRCode.create(text, params.opts)
|
||||
return renderFunc(data, params.opts, function (err, data) {
|
||||
return err ? reject(err) : resolve(data)
|
||||
})
|
||||
|
@ -79,7 +79,7 @@ function render (renderFunc, text, params) {
|
|||
}
|
||||
|
||||
try {
|
||||
var data = QRCode.create(text, params.opts)
|
||||
const data = QRCode.create(text, params.opts)
|
||||
return renderFunc(data, params.opts, params.cb)
|
||||
} catch (e) {
|
||||
params.cb(e)
|
||||
|
@ -91,20 +91,20 @@ exports.create = QRCode.create
|
|||
exports.toCanvas = require('./browser').toCanvas
|
||||
|
||||
exports.toString = function toString (text, opts, cb) {
|
||||
var params = checkParams(text, opts, cb)
|
||||
var renderer = getStringRendererFromType(params.opts.type)
|
||||
const params = checkParams(text, opts, cb)
|
||||
const renderer = getStringRendererFromType(params.opts.type)
|
||||
return render(renderer.render, text, params)
|
||||
}
|
||||
|
||||
exports.toDataURL = function toDataURL (text, opts, cb) {
|
||||
var params = checkParams(text, opts, cb)
|
||||
var renderer = getRendererFromType(params.opts.type)
|
||||
const params = checkParams(text, opts, cb)
|
||||
const renderer = getRendererFromType(params.opts.type)
|
||||
return render(renderer.renderToDataURL, text, params)
|
||||
}
|
||||
|
||||
exports.toBuffer = function toBuffer (text, opts, cb) {
|
||||
var params = checkParams(text, opts, cb)
|
||||
var renderer = getRendererFromType(params.opts.type)
|
||||
const params = checkParams(text, opts, cb)
|
||||
const renderer = getRendererFromType(params.opts.type)
|
||||
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')
|
||||
}
|
||||
|
||||
var params = checkParams(text, opts, cb)
|
||||
var type = params.opts.type || getTypeFromFilename(path)
|
||||
var renderer = getRendererFromType(type)
|
||||
var renderToFile = renderer.renderToFile.bind(null, path)
|
||||
const params = checkParams(text, opts, cb)
|
||||
const type = params.opts.type || getTypeFromFilename(path)
|
||||
const renderer = getRendererFromType(type)
|
||||
const renderToFile = renderer.renderToFile.bind(null, path)
|
||||
|
||||
return render(renderToFile, text, params)
|
||||
}
|
||||
|
@ -130,8 +130,8 @@ exports.toFileStream = function toFileStream (stream, text, opts) {
|
|||
throw new Error('Too few arguments provided')
|
||||
}
|
||||
|
||||
var params = checkParams(text, opts, stream.emit.bind(stream, 'error'))
|
||||
var renderer = getRendererFromType('png') // Only png support for now
|
||||
var renderToFileStream = renderer.renderToFileStream.bind(null, stream)
|
||||
const params = checkParams(text, opts, stream.emit.bind(stream, 'error'))
|
||||
const renderer = getRendererFromType('png') // Only png support for now
|
||||
const renderToFileStream = renderer.renderToFileStream.bind(null, stream)
|
||||
render(renderToFileStream, text, params)
|
||||
}
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
module.exports.alloc = require('buffer-alloc')
|
||||
module.exports.from = require('buffer-from')
|
|
@ -1,520 +0,0 @@
|
|||
/**
|
||||
* Implementation of a subset of node.js Buffer methods for the browser.
|
||||
* Based on https://github.com/feross/buffer
|
||||
*/
|
||||
|
||||
/* eslint-disable no-proto */
|
||||
|
||||
'use strict'
|
||||
|
||||
var isArray = require('isarray')
|
||||
|
||||
function typedArraySupport () {
|
||||
// Can typed array instances be augmented?
|
||||
try {
|
||||
var arr = new Uint8Array(1)
|
||||
arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
|
||||
return arr.foo() === 42
|
||||
} catch (e) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
|
||||
|
||||
var K_MAX_LENGTH = Buffer.TYPED_ARRAY_SUPPORT
|
||||
? 0x7fffffff
|
||||
: 0x3fffffff
|
||||
|
||||
function Buffer (arg, offset, length) {
|
||||
if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
|
||||
return new Buffer(arg, offset, length)
|
||||
}
|
||||
|
||||
if (typeof arg === 'number') {
|
||||
return allocUnsafe(this, arg)
|
||||
}
|
||||
|
||||
return from(this, arg, offset, length)
|
||||
}
|
||||
|
||||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||||
Buffer.prototype.__proto__ = Uint8Array.prototype
|
||||
Buffer.__proto__ = Uint8Array
|
||||
|
||||
// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
|
||||
if (typeof Symbol !== 'undefined' && Symbol.species &&
|
||||
Buffer[Symbol.species] === Buffer) {
|
||||
Object.defineProperty(Buffer, Symbol.species, {
|
||||
value: null,
|
||||
configurable: true,
|
||||
enumerable: false,
|
||||
writable: false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function checked (length) {
|
||||
// Note: cannot use `length < K_MAX_LENGTH` here because that fails when
|
||||
// length is NaN (which is otherwise coerced to zero.)
|
||||
if (length >= K_MAX_LENGTH) {
|
||||
throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
|
||||
'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
|
||||
}
|
||||
return length | 0
|
||||
}
|
||||
|
||||
function isnan (val) {
|
||||
return val !== val // eslint-disable-line no-self-compare
|
||||
}
|
||||
|
||||
function createBuffer (that, length) {
|
||||
var buf
|
||||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||||
buf = new Uint8Array(length)
|
||||
buf.__proto__ = Buffer.prototype
|
||||
} else {
|
||||
// Fallback: Return an object instance of the Buffer class
|
||||
buf = that
|
||||
if (buf === null) {
|
||||
buf = new Buffer(length)
|
||||
}
|
||||
buf.length = length
|
||||
}
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
function allocUnsafe (that, size) {
|
||||
var buf = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
|
||||
|
||||
if (!Buffer.TYPED_ARRAY_SUPPORT) {
|
||||
for (var i = 0; i < size; ++i) {
|
||||
buf[i] = 0
|
||||
}
|
||||
}
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
function fromString (that, string) {
|
||||
var length = byteLength(string) | 0
|
||||
var buf = createBuffer(that, length)
|
||||
|
||||
var actual = buf.write(string)
|
||||
|
||||
if (actual !== length) {
|
||||
// Writing a hex string, for example, that contains invalid characters will
|
||||
// cause everything after the first invalid character to be ignored. (e.g.
|
||||
// 'abxxcd' will be treated as 'ab')
|
||||
buf = buf.slice(0, actual)
|
||||
}
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
function fromArrayLike (that, array) {
|
||||
var length = array.length < 0 ? 0 : checked(array.length) | 0
|
||||
var buf = createBuffer(that, length)
|
||||
for (var i = 0; i < length; i += 1) {
|
||||
buf[i] = array[i] & 255
|
||||
}
|
||||
return buf
|
||||
}
|
||||
|
||||
function fromArrayBuffer (that, array, byteOffset, length) {
|
||||
if (byteOffset < 0 || array.byteLength < byteOffset) {
|
||||
throw new RangeError('\'offset\' is out of bounds')
|
||||
}
|
||||
|
||||
if (array.byteLength < byteOffset + (length || 0)) {
|
||||
throw new RangeError('\'length\' is out of bounds')
|
||||
}
|
||||
|
||||
var buf
|
||||
if (byteOffset === undefined && length === undefined) {
|
||||
buf = new Uint8Array(array)
|
||||
} else if (length === undefined) {
|
||||
buf = new Uint8Array(array, byteOffset)
|
||||
} else {
|
||||
buf = new Uint8Array(array, byteOffset, length)
|
||||
}
|
||||
|
||||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||||
// Return an augmented `Uint8Array` instance, for best performance
|
||||
buf.__proto__ = Buffer.prototype
|
||||
} else {
|
||||
// Fallback: Return an object instance of the Buffer class
|
||||
buf = fromArrayLike(that, buf)
|
||||
}
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
function fromObject (that, obj) {
|
||||
if (Buffer.isBuffer(obj)) {
|
||||
var len = checked(obj.length) | 0
|
||||
var buf = createBuffer(that, len)
|
||||
|
||||
if (buf.length === 0) {
|
||||
return buf
|
||||
}
|
||||
|
||||
obj.copy(buf, 0, 0, len)
|
||||
return buf
|
||||
}
|
||||
|
||||
if (obj) {
|
||||
if ((typeof ArrayBuffer !== 'undefined' &&
|
||||
obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
|
||||
if (typeof obj.length !== 'number' || isnan(obj.length)) {
|
||||
return createBuffer(that, 0)
|
||||
}
|
||||
return fromArrayLike(that, obj)
|
||||
}
|
||||
|
||||
if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
|
||||
return fromArrayLike(that, obj.data)
|
||||
}
|
||||
}
|
||||
|
||||
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
|
||||
}
|
||||
|
||||
function utf8ToBytes (string, units) {
|
||||
units = units || Infinity
|
||||
var codePoint
|
||||
var length = string.length
|
||||
var leadSurrogate = null
|
||||
var bytes = []
|
||||
|
||||
for (var i = 0; i < length; ++i) {
|
||||
codePoint = string.charCodeAt(i)
|
||||
|
||||
// is surrogate component
|
||||
if (codePoint > 0xD7FF && codePoint < 0xE000) {
|
||||
// last char was a lead
|
||||
if (!leadSurrogate) {
|
||||
// no lead yet
|
||||
if (codePoint > 0xDBFF) {
|
||||
// unexpected trail
|
||||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||||
continue
|
||||
} else if (i + 1 === length) {
|
||||
// unpaired lead
|
||||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||||
continue
|
||||
}
|
||||
|
||||
// valid lead
|
||||
leadSurrogate = codePoint
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
// 2 leads in a row
|
||||
if (codePoint < 0xDC00) {
|
||||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||||
leadSurrogate = codePoint
|
||||
continue
|
||||
}
|
||||
|
||||
// valid surrogate pair
|
||||
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
|
||||
} else if (leadSurrogate) {
|
||||
// valid bmp char, but last char was a lead
|
||||
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
|
||||
}
|
||||
|
||||
leadSurrogate = null
|
||||
|
||||
// encode utf8
|
||||
if (codePoint < 0x80) {
|
||||
if ((units -= 1) < 0) break
|
||||
bytes.push(codePoint)
|
||||
} else if (codePoint < 0x800) {
|
||||
if ((units -= 2) < 0) break
|
||||
bytes.push(
|
||||
codePoint >> 0x6 | 0xC0,
|
||||
codePoint & 0x3F | 0x80
|
||||
)
|
||||
} else if (codePoint < 0x10000) {
|
||||
if ((units -= 3) < 0) break
|
||||
bytes.push(
|
||||
codePoint >> 0xC | 0xE0,
|
||||
codePoint >> 0x6 & 0x3F | 0x80,
|
||||
codePoint & 0x3F | 0x80
|
||||
)
|
||||
} else if (codePoint < 0x110000) {
|
||||
if ((units -= 4) < 0) break
|
||||
bytes.push(
|
||||
codePoint >> 0x12 | 0xF0,
|
||||
codePoint >> 0xC & 0x3F | 0x80,
|
||||
codePoint >> 0x6 & 0x3F | 0x80,
|
||||
codePoint & 0x3F | 0x80
|
||||
)
|
||||
} else {
|
||||
throw new Error('Invalid code point')
|
||||
}
|
||||
}
|
||||
|
||||
return bytes
|
||||
}
|
||||
|
||||
function byteLength (string) {
|
||||
if (Buffer.isBuffer(string)) {
|
||||
return string.length
|
||||
}
|
||||
if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
|
||||
(ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
|
||||
return string.byteLength
|
||||
}
|
||||
if (typeof string !== 'string') {
|
||||
string = '' + string
|
||||
}
|
||||
|
||||
var len = string.length
|
||||
if (len === 0) return 0
|
||||
|
||||
return utf8ToBytes(string).length
|
||||
}
|
||||
|
||||
function blitBuffer (src, dst, offset, length) {
|
||||
for (var i = 0; i < length; ++i) {
|
||||
if ((i + offset >= dst.length) || (i >= src.length)) break
|
||||
dst[i + offset] = src[i]
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
function utf8Write (buf, string, offset, length) {
|
||||
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
|
||||
}
|
||||
|
||||
function from (that, value, offset, length) {
|
||||
if (typeof value === 'number') {
|
||||
throw new TypeError('"value" argument must not be a number')
|
||||
}
|
||||
|
||||
if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
|
||||
return fromArrayBuffer(that, value, offset, length)
|
||||
}
|
||||
|
||||
if (typeof value === 'string') {
|
||||
return fromString(that, value, offset)
|
||||
}
|
||||
|
||||
return fromObject(that, value)
|
||||
}
|
||||
|
||||
Buffer.prototype.write = function write (string, offset, length) {
|
||||
// Buffer#write(string)
|
||||
if (offset === undefined) {
|
||||
length = this.length
|
||||
offset = 0
|
||||
// Buffer#write(string, encoding)
|
||||
} else if (length === undefined && typeof offset === 'string') {
|
||||
length = this.length
|
||||
offset = 0
|
||||
// Buffer#write(string, offset[, length])
|
||||
} else if (isFinite(offset)) {
|
||||
offset = offset | 0
|
||||
if (isFinite(length)) {
|
||||
length = length | 0
|
||||
} else {
|
||||
length = undefined
|
||||
}
|
||||
}
|
||||
|
||||
var remaining = this.length - offset
|
||||
if (length === undefined || length > remaining) length = remaining
|
||||
|
||||
if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
|
||||
throw new RangeError('Attempt to write outside buffer bounds')
|
||||
}
|
||||
|
||||
return utf8Write(this, string, offset, length)
|
||||
}
|
||||
|
||||
Buffer.prototype.slice = function slice (start, end) {
|
||||
var len = this.length
|
||||
start = ~~start
|
||||
end = end === undefined ? len : ~~end
|
||||
|
||||
if (start < 0) {
|
||||
start += len
|
||||
if (start < 0) start = 0
|
||||
} else if (start > len) {
|
||||
start = len
|
||||
}
|
||||
|
||||
if (end < 0) {
|
||||
end += len
|
||||
if (end < 0) end = 0
|
||||
} else if (end > len) {
|
||||
end = len
|
||||
}
|
||||
|
||||
if (end < start) end = start
|
||||
|
||||
var newBuf
|
||||
if (Buffer.TYPED_ARRAY_SUPPORT) {
|
||||
newBuf = this.subarray(start, end)
|
||||
// Return an augmented `Uint8Array` instance
|
||||
newBuf.__proto__ = Buffer.prototype
|
||||
} else {
|
||||
var sliceLen = end - start
|
||||
newBuf = new Buffer(sliceLen, undefined)
|
||||
for (var i = 0; i < sliceLen; ++i) {
|
||||
newBuf[i] = this[i + start]
|
||||
}
|
||||
}
|
||||
|
||||
return newBuf
|
||||
}
|
||||
|
||||
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
|
||||
if (!start) start = 0
|
||||
if (!end && end !== 0) end = this.length
|
||||
if (targetStart >= target.length) targetStart = target.length
|
||||
if (!targetStart) targetStart = 0
|
||||
if (end > 0 && end < start) end = start
|
||||
|
||||
// Copy 0 bytes; we're done
|
||||
if (end === start) return 0
|
||||
if (target.length === 0 || this.length === 0) return 0
|
||||
|
||||
// Fatal error conditions
|
||||
if (targetStart < 0) {
|
||||
throw new RangeError('targetStart out of bounds')
|
||||
}
|
||||
if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
|
||||
if (end < 0) throw new RangeError('sourceEnd out of bounds')
|
||||
|
||||
// Are we oob?
|
||||
if (end > this.length) end = this.length
|
||||
if (target.length - targetStart < end - start) {
|
||||
end = target.length - targetStart + start
|
||||
}
|
||||
|
||||
var len = end - start
|
||||
var i
|
||||
|
||||
if (this === target && start < targetStart && targetStart < end) {
|
||||
// descending copy from end
|
||||
for (i = len - 1; i >= 0; --i) {
|
||||
target[i + targetStart] = this[i + start]
|
||||
}
|
||||
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
|
||||
// ascending copy from start
|
||||
for (i = 0; i < len; ++i) {
|
||||
target[i + targetStart] = this[i + start]
|
||||
}
|
||||
} else {
|
||||
Uint8Array.prototype.set.call(
|
||||
target,
|
||||
this.subarray(start, start + len),
|
||||
targetStart
|
||||
)
|
||||
}
|
||||
|
||||
return len
|
||||
}
|
||||
|
||||
Buffer.prototype.fill = function fill (val, start, end) {
|
||||
// Handle string cases:
|
||||
if (typeof val === 'string') {
|
||||
if (typeof start === 'string') {
|
||||
start = 0
|
||||
end = this.length
|
||||
} else if (typeof end === 'string') {
|
||||
end = this.length
|
||||
}
|
||||
if (val.length === 1) {
|
||||
var code = val.charCodeAt(0)
|
||||
if (code < 256) {
|
||||
val = code
|
||||
}
|
||||
}
|
||||
} else if (typeof val === 'number') {
|
||||
val = val & 255
|
||||
}
|
||||
|
||||
// Invalid ranges are not set to a default, so can range check early.
|
||||
if (start < 0 || this.length < start || this.length < end) {
|
||||
throw new RangeError('Out of range index')
|
||||
}
|
||||
|
||||
if (end <= start) {
|
||||
return this
|
||||
}
|
||||
|
||||
start = start >>> 0
|
||||
end = end === undefined ? this.length : end >>> 0
|
||||
|
||||
if (!val) val = 0
|
||||
|
||||
var i
|
||||
if (typeof val === 'number') {
|
||||
for (i = start; i < end; ++i) {
|
||||
this[i] = val
|
||||
}
|
||||
} else {
|
||||
var bytes = Buffer.isBuffer(val)
|
||||
? val
|
||||
: new Buffer(val)
|
||||
var len = bytes.length
|
||||
for (i = 0; i < end - start; ++i) {
|
||||
this[i + start] = bytes[i % len]
|
||||
}
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
Buffer.concat = function concat (list, length) {
|
||||
if (!isArray(list)) {
|
||||
throw new TypeError('"list" argument must be an Array of Buffers')
|
||||
}
|
||||
|
||||
if (list.length === 0) {
|
||||
return createBuffer(null, 0)
|
||||
}
|
||||
|
||||
var i
|
||||
if (length === undefined) {
|
||||
length = 0
|
||||
for (i = 0; i < list.length; ++i) {
|
||||
length += list[i].length
|
||||
}
|
||||
}
|
||||
|
||||
var buffer = allocUnsafe(null, length)
|
||||
var pos = 0
|
||||
for (i = 0; i < list.length; ++i) {
|
||||
var buf = list[i]
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
throw new TypeError('"list" argument must be an Array of Buffers')
|
||||
}
|
||||
buf.copy(buffer, pos)
|
||||
pos += buf.length
|
||||
}
|
||||
return buffer
|
||||
}
|
||||
|
||||
Buffer.byteLength = byteLength
|
||||
|
||||
Buffer.prototype._isBuffer = true
|
||||
Buffer.isBuffer = function isBuffer (b) {
|
||||
return !!(b != null && b._isBuffer)
|
||||
}
|
||||
|
||||
module.exports.alloc = function (size) {
|
||||
var buffer = new Buffer(size)
|
||||
buffer.fill(0)
|
||||
return buffer
|
||||
}
|
||||
|
||||
module.exports.from = function (data) {
|
||||
return new Buffer(data)
|
||||
}
|
10060
package-lock.json
generated
10060
package-lock.json
generated
File diff suppressed because it is too large
Load diff
44
package.json
44
package.json
|
@ -4,7 +4,8 @@
|
|||
"version": "1.4.4",
|
||||
"author": "Ryan Day <soldair@gmail.com>",
|
||||
"contributors": [
|
||||
"Vincenzo Greco <greco.vincenzo@gmail.com>"
|
||||
"Vincenzo Greco <greco.vincenzo@gmail.com>",
|
||||
"Linus Unnebäck <linus@folkdatorn.se>"
|
||||
],
|
||||
"keywords": [
|
||||
"qr",
|
||||
|
@ -15,7 +16,6 @@
|
|||
"main": "./lib/index.js",
|
||||
"browser": {
|
||||
"./lib/index.js": "./lib/browser.js",
|
||||
"./lib/utils/buffer.js": "./lib/utils/typedarray-buffer.js",
|
||||
"fs": false
|
||||
},
|
||||
"files": [
|
||||
|
@ -30,7 +30,7 @@
|
|||
"lint": "standard",
|
||||
"pretest": "npm run lint",
|
||||
"test": "node --throw-deprecation test.js",
|
||||
"build": "node build.js",
|
||||
"build": "rollup -c",
|
||||
"prepublish": "npm run build",
|
||||
"browser": "node examples/clientsideserver.js"
|
||||
},
|
||||
|
@ -38,33 +38,35 @@
|
|||
"qrcode": "./bin/qrcode"
|
||||
},
|
||||
"dependencies": {
|
||||
"buffer": "^5.4.3",
|
||||
"buffer-alloc": "^1.2.0",
|
||||
"buffer-from": "^1.1.1",
|
||||
"dijkstrajs": "^1.0.1",
|
||||
"isarray": "^2.0.1",
|
||||
"pngjs": "^3.3.0",
|
||||
"yargs": "^13.2.4"
|
||||
"encode-utf8": "^1.0.3",
|
||||
"pngjs": "^5.0.0",
|
||||
"yargs": "^15.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"browserify": "^16.2.3",
|
||||
"canvas": "^1.6.11",
|
||||
"canvasutil": "*",
|
||||
"colors": "*",
|
||||
"express": "^4.16.4",
|
||||
"htmlparser2": "^3.9.2",
|
||||
"os-tmpdir": "^1.0.2",
|
||||
"sinon": "^1.17.7",
|
||||
"standard": "^9.0.2",
|
||||
"tap": "^12.1.1",
|
||||
"uglify-js": "^2.7.5"
|
||||
"@babel/core": "^7.9.0",
|
||||
"@babel/preset-env": "^7.9.5",
|
||||
"@rollup/plugin-commonjs": "^11.1.0",
|
||||
"@rollup/plugin-node-resolve": "^7.1.3",
|
||||
"browserify": "^16.5.1",
|
||||
"canvas": "^2.6.1",
|
||||
"canvasutil": "0.0.4",
|
||||
"colors": "^1.4.0",
|
||||
"express": "^4.17.1",
|
||||
"htmlparser2": "^4.1.0",
|
||||
"rollup": "^2.6.1",
|
||||
"rollup-plugin-babel": "^4.4.0",
|
||||
"rollup-plugin-terser": "^5.3.0",
|
||||
"sinon": "^9.0.2",
|
||||
"standard": "^14.3.3",
|
||||
"tap": "^14.10.7"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/soldair/node-qrcode.git"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
"node": ">=10.13.0"
|
||||
},
|
||||
"standard": {
|
||||
"ignore": [
|
||||
|
|
19
rollup.config.js
Normal file
19
rollup.config.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
import babel from 'rollup-plugin-babel'
|
||||
import { terser } from 'rollup-plugin-terser'
|
||||
import commonjs from '@rollup/plugin-commonjs'
|
||||
import resolve from '@rollup/plugin-node-resolve'
|
||||
|
||||
const babelConfig = {
|
||||
babelrc: false,
|
||||
presets: [['@babel/preset-env', { targets: 'defaults, IE >= 10, Safari >= 5.1' }]]
|
||||
}
|
||||
|
||||
export default [{
|
||||
input: 'lib/browser.js',
|
||||
output: { file: 'build/qrcode.js', format: 'iife', name: 'QRCode', exports: 'named' },
|
||||
plugins: [commonjs(), resolve(), babel(babelConfig), terser()]
|
||||
}, {
|
||||
input: 'helper/to-sjis-browser.js',
|
||||
output: { file: 'build/qrcode.tosjis.js', format: 'iife', exports: 'none' },
|
||||
plugins: [commonjs(), resolve(), babel(babelConfig), terser()]
|
||||
}]
|
6
test.js
6
test.js
|
@ -1,7 +1,7 @@
|
|||
var spawn = require('child_process').spawn
|
||||
var path = require('path')
|
||||
const spawn = require('child_process').spawn
|
||||
const path = require('path')
|
||||
|
||||
var opt = {
|
||||
const opt = {
|
||||
cwd: __dirname,
|
||||
env: (function () {
|
||||
process.env.NODE_PATH = './' + path.delimiter + './lib'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
var test = require('tap').test
|
||||
var Canvas = require('canvas')
|
||||
var QRCode = require('lib')
|
||||
var Helpers = require('test/helpers')
|
||||
const test = require('tap').test
|
||||
const { Canvas, createCanvas } = require('canvas')
|
||||
const QRCode = require('lib')
|
||||
const Helpers = require('test/helpers')
|
||||
|
||||
test('toCanvas - no promise available', function (t) {
|
||||
Helpers.removeNativePromise()
|
||||
|
@ -10,11 +10,11 @@ test('toCanvas - no promise available', function (t) {
|
|||
global.document = {
|
||||
createElement: function (el) {
|
||||
if (el === 'canvas') {
|
||||
return new Canvas(200, 200)
|
||||
return createCanvas(200, 200)
|
||||
}
|
||||
}
|
||||
}
|
||||
var canvasEl = new Canvas(200, 200)
|
||||
const canvasEl = createCanvas(200, 200)
|
||||
|
||||
t.throw(function () { QRCode.toCanvas() },
|
||||
'Should throw if no arguments are provided')
|
||||
|
@ -39,7 +39,7 @@ test('toCanvas', function (t) {
|
|||
global.document = {
|
||||
createElement: function (el) {
|
||||
if (el === 'canvas') {
|
||||
return new Canvas(200, 200)
|
||||
return createCanvas(200, 200)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ test('toCanvas', function (t) {
|
|||
})
|
||||
|
||||
test('toCanvas with specified canvas element', function (t) {
|
||||
var canvasEl = new Canvas(200, 200)
|
||||
const canvasEl = createCanvas(200, 200)
|
||||
|
||||
t.plan(6)
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
var test = require('tap').test
|
||||
var QRCode = require('lib')
|
||||
var QRCodeBrowser = require('lib/browser')
|
||||
var Canvas = require('canvas')
|
||||
var Helpers = require('test/helpers')
|
||||
const test = require('tap').test
|
||||
const QRCode = require('lib')
|
||||
const QRCodeBrowser = require('lib/browser')
|
||||
const { createCanvas } = require('canvas')
|
||||
const Helpers = require('test/helpers')
|
||||
|
||||
test('toDataURL - no promise available', function (t) {
|
||||
Helpers.removeNativePromise()
|
||||
|
@ -37,7 +37,7 @@ test('toDataURL - no promise available', function (t) {
|
|||
})
|
||||
|
||||
test('toDataURL - image/png', function (t) {
|
||||
var expectedDataURL = [
|
||||
const expectedDataURL = [
|
||||
'data:image/png;base64,',
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAAAklEQVR4AewaftIAAAKzSU',
|
||||
'RBVO3BQW7kQAwEwSxC//9y7h55akCQxvYQjIj/scYo1ijFGqVYoxRrlGKNUqxRijVKsUYp',
|
||||
|
@ -99,7 +99,7 @@ test('toDataURL - image/png', function (t) {
|
|||
})
|
||||
|
||||
test('Canvas toDataURL - image/png', function (t) {
|
||||
var expectedDataURL = [
|
||||
const expectedDataURL = [
|
||||
'data:image/png;base64,',
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAIQAAACECAYAAABRRIOnAAAABmJLR0QA/wD/AP+gvaeTAA',
|
||||
'AC20lEQVR4nO3dQY7jMAwEwM1i///lzGUurYtWEEknQNV1EidjNGhFpuTX+/1+/4Fff5/+',
|
||||
|
@ -124,9 +124,9 @@ test('Canvas toDataURL - image/png', function (t) {
|
|||
'Should throw if no arguments are provided')
|
||||
|
||||
t.throw(function () { QRCodeBrowser.toDataURL(function () {}) },
|
||||
'Should throw if text is not provided')
|
||||
'Should throw if text is not provided')
|
||||
|
||||
var canvas = new Canvas(200, 200)
|
||||
const canvas = createCanvas(200, 200)
|
||||
QRCodeBrowser.toDataURL(canvas, 'i am a pony!', {
|
||||
errorCorrectionLevel: 'H',
|
||||
type: 'image/png'
|
||||
|
@ -163,7 +163,7 @@ test('Canvas toDataURL - image/png', function (t) {
|
|||
global.document = {
|
||||
createElement: function (el) {
|
||||
if (el === 'canvas') {
|
||||
return new Canvas(200, 200)
|
||||
return createCanvas(200, 200)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
var test = require('tap').test
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
var tmpDir = require('os-tmpdir')
|
||||
var sinon = require('sinon')
|
||||
var QRCode = require('lib')
|
||||
var Helpers = require('test/helpers')
|
||||
var StreamMock = require('test/mocks/writable-stream')
|
||||
const test = require('tap').test
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const os = require('os')
|
||||
const sinon = require('sinon')
|
||||
const QRCode = require('lib')
|
||||
const Helpers = require('test/helpers')
|
||||
const StreamMock = require('test/mocks/writable-stream')
|
||||
|
||||
test('toFile - no promise available', function (t) {
|
||||
Helpers.removeNativePromise()
|
||||
var fileName = path.join(tmpDir(), 'qrimage.png')
|
||||
const fileName = path.join(os.tmpdir(), 'qrimage.png')
|
||||
|
||||
t.throw(function () { QRCode.toFile(fileName, 'some text') },
|
||||
'Should throw if a callback is not provided')
|
||||
|
@ -23,7 +23,7 @@ test('toFile - no promise available', function (t) {
|
|||
})
|
||||
|
||||
test('toFile', function (t) {
|
||||
var fileName = path.join(tmpDir(), 'qrimage.png')
|
||||
const fileName = path.join(os.tmpdir(), 'qrimage.png')
|
||||
|
||||
t.throw(function () { QRCode.toFile('some text', function () {}) },
|
||||
'Should throw if path is not provided')
|
||||
|
@ -38,8 +38,8 @@ test('toFile', function (t) {
|
|||
})
|
||||
|
||||
test('toFile png', function (t) {
|
||||
var fileName = path.join(tmpDir(), 'qrimage.png')
|
||||
var expectedBase64Output = [
|
||||
const fileName = path.join(os.tmpdir(), 'qrimage.png')
|
||||
const expectedBase64Output = [
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAAAklEQVR4AewaftIAAAKzSU',
|
||||
'RBVO3BQW7kQAwEwSxC//9y7h55akCQxvYQjIj/scYo1ijFGqVYoxRrlGKNUqxRijVKsUYp',
|
||||
'1ijFGqVYoxRrlGKNUqxRijXKxUNJ+EkqdyShU+mS0Kl0SfhJKk8Ua5RijVKsUS5epvKmJD',
|
||||
|
@ -99,9 +99,8 @@ test('toFile png', function (t) {
|
|||
})
|
||||
})
|
||||
|
||||
var fsStub = sinon.stub(fs, 'createWriteStream')
|
||||
const fsStub = sinon.stub(fs, 'createWriteStream')
|
||||
fsStub.returns(new StreamMock().forceErrorOnWrite())
|
||||
fsStub.reset()
|
||||
|
||||
QRCode.toFile(fileName, 'i am a pony!', {
|
||||
errorCorrectionLevel: 'L'
|
||||
|
@ -119,11 +118,9 @@ test('toFile png', function (t) {
|
|||
})
|
||||
|
||||
test('toFile svg', function (t) {
|
||||
var fileName = path.join(tmpDir(), 'qrimage.svg')
|
||||
var expectedOutput = fs.readFileSync(
|
||||
path.join(__dirname,
|
||||
'/svg.expected.out'),
|
||||
'UTF-8')
|
||||
const fileName = path.join(os.tmpdir(), 'qrimage.svg')
|
||||
const expectedOutput = fs.readFileSync(
|
||||
path.join(__dirname, '/svg.expected.out'), 'UTF-8')
|
||||
|
||||
t.plan(6)
|
||||
|
||||
|
@ -168,8 +165,8 @@ test('toFile svg', function (t) {
|
|||
})
|
||||
|
||||
test('toFile utf8', function (t) {
|
||||
var fileName = path.join(tmpDir(), 'qrimage.txt')
|
||||
var expectedOutput = [
|
||||
const fileName = path.join(os.tmpdir(), 'qrimage.txt')
|
||||
const expectedOutput = [
|
||||
' ',
|
||||
' ',
|
||||
' █▀▀▀▀▀█ █ ▄█ ▀ █ █▀▀▀▀▀█ ',
|
||||
|
@ -228,12 +225,12 @@ test('toFile utf8', function (t) {
|
|||
})
|
||||
|
||||
test('toFile manual segments', function (t) {
|
||||
var fileName = path.join(tmpDir(), 'qrimage.txt')
|
||||
var segs = [
|
||||
const fileName = path.join(os.tmpdir(), 'qrimage.txt')
|
||||
const segs = [
|
||||
{ data: 'ABCDEFG', mode: 'alphanumeric' },
|
||||
{ data: '0123456', mode: 'numeric' }
|
||||
]
|
||||
var expectedOutput = [
|
||||
const expectedOutput = [
|
||||
' ',
|
||||
' ',
|
||||
' █▀▀▀▀▀█ ██▀██ █▀▀▀▀▀█ ',
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
var test = require('tap').test
|
||||
var sinon = require('sinon')
|
||||
var QRCode = require('lib')
|
||||
var StreamMock = require('../mocks/writable-stream')
|
||||
const test = require('tap').test
|
||||
const sinon = require('sinon')
|
||||
const QRCode = require('lib')
|
||||
const StreamMock = require('../mocks/writable-stream')
|
||||
|
||||
test('toFileStream png', function (t) {
|
||||
t.throw(function () { QRCode.toFileStream('some text') },
|
||||
|
@ -10,8 +10,8 @@ test('toFileStream png', function (t) {
|
|||
t.throw(function () { QRCode.toFileStream(new StreamMock()) },
|
||||
'Should throw if text is not provided')
|
||||
|
||||
var fstream = new StreamMock()
|
||||
var spy = sinon.spy(fstream, 'emit')
|
||||
const fstream = new StreamMock()
|
||||
const spy = sinon.spy(fstream, 'emit')
|
||||
|
||||
QRCode.toFileStream(fstream, 'i am a pony!')
|
||||
|
||||
|
@ -27,7 +27,7 @@ test('toFileStream png', 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!')
|
||||
|
||||
t.plan(2)
|
||||
|
@ -38,8 +38,8 @@ test('toFileStream png with write error', function (t) {
|
|||
})
|
||||
|
||||
test('toFileStream png with qrcode error', function (t) {
|
||||
var fstreamErr = new StreamMock()
|
||||
var bigString = Array(200).join('i am a pony!')
|
||||
const fstreamErr = new StreamMock()
|
||||
const bigString = Array(200).join('i am a pony!')
|
||||
|
||||
t.plan(2)
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
var test = require('tap').test
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
var QRCode = require('lib')
|
||||
var browser = require('lib/browser')
|
||||
var Helpers = require('test/helpers')
|
||||
const test = require('tap').test
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const QRCode = require('lib')
|
||||
const browser = require('lib/browser')
|
||||
const Helpers = require('test/helpers')
|
||||
|
||||
test('toString - no promise available', function (t) {
|
||||
Helpers.removeNativePromise()
|
||||
|
@ -76,7 +76,7 @@ test('toString (browser)', 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)
|
||||
|
||||
QRCode.toString('http://www.google.com', {
|
||||
|
@ -121,7 +121,7 @@ test('toString 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)
|
||||
|
||||
|
@ -146,7 +146,7 @@ test('toString browser svg', 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) {
|
||||
var expectedTerminal = fs.readFileSync(path.join(__dirname, '/terminal.expected.out')) + ''
|
||||
const expectedTerminal = fs.readFileSync(path.join(__dirname, '/terminal.expected.out')) + ''
|
||||
|
||||
t.plan(3)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
var nativePromise = global.Promise
|
||||
const nativePromise = global.Promise
|
||||
|
||||
exports.removeNativePromise = function () {
|
||||
if (global.Promise) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var stream = require('stream')
|
||||
var util = require('util')
|
||||
const stream = require('stream')
|
||||
const util = require('util')
|
||||
|
||||
function WritableStream () {
|
||||
stream.Writable.call(this)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var test = require('tap').test
|
||||
var pattern = require('core/alignment-pattern')
|
||||
const test = require('tap').test
|
||||
const pattern = require('core/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}
|
||||
*/
|
||||
var EXPECTED_POSITION_TABLE = [
|
||||
const EXPECTED_POSITION_TABLE = [
|
||||
[],
|
||||
[6, 18],
|
||||
[6, 22],
|
||||
|
@ -53,17 +53,17 @@ var EXPECTED_POSITION_TABLE = [
|
|||
test('Alignment pattern - Row/Col coords', function (t) {
|
||||
t.plan(40)
|
||||
|
||||
for (var i = 1; i <= 40; i++) {
|
||||
var pos = pattern.getRowColCoords(i)
|
||||
for (let i = 1; i <= 40; i++) {
|
||||
const pos = pattern.getRowColCoords(i)
|
||||
t.deepEqual(pos, EXPECTED_POSITION_TABLE[i - 1], 'Should return correct coords')
|
||||
}
|
||||
})
|
||||
|
||||
test('Alignment pattern - Positions', function (t) {
|
||||
for (var i = 1; i <= 40; i++) {
|
||||
var pos = pattern.getPositions(i)
|
||||
var expectedPos = EXPECTED_POSITION_TABLE[i - 1]
|
||||
var expectedLength = (Math.pow(expectedPos.length, 2) || 3) - 3
|
||||
for (let i = 1; i <= 40; i++) {
|
||||
const pos = pattern.getPositions(i)
|
||||
const expectedPos = EXPECTED_POSITION_TABLE[i - 1]
|
||||
const expectedLength = (Math.pow(expectedPos.length, 2) || 3) - 3
|
||||
|
||||
t.equal(pos.length, expectedLength, 'Should return correct number of positions')
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
var test = require('tap').test
|
||||
var BitBuffer = require('core/bit-buffer')
|
||||
var AlphanumericData = require('core/alphanumeric-data')
|
||||
var Mode = require('core/mode')
|
||||
const test = require('tap').test
|
||||
const BitBuffer = require('core/bit-buffer')
|
||||
const AlphanumericData = require('core/alphanumeric-data')
|
||||
const Mode = require('core/mode')
|
||||
|
||||
var testData = [
|
||||
const testData = [
|
||||
{
|
||||
data: 'A',
|
||||
length: 1,
|
||||
|
@ -26,13 +26,13 @@ var testData = [
|
|||
|
||||
test('Alphanumeric Data', function (t) {
|
||||
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.getLength(), data.length, 'Should return correct length')
|
||||
t.equal(alphanumericData.getBitsLength(), data.bitLength, 'Should return correct bit length')
|
||||
|
||||
var bitBuffer = new BitBuffer()
|
||||
const bitBuffer = new BitBuffer()
|
||||
alphanumericData.write(bitBuffer)
|
||||
t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
|
||||
})
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
var test = require('tap').test
|
||||
var BitBuffer = require('core/bit-buffer')
|
||||
const test = require('tap').test
|
||||
const BitBuffer = require('core/bit-buffer')
|
||||
|
||||
test('Bit Buffer', function (t) {
|
||||
var testData = 0x41 // 'A'
|
||||
var expectedDataBits = [false, true, false, false, false, false, false, true]
|
||||
const testData = 0x41 // 'A'
|
||||
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')
|
||||
|
||||
bitBuffer.put(testData, 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')
|
||||
}
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
var test = require('tap').test
|
||||
var BitMatrix = require('core/bit-matrix')
|
||||
const test = require('tap').test
|
||||
const BitMatrix = require('core/bit-matrix')
|
||||
|
||||
test('Bit Matrix', function (t) {
|
||||
t.throw(function () { BitMatrix(0) }, 'Should throw if size is 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.data.length, 4, 'Should correctly set buffer size')
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
var test = require('tap').test
|
||||
var BitBuffer = require('core/bit-buffer')
|
||||
var ByteData = require('core/byte-data')
|
||||
var Mode = require('core/mode')
|
||||
const test = require('tap').test
|
||||
const BitBuffer = require('core/bit-buffer')
|
||||
const ByteData = require('core/byte-data')
|
||||
const Mode = require('core/mode')
|
||||
|
||||
test('Byte Data', function (t) {
|
||||
var text = '1234'
|
||||
var textBitLength = 32
|
||||
var textByte = [49, 50, 51, 52] // 1, 2, 3, 4
|
||||
var utf8Text = '\u00bd + \u00bc = \u00be' // 9 char, 12 byte
|
||||
const text = '1234'
|
||||
const textBitLength = 32
|
||||
const textByte = [49, 50, 51, 52] // 1, 2, 3, 4
|
||||
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.getLength(), text.length, 'Should return correct length')
|
||||
t.equal(byteData.getBitsLength(), textBitLength, 'Should return correct bit length')
|
||||
|
||||
var bitBuffer = new BitBuffer()
|
||||
const bitBuffer = new BitBuffer()
|
||||
byteData.write(bitBuffer)
|
||||
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.end()
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
var test = require('tap').test
|
||||
var Utils = require('core/utils')
|
||||
var Version = require('core/version')
|
||||
var ECLevel = require('core/error-correction-level')
|
||||
var ECCode = require('core/error-correction-code')
|
||||
var Mode = require('core/mode')
|
||||
const test = require('tap').test
|
||||
const Utils = require('core/utils')
|
||||
const Version = require('core/version')
|
||||
const ECLevel = require('core/error-correction-level')
|
||||
const ECCode = require('core/error-correction-code')
|
||||
const Mode = require('core/mode')
|
||||
|
||||
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++) {
|
||||
var totalCodewords = Utils.getSymbolTotalCodewords(v)
|
||||
var reservedByte = Math.ceil((Mode.getCharCountIndicator(Mode.BYTE, v) + 4) / 8)
|
||||
for (let v = 1; v <= 40; v++) {
|
||||
const totalCodewords = Utils.getSymbolTotalCodewords(v)
|
||||
const reservedByte = Math.ceil((Mode.getCharCountIndicator(Mode.BYTE, v) + 4) / 8)
|
||||
|
||||
for (var l = 0; l < levels.length; l++) {
|
||||
var dataCodewords = Version.getCapacity(v, levels[l], Mode.BYTE) + reservedByte
|
||||
for (let l = 0; l < levels.length; l++) {
|
||||
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,
|
||||
'Should return correct codewords number')
|
||||
|
@ -29,10 +29,10 @@ test('Error correction codewords', 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 (var l = 0; l < levels.length; l++) {
|
||||
for (let v = 1; v <= 40; v++) {
|
||||
for (let l = 0; l < levels.length; l++) {
|
||||
t.ok(ECCode.getBlocksCount(v, levels[l]), 'Should return a positive number')
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
var test = require('tap').test
|
||||
var ECLevel = require('core/error-correction-level')
|
||||
const test = require('tap').test
|
||||
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) {
|
||||
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 (var i = 0; i < values[l].length; i++) {
|
||||
for (let l = 0; l < values.length; l++) {
|
||||
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].toUpperCase()), EC_LEVELS[l])
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ test('Error level from input value', 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')
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
var test = require('tap').test
|
||||
var pattern = require('core/finder-pattern')
|
||||
const test = require('tap').test
|
||||
const pattern = require('core/finder-pattern')
|
||||
|
||||
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')
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
var test = require('tap').test
|
||||
var FormatInfo = require('core/format-info')
|
||||
var ECLevel = require('core/error-correction-level')
|
||||
var MaskPattern = require('core/mask-pattern')
|
||||
const test = require('tap').test
|
||||
const FormatInfo = require('core/format-info')
|
||||
const ECLevel = require('core/error-correction-level')
|
||||
const MaskPattern = require('core/mask-pattern')
|
||||
|
||||
var EXPECTED_FORMAT_BITS = [
|
||||
const EXPECTED_FORMAT_BITS = [
|
||||
[0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976],
|
||||
[0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0],
|
||||
[0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed],
|
||||
|
@ -11,12 +11,12 @@ var EXPECTED_FORMAT_BITS = [
|
|||
]
|
||||
|
||||
test('Format encoded info', function (t) {
|
||||
var levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
||||
var patterns = Object.keys(MaskPattern.Patterns).length
|
||||
const levels = [ECLevel.L, ECLevel.M, ECLevel.Q, ECLevel.H]
|
||||
const patterns = Object.keys(MaskPattern.Patterns).length
|
||||
|
||||
for (var l = 0; l < levels.length; l++) {
|
||||
for (var p = 0; p < patterns; p++) {
|
||||
var bch = FormatInfo.getEncodedBits(levels[l], p)
|
||||
for (let l = 0; l < levels.length; l++) {
|
||||
for (let p = 0; p < patterns; p++) {
|
||||
const bch = FormatInfo.getEncodedBits(levels[l], p)
|
||||
t.equal(bch, EXPECTED_FORMAT_BITS[l][p], 'Should return correct bits')
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
var test = require('tap').test
|
||||
var GF = require('core/galois-field')
|
||||
const test = require('tap').test
|
||||
const GF = require('core/galois-field')
|
||||
|
||||
test('Galois Field', function (t) {
|
||||
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.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(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')
|
||||
}
|
||||
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
var test = require('tap').test
|
||||
var BitBuffer = require('core/bit-buffer')
|
||||
var KanjiData = require('core/kanji-data')
|
||||
var Mode = require('core/mode')
|
||||
var toSJIS = require('helper/to-sjis')
|
||||
const test = require('tap').test
|
||||
const BitBuffer = require('core/bit-buffer')
|
||||
const KanjiData = require('core/kanji-data')
|
||||
const Mode = require('core/mode')
|
||||
const toSJIS = require('helper/to-sjis')
|
||||
require('core/utils').setToSJISFunction(toSJIS)
|
||||
|
||||
test('Kanji Data', function (t) {
|
||||
var data = '漢字漾癶'
|
||||
var length = 4
|
||||
var bitLength = 52 // length * 13
|
||||
const data = '漢字漾癶'
|
||||
const length = 4
|
||||
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.getLength(), length, 'Should return correct length')
|
||||
t.equal(kanjiData.getBitsLength(), bitLength, 'Should return correct bit length')
|
||||
|
||||
var bitBuffer = new BitBuffer()
|
||||
let bitBuffer = new BitBuffer()
|
||||
kanjiData.write(bitBuffer)
|
||||
t.deepEqual(bitBuffer.buffer, dataBit, 'Should write correct data to buffer')
|
||||
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
var test = require('tap').test
|
||||
var BitMatrix = require('core/bit-matrix')
|
||||
var MaskPattern = require('core/mask-pattern')
|
||||
var BufferUtil = require('utils/buffer')
|
||||
const test = require('tap').test
|
||||
const BitMatrix = require('core/bit-matrix')
|
||||
const MaskPattern = require('core/mask-pattern')
|
||||
|
||||
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.end()
|
||||
})
|
||||
|
||||
var expectedPattern000 = [
|
||||
const expectedPattern000 = [
|
||||
1, 0, 1, 0, 1, 0,
|
||||
0, 1, 0, 1, 0, 1,
|
||||
1, 0, 1, 0, 1, 0,
|
||||
|
@ -19,7 +18,7 @@ var expectedPattern000 = [
|
|||
0, 1, 0, 1, 0, 1
|
||||
]
|
||||
|
||||
var expectedPattern001 = [
|
||||
const expectedPattern001 = [
|
||||
1, 1, 1, 1, 1, 1,
|
||||
0, 0, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 1, 1,
|
||||
|
@ -28,7 +27,7 @@ var expectedPattern001 = [
|
|||
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,
|
||||
|
@ -37,7 +36,7 @@ var expectedPattern010 = [
|
|||
1, 0, 0, 1, 0, 0
|
||||
]
|
||||
|
||||
var expectedPattern011 = [
|
||||
const expectedPattern011 = [
|
||||
1, 0, 0, 1, 0, 0,
|
||||
0, 0, 1, 0, 0, 1,
|
||||
0, 1, 0, 0, 1, 0,
|
||||
|
@ -46,7 +45,7 @@ var expectedPattern011 = [
|
|||
0, 1, 0, 0, 1, 0
|
||||
]
|
||||
|
||||
var expectedPattern100 = [
|
||||
const expectedPattern100 = [
|
||||
1, 1, 1, 0, 0, 0,
|
||||
1, 1, 1, 0, 0, 0,
|
||||
0, 0, 0, 1, 1, 1,
|
||||
|
@ -55,7 +54,7 @@ var expectedPattern100 = [
|
|||
1, 1, 1, 0, 0, 0
|
||||
]
|
||||
|
||||
var expectedPattern101 = [
|
||||
const expectedPattern101 = [
|
||||
1, 1, 1, 1, 1, 1,
|
||||
1, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 1, 0, 0,
|
||||
|
@ -64,7 +63,7 @@ var expectedPattern101 = [
|
|||
1, 0, 0, 0, 0, 0
|
||||
]
|
||||
|
||||
var expectedPattern110 = [
|
||||
const expectedPattern110 = [
|
||||
1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 0, 0, 0,
|
||||
1, 1, 0, 1, 1, 0,
|
||||
|
@ -73,7 +72,7 @@ var expectedPattern110 = [
|
|||
1, 0, 0, 0, 1, 1
|
||||
]
|
||||
|
||||
var expectedPattern111 = [
|
||||
const expectedPattern111 = [
|
||||
1, 0, 1, 0, 1, 0,
|
||||
0, 0, 0, 1, 1, 1,
|
||||
1, 0, 0, 0, 1, 1,
|
||||
|
@ -101,26 +100,26 @@ test('MaskPattern from value', function (t) {
|
|||
})
|
||||
|
||||
test('Mask pattern - Apply mask', function (t) {
|
||||
var patterns = Object.keys(MaskPattern.Patterns).length
|
||||
var expectedPatterns = [
|
||||
const patterns = Object.keys(MaskPattern.Patterns).length
|
||||
const expectedPatterns = [
|
||||
expectedPattern000, expectedPattern001, expectedPattern010, expectedPattern011,
|
||||
expectedPattern100, expectedPattern101, expectedPattern110, expectedPattern111
|
||||
]
|
||||
|
||||
for (var p = 0; p < patterns; p++) {
|
||||
var matrix = new BitMatrix(6)
|
||||
for (let p = 0; p < patterns; p++) {
|
||||
const matrix = new BitMatrix(6)
|
||||
MaskPattern.applyMask(p, matrix)
|
||||
t.deepEqual(matrix.data, BufferUtil.from(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, 1, false, true)
|
||||
matrix.set(1, 0, false, true)
|
||||
matrix.set(1, 1, false, true)
|
||||
MaskPattern.applyMask(0, matrix)
|
||||
|
||||
t.deepEqual(matrix.data, BufferUtil.from([false, false, false, false]), 'Should leave reserved bit unchanged')
|
||||
t.deepEqual(matrix.data, new Uint8Array([false, false, false, false]), 'Should leave reserved bit unchanged')
|
||||
|
||||
t.throws(function () { MaskPattern.applyMask(-1, new BitMatrix(1)) }, 'Should throw if pattern is invalid')
|
||||
|
||||
|
@ -128,7 +127,7 @@ test('Mask pattern - Apply mask', function (t) {
|
|||
})
|
||||
|
||||
test('Mask pattern - Penalty N1', function (t) {
|
||||
var matrix = new BitMatrix(11)
|
||||
let matrix = new BitMatrix(11)
|
||||
matrix.data = [
|
||||
1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1,
|
||||
1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
|
||||
|
@ -171,7 +170,7 @@ test('Mask pattern - Penalty N1', function (t) {
|
|||
})
|
||||
|
||||
test('Mask pattern - Penalty N2', function (t) {
|
||||
var matrix = new BitMatrix(8)
|
||||
let matrix = new BitMatrix(8)
|
||||
matrix.data = [
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 0, 0, 0, 1, 1,
|
||||
|
@ -206,7 +205,7 @@ test('Mask pattern - Penalty N2', function (t) {
|
|||
})
|
||||
|
||||
test('Mask pattern - Penalty N3', function (t) {
|
||||
var matrix = new BitMatrix(11)
|
||||
const matrix = new BitMatrix(11)
|
||||
matrix.data = [
|
||||
0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
|
||||
0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
|
||||
|
@ -245,19 +244,19 @@ test('Mask pattern - Penalty N3', 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))
|
||||
|
||||
t.equals(MaskPattern.getPenaltyN4(matrix), 0,
|
||||
'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))
|
||||
|
||||
t.equals(MaskPattern.getPenaltyN4(matrix2), 10,
|
||||
'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))
|
||||
|
||||
t.equals(MaskPattern.getPenaltyN4(matrix3), 50,
|
||||
|
@ -267,7 +266,7 @@ test('Mask pattern - Penalty N4', function (t) {
|
|||
})
|
||||
|
||||
test('Mask pattern - Best mask', function (t) {
|
||||
var matrix = new BitMatrix(11)
|
||||
const matrix = new BitMatrix(11)
|
||||
matrix.data = [
|
||||
0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,
|
||||
0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1,
|
||||
|
@ -282,7 +281,7 @@ test('Mask pattern - Best mask', function (t) {
|
|||
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(mask >= 0 && mask < 8,
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
var test = require('tap').test
|
||||
var Mode = require('core/mode')
|
||||
const test = require('tap').test
|
||||
const Mode = require('core/mode')
|
||||
|
||||
test('Mode bits', function (t) {
|
||||
var EXPECTED_BITS = {
|
||||
const EXPECTED_BITS = {
|
||||
numeric: 1,
|
||||
alphanumeric: 2,
|
||||
byte: 4,
|
||||
|
@ -20,14 +20,14 @@ test('Mode bits', function (t) {
|
|||
})
|
||||
|
||||
test('Char count bits', function (t) {
|
||||
var EXPECTED_BITS = {
|
||||
const EXPECTED_BITS = {
|
||||
numeric: [10, 12, 14],
|
||||
alphanumeric: [9, 11, 13],
|
||||
byte: [8, 16, 16],
|
||||
kanji: [8, 10, 12]
|
||||
}
|
||||
|
||||
var v
|
||||
let v
|
||||
for (v = 1; v < 10; v++) {
|
||||
t.equal(Mode.getCharCountIndicator(Mode.NUMERIC, v), EXPECTED_BITS.numeric[0])
|
||||
t.equal(Mode.getCharCountIndicator(Mode.ALPHANUMERIC, v), EXPECTED_BITS.alphanumeric[0])
|
||||
|
@ -59,7 +59,8 @@ test('Char count bits', function (t) {
|
|||
})
|
||||
|
||||
test('Best mode', function (t) {
|
||||
var EXPECTED_MODE = {
|
||||
/* eslint-disable quote-props */
|
||||
const EXPECTED_MODE = {
|
||||
'12345': Mode.NUMERIC,
|
||||
'abcde': Mode.BYTE,
|
||||
'1234a': Mode.BYTE,
|
||||
|
@ -93,14 +94,14 @@ test('Is valid', function (t) {
|
|||
})
|
||||
|
||||
test('From value', function (t) {
|
||||
var modes = [
|
||||
const modes = [
|
||||
{ name: 'numeric', mode: Mode.NUMERIC },
|
||||
{ name: 'alphanumeric', mode: Mode.ALPHANUMERIC },
|
||||
{ name: 'kanji', mode: Mode.KANJI },
|
||||
{ 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.toUpperCase()), modes[m].mode)
|
||||
t.equal(Mode.from(modes[m].mode), modes[m].mode)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
var test = require('tap').test
|
||||
var BitBuffer = require('core/bit-buffer')
|
||||
var NumericData = require('core/numeric-data')
|
||||
var Mode = require('core/mode')
|
||||
const test = require('tap').test
|
||||
const BitBuffer = require('core/bit-buffer')
|
||||
const NumericData = require('core/numeric-data')
|
||||
const Mode = require('core/mode')
|
||||
|
||||
var testData = [
|
||||
const testData = [
|
||||
{
|
||||
data: 8,
|
||||
length: 1,
|
||||
|
@ -39,13 +39,13 @@ var testData = [
|
|||
|
||||
test('Numeric Data', function (t) {
|
||||
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.getLength(), data.length, 'Should return correct length')
|
||||
t.equal(numericData.getBitsLength(), data.bitLength, 'Should return correct bit length')
|
||||
|
||||
var bitBuffer = new BitBuffer()
|
||||
const bitBuffer = new BitBuffer()
|
||||
numericData.write(bitBuffer)
|
||||
t.deepEqual(bitBuffer.buffer, data.dataBit, 'Should write correct data to buffer')
|
||||
})
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
var test = require('tap').test
|
||||
var Poly = require('core/polynomial')
|
||||
var BufferUtil = require('utils/buffer')
|
||||
const test = require('tap').test
|
||||
const Poly = require('core/polynomial')
|
||||
|
||||
test('Generator polynomial', function (t) {
|
||||
var result = Poly.generateECPolynomial(0)
|
||||
t.ok(Buffer.isBuffer(result), 'Should return a buffer')
|
||||
t.deepEqual(result, BufferUtil.from([1]), 'Should return coeff [1] for polynomial of degree 0')
|
||||
const result = Poly.generateECPolynomial(0)
|
||||
t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
|
||||
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)')
|
||||
}
|
||||
|
||||
|
@ -15,15 +14,15 @@ test('Generator polynomial', function (t) {
|
|||
})
|
||||
|
||||
test('Polynomial', function (t) {
|
||||
var p1 = [0, 1, 2, 3, 4]
|
||||
var p2 = [5, 6]
|
||||
const p1 = [0, 1, 2, 3, 4]
|
||||
const p2 = [5, 6]
|
||||
|
||||
var result = Poly.mul(p1, p2)
|
||||
t.ok(Buffer.isBuffer(result), 'Should return a buffer')
|
||||
let result = Poly.mul(p1, p2)
|
||||
t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
|
||||
t.equal(result.length, 6, 'Should return correct number of coefficients')
|
||||
|
||||
result = Poly.mod(p1, Poly.generateECPolynomial(2))
|
||||
t.ok(Buffer.isBuffer(result), 'Should return a buffer')
|
||||
t.ok(result instanceof Uint8Array, 'Should return an Uint8Array')
|
||||
t.equal(result.length, 2, 'Should return correct number of coefficients')
|
||||
|
||||
t.end()
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
var test = require('tap').test
|
||||
var ECLevel = require('core/error-correction-level')
|
||||
var Version = require('core/version')
|
||||
var QRCode = require('core/qrcode')
|
||||
var toSJIS = require('helper/to-sjis')
|
||||
const test = require('tap').test
|
||||
const ECLevel = require('core/error-correction-level')
|
||||
const Version = require('core/version')
|
||||
const QRCode = require('core/qrcode')
|
||||
const toSJIS = require('helper/to-sjis')
|
||||
|
||||
test('QRCode interface', function (t) {
|
||||
t.type(QRCode.create, 'function', 'Should have "create" function')
|
||||
t.throw(function () { QRCode.create() }, 'Should throw if no data is provided')
|
||||
t.notThrow(function () { QRCode.create('1234567') }, 'Should not throw')
|
||||
|
||||
var qr = QRCode.create('a123456A', {
|
||||
let qr = QRCode.create('a123456A', {
|
||||
version: 1,
|
||||
maskPattern: 1,
|
||||
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.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.throw(function () {
|
||||
|
@ -46,16 +46,16 @@ test('QRCode interface', function (t) {
|
|||
})
|
||||
|
||||
test('QRCode error correction', function (t) {
|
||||
var qr
|
||||
var ecValues = [
|
||||
let qr
|
||||
const ecValues = [
|
||||
{ name: ['l', 'low'], level: ECLevel.L },
|
||||
{ name: ['m', 'medium'], level: ECLevel.M },
|
||||
{ name: ['q', 'quartile'], level: ECLevel.Q },
|
||||
{ name: ['h', 'high'], level: ECLevel.H }
|
||||
]
|
||||
|
||||
for (var l = 0; l < ecValues.length; l++) {
|
||||
for (var i = 0; i < ecValues[l].name.length; i++) {
|
||||
for (let l = 0; l < ecValues.length; l++) {
|
||||
for (let i = 0; i < ecValues[l].name.length; i++) {
|
||||
t.notThrow(function () {
|
||||
qr = QRCode.create('ABCDEFG', { errorCorrectionLevel: 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) {
|
||||
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.errorCorrectionLevel, ECLevel.M, 'Should set correct EC level')
|
||||
|
@ -102,7 +102,7 @@ test('QRCode version', function (t) {
|
|||
})
|
||||
|
||||
test('QRCode capacity', function (t) {
|
||||
var qr
|
||||
let qr
|
||||
|
||||
qr = QRCode.create([{ data: 'abcdefg', mode: 'byte' }])
|
||||
t.equal(qr.version, 1, 'Should contain 7 byte characters')
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
var test = require('tap').test
|
||||
var RS = require('core/reed-solomon-encoder')
|
||||
var BufferUtil = require('utils/buffer')
|
||||
const test = require('tap').test
|
||||
const RS = require('core/reed-solomon-encoder')
|
||||
|
||||
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.throw(function () { enc.encode([]) }, 'Should throw if generator polynomial is undefined')
|
||||
|
@ -12,11 +11,11 @@ test('Reed-Solomon encoder', function (t) {
|
|||
t.equal(enc.degree, 2, 'Should set correct degree value')
|
||||
t.ok(enc.genPoly, 'Generator polynomial should be defined')
|
||||
|
||||
var result = enc.encode(BufferUtil.from('01234'))
|
||||
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')
|
||||
|
||||
enc = new RS(2)
|
||||
var genPoly = enc.genPoly
|
||||
const genPoly = enc.genPoly
|
||||
t.equal(enc.degree, 2, 'Should set correct degree value')
|
||||
t.ok(genPoly, 'Generator polynomial should be defined')
|
||||
|
||||
|
@ -27,7 +26,7 @@ test('Reed-Solomon encoder', function (t) {
|
|||
t.notOk(enc.genPoly, 'Should not create a generator polynomial if degree is 0')
|
||||
|
||||
enc = new RS(1)
|
||||
t.deepEqual(enc.encode(BufferUtil.from([0])), BufferUtil.from([0]),
|
||||
t.deepEqual(enc.encode(new Uint8Array([0])), new Uint8Array([0]),
|
||||
'Should return correct buffer')
|
||||
|
||||
t.end()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var test = require('tap').test
|
||||
var Regex = require('core/regex')
|
||||
const test = require('tap').test
|
||||
const Regex = require('core/regex')
|
||||
|
||||
test('Regex', function (t) {
|
||||
t.ok(Regex.NUMERIC instanceof RegExp,
|
||||
|
|
|
@ -1,161 +1,161 @@
|
|||
var test = require('tap').test
|
||||
var Mode = require('core/mode')
|
||||
var Segments = require('core/segments')
|
||||
var NumericData = require('core/numeric-data')
|
||||
var AlphanumericData = require('core/alphanumeric-data')
|
||||
var ByteData = require('core/byte-data')
|
||||
var toSJIS = require('helper/to-sjis')
|
||||
var Utils = require('core/utils')
|
||||
const test = require('tap').test
|
||||
const Mode = require('core/mode')
|
||||
const Segments = require('core/segments')
|
||||
const NumericData = require('core/numeric-data')
|
||||
const AlphanumericData = require('core/alphanumeric-data')
|
||||
const ByteData = require('core/byte-data')
|
||||
const toSJIS = require('helper/to-sjis')
|
||||
const Utils = require('core/utils')
|
||||
|
||||
var testData = [
|
||||
let testData = [
|
||||
{
|
||||
input: '1A1',
|
||||
result: [{data: '1A1', mode: Mode.ALPHANUMERIC}]
|
||||
result: [{ data: '1A1', mode: Mode.ALPHANUMERIC }]
|
||||
},
|
||||
{
|
||||
input: 'a-1-b-2?',
|
||||
result: [{data: 'a-1-b-2?', mode: Mode.BYTE}]
|
||||
result: [{ data: 'a-1-b-2?', mode: Mode.BYTE }]
|
||||
},
|
||||
{
|
||||
input: 'AB123456CDF',
|
||||
result: [{data: 'AB123456CDF', mode: Mode.ALPHANUMERIC}]
|
||||
result: [{ data: 'AB123456CDF', mode: Mode.ALPHANUMERIC }]
|
||||
},
|
||||
{
|
||||
input: 'aABC000000-?-----a',
|
||||
result: [
|
||||
{data: 'aABC', mode: Mode.BYTE},
|
||||
{data: '000000', mode: Mode.NUMERIC},
|
||||
{data: '-?-----a', mode: Mode.BYTE}
|
||||
{ data: 'aABC', mode: Mode.BYTE },
|
||||
{ data: '000000', mode: Mode.NUMERIC },
|
||||
{ data: '-?-----a', mode: Mode.BYTE }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'aABC000000A?',
|
||||
result: [
|
||||
{data: 'aABC', mode: Mode.BYTE},
|
||||
{data: '000000', mode: Mode.NUMERIC},
|
||||
{data: 'A?', mode: Mode.BYTE}
|
||||
{ data: 'aABC', mode: Mode.BYTE },
|
||||
{ data: '000000', mode: Mode.NUMERIC },
|
||||
{ data: 'A?', mode: Mode.BYTE }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'a1234ABCDEF?',
|
||||
result: [
|
||||
{data: 'a', mode: Mode.BYTE},
|
||||
{data: '1234ABCDEF', mode: Mode.ALPHANUMERIC},
|
||||
{data: '?', mode: Mode.BYTE}
|
||||
{ data: 'a', mode: Mode.BYTE },
|
||||
{ data: '1234ABCDEF', mode: Mode.ALPHANUMERIC },
|
||||
{ data: '?', mode: Mode.BYTE }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: '12345A12345',
|
||||
result: [
|
||||
{data: '12345A12345', mode: Mode.ALPHANUMERIC}
|
||||
{ data: '12345A12345', mode: Mode.ALPHANUMERIC }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'aABCDEFGHILMNa',
|
||||
result: [
|
||||
{data: 'a', mode: Mode.BYTE},
|
||||
{data: 'ABCDEFGHILMN', mode: Mode.ALPHANUMERIC},
|
||||
{data: 'a', mode: Mode.BYTE}
|
||||
{ data: 'a', mode: Mode.BYTE },
|
||||
{ data: 'ABCDEFGHILMN', mode: Mode.ALPHANUMERIC },
|
||||
{ data: 'a', mode: Mode.BYTE }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'Aa12345',
|
||||
result: [
|
||||
{data: 'Aa', mode: Mode.BYTE},
|
||||
{data: '12345', mode: Mode.NUMERIC}
|
||||
{ data: 'Aa', mode: Mode.BYTE },
|
||||
{ data: '12345', mode: Mode.NUMERIC }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'a1A2B3C4D5E6F4G7',
|
||||
result: [
|
||||
{data: 'a', mode: Mode.BYTE},
|
||||
{data: '1A2B3C4D5E6F4G7', mode: Mode.ALPHANUMERIC}
|
||||
{ data: 'a', mode: Mode.BYTE },
|
||||
{ data: '1A2B3C4D5E6F4G7', mode: Mode.ALPHANUMERIC }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: '123456789QWERTYUIOPASD',
|
||||
result: [
|
||||
{data: '123456789', mode: Mode.NUMERIC},
|
||||
{data: 'QWERTYUIOPASD', mode: Mode.ALPHANUMERIC}
|
||||
{ data: '123456789', mode: Mode.NUMERIC },
|
||||
{ data: 'QWERTYUIOPASD', mode: Mode.ALPHANUMERIC }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'QWERTYUIOPASD123456789',
|
||||
result: [
|
||||
{data: 'QWERTYUIOPASD', mode: Mode.ALPHANUMERIC},
|
||||
{data: '123456789', mode: Mode.NUMERIC}
|
||||
{ data: 'QWERTYUIOPASD', mode: Mode.ALPHANUMERIC },
|
||||
{ data: '123456789', mode: Mode.NUMERIC }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'ABCDEF123456a',
|
||||
result: [
|
||||
{data: 'ABCDEF123456', mode: Mode.ALPHANUMERIC},
|
||||
{data: 'a', mode: Mode.BYTE}
|
||||
{ data: 'ABCDEF123456', mode: Mode.ALPHANUMERIC },
|
||||
{ data: 'a', mode: Mode.BYTE }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'abcdefABCDEF',
|
||||
result: [
|
||||
{data: 'abcdef', mode: Mode.BYTE},
|
||||
{data: 'ABCDEF', mode: Mode.ALPHANUMERIC}
|
||||
{ data: 'abcdef', mode: Mode.BYTE },
|
||||
{ data: 'ABCDEF', mode: Mode.ALPHANUMERIC }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'a123456ABCDEa',
|
||||
result: [
|
||||
{data: 'a', mode: Mode.BYTE},
|
||||
{data: '123456ABCDE', mode: Mode.ALPHANUMERIC},
|
||||
{data: 'a', mode: Mode.BYTE}
|
||||
{ data: 'a', mode: Mode.BYTE },
|
||||
{ data: '123456ABCDE', mode: Mode.ALPHANUMERIC },
|
||||
{ data: 'a', mode: Mode.BYTE }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'AAAAA12345678?A1A',
|
||||
result: [
|
||||
{data: 'AAAAA', mode: Mode.ALPHANUMERIC},
|
||||
{data: '12345678', mode: Mode.NUMERIC},
|
||||
{data: '?A1A', mode: Mode.BYTE}
|
||||
{ data: 'AAAAA', mode: Mode.ALPHANUMERIC },
|
||||
{ data: '12345678', mode: Mode.NUMERIC },
|
||||
{ data: '?A1A', mode: Mode.BYTE }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'Aaa',
|
||||
result: [{data: 'Aaa', mode: Mode.BYTE}]
|
||||
result: [{ data: 'Aaa', mode: Mode.BYTE }]
|
||||
},
|
||||
{
|
||||
input: 'Aa12345A',
|
||||
result: [
|
||||
{data: 'Aa', mode: Mode.BYTE},
|
||||
{data: '12345A', mode: Mode.ALPHANUMERIC}
|
||||
{ data: 'Aa', mode: Mode.BYTE },
|
||||
{ data: '12345A', mode: Mode.ALPHANUMERIC }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: 'ABC\nDEF',
|
||||
result: [
|
||||
{data: 'ABC\nDEF', mode: Mode.BYTE}
|
||||
{ data: 'ABC\nDEF', mode: Mode.BYTE }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
var kanjiTestData = [
|
||||
const kanjiTestData = [
|
||||
{
|
||||
input: '乂ЁЖぞβ',
|
||||
result: [{data: '乂ЁЖぞβ', mode: Mode.KANJI}]
|
||||
result: [{ data: '乂ЁЖぞβ', mode: Mode.KANJI }]
|
||||
},
|
||||
{
|
||||
input: 'ΑΒΓψωЮЯабв',
|
||||
result: [{data: 'ΑΒΓψωЮЯабв', mode: Mode.KANJI}]
|
||||
result: [{ data: 'ΑΒΓψωЮЯабв', mode: Mode.KANJI }]
|
||||
},
|
||||
{
|
||||
input: '皿a晒三',
|
||||
result: [
|
||||
{data: '皿a', mode: Mode.BYTE},
|
||||
{data: '晒三', mode: Mode.KANJI}
|
||||
{ data: '皿a', mode: Mode.BYTE },
|
||||
{ data: '晒三', mode: Mode.KANJI }
|
||||
]
|
||||
},
|
||||
{
|
||||
input: '皿a\n晒三',
|
||||
result: [
|
||||
{data: '皿a\n', mode: Mode.BYTE},
|
||||
{data: '晒三', mode: Mode.KANJI}
|
||||
{ data: '皿a\n', mode: Mode.BYTE },
|
||||
{ data: '晒三', mode: Mode.KANJI }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
@ -163,22 +163,23 @@ var kanjiTestData = [
|
|||
testData = testData.concat(kanjiTestData)
|
||||
|
||||
test('Segments from array', function (t) {
|
||||
t.deepEqual(Segments.fromArray(['abcdef', '12345']),
|
||||
t.deepEqual(
|
||||
Segments.fromArray(['abcdef', '12345']),
|
||||
[new ByteData('abcdef'), new NumericData('12345')],
|
||||
'Should return correct segment from array of string')
|
||||
|
||||
t.deepEqual(Segments.fromArray(
|
||||
[{ data: 'abcdef', mode: Mode.BYTE }, { data: '12345', mode: Mode.NUMERIC }]),
|
||||
t.deepEqual(
|
||||
Segments.fromArray([{ data: 'abcdef', mode: Mode.BYTE }, { data: '12345', mode: Mode.NUMERIC }]),
|
||||
[new ByteData('abcdef'), new NumericData('12345')],
|
||||
'Should return correct segment from array of objects')
|
||||
|
||||
t.deepEqual(Segments.fromArray(
|
||||
[{ data: 'abcdef', mode: 'byte' }, { data: '12345', mode: 'numeric' }]),
|
||||
t.deepEqual(
|
||||
Segments.fromArray([{ data: 'abcdef', mode: 'byte' }, { data: '12345', mode: 'numeric' }]),
|
||||
[new ByteData('abcdef'), new NumericData('12345')],
|
||||
'Should return correct segment from array of objects if mode is specified as string')
|
||||
|
||||
t.deepEqual(Segments.fromArray(
|
||||
[{ data: 'abcdef' }, { data: '12345' }]),
|
||||
t.deepEqual(
|
||||
Segments.fromArray([{ data: 'abcdef' }, { data: '12345' }]),
|
||||
[new ByteData('abcdef'), new NumericData('12345')],
|
||||
'Should return correct segment from array of objects if mode is not specified')
|
||||
|
||||
|
@ -188,8 +189,8 @@ test('Segments from array', function (t) {
|
|||
t.throw(function () { Segments.fromArray([{ data: 'ABCDE', mode: 'numeric' }]) },
|
||||
'Should throw if segment cannot be encoded with specified mode')
|
||||
|
||||
t.deepEqual(Segments.fromArray(
|
||||
[{ data: '0123', mode: Mode.KANJI }]), [new ByteData('0123')],
|
||||
t.deepEqual(
|
||||
Segments.fromArray([{ data: '0123', mode: Mode.KANJI }]), [new ByteData('0123')],
|
||||
'Should use Byte mode if kanji support is disabled')
|
||||
|
||||
t.end()
|
||||
|
@ -208,7 +209,7 @@ test('Segments optimization', function (t) {
|
|||
})
|
||||
|
||||
test('Segments raw split', function (t) {
|
||||
var splitted = [
|
||||
const splitted = [
|
||||
new ByteData('abc'),
|
||||
new AlphanumericData('DEF'),
|
||||
new NumericData('123')
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
var test = require('tap').test
|
||||
var Utils = require('core/utils')
|
||||
const test = require('tap').test
|
||||
const Utils = require('core/utils')
|
||||
|
||||
/**
|
||||
* QR Code sizes. Each element refers to a version
|
||||
* @type {Array}
|
||||
*/
|
||||
var EXPECTED_SYMBOL_SIZES = [
|
||||
const EXPECTED_SYMBOL_SIZES = [
|
||||
21, 25, 29, 33, 37, 41, 45,
|
||||
49, 53, 57, 61, 65, 69, 73,
|
||||
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(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')
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ test('Symbol size', 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')
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ test('Symbol codewords', function (t) {
|
|||
})
|
||||
|
||||
test('BCH Digit', function (t) {
|
||||
var testData = [
|
||||
const testData = [
|
||||
{ data: 0, bch: 0 },
|
||||
{ data: 1, bch: 1 },
|
||||
{ data: 2, bch: 2 },
|
||||
|
@ -57,7 +57,7 @@ test('Set/Get SJIS function', function (t) {
|
|||
t.notOk(Utils.isKanjiModeEnabled(),
|
||||
'Kanji mode should be disabled if "toSJIS" function is not set')
|
||||
|
||||
var testFunc = function testFunc (c) {
|
||||
const testFunc = function testFunc (c) {
|
||||
return 'test_' + c
|
||||
}
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
var test = require('tap').test
|
||||
var Version = require('core/version')
|
||||
var VersionCheck = require('core/version-check')
|
||||
var ECLevel = require('core/error-correction-level')
|
||||
var Mode = require('core/mode')
|
||||
var NumericData = require('core/numeric-data')
|
||||
var AlphanumericData = require('core/alphanumeric-data')
|
||||
var KanjiData = require('core/kanji-data')
|
||||
var ByteData = require('core/byte-data')
|
||||
const test = require('tap').test
|
||||
const Version = require('core/version')
|
||||
const VersionCheck = require('core/version-check')
|
||||
const ECLevel = require('core/error-correction-level')
|
||||
const Mode = require('core/mode')
|
||||
const NumericData = require('core/numeric-data')
|
||||
const AlphanumericData = require('core/alphanumeric-data')
|
||||
const KanjiData = require('core/kanji-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],
|
||||
[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],
|
||||
|
@ -23,7 +23,7 @@ var EXPECTED_NUMERIC_CAPACITY = [
|
|||
[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],
|
||||
[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],
|
||||
|
@ -36,7 +36,7 @@ var EXPECTED_ALPHANUMERIC_CAPACITY = [
|
|||
[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],
|
||||
[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],
|
||||
|
@ -49,7 +49,7 @@ var EXPECTED_KANJI_CAPACITY = [
|
|||
[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],
|
||||
[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],
|
||||
|
@ -62,7 +62,7 @@ var EXPECTED_BYTE_CAPACITY = [
|
|||
[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,
|
||||
0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683, 0x168C9,
|
||||
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(41) }, 'Should throw if version is not in range')
|
||||
|
||||
for (var l = 0; l < EC_LEVELS.length; l++) {
|
||||
for (var i = 1; i <= 40; i++) {
|
||||
for (let l = 0; l < EC_LEVELS.length; l++) {
|
||||
for (let i = 1; i <= 40; i++) {
|
||||
t.equal(Version.getCapacity(i, EC_LEVELS[l], Mode.NUMERIC),
|
||||
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) {
|
||||
function testBestVersionForCapacity (expectedCapacity, DataCtor) {
|
||||
for (var v = 0; v < 40; v++) {
|
||||
for (var l = 0; l < EC_LEVELS.length; l++) {
|
||||
var capacity = expectedCapacity[v][l]
|
||||
var data = new DataCtor(new Array(capacity + 1).join('-'))
|
||||
for (let v = 0; v < 40; v++) {
|
||||
for (let l = 0; l < EC_LEVELS.length; l++) {
|
||||
const capacity = expectedCapacity[v][l]
|
||||
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')
|
||||
|
@ -135,10 +135,10 @@ test('Version best match', function (t) {
|
|||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < EC_LEVELS.length; i++) {
|
||||
var exceededCapacity = expectedCapacity[39][i] + 1
|
||||
var tooBigData = new DataCtor(new Array(exceededCapacity + 1).join('-'))
|
||||
var tooBigDataArray = [
|
||||
for (let i = 0; i < EC_LEVELS.length; i++) {
|
||||
const exceededCapacity = expectedCapacity[39][i] + 1
|
||||
const tooBigData = new DataCtor(new Array(exceededCapacity + 1).join('-'))
|
||||
const tooBigDataArray = [
|
||||
new DataCtor(new Array(Math.floor(exceededCapacity / 2)).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) {
|
||||
var v
|
||||
let v
|
||||
|
||||
for (v = 0; v < 7; v++) {
|
||||
t.throws(function () { Version.getEncodedBits(v) },
|
||||
|
@ -175,7 +175,7 @@ test('Version encoded info', function (t) {
|
|||
}
|
||||
|
||||
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')
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
var test = require('tap').test
|
||||
var toSJIS = require('helper/to-sjis')
|
||||
const test = require('tap').test
|
||||
const toSJIS = require('helper/to-sjis')
|
||||
|
||||
test('SJIS from char', function (t) {
|
||||
t.notOk(toSJIS(''),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
var test = require('tap').test
|
||||
var Canvas = require('canvas')
|
||||
var QRCode = require('core/qrcode')
|
||||
var CanvasRenderer = require('renderer/canvas')
|
||||
const test = require('tap').test
|
||||
const { Canvas, createCanvas } = require('canvas')
|
||||
const QRCode = require('core/qrcode')
|
||||
const CanvasRenderer = require('renderer/canvas')
|
||||
|
||||
test('CanvasRenderer interface', function (t) {
|
||||
t.type(CanvasRenderer.render, 'function',
|
||||
|
@ -18,13 +18,13 @@ test('CanvasRenderer render', function (t) {
|
|||
global.document = {
|
||||
createElement: function (el) {
|
||||
if (el === 'canvas') {
|
||||
return new Canvas(200, 200)
|
||||
return createCanvas(200, 200)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var canvasEl
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
let canvasEl
|
||||
|
||||
t.notThrow(function () { canvasEl = CanvasRenderer.render(sampleQrData) },
|
||||
'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) {
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var canvasEl = new Canvas(200, 200)
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
const canvasEl = createCanvas(200, 200)
|
||||
|
||||
t.notThrow(function () { CanvasRenderer.render(sampleQrData, canvasEl) },
|
||||
'Should not throw with only qrData and canvas param')
|
||||
|
@ -83,13 +83,13 @@ test('CanvasRenderer renderToDataURL', function (t) {
|
|||
global.document = {
|
||||
createElement: function (el) {
|
||||
if (el === 'canvas') {
|
||||
return new Canvas(200, 200)
|
||||
return createCanvas(200, 200)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var url
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
let url
|
||||
|
||||
t.notThrow(function () { url = CanvasRenderer.renderToDataURL(sampleQrData) },
|
||||
'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',
|
||||
'Should have correct header')
|
||||
|
||||
var b64png = url.split(',')[1]
|
||||
const b64png = url.split(',')[1]
|
||||
t.equal(b64png.length % 4, 0,
|
||||
'Should have a correct length')
|
||||
|
||||
|
@ -117,9 +117,9 @@ test('CanvasRenderer renderToDataURL', function (t) {
|
|||
})
|
||||
|
||||
test('CanvasRenderer renderToDataURL to provided canvas', function (t) {
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var canvasEl = new Canvas(200, 200)
|
||||
var url
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
const canvasEl = createCanvas(200, 200)
|
||||
let url
|
||||
|
||||
t.notThrow(function () {
|
||||
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',
|
||||
'Should have correct header')
|
||||
|
||||
var b64png = url.split(',')[1]
|
||||
const b64png = url.split(',')[1]
|
||||
t.equal(b64png.length % 4, 0,
|
||||
'Should have a correct length')
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
var test = require('tap').test
|
||||
var sinon = require('sinon')
|
||||
var fs = require('fs')
|
||||
var QRCode = require('core/qrcode')
|
||||
var PngRenderer = require('renderer/png')
|
||||
var PNG = require('pngjs').PNG
|
||||
var StreamMock = require('../../mocks/writable-stream')
|
||||
const test = require('tap').test
|
||||
const sinon = require('sinon')
|
||||
const fs = require('fs')
|
||||
const QRCode = require('core/qrcode')
|
||||
const PngRenderer = require('renderer/png')
|
||||
const PNG = require('pngjs').PNG
|
||||
const StreamMock = require('../../mocks/writable-stream')
|
||||
|
||||
test('PNG renderer interface', function (t) {
|
||||
t.type(PngRenderer.render, 'function',
|
||||
|
@ -23,8 +23,8 @@ test('PNG renderer interface', function (t) {
|
|||
})
|
||||
|
||||
test('PNG render', function (t) {
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var png
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
let png
|
||||
|
||||
t.notThrow(function () { png = PngRenderer.render(sampleQrData) },
|
||||
'Should not throw with only qrData param')
|
||||
|
@ -57,7 +57,7 @@ test('PNG render', 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)
|
||||
|
||||
|
@ -79,7 +79,7 @@ test('PNG renderToDataURL', function (t) {
|
|||
t.equal(url.split(',')[0], 'data:image/png;base64',
|
||||
'Should have correct header')
|
||||
|
||||
var b64png = url.split(',')[1]
|
||||
const b64png = url.split(',')[1]
|
||||
t.equal(b64png.length % 4, 0,
|
||||
'Should have a correct length')
|
||||
}
|
||||
|
@ -87,11 +87,10 @@ test('PNG renderToDataURL', function (t) {
|
|||
})
|
||||
|
||||
test('PNG renderToFile', function (t) {
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var fileName = 'qrimage.png'
|
||||
var fsStub = sinon.stub(fs, 'createWriteStream')
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
const fileName = 'qrimage.png'
|
||||
let fsStub = sinon.stub(fs, 'createWriteStream')
|
||||
fsStub.returns(new StreamMock())
|
||||
fsStub.reset()
|
||||
|
||||
t.plan(6)
|
||||
|
||||
|
@ -117,7 +116,6 @@ test('PNG renderToFile', function (t) {
|
|||
fsStub.restore()
|
||||
fsStub = sinon.stub(fs, 'createWriteStream')
|
||||
fsStub.returns(new StreamMock().forceErrorOnWrite())
|
||||
fsStub.reset()
|
||||
|
||||
PngRenderer.renderToFile(fileName, sampleQrData, function (err) {
|
||||
t.ok(err,
|
||||
|
@ -128,7 +126,7 @@ test('PNG renderToFile', 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 () {
|
||||
PngRenderer.renderToFileStream(new StreamMock(), sampleQrData)
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
var test = require('tap').test
|
||||
var sinon = require('sinon')
|
||||
var fs = require('fs')
|
||||
var htmlparser = require('htmlparser2')
|
||||
var QRCode = require('core/qrcode')
|
||||
var SvgRenderer = require('renderer/svg')
|
||||
const test = require('tap').test
|
||||
const sinon = require('sinon')
|
||||
const fs = require('fs')
|
||||
const htmlparser = require('htmlparser2')
|
||||
const QRCode = require('core/qrcode')
|
||||
const SvgRenderer = require('renderer/svg')
|
||||
|
||||
function getExpectedViewbox (size, margin) {
|
||||
var expectedQrCodeSize = size + margin * 2
|
||||
const expectedQrCodeSize = size + margin * 2
|
||||
return '0 0 ' + expectedQrCodeSize + ' ' + expectedQrCodeSize
|
||||
}
|
||||
|
||||
function testSvgFragment (t, svgFragment, expectedTags) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var parser = new htmlparser.Parser({
|
||||
const parser = new htmlparser.Parser({
|
||||
onopentag: function (name, attribs) {
|
||||
var tag = expectedTags.shift()
|
||||
const tag = expectedTags.shift()
|
||||
|
||||
t.equal(tag.name, name,
|
||||
'Should have a ' + tag.name + ' tag')
|
||||
|
@ -40,7 +40,7 @@ function testSvgFragment (t, svgFragment, 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())
|
||||
}
|
||||
|
||||
|
@ -55,10 +55,10 @@ test('svgrender interface', function (t) {
|
|||
})
|
||||
|
||||
test('Svg render', function (t) {
|
||||
var tests = []
|
||||
const tests = []
|
||||
|
||||
var data = QRCode.create('sample text', { version: 2 })
|
||||
var size = data.modules.size
|
||||
const data = QRCode.create('sample text', { version: 2 })
|
||||
const size = data.modules.size
|
||||
|
||||
tests.push(buildTest(t, data, {
|
||||
scale: 4,
|
||||
|
@ -67,19 +67,25 @@ test('Svg render', function (t) {
|
|||
light: '#ffffff80'
|
||||
}
|
||||
}, [
|
||||
{ name: 'svg',
|
||||
{
|
||||
name: 'svg',
|
||||
attribs: [
|
||||
{ name: 'viewbox', value: getExpectedViewbox(size, 4) }
|
||||
]},
|
||||
{ name: 'path',
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
attribs: [
|
||||
{ name: 'fill', value: '#ffffff' },
|
||||
{ name: 'fill-opacity', value: '.50' }
|
||||
]},
|
||||
{ name: 'path',
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
attribs: [
|
||||
{ name: 'stroke', value: '#000000' }
|
||||
]}
|
||||
]
|
||||
}
|
||||
]))
|
||||
|
||||
tests.push(buildTest(t, data, {
|
||||
|
@ -90,33 +96,41 @@ test('Svg render', function (t) {
|
|||
dark: '#00000080'
|
||||
}
|
||||
}, [
|
||||
{ name: 'svg',
|
||||
{
|
||||
name: 'svg',
|
||||
attribs: [
|
||||
{ name: 'viewbox', value: getExpectedViewbox(size, 8) }
|
||||
]},
|
||||
{ name: 'path',
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'path',
|
||||
attribs: [
|
||||
{ name: 'stroke', value: '#000000' },
|
||||
{ name: 'stroke-opacity', value: '.50' }
|
||||
]}
|
||||
]
|
||||
}
|
||||
]))
|
||||
|
||||
tests.push(buildTest(t, data, {}, [
|
||||
{ name: 'svg',
|
||||
{
|
||||
name: 'svg',
|
||||
attribs: [
|
||||
{ name: 'viewbox', value: getExpectedViewbox(size, 4) }
|
||||
]},
|
||||
]
|
||||
},
|
||||
{ name: 'path', attribs: [{ name: 'fill', value: '#ffffff' }] },
|
||||
{ name: 'path', attribs: [{ name: 'stroke', value: '#000000' }] }
|
||||
]))
|
||||
|
||||
tests.push(buildTest(t, data, { width: 250 }, [
|
||||
{ name: 'svg',
|
||||
{
|
||||
name: 'svg',
|
||||
attribs: [
|
||||
{ name: 'width', value: '250' },
|
||||
{ name: 'height', value: '250' },
|
||||
{ name: 'viewbox', value: getExpectedViewbox(size, 4) }
|
||||
]},
|
||||
]
|
||||
},
|
||||
{ name: 'path', attribs: [{ name: 'fill', value: '#ffffff' }] },
|
||||
{ name: 'path', attribs: [{ name: 'stroke', value: '#000000' }] }
|
||||
]))
|
||||
|
@ -127,10 +141,9 @@ test('Svg render', function (t) {
|
|||
})
|
||||
|
||||
test('Svg renderToFile', function (t) {
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var fileName = 'qrimage.svg'
|
||||
var fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
|
||||
fsStub.reset()
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
const fileName = 'qrimage.svg'
|
||||
let fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
|
||||
|
||||
t.plan(5)
|
||||
|
||||
|
@ -155,7 +168,6 @@ test('Svg renderToFile', function (t) {
|
|||
|
||||
fsStub.restore()
|
||||
fsStub = sinon.stub(fs, 'writeFile').callsArgWith(2, new Error())
|
||||
fsStub.reset()
|
||||
|
||||
SvgRenderer.renderToFile(fileName, sampleQrData, function (err) {
|
||||
t.ok(err,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
var test = require('tap').test
|
||||
var QRCode = require('core/qrcode')
|
||||
var TerminalRenderer = require('renderer/terminal')
|
||||
const test = require('tap').test
|
||||
const QRCode = require('core/qrcode')
|
||||
const TerminalRenderer = require('renderer/terminal')
|
||||
|
||||
test('TerminalRenderer interface', function (t) {
|
||||
t.type(TerminalRenderer.render, 'function',
|
||||
|
@ -10,8 +10,8 @@ test('TerminalRenderer interface', function (t) {
|
|||
})
|
||||
|
||||
test('TerminalRenderer render', function (t) {
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var str
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
let str
|
||||
|
||||
t.notThrow(function () { str = TerminalRenderer.render(sampleQrData) },
|
||||
'Should not throw with only qrData param')
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
var test = require('tap').test
|
||||
var sinon = require('sinon')
|
||||
var fs = require('fs')
|
||||
var QRCode = require('core/qrcode')
|
||||
var Utf8Renderer = require('renderer/utf8')
|
||||
const test = require('tap').test
|
||||
const sinon = require('sinon')
|
||||
const fs = require('fs')
|
||||
const QRCode = require('core/qrcode')
|
||||
const Utf8Renderer = require('renderer/utf8')
|
||||
|
||||
test('Utf8Renderer interface', function (t) {
|
||||
t.type(Utf8Renderer.render, 'function',
|
||||
|
@ -12,8 +12,8 @@ test('Utf8Renderer interface', function (t) {
|
|||
})
|
||||
|
||||
test('Utf8Renderer render', function (t) {
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var str
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
let str
|
||||
|
||||
t.notThrow(function () { str = Utf8Renderer.render(sampleQrData) },
|
||||
'Should not throw with only qrData param')
|
||||
|
@ -32,10 +32,9 @@ test('Utf8Renderer render', function (t) {
|
|||
})
|
||||
|
||||
test('Utf8 renderToFile', function (t) {
|
||||
var sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
var fileName = 'qrimage.txt'
|
||||
var fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
|
||||
fsStub.reset()
|
||||
const sampleQrData = QRCode.create('sample text', { version: 2 })
|
||||
const fileName = 'qrimage.txt'
|
||||
let fsStub = sinon.stub(fs, 'writeFile').callsArg(2)
|
||||
|
||||
t.plan(5)
|
||||
|
||||
|
@ -60,7 +59,6 @@ test('Utf8 renderToFile', function (t) {
|
|||
|
||||
fsStub.restore()
|
||||
fsStub = sinon.stub(fs, 'writeFile').callsArgWith(2, new Error())
|
||||
fsStub.reset()
|
||||
|
||||
Utf8Renderer.renderToFile(fileName, sampleQrData, function (err) {
|
||||
t.ok(err,
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
var test = require('tap').test
|
||||
var Utils = require('renderer/utils')
|
||||
const test = require('tap').test
|
||||
const Utils = require('renderer/utils')
|
||||
|
||||
test('Utils getOptions', function (t) {
|
||||
var defaultOptions = {
|
||||
const defaultOptions = {
|
||||
width: undefined,
|
||||
scale: 4,
|
||||
margin: 4,
|
||||
|
@ -59,7 +59,7 @@ test('Utils getOptions', function (t) {
|
|||
})
|
||||
|
||||
test('Utils getScale', function (t) {
|
||||
var symbolSize = 21
|
||||
const symbolSize = 21
|
||||
|
||||
t.equal(Utils.getScale(symbolSize, { scale: 5 }), 5,
|
||||
'Should return correct scale value')
|
||||
|
@ -74,7 +74,7 @@ test('Utils getScale', function (t) {
|
|||
})
|
||||
|
||||
test('Utils getImageWidth', function (t) {
|
||||
var symbolSize = 21
|
||||
const symbolSize = 21
|
||||
|
||||
t.equal(Utils.getImageWidth(symbolSize, { scale: 5, margin: 0 }), 105,
|
||||
'Should return correct width value')
|
||||
|
@ -92,7 +92,7 @@ test('Utils qrToImageData', function (t) {
|
|||
t.ok(Utils.qrToImageData,
|
||||
'qrToImageData should be defined')
|
||||
|
||||
var sampleQrData = {
|
||||
const sampleQrData = {
|
||||
modules: {
|
||||
data: [
|
||||
1, 0, 1, 0,
|
||||
|
@ -104,24 +104,24 @@ test('Utils qrToImageData', function (t) {
|
|||
}
|
||||
}
|
||||
|
||||
var margin = 4
|
||||
var scale = 2
|
||||
var width = 100
|
||||
const margin = 4
|
||||
const scale = 2
|
||||
const width = 100
|
||||
|
||||
var color = {
|
||||
const color = {
|
||||
dark: { r: 255, g: 255, b: 255, a: 255 },
|
||||
light: { r: 0, g: 0, b: 0, a: 255 }
|
||||
}
|
||||
|
||||
var opts = {
|
||||
const opts = {
|
||||
margin: margin,
|
||||
scale: scale,
|
||||
color: color
|
||||
}
|
||||
|
||||
var imageData = []
|
||||
var expectedImageSize = (sampleQrData.modules.size + margin * 2) * scale
|
||||
var expectedImageDataLength = Math.pow(expectedImageSize, 2) * 4
|
||||
let imageData = []
|
||||
const expectedImageSize = (sampleQrData.modules.size + margin * 2) * scale
|
||||
let expectedImageDataLength = Math.pow(expectedImageSize, 2) * 4
|
||||
|
||||
Utils.qrToImageData(imageData, sampleQrData, opts)
|
||||
|
||||
|
|
Loading…
Reference in a new issue