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/datamatrix/BC_C40Encoder.h" 27 #include "fxbarcode/datamatrix/BC_Encoder.h" 28 #include "fxbarcode/datamatrix/BC_EncoderContext.h" 29 #include "fxbarcode/datamatrix/BC_HighLevelEncoder.h" 30 #include "fxbarcode/datamatrix/BC_SymbolInfo.h" 31 32 CBC_TextEncoder::CBC_TextEncoder() = default; 33 34 CBC_TextEncoder::~CBC_TextEncoder() = default; 35 GetEncodingMode()36CBC_HighLevelEncoder::Encoding CBC_TextEncoder::GetEncodingMode() { 37 return CBC_HighLevelEncoder::Encoding::TEXT; 38 } 39 EncodeChar(wchar_t c,WideString * sb)40int32_t CBC_TextEncoder::EncodeChar(wchar_t c, WideString* sb) { 41 if (c == ' ') { 42 *sb += (wchar_t)'\3'; 43 return 1; 44 } 45 if (FXSYS_IsDecimalDigit(c)) { 46 *sb += (wchar_t)(c - 48 + 4); 47 return 1; 48 } 49 if (FXSYS_IsLowerASCII(c)) { 50 *sb += (wchar_t)(c - 97 + 14); 51 return 1; 52 } 53 if (c <= 0x1f) { 54 *sb += (wchar_t)'\0'; 55 *sb += c; 56 return 2; 57 } 58 if (c >= '!' && c <= '/') { 59 *sb += (wchar_t)'\1'; 60 *sb += (wchar_t)(c - 33); 61 return 2; 62 } 63 if (c >= ':' && c <= '@') { 64 *sb += (wchar_t)'\1'; 65 *sb += (wchar_t)(c - 58 + 15); 66 return 2; 67 } 68 if (c >= '[' && c <= '_') { 69 *sb += (wchar_t)'\1'; 70 *sb += (wchar_t)(c - 91 + 22); 71 return 2; 72 } 73 if (c == 0x0060) { 74 *sb += (wchar_t)'\2'; 75 *sb += (wchar_t)(c - 96); 76 return 2; 77 } 78 if (FXSYS_IsUpperASCII(c)) { 79 *sb += (wchar_t)'\2'; 80 *sb += (wchar_t)(c - 65 + 1); 81 return 2; 82 } 83 if (c >= '{' && c <= 0x007f) { 84 *sb += (wchar_t)'\2'; 85 *sb += (wchar_t)(c - 123 + 27); 86 return 2; 87 } 88 if (c < 0x0080) 89 return 0; 90 91 *sb += (wchar_t)'\1'; 92 *sb += (wchar_t)0x001e; 93 int32_t encode_result = EncodeChar(c - 128, sb); 94 return encode_result > 0 ? encode_result + 2 : 0; 95 } 96