Changed the word "white" to "light" in {comments, local variables, a private C function} in order to match the vocabulary in the QR Code specification document.

pull/118/head
Project Nayuki 4 years ago
parent 0532c7a237
commit 99e7d59383

@ -374,7 +374,7 @@ static void testInitializeFunctionModulesEtc(void) {
else else
assert(size == ver * 4 + 17); assert(size == ver * 4 + 17);
bool hasWhite = false; bool hasLight = false;
bool hasBlack = false; bool hasBlack = false;
for (int y = 0; y < size; y++) { for (int y = 0; y < size; y++) {
for (int x = 0; x < size; x++) { for (int x = 0; x < size; x++) {
@ -382,10 +382,10 @@ static void testInitializeFunctionModulesEtc(void) {
if (color) if (color)
hasBlack = true; hasBlack = true;
else else
hasWhite = true; hasLight = true;
} }
} }
assert(hasWhite && hasBlack); assert(hasLight && hasBlack);
free(qrcode); free(qrcode);
numTestCases++; numTestCases++;
} }
@ -424,11 +424,11 @@ static void testGetSetModule(void) {
initializeFunctionModules(23, qrcode); initializeFunctionModules(23, qrcode);
int size = qrcodegen_getSize(qrcode); int size = qrcodegen_getSize(qrcode);
for (int y = 0; y < size; y++) { // Clear all to white for (int y = 0; y < size; y++) { // Clear all to light
for (int x = 0; x < size; x++) for (int x = 0; x < size; x++)
setModule(qrcode, x, y, false); setModule(qrcode, x, y, false);
} }
for (int y = 0; y < size; y++) { // Check all white for (int y = 0; y < size; y++) { // Check all light
for (int x = 0; x < size; x++) for (int x = 0; x < size; x++)
assert(qrcodegen_getModule(qrcode, x, y) == false); assert(qrcodegen_getModule(qrcode, x, y) == false);
} }
@ -441,7 +441,7 @@ static void testGetSetModule(void) {
assert(qrcodegen_getModule(qrcode, x, y) == true); assert(qrcodegen_getModule(qrcode, x, y) == true);
} }
// Set some out of bounds modules to white // Set some out of bounds modules to light
setModuleBounded(qrcode, -1, -1, false); setModuleBounded(qrcode, -1, -1, false);
setModuleBounded(qrcode, -1, 0, false); setModuleBounded(qrcode, -1, 0, false);
setModuleBounded(qrcode, 0, -1, false); setModuleBounded(qrcode, 0, -1, false);
@ -453,13 +453,13 @@ static void testGetSetModule(void) {
assert(qrcodegen_getModule(qrcode, x, y) == true); assert(qrcodegen_getModule(qrcode, x, y) == true);
} }
// Set some modules to white // Set some modules to light
setModule(qrcode, 3, 8, false); setModule(qrcode, 3, 8, false);
setModule(qrcode, 61, 49, false); setModule(qrcode, 61, 49, false);
for (int y = 0; y < size; y++) { // Check most black for (int y = 0; y < size; y++) { // Check most black
for (int x = 0; x < size; x++) { for (int x = 0; x < size; x++) {
bool white = (x == 3 && y == 8) || (x == 61 && y == 49); bool light = (x == 3 && y == 8) || (x == 61 && y == 49);
assert(qrcodegen_getModule(qrcode, x, y) != white); assert(qrcodegen_getModule(qrcode, x, y) != light);
} }
} }
numTestCases++; numTestCases++;

