Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxbarcode / src / BC_TextEncoder.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #include "barcode.h"\r
8 #include "include/BC_Encoder.h"\r
9 #include "include/BC_CommonBitMatrix.h"\r
10 #include "include/BC_Dimension.h"\r
11 #include "include/BC_SymbolShapeHint.h"\r
12 #include "include/BC_SymbolInfo.h"\r
13 #include "include/BC_EncoderContext.h"\r
14 #include "include/BC_HighLevelEncoder.h"\r
15 #include "include/BC_C40Encoder.h"\r
16 #include "include/BC_TextEncoder.h"\r
17 CBC_TextEncoder::CBC_TextEncoder()\r
18 {\r
19 }\r
20 CBC_TextEncoder::~CBC_TextEncoder()\r
21 {\r
22 }\r
23 FX_INT32 CBC_TextEncoder::getEncodingMode()\r
24 {\r
25     return TEXT_ENCODATION;\r
26 }\r
27 FX_INT32 CBC_TextEncoder::encodeChar(FX_WCHAR c, CFX_WideString &sb, FX_INT32 &e)\r
28 {\r
29     if (c == ' ') {\r
30         sb += (FX_WCHAR)'\3';\r
31         return 1;\r
32     }\r
33     if (c >= '0' && c <= '9') {\r
34         sb += (FX_WCHAR) (c - 48 + 4);\r
35         return 1;\r
36     }\r
37     if (c >= 'a' && c <= 'z') {\r
38         sb += (FX_WCHAR) (c - 97 + 14);\r
39         return 1;\r
40     }\r
41     if (c >= '\0' && c <= 0x1f) {\r
42         sb += (FX_WCHAR)'\0';\r
43         sb += c;\r
44         return 2;\r
45     }\r
46     if (c >= '!' && c <= '/') {\r
47         sb += (FX_WCHAR) '\1';\r
48         sb += (FX_WCHAR) (c - 33);\r
49         return 2;\r
50     }\r
51     if (c >= ':' && c <= '@') {\r
52         sb += (FX_WCHAR)'\1';\r
53         sb += (FX_WCHAR) (c - 58 + 15);\r
54         return 2;\r
55     }\r
56     if (c >= '[' && c <= '_') {\r
57         sb += (FX_WCHAR) '\1';\r
58         sb += (FX_WCHAR) (c - 91 + 22);\r
59         return 2;\r
60     }\r
61     if (c == 0x0060) {\r
62         sb += (FX_WCHAR) '\2';\r
63         sb += (FX_WCHAR) (c - 96);\r
64         return 2;\r
65     }\r
66     if (c >= 'A' && c <= 'Z') {\r
67         sb += (FX_WCHAR)'\2';\r
68         sb += (FX_WCHAR) (c - 65 + 1);\r
69         return 2;\r
70     }\r
71     if (c >= '{' && c <= 0x007f) {\r
72         sb += (FX_WCHAR)'\2';\r
73         sb += (FX_WCHAR) (c - 123 + 27);\r
74         return 2;\r
75     }\r
76     if (c >= 0x0080) {\r
77         sb += (FX_WCHAR)'\1';\r
78         sb += (FX_WCHAR)0x001e;\r
79         FX_INT32 len = 2;\r
80         len += encodeChar((FX_WCHAR) (c - 128), sb, e);\r
81         BC_EXCEPTION_CHECK_ReturnValue(e, -1);\r
82         return len;\r
83     }\r
84     CBC_HighLevelEncoder::illegalCharacter(c, e);\r
85     return -1;\r
86 }\r