Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: xfa/src/fxbarcode/src/BC_OnedCode128Writer.cpp

Issue 842043002: Organize barcode codes into modules. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 2010 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 "barcode.h"
24 #include "include/BC_Writer.h"
25 #include "include/BC_Reader.h"
26 #include "include/BC_OneDReader.h"
27 #include "include/BC_OneDimWriter.h"
28 #include "include/BC_OnedCode128Reader.h"
29 #include "include/BC_OnedCode128Writer.h"
30 const FX_INT32 CBC_OnedCode128Writer::CODE_CODE_B = 100;
31 const FX_INT32 CBC_OnedCode128Writer::CODE_CODE_C = 99;
32 const FX_INT32 CBC_OnedCode128Writer::CODE_START_B = 104;
33 const FX_INT32 CBC_OnedCode128Writer::CODE_START_C = 105;
34 const FX_INT32 CBC_OnedCode128Writer::CODE_STOP = 106;
35 CBC_OnedCode128Writer::CBC_OnedCode128Writer()
36 {
37 m_codeFormat = BC_CODE128_B;
38 }
39 CBC_OnedCode128Writer::CBC_OnedCode128Writer(BC_TYPE type)
40 {
41 m_codeFormat = type;
42 }
43 CBC_OnedCode128Writer::~CBC_OnedCode128Writer()
44 {
45 }
46 BC_TYPE CBC_OnedCode128Writer::GetType()
47 {
48 return m_codeFormat;
49 }
50 FX_BOOL CBC_OnedCode128Writer::CheckContentValidity(FX_WSTR contents)
51 {
52 FX_BOOL ret = TRUE;
53 FX_INT32 position = 0;
54 FX_INT32 patternIndex = -1;
55 if (m_codeFormat == BC_CODE128_B || m_codeFormat == BC_CODE128_C) {
56 while (position < contents.GetLength()) {
57 patternIndex = (FX_INT32)contents.GetAt(position);
58 if (patternIndex >= 32 && patternIndex <= 126 && patternIndex != 34) {
59 position++;
60 continue;
61 } else {
62 ret = FALSE;
63 break;
64 }
65 position ++;
66 }
67 } else {
68 ret = FALSE;
69 }
70 return ret;
71 }
72 CFX_WideString CBC_OnedCode128Writer::FilterContents(FX_WSTR contents)
73 {
74 CFX_WideString filterChineseChar;
75 FX_WCHAR ch;
76 for (FX_INT32 i = 0; i < contents.GetLength(); i++) {
77 ch = contents.GetAt(i);
78 if(ch > 175) {
79 i++;
80 continue;
81 }
82 filterChineseChar += ch;
83 }
84 CFX_WideString filtercontents;
85 if (m_codeFormat == BC_CODE128_B) {
86 for (FX_INT32 i = 0; i < filterChineseChar.GetLength(); i++) {
87 ch = filterChineseChar.GetAt(i);
88 if (ch >= 32 && ch <= 126) {
89 filtercontents += ch;
90 } else {
91 continue;
92 }
93 }
94 } else if (m_codeFormat == BC_CODE128_C) {
95 for (FX_INT32 i = 0; i < filterChineseChar.GetLength(); i++) {
96 ch = filterChineseChar.GetAt(i);
97 if (ch >= 32 && ch <= 106) {
98 filtercontents += ch;
99 } else {
100 continue;
101 }
102 }
103 } else {
104 filtercontents = contents;
105 }
106 return filtercontents;
107 }
108 FX_BOOL CBC_OnedCode128Writer::SetTextLocation(BC_TEXT_LOC location)
109 {
110 if ( location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) {
111 return FALSE;
112 }
113 m_locTextLoc = location;
114 return TRUE;
115 }
116 FX_BYTE *CBC_OnedCode128Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, FX_INT32 &outWidth, FX_INT32 &outHeight, FX_INT32 hints, FX_INT32 &e)
117 {
118 if(format != BCFORMAT_CODE_128) {
119 e = BCExceptionOnlyEncodeCODE_128;
120 return NULL;
121 }
122 FX_BYTE *ret = CBC_OneDimWriter::Encode(contents, format, outWidth, outHeigh t, hints, e);
123 BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
124 return ret;
125 }
126 FX_BYTE *CBC_OnedCode128Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, FX_INT32 &outWidth, FX_INT32 &outHeight, FX_INT32 &e)
127 {
128 FX_BYTE *ret = Encode(contents, format, outWidth, outHeight, 0, e);
129 BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
130 return ret;
131 }
132 FX_BOOL CBC_OnedCode128Writer::IsDigits(const CFX_ByteString &contents, FX_INT32 start, FX_INT32 length)
133 {
134 FX_INT32 end = start + length;
135 for (FX_INT32 i = start; i < end; i++) {
136 if (contents[i] < '0' || contents[i] > '9') {
137 return FALSE;
138 }
139 }
140 return TRUE;
141 }
142 FX_BYTE *CBC_OnedCode128Writer::Encode(const CFX_ByteString &contents, FX_INT32 &outLength, FX_INT32 &e)
143 {
144 FX_INT32 length = contents.GetLength();
145 if(contents.GetLength() < 1 || contents.GetLength() > 80) {
146 e = BCExceptionContentsLengthShouldBetween1and80;
147 return NULL;
148 }
149 CFX_PtrArray patterns;
150 FX_INT32 checkSum = 0;
151 if (m_codeFormat == BC_CODE128_B) {
152 checkSum = Encode128B(contents, patterns);
153 } else if (m_codeFormat == BC_CODE128_C) {
154 checkSum = Encode128C(contents, patterns);
155 } else {
156 e = BCExceptionFormatException;
157 return NULL;
158 }
159 checkSum %= 103;
160 patterns.Add((FX_INT32*)CBC_OnedCode128Reader::CODE_PATTERNS[checkSum]);
161 patterns.Add((FX_INT32*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_STOP]);
162 m_iContentLen = contents.GetLength() + 3;
163 FX_INT32 codeWidth = 0;
164 for(FX_INT32 k = 0; k < patterns.GetSize(); k++) {
165 FX_INT32 *pattern = (FX_INT32*)patterns[k];
166 for(FX_INT32 j = 0; j < 7; j++) {
167 codeWidth += pattern[j];
168 }
169 }
170 outLength = codeWidth;
171 FX_BYTE *result = FX_Alloc(FX_BYTE, outLength);
172 FX_INT32 pos = 0;
173 for(FX_INT32 j = 0; j < patterns.GetSize(); j++) {
174 FX_INT32* pattern = (FX_INT32*)patterns[j];
175 pos += AppendPattern(result, pos, pattern, 7, 1, e);
176 if (e != BCExceptionNO) {
177 FX_Free (result);
178 return NULL;
179 }
180 }
181 return result;
182 }
183 FX_INT32 CBC_OnedCode128Writer::Encode128B(const CFX_ByteString &contents, CFX_ PtrArray &patterns)
184 {
185 FX_INT32 checkSum = 0;
186 FX_INT32 checkWeight = 1;
187 FX_INT32 position = 0;
188 patterns.Add((FX_INT32*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_START_B]);
189 checkSum += CODE_START_B * checkWeight;
190 while (position < contents.GetLength()) {
191 FX_INT32 patternIndex = 0;
192 patternIndex = contents[position] - ' ';
193 position += 1;
194 patterns.Add((FX_INT32*)CBC_OnedCode128Reader::CODE_PATTERNS[patternInde x]);
195 checkSum += patternIndex * checkWeight;
196 if (position != 0) {
197 checkWeight++;
198 }
199 }
200 return checkSum;
201 }
202 FX_INT32 CBC_OnedCode128Writer::Encode128C(const CFX_ByteString &contents, CFX_ PtrArray &patterns)
203 {
204 FX_INT32 checkSum = 0;
205 FX_INT32 checkWeight = 1;
206 FX_INT32 position = 0;
207 patterns.Add((FX_INT32*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_START_C]);
208 checkSum += CODE_START_C * checkWeight;
209 while (position < contents.GetLength()) {
210 FX_INT32 patternIndex = 0;
211 FX_CHAR ch = contents.GetAt(position);
212 if (ch < '0' || ch > '9') {
213 patternIndex = (FX_INT32)ch;
214 position++;
215 } else {
216 patternIndex = FXSYS_atoi(contents.Mid(position, 2));
217 if (contents.GetAt(position + 1) < '0' || contents.GetAt(position + 1) > '9') {
218 position += 1;
219 } else {
220 position += 2;
221 }
222 }
223 patterns.Add((FX_INT32*)CBC_OnedCode128Reader::CODE_PATTERNS[patternInde x]);
224 checkSum += patternIndex * checkWeight;
225 if (position != 0) {
226 checkWeight++;
227 }
228 }
229 return checkSum;
230 }
OLDNEW
« no previous file with comments | « xfa/src/fxbarcode/src/BC_OnedCode128Reader.cpp ('k') | xfa/src/fxbarcode/src/BC_OnedCode39Reader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698