@ -64,7 +64,7 @@ testable void reedSolomonComputeRemainder(const uint8_t data[], int dataLen,
testable uint8_t reedSolomonMultiply(uint8_t x, uint8_t y); testable uint8_t reedSolomonMultiply(uint8_t x, uint8_t y);
testable void initializeFunctionModules(int version, uint8_t qrcode[]); testable void initializeFunctionModules(int version, uint8_t qrcode[]);
static void drawWhiteFunctionModules(uint8_t qrcode[], int version); static void drawLightFunctionModules(uint8_t qrcode[], int version);
static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]); static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]);
testable int getAlignmentPatternPositions(int version, uint8_t result[7]); testable int getAlignmentPatternPositions(int version, uint8_t result[7]);
static void fillRectangle(int left, int top, int width, int height, uint8_t qrcode[]); static void fillRectangle(int left, int top, int width, int height, uint8_t qrcode[]);
@ -259,7 +259,7 @@ bool qrcodegen_encodeSegmentsAdvanced(const struct qrcodegen_Segment segs[], siz
addEccAndInterleave(qrcode, version, ecl, tempBuffer); addEccAndInterleave(qrcode, version, ecl, tempBuffer);
initializeFunctionModules(version, qrcode); initializeFunctionModules(version, qrcode);
drawCodewords(tempBuffer, getNumRawDataModules(version) / 8, qrcode); drawCodewords(tempBuffer, getNumRawDataModules(version) / 8, qrcode);
drawWhiteFunctionModules(qrcode, version); drawLightFunctionModules(qrcode, version);
initializeFunctionModules(version, tempBuffer); initializeFunctionModules(version, tempBuffer);
// Handle masking // Handle masking
@ -413,7 +413,7 @@ testable uint8_t reedSolomonMultiply(uint8_t x, uint8_t y) {
/*---- Drawing function modules ----*/ /*---- Drawing function modules ----*/
// Clears the given QR Code grid with white modules for the given // Clears the given QR Code grid with light modules for the given
// version's size, then marks every function module as black. // version's size, then marks every function module as black.
testable void initializeFunctionModules(int version, uint8_t qrcode[]) { testable void initializeFunctionModules(int version, uint8_t qrcode[]) {
// Initialize QR Code // Initialize QR Code
@ -449,10 +449,10 @@ testable void initializeFunctionModules(int version, uint8_t qrcode[]) {
} }
// Draws white function modules and possibly some black modules onto the given QR Code, without changing // Draws light function modules and possibly some black modules onto the given QR Code, without changing
// non-function modules. This does not draw the format bits. This requires all function modules to be previously // non-function modules. This does not draw the format bits. This requires all function modules to be previously
// marked black (namely by initializeFunctionModules()), because this may skip redrawing black function modules. // marked black (namely by initializeFunctionModules()), because this may skip redrawing black function modules.
static void drawWhiteFunctionModules(uint8_t qrcode[], int version) { static void drawLightFunctionModules(uint8_t qrcode[], int version) {
// Draw horizontal and vertical timing patterns // Draw horizontal and vertical timing patterns
int qrsize = qrcodegen_getSize(qrcode); int qrsize = qrcodegen_getSize(qrcode);
for (int i = 7; i < qrsize - 7; i += 2) { for (int i = 7; i < qrsize - 7; i += 2) {
@ -512,7 +512,7 @@ static void drawWhiteFunctionModules(uint8_t qrcode[], int version) {
// Draws two copies of the format bits (with its own error correction code) based // Draws two copies of the format bits (with its own error correction code) based
// on the given mask and error correction level. This always draws all modules of // on the given mask and error correction level. This always draws all modules of
// the format bits, unlike drawWhiteFunctionModules() which might skip black modules. // the format bits, unlike drawLightFunctionModules() which might skip black modules.
static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]) { static void drawFormatBits(enum qrcodegen_Ecc ecl, enum qrcodegen_Mask mask, uint8_t qrcode[]) {
// Calculate error correction code and pack bits // Calculate error correction code and pack bits
assert(0 <= (int)mask && (int)mask <= 7); assert(0 <= (int)mask && (int)mask <= 7);
@ -573,7 +573,7 @@ static void fillRectangle(int left, int top, int width, int height, uint8_t qrco
/*---- Drawing data modules and masking ----*/ /*---- Drawing data modules and masking ----*/
// Draws the raw codewords (including data and ECC) onto the given QR Code. This requires the initial state of // Draws the raw codewords (including data and ECC) onto the given QR Code. This requires the initial state of
// the QR Code to be black at function modules and white at codeword modules (including unused remainder bits). // the QR Code to be black at function modules and light at codeword modules (including unused remainder bits).
static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]) { static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]) {
int qrsize = qrcodegen_getSize(qrcode); int qrsize = qrcodegen_getSize(qrcode);
int i = 0; // Bit index into the data int i = 0; // Bit index into the data
@ -592,7 +592,7 @@ static void drawCodewords(const uint8_t data[], int dataLen, uint8_t qrcode[]) {
i++; i++;
} }
// If this QR Code has any remainder bits (0 to 7), they were assigned as // If this QR Code has any remainder bits (0 to 7), they were assigned as
// 0/false/white by the constructor and are left unchanged by this method // 0/false/light by the constructor and are left unchanged by this method
} }
} }
} }
@ -693,7 +693,7 @@ static long getPenaltyScore(const uint8_t qrcode[]) {
} }
} }
// Balance of black and white modules // Balance of black and light modules
int black = 0; int black = 0;
for (int y = 0; y < qrsize; y++) { for (int y = 0; y < qrsize; y++) {
for (int x = 0; x < qrsize; x++) { for (int x = 0; x < qrsize; x++) {
@ -709,7 +709,7 @@ static long getPenaltyScore(const uint8_t qrcode[]) {
} }
// Can only be called immediately after a white run is added, and // Can only be called immediately after a light run is added, and
// returns either 0, 1, or 2. A helper function for getPenaltyScore(). // returns either 0, 1, or 2. A helper function for getPenaltyScore().
static int finderPenaltyCountPatterns(const int runHistory[7], int qrsize) { static int finderPenaltyCountPatterns(const int runHistory[7], int qrsize) {
int n = runHistory[1]; int n = runHistory[1];
@ -728,7 +728,7 @@ static int finderPenaltyTerminateAndCount(bool currentRunColor, int currentRunLe
finderPenaltyAddHistory(currentRunLength, runHistory, qrsize); finderPenaltyAddHistory(currentRunLength, runHistory, qrsize);
currentRunLength = 0; currentRunLength = 0;
} }
currentRunLength += qrsize; // Add white border to final run currentRunLength += qrsize; // Add light border to final run
finderPenaltyAddHistory(currentRunLength, runHistory, qrsize); finderPenaltyAddHistory(currentRunLength, runHistory, qrsize);
return finderPenaltyCountPatterns(runHistory, qrsize); return finderPenaltyCountPatterns(runHistory, qrsize);
} }
@ -737,7 +737,7 @@ static int finderPenaltyTerminateAndCount(bool currentRunColor, int currentRunLe
// Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore(). // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().
static void finderPenaltyAddHistory(int currentRunLength, int runHistory[7], int qrsize) { static void finderPenaltyAddHistory(int currentRunLength, int runHistory[7], int qrsize) {
if (runHistory[0] == 0) if (runHistory[0] == 0)
currentRunLength += qrsize; // Add white border to initial run currentRunLength += qrsize; // Add light border to initial run
memmove(&runHistory[1], &runHistory[0], 6 * sizeof(runHistory[0])); memmove(&runHistory[1], &runHistory[0], 6 * sizeof(runHistory[0]));
runHistory[0] = currentRunLength; runHistory[0] = currentRunLength;
} }

@ -36,7 +36,7 @@ extern "C" {
/* /*
* This library creates QR Code symbols, which is a type of two-dimension barcode. * This library creates QR Code symbols, which is a type of two-dimension barcode.
* Invented by Denso Wave and described in the ISO/IEC 18004 standard. * Invented by Denso Wave and described in the ISO/IEC 18004 standard.
* A QR Code structure is an immutable square grid of black and white cells. * A QR Code structure is an immutable square grid of black and light cells.
* The library provides functions to create a QR Code from text or binary data. * The library provides functions to create a QR Code from text or binary data.
* The library covers the QR Code Model 2 specification, supporting all versions (sizes) * The library covers the QR Code Model 2 specification, supporting all versions (sizes)
* from 1 to 40, all 4 error correction levels, and 4 character encoding modes. * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
@ -300,8 +300,8 @@ int qrcodegen_getSize(const uint8_t qrcode[]);
/* /*
* Returns the color of the module (pixel) at the given coordinates, which is false * Returns the color of the module (pixel) at the given coordinates, which is false
* for white or true for black. The top left corner has the coordinates (x=0, y=0). * for light or true for black. The top left corner has the coordinates (x=0, y=0).
* If the given coordinates are out of bounds, then false (white) is returned. * If the given coordinates are out of bounds, then false (light) is returned.
*/ */
bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y); bool qrcodegen_getModule(const uint8_t qrcode[], int x, int y);

@ -327,7 +327,7 @@ QrCode::QrCode(int ver, Ecc ecl, const vector<uint8_t> &dataCodewords, int msk)
throw std::domain_error("Mask value out of range"); throw std::domain_error("Mask value out of range");
size = ver * 4 + 17; size = ver * 4 + 17;
size_t sz = static_cast<size_t>(size); size_t sz = static_cast<size_t>(size);
modules = vector<vector<bool> >(sz, vector<bool>(sz)); // Initially all white modules = vector<vector<bool> >(sz, vector<bool>(sz)); // Initially all light
isFunction = vector<vector<bool> >(sz, vector<bool>(sz)); isFunction = vector<vector<bool> >(sz, vector<bool>(sz));
// Compute ECC, draw modules // Compute ECC, draw modules
@ -584,7 +584,7 @@ void QrCode::drawCodewords(const vector<uint8_t> &data) {
i++; i++;
} }
// If this QR Code has any remainder bits (0 to 7), they were assigned as // If this QR Code has any remainder bits (0 to 7), they were assigned as
// 0/false/white by the constructor and are left unchanged by this method // 0/false/light by the constructor and are left unchanged by this method
} }
} }
} }
@ -676,7 +676,7 @@ long QrCode::getPenaltyScore() const {
} }
} }
// Balance of black and white modules // Balance of black and light modules
int black = 0; int black = 0;
for (const vector<bool> &row : modules) { for (const vector<bool> &row : modules) {
for (bool color : row) { for (bool color : row) {
@ -797,7 +797,7 @@ int QrCode::finderPenaltyTerminateAndCount(bool currentRunColor, int currentRunL
finderPenaltyAddHistory(currentRunLength, runHistory); finderPenaltyAddHistory(currentRunLength, runHistory);
currentRunLength = 0; currentRunLength = 0;
} }
currentRunLength += size; // Add white border to final run currentRunLength += size; // Add light border to final run
finderPenaltyAddHistory(currentRunLength, runHistory); finderPenaltyAddHistory(currentRunLength, runHistory);
return finderPenaltyCountPatterns(runHistory); return finderPenaltyCountPatterns(runHistory);
} }
@ -805,7 +805,7 @@ int QrCode::finderPenaltyTerminateAndCount(bool currentRunColor, int currentRunL
void QrCode::finderPenaltyAddHistory(int currentRunLength, std::array<int,7> &runHistory) const { void QrCode::finderPenaltyAddHistory(int currentRunLength, std::array<int,7> &runHistory) const {
if (runHistory.at(0) == 0) if (runHistory.at(0) == 0)
currentRunLength += size; // Add white border to initial run currentRunLength += size; // Add light border to initial run
std::copy_backward(runHistory.cbegin(), runHistory.cend() - 1, runHistory.end()); std::copy_backward(runHistory.cbegin(), runHistory.cend() - 1, runHistory.end());
runHistory.at(0) = currentRunLength; runHistory.at(0) = currentRunLength;
} }

@ -220,7 +220,7 @@ class QrSegment final {
/* /*
* A QR Code symbol, which is a type of two-dimension barcode. * A QR Code symbol, which is a type of two-dimension barcode.
* Invented by Denso Wave and described in the ISO/IEC 18004 standard. * Invented by Denso Wave and described in the ISO/IEC 18004 standard.
* Instances of this class represent an immutable square grid of black and white cells. * Instances of this class represent an immutable square grid of black and light cells.
* The class provides static factory functions to create a QR Code from text or binary data. * The class provides static factory functions to create a QR Code from text or binary data.
* The class covers the QR Code Model 2 specification, supporting all versions (sizes) * The class covers the QR Code Model 2 specification, supporting all versions (sizes)
* from 1 to 40, all 4 error correction levels, and 4 character encoding modes. * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
@ -314,7 +314,7 @@ class QrCode final {
// Private grids of modules/pixels, with dimensions of size*size: // Private grids of modules/pixels, with dimensions of size*size:
// The modules of this QR Code (false = white, true = black). // The modules of this QR Code (false = light, true = black).
// Immutable after constructor finishes. Accessed through getModule(). // Immutable after constructor finishes. Accessed through getModule().
private: std::vector<std::vector<bool> > modules; private: std::vector<std::vector<bool> > modules;
@ -363,8 +363,8 @@ class QrCode final {
/* /*
* Returns the color of the module (pixel) at the given coordinates, which is false * Returns the color of the module (pixel) at the given coordinates, which is false
* for white or true for black. The top left corner has the coordinates (x=0, y=0). * for light or true for black. The top left corner has the coordinates (x=0, y=0).
* If the given coordinates are out of bounds, then false (white) is returned. * If the given coordinates are out of bounds, then false (light) is returned.
*/ */
public: bool getModule(int x, int y) const; public: bool getModule(int x, int y) const;
@ -472,7 +472,7 @@ class QrCode final {
private: static std::uint8_t reedSolomonMultiply(std::uint8_t x, std::uint8_t y); private: static std::uint8_t reedSolomonMultiply(std::uint8_t x, std::uint8_t y);
// Can only be called immediately after a white run is added, and // Can only be called immediately after a light run is added, and
// returns either 0, 1, or 2. A helper function for getPenaltyScore(). // returns either 0, 1, or 2. A helper function for getPenaltyScore().
private: int finderPenaltyCountPatterns(const std::array<int,7> &runHistory) const; private: int finderPenaltyCountPatterns(const std::array<int,7> &runHistory) const;

@ -32,7 +32,7 @@ import java.util.Objects;
/** /**
* A QR Code symbol, which is a type of two-dimension barcode. * A QR Code symbol, which is a type of two-dimension barcode.
* Invented by Denso Wave and described in the ISO/IEC 18004 standard. * Invented by Denso Wave and described in the ISO/IEC 18004 standard.
* <p>Instances of this class represent an immutable square grid of black and white cells. * <p>Instances of this class represent an immutable square grid of black and light cells.
* The class provides static factory functions to create a QR Code from text or binary data. * The class provides static factory functions to create a QR Code from text or binary data.
* The class covers the QR Code Model 2 specification, supporting all versions (sizes) * The class covers the QR Code Model 2 specification, supporting all versions (sizes)
* from 1 to 40, all 4 error correction levels, and 4 character encoding modes.</p> * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.</p>
@ -222,7 +222,7 @@ public final class QrCode {
// Private grids of modules/pixels, with dimensions of size*size: // Private grids of modules/pixels, with dimensions of size*size:
// The modules of this QR Code (false = white, true = black). // The modules of this QR Code (false = light, true = black).
// Immutable after constructor finishes. Accessed through getModule(). // Immutable after constructor finishes. Accessed through getModule().
private boolean[][] modules; private boolean[][] modules;
@ -256,7 +256,7 @@ public final class QrCode {
size = ver * 4 + 17; size = ver * 4 + 17;
errorCorrectionLevel = Objects.requireNonNull(ecl); errorCorrectionLevel = Objects.requireNonNull(ecl);
Objects.requireNonNull(dataCodewords); Objects.requireNonNull(dataCodewords);
modules = new boolean[size][size]; // Initially all white modules = new boolean[size][size]; // Initially all light
isFunction = new boolean[size][size]; isFunction = new boolean[size][size];
// Compute ECC, draw modules, do masking // Compute ECC, draw modules, do masking
@ -273,12 +273,12 @@ public final class QrCode {
/** /**
* Returns the color of the module (pixel) at the specified coordinates, which is {@code false} * Returns the color of the module (pixel) at the specified coordinates, which is {@code false}
* for white or {@code true} for black. The top left corner has the coordinates (x=0, y=0). * for light or {@code true} for black. The top left corner has the coordinates (x=0, y=0).
* If the specified coordinates are out of bounds, then {@code false} (white) is returned. * If the specified coordinates are out of bounds, then {@code false} (light) is returned.
* @param x the x coordinate, where 0 is the left edge and size&#x2212;1 is the right edge * @param x the x coordinate, where 0 is the left edge and size&#x2212;1 is the right edge
* @param y the y coordinate, where 0 is the top edge and size&#x2212;1 is the bottom edge * @param y the y coordinate, where 0 is the top edge and size&#x2212;1 is the bottom edge
* @return {@code true} if the coordinates are in bounds and the module * @return {@code true} if the coordinates are in bounds and the module
* at that location is black, or {@code false} (white) otherwise * at that location is black, or {@code false} (light) otherwise
*/ */
public boolean getModule(int x, int y) { public boolean getModule(int x, int y) {
return 0 <= x && x < size && 0 <= y && y < size && modules[y][x]; return 0 <= x && x < size && 0 <= y && y < size && modules[y][x];
@ -287,7 +287,7 @@ public final class QrCode {
/** /**
* Returns a raster image depicting this QR Code, with the specified module scale and border modules. * Returns a raster image depicting this QR Code, with the specified module scale and border modules.
* <p>For example, toImage(scale=10, border=4) means to pad the QR Code with 4 white * <p>For example, toImage(scale=10, border=4) means to pad the QR Code with 4 light
* border modules on all four sides, and use 10&#xD7;10 pixels to represent each module. * border modules on all four sides, and use 10&#xD7;10 pixels to represent each module.
* The resulting image only contains the hex colors 000000 and FFFFFF. * The resulting image only contains the hex colors 000000 and FFFFFF.
* @param scale the side length (measured in pixels, must be positive) of each module * @param scale the side length (measured in pixels, must be positive) of each module
@ -530,7 +530,7 @@ public final class QrCode {
i++; i++;
} }
// If this QR Code has any remainder bits (0 to 7), they were assigned as // If this QR Code has any remainder bits (0 to 7), they were assigned as
// 0/false/white by the constructor and are left unchanged by this method // 0/false/light by the constructor and are left unchanged by this method
} }
} }
} }
@ -651,7 +651,7 @@ public final class QrCode {
} }
} }
// Balance of black and white modules // Balance of black and light modules
int black = 0; int black = 0;
for (boolean[] row : modules) { for (boolean[] row : modules) {
for (boolean color : row) { for (boolean color : row) {
@ -786,7 +786,7 @@ public final class QrCode {
} }
// Can only be called immediately after a white run is added, and // Can only be called immediately after a light run is added, and
// returns either 0, 1, or 2. A helper function for getPenaltyScore(). // returns either 0, 1, or 2. A helper function for getPenaltyScore().
private int finderPenaltyCountPatterns(int[] runHistory) { private int finderPenaltyCountPatterns(int[] runHistory) {
int n = runHistory[1]; int n = runHistory[1];
@ -803,7 +803,7 @@ public final class QrCode {
finderPenaltyAddHistory(currentRunLength, runHistory); finderPenaltyAddHistory(currentRunLength, runHistory);
currentRunLength = 0; currentRunLength = 0;
} }
currentRunLength += size; // Add white border to final run currentRunLength += size; // Add light border to final run
finderPenaltyAddHistory(currentRunLength, runHistory); finderPenaltyAddHistory(currentRunLength, runHistory);
return finderPenaltyCountPatterns(runHistory); return finderPenaltyCountPatterns(runHistory);
} }
@ -812,7 +812,7 @@ public final class QrCode {
// Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore(). // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().
private void finderPenaltyAddHistory(int currentRunLength, int[] runHistory) { private void finderPenaltyAddHistory(int currentRunLength, int[] runHistory) {
if (runHistory[0] == 0) if (runHistory[0] == 0)
currentRunLength += size; // Add white border to initial run currentRunLength += size; // Add light border to initial run
System.arraycopy(runHistory, 0, runHistory, 1, runHistory.length - 1); System.arraycopy(runHistory, 0, runHistory, 1, runHistory.length - 1);
runHistory[0] = currentRunLength; runHistory[0] = currentRunLength;
} }

@ -32,7 +32,7 @@ from typing import Callable, Dict, List, Optional, Tuple, Union
class QrCode: class QrCode:
"""A QR Code symbol, which is a type of two-dimension barcode. """A QR Code symbol, which is a type of two-dimension barcode.
Invented by Denso Wave and described in the ISO/IEC 18004 standard. Invented by Denso Wave and described in the ISO/IEC 18004 standard.
Instances of this class represent an immutable square grid of black and white cells. Instances of this class represent an immutable square grid of black and light cells.
The class provides static factory functions to create a QR Code from text or binary data. The class provides static factory functions to create a QR Code from text or binary data.
The class covers the QR Code Model 2 specification, supporting all versions (sizes) The class covers the QR Code Model 2 specification, supporting all versions (sizes)
from 1 to 40, all 4 error correction levels, and 4 character encoding modes. from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
@ -151,7 +151,7 @@ class QrCode:
# the resulting object still has a mask value between 0 and 7. # the resulting object still has a mask value between 0 and 7.
_mask: int _mask: int
# The modules of this QR Code (False = white, True = black). # The modules of this QR Code (False = light, True = black).
# Immutable after constructor finishes. Accessed through get_module(). # Immutable after constructor finishes. Accessed through get_module().
_modules: List[List[bool]] _modules: List[List[bool]]
@ -180,7 +180,7 @@ class QrCode:
self._errcorlvl = errcorlvl self._errcorlvl = errcorlvl
# Initialize both grids to be size*size arrays of Boolean false # Initialize both grids to be size*size arrays of Boolean false
self._modules = [[False] * self._size for _ in range(self._size)] # Initially all white self._modules = [[False] * self._size for _ in range(self._size)] # Initially all light
self._isfunction = [[False] * self._size for _ in range(self._size)] self._isfunction = [[False] * self._size for _ in range(self._size)]
# Compute ECC, draw modules # Compute ECC, draw modules
@ -227,8 +227,8 @@ class QrCode:
def get_module(self, x: int, y: int) -> bool: def get_module(self, x: int, y: int) -> bool:
"""Returns the color of the module (pixel) at the given coordinates, which is False """Returns the color of the module (pixel) at the given coordinates, which is False
for white or True for black. The top left corner has the coordinates (x=0, y=0). for light or True for black. The top left corner has the coordinates (x=0, y=0).
If the given coordinates are out of bounds, then False (white) is returned.""" If the given coordinates are out of bounds, then False (light) is returned."""
return (0 <= x < self._size) and (0 <= y < self._size) and self._modules[y][x] return (0 <= x < self._size) and (0 <= y < self._size) and self._modules[y][x]
@ -416,7 +416,7 @@ class QrCode:
self._modules[y][x] = _get_bit(data[i >> 3], 7 - (i & 7)) self._modules[y][x] = _get_bit(data[i >> 3], 7 - (i & 7))
i += 1 i += 1
# If this QR Code has any remainder bits (0 to 7), they were assigned as # If this QR Code has any remainder bits (0 to 7), they were assigned as
# 0/false/white by the constructor and are left unchanged by this method # 0/false/light by the constructor and are left unchanged by this method
assert i == len(data) * 8 assert i == len(data) * 8
@ -486,7 +486,7 @@ class QrCode:
if modules[y][x] == modules[y][x + 1] == modules[y + 1][x] == modules[y + 1][x + 1]: if modules[y][x] == modules[y][x + 1] == modules[y + 1][x] == modules[y + 1][x + 1]:
result += QrCode._PENALTY_N2 result += QrCode._PENALTY_N2
# Balance of black and white modules # Balance of black and light modules
black: int = sum((1 if cell else 0) for row in modules for cell in row) black: int = sum((1 if cell else 0) for row in modules for cell in row)
total: int = size**2 # Note that size is odd, so black/total != 1/2 total: int = size**2 # Note that size is odd, so black/total != 1/2
# Compute the smallest integer k >= 0 such that (45-5k)% <= black/total <= (55+5k)% # Compute the smallest integer k >= 0 such that (45-5k)% <= black/total <= (55+5k)%
@ -591,7 +591,7 @@ class QrCode:
def _finder_penalty_count_patterns(self, runhistory: collections.deque) -> int: def _finder_penalty_count_patterns(self, runhistory: collections.deque) -> int:
"""Can only be called immediately after a white run is added, and """Can only be called immediately after a light run is added, and
returns either 0, 1, or 2. A helper function for _get_penalty_score().""" returns either 0, 1, or 2. A helper function for _get_penalty_score()."""
n: int = runhistory[1] n: int = runhistory[1]
assert n <= self._size * 3 assert n <= self._size * 3
@ -605,14 +605,14 @@ class QrCode:
if currentruncolor: # Terminate black run if currentruncolor: # Terminate black run
self._finder_penalty_add_history(currentrunlength, runhistory) self._finder_penalty_add_history(currentrunlength, runhistory)
currentrunlength = 0 currentrunlength = 0
currentrunlength += self._size # Add white border to final run currentrunlength += self._size # Add light border to final run
self._finder_penalty_add_history(currentrunlength, runhistory) self._finder_penalty_add_history(currentrunlength, runhistory)
return self._finder_penalty_count_patterns(runhistory) return self._finder_penalty_count_patterns(runhistory)
def _finder_penalty_add_history(self, currentrunlength: int, runhistory: collections.deque) -> None: def _finder_penalty_add_history(self, currentrunlength: int, runhistory: collections.deque) -> None:
if runhistory[0] == 0: if runhistory[0] == 0:
currentrunlength += self._size # Add white border to initial run currentrunlength += self._size # Add light border to initial run
runhistory.appendleft(currentrunlength) runhistory.appendleft(currentrunlength)

@ -88,7 +88,7 @@
/// ///
/// Invented by Denso Wave and described in the ISO/IEC 18004 standard. /// Invented by Denso Wave and described in the ISO/IEC 18004 standard.
/// ///
/// Instances of this struct represent an immutable square grid of black and white cells. /// Instances of this struct represent an immutable square grid of black and light cells.
/// The impl provides static factory functions to create a QR Code from text or binary data. /// The impl provides static factory functions to create a QR Code from text or binary data.
/// The struct and impl cover the QR Code Model 2 specification, supporting all versions /// The struct and impl cover the QR Code Model 2 specification, supporting all versions
/// (sizes) from 1 to 40, all 4 error correction levels, and 4 character encoding modes. /// (sizes) from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
@ -126,7 +126,7 @@ pub struct QrCode {
// Grids of modules/pixels, with dimensions of size*size: // Grids of modules/pixels, with dimensions of size*size:
// The modules of this QR Code (false = white, true = black). // The modules of this QR Code (false = light, true = black).
// Immutable after constructor finishes. Accessed through get_module(). // Immutable after constructor finishes. Accessed through get_module().
modules: Vec<bool>, modules: Vec<bool>,
@ -285,7 +285,7 @@ impl QrCode {
size: size as i32, size: size as i32,
mask: Mask::new(0), // Dummy value mask: Mask::new(0), // Dummy value
errorcorrectionlevel: ecl, errorcorrectionlevel: ecl,
modules : vec![false; size * size], // Initially all white modules : vec![false; size * size], // Initially all light
isfunction: vec![false; size * size], isfunction: vec![false; size * size],
}; };
@ -347,10 +347,10 @@ impl QrCode {
/// Returns the color of the module (pixel) at the given coordinates, /// Returns the color of the module (pixel) at the given coordinates,
/// which is `false` for white or `true` for black. /// which is `false` for light or `true` for black.
/// ///
/// The top left corner has the coordinates (x=0, y=0). If the given /// The top left corner has the coordinates (x=0, y=0). If the given
/// coordinates are out of bounds, then `false` (white) is returned. /// coordinates are out of bounds, then `false` (light) is returned.
pub fn get_module(&self, x: i32, y: i32) -> bool { pub fn get_module(&self, x: i32, y: i32) -> bool {
0 <= x && x < self.size && 0 <= y && y < self.size && self.module(x, y) 0 <= x && x < self.size && 0 <= y && y < self.size && self.module(x, y)
} }
@ -602,7 +602,7 @@ impl QrCode {
i += 1; i += 1;
} }
// If this QR Code has any remainder bits (0 to 7), they were assigned as // If this QR Code has any remainder bits (0 to 7), they were assigned as
// 0/false/white by the constructor and are left unchanged by this method // 0/false/light by the constructor and are left unchanged by this method
} }
} }
right -= 2; right -= 2;
@ -703,7 +703,7 @@ impl QrCode {
} }
} }
// Balance of black and white modules // Balance of black and light modules
let black: i32 = self.modules.iter().copied().map(i32::from).sum(); let black: i32 = self.modules.iter().copied().map(i32::from).sum();
let total: i32 = size * size; // Note that size is odd, so black/total != 1/2 let total: i32 = size * size; // Note that size is odd, so black/total != 1/2
// Compute the smallest integer k >= 0 such that (45-5k)% <= black/total <= (55+5k)% // Compute the smallest integer k >= 0 such that (45-5k)% <= black/total <= (55+5k)%
@ -846,7 +846,7 @@ impl FinderPenalty {
// Pushes the given value to the front and drops the last value. // Pushes the given value to the front and drops the last value.
pub fn add_history(&mut self, mut currentrunlength: i32) { pub fn add_history(&mut self, mut currentrunlength: i32) {
if self.run_history[0] == 0 { if self.run_history[0] == 0 {
currentrunlength += self.qr_size; // Add white border to initial run currentrunlength += self.qr_size; // Add light border to initial run
} }
let rh = &mut self.run_history; let rh = &mut self.run_history;
for i in (0 .. rh.len()-1).rev() { for i in (0 .. rh.len()-1).rev() {
@ -856,7 +856,7 @@ impl FinderPenalty {
} }
// Can only be called immediately after a white run is added, and returns either 0, 1, or 2. // Can only be called immediately after a light run is added, and returns either 0, 1, or 2.
pub fn count_patterns(&self) -> i32 { pub fn count_patterns(&self) -> i32 {
let rh = &self.run_history; let rh = &self.run_history;
let n = rh[1]; let n = rh[1];
@ -873,7 +873,7 @@ impl FinderPenalty {
self.add_history(currentrunlength); self.add_history(currentrunlength);
currentrunlength = 0; currentrunlength = 0;
} }
currentrunlength += self.qr_size; // Add white border to final run currentrunlength += self.qr_size; // Add light border to final run
self.add_history(currentrunlength); self.add_history(currentrunlength);
self.count_patterns() self.count_patterns()
} }

@ -36,7 +36,7 @@ namespace qrcodegen {
/* /*
* A QR Code symbol, which is a type of two-dimension barcode. * A QR Code symbol, which is a type of two-dimension barcode.
* Invented by Denso Wave and described in the ISO/IEC 18004 standard. * Invented by Denso Wave and described in the ISO/IEC 18004 standard.
* Instances of this class represent an immutable square grid of black and white cells. * Instances of this class represent an immutable square grid of black and light cells.
* The class provides static factory functions to create a QR Code from text or binary data. * The class provides static factory functions to create a QR Code from text or binary data.
* The class covers the QR Code Model 2 specification, supporting all versions (sizes) * The class covers the QR Code Model 2 specification, supporting all versions (sizes)
* from 1 to 40, all 4 error correction levels, and 4 character encoding modes. * from 1 to 40, all 4 error correction levels, and 4 character encoding modes.
@ -155,7 +155,7 @@ namespace qrcodegen {
// 21 and 177 (inclusive). This is equal to version * 4 + 17. // 21 and 177 (inclusive). This is equal to version * 4 + 17.
public readonly size: int; public readonly size: int;
// The modules of this QR Code (false = white, true = black). // The modules of this QR Code (false = light, true = black).
// Immutable after constructor finishes. Accessed through getModule(). // Immutable after constructor finishes. Accessed through getModule().
private readonly modules : Array<Array<boolean>> = []; private readonly modules : Array<Array<boolean>> = [];
@ -196,7 +196,7 @@ namespace qrcodegen {
for (let i = 0; i < this.size; i++) for (let i = 0; i < this.size; i++)
row.push(false); row.push(false);
for (let i = 0; i < this.size; i++) { for (let i = 0; i < this.size; i++) {
this.modules .push(row.slice()); // Initially all white this.modules .push(row.slice()); // Initially all light
this.isFunction.push(row.slice()); this.isFunction.push(row.slice());
} }
@ -232,8 +232,8 @@ namespace qrcodegen {
/*-- Accessor methods --*/ /*-- Accessor methods --*/
// Returns the color of the module (pixel) at the given coordinates, which is false // Returns the color of the module (pixel) at the given coordinates, which is false
// for white or true for black. The top left corner has the coordinates (x=0, y=0). // for light or true for black. The top left corner has the coordinates (x=0, y=0).
// If the given coordinates are out of bounds, then false (white) is returned. // If the given coordinates are out of bounds, then false (light) is returned.
public getModule(x: int, y: int): boolean { public getModule(x: int, y: int): boolean {
return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x]; return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];
} }
@ -243,7 +243,7 @@ namespace qrcodegen {
// Draws this QR Code, with the given module scale and border modules, onto the given HTML // Draws this QR Code, with the given module scale and border modules, onto the given HTML
// canvas element. The canvas's width and height is resized to (this.size + border * 2) * scale. // canvas element. The canvas's width and height is resized to (this.size + border * 2) * scale.
// The drawn image is be purely black and white, and fully opaque. // The drawn image is be purely black and light, and fully opaque.
// The scale must be a positive integer and the border must be a non-negative integer. // The scale must be a positive integer and the border must be a non-negative integer.
public drawCanvas(scale: int, border: int, canvas: HTMLCanvasElement): void { public drawCanvas(scale: int, border: int, canvas: HTMLCanvasElement): void {
if (scale <= 0 || border < 0) if (scale <= 0 || border < 0)
@ -467,7 +467,7 @@ namespace qrcodegen {
i++; i++;
} }
// If this QR Code has any remainder bits (0 to 7), they were assigned as // If this QR Code has any remainder bits (0 to 7), they were assigned as
// 0/false/white by the constructor and are left unchanged by this method // 0/false/light by the constructor and are left unchanged by this method
} }
} }
} }
@ -566,7 +566,7 @@ namespace qrcodegen {
} }
} }
// Balance of black and white modules // Balance of black and light modules
let black: int = 0; let black: int = 0;
for (const row of this.modules) for (const row of this.modules)
black = row.reduce((sum, color) => sum + (color ? 1 : 0), black); black = row.reduce((sum, color) => sum + (color ? 1 : 0), black);
@ -686,7 +686,7 @@ namespace qrcodegen {
} }
// Can only be called immediately after a white run is added, and // Can only be called immediately after a light run is added, and
// returns either 0, 1, or 2. A helper function for getPenaltyScore(). // returns either 0, 1, or 2. A helper function for getPenaltyScore().
private finderPenaltyCountPatterns(runHistory: Array<int>): int { private finderPenaltyCountPatterns(runHistory: Array<int>): int {
const n: int = runHistory[1]; const n: int = runHistory[1];
@ -704,7 +704,7 @@ namespace qrcodegen {
this.finderPenaltyAddHistory(currentRunLength, runHistory); this.finderPenaltyAddHistory(currentRunLength, runHistory);
currentRunLength = 0; currentRunLength = 0;
} }
currentRunLength += this.size; // Add white border to final run currentRunLength += this.size; // Add light border to final run
this.finderPenaltyAddHistory(currentRunLength, runHistory); this.finderPenaltyAddHistory(currentRunLength, runHistory);
return this.finderPenaltyCountPatterns(runHistory); return this.finderPenaltyCountPatterns(runHistory);
} }
@ -713,7 +713,7 @@ namespace qrcodegen {
// Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore(). // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().
private finderPenaltyAddHistory(currentRunLength: int, runHistory: Array<int>): void { private finderPenaltyAddHistory(currentRunLength: int, runHistory: Array<int>): void {
if (runHistory[0] == 0) if (runHistory[0] == 0)
currentRunLength += this.size; // Add white border to initial run currentRunLength += this.size; // Add light border to initial run
runHistory.pop(); runHistory.pop();
runHistory.unshift(currentRunLength); runHistory.unshift(currentRunLength);
} }

Loading…
Cancel
Save