1 var Utils = require('./utils')
10 var INVERTED_BLOCK_CHAR = {
17 function getBlockChar (top, bottom, blocks) {
18 if (top && bottom) return blocks.BB
19 if (top && !bottom) return blocks.BW
20 if (!top && bottom) return blocks.WB
24 exports.render = function (qrData, options, cb) {
25 var opts = Utils.getOptions(options)
26 var blocks = BLOCK_CHAR
27 if (opts.color.dark.hex === '#ffffff' || opts.color.light.hex === '#000000') {
28 blocks = INVERTED_BLOCK_CHAR
31 var size = qrData.modules.size
32 var data = qrData.modules.data
35 var hMargin = Array(size + (opts.margin * 2) + 1).join(blocks.WW)
36 hMargin = Array((opts.margin / 2) + 1).join(hMargin + '\n')
38 var vMargin = Array(opts.margin + 1).join(blocks.WW)
41 for (var i = 0; i < size; i += 2) {
43 for (var j = 0; j < size; j++) {
44 var topModule = data[i * size + j]
45 var bottomModule = data[(i + 1) * size + j]
47 output += getBlockChar(topModule, bottomModule, blocks)
50 output += vMargin + '\n'
53 output += hMargin.slice(0, -1)
55 if (typeof cb === 'function') {
62 exports.renderToFile = function renderToFile (path, qrData, options, cb) {
63 if (typeof cb === 'undefined') {
68 var fs = require('fs')
69 var utf8 = exports.render(qrData, options)
70 fs.writeFile(path, utf8, cb)