summaryrefslogtreecommitdiff
path: root/xfa/fxbarcode/qrcode
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxbarcode/qrcode')
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCodeWriter.cpp122
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCodeWriter.h45
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoder.cpp145
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoder.h63
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderBitVector.cpp127
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h35
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp44
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.h28
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderECB.cpp35
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderECB.h24
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp63
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h34
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp970
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h140
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.cpp84
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h41
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp198
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.h27
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp506
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h87
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderMode.cpp174
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderMode.h53
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderVersion.cpp794
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderVersion.h57
24 files changed, 0 insertions, 3896 deletions
diff --git a/xfa/fxbarcode/qrcode/BC_QRCodeWriter.cpp b/xfa/fxbarcode/qrcode/BC_QRCodeWriter.cpp
deleted file mode 100644
index 8a6499cbb7..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCodeWriter.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2008 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/BC_TwoDimWriter.h"
-#include "xfa/fxbarcode/common/BC_CommonByteMatrix.h"
-#include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCodeWriter.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoder.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMode.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderVersion.h"
-
-CBC_QRCodeWriter::CBC_QRCodeWriter() {
- m_bFixedSize = true;
- m_iCorrectLevel = 1;
- m_iVersion = 0;
-}
-
-CBC_QRCodeWriter::~CBC_QRCodeWriter() {}
-
-void CBC_QRCodeWriter::ReleaseAll() {
- delete CBC_ReedSolomonGF256::QRCodeField;
- CBC_ReedSolomonGF256::QRCodeField = nullptr;
- delete CBC_ReedSolomonGF256::DataMatrixField;
- CBC_ReedSolomonGF256::DataMatrixField = nullptr;
- CBC_QRCoderMode::Destroy();
- CBC_QRCoderErrorCorrectionLevel::Destroy();
- CBC_QRCoderVersion::Destroy();
-}
-
-bool CBC_QRCodeWriter::SetVersion(int32_t version) {
- if (version < 0 || version > 40) {
- return false;
- }
- m_iVersion = version;
- return true;
-}
-
-bool CBC_QRCodeWriter::SetErrorCorrectionLevel(int32_t level) {
- if (level < 0 || level > 3) {
- return false;
- }
- m_iCorrectLevel = level;
- return true;
-}
-
-uint8_t* CBC_QRCodeWriter::Encode(const CFX_WideString& contents,
- int32_t ecLevel,
- int32_t& outWidth,
- int32_t& outHeight,
- int32_t& e) {
- CBC_QRCoderErrorCorrectionLevel* ec = nullptr;
- switch (ecLevel) {
- case 0:
- ec = CBC_QRCoderErrorCorrectionLevel::L;
- break;
- case 1:
- ec = CBC_QRCoderErrorCorrectionLevel::M;
- break;
- case 2:
- ec = CBC_QRCoderErrorCorrectionLevel::Q;
- break;
- case 3:
- ec = CBC_QRCoderErrorCorrectionLevel::H;
- break;
- default: {
- e = BCExceptionUnSupportEclevel;
- return nullptr;
- }
- }
- CBC_QRCoder qr;
- if (m_iVersion > 0 && m_iVersion < 41) {
- CFX_ByteString byteStr = contents.UTF8Encode();
- CBC_QRCoderEncoder::Encode(byteStr, ec, &qr, e, m_iVersion);
- } else {
- CBC_QRCoderEncoder::Encode(contents, ec, &qr, e);
- }
- if (e != BCExceptionNO)
- return nullptr;
- outWidth = qr.GetMatrixWidth();
- outHeight = qr.GetMatrixWidth();
- uint8_t* result = FX_Alloc2D(uint8_t, outWidth, outHeight);
- FXSYS_memcpy(result, qr.GetMatrix()->GetArray(), outWidth * outHeight);
- return result;
-}
-
-uint8_t* CBC_QRCodeWriter::Encode(const CFX_ByteString& contents,
- BCFORMAT format,
- int32_t& outWidth,
- int32_t& outHeight,
- int32_t hints,
- int32_t& e) {
- return nullptr;
-}
-
-uint8_t* CBC_QRCodeWriter::Encode(const CFX_ByteString& contents,
- BCFORMAT format,
- int32_t& outWidth,
- int32_t& outHeight,
- int32_t& e) {
- return nullptr;
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCodeWriter.h b/xfa/fxbarcode/qrcode/BC_QRCodeWriter.h
deleted file mode 100644
index 5585fa55c1..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCodeWriter.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODEWRITER_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODEWRITER_H_
-
-#include "xfa/fxbarcode/BC_TwoDimWriter.h"
-
-class CBC_TwoDimWriter;
-class CBC_QRCodeWriter : public CBC_TwoDimWriter {
- public:
- CBC_QRCodeWriter();
- ~CBC_QRCodeWriter() override;
-
- uint8_t* Encode(const CFX_WideString& contents,
- int32_t ecLevel,
- int32_t& outWidth,
- int32_t& outHeight,
- int32_t& e);
- uint8_t* Encode(const CFX_ByteString& contents,
- BCFORMAT format,
- int32_t& outWidth,
- int32_t& outHeight,
- int32_t hints,
- int32_t& e);
- uint8_t* Encode(const CFX_ByteString& contents,
- BCFORMAT format,
- int32_t& outWidth,
- int32_t& outHeight,
- int32_t& e);
- bool SetVersion(int32_t version);
-
- // CBC_TwoDimWriter
- bool SetErrorCorrectionLevel(int32_t level) override;
-
- static void ReleaseAll();
-
- private:
- int32_t m_iVersion;
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODEWRITER_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoder.cpp b/xfa/fxbarcode/qrcode/BC_QRCoder.cpp
deleted file mode 100644
index a5c849780d..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoder.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2008 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <utility>
-
-#include "xfa/fxbarcode/common/BC_CommonByteMatrix.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoder.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMode.h"
-#include "xfa/fxbarcode/utils.h"
-
-CBC_QRCoder::CBC_QRCoder()
- : m_mode(nullptr),
- m_ecLevel(nullptr),
- m_version(-1),
- m_matrixWidth(-1),
- m_maskPattern(-1),
- m_numTotalBytes(-1),
- m_numDataBytes(-1),
- m_numECBytes(-1),
- m_numRSBlocks(-1) {}
-
-CBC_QRCoder::~CBC_QRCoder() {}
-
-CBC_QRCoderMode* CBC_QRCoder::GetMode() const {
- return m_mode;
-}
-
-CBC_QRCoderErrorCorrectionLevel* CBC_QRCoder::GetECLevel() const {
- return m_ecLevel;
-}
-
-int32_t CBC_QRCoder::GetVersion() const {
- return m_version;
-}
-
-int32_t CBC_QRCoder::GetMatrixWidth() const {
- return m_matrixWidth;
-}
-
-int32_t CBC_QRCoder::GetMaskPattern() const {
- return m_maskPattern;
-}
-
-int32_t CBC_QRCoder::GetNumTotalBytes() const {
- return m_numTotalBytes;
-}
-
-int32_t CBC_QRCoder::GetNumDataBytes() const {
- return m_numDataBytes;
-}
-
-int32_t CBC_QRCoder::GetNumECBytes() const {
- return m_numECBytes;
-}
-
-int32_t CBC_QRCoder::GetNumRSBlocks() const {
- return m_numRSBlocks;
-}
-
-CBC_CommonByteMatrix* CBC_QRCoder::GetMatrix() const {
- return m_matrix.get();
-}
-
-int32_t CBC_QRCoder::At(int32_t x, int32_t y, int32_t& e) {
- int32_t value = m_matrix->Get(x, y);
- if (!(value == 0 || value == 1)) {
- e = BCExceptionValueMustBeEither0or1;
- return 0;
- }
- return value;
-}
-
-bool CBC_QRCoder::IsValid() {
- return m_mode && m_ecLevel && m_version != -1 && m_matrixWidth != -1 &&
- m_maskPattern != -1 && m_numTotalBytes != -1 && m_numDataBytes != -1 &&
- m_numECBytes != -1 && m_numRSBlocks != -1 &&
- IsValidMaskPattern(m_maskPattern) &&
- m_numTotalBytes == m_numDataBytes + m_numECBytes && m_matrix &&
- m_matrixWidth == m_matrix->GetWidth() &&
- m_matrix->GetWidth() == m_matrix->GetHeight();
-}
-
-void CBC_QRCoder::SetMode(CBC_QRCoderMode* value) {
- m_mode = value;
-}
-
-void CBC_QRCoder::SetECLevel(CBC_QRCoderErrorCorrectionLevel* ecLevel) {
- m_ecLevel = ecLevel;
-}
-
-void CBC_QRCoder::SetVersion(int32_t version) {
- m_version = version;
-}
-
-void CBC_QRCoder::SetMatrixWidth(int32_t width) {
- m_matrixWidth = width;
-}
-
-void CBC_QRCoder::SetMaskPattern(int32_t pattern) {
- m_maskPattern = pattern;
-}
-
-void CBC_QRCoder::SetNumDataBytes(int32_t bytes) {
- m_numDataBytes = bytes;
-}
-
-void CBC_QRCoder::SetNumTotalBytes(int32_t value) {
- m_numTotalBytes = value;
-}
-
-void CBC_QRCoder::SetNumRSBlocks(int32_t block) {
- m_numRSBlocks = block;
-}
-
-void CBC_QRCoder::SetNumECBytes(int32_t value) {
- m_numECBytes = value;
-}
-
-bool CBC_QRCoder::IsValidMaskPattern(int32_t maskPattern) {
- return maskPattern >= 0 && maskPattern < kNumMaskPatterns;
-}
-
-void CBC_QRCoder::SetMatrix(std::unique_ptr<CBC_CommonByteMatrix> pMatrix) {
- m_matrix = std::move(pMatrix);
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoder.h b/xfa/fxbarcode/qrcode/BC_QRCoder.h
deleted file mode 100644
index 5e949920a7..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoder.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODER_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODER_H_
-
-#include <memory>
-
-class CBC_QRCoderErrorCorrectionLevel;
-class CBC_QRCoderMode;
-class CBC_CommonByteMatrix;
-
-class CBC_QRCoder {
- public:
- static constexpr int32_t kNumMaskPatterns = 8;
-
- CBC_QRCoder();
- virtual ~CBC_QRCoder();
-
- static bool IsValidMaskPattern(int32_t maskPattern);
-
- CBC_QRCoderMode* GetMode() const;
- CBC_QRCoderErrorCorrectionLevel* GetECLevel() const;
- int32_t GetVersion() const;
- int32_t GetMatrixWidth() const;
- int32_t GetMaskPattern() const;
- int32_t GetNumTotalBytes() const;
- int32_t GetNumDataBytes() const;
- int32_t GetNumECBytes() const;
- int32_t GetNumRSBlocks() const;
- CBC_CommonByteMatrix* GetMatrix() const;
-
- int32_t At(int32_t x, int32_t y, int32_t& e);
- bool IsValid();
-
- void SetMode(CBC_QRCoderMode* value);
- void SetECLevel(CBC_QRCoderErrorCorrectionLevel* ecLevel);
- void SetVersion(int32_t version);
- void SetMatrixWidth(int32_t width);
- void SetMaskPattern(int32_t pattern);
- void SetNumDataBytes(int32_t bytes);
- void SetNumTotalBytes(int32_t value);
- void SetNumECBytes(int32_t value);
- void SetNumRSBlocks(int32_t block);
- void SetMatrix(std::unique_ptr<CBC_CommonByteMatrix> pMatrix);
-
- private:
- CBC_QRCoderMode* m_mode;
- CBC_QRCoderErrorCorrectionLevel* m_ecLevel;
- int32_t m_version;
- int32_t m_matrixWidth;
- int32_t m_maskPattern;
- int32_t m_numTotalBytes;
- int32_t m_numDataBytes;
- int32_t m_numECBytes;
- int32_t m_numRSBlocks;
- std::unique_ptr<CBC_CommonByteMatrix> m_matrix;
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODER_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderBitVector.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderBitVector.cpp
deleted file mode 100644
index e4140a87a0..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderBitVector.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2007 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "core/fxcrt/fx_memory.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h"
-#include "xfa/fxbarcode/utils.h"
-
-CBC_QRCoderBitVector::CBC_QRCoderBitVector() {
- m_sizeInBits = 0;
- m_size = 32;
-}
-void CBC_QRCoderBitVector::Init() {
- m_array = FX_Alloc(uint8_t, m_size);
-}
-CBC_QRCoderBitVector::~CBC_QRCoderBitVector() {
- FX_Free(m_array);
-}
-void CBC_QRCoderBitVector::Clear() {
- FX_Free(m_array);
- m_sizeInBits = 0;
- m_size = 32;
- m_array = FX_Alloc(uint8_t, m_size);
-}
-int32_t CBC_QRCoderBitVector::At(int32_t index, int32_t& e) {
- if (index < 0 || index >= m_sizeInBits) {
- e = BCExceptionBadIndexException;
- return 0;
- }
- int32_t value = m_array[index >> 3] & 0xff;
- return (value >> (7 - (index & 0x7))) & 1;
-}
-int32_t CBC_QRCoderBitVector::sizeInBytes() {
- return (m_sizeInBits + 7) >> 3;
-}
-int32_t CBC_QRCoderBitVector::Size() {
- return m_sizeInBits;
-}
-void CBC_QRCoderBitVector::AppendBit(int32_t bit, int32_t& e) {
- if (!(bit == 0 || bit == 1)) {
- e = BCExceptionBadValueException;
- return;
- }
- int32_t numBitsInLastByte = m_sizeInBits & 0x7;
- if (numBitsInLastByte == 0) {
- AppendByte(0);
- m_sizeInBits -= 8;
- }
- m_array[m_sizeInBits >> 3] |= (bit << (7 - numBitsInLastByte));
- ++m_sizeInBits;
-}
-void CBC_QRCoderBitVector::AppendBits(int32_t value,
- int32_t numBits,
- int32_t& e) {
- if (numBits < 0 || numBits > 32) {
- e = BCExceptionBadNumBitsException;
- return;
- }
- int32_t numBitsLeft = numBits;
- while (numBitsLeft > 0) {
- if ((m_sizeInBits & 0x7) == 0 && numBitsLeft >= 8) {
- int32_t newByte = (value >> (numBitsLeft - 8)) & 0xff;
- AppendByte(newByte);
- numBitsLeft -= 8;
- } else {
- int32_t bit = (value >> (numBitsLeft - 1)) & 1;
- AppendBit(bit, e);
- if (e != BCExceptionNO)
- return;
- --numBitsLeft;
- }
- }
-}
-void CBC_QRCoderBitVector::AppendBitVector(CBC_QRCoderBitVector* bits,
- int32_t& e) {
- int32_t size = bits->Size();
- for (int32_t i = 0; i < size; i++) {
- int32_t num = bits->At(i, e);
- if (e != BCExceptionNO)
- return;
- AppendBit(num, e);
- if (e != BCExceptionNO)
- return;
- }
-}
-void CBC_QRCoderBitVector::XOR(CBC_QRCoderBitVector* other, int32_t& e) {
- if (m_sizeInBits != other->Size()) {
- e = BCExceptioncanNotOperatexorOperator;
- return;
- }
- int32_t sizeInBytes = (m_sizeInBits + 7) >> 3;
- for (int32_t i = 0; i < sizeInBytes; ++i) {
- m_array[i] ^= (other->GetArray())[i];
- }
-}
-uint8_t* CBC_QRCoderBitVector::GetArray() {
- return m_array;
-}
-void CBC_QRCoderBitVector::AppendByte(int32_t value) {
- if ((m_sizeInBits >> 3) == m_size) {
- uint8_t* newArray = FX_Alloc(uint8_t, m_size << 1);
- FXSYS_memcpy(newArray, m_array, m_size);
- FX_Free(m_array);
- m_array = newArray;
- m_size = m_size << 1;
- }
- m_array[m_sizeInBits >> 3] = (uint8_t)value;
- m_sizeInBits += 8;
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h b/xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h
deleted file mode 100644
index 7742541a06..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERBITVECTOR_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERBITVECTOR_H_
-
-#include <stdint.h>
-
-class CBC_QRCoderBitVector {
- private:
- int32_t m_sizeInBits;
- uint8_t* m_array;
- int32_t m_size;
-
- void AppendByte(int32_t value);
-
- public:
- CBC_QRCoderBitVector();
- virtual ~CBC_QRCoderBitVector();
- int32_t At(int32_t index, int32_t& e);
- int32_t Size();
- int32_t sizeInBytes();
- void AppendBit(int32_t bit, int32_t& e);
- void AppendBits(int32_t value, int32_t numBits, int32_t& e);
- void AppendBitVector(CBC_QRCoderBitVector* bits, int32_t& e);
- void XOR(CBC_QRCoderBitVector* other, int32_t& e);
- uint8_t* GetArray();
- void Clear();
- virtual void Init();
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERBITVECTOR_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp
deleted file mode 100644
index 8dc73c4be4..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2008 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.h"
-
-#include <utility>
-
-#include "xfa/fxbarcode/common/BC_CommonByteArray.h"
-
-CBC_QRCoderBlockPair::CBC_QRCoderBlockPair(
- std::unique_ptr<CBC_CommonByteArray> data,
- std::unique_ptr<CBC_CommonByteArray> errorCorrection)
- : m_dataBytes(std::move(data)),
- m_errorCorrectionBytes(std::move(errorCorrection)) {}
-
-CBC_QRCoderBlockPair::~CBC_QRCoderBlockPair() {}
-
-const CBC_CommonByteArray* CBC_QRCoderBlockPair::GetDataBytes() const {
- return m_dataBytes.get();
-}
-
-const CBC_CommonByteArray* CBC_QRCoderBlockPair::GetErrorCorrectionBytes()
- const {
- return m_errorCorrectionBytes.get();
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.h b/xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.h
deleted file mode 100644
index 4259d6badd..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERBLOCKPAIR_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERBLOCKPAIR_H_
-
-#include <memory>
-
-class CBC_CommonByteArray;
-
-class CBC_QRCoderBlockPair {
- public:
- CBC_QRCoderBlockPair(std::unique_ptr<CBC_CommonByteArray> data,
- std::unique_ptr<CBC_CommonByteArray> errorCorrection);
- virtual ~CBC_QRCoderBlockPair();
-
- const CBC_CommonByteArray* GetDataBytes() const;
- const CBC_CommonByteArray* GetErrorCorrectionBytes() const;
-
- private:
- std::unique_ptr<CBC_CommonByteArray> m_dataBytes;
- std::unique_ptr<CBC_CommonByteArray> m_errorCorrectionBytes;
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERBLOCKPAIR_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderECB.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderECB.cpp
deleted file mode 100644
index 2b5a2a6fef..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderECB.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2007 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/qrcode/BC_QRCoderECB.h"
-
-CBC_QRCoderECB::CBC_QRCoderECB(int32_t count, int32_t dataCodeWords) {
- m_dataCodeWords = dataCodeWords;
- m_count = count;
-}
-CBC_QRCoderECB::~CBC_QRCoderECB() {}
-int32_t CBC_QRCoderECB::GetCount() {
- return m_count;
-}
-int32_t CBC_QRCoderECB::GetDataCodeWords() {
- return m_dataCodeWords;
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderECB.h b/xfa/fxbarcode/qrcode/BC_QRCoderECB.h
deleted file mode 100644
index 25b0b20fe3..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderECB.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERECB_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERECB_H_
-
-#include <stdint.h>
-
-class CBC_QRCoderECB {
- private:
- int32_t m_count;
- int32_t m_dataCodeWords;
-
- public:
- CBC_QRCoderECB(int32_t count, int32_t dataCodeWords);
- virtual ~CBC_QRCoderECB();
- int32_t GetCount();
- int32_t GetDataCodeWords();
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERECB_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp
deleted file mode 100644
index 8894695e95..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2007 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/qrcode/BC_QRCoderECB.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h"
-
-CBC_QRCoderECBlocks::CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock,
- CBC_QRCoderECB* ecBlocks)
- : m_ecCodeWordsPerBlock(ecCodeWordsPerBlock) {
- m_ecBlocksArray.push_back(ecBlocks);
-}
-
-CBC_QRCoderECBlocks::CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock,
- CBC_QRCoderECB* ecBlocks1,
- CBC_QRCoderECB* ecBlocks2)
- : m_ecCodeWordsPerBlock(ecCodeWordsPerBlock) {
- m_ecBlocksArray.push_back(ecBlocks1);
- m_ecBlocksArray.push_back(ecBlocks2);
-}
-
-CBC_QRCoderECBlocks::~CBC_QRCoderECBlocks() {
- for (size_t i = 0; i < m_ecBlocksArray.size(); i++)
- delete m_ecBlocksArray[i];
-}
-
-int32_t CBC_QRCoderECBlocks::GetECCodeWordsPerBlock() const {
- return m_ecCodeWordsPerBlock;
-}
-
-int32_t CBC_QRCoderECBlocks::GetNumBlocks() const {
- int32_t total = 0;
- for (size_t i = 0; i < m_ecBlocksArray.size(); i++)
- total += m_ecBlocksArray[i]->GetCount();
-
- return total;
-}
-
-int32_t CBC_QRCoderECBlocks::GetTotalECCodeWords() const {
- return m_ecCodeWordsPerBlock * GetNumBlocks();
-}
-
-std::vector<CBC_QRCoderECB*>* CBC_QRCoderECBlocks::GetECBlocks() {
- return &m_ecBlocksArray;
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h b/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h
deleted file mode 100644
index 816a983ce5..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_
-
-#include <vector>
-
-#include "core/fxcrt/fx_basic.h"
-
-class CBC_QRCoderECB;
-
-class CBC_QRCoderECBlocks {
- public:
- CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock, CBC_QRCoderECB* ecBlocks);
- CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock,
- CBC_QRCoderECB* ecBlocks1,
- CBC_QRCoderECB* ecBlocks2);
- ~CBC_QRCoderECBlocks();
-
- int32_t GetECCodeWordsPerBlock() const;
- int32_t GetNumBlocks() const;
- int32_t GetTotalECCodeWords() const;
- std::vector<CBC_QRCoderECB*>* GetECBlocks();
-
- private:
- int32_t m_ecCodeWordsPerBlock;
- std::vector<CBC_QRCoderECB*> m_ecBlocksArray;
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
deleted file mode 100644
index 2534675877..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
+++ /dev/null
@@ -1,970 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2008 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h"
-
-#include <algorithm>
-#include <memory>
-#include <utility>
-
-#include "xfa/fxbarcode/BC_UtilCodingConvert.h"
-#include "xfa/fxbarcode/common/BC_CommonByteArray.h"
-#include "xfa/fxbarcode/common/BC_CommonByteMatrix.h"
-#include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.h"
-#include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoder.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderBlockPair.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMode.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderVersion.h"
-
-namespace {
-
-const int8_t g_alphaNumericTable[] = {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1,
- -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1};
-
-} // namespace
-
-CBC_QRCoderEncoder::CBC_QRCoderEncoder() {}
-
-CBC_QRCoderEncoder::~CBC_QRCoderEncoder() {}
-
-void CBC_QRCoderEncoder::Encode(const CFX_ByteString& content,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoder* qrCode,
- int32_t& e,
- int32_t versionSpecify) {
- if (versionSpecify == 0) {
- EncodeWithAutoVersion(content, ecLevel, qrCode, e);
- if (e != BCExceptionNO)
- return;
- } else if (versionSpecify > 0 && versionSpecify <= 40) {
- EncodeWithSpecifyVersion(content, ecLevel, qrCode, versionSpecify, e);
- if (e != BCExceptionNO)
- return;
- } else {
- e = BCExceptionVersionMust1_40;
- if (e != BCExceptionNO)
- return;
- }
-}
-
-void CBC_QRCoderEncoder::AppendECI(CBC_QRCoderBitVector* bits) {}
-
-void CBC_QRCoderEncoder::AppendDataModeLenghInfo(
- const std::vector<std::pair<CBC_QRCoderMode*, CFX_ByteString>>&
- splitResults,
- CBC_QRCoderBitVector& headerAndDataBits,
- CBC_QRCoderMode* tempMode,
- CBC_QRCoder* qrCode,
- CFX_ByteString& encoding,
- int32_t& e) {
- for (const auto& splitResult : splitResults) {
- tempMode = splitResult.first;
- if (tempMode == CBC_QRCoderMode::sGBK) {
- AppendModeInfo(tempMode, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- AppendLengthInfo(splitResult.second.GetLength(), qrCode->GetVersion(),
- tempMode, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- AppendBytes(splitResult.second, tempMode, &headerAndDataBits, encoding,
- e);
- if (e != BCExceptionNO)
- return;
- } else if (tempMode == CBC_QRCoderMode::sBYTE) {
- std::vector<uint8_t> bytes;
- CBC_UtilCodingConvert::LocaleToUtf8(splitResult.second, bytes);
- AppendModeInfo(tempMode, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- AppendLengthInfo(bytes.size(), qrCode->GetVersion(), tempMode,
- &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- Append8BitBytes(bytes, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- } else if (tempMode == CBC_QRCoderMode::sALPHANUMERIC) {
- AppendModeInfo(tempMode, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- AppendLengthInfo(splitResult.second.GetLength(), qrCode->GetVersion(),
- tempMode, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- AppendBytes(splitResult.second, tempMode, &headerAndDataBits, encoding,
- e);
- if (e != BCExceptionNO)
- return;
- } else if (tempMode == CBC_QRCoderMode::sNUMERIC) {
- AppendModeInfo(tempMode, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- AppendLengthInfo(splitResult.second.GetLength(), qrCode->GetVersion(),
- tempMode, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- AppendBytes(splitResult.second, tempMode, &headerAndDataBits, encoding,
- e);
- if (e != BCExceptionNO)
- return;
- } else {
- e = BCExceptionUnknown;
- return;
- }
- }
-}
-
-void CBC_QRCoderEncoder::SplitString(
- const CFX_ByteString& content,
- std::vector<std::pair<CBC_QRCoderMode*, CFX_ByteString>>* result) {
- int32_t index = 0, flag = 0;
- while (
- (((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) ||
- ((uint8_t)content[index] >= 0xB0 && (uint8_t)content[index] <= 0xFA)) &&
- (index < content.GetLength())) {
- index += 2;
- }
- if (index != flag) {
- result->push_back({CBC_QRCoderMode::sGBK, content.Mid(flag, index - flag)});
- }
- flag = index;
- if (index >= content.GetLength()) {
- return;
- }
- while (
- GetAlphaNumericCode((uint8_t)content[index]) == -1 &&
- !(((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) ||
- ((uint8_t)content[index] >= 0xB0 && (uint8_t)content[index] <= 0xFA)) &&
- (index < content.GetLength())) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- if (IsDBCSLeadByte((uint8_t)content[index]))
-#else
- if ((uint8_t)content[index] > 127)
-#endif
- {
- index += 2;
- } else {
- index++;
- }
- }
- if (index != flag) {
- result->push_back(
- {CBC_QRCoderMode::sBYTE, content.Mid(flag, index - flag)});
- }
- flag = index;
- if (index >= content.GetLength()) {
- return;
- }
- while (FXSYS_Isdigit((uint8_t)content[index]) &&
- (index < content.GetLength())) {
- index++;
- }
- if (index != flag) {
- result->push_back(
- {CBC_QRCoderMode::sNUMERIC, content.Mid(flag, index - flag)});
- }
- flag = index;
- if (index >= content.GetLength()) {
- return;
- }
- while (GetAlphaNumericCode((uint8_t)content[index]) != -1 &&
- (index < content.GetLength())) {
- index++;
- }
- if (index != flag) {
- result->push_back(
- {CBC_QRCoderMode::sALPHANUMERIC, content.Mid(flag, index - flag)});
- }
- flag = index;
- if (index < content.GetLength())
- SplitString(content.Mid(index, content.GetLength() - index), result);
-}
-
-int32_t CBC_QRCoderEncoder::GetSpanByVersion(CBC_QRCoderMode* modeFirst,
- CBC_QRCoderMode* modeSecond,
- int32_t versionNum,
- int32_t& e) {
- if (versionNum == 0)
- return 0;
-
- if (modeFirst == CBC_QRCoderMode::sALPHANUMERIC &&
- modeSecond == CBC_QRCoderMode::sBYTE) {
- if (versionNum >= 1 && versionNum <= 9)
- return 11;
- if (versionNum >= 10 && versionNum <= 26)
- return 15;
- if (versionNum >= 27 && versionNum <= 40)
- return 16;
- e = BCExceptionNoSuchVersion;
- return 0;
- }
- if (modeSecond == CBC_QRCoderMode::sALPHANUMERIC &&
- modeFirst == CBC_QRCoderMode::sNUMERIC) {
- if (versionNum >= 1 && versionNum <= 9)
- return 13;
- if (versionNum >= 10 && versionNum <= 26)
- return 15;
- if (versionNum >= 27 && versionNum <= 40)
- return 17;
- e = BCExceptionNoSuchVersion;
- return 0;
- }
- if (modeSecond == CBC_QRCoderMode::sBYTE &&
- modeFirst == CBC_QRCoderMode::sNUMERIC) {
- if (versionNum >= 1 && versionNum <= 9)
- return 6;
- if (versionNum >= 10 && versionNum <= 26)
- return 8;
- if (versionNum >= 27 && versionNum <= 40)
- return 9;
- e = BCExceptionNoSuchVersion;
- return 0;
- }
- return -1;
-}
-
-void CBC_QRCoderEncoder::MergeString(
- std::vector<std::pair<CBC_QRCoderMode*, CFX_ByteString>>* result,
- int32_t versionNum,
- int32_t& e) {
- size_t mergeNum = 0;
- for (size_t i = 0; i + 1 < result->size(); i++) {
- auto* element1 = &(*result)[i];
- auto* element2 = &(*result)[i + 1];
- if (element1->first == CBC_QRCoderMode::sALPHANUMERIC) {
- int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sALPHANUMERIC,
- CBC_QRCoderMode::sBYTE, versionNum, e);
- if (e != BCExceptionNO)
- return;
- if (element2->first == CBC_QRCoderMode::sBYTE &&
- element1->second.GetLength() < tmp) {
- element2->second = element1->second + element2->second;
- result->erase(result->begin() + i);
- i--;
- mergeNum++;
- }
- } else if (element1->first == CBC_QRCoderMode::sBYTE) {
- if (element2->first == CBC_QRCoderMode::sBYTE) {
- element1->second += element2->second;
- result->erase(result->begin() + i + 1);
- i--;
- mergeNum++;
- }
- } else if (element1->first == CBC_QRCoderMode::sNUMERIC) {
- int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sNUMERIC,
- CBC_QRCoderMode::sBYTE, versionNum, e);
- if (e != BCExceptionNO)
- return;
- if (element2->first == CBC_QRCoderMode::sBYTE &&
- element1->second.GetLength() < tmp) {
- element2->second = element1->second + element2->second;
- result->erase(result->begin() + i);
- i--;
- mergeNum++;
- }
- tmp = GetSpanByVersion(CBC_QRCoderMode::sNUMERIC,
- CBC_QRCoderMode::sALPHANUMERIC, versionNum, e);
- if (e != BCExceptionNO)
- return;
- if (element2->first == CBC_QRCoderMode::sALPHANUMERIC &&
- element1->second.GetLength() < tmp) {
- element2->second = element1->second + element2->second;
- result->erase(result->begin() + i);
- i--;
- mergeNum++;
- }
- }
- }
- if (mergeNum == 0) {
- return;
- }
- MergeString(result, versionNum, e);
- if (e != BCExceptionNO)
- return;
-}
-
-void CBC_QRCoderEncoder::InitQRCode(int32_t numInputBytes,
- int32_t versionNumber,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoderMode* mode,
- CBC_QRCoder* qrCode,
- int32_t& e) {
- qrCode->SetECLevel(ecLevel);
- qrCode->SetMode(mode);
- CBC_QRCoderVersion* version =
- CBC_QRCoderVersion::GetVersionForNumber(versionNumber, e);
- if (e != BCExceptionNO)
- return;
- int32_t numBytes = version->GetTotalCodeWords();
- CBC_QRCoderECBlocks* ecBlocks = version->GetECBlocksForLevel(ecLevel);
- int32_t numEcBytes = ecBlocks->GetTotalECCodeWords();
- int32_t numRSBlocks = ecBlocks->GetNumBlocks();
- int32_t numDataBytes = numBytes - numEcBytes;
- if (numDataBytes < numInputBytes + 3) {
- e = BCExceptionCannotFindBlockInfo;
- return;
- }
- qrCode->SetVersion(versionNumber);
- qrCode->SetNumTotalBytes(numBytes);
- qrCode->SetNumDataBytes(numDataBytes);
- qrCode->SetNumRSBlocks(numRSBlocks);
- qrCode->SetNumECBytes(numEcBytes);
- qrCode->SetMatrixWidth(version->GetDimensionForVersion());
-}
-
-void CBC_QRCoderEncoder::EncodeWithSpecifyVersion(
- const CFX_ByteString& content,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoder* qrCode,
- int32_t versionSpecify,
- int32_t& e) {
- CFX_ByteString encoding = "utf8";
- CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE;
- std::vector<std::pair<CBC_QRCoderMode*, CFX_ByteString>> splitResult;
- CBC_QRCoderBitVector dataBits;
- dataBits.Init();
- SplitString(content, &splitResult);
- MergeString(&splitResult, versionSpecify, e);
- if (e != BCExceptionNO)
- return;
- CBC_QRCoderMode* tempMode = nullptr;
- for (const auto& result : splitResult) {
- AppendBytes(result.second, result.first, &dataBits, encoding, e);
- if (e != BCExceptionNO)
- return;
- }
- int32_t numInputBytes = dataBits.sizeInBytes();
- CBC_QRCoderBitVector headerAndDataBits;
- headerAndDataBits.Init();
- InitQRCode(numInputBytes, versionSpecify, ecLevel, mode, qrCode, e);
- if (e != BCExceptionNO)
- return;
-
- AppendDataModeLenghInfo(splitResult, headerAndDataBits, tempMode, qrCode,
- encoding, e);
- if (e != BCExceptionNO)
- return;
-
- numInputBytes = headerAndDataBits.sizeInBytes();
- TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
-
- CBC_QRCoderBitVector finalBits;
- finalBits.Init();
- InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(),
- qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(),
- &finalBits, e);
- if (e != BCExceptionNO)
- return;
-
- std::unique_ptr<CBC_CommonByteMatrix> matrix(new CBC_CommonByteMatrix(
- qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth()));
- matrix->Init();
- int32_t maskPattern = ChooseMaskPattern(
- &finalBits, qrCode->GetECLevel(), qrCode->GetVersion(), matrix.get(), e);
- if (e != BCExceptionNO)
- return;
-
- qrCode->SetMaskPattern(maskPattern);
- CBC_QRCoderMatrixUtil::BuildMatrix(&finalBits, qrCode->GetECLevel(),
- qrCode->GetVersion(),
- qrCode->GetMaskPattern(), matrix.get(), e);
- if (e != BCExceptionNO)
- return;
-
- qrCode->SetMatrix(std::move(matrix));
- if (!qrCode->IsValid())
- e = BCExceptionInvalidQRCode;
-}
-
-void CBC_QRCoderEncoder::EncodeWithAutoVersion(
- const CFX_ByteString& content,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoder* qrCode,
- int32_t& e) {
- CFX_ByteString encoding = "utf8";
- CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE;
- std::vector<std::pair<CBC_QRCoderMode*, CFX_ByteString>> splitResult;
- CBC_QRCoderBitVector dataBits;
- dataBits.Init();
- SplitString(content, &splitResult);
- MergeString(&splitResult, 8, e);
- if (e != BCExceptionNO)
- return;
- CBC_QRCoderMode* tempMode = nullptr;
- for (const auto& result : splitResult) {
- AppendBytes(result.second, result.first, &dataBits, encoding, e);
- if (e != BCExceptionNO)
- return;
- }
- int32_t numInputBytes = dataBits.sizeInBytes();
- InitQRCode(numInputBytes, ecLevel, mode, qrCode, e);
- if (e != BCExceptionNO)
- return;
- CBC_QRCoderBitVector headerAndDataBits;
- headerAndDataBits.Init();
- tempMode = nullptr;
- int32_t versionNum = qrCode->GetVersion();
-sign:
- AppendDataModeLenghInfo(splitResult, headerAndDataBits, tempMode, qrCode,
- encoding, e);
- if (e != BCExceptionNO) {
- goto catchException;
- }
- numInputBytes = headerAndDataBits.sizeInBytes();
- TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e);
- if (e != BCExceptionNO) {
- goto catchException;
- }
-catchException:
- if (e != BCExceptionNO) {
- int32_t e1 = BCExceptionNO;
- InitQRCode(numInputBytes, ecLevel, mode, qrCode, e1);
- if (e1 != BCExceptionNO) {
- e = e1;
- return;
- }
- versionNum++;
- if (versionNum <= 40) {
- headerAndDataBits.Clear();
- e = BCExceptionNO;
- goto sign;
- } else {
- return;
- }
- }
-
- CBC_QRCoderBitVector finalBits;
- finalBits.Init();
- InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(),
- qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(),
- &finalBits, e);
- if (e != BCExceptionNO)
- return;
-
- std::unique_ptr<CBC_CommonByteMatrix> matrix(new CBC_CommonByteMatrix(
- qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth()));
- matrix->Init();
- int32_t maskPattern = ChooseMaskPattern(
- &finalBits, qrCode->GetECLevel(), qrCode->GetVersion(), matrix.get(), e);
- if (e != BCExceptionNO)
- return;
-
- qrCode->SetMaskPattern(maskPattern);
- CBC_QRCoderMatrixUtil::BuildMatrix(&finalBits, qrCode->GetECLevel(),
- qrCode->GetVersion(),
- qrCode->GetMaskPattern(), matrix.get(), e);
- if (e != BCExceptionNO)
- return qrCode->SetMatrix(std::move(matrix));
-
- if (!qrCode->IsValid())
- e = BCExceptionInvalidQRCode;
-}
-
-void CBC_QRCoderEncoder::Encode(const CFX_WideString& content,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoder* qrCode,
- int32_t& e) {
- CFX_ByteString encoding = "utf8";
- CFX_ByteString utf8Data;
- CBC_UtilCodingConvert::UnicodeToUTF8(content, utf8Data);
- CBC_QRCoderMode* mode = ChooseMode(utf8Data, encoding);
- CBC_QRCoderBitVector dataBits;
- dataBits.Init();
- AppendBytes(utf8Data, mode, &dataBits, encoding, e);
- if (e != BCExceptionNO)
- return;
- int32_t numInputBytes = dataBits.sizeInBytes();
- InitQRCode(numInputBytes, ecLevel, mode, qrCode, e);
- if (e != BCExceptionNO)
- return;
- CBC_QRCoderBitVector headerAndDataBits;
- headerAndDataBits.Init();
- AppendModeInfo(mode, &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- int32_t numLetters = mode == CBC_QRCoderMode::sBYTE ? dataBits.sizeInBytes()
- : content.GetLength();
- AppendLengthInfo(numLetters, qrCode->GetVersion(), mode, &headerAndDataBits,
- e);
- if (e != BCExceptionNO)
- return;
- headerAndDataBits.AppendBitVector(&dataBits, e);
- if (e != BCExceptionNO)
- return TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e);
- if (e != BCExceptionNO)
- return;
- CBC_QRCoderBitVector finalBits;
- finalBits.Init();
- InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(),
- qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(),
- &finalBits, e);
- if (e != BCExceptionNO)
- return;
-
- std::unique_ptr<CBC_CommonByteMatrix> matrix(new CBC_CommonByteMatrix(
- qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth()));
- matrix->Init();
- int32_t maskPattern = ChooseMaskPattern(
- &finalBits, qrCode->GetECLevel(), qrCode->GetVersion(), matrix.get(), e);
- if (e != BCExceptionNO)
- return;
-
- qrCode->SetMaskPattern(maskPattern);
- CBC_QRCoderMatrixUtil::BuildMatrix(&finalBits, qrCode->GetECLevel(),
- qrCode->GetVersion(),
- qrCode->GetMaskPattern(), matrix.get(), e);
- if (e != BCExceptionNO)
- return qrCode->SetMatrix(std::move(matrix));
-
- if (!qrCode->IsValid())
- e = BCExceptionInvalidQRCode;
-}
-
-void CBC_QRCoderEncoder::TerminateBits(int32_t numDataBytes,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- int32_t capacity = numDataBytes << 3;
- if (bits->Size() > capacity) {
- e = BCExceptionDataTooMany;
- return;
- }
- for (int32_t i = 0; i < 4 && bits->Size() < capacity; ++i) {
- bits->AppendBit(0, e);
- if (e != BCExceptionNO)
- return;
- }
- int32_t numBitsInLastByte = bits->Size() % 8;
- if (numBitsInLastByte > 0) {
- int32_t numPaddingBits = 8 - numBitsInLastByte;
- for (int32_t j = 0; j < numPaddingBits; ++j) {
- bits->AppendBit(0, e);
- if (e != BCExceptionNO)
- return;
- }
- }
- if (bits->Size() % 8 != 0) {
- e = BCExceptionDigitLengthMustBe8;
- return;
- }
- int32_t numPaddingBytes = numDataBytes - bits->sizeInBytes();
- for (int32_t k = 0; k < numPaddingBytes; ++k) {
- if (k % 2 == 0) {
- bits->AppendBits(0xec, 8, e);
- if (e != BCExceptionNO)
- return;
- } else {
- bits->AppendBits(0x11, 8, e);
- if (e != BCExceptionNO)
- return;
- }
- }
- if (bits->Size() != capacity)
- e = BCExceptionBitsNotEqualCacity;
-}
-
-int32_t CBC_QRCoderEncoder::ChooseMaskPattern(
- CBC_QRCoderBitVector* bits,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- int32_t version,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- int32_t minPenalty = 65535;
- int32_t bestMaskPattern = -1;
- for (int32_t maskPattern = 0; maskPattern < CBC_QRCoder::kNumMaskPatterns;
- maskPattern++) {
- CBC_QRCoderMatrixUtil::BuildMatrix(bits, ecLevel, version, maskPattern,
- matrix, e);
- if (e != BCExceptionNO)
- return 0;
- int32_t penalty = CalculateMaskPenalty(matrix);
- if (penalty < minPenalty) {
- minPenalty = penalty;
- bestMaskPattern = maskPattern;
- }
- }
- return bestMaskPattern;
-}
-
-int32_t CBC_QRCoderEncoder::CalculateMaskPenalty(CBC_CommonByteMatrix* matrix) {
- int32_t penalty = 0;
- penalty += CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule1(matrix);
- penalty += CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule2(matrix);
- penalty += CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule3(matrix);
- penalty += CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule4(matrix);
- return penalty;
-}
-
-CBC_QRCoderMode* CBC_QRCoderEncoder::ChooseMode(const CFX_ByteString& content,
- CFX_ByteString encoding) {
- if (encoding.Compare("SHIFT_JIS") == 0) {
- return CBC_QRCoderMode::sKANJI;
- }
- bool hasNumeric = false;
- bool hasAlphaNumeric = false;
- for (int32_t i = 0; i < content.GetLength(); i++) {
- if (isdigit((uint8_t)content[i])) {
- hasNumeric = true;
- } else if (GetAlphaNumericCode((uint8_t)content[i]) != -1) {
- hasAlphaNumeric = true;
- } else {
- return CBC_QRCoderMode::sBYTE;
- }
- }
- if (hasAlphaNumeric) {
- return CBC_QRCoderMode::sALPHANUMERIC;
- } else if (hasNumeric) {
- return CBC_QRCoderMode::sNUMERIC;
- }
- return CBC_QRCoderMode::sBYTE;
-}
-
-int32_t CBC_QRCoderEncoder::GetAlphaNumericCode(int32_t code) {
- return (code >= 0 && code < 96) ? g_alphaNumericTable[code] : -1;
-}
-
-void CBC_QRCoderEncoder::AppendBytes(const CFX_ByteString& content,
- CBC_QRCoderMode* mode,
- CBC_QRCoderBitVector* bits,
- CFX_ByteString encoding,
- int32_t& e) {
- if (mode == CBC_QRCoderMode::sNUMERIC)
- AppendNumericBytes(content, bits, e);
- else if (mode == CBC_QRCoderMode::sALPHANUMERIC)
- AppendAlphaNumericBytes(content, bits, e);
- else if (mode == CBC_QRCoderMode::sBYTE)
- Append8BitBytes(content, bits, encoding, e);
- else if (mode == CBC_QRCoderMode::sKANJI)
- AppendKanjiBytes(content, bits, e);
- else if (mode == CBC_QRCoderMode::sGBK)
- AppendGBKBytes(content, bits, e);
- else
- e = BCExceptionUnsupportedMode;
-}
-
-void CBC_QRCoderEncoder::AppendNumericBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- int32_t length = content.GetLength();
- int32_t i = 0;
- while (i < length) {
- int32_t num1 = content[i] - '0';
- if (i + 2 < length) {
- int32_t num2 = content[i + 1] - '0';
- int32_t num3 = content[i + 2] - '0';
- bits->AppendBits(num1 * 100 + num2 * 10 + num3, 10, e);
- if (e != BCExceptionNO)
- return;
- i += 3;
- } else if (i + 1 < length) {
- int32_t num2 = content[i + 1] - '0';
- bits->AppendBits(num1 * 10 + num2, 7, e);
- if (e != BCExceptionNO)
- return;
- i += 2;
- } else {
- bits->AppendBits(num1, 4, e);
- if (e != BCExceptionNO)
- return;
- i++;
- }
- }
-}
-
-void CBC_QRCoderEncoder::AppendAlphaNumericBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- int32_t length = content.GetLength();
- int32_t i = 0;
- while (i < length) {
- int32_t code1 = GetAlphaNumericCode(content[i]);
- if (code1 == -1) {
- e = BCExceptionInvalidateCharacter;
- return;
- }
- if (i + 1 < length) {
- int32_t code2 = GetAlphaNumericCode(content[i + 1]);
- if (code2 == -1) {
- e = BCExceptionInvalidateCharacter;
- return;
- }
- bits->AppendBits(code1 * 45 + code2, 11, e);
- if (e != BCExceptionNO)
- return;
- i += 2;
- } else {
- bits->AppendBits(code1, 6, e);
- if (e != BCExceptionNO)
- return;
- i++;
- }
- }
-}
-
-void CBC_QRCoderEncoder::AppendGBKBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- int32_t length = content.GetLength();
- uint32_t value = 0;
- for (int32_t i = 0; i < length; i += 2) {
- value = (uint32_t)((uint8_t)content[i] << 8 | (uint8_t)content[i + 1]);
- if (value <= 0xAAFE && value >= 0xA1A1) {
- value -= 0xA1A1;
- } else if (value <= 0xFAFE && value >= 0xB0A1) {
- value -= 0xA6A1;
- } else {
- e = BCExceptionInvalidateCharacter;
- return;
- }
- value = (uint32_t)((value >> 8) * 0x60) + (uint32_t)(value & 0xff);
- bits->AppendBits(value, 13, e);
- if (e != BCExceptionNO)
- return;
- }
-}
-
-void CBC_QRCoderEncoder::Append8BitBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- CFX_ByteString encoding,
- int32_t& e) {
- for (int32_t i = 0; i < content.GetLength(); i++) {
- bits->AppendBits(content[i], 8, e);
- if (e != BCExceptionNO)
- return;
- }
-}
-
-void CBC_QRCoderEncoder::Append8BitBytes(std::vector<uint8_t>& bytes,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- for (size_t i = 0; i < bytes.size(); i++) {
- bits->AppendBits(bytes[i], 8, e);
- if (e != BCExceptionNO)
- return;
- }
-}
-
-void CBC_QRCoderEncoder::AppendKanjiBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- std::vector<uint8_t> bytes;
- uint32_t value = 0;
- for (size_t i = 0; i < bytes.size(); i += 2) {
- value = (uint32_t)((uint8_t)(content[i] << 8) | (uint8_t)content[i + 1]);
- if (value <= 0x9ffc && value >= 0x8140) {
- value -= 0x8140;
- } else if (value <= 0xebbf && value >= 0xe040) {
- value -= 0xc140;
- } else {
- e = BCExceptionInvalidateCharacter;
- return;
- }
- value = (uint32_t)((value >> 8) * 0xc0) + (uint32_t)(value & 0xff);
- bits->AppendBits(value, 13, e);
- if (e != BCExceptionNO)
- return;
- }
-}
-
-void CBC_QRCoderEncoder::InitQRCode(int32_t numInputBytes,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoderMode* mode,
- CBC_QRCoder* qrCode,
- int32_t& e) {
- qrCode->SetECLevel(ecLevel);
- qrCode->SetMode(mode);
- for (int32_t versionNum = 1; versionNum <= 40; versionNum++) {
- CBC_QRCoderVersion* version =
- CBC_QRCoderVersion::GetVersionForNumber(versionNum, e);
- if (e != BCExceptionNO)
- return;
- int32_t numBytes = version->GetTotalCodeWords();
- CBC_QRCoderECBlocks* ecBlocks = version->GetECBlocksForLevel(ecLevel);
- int32_t numEcBytes = ecBlocks->GetTotalECCodeWords();
- int32_t numRSBlocks = ecBlocks->GetNumBlocks();
- int32_t numDataBytes = numBytes - numEcBytes;
- if (numDataBytes >= numInputBytes + 3) {
- qrCode->SetVersion(versionNum);
- qrCode->SetNumTotalBytes(numBytes);
- qrCode->SetNumDataBytes(numDataBytes);
- qrCode->SetNumRSBlocks(numRSBlocks);
- qrCode->SetNumECBytes(numEcBytes);
- qrCode->SetMatrixWidth(version->GetDimensionForVersion());
- return;
- }
- }
- e = BCExceptionCannotFindBlockInfo;
-}
-
-void CBC_QRCoderEncoder::AppendModeInfo(CBC_QRCoderMode* mode,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- bits->AppendBits(mode->GetBits(), 4, e);
- if (mode == CBC_QRCoderMode::sGBK)
- bits->AppendBits(1, 4, e);
-}
-
-void CBC_QRCoderEncoder::AppendLengthInfo(int32_t numLetters,
- int32_t version,
- CBC_QRCoderMode* mode,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- CBC_QRCoderVersion* qcv = CBC_QRCoderVersion::GetVersionForNumber(version, e);
- if (e != BCExceptionNO)
- return;
- int32_t numBits = mode->GetCharacterCountBits(qcv, e);
- if (e != BCExceptionNO)
- return;
- if (numBits > ((1 << numBits) - 1)) {
- return;
- }
- if (mode == CBC_QRCoderMode::sGBK) {
- bits->AppendBits(numLetters / 2, numBits, e);
- if (e != BCExceptionNO)
- return;
- }
- bits->AppendBits(numLetters, numBits, e);
-}
-
-void CBC_QRCoderEncoder::InterleaveWithECBytes(CBC_QRCoderBitVector* bits,
- int32_t numTotalBytes,
- int32_t numDataBytes,
- int32_t numRSBlocks,
- CBC_QRCoderBitVector* result,
- int32_t& e) {
- if (bits->sizeInBytes() != numDataBytes) {
- e = BCExceptionBitsBytesNotMatch;
- return;
- }
- int32_t dataBytesOffset = 0;
- int32_t maxNumDataBytes = 0;
- int32_t maxNumEcBytes = 0;
- std::vector<CBC_QRCoderBlockPair*> blocks;
- int32_t i;
- for (i = 0; i < numRSBlocks; i++) {
- int32_t numDataBytesInBlock;
- int32_t numEcBytesInBlosk;
- GetNumDataBytesAndNumECBytesForBlockID(numTotalBytes, numDataBytes,
- numRSBlocks, i, numDataBytesInBlock,
- numEcBytesInBlosk);
- std::unique_ptr<CBC_CommonByteArray> dataBytes(new CBC_CommonByteArray);
- dataBytes->Set(bits->GetArray(), dataBytesOffset, numDataBytesInBlock);
- std::unique_ptr<CBC_CommonByteArray> ecBytes(
- GenerateECBytes(dataBytes.get(), numEcBytesInBlosk, e));
- if (e != BCExceptionNO)
- return;
- maxNumDataBytes = std::max(maxNumDataBytes, dataBytes->Size());
- maxNumEcBytes = std::max(maxNumEcBytes, ecBytes->Size());
- blocks.push_back(
- new CBC_QRCoderBlockPair(std::move(dataBytes), std::move(ecBytes)));
- dataBytesOffset += numDataBytesInBlock;
- }
- if (numDataBytes != dataBytesOffset) {
- e = BCExceptionBytesNotMatchOffset;
- return;
- }
- for (int32_t x = 0; x < maxNumDataBytes; x++) {
- for (size_t j = 0; j < blocks.size(); j++) {
- const CBC_CommonByteArray* dataBytes = blocks[j]->GetDataBytes();
- if (x < dataBytes->Size()) {
- result->AppendBits(dataBytes->At(x), 8, e);
- if (e != BCExceptionNO)
- return;
- }
- }
- }
- for (int32_t y = 0; y < maxNumEcBytes; y++) {
- for (size_t l = 0; l < blocks.size(); l++) {
- const CBC_CommonByteArray* ecBytes = blocks[l]->GetErrorCorrectionBytes();
- if (y < ecBytes->Size()) {
- result->AppendBits(ecBytes->At(y), 8, e);
- if (e != BCExceptionNO)
- return;
- }
- }
- }
- for (size_t k = 0; k < blocks.size(); k++) {
- delete blocks[k];
- }
- if (numTotalBytes != result->sizeInBytes())
- e = BCExceptionSizeInBytesDiffer;
-}
-
-void CBC_QRCoderEncoder::GetNumDataBytesAndNumECBytesForBlockID(
- int32_t numTotalBytes,
- int32_t numDataBytes,
- int32_t numRSBlocks,
- int32_t blockID,
- int32_t& numDataBytesInBlock,
- int32_t& numECBytesInBlock) {
- if (blockID >= numRSBlocks) {
- return;
- }
- int32_t numRsBlocksInGroup2 = numTotalBytes % numRSBlocks;
- int32_t numRsBlocksInGroup1 = numRSBlocks - numRsBlocksInGroup2;
- int32_t numTotalBytesInGroup1 = numTotalBytes / numRSBlocks;
- int32_t numTotalBytesInGroup2 = numTotalBytesInGroup1 + 1;
- int32_t numDataBytesInGroup1 = numDataBytes / numRSBlocks;
- int32_t numDataBytesInGroup2 = numDataBytesInGroup1 + 1;
- int32_t numEcBytesInGroup1 = numTotalBytesInGroup1 - numDataBytesInGroup1;
- int32_t numEcBytesInGroup2 = numTotalBytesInGroup2 - numDataBytesInGroup2;
- if (blockID < numRsBlocksInGroup1) {
- numDataBytesInBlock = numDataBytesInGroup1;
- numECBytesInBlock = numEcBytesInGroup1;
- } else {
- numDataBytesInBlock = numDataBytesInGroup2;
- numECBytesInBlock = numEcBytesInGroup2;
- }
-}
-
-CBC_CommonByteArray* CBC_QRCoderEncoder::GenerateECBytes(
- CBC_CommonByteArray* dataBytes,
- int32_t numEcBytesInBlock,
- int32_t& e) {
- int32_t numDataBytes = dataBytes->Size();
- std::vector<int32_t> toEncode(numDataBytes + numEcBytesInBlock);
- for (int32_t i = 0; i < numDataBytes; i++) {
- toEncode[i] = (dataBytes->At(i));
- }
- CBC_ReedSolomonEncoder encode(CBC_ReedSolomonGF256::QRCodeField);
- encode.Init();
- encode.Encode(&toEncode, numEcBytesInBlock, e);
- if (e != BCExceptionNO)
- return nullptr;
- CBC_CommonByteArray* ecBytes = new CBC_CommonByteArray(numEcBytesInBlock);
- for (int32_t j = 0; j < numEcBytesInBlock; j++) {
- ecBytes->Set(j, toEncode[numDataBytes + j]);
- }
- return ecBytes;
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h
deleted file mode 100644
index 77de6e5e40..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERENCODER_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERENCODER_H_
-
-#include <utility>
-#include <vector>
-
-#include "core/fxcrt/fx_basic.h"
-#include "core/fxcrt/fx_string.h"
-
-class CBC_QRCoder;
-class CBC_QRCoderErrorCorrectionLevel;
-class CBC_QRCoderMode;
-class CBC_QRCoderBitVector;
-class CBC_CommonByteArray;
-class CBC_CommonByteMatrix;
-
-class CBC_QRCoderEncoder {
- public:
- CBC_QRCoderEncoder();
- virtual ~CBC_QRCoderEncoder();
-
- static void Encode(const CFX_ByteString& content,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoder* qrCode,
- int32_t& e,
- int32_t versionSpecify = 0);
- static void Encode(const CFX_WideString& content,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoder* qrCode,
- int32_t& e);
- static void EncodeWithSpecifyVersion(const CFX_ByteString& content,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoder* qrCode,
- int32_t versionSpecify,
- int32_t& e);
- static void EncodeWithAutoVersion(const CFX_ByteString& content,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoder* qrCode,
- int32_t& e);
- static CBC_QRCoderMode* ChooseMode(const CFX_ByteString& content,
- CFX_ByteString encoding);
- static int32_t GetAlphaNumericCode(int32_t code);
- static void AppendECI(CBC_QRCoderBitVector* bits);
- static void AppendBytes(const CFX_ByteString& content,
- CBC_QRCoderMode* mode,
- CBC_QRCoderBitVector* bits,
- CFX_ByteString encoding,
- int32_t& e);
- static void AppendNumericBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static void AppendAlphaNumericBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static void Append8BitBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- CFX_ByteString encoding,
- int32_t& e);
- static void Append8BitBytes(std::vector<uint8_t>& bytes,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static void AppendKanjiBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static void AppendGBKBytes(const CFX_ByteString& content,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static void InitQRCode(int32_t numInputBytes,
- int32_t versionNumber,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoderMode* mode,
- CBC_QRCoder* qrCode,
- int32_t& e);
- static void InitQRCode(int32_t numInputBytes,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- CBC_QRCoderMode* mode,
- CBC_QRCoder* qrCode,
- int32_t& e);
- static void AppendModeInfo(CBC_QRCoderMode* mode,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static void AppendLengthInfo(int32_t numLetters,
- int32_t version,
- CBC_QRCoderMode* mode,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
-
- static void InterleaveWithECBytes(CBC_QRCoderBitVector* bits,
- int32_t numTotalBytes,
- int32_t numDataBytes,
- int32_t numRSBlocks,
- CBC_QRCoderBitVector* result,
- int32_t& e);
- static void GetNumDataBytesAndNumECBytesForBlockID(
- int32_t numTotalBytes,
- int32_t numDataBytes,
- int32_t numRSBlocks,
- int32_t blockID,
- int32_t& numDataBytesInBlock,
- int32_t& numECBytesInBlocks);
- static CBC_CommonByteArray* GenerateECBytes(CBC_CommonByteArray* dataBytes,
- int32_t numEcBytesInBlock,
- int32_t& e);
- static int32_t ChooseMaskPattern(CBC_QRCoderBitVector* bits,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- int32_t version,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static int32_t CalculateMaskPenalty(CBC_CommonByteMatrix* matrix);
- static void TerminateBits(int32_t numDataBytes,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static int32_t GetSpanByVersion(CBC_QRCoderMode* modeFirst,
- CBC_QRCoderMode* modeSecond,
- int32_t versionNum,
- int32_t& e);
- static void MergeString(
- std::vector<std::pair<CBC_QRCoderMode*, CFX_ByteString>>* result,
- int32_t versionNum,
- int32_t& e);
- static void SplitString(
- const CFX_ByteString& content,
- std::vector<std::pair<CBC_QRCoderMode*, CFX_ByteString>>* result);
- static void AppendDataModeLenghInfo(
- const std::vector<std::pair<CBC_QRCoderMode*, CFX_ByteString>>&
- splitResult,
- CBC_QRCoderBitVector& headerAndDataBits,
- CBC_QRCoderMode* tempMode,
- CBC_QRCoder* qrCode,
- CFX_ByteString& encoding,
- int32_t& e);
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERENCODER_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.cpp
deleted file mode 100644
index 2990d980fc..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2007 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
-
-CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::L = nullptr;
-CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::M = nullptr;
-CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::Q = nullptr;
-CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::H = nullptr;
-
-CBC_QRCoderErrorCorrectionLevel::CBC_QRCoderErrorCorrectionLevel(
- int32_t ordinal,
- int32_t bits,
- const char* name)
- : m_ordinal(ordinal), m_bits(bits), m_name(name) {}
-
-CBC_QRCoderErrorCorrectionLevel::~CBC_QRCoderErrorCorrectionLevel() {}
-
-void CBC_QRCoderErrorCorrectionLevel::Initialize() {
- L = new CBC_QRCoderErrorCorrectionLevel(0, 0x01, "L");
- M = new CBC_QRCoderErrorCorrectionLevel(1, 0x00, "M");
- Q = new CBC_QRCoderErrorCorrectionLevel(2, 0x03, "Q");
- H = new CBC_QRCoderErrorCorrectionLevel(3, 0x02, "H");
-}
-
-void CBC_QRCoderErrorCorrectionLevel::Finalize() {
- delete L;
- delete M;
- delete Q;
- delete H;
-}
-
-CBC_QRCoderErrorCorrectionLevel* CBC_QRCoderErrorCorrectionLevel::ForBits(
- int32_t bits) {
- switch (bits) {
- case 0x00:
- return M;
- case 0x01:
- return L;
- case 0x02:
- return H;
- case 0x03:
- return Q;
- default:
- return nullptr;
- }
-}
-void CBC_QRCoderErrorCorrectionLevel::Destroy() {
- if (L) {
- delete CBC_QRCoderErrorCorrectionLevel::L;
- L = nullptr;
- }
- if (M) {
- delete CBC_QRCoderErrorCorrectionLevel::M;
- M = nullptr;
- }
- if (H) {
- delete CBC_QRCoderErrorCorrectionLevel::H;
- H = nullptr;
- }
- if (Q) {
- delete CBC_QRCoderErrorCorrectionLevel::Q;
- Q = nullptr;
- }
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h b/xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h
deleted file mode 100644
index 2f0d22eb29..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERERRORCORRECTIONLEVEL_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERERRORCORRECTIONLEVEL_H_
-
-#include "core/fxcrt/fx_string.h"
-
-class CBC_QRCoderErrorCorrectionLevel {
- public:
- static CBC_QRCoderErrorCorrectionLevel* L;
- static CBC_QRCoderErrorCorrectionLevel* M;
- static CBC_QRCoderErrorCorrectionLevel* Q;
- static CBC_QRCoderErrorCorrectionLevel* H;
-
- static void Initialize();
- static void Finalize();
- static void Destroy();
- static CBC_QRCoderErrorCorrectionLevel* ForBits(int32_t bits);
-
- ~CBC_QRCoderErrorCorrectionLevel();
-
- int32_t Ordinal() const { return m_ordinal; }
- int32_t GetBits() const { return m_bits; }
- CFX_ByteString GetName() const { return m_name; }
-
- private:
- CBC_QRCoderErrorCorrectionLevel(int32_t ordinal,
- int32_t bits,
- const char* name);
- CBC_QRCoderErrorCorrectionLevel();
-
- int32_t m_ordinal;
- int32_t m_bits;
- CFX_ByteString m_name;
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERERRORCORRECTIONLEVEL_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp
deleted file mode 100644
index 7953701bb2..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp
+++ /dev/null
@@ -1,198 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2008 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/common/BC_CommonByteMatrix.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoder.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.h"
-#include "xfa/fxbarcode/utils.h"
-
-CBC_QRCoderMaskUtil::CBC_QRCoderMaskUtil() {}
-CBC_QRCoderMaskUtil::~CBC_QRCoderMaskUtil() {}
-int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule1(
- CBC_CommonByteMatrix* matrix) {
- return ApplyMaskPenaltyRule1Internal(matrix, true) +
- ApplyMaskPenaltyRule1Internal(matrix, false);
-}
-
-int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule2(
- CBC_CommonByteMatrix* matrix) {
- int32_t penalty = 0;
- uint8_t* array = matrix->GetArray();
- int32_t width = matrix->GetWidth();
- int32_t height = matrix->GetHeight();
- for (int32_t y = 0; y < height - 1; y++) {
- for (int32_t x = 0; x < width - 1; x++) {
- int32_t value = array[y * width + x];
- if (value == array[y * width + x + 1] &&
- value == array[(y + 1) * width + x] &&
- value == array[(y + 1) * width + x + 1]) {
- penalty++;
- }
- }
- }
- return 3 * penalty;
-}
-
-int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule3(
- CBC_CommonByteMatrix* matrix) {
- int32_t penalty = 0;
- uint8_t* array = matrix->GetArray();
- int32_t width = matrix->GetWidth();
- int32_t height = matrix->GetHeight();
- for (int32_t y = 0; y < height; ++y) {
- for (int32_t x = 0; x < width; ++x) {
- if (x == 0 &&
- ((y >= 0 && y <= 6) || (y >= height - 7 && y <= height - 1))) {
- continue;
- }
- if (x == width - 7 && (y >= 0 && y <= 6)) {
- continue;
- }
- if (y == 0 &&
- ((x >= 0 && x <= 6) || (x >= width - 7 && x <= width - 1))) {
- continue;
- }
- if (y == height - 7 && (x >= 0 && x <= 6)) {
- continue;
- }
- if (x + 6 < width && array[y * width + x] == 1 &&
- array[y * width + x + 1] == 0 && array[y * width + x + 2] == 1 &&
- array[y * width + x + 3] == 1 && array[y * width + x + 4] == 1 &&
- array[y * width + x + 5] == 0 && array[y * width + x + 6] == 1 &&
- ((x + 10 < width && array[y * width + x + 7] == 0 &&
- array[y * width + x + 8] == 0 && array[y * width + x + 9] == 0 &&
- array[y * width + x + 10] == 0) ||
- (x - 4 >= 0 && array[y * width + x - 1] == 0 &&
- array[y * width + x - 2] == 0 && array[y * width + x - 3] == 0 &&
- array[y * width + x - 4] == 0))) {
- penalty += 40;
- }
- if (y + 6 < height && array[y * width + x] == 1 &&
- array[(y + 1) * width + x] == 0 && array[(y + 2) * width + x] == 1 &&
- array[(y + 3) * width + x] == 1 && array[(y + 4) * width + x] == 1 &&
- array[(y + 5) * width + x] == 0 && array[(y + 6) * width + x] == 1 &&
- ((y + 10 < height && array[(y + 7) * width + x] == 0 &&
- array[(y + 8) * width + x] == 0 &&
- array[(y + 9) * width + x] == 0 &&
- array[(y + 10) * width + x] == 0) ||
- (y - 4 >= 0 && array[(y - 1) * width + x] == 0 &&
- array[(y - 2) * width + x] == 0 &&
- array[(y - 3) * width + x] == 0 &&
- array[(y - 4) * width + x] == 0))) {
- penalty += 40;
- }
- }
- }
- return penalty;
-}
-int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule4(
- CBC_CommonByteMatrix* matrix) {
- int32_t numDarkCells = 0;
- uint8_t* array = matrix->GetArray();
- int32_t width = matrix->GetWidth();
- int32_t height = matrix->GetHeight();
- for (int32_t y = 0; y < height; ++y) {
- for (int32_t x = 0; x < width; ++x) {
- if (array[y * width + x] == 1) {
- numDarkCells += 1;
- }
- }
- }
- int32_t numTotalCells = matrix->GetHeight() * matrix->GetWidth();
- double darkRatio = (double)numDarkCells / numTotalCells;
- return abs((int32_t)(darkRatio * 100 - 50) / 5) * 5 * 10;
-}
-bool CBC_QRCoderMaskUtil::GetDataMaskBit(int32_t maskPattern,
- int32_t x,
- int32_t y,
- int32_t& e) {
- if (!CBC_QRCoder::IsValidMaskPattern(maskPattern)) {
- e = (BCExceptionInvalidateMaskPattern);
- return false;
- }
- int32_t intermediate = 0, temp = 0;
- switch (maskPattern) {
- case 0:
- intermediate = (y + x) & 0x1;
- break;
- case 1:
- intermediate = y & 0x1;
- break;
- case 2:
- intermediate = x % 3;
- break;
- case 3:
- intermediate = (y + x) % 3;
- break;
- case 4:
- intermediate = ((y >> 1) + (x / 3)) & 0x1;
- break;
- case 5:
- temp = y * x;
- intermediate = (temp & 0x1) + (temp % 3);
- break;
- case 6:
- temp = y * x;
- intermediate = (((temp & 0x1) + (temp % 3)) & 0x1);
- break;
- case 7:
- temp = y * x;
- intermediate = (((temp % 3) + ((y + x) & 0x1)) & 0x1);
- break;
- default: {
- e = BCExceptionInvalidateMaskPattern;
- return false;
- }
- }
- return intermediate == 0;
-}
-int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule1Internal(
- CBC_CommonByteMatrix* matrix,
- bool isHorizontal) {
- int32_t penalty = 0;
- int32_t numSameBitCells = 0;
- int32_t prevBit = -1;
- int32_t width = matrix->GetWidth();
- int32_t height = matrix->GetHeight();
- int32_t iLimit = isHorizontal ? height : width;
- int32_t jLimit = isHorizontal ? width : height;
- uint8_t* array = matrix->GetArray();
- for (int32_t i = 0; i < iLimit; ++i) {
- for (int32_t j = 0; j < jLimit; ++j) {
- int32_t bit = isHorizontal ? array[i * width + j] : array[j * width + i];
- if (bit == prevBit) {
- numSameBitCells += 1;
- if (numSameBitCells == 5) {
- penalty += 3;
- } else if (numSameBitCells > 5) {
- penalty += 1;
- }
- } else {
- numSameBitCells = 1;
- prevBit = bit;
- }
- }
- numSameBitCells = 0;
- }
- return penalty;
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.h b/xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.h
deleted file mode 100644
index 9fbe073e7e..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
-class CBC_CommonByteMatrix;
-class CBC_QRCoderMaskUtil {
- public:
- CBC_QRCoderMaskUtil();
- virtual ~CBC_QRCoderMaskUtil();
- static bool GetDataMaskBit(int32_t maskPattern,
- int32_t x,
- int32_t y,
- int32_t& e);
-
- static int32_t ApplyMaskPenaltyRule1(CBC_CommonByteMatrix* matrix);
- static int32_t ApplyMaskPenaltyRule2(CBC_CommonByteMatrix* matrix);
- static int32_t ApplyMaskPenaltyRule3(CBC_CommonByteMatrix* matrix);
- static int32_t ApplyMaskPenaltyRule4(CBC_CommonByteMatrix* matrix);
- static int32_t ApplyMaskPenaltyRule1Internal(CBC_CommonByteMatrix* matrix,
- bool isHorizontal);
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp
deleted file mode 100644
index d48d81c091..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp
+++ /dev/null
@@ -1,506 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2008 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/common/BC_CommonByteMatrix.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoder.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMaskUtil.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h"
-#include "xfa/fxbarcode/utils.h"
-
-const int32_t CBC_QRCoderMatrixUtil::POSITION_DETECTION_PATTERN[7][7] = {
- {1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 0, 0, 1}, {1, 0, 1, 1, 1, 0, 1},
- {1, 0, 1, 1, 1, 0, 1}, {1, 0, 1, 1, 1, 0, 1}, {1, 0, 0, 0, 0, 0, 1},
- {1, 1, 1, 1, 1, 1, 1}};
-const int32_t CBC_QRCoderMatrixUtil::HORIZONTAL_SEPARATION_PATTERN[1][8] = {
- {0, 0, 0, 0, 0, 0, 0, 0}};
-const int32_t CBC_QRCoderMatrixUtil::VERTICAL_SEPARATION_PATTERN[7][1] = {
- {0}, {0}, {0}, {0}, {0}, {0}, {0}};
-const int32_t CBC_QRCoderMatrixUtil::POSITION_ADJUSTMENT_PATTERN[5][5] = {
- {1, 1, 1, 1, 1},
- {1, 0, 0, 0, 1},
- {1, 0, 1, 0, 1},
- {1, 0, 0, 0, 1},
- {1, 1, 1, 1, 1}};
-const int32_t
- CBC_QRCoderMatrixUtil::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[40][7] =
- // NOLINTNEXTLINE
- {
- {-1, -1, -1, -1, -1, -1, -1}, {6, 18, -1, -1, -1, -1, -1},
- {6, 22, -1, -1, -1, -1, -1}, {6, 26, -1, -1, -1, -1, -1},
- {6, 30, -1, -1, -1, -1, -1}, {6, 34, -1, -1, -1, -1, -1},
- {6, 22, 38, -1, -1, -1, -1}, {6, 24, 42, -1, -1, -1, -1},
- {6, 26, 46, -1, -1, -1, -1}, {6, 28, 50, -1, -1, -1, -1},
- {6, 30, 54, -1, -1, -1, -1}, {6, 32, 58, -1, -1, -1, -1},
- {6, 34, 62, -1, -1, -1, -1}, {6, 26, 46, 66, -1, -1, -1},
- {6, 26, 48, 70, -1, -1, -1}, {6, 26, 50, 74, -1, -1, -1},
- {6, 30, 54, 78, -1, -1, -1}, {6, 30, 56, 82, -1, -1, -1},
- {6, 30, 58, 86, -1, -1, -1}, {6, 34, 62, 90, -1, -1, -1},
- {6, 28, 50, 72, 94, -1, -1}, {6, 26, 50, 74, 98, -1, -1},
- {6, 30, 54, 78, 102, -1, -1}, {6, 28, 54, 80, 106, -1, -1},
- {6, 32, 58, 84, 110, -1, -1}, {6, 30, 58, 86, 114, -1, -1},
- {6, 34, 62, 90, 118, -1, -1}, {6, 26, 50, 74, 98, 122, -1},
- {6, 30, 54, 78, 102, 126, -1}, {6, 26, 52, 78, 104, 130, -1},
- {6, 30, 56, 82, 108, 134, -1}, {6, 34, 60, 86, 112, 138, -1},
- {6, 30, 58, 86, 114, 142, -1}, {6, 34, 62, 90, 118, 146, -1},
- {6, 30, 54, 78, 102, 126, 150}, {6, 24, 50, 76, 102, 128, 154},
- {6, 28, 54, 80, 106, 132, 158}, {6, 32, 58, 84, 110, 136, 162},
- {6, 26, 54, 82, 110, 138, 166}, {6, 30, 58, 86, 114, 142, 170},
-};
-const int32_t CBC_QRCoderMatrixUtil::TYPE_INFO_COORDINATES[15][2] = {
- {8, 0}, {8, 1}, {8, 2}, {8, 3}, {8, 4}, {8, 5}, {8, 7}, {8, 8},
- {7, 8}, {5, 8}, {4, 8}, {3, 8}, {2, 8}, {1, 8}, {0, 8},
-};
-const int32_t CBC_QRCoderMatrixUtil::VERSION_INFO_POLY = 0x1f25;
-const int32_t CBC_QRCoderMatrixUtil::TYPE_INFO_POLY = 0x0537;
-const int32_t CBC_QRCoderMatrixUtil::TYPE_INFO_MASK_PATTERN = 0x5412;
-
-void CBC_QRCoderMatrixUtil::ClearMatrix(CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- matrix->clear((uint8_t)-1);
-}
-void CBC_QRCoderMatrixUtil::BuildMatrix(
- CBC_QRCoderBitVector* dataBits,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- int32_t version,
- int32_t maskPattern,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- ClearMatrix(matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedBasicPatterns(version, matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedTypeInfo(ecLevel, maskPattern, matrix, e);
- if (e != BCExceptionNO)
- return;
- MaybeEmbedVersionInfo(version, matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedDataBits(dataBits, maskPattern, matrix, e);
- if (e != BCExceptionNO)
- return;
-}
-void CBC_QRCoderMatrixUtil::EmbedBasicPatterns(int32_t version,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- EmbedPositionDetectionPatternsAndSeparators(matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedDarkDotAtLeftBottomCorner(matrix, e);
- if (e != BCExceptionNO)
- return;
- MaybeEmbedPositionAdjustmentPatterns(version, matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedTimingPatterns(matrix, e);
- if (e != BCExceptionNO)
- return;
-}
-void CBC_QRCoderMatrixUtil::EmbedTypeInfo(
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- int32_t maskPattern,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- CBC_QRCoderBitVector typeInfoBits;
- typeInfoBits.Init();
- MakeTypeInfoBits(ecLevel, maskPattern, &typeInfoBits, e);
- if (e != BCExceptionNO)
- return;
- for (int32_t i = 0; i < typeInfoBits.Size(); i++) {
- int32_t bit = typeInfoBits.At(typeInfoBits.Size() - 1 - i, e);
- if (e != BCExceptionNO)
- return;
- int32_t x1 = TYPE_INFO_COORDINATES[i][0];
- int32_t y1 = TYPE_INFO_COORDINATES[i][1];
- matrix->Set(x1, y1, bit);
- if (i < 8) {
- int32_t x2 = matrix->GetWidth() - i - 1;
- int32_t y2 = 8;
- matrix->Set(x2, y2, bit);
- } else {
- int32_t x2 = 8;
- int32_t y2 = matrix->GetHeight() - 7 + (i - 8);
- matrix->Set(x2, y2, bit);
- }
- }
-}
-void CBC_QRCoderMatrixUtil::MaybeEmbedVersionInfo(int32_t version,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- if (version < 7) {
- return;
- }
- CBC_QRCoderBitVector versionInfoBits;
- versionInfoBits.Init();
- MakeVersionInfoBits(version, &versionInfoBits, e);
- if (e != BCExceptionNO)
- return;
- int32_t bitIndex = 6 * 3 - 1;
- for (int32_t i = 0; i < 6; i++) {
- for (int32_t j = 0; j < 3; j++) {
- int32_t bit = versionInfoBits.At(bitIndex, e);
- if (e != BCExceptionNO)
- return;
- bitIndex--;
- matrix->Set(i, matrix->GetHeight() - 11 + j, bit);
- matrix->Set(matrix->GetHeight() - 11 + j, i, bit);
- }
- }
-}
-void CBC_QRCoderMatrixUtil::EmbedDataBits(CBC_QRCoderBitVector* dataBits,
- int32_t maskPattern,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix || !dataBits) {
- e = BCExceptionNullPointer;
- return;
- }
- int32_t bitIndex = 0;
- int32_t direction = -1;
- int32_t x = matrix->GetWidth() - 1;
- int32_t y = matrix->GetHeight() - 1;
- while (x > 0) {
- if (x == 6) {
- x -= 1;
- }
- while (y >= 0 && y < matrix->GetHeight()) {
- if (y == 6) {
- y += direction;
- continue;
- }
- for (int32_t i = 0; i < 2; i++) {
- int32_t xx = x - i;
- if (!IsEmpty(matrix->Get(xx, y))) {
- continue;
- }
- int32_t bit;
- if (bitIndex < dataBits->Size()) {
- bit = dataBits->At(bitIndex, e);
- if (e != BCExceptionNO)
- return;
- bitIndex++;
- } else {
- bit = 0;
- }
- if (maskPattern != -1) {
- bool bol = CBC_QRCoderMaskUtil::GetDataMaskBit(maskPattern, xx, y, e);
- if (e != BCExceptionNO)
- return;
- if (bol) {
- bit ^= 0x01;
- }
- }
- matrix->Set(xx, y, bit);
- }
- y += direction;
- }
- direction = -direction;
- y += direction;
- x -= 2;
- }
- if (bitIndex != dataBits->Size()) {
- return;
- }
-}
-int32_t CBC_QRCoderMatrixUtil::CalculateBCHCode(int32_t value, int32_t poly) {
- int32_t msbSetInPoly = FindMSBSet(poly);
- value <<= msbSetInPoly - 1;
- while (FindMSBSet(value) >= msbSetInPoly) {
- value ^= poly << (FindMSBSet(value) - msbSetInPoly);
- }
- return value;
-}
-void CBC_QRCoderMatrixUtil::MakeTypeInfoBits(
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- int32_t maskPattern,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- if (!bits) {
- e = BCExceptionNullPointer;
- return;
- }
- if (!CBC_QRCoder::IsValidMaskPattern(maskPattern)) {
- e = BCExceptionBadMask;
- return;
- }
- int32_t typeInfo = (ecLevel->GetBits() << 3) | maskPattern;
- if (e != BCExceptionNO)
- return;
- bits->AppendBits(typeInfo, 5, e);
- int32_t bchCode = CalculateBCHCode(typeInfo, TYPE_INFO_POLY);
- if (e != BCExceptionNO)
- return;
- bits->AppendBits(bchCode, 10, e);
- CBC_QRCoderBitVector maskBits;
- maskBits.Init();
- maskBits.AppendBits(TYPE_INFO_MASK_PATTERN, 15, e);
- if (e != BCExceptionNO)
- return;
- bits->XOR(&maskBits, e);
- if (e != BCExceptionNO)
- return;
- if (bits->Size() != 15)
- e = BCExceptionBitSizeNot15;
-}
-
-void CBC_QRCoderMatrixUtil::MakeVersionInfoBits(int32_t version,
- CBC_QRCoderBitVector* bits,
- int32_t& e) {
- if (!bits) {
- e = BCExceptionNullPointer;
- return;
- }
- bits->AppendBits(version, 6, e);
- if (e != BCExceptionNO)
- return;
-
- int32_t bchCode = CalculateBCHCode(version, VERSION_INFO_POLY);
- bits->AppendBits(bchCode, 12, e);
- if (e != BCExceptionNO)
- return;
-
- if (bits->Size() != 18)
- e = BCExceptionBitSizeNot18;
-}
-
-bool CBC_QRCoderMatrixUtil::IsEmpty(int32_t value) {
- return (uint8_t)value == 0xff;
-}
-bool CBC_QRCoderMatrixUtil::IsValidValue(int32_t value) {
- return ((uint8_t)value == 0xff || (uint8_t)value == 0x00 ||
- (uint8_t)value == 0x01);
-}
-
-void CBC_QRCoderMatrixUtil::EmbedTimingPatterns(CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- for (int32_t i = 8; i < matrix->GetWidth() - 8; i++) {
- int32_t bit = (i + 1) % 2;
- if (!IsValidValue(matrix->Get(i, 6))) {
- e = BCExceptionInvalidateImageData;
- return;
- }
- if (IsEmpty(matrix->Get(i, 6))) {
- matrix->Set(i, 6, bit);
- }
- if (!IsValidValue(matrix->Get(6, i))) {
- e = BCExceptionInvalidateImageData;
- return;
- }
- if (IsEmpty(matrix->Get(6, i))) {
- matrix->Set(6, i, bit);
- }
- }
-}
-void CBC_QRCoderMatrixUtil::EmbedDarkDotAtLeftBottomCorner(
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- if (matrix->Get(8, matrix->GetHeight() - 8) == 0) {
- e = BCExceptionHeight_8BeZero;
- return;
- }
- matrix->Set(8, matrix->GetHeight() - 8, 1);
-}
-void CBC_QRCoderMatrixUtil::EmbedHorizontalSeparationPattern(
- int32_t xStart,
- int32_t yStart,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- for (int32_t x = 0; x < 8; x++) {
- if (!IsEmpty(matrix->Get(xStart + x, yStart))) {
- e = BCExceptionInvalidateData;
- return;
- }
- matrix->Set(xStart + x, yStart, HORIZONTAL_SEPARATION_PATTERN[0][x]);
- }
-}
-void CBC_QRCoderMatrixUtil::EmbedVerticalSeparationPattern(
- int32_t xStart,
- int32_t yStart,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- for (int32_t y = 0; y < 7; y++) {
- if (!IsEmpty(matrix->Get(xStart, yStart + y))) {
- e = BCExceptionInvalidateData;
- return;
- }
- matrix->Set(xStart, yStart + y, VERTICAL_SEPARATION_PATTERN[y][0]);
- }
-}
-void CBC_QRCoderMatrixUtil::EmbedPositionAdjustmentPattern(
- int32_t xStart,
- int32_t yStart,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- if (e != BCExceptionNO)
- return;
- }
- for (int32_t y = 0; y < 5; y++) {
- for (int32_t x = 0; x < 5; x++) {
- if (!IsEmpty(matrix->Get(xStart + x, y + yStart))) {
- e = BCExceptionInvalidateData;
- return;
- }
- matrix->Set(xStart + x, yStart + y, POSITION_ADJUSTMENT_PATTERN[y][x]);
- }
- }
-}
-void CBC_QRCoderMatrixUtil::EmbedPositionDetectionPattern(
- int32_t xStart,
- int32_t yStart,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- for (int32_t y = 0; y < 7; y++) {
- for (int32_t x = 0; x < 7; x++) {
- if (!IsEmpty(matrix->Get(xStart + x, yStart + y))) {
- e = BCExceptionInvalidateData;
- return;
- }
- matrix->Set(xStart + x, yStart + y, POSITION_DETECTION_PATTERN[y][x]);
- }
- }
-}
-void CBC_QRCoderMatrixUtil::EmbedPositionDetectionPatternsAndSeparators(
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- int32_t pdpWidth = 7;
- EmbedPositionDetectionPattern(0, 0, matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedPositionDetectionPattern(matrix->GetWidth() - pdpWidth, 0, matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedPositionDetectionPattern(0, matrix->GetWidth() - pdpWidth, matrix, e);
- if (e != BCExceptionNO)
- return;
- int32_t hspWidth = 8;
- EmbedHorizontalSeparationPattern(0, hspWidth - 1, matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedHorizontalSeparationPattern(matrix->GetWidth() - hspWidth, hspWidth - 1,
- matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedHorizontalSeparationPattern(0, matrix->GetWidth() - hspWidth, matrix, e);
- if (e != BCExceptionNO)
- return;
- int32_t vspSize = 7;
- EmbedVerticalSeparationPattern(vspSize, 0, matrix, e);
- if (e != BCExceptionNO)
- return;
- EmbedVerticalSeparationPattern(matrix->GetHeight() - vspSize - 1, 0, matrix,
- e);
- if (e != BCExceptionNO)
- return;
- EmbedVerticalSeparationPattern(vspSize, matrix->GetHeight() - vspSize, matrix,
- e);
- if (e != BCExceptionNO)
- return;
-}
-void CBC_QRCoderMatrixUtil::MaybeEmbedPositionAdjustmentPatterns(
- int32_t version,
- CBC_CommonByteMatrix* matrix,
- int32_t& e) {
- if (!matrix) {
- e = BCExceptionNullPointer;
- return;
- }
- if (version < 2) {
- return;
- }
- int32_t index = version - 1;
- int32_t const* coordinates =
- &(POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index][0]);
- int32_t numCoordinate = 7;
- for (int32_t i = 0; i < numCoordinate; i++) {
- for (int32_t j = 0; j < numCoordinate; j++) {
- int32_t y = coordinates[i];
- int32_t x = coordinates[j];
- if (x == -1 || y == -1) {
- continue;
- }
- if (IsEmpty(matrix->Get(x, y))) {
- EmbedPositionAdjustmentPattern(x - 2, y - 2, matrix, e);
- if (e != BCExceptionNO)
- return;
- }
- }
- }
-}
-int32_t CBC_QRCoderMatrixUtil::FindMSBSet(int32_t value) {
- int32_t numDigits = 0;
- while (value != 0) {
- value >>= 1;
- ++numDigits;
- }
- return numDigits;
-}
-CBC_QRCoderMatrixUtil::CBC_QRCoderMatrixUtil() {}
-CBC_QRCoderMatrixUtil::~CBC_QRCoderMatrixUtil() {}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h b/xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h
deleted file mode 100644
index 3ce4b7510b..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderMatrixUtil.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERMATRIXUTIL_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERMATRIXUTIL_H_
-
-class CBC_CommonByteMatrix;
-class CBC_QRCoderErrorCorrectionLevel;
-class CBC_QRCoderBitVector;
-class CBC_QRCoderMatrixUtil {
- private:
- static const int32_t POSITION_DETECTION_PATTERN[7][7];
- static const int32_t VERTICAL_SEPARATION_PATTERN[7][1];
- static const int32_t HORIZONTAL_SEPARATION_PATTERN[1][8];
- static const int32_t POSITION_ADJUSTMENT_PATTERN[5][5];
- static const int32_t POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[40][7];
- static const int32_t TYPE_INFO_COORDINATES[15][2];
- static const int32_t VERSION_INFO_POLY;
- static const int32_t TYPE_INFO_POLY;
- static const int32_t TYPE_INFO_MASK_PATTERN;
-
- public:
- CBC_QRCoderMatrixUtil();
- virtual ~CBC_QRCoderMatrixUtil();
- static void ClearMatrix(CBC_CommonByteMatrix* matrix, int32_t& e);
- static void BuildMatrix(CBC_QRCoderBitVector* dataBits,
- CBC_QRCoderErrorCorrectionLevel* ecLevel,
- int32_t version,
- int32_t maskPattern,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void EmbedBasicPatterns(int32_t version,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void EmbedTypeInfo(CBC_QRCoderErrorCorrectionLevel* ecLevel,
- int32_t maskPattern,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void EmbedDataBits(CBC_QRCoderBitVector* dataBits,
- int32_t maskPattern,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void MaybeEmbedVersionInfo(int32_t version,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static int32_t FindMSBSet(int32_t value);
- static int32_t CalculateBCHCode(int32_t code, int32_t poly);
- static void MakeTypeInfoBits(CBC_QRCoderErrorCorrectionLevel* ecLevel,
- int32_t maskPattern,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static void MakeVersionInfoBits(int32_t version,
- CBC_QRCoderBitVector* bits,
- int32_t& e);
- static bool IsEmpty(int32_t value);
- static bool IsValidValue(int32_t value);
- static void EmbedTimingPatterns(CBC_CommonByteMatrix* matrix, int32_t& e);
- static void EmbedDarkDotAtLeftBottomCorner(CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void EmbedHorizontalSeparationPattern(int32_t xStart,
- int32_t yStart,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void EmbedVerticalSeparationPattern(int32_t xStart,
- int32_t yStart,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void EmbedPositionAdjustmentPattern(int32_t xStart,
- int32_t yStart,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void EmbedPositionDetectionPattern(int32_t xStart,
- int32_t yStart,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void EmbedPositionDetectionPatternsAndSeparators(
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
- static void MaybeEmbedPositionAdjustmentPatterns(int32_t version,
- CBC_CommonByteMatrix* matrix,
- int32_t& e);
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERMATRIXUTIL_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderMode.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderMode.cpp
deleted file mode 100644
index a1283dda93..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderMode.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2007 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/qrcode/BC_QRCoderMode.h"
-
-#include <utility>
-
-#include "xfa/fxbarcode/qrcode/BC_QRCoderVersion.h"
-#include "xfa/fxbarcode/utils.h"
-
-CBC_QRCoderMode* CBC_QRCoderMode::sBYTE = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sNUMERIC = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sALPHANUMERIC = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sKANJI = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sECI = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sGBK = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sTERMINATOR = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sFNC1_FIRST_POSITION = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sFNC1_SECOND_POSITION = nullptr;
-CBC_QRCoderMode* CBC_QRCoderMode::sSTRUCTURED_APPEND = nullptr;
-
-CBC_QRCoderMode::CBC_QRCoderMode(std::vector<int32_t> charCountBits,
- int32_t bits,
- CFX_ByteString name)
- : m_characterCountBitsForVersions(std::move(charCountBits)),
- m_bits(bits),
- m_name(name) {}
-
-CBC_QRCoderMode::~CBC_QRCoderMode() {}
-
-void CBC_QRCoderMode::Initialize() {
- sBYTE = new CBC_QRCoderMode({8, 16, 16}, 0x4, "BYTE");
- sALPHANUMERIC = new CBC_QRCoderMode({9, 11, 13}, 0x2, "ALPHANUMERIC");
- sECI = new CBC_QRCoderMode(std::vector<int32_t>(), 0x7, "ECI");
- sKANJI = new CBC_QRCoderMode({8, 10, 12}, 0x8, "KANJI");
- sNUMERIC = new CBC_QRCoderMode({10, 12, 14}, 0x1, "NUMERIC");
- sGBK = new CBC_QRCoderMode({8, 10, 12}, 0x0D, "GBK");
- sTERMINATOR = new CBC_QRCoderMode(std::vector<int32_t>(), 0x00, "TERMINATOR");
- sFNC1_FIRST_POSITION =
- new CBC_QRCoderMode(std::vector<int32_t>(), 0x05, "FNC1_FIRST_POSITION");
- sFNC1_SECOND_POSITION =
- new CBC_QRCoderMode(std::vector<int32_t>(), 0x09, "FNC1_SECOND_POSITION");
- sSTRUCTURED_APPEND =
- new CBC_QRCoderMode(std::vector<int32_t>(), 0x03, "STRUCTURED_APPEND");
-}
-
-void CBC_QRCoderMode::Finalize() {
- delete sBYTE;
- delete sALPHANUMERIC;
- delete sECI;
- delete sKANJI;
- delete sNUMERIC;
- delete sGBK;
- delete sTERMINATOR;
- delete sFNC1_FIRST_POSITION;
- delete sFNC1_SECOND_POSITION;
- delete sSTRUCTURED_APPEND;
-}
-
-CBC_QRCoderMode* CBC_QRCoderMode::ForBits(int32_t bits, int32_t& e) {
- switch (bits) {
- case 0x0:
- return sTERMINATOR;
- case 0x1:
- return sNUMERIC;
- case 0x2:
- return sALPHANUMERIC;
- case 0x3:
- return sSTRUCTURED_APPEND;
- case 0x4:
- return sBYTE;
- case 0x5:
- return sFNC1_FIRST_POSITION;
- case 0x7:
- return sECI;
- case 0x8:
- return sKANJI;
- case 0x9:
- return sFNC1_SECOND_POSITION;
- case 0x0D:
- return sGBK;
- default:
- e = BCExceptionUnsupportedMode;
- return nullptr;
- }
-}
-
-int32_t CBC_QRCoderMode::GetBits() const {
- return m_bits;
-}
-
-CFX_ByteString CBC_QRCoderMode::GetName() const {
- return m_name;
-}
-
-int32_t CBC_QRCoderMode::GetCharacterCountBits(CBC_QRCoderVersion* version,
- int32_t& e) const {
- if (m_characterCountBitsForVersions.empty()) {
- e = BCExceptionCharacterNotThisMode;
- return 0;
- }
- int32_t number = version->GetVersionNumber();
- int32_t offset;
- if (number <= 9) {
- offset = 0;
- } else if (number <= 26) {
- offset = 1;
- } else {
- offset = 2;
- }
- return m_characterCountBitsForVersions[offset];
-}
-
-void CBC_QRCoderMode::Destroy() {
- if (sBYTE) {
- delete CBC_QRCoderMode::sBYTE;
- sBYTE = nullptr;
- }
- if (sNUMERIC) {
- delete CBC_QRCoderMode::sNUMERIC;
- sNUMERIC = nullptr;
- }
- if (sALPHANUMERIC) {
- delete CBC_QRCoderMode::sALPHANUMERIC;
- sALPHANUMERIC = nullptr;
- }
- if (sKANJI) {
- delete CBC_QRCoderMode::sKANJI;
- sKANJI = nullptr;
- }
- if (sECI) {
- delete CBC_QRCoderMode::sECI;
- sECI = nullptr;
- }
- if (sGBK) {
- delete CBC_QRCoderMode::sGBK;
- sGBK = nullptr;
- }
- if (sTERMINATOR) {
- delete CBC_QRCoderMode::sTERMINATOR;
- sTERMINATOR = nullptr;
- }
- if (sFNC1_FIRST_POSITION) {
- delete CBC_QRCoderMode::sFNC1_FIRST_POSITION;
- sFNC1_FIRST_POSITION = nullptr;
- }
- if (sFNC1_SECOND_POSITION) {
- delete CBC_QRCoderMode::sFNC1_SECOND_POSITION;
- sFNC1_SECOND_POSITION = nullptr;
- }
- if (sSTRUCTURED_APPEND) {
- delete CBC_QRCoderMode::sSTRUCTURED_APPEND;
- sSTRUCTURED_APPEND = nullptr;
- }
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderMode.h b/xfa/fxbarcode/qrcode/BC_QRCoderMode.h
deleted file mode 100644
index f876d81f03..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderMode.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERMODE_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERMODE_H_
-
-#include <stdint.h>
-
-#include <vector>
-
-#include "core/fxcrt/fx_string.h"
-
-class CBC_QRCoderVersion;
-
-class CBC_QRCoderMode {
- public:
- virtual ~CBC_QRCoderMode();
-
- static void Initialize();
- static void Finalize();
- static CBC_QRCoderMode* ForBits(int32_t bits, int32_t& e);
- static void Destroy();
-
- int32_t GetCharacterCountBits(CBC_QRCoderVersion* version, int32_t& e) const;
- int32_t GetBits() const;
- CFX_ByteString GetName() const;
-
- static CBC_QRCoderMode* sBYTE;
- static CBC_QRCoderMode* sNUMERIC;
- static CBC_QRCoderMode* sALPHANUMERIC;
- static CBC_QRCoderMode* sKANJI;
- static CBC_QRCoderMode* sECI;
- static CBC_QRCoderMode* sGBK;
- static CBC_QRCoderMode* sTERMINATOR;
- static CBC_QRCoderMode* sFNC1_FIRST_POSITION;
- static CBC_QRCoderMode* sFNC1_SECOND_POSITION;
- static CBC_QRCoderMode* sSTRUCTURED_APPEND;
-
- private:
- CBC_QRCoderMode();
- CBC_QRCoderMode(std::vector<int32_t> charCountBits,
- int32_t bits,
- CFX_ByteString name);
-
- std::vector<int32_t> m_characterCountBitsForVersions;
- const int32_t m_bits;
- const CFX_ByteString m_name;
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERMODE_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderVersion.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderVersion.cpp
deleted file mode 100644
index da13700ae2..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderVersion.cpp
+++ /dev/null
@@ -1,794 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-// Original code is licensed as follows:
-/*
- * Copyright 2007 ZXing authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "xfa/fxbarcode/common/BC_CommonBitMatrix.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderBitVector.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderECB.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
-#include "xfa/fxbarcode/qrcode/BC_QRCoderVersion.h"
-#include "xfa/fxbarcode/utils.h"
-
-namespace {
-
-const uint8_t BITS_SET_IN_HALF_BYTE[] = {0, 1, 1, 2, 1, 2, 2, 3,
- 1, 2, 2, 3, 2, 3, 3, 4};
-
-int32_t NumBitsDiffering(int32_t a, int32_t b) {
- a ^= b;
- return BITS_SET_IN_HALF_BYTE[a & 0x0F] +
- BITS_SET_IN_HALF_BYTE[(a >> 4) & 0x0F] +
- BITS_SET_IN_HALF_BYTE[(a >> 8) & 0x0F] +
- BITS_SET_IN_HALF_BYTE[(a >> 12) & 0x0F] +
- BITS_SET_IN_HALF_BYTE[(a >> 16) & 0x0F] +
- BITS_SET_IN_HALF_BYTE[(a >> 20) & 0x0F] +
- BITS_SET_IN_HALF_BYTE[(a >> 24) & 0x0F] +
- BITS_SET_IN_HALF_BYTE[(a >> 28) & 0x0F];
-}
-
-} // namespace
-
-const int32_t CBC_QRCoderVersion::VERSION_DECODE_INFO[] = {
- 0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847,
- 0x0E60D, 0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6,
- 0x15683, 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E,
- 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA,
- 0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69};
-
-std::vector<CBC_QRCoderVersion*>* CBC_QRCoderVersion::VERSION = nullptr;
-
-void CBC_QRCoderVersion::Initialize() {
- VERSION = new std::vector<CBC_QRCoderVersion*>();
-}
-void CBC_QRCoderVersion::Finalize() {
- for (size_t i = 0; i < VERSION->size(); i++)
- delete (*VERSION)[i];
-
- delete VERSION;
- VERSION = nullptr;
-}
-CBC_QRCoderVersion::CBC_QRCoderVersion(int32_t versionNumber,
- CBC_QRCoderECBlocks* ecBlocks1,
- CBC_QRCoderECBlocks* ecBlocks2,
- CBC_QRCoderECBlocks* ecBlocks3,
- CBC_QRCoderECBlocks* ecBlocks4) {
- m_versionNumber = versionNumber;
- m_ecBlocksArray.push_back(ecBlocks1);
- m_ecBlocksArray.push_back(ecBlocks2);
- m_ecBlocksArray.push_back(ecBlocks3);
- m_ecBlocksArray.push_back(ecBlocks4);
- int32_t total = 0;
- int32_t ecCodeWords = ecBlocks1->GetECCodeWordsPerBlock();
- std::vector<CBC_QRCoderECB*>* ecbArray = ecBlocks1->GetECBlocks();
- for (size_t i = 0; i < ecbArray->size(); i++) {
- CBC_QRCoderECB* ecBlock = (*ecbArray)[i];
- total += ecBlock->GetCount() * (ecBlock->GetDataCodeWords() + ecCodeWords);
- }
- m_totalCodeWords = total;
- switch (versionNumber) {
- case 1:
- break;
- case 2:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(18);
- break;
- case 3:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(22);
- break;
- case 4:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- break;
- case 5:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- break;
- case 6:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(34);
- break;
- case 7:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(22);
- m_alignmentPatternCenters.push_back(38);
- break;
- case 8:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(24);
- m_alignmentPatternCenters.push_back(42);
- break;
- case 9:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- m_alignmentPatternCenters.push_back(46);
- break;
- case 10:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(28);
- m_alignmentPatternCenters.push_back(50);
- break;
- case 11:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(54);
- break;
- case 12:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(32);
- m_alignmentPatternCenters.push_back(58);
- break;
- case 13:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(34);
- m_alignmentPatternCenters.push_back(62);
- break;
- case 14:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- m_alignmentPatternCenters.push_back(46);
- m_alignmentPatternCenters.push_back(66);
- break;
- case 15:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- m_alignmentPatternCenters.push_back(48);
- m_alignmentPatternCenters.push_back(70);
- break;
- case 16:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- m_alignmentPatternCenters.push_back(50);
- m_alignmentPatternCenters.push_back(74);
- break;
- case 17:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(54);
- m_alignmentPatternCenters.push_back(78);
- break;
- case 18:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(56);
- m_alignmentPatternCenters.push_back(82);
- break;
- case 19:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(58);
- m_alignmentPatternCenters.push_back(86);
- break;
- case 20:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(34);
- m_alignmentPatternCenters.push_back(62);
- m_alignmentPatternCenters.push_back(90);
- break;
- case 21:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(28);
- m_alignmentPatternCenters.push_back(50);
- m_alignmentPatternCenters.push_back(72);
- m_alignmentPatternCenters.push_back(94);
- break;
- case 22:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- m_alignmentPatternCenters.push_back(50);
- m_alignmentPatternCenters.push_back(74);
- m_alignmentPatternCenters.push_back(98);
- break;
- case 23:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(54);
- m_alignmentPatternCenters.push_back(74);
- m_alignmentPatternCenters.push_back(102);
- break;
- case 24:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(28);
- m_alignmentPatternCenters.push_back(54);
- m_alignmentPatternCenters.push_back(80);
- m_alignmentPatternCenters.push_back(106);
- break;
- case 25:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(32);
- m_alignmentPatternCenters.push_back(58);
- m_alignmentPatternCenters.push_back(84);
- m_alignmentPatternCenters.push_back(110);
- break;
- case 26:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(58);
- m_alignmentPatternCenters.push_back(86);
- m_alignmentPatternCenters.push_back(114);
- break;
- case 27:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(34);
- m_alignmentPatternCenters.push_back(62);
- m_alignmentPatternCenters.push_back(90);
- m_alignmentPatternCenters.push_back(118);
- break;
- case 28:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- m_alignmentPatternCenters.push_back(50);
- m_alignmentPatternCenters.push_back(74);
- m_alignmentPatternCenters.push_back(98);
- m_alignmentPatternCenters.push_back(122);
- break;
- case 29:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(54);
- m_alignmentPatternCenters.push_back(78);
- m_alignmentPatternCenters.push_back(102);
- m_alignmentPatternCenters.push_back(126);
- break;
- case 30:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- m_alignmentPatternCenters.push_back(52);
- m_alignmentPatternCenters.push_back(78);
- m_alignmentPatternCenters.push_back(104);
- m_alignmentPatternCenters.push_back(130);
- break;
- case 31:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(56);
- m_alignmentPatternCenters.push_back(82);
- m_alignmentPatternCenters.push_back(108);
- m_alignmentPatternCenters.push_back(134);
- break;
- case 32:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(34);
- m_alignmentPatternCenters.push_back(60);
- m_alignmentPatternCenters.push_back(86);
- m_alignmentPatternCenters.push_back(112);
- m_alignmentPatternCenters.push_back(138);
- break;
- case 33:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(58);
- m_alignmentPatternCenters.push_back(86);
- m_alignmentPatternCenters.push_back(114);
- m_alignmentPatternCenters.push_back(142);
- break;
- case 34:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(34);
- m_alignmentPatternCenters.push_back(62);
- m_alignmentPatternCenters.push_back(90);
- m_alignmentPatternCenters.push_back(118);
- m_alignmentPatternCenters.push_back(146);
- break;
- case 35:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(54);
- m_alignmentPatternCenters.push_back(78);
- m_alignmentPatternCenters.push_back(102);
- m_alignmentPatternCenters.push_back(126);
- m_alignmentPatternCenters.push_back(150);
- break;
- case 36:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(24);
- m_alignmentPatternCenters.push_back(50);
- m_alignmentPatternCenters.push_back(76);
- m_alignmentPatternCenters.push_back(102);
- m_alignmentPatternCenters.push_back(128);
- m_alignmentPatternCenters.push_back(154);
- break;
- case 37:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(28);
- m_alignmentPatternCenters.push_back(54);
- m_alignmentPatternCenters.push_back(80);
- m_alignmentPatternCenters.push_back(106);
- m_alignmentPatternCenters.push_back(132);
- m_alignmentPatternCenters.push_back(158);
- break;
- case 38:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(32);
- m_alignmentPatternCenters.push_back(58);
- m_alignmentPatternCenters.push_back(84);
- m_alignmentPatternCenters.push_back(110);
- m_alignmentPatternCenters.push_back(136);
- m_alignmentPatternCenters.push_back(162);
- break;
- case 39:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(26);
- m_alignmentPatternCenters.push_back(54);
- m_alignmentPatternCenters.push_back(82);
- m_alignmentPatternCenters.push_back(110);
- m_alignmentPatternCenters.push_back(138);
- m_alignmentPatternCenters.push_back(166);
- break;
- case 40:
- m_alignmentPatternCenters.push_back(6);
- m_alignmentPatternCenters.push_back(30);
- m_alignmentPatternCenters.push_back(58);
- m_alignmentPatternCenters.push_back(86);
- m_alignmentPatternCenters.push_back(114);
- m_alignmentPatternCenters.push_back(142);
- m_alignmentPatternCenters.push_back(170);
- break;
- }
-}
-
-CBC_QRCoderVersion::~CBC_QRCoderVersion() {
- for (size_t i = 0; i < m_ecBlocksArray.size(); ++i)
- delete m_ecBlocksArray[i];
-}
-
-int32_t CBC_QRCoderVersion::GetVersionNumber() {
- return m_versionNumber;
-}
-std::vector<int32_t>* CBC_QRCoderVersion::GetAlignmentPatternCenters() {
- return &m_alignmentPatternCenters;
-}
-int32_t CBC_QRCoderVersion::GetTotalCodeWords() {
- return m_totalCodeWords;
-}
-int32_t CBC_QRCoderVersion::GetDimensionForVersion() {
- return 17 + 4 * m_versionNumber;
-}
-CBC_QRCoderECBlocks* CBC_QRCoderVersion::GetECBlocksForLevel(
- CBC_QRCoderErrorCorrectionLevel* ecLevel) {
- return m_ecBlocksArray[ecLevel->Ordinal()];
-}
-CBC_QRCoderVersion* CBC_QRCoderVersion::GetProvisionalVersionForDimension(
- int32_t dimension,
- int32_t& e) {
- if ((dimension % 4) != 1) {
- e = BCExceptionRead;
- return nullptr;
- }
- CBC_QRCoderVersion* qcv = GetVersionForNumber((dimension - 17) >> 2, e);
- if (e != BCExceptionNO)
- return nullptr;
- return qcv;
-}
-CBC_QRCoderVersion* CBC_QRCoderVersion::DecodeVersionInformation(
- int32_t versionBits,
- int32_t& e) {
- int32_t bestDifference = FXSYS_IntMax;
- int32_t bestVersion = 0;
- for (int32_t i = 0; i < 34; i++) {
- int32_t targetVersion = VERSION_DECODE_INFO[i];
- if (targetVersion == versionBits) {
- CBC_QRCoderVersion* qcv = GetVersionForNumber(i + 7, e);
- if (e != BCExceptionNO)
- return nullptr;
- return qcv;
- }
- int32_t bitsDifference = NumBitsDiffering(versionBits, targetVersion);
- if (bitsDifference < bestDifference) {
- bestVersion = i + 7;
- bestDifference = bitsDifference;
- }
- }
- if (bestDifference <= 3) {
- CBC_QRCoderVersion* qcv = GetVersionForNumber(bestVersion, e);
- if (e != BCExceptionNO)
- return nullptr;
- return qcv;
- }
- return nullptr;
-}
-CBC_CommonBitMatrix* CBC_QRCoderVersion::BuildFunctionPattern(int32_t& e) {
- int32_t dimension = GetDimensionForVersion();
- CBC_CommonBitMatrix* bitMatrix = new CBC_CommonBitMatrix();
- bitMatrix->Init(dimension);
- bitMatrix->SetRegion(0, 0, 9, 9, e);
- if (e != BCExceptionNO)
- return nullptr;
- bitMatrix->SetRegion(dimension - 8, 0, 8, 9, e);
- if (e != BCExceptionNO)
- return nullptr;
- bitMatrix->SetRegion(0, dimension - 8, 9, 8, e);
- if (e != BCExceptionNO)
- return nullptr;
- size_t max = m_alignmentPatternCenters.size();
- for (size_t x = 0; x < max; x++) {
- int32_t i = m_alignmentPatternCenters[x] - 2;
- for (size_t y = 0; y < max; y++) {
- if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) {
- continue;
- }
- bitMatrix->SetRegion(m_alignmentPatternCenters[y] - 2, i, 5, 5, e);
- if (e != BCExceptionNO)
- return nullptr;
- }
- }
- bitMatrix->SetRegion(6, 9, 1, dimension - 17, e);
- if (e != BCExceptionNO)
- return nullptr;
- bitMatrix->SetRegion(9, 6, dimension - 17, 1, e);
- if (e != BCExceptionNO)
- return nullptr;
- if (m_versionNumber > 6) {
- bitMatrix->SetRegion(dimension - 11, 0, 3, 6, e);
- if (e != BCExceptionNO)
- return nullptr;
- bitMatrix->SetRegion(0, dimension - 11, 6, 3, e);
- if (e != BCExceptionNO)
- return nullptr;
- }
- return bitMatrix;
-}
-CBC_QRCoderVersion* CBC_QRCoderVersion::GetVersionForNumber(
- int32_t versionNumber,
- int32_t& e) {
- if (VERSION->empty()) {
- VERSION->push_back(new CBC_QRCoderVersion(
- 1, new CBC_QRCoderECBlocks(7, new CBC_QRCoderECB(1, 19)),
- new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 16)),
- new CBC_QRCoderECBlocks(13, new CBC_QRCoderECB(1, 13)),
- new CBC_QRCoderECBlocks(17, new CBC_QRCoderECB(1, 9))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 2, new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 34)),
- new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(1, 28)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(1, 22)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 3, new CBC_QRCoderECBlocks(15, new CBC_QRCoderECB(1, 55)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 44)),
- new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 17)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 13))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 4, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(1, 80)),
- new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 32)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(2, 24)),
- new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 9))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 5, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 108)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 43)),
- new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 15),
- new CBC_QRCoderECB(2, 16)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 11),
- new CBC_QRCoderECB(2, 12))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 6, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68)),
- new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 27)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 19)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 15))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 7, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(2, 78)),
- new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(4, 31)),
- new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 14),
- new CBC_QRCoderECB(4, 15)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 13),
- new CBC_QRCoderECB(1, 14))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 8, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 97)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 38),
- new CBC_QRCoderECB(2, 39)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(4, 18),
- new CBC_QRCoderECB(2, 19)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 14),
- new CBC_QRCoderECB(2, 15))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 9, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 116)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(3, 36),
- new CBC_QRCoderECB(2, 37)),
- new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 16),
- new CBC_QRCoderECB(4, 17)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 12),
- new CBC_QRCoderECB(4, 13))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 10, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68),
- new CBC_QRCoderECB(2, 69)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 43),
- new CBC_QRCoderECB(1, 44)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(6, 19),
- new CBC_QRCoderECB(2, 20)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 15),
- new CBC_QRCoderECB(2, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 11, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 81)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 50),
- new CBC_QRCoderECB(4, 51)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 22),
- new CBC_QRCoderECB(4, 23)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(3, 12),
- new CBC_QRCoderECB(8, 13))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 12, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 92),
- new CBC_QRCoderECB(2, 93)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(6, 36),
- new CBC_QRCoderECB(2, 37)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 20),
- new CBC_QRCoderECB(6, 21)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 14),
- new CBC_QRCoderECB(4, 15))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 13, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 107)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(8, 37),
- new CBC_QRCoderECB(1, 38)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(8, 20),
- new CBC_QRCoderECB(4, 21)),
- new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(12, 11),
- new CBC_QRCoderECB(4, 12))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 14, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 115),
- new CBC_QRCoderECB(1, 116)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 40),
- new CBC_QRCoderECB(5, 41)),
- new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(11, 16),
- new CBC_QRCoderECB(5, 17)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
- new CBC_QRCoderECB(5, 13))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 15, new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(5, 87),
- new CBC_QRCoderECB(1, 88)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 41),
- new CBC_QRCoderECB(5, 42)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 24),
- new CBC_QRCoderECB(7, 25)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
- new CBC_QRCoderECB(7, 13))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 16, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 98),
- new CBC_QRCoderECB(1, 99)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 45),
- new CBC_QRCoderECB(3, 46)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(15, 19),
- new CBC_QRCoderECB(2, 20)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 15),
- new CBC_QRCoderECB(13, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 17, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 107),
- new CBC_QRCoderECB(5, 108)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
- new CBC_QRCoderECB(1, 47)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 22),
- new CBC_QRCoderECB(15, 23)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
- new CBC_QRCoderECB(17, 15))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 18, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 120),
- new CBC_QRCoderECB(1, 121)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 43),
- new CBC_QRCoderECB(4, 44)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
- new CBC_QRCoderECB(1, 23)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
- new CBC_QRCoderECB(19, 15))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 19, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 113),
- new CBC_QRCoderECB(4, 114)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 44),
- new CBC_QRCoderECB(11, 45)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 21),
- new CBC_QRCoderECB(4, 22)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 13),
- new CBC_QRCoderECB(16, 14))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 20, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 107),
- new CBC_QRCoderECB(5, 108)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 41),
- new CBC_QRCoderECB(13, 42)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
- new CBC_QRCoderECB(5, 25)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(15, 15),
- new CBC_QRCoderECB(10, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 21, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 116),
- new CBC_QRCoderECB(4, 117)),
- new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 42)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
- new CBC_QRCoderECB(6, 23)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 16),
- new CBC_QRCoderECB(6, 17))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 22, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 111),
- new CBC_QRCoderECB(7, 112)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 46)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
- new CBC_QRCoderECB(16, 25)),
- new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(34, 13))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 23, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 121),
- new CBC_QRCoderECB(5, 122)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 47),
- new CBC_QRCoderECB(14, 48)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
- new CBC_QRCoderECB(14, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(16, 15),
- new CBC_QRCoderECB(14, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 24, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 117),
- new CBC_QRCoderECB(4, 118)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 45),
- new CBC_QRCoderECB(14, 46)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
- new CBC_QRCoderECB(16, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(30, 16),
- new CBC_QRCoderECB(2, 17))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 25, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(8, 106),
- new CBC_QRCoderECB(4, 107)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(8, 47),
- new CBC_QRCoderECB(13, 48)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
- new CBC_QRCoderECB(22, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
- new CBC_QRCoderECB(13, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 26, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 114),
- new CBC_QRCoderECB(2, 115)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 46),
- new CBC_QRCoderECB(4, 47)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(28, 22),
- new CBC_QRCoderECB(6, 23)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(33, 16),
- new CBC_QRCoderECB(4, 17))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 27, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 122),
- new CBC_QRCoderECB(4, 123)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(22, 45),
- new CBC_QRCoderECB(3, 46)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 23),
- new CBC_QRCoderECB(26, 24)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 15),
- new CBC_QRCoderECB(28, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 28, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 117),
- new CBC_QRCoderECB(10, 118)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 45),
- new CBC_QRCoderECB(23, 46)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 24),
- new CBC_QRCoderECB(31, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
- new CBC_QRCoderECB(31, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 29, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 116),
- new CBC_QRCoderECB(7, 117)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(21, 45),
- new CBC_QRCoderECB(7, 46)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 23),
- new CBC_QRCoderECB(37, 24)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
- new CBC_QRCoderECB(26, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 30, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 115),
- new CBC_QRCoderECB(10, 116)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 47),
- new CBC_QRCoderECB(10, 48)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
- new CBC_QRCoderECB(25, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
- new CBC_QRCoderECB(25, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 31, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
- new CBC_QRCoderECB(3, 116)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 46),
- new CBC_QRCoderECB(29, 47)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 24),
- new CBC_QRCoderECB(1, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
- new CBC_QRCoderECB(28, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 32, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
- new CBC_QRCoderECB(23, 47)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 24),
- new CBC_QRCoderECB(35, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
- new CBC_QRCoderECB(35, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 33, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115),
- new CBC_QRCoderECB(1, 116)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
- new CBC_QRCoderECB(21, 47)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(29, 24),
- new CBC_QRCoderECB(19, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
- new CBC_QRCoderECB(46, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 34, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
- new CBC_QRCoderECB(6, 116)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
- new CBC_QRCoderECB(23, 47)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(44, 24),
- new CBC_QRCoderECB(7, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(59, 16),
- new CBC_QRCoderECB(1, 17))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 35, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 121),
- new CBC_QRCoderECB(7, 122)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(12, 47),
- new CBC_QRCoderECB(26, 48)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(39, 24),
- new CBC_QRCoderECB(14, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
- new CBC_QRCoderECB(41, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 36, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 121),
- new CBC_QRCoderECB(14, 122)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 47),
- new CBC_QRCoderECB(34, 48)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(46, 24),
- new CBC_QRCoderECB(10, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 15),
- new CBC_QRCoderECB(64, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 37, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 122),
- new CBC_QRCoderECB(4, 123)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(29, 46),
- new CBC_QRCoderECB(14, 47)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(49, 24),
- new CBC_QRCoderECB(10, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(24, 15),
- new CBC_QRCoderECB(46, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 38, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 122),
- new CBC_QRCoderECB(18, 123)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(13, 46),
- new CBC_QRCoderECB(32, 47)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(48, 24),
- new CBC_QRCoderECB(14, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 15),
- new CBC_QRCoderECB(32, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 39, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 117),
- new CBC_QRCoderECB(4, 118)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(40, 47),
- new CBC_QRCoderECB(7, 48)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(43, 24),
- new CBC_QRCoderECB(22, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 15),
- new CBC_QRCoderECB(67, 16))));
- VERSION->push_back(new CBC_QRCoderVersion(
- 40, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 118),
- new CBC_QRCoderECB(6, 119)),
- new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(18, 47),
- new CBC_QRCoderECB(31, 48)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(34, 24),
- new CBC_QRCoderECB(34, 25)),
- new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 15),
- new CBC_QRCoderECB(61, 16))));
- }
- if (versionNumber < 1 || versionNumber > 40) {
- e = BCExceptionIllegalArgument;
- return nullptr;
- }
- return (*VERSION)[versionNumber - 1];
-}
-
-void CBC_QRCoderVersion::Destroy() {
- for (size_t i = 0; i < VERSION->size(); i++)
- delete (*VERSION)[i];
- VERSION->clear();
-}
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderVersion.h b/xfa/fxbarcode/qrcode/BC_QRCoderVersion.h
deleted file mode 100644
index 853a93ed0c..0000000000
--- a/xfa/fxbarcode/qrcode/BC_QRCoderVersion.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2014 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_
-#define XFA_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_
-
-#include <vector>
-
-#include "core/fxcrt/fx_basic.h"
-
-class CBC_CommonBitMatrix;
-class CBC_QRCoderECBlocks;
-class CBC_QRCoderErrorCorrectionLevel;
-
-class CBC_QRCoderVersion {
- public:
- virtual ~CBC_QRCoderVersion();
- static void Initialize();
- static void Finalize();
-
- int32_t GetVersionNumber();
- int32_t GetTotalCodeWords();
- int32_t GetDimensionForVersion();
- CBC_CommonBitMatrix* BuildFunctionPattern(int32_t& e);
- std::vector<int32_t>* GetAlignmentPatternCenters();
- CBC_QRCoderECBlocks* GetECBlocksForLevel(
- CBC_QRCoderErrorCorrectionLevel* ecLevel);
- static CBC_QRCoderVersion* GetVersionForNumber(int32_t versionNumber,
- int32_t& e);
- static CBC_QRCoderVersion* GetProvisionalVersionForDimension(
- int32_t dimension,
- int32_t& e);
- static CBC_QRCoderVersion* DecodeVersionInformation(int32_t versionBits,
- int32_t& e);
- static void Destroy();
-
- private:
- CBC_QRCoderVersion();
- CBC_QRCoderVersion(int32_t versionNumber,
- CBC_QRCoderECBlocks* ecBlocks1,
- CBC_QRCoderECBlocks* ecBlocks2,
- CBC_QRCoderECBlocks* ecBlocks3,
- CBC_QRCoderECBlocks* ecBlocks4);
-
- static const int32_t VERSION_DECODE_INFO[34];
- static std::vector<CBC_QRCoderVersion*>* VERSION;
-
- int32_t m_versionNumber;
- int32_t m_totalCodeWords;
- std::vector<int32_t> m_alignmentPatternCenters;
- std::vector<CBC_QRCoderECBlocks*> m_ecBlocksArray;
-};
-
-#endif // XFA_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_