OLD | NEW |
| (Empty) |
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 2011 ZXing authors | |
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_Binarizer.h" | |
24 #include "xfa/fxbarcode/BC_BinaryBitmap.h" | |
25 #include "xfa/fxbarcode/BC_BinaryBitmap.h" | |
26 #include "xfa/fxbarcode/BC_BufferedImageLuminanceSource.h" | |
27 #include "xfa/fxbarcode/BC_DecoderResult.h" | |
28 #include "xfa/fxbarcode/BC_LuminanceSource.h" | |
29 #include "xfa/fxbarcode/BC_Reader.h" | |
30 #include "xfa/fxbarcode/BC_ResultPoint.h" | |
31 #include "xfa/fxbarcode/BC_TwoDimWriter.h" | |
32 #include "xfa/fxbarcode/BC_UtilCodingConvert.h" | |
33 #include "xfa/fxbarcode/BC_Writer.h" | |
34 #include "xfa/fxbarcode/common/BC_CommonBitArray.h" | |
35 #include "xfa/fxbarcode/common/BC_CommonBitMatrix.h" | |
36 #include "xfa/fxbarcode/common/BC_CommonBitMatrix.h" | |
37 #include "xfa/fxbarcode/common/BC_CommonDecoderResult.h" | |
38 #include "xfa/fxbarcode/common/BC_GlobalHistogramBinarizer.h" | |
39 #include "xfa/fxbarcode/datamatrix/BC_DataMatrixReader.h" | |
40 #include "xfa/fxbarcode/datamatrix/BC_DataMatrixWriter.h" | |
41 #include "xfa/fxbarcode/oned/BC_OneDReader.h" | |
42 #include "xfa/fxbarcode/oned/BC_OneDimReader.h" | |
43 #include "xfa/fxbarcode/oned/BC_OneDimWriter.h" | |
44 #include "xfa/fxbarcode/oned/BC_OnedCodaBarReader.h" | |
45 #include "xfa/fxbarcode/oned/BC_OnedCodaBarWriter.h" | |
46 #include "xfa/fxbarcode/oned/BC_OnedCode128Reader.h" | |
47 #include "xfa/fxbarcode/oned/BC_OnedCode128Writer.h" | |
48 #include "xfa/fxbarcode/oned/BC_OnedCode39Reader.h" | |
49 #include "xfa/fxbarcode/oned/BC_OnedCode39Writer.h" | |
50 #include "xfa/fxbarcode/oned/BC_OnedEAN13Reader.h" | |
51 #include "xfa/fxbarcode/oned/BC_OnedEAN13Writer.h" | |
52 #include "xfa/fxbarcode/oned/BC_OnedEAN8Reader.h" | |
53 #include "xfa/fxbarcode/oned/BC_OnedEAN8Writer.h" | |
54 #include "xfa/fxbarcode/oned/BC_OnedUPCAReader.h" | |
55 #include "xfa/fxbarcode/oned/BC_OnedUPCAWriter.h" | |
56 #include "xfa/fxbarcode/pdf417/BC_PDF417.h" | |
57 #include "xfa/fxbarcode/pdf417/BC_PDF417BarcodeMetadata.h" | |
58 #include "xfa/fxbarcode/pdf417/BC_PDF417BarcodeValue.h" | |
59 #include "xfa/fxbarcode/pdf417/BC_PDF417BoundingBox.h" | |
60 #include "xfa/fxbarcode/pdf417/BC_PDF417Codeword.h" | |
61 #include "xfa/fxbarcode/pdf417/BC_PDF417CodewordDecoder.h" | |
62 #include "xfa/fxbarcode/pdf417/BC_PDF417Common.h" | |
63 #include "xfa/fxbarcode/pdf417/BC_PDF417Compaction.h" | |
64 #include "xfa/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" | |
65 #include "xfa/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" | |
66 #include "xfa/fxbarcode/pdf417/BC_PDF417DecodedBitStreamParser.h" | |
67 #include "xfa/fxbarcode/pdf417/BC_PDF417DetectionResult.h" | |
68 #include "xfa/fxbarcode/pdf417/BC_PDF417DetectionResultColumn.h" | |
69 #include "xfa/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.h" | |
70 #include "xfa/fxbarcode/pdf417/BC_PDF417Detector.h" | |
71 #include "xfa/fxbarcode/pdf417/BC_PDF417DetectorResult.h" | |
72 #include "xfa/fxbarcode/pdf417/BC_PDF417DetectorResult.h" | |
73 #include "xfa/fxbarcode/pdf417/BC_PDF417ECErrorCorrection.h" | |
74 #include "xfa/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" | |
75 #include "xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" | |
76 #include "xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h" | |
77 #include "xfa/fxbarcode/pdf417/BC_PDF417Reader.h" | |
78 #include "xfa/fxbarcode/pdf417/BC_PDF417ScanningDecoder.h" | |
79 #include "xfa/fxbarcode/pdf417/BC_PDF417Writer.h" | |
80 #include "xfa/fxbarcode/qrcode/BC_QRCodeReader.h" | |
81 #include "xfa/fxbarcode/qrcode/BC_QRCodeWriter.h" | |
82 | |
83 CBC_CodeBase::CBC_CodeBase() {} | |
84 CBC_CodeBase::~CBC_CodeBase() {} | |
85 FX_BOOL CBC_CodeBase::SetCharEncoding(int32_t encoding) { | |
86 if (m_pBCWriter) { | |
87 return m_pBCWriter->SetCharEncoding(encoding); | |
88 } | |
89 return FALSE; | |
90 } | |
91 FX_BOOL CBC_CodeBase::SetModuleHeight(int32_t moduleHeight) { | |
92 if (m_pBCWriter) { | |
93 return m_pBCWriter->SetModuleHeight(moduleHeight); | |
94 } | |
95 return FALSE; | |
96 } | |
97 FX_BOOL CBC_CodeBase::SetModuleWidth(int32_t moduleWidth) { | |
98 if (m_pBCWriter) { | |
99 return m_pBCWriter->SetModuleWidth(moduleWidth); | |
100 } | |
101 return FALSE; | |
102 } | |
103 FX_BOOL CBC_CodeBase::SetHeight(int32_t height) { | |
104 if (m_pBCWriter) { | |
105 return m_pBCWriter->SetHeight(height); | |
106 } | |
107 return FALSE; | |
108 } | |
109 FX_BOOL CBC_CodeBase::SetWidth(int32_t width) { | |
110 if (m_pBCWriter) { | |
111 return m_pBCWriter->SetWidth(width); | |
112 } | |
113 return FALSE; | |
114 } | |
115 void CBC_CodeBase::SetBackgroundColor(FX_ARGB backgroundColor) { | |
116 if (m_pBCWriter) { | |
117 m_pBCWriter->SetBackgroundColor(backgroundColor); | |
118 } | |
119 } | |
120 void CBC_CodeBase::SetBarcodeColor(FX_ARGB foregroundColor) { | |
121 if (m_pBCWriter) { | |
122 m_pBCWriter->SetBarcodeColor(foregroundColor); | |
123 } | |
124 } | |
125 CBC_OneCode::CBC_OneCode() {} | |
126 CBC_OneCode::~CBC_OneCode() {} | |
127 FX_BOOL CBC_OneCode::CheckContentValidity(const CFX_WideStringC& contents) { | |
128 if (m_pBCWriter) { | |
129 return ((CBC_OneDimWriter*)m_pBCWriter)->CheckContentValidity(contents); | |
130 } | |
131 return FALSE; | |
132 } | |
133 CFX_WideString CBC_OneCode::FilterContents(const CFX_WideStringC& contents) { | |
134 CFX_WideString tmp; | |
135 if (m_pBCWriter == NULL) { | |
136 return tmp; | |
137 } | |
138 return ((CBC_OneDimWriter*)m_pBCWriter)->FilterContents(contents); | |
139 } | |
140 void CBC_OneCode::SetPrintChecksum(FX_BOOL checksum) { | |
141 if (m_pBCWriter) { | |
142 ((CBC_OneDimWriter*)m_pBCWriter)->SetPrintChecksum(checksum); | |
143 } | |
144 } | |
145 void CBC_OneCode::SetDataLength(int32_t length) { | |
146 if (m_pBCWriter) { | |
147 ((CBC_OneDimWriter*)m_pBCWriter)->SetDataLength(length); | |
148 } | |
149 } | |
150 void CBC_OneCode::SetCalChecksum(FX_BOOL calc) { | |
151 if (m_pBCWriter) { | |
152 ((CBC_OneDimWriter*)m_pBCWriter)->SetCalcChecksum(calc); | |
153 } | |
154 } | |
155 FX_BOOL CBC_OneCode::SetFont(CFX_Font* cFont) { | |
156 if (m_pBCWriter) { | |
157 return ((CBC_OneDimWriter*)m_pBCWriter)->SetFont(cFont); | |
158 } | |
159 return FALSE; | |
160 } | |
161 void CBC_OneCode::SetFontSize(FX_FLOAT size) { | |
162 if (m_pBCWriter) { | |
163 ((CBC_OneDimWriter*)m_pBCWriter)->SetFontSize(size); | |
164 } | |
165 } | |
166 void CBC_OneCode::SetFontStyle(int32_t style) { | |
167 if (m_pBCWriter) { | |
168 ((CBC_OneDimWriter*)m_pBCWriter)->SetFontStyle(style); | |
169 } | |
170 } | |
171 void CBC_OneCode::SetFontColor(FX_ARGB color) { | |
172 if (m_pBCWriter) { | |
173 ((CBC_OneDimWriter*)m_pBCWriter)->SetFontColor(color); | |
174 } | |
175 } | |
176 CBC_Code39::CBC_Code39() { | |
177 m_pBCReader = (CBC_Reader*)new (CBC_OnedCode39Reader); | |
178 m_pBCWriter = (CBC_Writer*)new (CBC_OnedCode39Writer); | |
179 } | |
180 CBC_Code39::CBC_Code39(FX_BOOL usingCheckDigit) { | |
181 m_pBCReader = (CBC_Reader*)new CBC_OnedCode39Reader(usingCheckDigit); | |
182 m_pBCWriter = (CBC_Writer*)new CBC_OnedCode39Writer; | |
183 } | |
184 CBC_Code39::CBC_Code39(FX_BOOL usingCheckDigit, FX_BOOL extendedMode) { | |
185 m_pBCReader = | |
186 (CBC_Reader*)new CBC_OnedCode39Reader(usingCheckDigit, extendedMode); | |
187 m_pBCWriter = (CBC_Writer*)new CBC_OnedCode39Writer(extendedMode); | |
188 } | |
189 CBC_Code39::~CBC_Code39() { | |
190 if (m_pBCReader) { | |
191 delete (m_pBCReader); | |
192 m_pBCReader = NULL; | |
193 } | |
194 if (m_pBCWriter) { | |
195 delete (m_pBCWriter); | |
196 m_pBCWriter = NULL; | |
197 } | |
198 } | |
199 FX_BOOL CBC_Code39::Encode(const CFX_WideStringC& contents, | |
200 FX_BOOL isDevice, | |
201 int32_t& e) { | |
202 if (contents.IsEmpty()) { | |
203 e = BCExceptionNoContents; | |
204 return FALSE; | |
205 } | |
206 BCFORMAT format = BCFORMAT_CODE_39; | |
207 int32_t outWidth = 0; | |
208 int32_t outHeight = 0; | |
209 CFX_WideString filtercontents = | |
210 ((CBC_OnedCode39Writer*)m_pBCWriter)->FilterContents(contents); | |
211 CFX_WideString renderContents = | |
212 ((CBC_OnedCode39Writer*)m_pBCWriter)->RenderTextContents(contents); | |
213 m_renderContents = renderContents; | |
214 CFX_ByteString byteString = filtercontents.UTF8Encode(); | |
215 uint8_t* data = static_cast<CBC_OnedCode39Writer*>(m_pBCWriter) | |
216 ->Encode(byteString, format, outWidth, outHeight, e); | |
217 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
218 ((CBC_OneDimWriter*)m_pBCWriter) | |
219 ->RenderResult(renderContents, data, outWidth, isDevice, e); | |
220 FX_Free(data); | |
221 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
222 return TRUE; | |
223 } | |
224 FX_BOOL CBC_Code39::RenderDevice(CFX_RenderDevice* device, | |
225 const CFX_Matrix* matirx, | |
226 int32_t& e) { | |
227 CFX_WideString renderCon = ((CBC_OnedCode39Writer*)m_pBCWriter) | |
228 ->encodedContents(m_renderContents, e); | |
229 ((CBC_OneDimWriter*)m_pBCWriter) | |
230 ->RenderDeviceResult(device, matirx, renderCon, e); | |
231 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
232 return TRUE; | |
233 } | |
234 FX_BOOL CBC_Code39::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
235 CFX_WideString renderCon = ((CBC_OnedCode39Writer*)m_pBCWriter) | |
236 ->encodedContents(m_renderContents, e); | |
237 ((CBC_OneDimWriter*)m_pBCWriter) | |
238 ->RenderBitmapResult(pOutBitmap, renderCon, e); | |
239 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
240 return TRUE; | |
241 } | |
242 CFX_WideString CBC_Code39::Decode(uint8_t* buf, | |
243 int32_t width, | |
244 int32_t hight, | |
245 int32_t& e) { | |
246 CFX_WideString str; | |
247 return str; | |
248 } | |
249 CFX_WideString CBC_Code39::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
250 CBC_BufferedImageLuminanceSource source(pBitmap); | |
251 CBC_GlobalHistogramBinarizer binarizer(&source); | |
252 CBC_BinaryBitmap bitmap(&binarizer); | |
253 CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); | |
254 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
255 return CFX_WideString::FromUTF8(str, str.GetLength()); | |
256 } | |
257 FX_BOOL CBC_Code39::SetTextLocation(BC_TEXT_LOC location) { | |
258 if (m_pBCWriter) { | |
259 return ((CBC_OnedCode39Writer*)m_pBCWriter)->SetTextLocation(location); | |
260 } | |
261 return FALSE; | |
262 } | |
263 FX_BOOL CBC_Code39::SetWideNarrowRatio(int32_t ratio) { | |
264 if (m_pBCWriter) { | |
265 return ((CBC_OnedCode39Writer*)m_pBCWriter)->SetWideNarrowRatio(ratio); | |
266 } | |
267 return FALSE; | |
268 } | |
269 CBC_Codabar::CBC_Codabar() { | |
270 m_pBCReader = (CBC_Reader*)new (CBC_OnedCodaBarReader); | |
271 m_pBCWriter = (CBC_Writer*)new (CBC_OnedCodaBarWriter); | |
272 } | |
273 CBC_Codabar::~CBC_Codabar() { | |
274 if (m_pBCReader) { | |
275 delete (m_pBCReader); | |
276 m_pBCReader = NULL; | |
277 } | |
278 if (m_pBCWriter) { | |
279 delete (m_pBCWriter); | |
280 m_pBCWriter = NULL; | |
281 } | |
282 } | |
283 FX_BOOL CBC_Codabar::SetStartChar(FX_CHAR start) { | |
284 if (m_pBCWriter) { | |
285 return ((CBC_OnedCodaBarWriter*)m_pBCWriter)->SetStartChar(start); | |
286 } | |
287 return FALSE; | |
288 } | |
289 FX_BOOL CBC_Codabar::SetEndChar(FX_CHAR end) { | |
290 if (m_pBCWriter) { | |
291 return ((CBC_OnedCodaBarWriter*)m_pBCWriter)->SetEndChar(end); | |
292 } | |
293 return FALSE; | |
294 } | |
295 FX_BOOL CBC_Codabar::SetTextLocation(BC_TEXT_LOC location) { | |
296 return ((CBC_OnedCodaBarWriter*)m_pBCWriter)->SetTextLocation(location); | |
297 } | |
298 FX_BOOL CBC_Codabar::SetWideNarrowRatio(int32_t ratio) { | |
299 if (m_pBCWriter) { | |
300 return ((CBC_OnedCodaBarWriter*)m_pBCWriter)->SetWideNarrowRatio(ratio); | |
301 } | |
302 return FALSE; | |
303 } | |
304 FX_BOOL CBC_Codabar::Encode(const CFX_WideStringC& contents, | |
305 FX_BOOL isDevice, | |
306 int32_t& e) { | |
307 if (contents.IsEmpty()) { | |
308 e = BCExceptionNoContents; | |
309 return FALSE; | |
310 } | |
311 BCFORMAT format = BCFORMAT_CODABAR; | |
312 int32_t outWidth = 0; | |
313 int32_t outHeight = 0; | |
314 CFX_WideString filtercontents = | |
315 ((CBC_OneDimWriter*)m_pBCWriter)->FilterContents(contents); | |
316 CFX_ByteString byteString = filtercontents.UTF8Encode(); | |
317 m_renderContents = filtercontents; | |
318 uint8_t* data = static_cast<CBC_OnedCodaBarWriter*>(m_pBCWriter) | |
319 ->Encode(byteString, format, outWidth, outHeight, e); | |
320 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
321 ((CBC_OneDimWriter*)m_pBCWriter) | |
322 ->RenderResult(filtercontents, data, outWidth, isDevice, e); | |
323 FX_Free(data); | |
324 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
325 return TRUE; | |
326 } | |
327 FX_BOOL CBC_Codabar::RenderDevice(CFX_RenderDevice* device, | |
328 const CFX_Matrix* matirx, | |
329 int32_t& e) { | |
330 CFX_WideString renderCon = | |
331 ((CBC_OnedCodaBarWriter*)m_pBCWriter)->encodedContents(m_renderContents); | |
332 ((CBC_OneDimWriter*)m_pBCWriter) | |
333 ->RenderDeviceResult(device, matirx, renderCon, e); | |
334 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
335 return TRUE; | |
336 } | |
337 FX_BOOL CBC_Codabar::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
338 CFX_WideString renderCon = | |
339 ((CBC_OnedCodaBarWriter*)m_pBCWriter)->encodedContents(m_renderContents); | |
340 ((CBC_OneDimWriter*)m_pBCWriter) | |
341 ->RenderBitmapResult(pOutBitmap, renderCon, e); | |
342 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
343 return TRUE; | |
344 } | |
345 CFX_WideString CBC_Codabar::Decode(uint8_t* buf, | |
346 int32_t width, | |
347 int32_t hight, | |
348 int32_t& e) { | |
349 CFX_WideString str; | |
350 return str; | |
351 } | |
352 CFX_WideString CBC_Codabar::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
353 CBC_BufferedImageLuminanceSource source(pBitmap); | |
354 CBC_GlobalHistogramBinarizer binarizer(&source); | |
355 CBC_BinaryBitmap bitmap(&binarizer); | |
356 CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); | |
357 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
358 return CFX_WideString::FromUTF8(str, str.GetLength()); | |
359 } | |
360 CBC_Code128::CBC_Code128(BC_TYPE type) { | |
361 m_pBCReader = (CBC_Reader*)new (CBC_OnedCode128Reader); | |
362 m_pBCWriter = (CBC_Writer*)new CBC_OnedCode128Writer(type); | |
363 } | |
364 CBC_Code128::~CBC_Code128() { | |
365 if (m_pBCReader) { | |
366 delete (m_pBCReader); | |
367 m_pBCReader = NULL; | |
368 } | |
369 if (m_pBCWriter) { | |
370 delete (m_pBCWriter); | |
371 m_pBCWriter = NULL; | |
372 } | |
373 } | |
374 FX_BOOL CBC_Code128::SetTextLocation(BC_TEXT_LOC location) { | |
375 if (m_pBCWriter) { | |
376 return ((CBC_OnedCode128Writer*)m_pBCWriter)->SetTextLocation(location); | |
377 } | |
378 return FALSE; | |
379 } | |
380 FX_BOOL CBC_Code128::Encode(const CFX_WideStringC& contents, | |
381 FX_BOOL isDevice, | |
382 int32_t& e) { | |
383 if (contents.IsEmpty()) { | |
384 e = BCExceptionNoContents; | |
385 return FALSE; | |
386 } | |
387 BCFORMAT format = BCFORMAT_CODE_128; | |
388 int32_t outWidth = 0; | |
389 int32_t outHeight = 0; | |
390 CFX_WideString content = contents; | |
391 if (contents.GetLength() % 2 && | |
392 ((CBC_OnedCode128Writer*)m_pBCWriter)->GetType() == BC_CODE128_C) { | |
393 content += '0'; | |
394 } | |
395 CFX_WideString encodeContents = | |
396 ((CBC_OnedCode128Writer*)m_pBCWriter)->FilterContents(content); | |
397 m_renderContents = encodeContents; | |
398 CFX_ByteString byteString = encodeContents.UTF8Encode(); | |
399 uint8_t* data = static_cast<CBC_OnedCode128Writer*>(m_pBCWriter) | |
400 ->Encode(byteString, format, outWidth, outHeight, e); | |
401 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
402 ((CBC_OneDimWriter*)m_pBCWriter) | |
403 ->RenderResult(encodeContents, data, outWidth, isDevice, e); | |
404 FX_Free(data); | |
405 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
406 return TRUE; | |
407 } | |
408 FX_BOOL CBC_Code128::RenderDevice(CFX_RenderDevice* device, | |
409 const CFX_Matrix* matirx, | |
410 int32_t& e) { | |
411 ((CBC_OneDimWriter*)m_pBCWriter) | |
412 ->RenderDeviceResult(device, matirx, m_renderContents, e); | |
413 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
414 return TRUE; | |
415 } | |
416 FX_BOOL CBC_Code128::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
417 ((CBC_OneDimWriter*)m_pBCWriter) | |
418 ->RenderBitmapResult(pOutBitmap, m_renderContents, e); | |
419 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
420 return TRUE; | |
421 } | |
422 CFX_WideString CBC_Code128::Decode(uint8_t* buf, | |
423 int32_t width, | |
424 int32_t hight, | |
425 int32_t& e) { | |
426 CFX_WideString str; | |
427 return str; | |
428 } | |
429 CFX_WideString CBC_Code128::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
430 CBC_BufferedImageLuminanceSource source(pBitmap); | |
431 CBC_GlobalHistogramBinarizer binarizer(&source); | |
432 CBC_BinaryBitmap bitmap(&binarizer); | |
433 CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); | |
434 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
435 return CFX_WideString::FromUTF8(str, str.GetLength()); | |
436 } | |
437 CBC_EAN8::CBC_EAN8() { | |
438 m_pBCReader = (CBC_Reader*)new (CBC_OnedEAN8Reader); | |
439 m_pBCWriter = (CBC_Writer*)new (CBC_OnedEAN8Writer); | |
440 } | |
441 CBC_EAN8::~CBC_EAN8() { | |
442 if (m_pBCReader) { | |
443 delete (m_pBCReader); | |
444 m_pBCReader = NULL; | |
445 } | |
446 if (m_pBCWriter) { | |
447 delete (m_pBCWriter); | |
448 m_pBCWriter = NULL; | |
449 } | |
450 } | |
451 CFX_WideString CBC_EAN8::Preprocess(const CFX_WideStringC& contents) { | |
452 CFX_WideString encodeContents = | |
453 ((CBC_OnedEAN8Writer*)m_pBCWriter)->FilterContents(contents); | |
454 int32_t length = encodeContents.GetLength(); | |
455 if (length <= 7) { | |
456 for (int32_t i = 0; i < 7 - length; i++) { | |
457 encodeContents = FX_WCHAR('0') + encodeContents; | |
458 } | |
459 CFX_ByteString byteString = encodeContents.UTF8Encode(); | |
460 int32_t checksum = | |
461 ((CBC_OnedEAN8Writer*)m_pBCWriter)->CalcChecksum(byteString); | |
462 encodeContents += FX_WCHAR(checksum - 0 + '0'); | |
463 } | |
464 if (length > 8) { | |
465 encodeContents = encodeContents.Mid(0, 8); | |
466 } | |
467 return encodeContents; | |
468 } | |
469 FX_BOOL CBC_EAN8::Encode(const CFX_WideStringC& contents, | |
470 FX_BOOL isDevice, | |
471 int32_t& e) { | |
472 if (contents.IsEmpty()) { | |
473 e = BCExceptionNoContents; | |
474 return FALSE; | |
475 } | |
476 BCFORMAT format = BCFORMAT_EAN_8; | |
477 int32_t outWidth = 0; | |
478 int32_t outHeight = 0; | |
479 CFX_WideString encodeContents = Preprocess(contents); | |
480 CFX_ByteString byteString = encodeContents.UTF8Encode(); | |
481 m_renderContents = encodeContents; | |
482 uint8_t* data = static_cast<CBC_OnedEAN8Writer*>(m_pBCWriter) | |
483 ->Encode(byteString, format, outWidth, outHeight, e); | |
484 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
485 ((CBC_OneDimWriter*)m_pBCWriter) | |
486 ->RenderResult(encodeContents, data, outWidth, isDevice, e); | |
487 FX_Free(data); | |
488 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
489 return TRUE; | |
490 } | |
491 FX_BOOL CBC_EAN8::RenderDevice(CFX_RenderDevice* device, | |
492 const CFX_Matrix* matirx, | |
493 int32_t& e) { | |
494 ((CBC_OneDimWriter*)m_pBCWriter) | |
495 ->RenderDeviceResult(device, matirx, m_renderContents, e); | |
496 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
497 return TRUE; | |
498 } | |
499 FX_BOOL CBC_EAN8::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
500 ((CBC_OneDimWriter*)m_pBCWriter) | |
501 ->RenderBitmapResult(pOutBitmap, m_renderContents, e); | |
502 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
503 return TRUE; | |
504 } | |
505 CFX_WideString CBC_EAN8::Decode(uint8_t* buf, | |
506 int32_t width, | |
507 int32_t hight, | |
508 int32_t& e) { | |
509 CFX_WideString str; | |
510 return str; | |
511 } | |
512 CFX_WideString CBC_EAN8::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
513 CBC_BufferedImageLuminanceSource source(pBitmap); | |
514 CBC_GlobalHistogramBinarizer binarizer(&source); | |
515 CBC_BinaryBitmap bitmap(&binarizer); | |
516 CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); | |
517 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
518 return CFX_WideString::FromUTF8(str, str.GetLength()); | |
519 } | |
520 CBC_EAN13::CBC_EAN13() { | |
521 m_pBCReader = (CBC_Reader*)new (CBC_OnedEAN13Reader); | |
522 m_pBCWriter = (CBC_Writer*)new (CBC_OnedEAN13Writer); | |
523 } | |
524 CBC_EAN13::~CBC_EAN13() { | |
525 if (m_pBCReader) { | |
526 delete (m_pBCReader); | |
527 m_pBCReader = NULL; | |
528 } | |
529 if (m_pBCWriter) { | |
530 delete (m_pBCWriter); | |
531 m_pBCWriter = NULL; | |
532 } | |
533 } | |
534 CFX_WideString CBC_EAN13::Preprocess(const CFX_WideStringC& contents) { | |
535 CFX_WideString encodeContents = | |
536 ((CBC_OnedEAN8Writer*)m_pBCWriter)->FilterContents(contents); | |
537 int32_t length = encodeContents.GetLength(); | |
538 if (length <= 12) { | |
539 for (int32_t i = 0; i < 12 - length; i++) { | |
540 encodeContents = FX_WCHAR('0') + encodeContents; | |
541 } | |
542 CFX_ByteString byteString = encodeContents.UTF8Encode(); | |
543 int32_t checksum = | |
544 ((CBC_OnedEAN13Writer*)m_pBCWriter)->CalcChecksum(byteString); | |
545 byteString += checksum - 0 + '0'; | |
546 encodeContents = byteString.UTF8Decode(); | |
547 } | |
548 if (length > 13) { | |
549 encodeContents = encodeContents.Mid(0, 13); | |
550 } | |
551 return encodeContents; | |
552 } | |
553 FX_BOOL CBC_EAN13::Encode(const CFX_WideStringC& contents, | |
554 FX_BOOL isDevice, | |
555 int32_t& e) { | |
556 if (contents.IsEmpty()) { | |
557 e = BCExceptionNoContents; | |
558 return FALSE; | |
559 } | |
560 BCFORMAT format = BCFORMAT_EAN_13; | |
561 int32_t outWidth = 0; | |
562 int32_t outHeight = 0; | |
563 CFX_WideString encodeContents = Preprocess(contents); | |
564 CFX_ByteString byteString = encodeContents.UTF8Encode(); | |
565 m_renderContents = encodeContents; | |
566 uint8_t* data = static_cast<CBC_OnedEAN13Writer*>(m_pBCWriter) | |
567 ->Encode(byteString, format, outWidth, outHeight, e); | |
568 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
569 ((CBC_OneDimWriter*)m_pBCWriter) | |
570 ->RenderResult(encodeContents, data, outWidth, isDevice, e); | |
571 FX_Free(data); | |
572 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
573 return TRUE; | |
574 } | |
575 FX_BOOL CBC_EAN13::RenderDevice(CFX_RenderDevice* device, | |
576 const CFX_Matrix* matirx, | |
577 int32_t& e) { | |
578 ((CBC_OneDimWriter*)m_pBCWriter) | |
579 ->RenderDeviceResult(device, matirx, m_renderContents, e); | |
580 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
581 return TRUE; | |
582 } | |
583 FX_BOOL CBC_EAN13::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
584 ((CBC_OneDimWriter*)m_pBCWriter) | |
585 ->RenderBitmapResult(pOutBitmap, m_renderContents, e); | |
586 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
587 return TRUE; | |
588 } | |
589 CFX_WideString CBC_EAN13::Decode(uint8_t* buf, | |
590 int32_t width, | |
591 int32_t hight, | |
592 int32_t& e) { | |
593 CFX_WideString str; | |
594 return str; | |
595 } | |
596 CFX_WideString CBC_EAN13::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
597 CBC_BufferedImageLuminanceSource source(pBitmap); | |
598 CBC_GlobalHistogramBinarizer binarizer(&source); | |
599 CBC_BinaryBitmap bitmap(&binarizer); | |
600 CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); | |
601 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
602 return CFX_WideString::FromUTF8(str, str.GetLength()); | |
603 } | |
604 CBC_UPCA::CBC_UPCA() { | |
605 m_pBCReader = (CBC_Reader*)new (CBC_OnedUPCAReader); | |
606 ((CBC_OnedUPCAReader*)m_pBCReader)->Init(); | |
607 m_pBCWriter = (CBC_Writer*)new (CBC_OnedUPCAWriter); | |
608 } | |
609 CBC_UPCA::~CBC_UPCA() { | |
610 if (m_pBCReader) { | |
611 delete (m_pBCReader); | |
612 m_pBCReader = NULL; | |
613 } | |
614 if (m_pBCWriter) { | |
615 delete (m_pBCWriter); | |
616 m_pBCWriter = NULL; | |
617 } | |
618 } | |
619 CFX_WideString CBC_UPCA::Preprocess(const CFX_WideStringC& contents) { | |
620 CFX_WideString encodeContents = | |
621 ((CBC_OnedEAN8Writer*)m_pBCWriter)->FilterContents(contents); | |
622 int32_t length = encodeContents.GetLength(); | |
623 if (length <= 11) { | |
624 for (int32_t i = 0; i < 11 - length; i++) { | |
625 encodeContents = FX_WCHAR('0') + encodeContents; | |
626 } | |
627 CFX_ByteString byteString = encodeContents.UTF8Encode(); | |
628 int32_t checksum = | |
629 ((CBC_OnedUPCAWriter*)m_pBCWriter)->CalcChecksum(byteString); | |
630 byteString += checksum - 0 + '0'; | |
631 encodeContents = byteString.UTF8Decode(); | |
632 } | |
633 if (length > 12) { | |
634 encodeContents = encodeContents.Mid(0, 12); | |
635 } | |
636 return encodeContents; | |
637 } | |
638 FX_BOOL CBC_UPCA::Encode(const CFX_WideStringC& contents, | |
639 FX_BOOL isDevice, | |
640 int32_t& e) { | |
641 if (contents.IsEmpty()) { | |
642 e = BCExceptionNoContents; | |
643 return FALSE; | |
644 } | |
645 BCFORMAT format = BCFORMAT_UPC_A; | |
646 int32_t outWidth = 0; | |
647 int32_t outHeight = 0; | |
648 CFX_WideString encodeContents = Preprocess(contents); | |
649 CFX_ByteString byteString = encodeContents.UTF8Encode(); | |
650 m_renderContents = encodeContents; | |
651 ((CBC_OnedUPCAWriter*)m_pBCWriter)->Init(); | |
652 uint8_t* data = static_cast<CBC_OnedUPCAWriter*>(m_pBCWriter) | |
653 ->Encode(byteString, format, outWidth, outHeight, e); | |
654 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
655 ((CBC_OneDimWriter*)m_pBCWriter) | |
656 ->RenderResult(encodeContents, data, outWidth, isDevice, e); | |
657 FX_Free(data); | |
658 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
659 return TRUE; | |
660 } | |
661 FX_BOOL CBC_UPCA::RenderDevice(CFX_RenderDevice* device, | |
662 const CFX_Matrix* matirx, | |
663 int32_t& e) { | |
664 ((CBC_OneDimWriter*)m_pBCWriter) | |
665 ->RenderDeviceResult(device, matirx, m_renderContents, e); | |
666 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
667 return TRUE; | |
668 } | |
669 FX_BOOL CBC_UPCA::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
670 ((CBC_OneDimWriter*)m_pBCWriter) | |
671 ->RenderBitmapResult(pOutBitmap, m_renderContents, e); | |
672 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
673 return TRUE; | |
674 } | |
675 CFX_WideString CBC_UPCA::Decode(uint8_t* buf, | |
676 int32_t width, | |
677 int32_t hight, | |
678 int32_t& e) { | |
679 CFX_WideString str; | |
680 return str; | |
681 } | |
682 CFX_WideString CBC_UPCA::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
683 CBC_BufferedImageLuminanceSource source(pBitmap); | |
684 CBC_GlobalHistogramBinarizer binarizer(&source); | |
685 CBC_BinaryBitmap bitmap(&binarizer); | |
686 CFX_ByteString str = m_pBCReader->Decode(&bitmap, 0, e); | |
687 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
688 return CFX_WideString::FromUTF8(str, str.GetLength()); | |
689 } | |
690 CBC_QRCode::CBC_QRCode() { | |
691 m_pBCReader = (CBC_Reader*)new (CBC_QRCodeReader); | |
692 ((CBC_QRCodeReader*)m_pBCReader)->Init(); | |
693 m_pBCWriter = (CBC_Writer*)new (CBC_QRCodeWriter); | |
694 } | |
695 CBC_QRCode::~CBC_QRCode() { | |
696 if (m_pBCReader) { | |
697 delete (m_pBCReader); | |
698 m_pBCReader = NULL; | |
699 } | |
700 if (m_pBCWriter) { | |
701 delete (m_pBCWriter); | |
702 m_pBCWriter = NULL; | |
703 } | |
704 } | |
705 FX_BOOL CBC_QRCode::SetVersion(int32_t version) { | |
706 if (version < 0 || version > 40) { | |
707 return FALSE; | |
708 } | |
709 if (m_pBCWriter == NULL) { | |
710 return FALSE; | |
711 } | |
712 return ((CBC_QRCodeWriter*)m_pBCWriter)->SetVersion(version); | |
713 } | |
714 FX_BOOL CBC_QRCode::SetErrorCorrectionLevel(int32_t level) { | |
715 if (level < 0 || level > 3) { | |
716 return FALSE; | |
717 } | |
718 if (m_pBCWriter == NULL) { | |
719 return FALSE; | |
720 } | |
721 return ((CBC_TwoDimWriter*)m_pBCWriter)->SetErrorCorrectionLevel(level); | |
722 } | |
723 FX_BOOL CBC_QRCode::Encode(const CFX_WideStringC& contents, | |
724 FX_BOOL isDevice, | |
725 int32_t& e) { | |
726 int32_t outWidth = 0; | |
727 int32_t outHeight = 0; | |
728 uint8_t* data = ((CBC_QRCodeWriter*)m_pBCWriter) | |
729 ->Encode(contents, ((CBC_QRCodeWriter*)m_pBCWriter) | |
730 ->GetErrorCorrectionLevel(), | |
731 outWidth, outHeight, e); | |
732 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
733 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderResult(data, outWidth, outHeight, e); | |
734 FX_Free(data); | |
735 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
736 return TRUE; | |
737 } | |
738 FX_BOOL CBC_QRCode::RenderDevice(CFX_RenderDevice* device, | |
739 const CFX_Matrix* matirx, | |
740 int32_t& e) { | |
741 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderDeviceResult(device, matirx); | |
742 return TRUE; | |
743 } | |
744 FX_BOOL CBC_QRCode::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
745 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderBitmapResult(pOutBitmap, e); | |
746 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
747 return TRUE; | |
748 } | |
749 CFX_WideString CBC_QRCode::Decode(uint8_t* buf, | |
750 int32_t width, | |
751 int32_t hight, | |
752 int32_t& e) { | |
753 CFX_WideString str; | |
754 return str; | |
755 } | |
756 CFX_WideString CBC_QRCode::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
757 CBC_BufferedImageLuminanceSource source(pBitmap); | |
758 CBC_GlobalHistogramBinarizer binarizer(&source); | |
759 CBC_BinaryBitmap bitmap(&binarizer); | |
760 CFX_ByteString retStr = m_pBCReader->Decode(&bitmap, 0, e); | |
761 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
762 return CFX_WideString::FromUTF8(retStr, retStr.GetLength()); | |
763 } | |
764 CBC_PDF417I::CBC_PDF417I() { | |
765 m_pBCReader = (CBC_Reader*)new (CBC_PDF417Reader); | |
766 m_pBCWriter = (CBC_Writer*)new (CBC_PDF417Writer); | |
767 } | |
768 CBC_PDF417I::~CBC_PDF417I() { | |
769 if (m_pBCReader) { | |
770 delete (m_pBCReader); | |
771 m_pBCReader = NULL; | |
772 } | |
773 if (m_pBCWriter) { | |
774 delete (m_pBCWriter); | |
775 m_pBCWriter = NULL; | |
776 } | |
777 } | |
778 FX_BOOL CBC_PDF417I::SetErrorCorrectionLevel(int32_t level) { | |
779 ((CBC_PDF417Writer*)m_pBCWriter)->SetErrorCorrectionLevel(level); | |
780 return TRUE; | |
781 } | |
782 void CBC_PDF417I::SetTruncated(FX_BOOL truncated) { | |
783 ((CBC_PDF417Writer*)m_pBCWriter)->SetTruncated(truncated); | |
784 } | |
785 FX_BOOL CBC_PDF417I::Encode(const CFX_WideStringC& contents, | |
786 FX_BOOL isDevice, | |
787 int32_t& e) { | |
788 int32_t outWidth = 0; | |
789 int32_t outHeight = 0; | |
790 uint8_t* data = ((CBC_PDF417Writer*)m_pBCWriter) | |
791 ->Encode(contents, outWidth, outHeight, e); | |
792 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
793 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderResult(data, outWidth, outHeight, e); | |
794 FX_Free(data); | |
795 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
796 return TRUE; | |
797 } | |
798 FX_BOOL CBC_PDF417I::RenderDevice(CFX_RenderDevice* device, | |
799 const CFX_Matrix* matirx, | |
800 int32_t& e) { | |
801 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderDeviceResult(device, matirx); | |
802 return TRUE; | |
803 } | |
804 FX_BOOL CBC_PDF417I::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
805 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderBitmapResult(pOutBitmap, e); | |
806 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
807 return TRUE; | |
808 } | |
809 CFX_WideString CBC_PDF417I::Decode(uint8_t* buf, | |
810 int32_t width, | |
811 int32_t hight, | |
812 int32_t& e) { | |
813 CFX_WideString str; | |
814 return str; | |
815 } | |
816 CFX_WideString CBC_PDF417I::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
817 CBC_BufferedImageLuminanceSource source(pBitmap); | |
818 CBC_GlobalHistogramBinarizer binarizer(&source); | |
819 CBC_BinaryBitmap bitmap(&binarizer); | |
820 CFX_ByteString bytestring = m_pBCReader->Decode(&bitmap, 0, e); | |
821 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
822 return CFX_WideString::FromUTF8(bytestring, bytestring.GetLength()); | |
823 } | |
824 CBC_DataMatrix::CBC_DataMatrix() { | |
825 m_pBCReader = (CBC_Reader*)new (CBC_DataMatrixReader); | |
826 ((CBC_DataMatrixReader*)m_pBCReader)->Init(); | |
827 m_pBCWriter = (CBC_Writer*)new (CBC_DataMatrixWriter); | |
828 } | |
829 CBC_DataMatrix::~CBC_DataMatrix() { | |
830 if (m_pBCReader) { | |
831 delete (m_pBCReader); | |
832 m_pBCReader = NULL; | |
833 } | |
834 if (m_pBCWriter) { | |
835 delete (m_pBCWriter); | |
836 m_pBCWriter = NULL; | |
837 } | |
838 } | |
839 FX_BOOL CBC_DataMatrix::Encode(const CFX_WideStringC& contents, | |
840 FX_BOOL isDevice, | |
841 int32_t& e) { | |
842 int32_t outWidth = 0; | |
843 int32_t outHeight = 0; | |
844 uint8_t* data = ((CBC_DataMatrixWriter*)m_pBCWriter) | |
845 ->Encode(contents, outWidth, outHeight, e); | |
846 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
847 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderResult(data, outWidth, outHeight, e); | |
848 FX_Free(data); | |
849 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
850 return TRUE; | |
851 } | |
852 FX_BOOL CBC_DataMatrix::RenderDevice(CFX_RenderDevice* device, | |
853 const CFX_Matrix* matirx, | |
854 int32_t& e) { | |
855 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderDeviceResult(device, matirx); | |
856 return TRUE; | |
857 } | |
858 FX_BOOL CBC_DataMatrix::RenderBitmap(CFX_DIBitmap*& pOutBitmap, int32_t& e) { | |
859 ((CBC_TwoDimWriter*)m_pBCWriter)->RenderBitmapResult(pOutBitmap, e); | |
860 BC_EXCEPTION_CHECK_ReturnValue(e, FALSE); | |
861 return TRUE; | |
862 } | |
863 CFX_WideString CBC_DataMatrix::Decode(uint8_t* buf, | |
864 int32_t width, | |
865 int32_t hight, | |
866 int32_t& e) { | |
867 CFX_WideString str; | |
868 return str; | |
869 } | |
870 CFX_WideString CBC_DataMatrix::Decode(CFX_DIBitmap* pBitmap, int32_t& e) { | |
871 CBC_BufferedImageLuminanceSource source(pBitmap); | |
872 CBC_GlobalHistogramBinarizer binarizer(&source); | |
873 CBC_BinaryBitmap bitmap(&binarizer); | |
874 CFX_ByteString retStr = m_pBCReader->Decode(&bitmap, 0, e); | |
875 BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L"")); | |
876 return CFX_WideString::FromUTF8(retStr, retStr.GetLength()); | |
877 } | |
OLD | NEW |