Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fxbarcode / datamatrix / BC_EncoderContext.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 // Original code is licensed as follows:\r
7 /*\r
8  * Copyright 2006-2007 Jeremias Maerki.\r
9  *\r
10  * Licensed under the Apache License, Version 2.0 (the "License");\r
11  * you may not use this file except in compliance with the License.\r
12  * You may obtain a copy of the License at\r
13  *\r
14  *      http://www.apache.org/licenses/LICENSE-2.0\r
15  *\r
16  * Unless required by applicable law or agreed to in writing, software\r
17  * distributed under the License is distributed on an "AS IS" BASIS,\r
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
19  * See the License for the specific language governing permissions and\r
20  * limitations under the License.\r
21  */\r
22 \r
23 #include "../barcode.h"\r
24 #include "../BC_Dimension.h"\r
25 #include "../BC_UtilCodingConvert.h"\r
26 #include "../common/BC_CommonBitMatrix.h"\r
27 #include "BC_Encoder.h"\r
28 #include "BC_SymbolShapeHint.h"\r
29 #include "BC_SymbolInfo.h"\r
30 #include "BC_EncoderContext.h"\r
31 CBC_EncoderContext::CBC_EncoderContext(const CFX_WideString msg, CFX_WideString ecLevel, int32_t &e)\r
32 {\r
33     CFX_ByteString dststr;\r
34     CBC_UtilCodingConvert::UnicodeToUTF8(msg, dststr);\r
35     CFX_WideString sb;\r
36     int32_t c = dststr.GetLength();\r
37     for (int32_t i = 0; i < c; i++) {\r
38         FX_WCHAR ch =  (FX_WCHAR)(dststr.GetAt(i) & 0xff);\r
39         if (ch == '?' && dststr.GetAt(i) != '?') {\r
40             e = BCExceptionCharactersOutsideISO88591Encoding;\r
41         }\r
42         sb += ch;\r
43     }\r
44     m_msg = sb;\r
45     m_shape = FORCE_NONE;\r
46     m_newEncoding = -1;\r
47     m_pos = 0;\r
48     m_symbolInfo = NULL;\r
49     m_skipAtEnd = 0;\r
50     m_maxSize = NULL;\r
51     m_minSize = NULL;\r
52 }\r
53 CBC_EncoderContext::~CBC_EncoderContext()\r
54 {\r
55 }\r
56 void CBC_EncoderContext::setSymbolShape(SymbolShapeHint shape)\r
57 {\r
58     m_shape = shape;\r
59 }\r
60 void CBC_EncoderContext::setSizeConstraints(CBC_Dimension* minSize, CBC_Dimension* maxSize)\r
61 {\r
62     m_maxSize = maxSize;\r
63     m_minSize = minSize;\r
64 }\r
65 CFX_WideString CBC_EncoderContext::getMessage()\r
66 {\r
67     return m_msg;\r
68 }\r
69 void CBC_EncoderContext::setSkipAtEnd(int32_t count)\r
70 {\r
71     m_skipAtEnd = count;\r
72 }\r
73 FX_WCHAR CBC_EncoderContext::getCurrentChar()\r
74 {\r
75     return m_msg.GetAt(m_pos);\r
76 }\r
77 FX_WCHAR CBC_EncoderContext::getCurrent()\r
78 {\r
79     return m_msg.GetAt(m_pos);\r
80 }\r
81 void CBC_EncoderContext::writeCodewords(CFX_WideString codewords)\r
82 {\r
83     m_codewords += codewords;\r
84 }\r
85 void CBC_EncoderContext::writeCodeword(FX_WCHAR codeword)\r
86 {\r
87     m_codewords += codeword;\r
88 }\r
89 int32_t CBC_EncoderContext::getCodewordCount()\r
90 {\r
91     return m_codewords.GetLength();\r
92 }\r
93 void CBC_EncoderContext::signalEncoderChange(int32_t encoding)\r
94 {\r
95     m_newEncoding = encoding;\r
96 }\r
97 void CBC_EncoderContext::resetEncoderSignal()\r
98 {\r
99     m_newEncoding = -1;\r
100 }\r
101 FX_BOOL CBC_EncoderContext::hasMoreCharacters()\r
102 {\r
103     return m_pos < getTotalMessageCharCount();\r
104 }\r
105 int32_t CBC_EncoderContext::getRemainingCharacters()\r
106 {\r
107     return getTotalMessageCharCount() - m_pos;\r
108 }\r
109 void CBC_EncoderContext::updateSymbolInfo(int32_t &e)\r
110 {\r
111     updateSymbolInfo(getCodewordCount(), e);\r
112 }\r
113 void CBC_EncoderContext::updateSymbolInfo(int32_t len, int32_t &e)\r
114 {\r
115     if (m_symbolInfo == NULL || len > m_symbolInfo->m_dataCapacity) {\r
116         m_symbolInfo = CBC_SymbolInfo::lookup(len, m_shape, m_minSize, m_maxSize, true, e);\r
117         BC_EXCEPTION_CHECK_ReturnVoid(e);\r
118     }\r
119 }\r
120 void CBC_EncoderContext::resetSymbolInfo()\r
121 {\r
122     m_shape = FORCE_NONE;\r
123 }\r
124 int32_t CBC_EncoderContext::getTotalMessageCharCount()\r
125 {\r
126     return m_msg.GetLength() - m_skipAtEnd;\r
127 }\r