OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 // Original code is licensed as follows: | 6 // Original code is licensed as follows: |
7 /* | 7 /* |
8 * Copyright 2008 ZXing authors | 8 * Copyright 2008 ZXing authors |
9 * | 9 * |
10 * Licensed under the Apache License, Version 2.0 (the "License"); | 10 * Licensed under the Apache License, Version 2.0 (the "License"); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 if (tempMode == CBC_QRCoderMode::sGBK) { | 88 if (tempMode == CBC_QRCoderMode::sGBK) { |
89 AppendModeInfo(tempMode, &headerAndDataBits, e); | 89 AppendModeInfo(tempMode, &headerAndDataBits, e); |
90 BC_EXCEPTION_CHECK_ReturnVoid(e); | 90 BC_EXCEPTION_CHECK_ReturnVoid(e); |
91 AppendLengthInfo(splitResult.second.GetLength(), qrCode->GetVersion(), | 91 AppendLengthInfo(splitResult.second.GetLength(), qrCode->GetVersion(), |
92 tempMode, &headerAndDataBits, e); | 92 tempMode, &headerAndDataBits, e); |
93 BC_EXCEPTION_CHECK_ReturnVoid(e); | 93 BC_EXCEPTION_CHECK_ReturnVoid(e); |
94 AppendBytes(splitResult.second, tempMode, &headerAndDataBits, encoding, | 94 AppendBytes(splitResult.second, tempMode, &headerAndDataBits, encoding, |
95 e); | 95 e); |
96 BC_EXCEPTION_CHECK_ReturnVoid(e); | 96 BC_EXCEPTION_CHECK_ReturnVoid(e); |
97 } else if (tempMode == CBC_QRCoderMode::sBYTE) { | 97 } else if (tempMode == CBC_QRCoderMode::sBYTE) { |
98 CFX_ByteArray bytes; | 98 CFX_ArrayTemplate<uint8_t> bytes; |
99 CBC_UtilCodingConvert::LocaleToUtf8(splitResult.second, bytes); | 99 CBC_UtilCodingConvert::LocaleToUtf8(splitResult.second, bytes); |
100 AppendModeInfo(tempMode, &headerAndDataBits, e); | 100 AppendModeInfo(tempMode, &headerAndDataBits, e); |
101 BC_EXCEPTION_CHECK_ReturnVoid(e); | 101 BC_EXCEPTION_CHECK_ReturnVoid(e); |
102 AppendLengthInfo(bytes.GetSize(), qrCode->GetVersion(), tempMode, | 102 AppendLengthInfo(bytes.GetSize(), qrCode->GetVersion(), tempMode, |
103 &headerAndDataBits, e); | 103 &headerAndDataBits, e); |
104 BC_EXCEPTION_CHECK_ReturnVoid(e); | 104 BC_EXCEPTION_CHECK_ReturnVoid(e); |
105 Append8BitBytes(bytes, &headerAndDataBits, e); | 105 Append8BitBytes(bytes, &headerAndDataBits, e); |
106 BC_EXCEPTION_CHECK_ReturnVoid(e); | 106 BC_EXCEPTION_CHECK_ReturnVoid(e); |
107 } else if (tempMode == CBC_QRCoderMode::sALPHANUMERIC) { | 107 } else if (tempMode == CBC_QRCoderMode::sALPHANUMERIC) { |
108 AppendModeInfo(tempMode, &headerAndDataBits, e); | 108 AppendModeInfo(tempMode, &headerAndDataBits, e); |
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
715 void CBC_QRCoderEncoder::Append8BitBytes(const CFX_ByteString& content, | 715 void CBC_QRCoderEncoder::Append8BitBytes(const CFX_ByteString& content, |
716 CBC_QRCoderBitVector* bits, | 716 CBC_QRCoderBitVector* bits, |
717 CFX_ByteString encoding, | 717 CFX_ByteString encoding, |
718 int32_t& e) { | 718 int32_t& e) { |
719 for (int32_t i = 0; i < content.GetLength(); i++) { | 719 for (int32_t i = 0; i < content.GetLength(); i++) { |
720 bits->AppendBits(content[i], 8, e); | 720 bits->AppendBits(content[i], 8, e); |
721 BC_EXCEPTION_CHECK_ReturnVoid(e); | 721 BC_EXCEPTION_CHECK_ReturnVoid(e); |
722 } | 722 } |
723 } | 723 } |
724 | 724 |
725 void CBC_QRCoderEncoder::Append8BitBytes(CFX_ByteArray& bytes, | 725 void CBC_QRCoderEncoder::Append8BitBytes(CFX_ArrayTemplate<uint8_t>& bytes, |
726 CBC_QRCoderBitVector* bits, | 726 CBC_QRCoderBitVector* bits, |
727 int32_t& e) { | 727 int32_t& e) { |
728 for (int32_t i = 0; i < bytes.GetSize(); i++) { | 728 for (int32_t i = 0; i < bytes.GetSize(); i++) { |
729 bits->AppendBits(bytes[i], 8, e); | 729 bits->AppendBits(bytes[i], 8, e); |
730 BC_EXCEPTION_CHECK_ReturnVoid(e); | 730 BC_EXCEPTION_CHECK_ReturnVoid(e); |
731 } | 731 } |
732 } | 732 } |
733 | 733 |
734 void CBC_QRCoderEncoder::AppendKanjiBytes(const CFX_ByteString& content, | 734 void CBC_QRCoderEncoder::AppendKanjiBytes(const CFX_ByteString& content, |
735 CBC_QRCoderBitVector* bits, | 735 CBC_QRCoderBitVector* bits, |
736 int32_t& e) { | 736 int32_t& e) { |
737 CFX_ByteArray bytes; | 737 CFX_ArrayTemplate<uint8_t> bytes; |
738 uint32_t value = 0; | 738 uint32_t value = 0; |
739 for (int32_t i = 0; i < bytes.GetSize(); i += 2) { | 739 for (int32_t i = 0; i < bytes.GetSize(); i += 2) { |
740 value = (uint32_t)((uint8_t)(content[i] << 8) | (uint8_t)content[i + 1]); | 740 value = (uint32_t)((uint8_t)(content[i] << 8) | (uint8_t)content[i + 1]); |
741 if (value <= 0x9ffc && value >= 0x8140) { | 741 if (value <= 0x9ffc && value >= 0x8140) { |
742 value -= 0x8140; | 742 value -= 0x8140; |
743 } else if (value <= 0xebbf && value >= 0xe040) { | 743 } else if (value <= 0xebbf && value >= 0xe040) { |
744 value -= 0xc140; | 744 value -= 0xc140; |
745 } else { | 745 } else { |
746 e = BCExceptionInvalidateCharacter; | 746 e = BCExceptionInvalidateCharacter; |
747 BC_EXCEPTION_CHECK_ReturnVoid(e); | 747 BC_EXCEPTION_CHECK_ReturnVoid(e); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
900 numDataBytesInBlock = numDataBytesInGroup2; | 900 numDataBytesInBlock = numDataBytesInGroup2; |
901 numECBytesInBlock = numEcBytesInGroup2; | 901 numECBytesInBlock = numEcBytesInGroup2; |
902 } | 902 } |
903 } | 903 } |
904 | 904 |
905 CBC_CommonByteArray* CBC_QRCoderEncoder::GenerateECBytes( | 905 CBC_CommonByteArray* CBC_QRCoderEncoder::GenerateECBytes( |
906 CBC_CommonByteArray* dataBytes, | 906 CBC_CommonByteArray* dataBytes, |
907 int32_t numEcBytesInBlock, | 907 int32_t numEcBytesInBlock, |
908 int32_t& e) { | 908 int32_t& e) { |
909 int32_t numDataBytes = dataBytes->Size(); | 909 int32_t numDataBytes = dataBytes->Size(); |
910 CFX_Int32Array toEncode; | 910 CFX_ArrayTemplate<int32_t> toEncode; |
911 toEncode.SetSize(numDataBytes + numEcBytesInBlock); | 911 toEncode.SetSize(numDataBytes + numEcBytesInBlock); |
912 for (int32_t i = 0; i < numDataBytes; i++) { | 912 for (int32_t i = 0; i < numDataBytes; i++) { |
913 toEncode[i] = (dataBytes->At(i)); | 913 toEncode[i] = (dataBytes->At(i)); |
914 } | 914 } |
915 CBC_ReedSolomonEncoder encode(CBC_ReedSolomonGF256::QRCodeField); | 915 CBC_ReedSolomonEncoder encode(CBC_ReedSolomonGF256::QRCodeField); |
916 encode.Init(); | 916 encode.Init(); |
917 encode.Encode(&toEncode, numEcBytesInBlock, e); | 917 encode.Encode(&toEncode, numEcBytesInBlock, e); |
918 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); | 918 BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
919 CBC_CommonByteArray* ecBytes = new CBC_CommonByteArray(numEcBytesInBlock); | 919 CBC_CommonByteArray* ecBytes = new CBC_CommonByteArray(numEcBytesInBlock); |
920 for (int32_t j = 0; j < numEcBytesInBlock; j++) { | 920 for (int32_t j = 0; j < numEcBytesInBlock; j++) { |
921 ecBytes->Set(j, toEncode[numDataBytes + j]); | 921 ecBytes->Set(j, toEncode[numDataBytes + j]); |
922 } | 922 } |
923 return ecBytes; | 923 return ecBytes; |
924 } | 924 } |
OLD | NEW |