X-Git-Url: https://git.josue.xyz/?a=blobdiff_plain;f=lib%2Fqr.js;h=9469b47efadeaf02ffdc935e6bc68cc5c968971a;hb=5dbccedf943f0f768d80a9da1bffff061a5cef3e;hp=632218b6e87ab9969684c9c7b75ef4f367977876;hpb=1fad82bec4432ddd0516d1db4b15f6de1f938acf;p=crowdnode.js%2F.git diff --git a/lib/qr.js b/lib/qr.js index 632218b..9469b47 100644 --- a/lib/qr.js +++ b/lib/qr.js @@ -35,60 +35,70 @@ Qr._create = function (data, opts) { }; /** - * @type {Object.} + * @typedef {Object.} BlockMap */ -let microMap = { - // top-left, top-right, bottom-left, bottom-right - 0b0000: " ", - // - 0b0001: "▗", - // - 0b0010: "▖", - // - 0b0011: "▄", - // - 0b0100: "▝", - // - 0b0101: "▐", - // - 0b0110: "▞", - // - 0b0111: "▟", - // - 0b1000: "▘", - // - 0b1001: "▚", - // - 0b1010: "▌", - // - 0b1011: "▙", - // - 0b1100: "▀", - // - 0b1101: "▜", - // - 0b1110: "▛", - // - 0b1111: "█", + +/** + * Encoded as top-left, top-right, bottom-left, bottom-right + * @type {Object.<"mini" | "micro", BlockMap>} + */ +let charMaps = { + micro: { + 0b0000: " ", + 0b0001: "▗", + 0b0010: "▖", + 0b0011: "▄", + 0b0100: "▝", + 0b0101: "▐", + 0b0110: "▞", + 0b0111: "▟", + 0b1000: "▘", + 0b1001: "▚", + 0b1010: "▌", + 0b1011: "▙", + 0b1100: "▀", + 0b1101: "▜", + 0b1110: "▛", + 0b1111: "█", + }, + mini: { + 0b0000: " ", + 0b0001: " ▄", + 0b0010: "▄ ", + 0b0011: "▄▄", + 0b0100: " ▀", + 0b0101: " █", + 0b0110: "▄▀", + 0b0111: "▄█", + 0b1000: "▀ ", + 0b1001: "▀▄", + 0b1010: "█ ", + 0b1011: "█▄", + 0b1100: "▀▀", + 0b1101: "▀█", + 0b1110: "█▀", + 0b1111: "██", + }, }; /** * @param {String} data * @param {QrOpts} opts */ -Qr.microAscii = function (data, opts) { +Qr.quadAscii = function (data, opts) { + let charMap = charMaps[opts.size || "mini"]; let qrcode = Qr._create(data, opts); let indent = opts?.indent ?? 4; let modules = qrcode.qrcode.modules; - let ascii = ``.padStart(indent, " "); + let ascii = ``.padStart(indent - 1, " "); let length = modules.length; for (let y = 0; y < length; y += 2) { for (let x = 0; x < length; x += 2) { let count = 0; // qr codes can be odd numbers if (x >= length) { - ascii += microMap[count]; + ascii += charMap[count]; continue; } if (modules[x][y]) { @@ -99,7 +109,7 @@ Qr.microAscii = function (data, opts) { } if (x + 1 >= length) { - ascii += microMap[count]; + ascii += charMap[count]; continue; } if (modules[x + 1][y]) { @@ -108,11 +118,11 @@ Qr.microAscii = function (data, opts) { if (modules[x + 1][y + 1]) { count += 1; } - ascii += microMap[count]; + ascii += charMap[count]; } ascii += `\n`.padEnd(indent, " "); } - return " ".padEnd(indent - 1, " ") + ascii.trim(); + return ascii.replace(/\s+$/, ""); }; /** @@ -120,8 +130,8 @@ Qr.microAscii = function (data, opts) { * @param {QrOpts} opts */ Qr.ascii = function (data, opts) { - if ("micro" === opts.size) { - return Qr.microAscii(data, opts); + if (opts.size) { + return Qr.quadAscii(data, opts); } let qrcode = Qr._create(data, opts);