BC_TextEncoder.cpp revision 4d3acf4ec42bf6e838f9060103aff98fbf170794
1// Copyright 2014 PDFium Authors. All rights reserved. 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 "xfa/fxbarcode/BC_Dimension.h" 24#include "xfa/fxbarcode/common/BC_CommonBitMatrix.h" 25#include "xfa/fxbarcode/datamatrix/BC_C40Encoder.h" 26#include "xfa/fxbarcode/datamatrix/BC_Encoder.h" 27#include "xfa/fxbarcode/datamatrix/BC_EncoderContext.h" 28#include "xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h" 29#include "xfa/fxbarcode/datamatrix/BC_SymbolInfo.h" 30#include "xfa/fxbarcode/datamatrix/BC_SymbolShapeHint.h" 31#include "xfa/fxbarcode/datamatrix/BC_TextEncoder.h" 32 33CBC_TextEncoder::CBC_TextEncoder() {} 34CBC_TextEncoder::~CBC_TextEncoder() {} 35int32_t CBC_TextEncoder::getEncodingMode() { 36 return TEXT_ENCODATION; 37} 38int32_t CBC_TextEncoder::encodeChar(FX_WCHAR c, 39 CFX_WideString& sb, 40 int32_t& e) { 41 if (c == ' ') { 42 sb += (FX_WCHAR)'\3'; 43 return 1; 44 } 45 if (c >= '0' && c <= '9') { 46 sb += (FX_WCHAR)(c - 48 + 4); 47 return 1; 48 } 49 if (c >= 'a' && c <= 'z') { 50 sb += (FX_WCHAR)(c - 97 + 14); 51 return 1; 52 } 53 if (c <= 0x1f) { 54 sb += (FX_WCHAR)'\0'; 55 sb += c; 56 return 2; 57 } 58 if (c >= '!' && c <= '/') { 59 sb += (FX_WCHAR)'\1'; 60 sb += (FX_WCHAR)(c - 33); 61 return 2; 62 } 63 if (c >= ':' && c <= '@') { 64 sb += (FX_WCHAR)'\1'; 65 sb += (FX_WCHAR)(c - 58 + 15); 66 return 2; 67 } 68 if (c >= '[' && c <= '_') { 69 sb += (FX_WCHAR)'\1'; 70 sb += (FX_WCHAR)(c - 91 + 22); 71 return 2; 72 } 73 if (c == 0x0060) { 74 sb += (FX_WCHAR)'\2'; 75 sb += (FX_WCHAR)(c - 96); 76 return 2; 77 } 78 if (c >= 'A' && c <= 'Z') { 79 sb += (FX_WCHAR)'\2'; 80 sb += (FX_WCHAR)(c - 65 + 1); 81 return 2; 82 } 83 if (c >= '{' && c <= 0x007f) { 84 sb += (FX_WCHAR)'\2'; 85 sb += (FX_WCHAR)(c - 123 + 27); 86 return 2; 87 } 88 if (c >= 0x0080) { 89 sb += (FX_WCHAR)'\1'; 90 sb += (FX_WCHAR)0x001e; 91 int32_t len = 2; 92 len += encodeChar((FX_WCHAR)(c - 128), sb, e); 93 BC_EXCEPTION_CHECK_ReturnValue(e, -1); 94 return len; 95 } 96 CBC_HighLevelEncoder::illegalCharacter(c, e); 97 return -1; 98} 99