1 // Copyright 2014 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 // Original code is licensed as follows: 7 /* 8 * Copyright 2006-2007 Jeremias Maerki. 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); 11 * you may not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 */ 22 23 #include "fxbarcode/datamatrix/BC_TextEncoder.h" 24 25 #include "core/fxcrt/fx_extension.h" 26 #include "fxbarcode/common/BC_CommonBitMatrix.h" 27 #include "fxbarcode/datamatrix/BC_C40Encoder.h" 28 #include "fxbarcode/datamatrix/BC_Encoder.h" 29 #include "fxbarcode/datamatrix/BC_EncoderContext.h" 30 #include "fxbarcode/datamatrix/BC_HighLevelEncoder.h" 31 #include "fxbarcode/datamatrix/BC_SymbolInfo.h" 32 33 CBC_TextEncoder::CBC_TextEncoder() = default; 34 35 CBC_TextEncoder::~CBC_TextEncoder() = default; 36 GetEncodingMode()37CBC_HighLevelEncoder::Encoding CBC_TextEncoder::GetEncodingMode() { 38 return CBC_HighLevelEncoder::Encoding::TEXT; 39 } 40 EncodeChar(wchar_t c,WideString * sb)41int32_t CBC_TextEncoder::EncodeChar(wchar_t c, WideString* sb) { 42 if (c == ' ') { 43 *sb += (wchar_t)'\3'; 44 return 1; 45 } 46 if (FXSYS_IsDecimalDigit(c)) { 47 *sb += (wchar_t)(c - 48 + 4); 48 return 1; 49 } 50 if (FXSYS_IsLowerASCII(c)) { 51 *sb += (wchar_t)(c - 97 + 14); 52 return 1; 53 } 54 if (c <= 0x1f) { 55 *sb += (wchar_t)'\0'; 56 *sb += c; 57 return 2; 58 } 59 if (c >= '!' && c <= '/') { 60 *sb += (wchar_t)'\1'; 61 *sb += (wchar_t)(c - 33); 62 return 2; 63 } 64 if (c >= ':' && c <= '@') { 65 *sb += (wchar_t)'\1'; 66 *sb += (wchar_t)(c - 58 + 15); 67 return 2; 68 } 69 if (c >= '[' && c <= '_') { 70 *sb += (wchar_t)'\1'; 71 *sb += (wchar_t)(c - 91 + 22); 72 return 2; 73 } 74 if (c == 0x0060) { 75 *sb += (wchar_t)'\2'; 76 *sb += (wchar_t)(c - 96); 77 return 2; 78 } 79 if (FXSYS_IsUpperASCII(c)) { 80 *sb += (wchar_t)'\2'; 81 *sb += (wchar_t)(c - 65 + 1); 82 return 2; 83 } 84 if (c >= '{' && c <= 0x007f) { 85 *sb += (wchar_t)'\2'; 86 *sb += (wchar_t)(c - 123 + 27); 87 return 2; 88 } 89 if (c < 0x0080) 90 return 0; 91 92 *sb += (wchar_t)'\1'; 93 *sb += (wchar_t)0x001e; 94 int32_t encode_result = EncodeChar(c - 128, sb); 95 return encode_result > 0 ? encode_result + 2 : 0; 96 } 97