};
/**
- * @type {Object.<String, String>}
+ * @typedef {Object.<String, String>} 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]) {
}
if (x + 1 >= length) {
- ascii += microMap[count];
+ ascii += charMap[count];
continue;
}
if (modules[x + 1][y]) {
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+$/, "");
};
/**
* @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);