summaryrefslogtreecommitdiff
path: root/xfa/src/fxbarcode/oned
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2015-08-04 13:00:21 -0700
committerNico Weber <thakis@chromium.org>2015-08-04 13:00:21 -0700
commit9d8ec5a6e37e8d1d4d4edca9040de234e2d4728f (patch)
treec97037f398d714665aefccb6eb54d0969ad7030c /xfa/src/fxbarcode/oned
parent780cee82236d1b3b0f9b01a22424e4b8ec9a6f12 (diff)
downloadpdfium-9d8ec5a6e37e8d1d4d4edca9040de234e2d4728f.tar.xz
XFA: clang-format all pdfium code.
No behavior change. Generated by: find . -name '*.cpp' -o -name '*.h' | \ grep -E -v 'third_party|thirdparties|lpng_v163|tiff_v403' | \ xargs ../../buildtools/mac/clang-format -i Then manually merged https://codereview.chromium.org/1269223002/ See thread "tabs vs spaces" on pdfium@googlegroups.com for discussion. BUG=none
Diffstat (limited to 'xfa/src/fxbarcode/oned')
-rw-r--r--xfa/src/fxbarcode/oned/BC_OneDReader.cpp279
-rw-r--r--xfa/src/fxbarcode/oned/BC_OneDReader.h50
-rw-r--r--xfa/src/fxbarcode/oned/BC_OneDimReader.cpp357
-rw-r--r--xfa/src/fxbarcode/oned/BC_OneDimReader.h71
-rw-r--r--xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp757
-rw-r--r--xfa/src/fxbarcode/oned/BC_OneDimWriter.h157
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp319
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h29
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp345
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h62
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp672
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h56
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp353
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h61
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp484
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h41
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp587
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h63
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp121
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h28
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp501
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h56
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp101
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h17
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp434
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h57
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp115
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h41
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp491
-rw-r--r--xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h50
30 files changed, 3494 insertions, 3261 deletions
diff --git a/xfa/src/fxbarcode/oned/BC_OneDReader.cpp b/xfa/src/fxbarcode/oned/BC_OneDReader.cpp
index 810b2c70c7..2338d0d086 100644
--- a/xfa/src/fxbarcode/oned/BC_OneDReader.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OneDReader.cpp
@@ -27,153 +27,160 @@
#include "BC_OneDReader.h"
const int32_t CBC_OneDReader::INTEGER_MATH_SHIFT = 8;
const int32_t CBC_OneDReader::PATTERN_MATCH_RESULT_SCALE_FACTOR = 1 << 8;
-CBC_OneDReader::CBC_OneDReader()
-{
+CBC_OneDReader::CBC_OneDReader() {}
+CBC_OneDReader::~CBC_OneDReader() {}
+CFX_ByteString CBC_OneDReader::Decode(CBC_BinaryBitmap* image, int32_t& e) {
+ CFX_ByteString strtemp = Decode(image, 0, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ return strtemp;
}
-CBC_OneDReader::~CBC_OneDReader()
-{
+CFX_ByteString CBC_OneDReader::Decode(CBC_BinaryBitmap* image,
+ int32_t hints,
+ int32_t& e) {
+ CFX_ByteString strtemp = DeDecode(image, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ return strtemp;
}
-CFX_ByteString CBC_OneDReader::Decode(CBC_BinaryBitmap *image, int32_t &e)
-{
- CFX_ByteString strtemp = Decode(image, 0, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- return strtemp;
-}
-CFX_ByteString CBC_OneDReader::Decode(CBC_BinaryBitmap *image, int32_t hints, int32_t &e)
-{
- CFX_ByteString strtemp = DeDecode(image, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- return strtemp;
-}
-CFX_ByteString CBC_OneDReader::DeDecode(CBC_BinaryBitmap *image, int32_t hints, int32_t &e)
-{
- int32_t width = image->GetWidth();
- int32_t height = image->GetHeight();
- CBC_CommonBitArray *row = NULL;
- int32_t middle = height >> 1;
- FX_BOOL tryHarder = FALSE;
- int32_t rowStep = FX_MAX(1, height >> (tryHarder ? 8 : 5));
- int32_t maxLines;
- if (tryHarder) {
- maxLines = height;
- } else {
- maxLines = 15;
- }
- for (int32_t x = 0; x < maxLines; x++) {
- int32_t rowStepsAboveOrBelow = (x + 1) >> 1;
- FX_BOOL isAbove = (x & 0x01) == 0;
- int32_t rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow);
- if (rowNumber < 0 || rowNumber >= height) {
- break;
- }
- row = image->GetBlackRow(rowNumber, NULL, e);
- if (e != BCExceptionNO) {
- e = BCExceptionNO;
- if(row != NULL) {
- delete row;
- row = NULL;
- }
- continue;
- }
- for (int32_t attempt = 0; attempt < 2; attempt++) {
- if (attempt == 1) {
- row->Reverse();
- }
- CFX_ByteString result = DecodeRow(rowNumber, row, hints, e);
- if (e != BCExceptionNO) {
- e = BCExceptionNO;
- continue;
- }
- if(row != NULL) {
- delete row;
- row = NULL;
- }
- return result;
- }
- if(row != NULL) {
- delete row;
- row = NULL;
- }
- }
- e = BCExceptionNotFound;
- return "";
-}
-void CBC_OneDReader::RecordPattern(CBC_CommonBitArray *row, int32_t start, CFX_Int32Array *counters, int32_t &e)
-{
- int32_t numCounters = counters->GetSize();
- for (int32_t i = 0; i < numCounters; i++) {
- (*counters)[i] = 0;
+CFX_ByteString CBC_OneDReader::DeDecode(CBC_BinaryBitmap* image,
+ int32_t hints,
+ int32_t& e) {
+ int32_t width = image->GetWidth();
+ int32_t height = image->GetHeight();
+ CBC_CommonBitArray* row = NULL;
+ int32_t middle = height >> 1;
+ FX_BOOL tryHarder = FALSE;
+ int32_t rowStep = FX_MAX(1, height >> (tryHarder ? 8 : 5));
+ int32_t maxLines;
+ if (tryHarder) {
+ maxLines = height;
+ } else {
+ maxLines = 15;
+ }
+ for (int32_t x = 0; x < maxLines; x++) {
+ int32_t rowStepsAboveOrBelow = (x + 1) >> 1;
+ FX_BOOL isAbove = (x & 0x01) == 0;
+ int32_t rowNumber =
+ middle +
+ rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow);
+ if (rowNumber < 0 || rowNumber >= height) {
+ break;
}
- int32_t end = row->GetSize();
- if (start >= end) {
- e = BCExceptionNotFound;
- return;
+ row = image->GetBlackRow(rowNumber, NULL, e);
+ if (e != BCExceptionNO) {
+ e = BCExceptionNO;
+ if (row != NULL) {
+ delete row;
+ row = NULL;
+ }
+ continue;
}
- FX_BOOL isWhite = !row->Get(start);
- int32_t counterPosition = 0;
- int32_t j = start;
- while (j < end) {
- FX_BOOL pixel = row->Get(j);
- if (pixel ^ isWhite) {
- (*counters)[counterPosition]++;
- } else {
- counterPosition++;
- if (counterPosition == numCounters) {
- break;
- } else {
- (*counters)[counterPosition] = 1;
- isWhite = !isWhite;
- }
- }
- j++;
+ for (int32_t attempt = 0; attempt < 2; attempt++) {
+ if (attempt == 1) {
+ row->Reverse();
+ }
+ CFX_ByteString result = DecodeRow(rowNumber, row, hints, e);
+ if (e != BCExceptionNO) {
+ e = BCExceptionNO;
+ continue;
+ }
+ if (row != NULL) {
+ delete row;
+ row = NULL;
+ }
+ return result;
}
- if (!(counterPosition == numCounters || (counterPosition == numCounters - 1 && j == end))) {
- e = BCExceptionNotFound;
- return;
+ if (row != NULL) {
+ delete row;
+ row = NULL;
}
+ }
+ e = BCExceptionNotFound;
+ return "";
}
-void CBC_OneDReader::RecordPatternInReverse(CBC_CommonBitArray *row, int32_t start, CFX_Int32Array *counters, int32_t &e)
-{
- int32_t numTransitionsLeft = counters->GetSize();
- FX_BOOL last = row->Get(start);
- while (start > 0 && numTransitionsLeft >= 0) {
- if (row->Get(--start) != last) {
- numTransitionsLeft--;
- last = !last;
- }
- }
- if (numTransitionsLeft >= 0) {
- e = BCExceptionNotFound;
- return;
+void CBC_OneDReader::RecordPattern(CBC_CommonBitArray* row,
+ int32_t start,
+ CFX_Int32Array* counters,
+ int32_t& e) {
+ int32_t numCounters = counters->GetSize();
+ for (int32_t i = 0; i < numCounters; i++) {
+ (*counters)[i] = 0;
+ }
+ int32_t end = row->GetSize();
+ if (start >= end) {
+ e = BCExceptionNotFound;
+ return;
+ }
+ FX_BOOL isWhite = !row->Get(start);
+ int32_t counterPosition = 0;
+ int32_t j = start;
+ while (j < end) {
+ FX_BOOL pixel = row->Get(j);
+ if (pixel ^ isWhite) {
+ (*counters)[counterPosition]++;
+ } else {
+ counterPosition++;
+ if (counterPosition == numCounters) {
+ break;
+ } else {
+ (*counters)[counterPosition] = 1;
+ isWhite = !isWhite;
+ }
}
- RecordPattern(row, start + 1, counters, e);
- BC_EXCEPTION_CHECK_ReturnVoid(e);
+ j++;
+ }
+ if (!(counterPosition == numCounters ||
+ (counterPosition == numCounters - 1 && j == end))) {
+ e = BCExceptionNotFound;
+ return;
+ }
}
-int32_t CBC_OneDReader::PatternMatchVariance(CFX_Int32Array *counters, const int32_t *pattern, int32_t maxIndividualVariance)
-{
- int32_t numCounters = counters->GetSize();
- int32_t total = 0;
- int32_t patternLength = 0;
- for (int32_t i = 0; i < numCounters; i++) {
- total += (*counters)[i];
- patternLength += pattern[i];
+void CBC_OneDReader::RecordPatternInReverse(CBC_CommonBitArray* row,
+ int32_t start,
+ CFX_Int32Array* counters,
+ int32_t& e) {
+ int32_t numTransitionsLeft = counters->GetSize();
+ FX_BOOL last = row->Get(start);
+ while (start > 0 && numTransitionsLeft >= 0) {
+ if (row->Get(--start) != last) {
+ numTransitionsLeft--;
+ last = !last;
}
- if (total < patternLength) {
+ }
+ if (numTransitionsLeft >= 0) {
+ e = BCExceptionNotFound;
+ return;
+ }
+ RecordPattern(row, start + 1, counters, e);
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
+}
+int32_t CBC_OneDReader::PatternMatchVariance(CFX_Int32Array* counters,
+ const int32_t* pattern,
+ int32_t maxIndividualVariance) {
+ int32_t numCounters = counters->GetSize();
+ int32_t total = 0;
+ int32_t patternLength = 0;
+ for (int32_t i = 0; i < numCounters; i++) {
+ total += (*counters)[i];
+ patternLength += pattern[i];
+ }
+ if (total < patternLength) {
#undef max
- return FXSYS_IntMax;
- }
- int32_t unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength;
- maxIndividualVariance = (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT;
- int32_t totalVariance = 0;
- for (int32_t x = 0; x < numCounters; x++) {
- int32_t counter = (*counters)[x] << INTEGER_MATH_SHIFT;
- int32_t scaledPattern = pattern[x] * unitBarWidth;
- int32_t variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;
- if (variance > maxIndividualVariance) {
+ return FXSYS_IntMax;
+ }
+ int32_t unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength;
+ maxIndividualVariance =
+ (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT;
+ int32_t totalVariance = 0;
+ for (int32_t x = 0; x < numCounters; x++) {
+ int32_t counter = (*counters)[x] << INTEGER_MATH_SHIFT;
+ int32_t scaledPattern = pattern[x] * unitBarWidth;
+ int32_t variance = counter > scaledPattern ? counter - scaledPattern
+ : scaledPattern - counter;
+ if (variance > maxIndividualVariance) {
#undef max
- return FXSYS_IntMax;
- }
- totalVariance += variance;
+ return FXSYS_IntMax;
}
- return totalVariance / total;
+ totalVariance += variance;
+ }
+ return totalVariance / total;
}
diff --git a/xfa/src/fxbarcode/oned/BC_OneDReader.h b/xfa/src/fxbarcode/oned/BC_OneDReader.h
index 064f5edae0..fcfea1fe58 100644
--- a/xfa/src/fxbarcode/oned/BC_OneDReader.h
+++ b/xfa/src/fxbarcode/oned/BC_OneDReader.h
@@ -10,25 +10,37 @@ class CBC_Reader;
class CBC_BinaryBitmap;
class CBC_CommonBitArray;
class CBC_OneDReader;
-class CBC_OneDReader : public CBC_Reader
-{
-public:
- CBC_OneDReader();
- virtual ~CBC_OneDReader();
- virtual CFX_ByteString Decode(CBC_BinaryBitmap *image, int32_t &e);
- virtual CFX_ByteString Decode(CBC_BinaryBitmap *image, int32_t hints, int32_t &e);
- virtual CFX_ByteString DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e)
- {
- return "";
- }
-private:
- CFX_ByteString DeDecode(CBC_BinaryBitmap *image, int32_t hints, int32_t &e);
+class CBC_OneDReader : public CBC_Reader {
+ public:
+ CBC_OneDReader();
+ virtual ~CBC_OneDReader();
+ virtual CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e);
+ virtual CFX_ByteString Decode(CBC_BinaryBitmap* image,
+ int32_t hints,
+ int32_t& e);
+ virtual CFX_ByteString DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e) {
+ return "";
+ }
-protected:
- const static int32_t INTEGER_MATH_SHIFT;
- const static int32_t PATTERN_MATCH_RESULT_SCALE_FACTOR;
- void RecordPattern(CBC_CommonBitArray *row, int32_t start, CFX_Int32Array *counters, int32_t &e);
- void RecordPatternInReverse(CBC_CommonBitArray *row, int32_t start, CFX_Int32Array *counters, int32_t &e);
- int32_t PatternMatchVariance(CFX_Int32Array *counters, const int32_t *pattern, int32_t maxIndividualVariance);
+ private:
+ CFX_ByteString DeDecode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e);
+
+ protected:
+ const static int32_t INTEGER_MATH_SHIFT;
+ const static int32_t PATTERN_MATCH_RESULT_SCALE_FACTOR;
+ void RecordPattern(CBC_CommonBitArray* row,
+ int32_t start,
+ CFX_Int32Array* counters,
+ int32_t& e);
+ void RecordPatternInReverse(CBC_CommonBitArray* row,
+ int32_t start,
+ CFX_Int32Array* counters,
+ int32_t& e);
+ int32_t PatternMatchVariance(CFX_Int32Array* counters,
+ const int32_t* pattern,
+ int32_t maxIndividualVariance);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OneDimReader.cpp b/xfa/src/fxbarcode/oned/BC_OneDimReader.cpp
index a2dd7a1972..b0ad088637 100644
--- a/xfa/src/fxbarcode/oned/BC_OneDimReader.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OneDimReader.cpp
@@ -30,206 +30,191 @@ const int32_t CBC_OneDimReader::MAX_INDIVIDUAL_VARIANCE = (int32_t)(256 * 0.7f);
const int32_t CBC_OneDimReader::START_END_PATTERN[3] = {1, 1, 1};
const int32_t CBC_OneDimReader::MIDDLE_PATTERN[5] = {1, 1, 1, 1, 1};
const int32_t CBC_OneDimReader::L_PATTERNS[10][4] = {
- {3, 2, 1, 1},
- {2, 2, 2, 1},
- {2, 1, 2, 2},
- {1, 4, 1, 1},
- {1, 1, 3, 2},
- {1, 2, 3, 1},
- {1, 1, 1, 4},
- {1, 3, 1, 2},
- {1, 2, 1, 3},
- {3, 1, 1, 2}
-};
+ {3, 2, 1, 1}, {2, 2, 2, 1}, {2, 1, 2, 2}, {1, 4, 1, 1}, {1, 1, 3, 2},
+ {1, 2, 3, 1}, {1, 1, 1, 4}, {1, 3, 1, 2}, {1, 2, 1, 3}, {3, 1, 1, 2}};
const int32_t CBC_OneDimReader::L_AND_G_PATTERNS[20][4] = {
- {3, 2, 1, 1},
- {2, 2, 2, 1},
- {2, 1, 2, 2},
- {1, 4, 1, 1},
- {1, 1, 3, 2},
- {1, 2, 3, 1},
- {1, 1, 1, 4},
- {1, 3, 1, 2},
- {1, 2, 1, 3},
- {3, 1, 1, 2},
- {1, 1, 2, 3},
- {1, 2, 2, 2},
- {2, 2, 1, 2},
- {1, 1, 4, 1},
- {2, 3, 1, 1},
- {1, 3, 2, 1},
- {4, 1, 1, 1},
- {2, 1, 3, 1},
- {3, 1, 2, 1},
- {2, 1, 1, 3}
-};
-CBC_OneDimReader::CBC_OneDimReader()
-{
-}
-CBC_OneDimReader::~CBC_OneDimReader()
-{
-}
-CFX_Int32Array *CBC_OneDimReader::FindStartGuardPattern(CBC_CommonBitArray *row, int32_t &e)
-{
- FX_BOOL foundStart = FALSE;
- CFX_Int32Array *startRange = NULL;
- CFX_Int32Array startEndPattern;
- startEndPattern.SetSize(3);
- startEndPattern[0] = START_END_PATTERN[0];
- startEndPattern[1] = START_END_PATTERN[1];
- startEndPattern[2] = START_END_PATTERN[2];
- int32_t nextStart = 0;
- while (!foundStart) {
- if(startRange != NULL) {
- delete startRange;
- startRange = NULL;
- }
- startRange = FindGuardPattern(row, nextStart, FALSE, &startEndPattern, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- int32_t start = (*startRange)[0];
- nextStart = (*startRange)[1];
- if (start <= 1) {
- break;
- }
- int32_t quietStart = start - (nextStart - start);
- if (quietStart >= 0) {
- FX_BOOL booT = row->IsRange(quietStart, start, FALSE, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- foundStart = booT;
- }
+ {3, 2, 1, 1}, {2, 2, 2, 1}, {2, 1, 2, 2}, {1, 4, 1, 1}, {1, 1, 3, 2},
+ {1, 2, 3, 1}, {1, 1, 1, 4}, {1, 3, 1, 2}, {1, 2, 1, 3}, {3, 1, 1, 2},
+ {1, 1, 2, 3}, {1, 2, 2, 2}, {2, 2, 1, 2}, {1, 1, 4, 1}, {2, 3, 1, 1},
+ {1, 3, 2, 1}, {4, 1, 1, 1}, {2, 1, 3, 1}, {3, 1, 2, 1}, {2, 1, 1, 3}};
+CBC_OneDimReader::CBC_OneDimReader() {}
+CBC_OneDimReader::~CBC_OneDimReader() {}
+CFX_Int32Array* CBC_OneDimReader::FindStartGuardPattern(CBC_CommonBitArray* row,
+ int32_t& e) {
+ FX_BOOL foundStart = FALSE;
+ CFX_Int32Array* startRange = NULL;
+ CFX_Int32Array startEndPattern;
+ startEndPattern.SetSize(3);
+ startEndPattern[0] = START_END_PATTERN[0];
+ startEndPattern[1] = START_END_PATTERN[1];
+ startEndPattern[2] = START_END_PATTERN[2];
+ int32_t nextStart = 0;
+ while (!foundStart) {
+ if (startRange != NULL) {
+ delete startRange;
+ startRange = NULL;
}
- return startRange;
+ startRange = FindGuardPattern(row, nextStart, FALSE, &startEndPattern, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ int32_t start = (*startRange)[0];
+ nextStart = (*startRange)[1];
+ if (start <= 1) {
+ break;
+ }
+ int32_t quietStart = start - (nextStart - start);
+ if (quietStart >= 0) {
+ FX_BOOL booT = row->IsRange(quietStart, start, FALSE, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ foundStart = booT;
+ }
+ }
+ return startRange;
}
-CFX_ByteString CBC_OneDimReader::DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e)
-{
- CFX_Int32Array* StartPattern = FindStartGuardPattern(row, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- CBC_AutoPtr<CFX_Int32Array > result(StartPattern);
- CFX_ByteString temp = DecodeRow(rowNumber, row, result.get(), hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- return temp;
+CFX_ByteString CBC_OneDimReader::DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e) {
+ CFX_Int32Array* StartPattern = FindStartGuardPattern(row, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ CBC_AutoPtr<CFX_Int32Array> result(StartPattern);
+ CFX_ByteString temp = DecodeRow(rowNumber, row, result.get(), hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ return temp;
}
-CFX_ByteString CBC_OneDimReader::DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, CFX_Int32Array *startGuardRange, int32_t hints, int32_t &e)
-{
- CFX_ByteString result;
- int32_t endStart = DecodeMiddle(row, startGuardRange, result, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- FX_BOOL b = CheckChecksum(result, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- if (!b) {
- e = BCExceptionChecksumException;
- return "";
- }
- return result;
+CFX_ByteString CBC_OneDimReader::DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ CFX_Int32Array* startGuardRange,
+ int32_t hints,
+ int32_t& e) {
+ CFX_ByteString result;
+ int32_t endStart = DecodeMiddle(row, startGuardRange, result, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ FX_BOOL b = CheckChecksum(result, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ if (!b) {
+ e = BCExceptionChecksumException;
+ return "";
+ }
+ return result;
}
-FX_BOOL CBC_OneDimReader::CheckChecksum(CFX_ByteString &s, int32_t &e)
-{
- FX_BOOL temp = CheckStandardUPCEANChecksum(s, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, FALSE);
- return temp;
+FX_BOOL CBC_OneDimReader::CheckChecksum(CFX_ByteString& s, int32_t& e) {
+ FX_BOOL temp = CheckStandardUPCEANChecksum(s, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, FALSE);
+ return temp;
}
-FX_BOOL CBC_OneDimReader::CheckStandardUPCEANChecksum(CFX_ByteString &s, int32_t &e)
-{
- int32_t length = s.GetLength();
- if (length == 0) {
- return FALSE;
- }
- int32_t sum = 0;
- for (int32_t i = length - 2; i >= 0; i -= 2) {
- int32_t digit = (int32_t) s[i] - (int32_t) '0';
- if (digit < 0 || digit > 9) {
- e = BCExceptionFormatException;
- return FALSE;
- }
- sum += digit;
+FX_BOOL CBC_OneDimReader::CheckStandardUPCEANChecksum(CFX_ByteString& s,
+ int32_t& e) {
+ int32_t length = s.GetLength();
+ if (length == 0) {
+ return FALSE;
+ }
+ int32_t sum = 0;
+ for (int32_t i = length - 2; i >= 0; i -= 2) {
+ int32_t digit = (int32_t)s[i] - (int32_t)'0';
+ if (digit < 0 || digit > 9) {
+ e = BCExceptionFormatException;
+ return FALSE;
}
- sum *= 3;
- for (int32_t j = length - 1; j >= 0; j -= 2) {
- int32_t digit = (int32_t) s[j] - (int32_t) '0';
- if (digit < 0 || digit > 9) {
- e = BCExceptionFormatException;
- return FALSE;
- }
- sum += digit;
+ sum += digit;
+ }
+ sum *= 3;
+ for (int32_t j = length - 1; j >= 0; j -= 2) {
+ int32_t digit = (int32_t)s[j] - (int32_t)'0';
+ if (digit < 0 || digit > 9) {
+ e = BCExceptionFormatException;
+ return FALSE;
}
- return sum % 10 == 0;
+ sum += digit;
+ }
+ return sum % 10 == 0;
}
-CFX_Int32Array *CBC_OneDimReader::DecodeEnd(CBC_CommonBitArray* row, int32_t endStart, int32_t &e)
-{
- CFX_Int32Array startEndPattern;
- startEndPattern.Add(START_END_PATTERN[0]);
- startEndPattern.Add(START_END_PATTERN[1]);
- startEndPattern.Add(START_END_PATTERN[2]);
- CFX_Int32Array* FindGuard = FindGuardPattern(row, endStart, FALSE, &startEndPattern, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return FindGuard;
+CFX_Int32Array* CBC_OneDimReader::DecodeEnd(CBC_CommonBitArray* row,
+ int32_t endStart,
+ int32_t& e) {
+ CFX_Int32Array startEndPattern;
+ startEndPattern.Add(START_END_PATTERN[0]);
+ startEndPattern.Add(START_END_PATTERN[1]);
+ startEndPattern.Add(START_END_PATTERN[2]);
+ CFX_Int32Array* FindGuard =
+ FindGuardPattern(row, endStart, FALSE, &startEndPattern, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return FindGuard;
}
-CFX_Int32Array *CBC_OneDimReader::FindGuardPattern(CBC_CommonBitArray *row, int32_t rowOffset, FX_BOOL whiteFirst, CFX_Int32Array *pattern, int32_t &e)
-{
- int32_t patternLength = pattern->GetSize();
- CFX_Int32Array counters;
- counters.SetSize(patternLength);
- int32_t width = row->GetSize();
- FX_BOOL isWhite = FALSE;
- while (rowOffset < width) {
- isWhite = !row->Get(rowOffset);
- if (whiteFirst == isWhite) {
- break;
- }
- rowOffset++;
+CFX_Int32Array* CBC_OneDimReader::FindGuardPattern(CBC_CommonBitArray* row,
+ int32_t rowOffset,
+ FX_BOOL whiteFirst,
+ CFX_Int32Array* pattern,
+ int32_t& e) {
+ int32_t patternLength = pattern->GetSize();
+ CFX_Int32Array counters;
+ counters.SetSize(patternLength);
+ int32_t width = row->GetSize();
+ FX_BOOL isWhite = FALSE;
+ while (rowOffset < width) {
+ isWhite = !row->Get(rowOffset);
+ if (whiteFirst == isWhite) {
+ break;
}
- int32_t counterPosition = 0;
- int32_t patternStart = rowOffset;
- for (int32_t x = rowOffset; x < width; x++) {
- FX_BOOL pixel = row->Get(x);
- if (pixel ^ isWhite) {
- counters[counterPosition]++;
- } else {
- if (counterPosition == patternLength - 1) {
- if (PatternMatchVariance(&counters, &(*pattern)[0], MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
- CFX_Int32Array *result = FX_NEW CFX_Int32Array();
- result->SetSize(2);
- (*result)[0] = patternStart;
- (*result)[1] = x;
- return result;
- }
- patternStart += counters[0] + counters[1];
- for (int32_t y = 2; y < patternLength; y++) {
- counters[y - 2] = counters[y];
- }
- counters[patternLength - 2] = 0;
- counters[patternLength - 1] = 0;
- counterPosition--;
- } else {
- counterPosition++;
- }
- counters[counterPosition] = 1;
- isWhite = !isWhite;
+ rowOffset++;
+ }
+ int32_t counterPosition = 0;
+ int32_t patternStart = rowOffset;
+ for (int32_t x = rowOffset; x < width; x++) {
+ FX_BOOL pixel = row->Get(x);
+ if (pixel ^ isWhite) {
+ counters[counterPosition]++;
+ } else {
+ if (counterPosition == patternLength - 1) {
+ if (PatternMatchVariance(&counters, &(*pattern)[0],
+ MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
+ CFX_Int32Array* result = FX_NEW CFX_Int32Array();
+ result->SetSize(2);
+ (*result)[0] = patternStart;
+ (*result)[1] = x;
+ return result;
}
- }
- e = BCExceptionNotFound;
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return NULL;
-}
-int32_t CBC_OneDimReader::DecodeDigit(CBC_CommonBitArray *row, CFX_Int32Array *counters, int32_t rowOffset, const int32_t* patterns, int32_t patternLength, int32_t &e)
-{
- RecordPattern(row, rowOffset, counters, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- int32_t bestVariance = MAX_AVG_VARIANCE;
- int32_t bestMatch = -1;
- int32_t max = patternLength;
- for (int32_t i = 0; i < max; i++) {
- int32_t variance = PatternMatchVariance(counters, &patterns[i * 4], MAX_INDIVIDUAL_VARIANCE);
- if (variance < bestVariance) {
- bestVariance = variance;
- bestMatch = i;
+ patternStart += counters[0] + counters[1];
+ for (int32_t y = 2; y < patternLength; y++) {
+ counters[y - 2] = counters[y];
}
+ counters[patternLength - 2] = 0;
+ counters[patternLength - 1] = 0;
+ counterPosition--;
+ } else {
+ counterPosition++;
+ }
+ counters[counterPosition] = 1;
+ isWhite = !isWhite;
}
- if (bestMatch >= 0) {
- return bestMatch;
- } else {
- e = BCExceptionNotFound;
- return 0;
+ }
+ e = BCExceptionNotFound;
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return NULL;
+}
+int32_t CBC_OneDimReader::DecodeDigit(CBC_CommonBitArray* row,
+ CFX_Int32Array* counters,
+ int32_t rowOffset,
+ const int32_t* patterns,
+ int32_t patternLength,
+ int32_t& e) {
+ RecordPattern(row, rowOffset, counters, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ int32_t bestVariance = MAX_AVG_VARIANCE;
+ int32_t bestMatch = -1;
+ int32_t max = patternLength;
+ for (int32_t i = 0; i < max; i++) {
+ int32_t variance = PatternMatchVariance(counters, &patterns[i * 4],
+ MAX_INDIVIDUAL_VARIANCE);
+ if (variance < bestVariance) {
+ bestVariance = variance;
+ bestMatch = i;
}
+ }
+ if (bestMatch >= 0) {
+ return bestMatch;
+ } else {
+ e = BCExceptionNotFound;
return 0;
+ }
+ return 0;
}
diff --git a/xfa/src/fxbarcode/oned/BC_OneDimReader.h b/xfa/src/fxbarcode/oned/BC_OneDimReader.h
index 2e644de841..5a6de8d8fe 100644
--- a/xfa/src/fxbarcode/oned/BC_OneDimReader.h
+++ b/xfa/src/fxbarcode/oned/BC_OneDimReader.h
@@ -9,31 +9,52 @@
class CBC_OneDReader;
class CBC_CommonBitArray;
class CBC_OneDimReader;
-class CBC_OneDimReader : public CBC_OneDReader
-{
-private:
- const static int32_t MAX_AVG_VARIANCE;
- const static int32_t MAX_INDIVIDUAL_VARIANCE;
+class CBC_OneDimReader : public CBC_OneDReader {
+ private:
+ const static int32_t MAX_AVG_VARIANCE;
+ const static int32_t MAX_INDIVIDUAL_VARIANCE;
- FX_BOOL CheckStandardUPCEANChecksum(CFX_ByteString &s, int32_t &e);
-public:
- const static int32_t START_END_PATTERN[3];
- const static int32_t MIDDLE_PATTERN[5];
- const static int32_t L_PATTERNS[10][4];
- const static int32_t L_AND_G_PATTERNS[20][4];
- CBC_OneDimReader();
- virtual ~CBC_OneDimReader();
- CFX_ByteString DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e);
- CFX_ByteString DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, CFX_Int32Array *startGuardRange, int32_t hints, int32_t &e);
-protected:
- CFX_Int32Array *FindStartGuardPattern(CBC_CommonBitArray *row, int32_t &e);
- virtual FX_BOOL CheckChecksum(CFX_ByteString &s, int32_t &e);
- CFX_Int32Array *FindGuardPattern(CBC_CommonBitArray *row, int32_t rowOffset, FX_BOOL whiteFirst, CFX_Int32Array *pattern, int32_t &e);
- int32_t DecodeDigit(CBC_CommonBitArray *row, CFX_Int32Array *counters, int32_t rowOffset, const int32_t* patterns, int32_t patternLength, int32_t &e);
- virtual int32_t DecodeMiddle(CBC_CommonBitArray *row, CFX_Int32Array *startRange, CFX_ByteString &resultResult, int32_t &e)
- {
- return 0;
- }
- virtual CFX_Int32Array *DecodeEnd(CBC_CommonBitArray *row, int32_t endStart, int32_t &e);
+ FX_BOOL CheckStandardUPCEANChecksum(CFX_ByteString& s, int32_t& e);
+
+ public:
+ const static int32_t START_END_PATTERN[3];
+ const static int32_t MIDDLE_PATTERN[5];
+ const static int32_t L_PATTERNS[10][4];
+ const static int32_t L_AND_G_PATTERNS[20][4];
+ CBC_OneDimReader();
+ virtual ~CBC_OneDimReader();
+ CFX_ByteString DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e);
+ CFX_ByteString DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ CFX_Int32Array* startGuardRange,
+ int32_t hints,
+ int32_t& e);
+
+ protected:
+ CFX_Int32Array* FindStartGuardPattern(CBC_CommonBitArray* row, int32_t& e);
+ virtual FX_BOOL CheckChecksum(CFX_ByteString& s, int32_t& e);
+ CFX_Int32Array* FindGuardPattern(CBC_CommonBitArray* row,
+ int32_t rowOffset,
+ FX_BOOL whiteFirst,
+ CFX_Int32Array* pattern,
+ int32_t& e);
+ int32_t DecodeDigit(CBC_CommonBitArray* row,
+ CFX_Int32Array* counters,
+ int32_t rowOffset,
+ const int32_t* patterns,
+ int32_t patternLength,
+ int32_t& e);
+ virtual int32_t DecodeMiddle(CBC_CommonBitArray* row,
+ CFX_Int32Array* startRange,
+ CFX_ByteString& resultResult,
+ int32_t& e) {
+ return 0;
+ }
+ virtual CFX_Int32Array* DecodeEnd(CBC_CommonBitArray* row,
+ int32_t endStart,
+ int32_t& e);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp b/xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp
index 382b82a12b..06b7d759cd 100644
--- a/xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OneDimWriter.cpp
@@ -24,392 +24,421 @@
#include "../BC_Writer.h"
#include "../common/BC_CommonBitMatrix.h"
#include "BC_OneDimWriter.h"
-CBC_OneDimWriter::CBC_OneDimWriter()
-{
- m_locTextLoc = BC_TEXT_LOC_BELOWEMBED;
- m_bPrintChecksum = TRUE;
- m_iDataLenth = 0;
- m_bCalcChecksum = FALSE;
- m_pFont = NULL;
- m_fFontSize = 10; ;
- m_iFontStyle = 0;
- m_fontColor = 0xff000000;
- m_iContentLen = 0;
- m_bLeftPadding = FALSE;
- m_bRightPadding = FALSE;
- m_output = NULL;
+CBC_OneDimWriter::CBC_OneDimWriter() {
+ m_locTextLoc = BC_TEXT_LOC_BELOWEMBED;
+ m_bPrintChecksum = TRUE;
+ m_iDataLenth = 0;
+ m_bCalcChecksum = FALSE;
+ m_pFont = NULL;
+ m_fFontSize = 10;
+ ;
+ m_iFontStyle = 0;
+ m_fontColor = 0xff000000;
+ m_iContentLen = 0;
+ m_bLeftPadding = FALSE;
+ m_bRightPadding = FALSE;
+ m_output = NULL;
}
-CBC_OneDimWriter::~CBC_OneDimWriter()
-{
- if (m_output != NULL) {
- delete m_output;
- m_output = NULL;
- }
+CBC_OneDimWriter::~CBC_OneDimWriter() {
+ if (m_output != NULL) {
+ delete m_output;
+ m_output = NULL;
+ }
}
-void CBC_OneDimWriter::SetPrintChecksum(FX_BOOL checksum)
-{
- m_bPrintChecksum = checksum;
+void CBC_OneDimWriter::SetPrintChecksum(FX_BOOL checksum) {
+ m_bPrintChecksum = checksum;
}
-void CBC_OneDimWriter::SetDataLength(int32_t length)
-{
- m_iDataLenth = length;
+void CBC_OneDimWriter::SetDataLength(int32_t length) {
+ m_iDataLenth = length;
}
-void CBC_OneDimWriter::SetCalcChecksum(int32_t state)
-{
- m_bCalcChecksum = state;
+void CBC_OneDimWriter::SetCalcChecksum(int32_t state) {
+ m_bCalcChecksum = state;
}
-FX_BOOL CBC_OneDimWriter::SetFont(CFX_Font * cFont)
-{
- if (cFont == NULL) {
- return FALSE;
- }
- m_pFont = cFont;
- return TRUE;
+FX_BOOL CBC_OneDimWriter::SetFont(CFX_Font* cFont) {
+ if (cFont == NULL) {
+ return FALSE;
+ }
+ m_pFont = cFont;
+ return TRUE;
}
-void CBC_OneDimWriter::SetFontSize(FX_FLOAT size)
-{
- m_fFontSize = size;
+void CBC_OneDimWriter::SetFontSize(FX_FLOAT size) {
+ m_fFontSize = size;
}
-void CBC_OneDimWriter::SetFontStyle(int32_t style)
-{
- m_iFontStyle = style;
+void CBC_OneDimWriter::SetFontStyle(int32_t style) {
+ m_iFontStyle = style;
}
-void CBC_OneDimWriter::SetFontColor(FX_ARGB color)
-{
- m_fontColor = color;
+void CBC_OneDimWriter::SetFontColor(FX_ARGB color) {
+ m_fontColor = color;
}
-FX_WCHAR CBC_OneDimWriter::Upper(FX_WCHAR ch)
-{
- if(ch >= 'a' && ch <= 'z') {
- ch = ch - ('a' - 'A');
- }
- return ch;
+FX_WCHAR CBC_OneDimWriter::Upper(FX_WCHAR ch) {
+ if (ch >= 'a' && ch <= 'z') {
+ ch = ch - ('a' - 'A');
+ }
+ return ch;
}
-uint8_t* CBC_OneDimWriter::Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e)
-{
- uint8_t *ret = NULL;
- outHeight = 1;
- if (m_Width >= 20) {
- ret = Encode(contents, outWidth, e);
- } else {
- ret = Encode(contents, outWidth, e);
- }
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OneDimWriter::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e) {
+ uint8_t* ret = NULL;
+ outHeight = 1;
+ if (m_Width >= 20) {
+ ret = Encode(contents, outWidth, e);
+ } else {
+ ret = Encode(contents, outWidth, e);
+ }
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t *CBC_OneDimWriter::Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t &e)
-{
- uint8_t *ret = Encode(contents, format, outWidth, outHeight, 0, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OneDimWriter::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e) {
+ uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-int32_t CBC_OneDimWriter::AppendPattern(uint8_t* target, int32_t pos, const int32_t* pattern , int32_t patternLength, int32_t startColor, int32_t &e)
-{
- if (startColor != 0 && startColor != 1) {
- e = BCExceptionValueMustBeEither0or1;
- return 0;
- }
- uint8_t color = (uint8_t) startColor;
- int32_t numAdded = 0;
- for (int32_t i = 0; i < patternLength; i++) {
- for (int32_t j = 0; j < pattern[i]; j++) {
- target[pos] = color;
- pos += 1;
- numAdded += 1;
- }
- color ^= 1;
- }
- return numAdded;
+int32_t CBC_OneDimWriter::AppendPattern(uint8_t* target,
+ int32_t pos,
+ const int32_t* pattern,
+ int32_t patternLength,
+ int32_t startColor,
+ int32_t& e) {
+ if (startColor != 0 && startColor != 1) {
+ e = BCExceptionValueMustBeEither0or1;
+ return 0;
+ }
+ uint8_t color = (uint8_t)startColor;
+ int32_t numAdded = 0;
+ for (int32_t i = 0; i < patternLength; i++) {
+ for (int32_t j = 0; j < pattern[i]; j++) {
+ target[pos] = color;
+ pos += 1;
+ numAdded += 1;
+ }
+ color ^= 1;
+ }
+ return numAdded;
}
-void CBC_OneDimWriter::CalcTextInfo(const CFX_ByteString &text, FXTEXT_CHARPOS *charPos, CFX_Font *cFont, FX_FLOAT geWidth, int32_t fontSize, FX_FLOAT &charsLen)
-{
+void CBC_OneDimWriter::CalcTextInfo(const CFX_ByteString& text,
+ FXTEXT_CHARPOS* charPos,
+ CFX_Font* cFont,
+ FX_FLOAT geWidth,
+ int32_t fontSize,
+ FX_FLOAT& charsLen) {
#ifdef FXFM_ENCODING_NONE
- IFX_FontEncodingEx* encoding = FX_CreateFontEncodingEx(cFont);
+ IFX_FontEncodingEx* encoding = FX_CreateFontEncodingEx(cFont);
#else
- IFX_FontEncoding * encoding = FXGE_CreateUnicodeEncoding(cFont);
+ IFX_FontEncoding* encoding = FXGE_CreateUnicodeEncoding(cFont);
#endif
- int32_t length = text.GetLength();
- FX_DWORD *pCharCode = FX_Alloc(FX_DWORD, text.GetLength());
- FX_FLOAT charWidth = 0;
- for (int32_t j = 0; j < text.GetLength(); j++) {
- pCharCode[j] = encoding->CharCodeFromUnicode(text[j]);
- int32_t glyp_code = encoding->GlyphFromCharCode(pCharCode[j]);
- int32_t glyp_value = cFont->GetGlyphWidth(glyp_code);
- FX_FLOAT temp = (FX_FLOAT)((glyp_value) * fontSize / 1000.0);
- charWidth += temp;
- }
- charsLen = charWidth;
- FX_FLOAT leftPositon = (FX_FLOAT)(geWidth - charsLen) / 2.0f;
- if (leftPositon < 0 && geWidth == 0) {
- leftPositon = 0;
- }
- FX_FLOAT penX = 0.0;
- FX_FLOAT penY = (FX_FLOAT)FXSYS_abs(cFont->GetDescent()) * (FX_FLOAT)fontSize / 1000.0f;
- FX_FLOAT left = leftPositon;
- FX_FLOAT top = 0.0;
- charPos[0].m_OriginX = penX + left;
- charPos[0].m_OriginY = penY + top;
- charPos[0].m_GlyphIndex = encoding->GlyphFromCharCode(pCharCode[0]);
- charPos[0].m_FontCharWidth = cFont->GetGlyphWidth(charPos[0].m_GlyphIndex);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- charPos[0].m_ExtGID = charPos[0].m_GlyphIndex;
+ int32_t length = text.GetLength();
+ FX_DWORD* pCharCode = FX_Alloc(FX_DWORD, text.GetLength());
+ FX_FLOAT charWidth = 0;
+ for (int32_t j = 0; j < text.GetLength(); j++) {
+ pCharCode[j] = encoding->CharCodeFromUnicode(text[j]);
+ int32_t glyp_code = encoding->GlyphFromCharCode(pCharCode[j]);
+ int32_t glyp_value = cFont->GetGlyphWidth(glyp_code);
+ FX_FLOAT temp = (FX_FLOAT)((glyp_value)*fontSize / 1000.0);
+ charWidth += temp;
+ }
+ charsLen = charWidth;
+ FX_FLOAT leftPositon = (FX_FLOAT)(geWidth - charsLen) / 2.0f;
+ if (leftPositon < 0 && geWidth == 0) {
+ leftPositon = 0;
+ }
+ FX_FLOAT penX = 0.0;
+ FX_FLOAT penY =
+ (FX_FLOAT)FXSYS_abs(cFont->GetDescent()) * (FX_FLOAT)fontSize / 1000.0f;
+ FX_FLOAT left = leftPositon;
+ FX_FLOAT top = 0.0;
+ charPos[0].m_OriginX = penX + left;
+ charPos[0].m_OriginY = penY + top;
+ charPos[0].m_GlyphIndex = encoding->GlyphFromCharCode(pCharCode[0]);
+ charPos[0].m_FontCharWidth = cFont->GetGlyphWidth(charPos[0].m_GlyphIndex);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ charPos[0].m_ExtGID = charPos[0].m_GlyphIndex;
#endif
- penX += (FX_FLOAT)(charPos[0].m_FontCharWidth) * (FX_FLOAT)fontSize / 1000.0f;
- for (int32_t i = 1; i < length; i++) {
- charPos[i].m_OriginX = penX + left;
- charPos[i].m_OriginY = penY + top;
- charPos[i].m_GlyphIndex = encoding->GlyphFromCharCode(pCharCode[i]);
- charPos[i].m_FontCharWidth = cFont->GetGlyphWidth(charPos[i].m_GlyphIndex);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- charPos[i].m_ExtGID = charPos[i].m_GlyphIndex;
+ penX += (FX_FLOAT)(charPos[0].m_FontCharWidth) * (FX_FLOAT)fontSize / 1000.0f;
+ for (int32_t i = 1; i < length; i++) {
+ charPos[i].m_OriginX = penX + left;
+ charPos[i].m_OriginY = penY + top;
+ charPos[i].m_GlyphIndex = encoding->GlyphFromCharCode(pCharCode[i]);
+ charPos[i].m_FontCharWidth = cFont->GetGlyphWidth(charPos[i].m_GlyphIndex);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ charPos[i].m_ExtGID = charPos[i].m_GlyphIndex;
#endif
- penX += (FX_FLOAT)(charPos[i].m_FontCharWidth) * (FX_FLOAT)fontSize / 1000.0f;
- }
- FX_Free (pCharCode);
- delete encoding;
- encoding = NULL;
+ penX +=
+ (FX_FLOAT)(charPos[i].m_FontCharWidth) * (FX_FLOAT)fontSize / 1000.0f;
+ }
+ FX_Free(pCharCode);
+ delete encoding;
+ encoding = NULL;
}
-void CBC_OneDimWriter::ShowDeviceChars(CFX_RenderDevice *device, const CFX_Matrix* matrix, const CFX_ByteString str, FX_FLOAT geWidth, FXTEXT_CHARPOS* pCharPos, FX_FLOAT locX, FX_FLOAT locY, int32_t barWidth)
-{
- int32_t iFontSize = (int32_t)fabs(m_fFontSize);
- int32_t iTextHeight = iFontSize + 1;
- CFX_FloatRect rect((FX_FLOAT)locX, (FX_FLOAT)locY, (FX_FLOAT)(locX + geWidth), (FX_FLOAT)(locY + iTextHeight));
- if (geWidth != m_Width) {
- rect.right -= 1;
- }
- matrix->TransformRect(rect);
- FX_RECT re = rect.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)locX, (FX_FLOAT)(locY + iFontSize));
- if (matrix != NULL) {
- affine_matrix.Concat(*matrix);
- }
- FX_BOOL ret = device->DrawNormalText(str.GetLength(),
- pCharPos,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
+void CBC_OneDimWriter::ShowDeviceChars(CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ const CFX_ByteString str,
+ FX_FLOAT geWidth,
+ FXTEXT_CHARPOS* pCharPos,
+ FX_FLOAT locX,
+ FX_FLOAT locY,
+ int32_t barWidth) {
+ int32_t iFontSize = (int32_t)fabs(m_fFontSize);
+ int32_t iTextHeight = iFontSize + 1;
+ CFX_FloatRect rect((FX_FLOAT)locX, (FX_FLOAT)locY, (FX_FLOAT)(locX + geWidth),
+ (FX_FLOAT)(locY + iTextHeight));
+ if (geWidth != m_Width) {
+ rect.right -= 1;
+ }
+ matrix->TransformRect(rect);
+ FX_RECT re = rect.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ CFX_Matrix affine_matrix(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)locX,
+ (FX_FLOAT)(locY + iFontSize));
+ if (matrix != NULL) {
+ affine_matrix.Concat(*matrix);
+ }
+ FX_BOOL ret = device->DrawNormalText(
+ str.GetLength(), pCharPos, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
}
-void CBC_OneDimWriter::ShowBitmapChars(CFX_DIBitmap *pOutBitmap, const CFX_ByteString str, FX_FLOAT geWidth, FXTEXT_CHARPOS* pCharPos, FX_FLOAT locX, FX_FLOAT locY, int32_t barWidth)
-{
- int32_t iFontSize = (int32_t)fabs(m_fFontSize);
- int32_t iTextHeight = iFontSize + 1;
- CFX_FxgeDevice ge;
- ge.Create((int)geWidth, iTextHeight , m_colorSpace);
- FX_RECT geRect(0, 0, (int)geWidth, iTextHeight);
- ge.FillRect(&geRect, m_backgroundColor);
- CFX_AffineMatrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
- FX_BOOL ret = ge.DrawNormalText(str.GetLength(),
- pCharPos,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- CFX_FxgeDevice geBitmap;
- geBitmap.Attach(pOutBitmap);
- geBitmap.SetDIBits(ge.GetBitmap(), (int)locX, (int)locY);
+void CBC_OneDimWriter::ShowBitmapChars(CFX_DIBitmap* pOutBitmap,
+ const CFX_ByteString str,
+ FX_FLOAT geWidth,
+ FXTEXT_CHARPOS* pCharPos,
+ FX_FLOAT locX,
+ FX_FLOAT locY,
+ int32_t barWidth) {
+ int32_t iFontSize = (int32_t)fabs(m_fFontSize);
+ int32_t iTextHeight = iFontSize + 1;
+ CFX_FxgeDevice ge;
+ ge.Create((int)geWidth, iTextHeight, m_colorSpace);
+ FX_RECT geRect(0, 0, (int)geWidth, iTextHeight);
+ ge.FillRect(&geRect, m_backgroundColor);
+ CFX_AffineMatrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
+ FX_BOOL ret = ge.DrawNormalText(
+ str.GetLength(), pCharPos, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ CFX_FxgeDevice geBitmap;
+ geBitmap.Attach(pOutBitmap);
+ geBitmap.SetDIBits(ge.GetBitmap(), (int)locX, (int)locY);
}
-void CBC_OneDimWriter::ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice *device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e)
-{
- if (device == NULL && pOutBitmap == NULL) {
- e = BCExceptionIllegalArgument;
- return;
- }
- if (m_pFont == NULL) {
- e = BCExceptionNullPointer;
- return;
- }
- CFX_ByteString str = FX_UTF8Encode(contents);
- int32_t iLen = str.GetLength();
- FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen);
- if (!pCharPos) {
- return;
- }
- FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen);
- FX_FLOAT charsLen = 0;
- FX_FLOAT geWidth = 0;
- if ( m_locTextLoc == BC_TEXT_LOC_ABOVEEMBED ||
- m_locTextLoc == BC_TEXT_LOC_BELOWEMBED ) {
- geWidth = 0;
- } else if ( m_locTextLoc == BC_TEXT_LOC_ABOVE ||
- m_locTextLoc == BC_TEXT_LOC_BELOW ) {
- geWidth = (FX_FLOAT)barWidth;
- }
- int32_t iFontSize = (int32_t)fabs(m_fFontSize);
- int32_t iTextHeight = iFontSize + 1;
- CalcTextInfo(str, pCharPos, m_pFont, geWidth, iFontSize, charsLen);
- if (charsLen < 1) {
- return;
- }
- int32_t locX = 0;
- int32_t locY = 0;
- switch (m_locTextLoc) {
- case BC_TEXT_LOC_ABOVEEMBED:
- locX = (int32_t)(barWidth - charsLen) / 2;
- locY = 0;
- geWidth = charsLen;
- break;
- case BC_TEXT_LOC_ABOVE:
- locX = 0;
- locY = 0;
- geWidth = (FX_FLOAT)barWidth;
- break;
- case BC_TEXT_LOC_BELOWEMBED:
- locX = (int32_t)(barWidth - charsLen) / 2;
- locY = m_Height - iTextHeight;
- geWidth = charsLen;
- break;
- case BC_TEXT_LOC_BELOW:
- default:
- locX = 0;
- locY = m_Height - iTextHeight;
- geWidth = (FX_FLOAT)barWidth;
- break;
- }
- if (device != NULL) {
- ShowDeviceChars(device, matrix, str, geWidth, pCharPos, (FX_FLOAT)locX, (FX_FLOAT)locY, barWidth);
- } else {
- ShowBitmapChars(pOutBitmap, str, geWidth, pCharPos, (FX_FLOAT)locX, (FX_FLOAT)locY, barWidth);
- }
- FX_Free(pCharPos);
+void CBC_OneDimWriter::ShowChars(const CFX_WideStringC& contents,
+ CFX_DIBitmap* pOutBitmap,
+ CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ int32_t barWidth,
+ int32_t multiple,
+ int32_t& e) {
+ if (device == NULL && pOutBitmap == NULL) {
+ e = BCExceptionIllegalArgument;
+ return;
+ }
+ if (m_pFont == NULL) {
+ e = BCExceptionNullPointer;
+ return;
+ }
+ CFX_ByteString str = FX_UTF8Encode(contents);
+ int32_t iLen = str.GetLength();
+ FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen);
+ if (!pCharPos) {
+ return;
+ }
+ FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen);
+ FX_FLOAT charsLen = 0;
+ FX_FLOAT geWidth = 0;
+ if (m_locTextLoc == BC_TEXT_LOC_ABOVEEMBED ||
+ m_locTextLoc == BC_TEXT_LOC_BELOWEMBED) {
+ geWidth = 0;
+ } else if (m_locTextLoc == BC_TEXT_LOC_ABOVE ||
+ m_locTextLoc == BC_TEXT_LOC_BELOW) {
+ geWidth = (FX_FLOAT)barWidth;
+ }
+ int32_t iFontSize = (int32_t)fabs(m_fFontSize);
+ int32_t iTextHeight = iFontSize + 1;
+ CalcTextInfo(str, pCharPos, m_pFont, geWidth, iFontSize, charsLen);
+ if (charsLen < 1) {
+ return;
+ }
+ int32_t locX = 0;
+ int32_t locY = 0;
+ switch (m_locTextLoc) {
+ case BC_TEXT_LOC_ABOVEEMBED:
+ locX = (int32_t)(barWidth - charsLen) / 2;
+ locY = 0;
+ geWidth = charsLen;
+ break;
+ case BC_TEXT_LOC_ABOVE:
+ locX = 0;
+ locY = 0;
+ geWidth = (FX_FLOAT)barWidth;
+ break;
+ case BC_TEXT_LOC_BELOWEMBED:
+ locX = (int32_t)(barWidth - charsLen) / 2;
+ locY = m_Height - iTextHeight;
+ geWidth = charsLen;
+ break;
+ case BC_TEXT_LOC_BELOW:
+ default:
+ locX = 0;
+ locY = m_Height - iTextHeight;
+ geWidth = (FX_FLOAT)barWidth;
+ break;
+ }
+ if (device != NULL) {
+ ShowDeviceChars(device, matrix, str, geWidth, pCharPos, (FX_FLOAT)locX,
+ (FX_FLOAT)locY, barWidth);
+ } else {
+ ShowBitmapChars(pOutBitmap, str, geWidth, pCharPos, (FX_FLOAT)locX,
+ (FX_FLOAT)locY, barWidth);
+ }
+ FX_Free(pCharPos);
}
-void CBC_OneDimWriter::RenderBitmapResult(CFX_DIBitmap *&pOutBitmap, const CFX_WideStringC& contents, int32_t &e)
-{
- if (m_output == NULL) {
- BC_EXCEPTION_CHECK_ReturnVoid(e);
- }
- pOutBitmap = CreateDIBitmap(m_output->GetWidth(), m_output->GetHeight());
- pOutBitmap->Clear(m_backgroundColor);
- if (!pOutBitmap) {
- e = BCExceptionFailToCreateBitmap;
- return;
- }
- for (int32_t x = 0; x < m_output->GetWidth(); x++) {
- for (int32_t y = 0; y < m_output->GetHeight(); y++) {
- if (m_output->Get(x, y)) {
- pOutBitmap->SetPixel(x, y, m_barColor);
- }
- }
- }
- int32_t i = 0;
- for (; i < contents.GetLength(); i++)
- if (contents.GetAt(i) != ' ') {
- break;
- }
- if (m_locTextLoc != BC_TEXT_LOC_NONE && i < contents.GetLength()) {
- ShowChars(contents, pOutBitmap, NULL, NULL, m_barWidth, m_multiple, e);
- BC_EXCEPTION_CHECK_ReturnVoid(e);
- }
- CFX_DIBitmap * pStretchBitmap = pOutBitmap->StretchTo(m_Width, m_Height);
- if (pOutBitmap) {
- delete pOutBitmap;
- }
- pOutBitmap = pStretchBitmap;
+void CBC_OneDimWriter::RenderBitmapResult(CFX_DIBitmap*& pOutBitmap,
+ const CFX_WideStringC& contents,
+ int32_t& e) {
+ if (m_output == NULL) {
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
+ }
+ pOutBitmap = CreateDIBitmap(m_output->GetWidth(), m_output->GetHeight());
+ pOutBitmap->Clear(m_backgroundColor);
+ if (!pOutBitmap) {
+ e = BCExceptionFailToCreateBitmap;
+ return;
+ }
+ for (int32_t x = 0; x < m_output->GetWidth(); x++) {
+ for (int32_t y = 0; y < m_output->GetHeight(); y++) {
+ if (m_output->Get(x, y)) {
+ pOutBitmap->SetPixel(x, y, m_barColor);
+ }
+ }
+ }
+ int32_t i = 0;
+ for (; i < contents.GetLength(); i++)
+ if (contents.GetAt(i) != ' ') {
+ break;
+ }
+ if (m_locTextLoc != BC_TEXT_LOC_NONE && i < contents.GetLength()) {
+ ShowChars(contents, pOutBitmap, NULL, NULL, m_barWidth, m_multiple, e);
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
+ }
+ CFX_DIBitmap* pStretchBitmap = pOutBitmap->StretchTo(m_Width, m_Height);
+ if (pOutBitmap) {
+ delete pOutBitmap;
+ }
+ pOutBitmap = pStretchBitmap;
}
-void CBC_OneDimWriter::RenderDeviceResult(CFX_RenderDevice* device, const CFX_Matrix* matrix, const CFX_WideStringC& contents, int32_t &e)
-{
- if (m_output == NULL) {
- BC_EXCEPTION_CHECK_ReturnVoid(e);
- }
- CFX_GraphStateData stateData;
- CFX_PathData path;
- path.AppendRect(0, 0, (FX_FLOAT)m_Width, (FX_FLOAT)m_Height);
- device->DrawPath(&path, matrix, &stateData, m_backgroundColor, m_backgroundColor, FXFILL_ALTERNATE);
- CFX_Matrix matri(m_outputHScale, 0.0, 0.0, (FX_FLOAT)m_Height, 0.0, 0.0);
- matri.Concat(*matrix);
- for (int32_t x = 0; x < m_output->GetWidth(); x++) {
- for (int32_t y = 0; y < m_output->GetHeight(); y++) {
- CFX_PathData rect;
- rect.AppendRect((FX_FLOAT)x, (FX_FLOAT)y, (FX_FLOAT)(x + 1), (FX_FLOAT)(y + 1));
- CFX_GraphStateData stateData;
- if (m_output->Get(x, y)) {
- device->DrawPath(&rect, &matri, &stateData, m_barColor, 0, FXFILL_WINDING);
- }
- }
- }
- int32_t i = 0;
- for (; i < contents.GetLength(); i++)
- if (contents.GetAt(i) != ' ') {
- break;
- }
- if (m_locTextLoc != BC_TEXT_LOC_NONE && i < contents.GetLength()) {
- ShowChars(contents, NULL, device, matrix, m_barWidth, m_multiple, e);
- BC_EXCEPTION_CHECK_ReturnVoid(e);
- }
+void CBC_OneDimWriter::RenderDeviceResult(CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ const CFX_WideStringC& contents,
+ int32_t& e) {
+ if (m_output == NULL) {
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
+ }
+ CFX_GraphStateData stateData;
+ CFX_PathData path;
+ path.AppendRect(0, 0, (FX_FLOAT)m_Width, (FX_FLOAT)m_Height);
+ device->DrawPath(&path, matrix, &stateData, m_backgroundColor,
+ m_backgroundColor, FXFILL_ALTERNATE);
+ CFX_Matrix matri(m_outputHScale, 0.0, 0.0, (FX_FLOAT)m_Height, 0.0, 0.0);
+ matri.Concat(*matrix);
+ for (int32_t x = 0; x < m_output->GetWidth(); x++) {
+ for (int32_t y = 0; y < m_output->GetHeight(); y++) {
+ CFX_PathData rect;
+ rect.AppendRect((FX_FLOAT)x, (FX_FLOAT)y, (FX_FLOAT)(x + 1),
+ (FX_FLOAT)(y + 1));
+ CFX_GraphStateData stateData;
+ if (m_output->Get(x, y)) {
+ device->DrawPath(&rect, &matri, &stateData, m_barColor, 0,
+ FXFILL_WINDING);
+ }
+ }
+ }
+ int32_t i = 0;
+ for (; i < contents.GetLength(); i++)
+ if (contents.GetAt(i) != ' ') {
+ break;
+ }
+ if (m_locTextLoc != BC_TEXT_LOC_NONE && i < contents.GetLength()) {
+ ShowChars(contents, NULL, device, matrix, m_barWidth, m_multiple, e);
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
+ }
}
-void CBC_OneDimWriter::RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e)
-{
- if (codeLength < 1) {
- BC_EXCEPTION_CHECK_ReturnVoid(e);
- }
- if (m_ModuleHeight < 20.0) {
- m_ModuleHeight = 20;
- }
- int32_t codeOldLength = codeLength;
- int32_t leftPadding = 0;
- int32_t rightPadding = 0;
- if (m_bLeftPadding) {
- leftPadding = 7;
- }
- if (m_bRightPadding) {
- rightPadding = 7;
- }
- codeLength += leftPadding;
- codeLength += rightPadding;
- m_outputHScale = 1.0;
- if (m_Width > 0) {
- m_outputHScale = (FX_FLOAT)m_Width / (FX_FLOAT)codeLength;
- }
- if (!isDevice) {
- m_outputHScale = FX_MAX(m_outputHScale, m_ModuleWidth);
- }
- FX_FLOAT dataLengthScale = 1.0;
- if (m_iDataLenth > 0 && contents.GetLength() != 0) {
- dataLengthScale = FX_FLOAT(contents.GetLength()) / FX_FLOAT(m_iDataLenth);
- }
- if (m_iDataLenth > 0 && contents.GetLength() == 0) {
- dataLengthScale = FX_FLOAT(1) / FX_FLOAT(m_iDataLenth);
- }
- m_multiple = 1;
- if (!isDevice) {
- m_multiple = (int32_t)ceil(m_outputHScale * dataLengthScale);
- }
- int32_t outputHeight = 1;
- if (!isDevice) {
- if (m_Height == 0) {
- outputHeight = FX_MAX(20, m_ModuleHeight);
- } else {
- outputHeight = m_Height;
- }
- }
- int32_t outputWidth = codeLength;
- if (!isDevice) {
- outputWidth = (int32_t)(codeLength * m_multiple / dataLengthScale);
- }
- m_barWidth = m_Width;
- if (!isDevice) {
- m_barWidth = codeLength * m_multiple;
- }
- m_output = FX_NEW CBC_CommonBitMatrix;
- m_output->Init(outputWidth, outputHeight);
- int32_t outputX = leftPadding * m_multiple;
- for (int32_t inputX = 0; inputX < codeOldLength; inputX++) {
- if (code[inputX] == 1) {
- if (outputX >= outputWidth ) {
- break;
- }
- if (outputX + m_multiple > outputWidth && outputWidth - outputX > 0) {
- m_output->SetRegion(outputX, 0, outputWidth - outputX , outputHeight, e);
- break;
- }
- m_output->SetRegion(outputX, 0, m_multiple, outputHeight, e);
- BC_EXCEPTION_CHECK_ReturnVoid(e);
- }
- outputX += m_multiple;
- }
+void CBC_OneDimWriter::RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e) {
+ if (codeLength < 1) {
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
+ }
+ if (m_ModuleHeight < 20.0) {
+ m_ModuleHeight = 20;
+ }
+ int32_t codeOldLength = codeLength;
+ int32_t leftPadding = 0;
+ int32_t rightPadding = 0;
+ if (m_bLeftPadding) {
+ leftPadding = 7;
+ }
+ if (m_bRightPadding) {
+ rightPadding = 7;
+ }
+ codeLength += leftPadding;
+ codeLength += rightPadding;
+ m_outputHScale = 1.0;
+ if (m_Width > 0) {
+ m_outputHScale = (FX_FLOAT)m_Width / (FX_FLOAT)codeLength;
+ }
+ if (!isDevice) {
+ m_outputHScale = FX_MAX(m_outputHScale, m_ModuleWidth);
+ }
+ FX_FLOAT dataLengthScale = 1.0;
+ if (m_iDataLenth > 0 && contents.GetLength() != 0) {
+ dataLengthScale = FX_FLOAT(contents.GetLength()) / FX_FLOAT(m_iDataLenth);
+ }
+ if (m_iDataLenth > 0 && contents.GetLength() == 0) {
+ dataLengthScale = FX_FLOAT(1) / FX_FLOAT(m_iDataLenth);
+ }
+ m_multiple = 1;
+ if (!isDevice) {
+ m_multiple = (int32_t)ceil(m_outputHScale * dataLengthScale);
+ }
+ int32_t outputHeight = 1;
+ if (!isDevice) {
+ if (m_Height == 0) {
+ outputHeight = FX_MAX(20, m_ModuleHeight);
+ } else {
+ outputHeight = m_Height;
+ }
+ }
+ int32_t outputWidth = codeLength;
+ if (!isDevice) {
+ outputWidth = (int32_t)(codeLength * m_multiple / dataLengthScale);
+ }
+ m_barWidth = m_Width;
+ if (!isDevice) {
+ m_barWidth = codeLength * m_multiple;
+ }
+ m_output = FX_NEW CBC_CommonBitMatrix;
+ m_output->Init(outputWidth, outputHeight);
+ int32_t outputX = leftPadding * m_multiple;
+ for (int32_t inputX = 0; inputX < codeOldLength; inputX++) {
+ if (code[inputX] == 1) {
+ if (outputX >= outputWidth) {
+ break;
+ }
+ if (outputX + m_multiple > outputWidth && outputWidth - outputX > 0) {
+ m_output->SetRegion(outputX, 0, outputWidth - outputX, outputHeight, e);
+ break;
+ }
+ m_output->SetRegion(outputX, 0, m_multiple, outputHeight, e);
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
+ }
+ outputX += m_multiple;
+ }
}
diff --git a/xfa/src/fxbarcode/oned/BC_OneDimWriter.h b/xfa/src/fxbarcode/oned/BC_OneDimWriter.h
index b8019fe290..0645b406cc 100644
--- a/xfa/src/fxbarcode/oned/BC_OneDimWriter.h
+++ b/xfa/src/fxbarcode/oned/BC_OneDimWriter.h
@@ -9,62 +9,105 @@
class CBC_Writer;
class CBC_CommonBitMatrix;
class CBC_OneDimWriter;
-class CBC_OneDimWriter : public CBC_Writer
-{
-public:
- CBC_OneDimWriter();
- virtual ~CBC_OneDimWriter();
- uint8_t *Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t &e);
- uint8_t *Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e);
- virtual uint8_t *Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e)
- {
- return NULL;
- };
- virtual void RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e);
- virtual void RenderBitmapResult(CFX_DIBitmap *&pOutBitmap, const CFX_WideStringC& contents, int32_t &e);
- virtual void RenderDeviceResult(CFX_RenderDevice* device, const CFX_Matrix* matrix, const CFX_WideStringC& contents, int32_t &e);
- virtual FX_BOOL CheckContentValidity(const CFX_WideStringC& contents)
- {
- return TRUE;
- };
- virtual CFX_WideString FilterContents(const CFX_WideStringC& contents)
- {
- return CFX_WideString();
- }
- virtual CFX_WideString RenderTextContents(const CFX_WideStringC& contents)
- {
- return CFX_WideString();
- }
- virtual void SetPrintChecksum(FX_BOOL checksum);
- virtual void SetDataLength(int32_t length);
- virtual void SetCalcChecksum(int32_t state);
- virtual void SetFontSize(FX_FLOAT size);
- virtual void SetFontStyle(int32_t style);
- virtual void SetFontColor(FX_ARGB color);
- virtual FX_BOOL SetFont(CFX_Font * cFont);
-protected:
- FX_BOOL m_bPrintChecksum;
- int32_t m_iDataLenth;
- FX_BOOL m_bCalcChecksum;
- CFX_Font* m_pFont;
- FX_FLOAT m_fFontSize;
- int32_t m_iFontStyle;
- FX_DWORD m_fontColor;
- BC_TEXT_LOC m_locTextLoc;
- int32_t m_iContentLen;
- FX_BOOL m_bLeftPadding;
- FX_BOOL m_bRightPadding;
- CBC_CommonBitMatrix* m_output;
- int32_t m_barWidth;
- int32_t m_multiple;
- FX_FLOAT m_outputHScale;
- void CalcTextInfo(const CFX_ByteString &text, FXTEXT_CHARPOS *charPos, CFX_Font *cFont, FX_FLOAT geWidth, int32_t fontSize, FX_FLOAT &charsLen);
- virtual void ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice *device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e);
- virtual void ShowBitmapChars(CFX_DIBitmap *pOutBitmap, const CFX_ByteString str, FX_FLOAT geWidth, FXTEXT_CHARPOS* pCharPos, FX_FLOAT locX, FX_FLOAT locY, int32_t barWidth);
- virtual void ShowDeviceChars(CFX_RenderDevice *device, const CFX_Matrix* matrix, const CFX_ByteString str, FX_FLOAT geWidth, FXTEXT_CHARPOS* pCharPos, FX_FLOAT locX, FX_FLOAT locY, int32_t barWidth);
- int32_t AppendPattern(uint8_t* target, int32_t pos, const int32_t* pattern, int32_t patternLength, int32_t startColor, int32_t &e);
- FX_WCHAR Upper(FX_WCHAR ch);
+class CBC_OneDimWriter : public CBC_Writer {
+ public:
+ CBC_OneDimWriter();
+ virtual ~CBC_OneDimWriter();
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e);
+ virtual uint8_t* Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e) {
+ return NULL;
+ };
+ virtual void RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e);
+ virtual void RenderBitmapResult(CFX_DIBitmap*& pOutBitmap,
+ const CFX_WideStringC& contents,
+ int32_t& e);
+ virtual void RenderDeviceResult(CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ const CFX_WideStringC& contents,
+ int32_t& e);
+ virtual FX_BOOL CheckContentValidity(const CFX_WideStringC& contents) {
+ return TRUE;
+ };
+ virtual CFX_WideString FilterContents(const CFX_WideStringC& contents) {
+ return CFX_WideString();
+ }
+ virtual CFX_WideString RenderTextContents(const CFX_WideStringC& contents) {
+ return CFX_WideString();
+ }
+ virtual void SetPrintChecksum(FX_BOOL checksum);
+ virtual void SetDataLength(int32_t length);
+ virtual void SetCalcChecksum(int32_t state);
+ virtual void SetFontSize(FX_FLOAT size);
+ virtual void SetFontStyle(int32_t style);
+ virtual void SetFontColor(FX_ARGB color);
+ virtual FX_BOOL SetFont(CFX_Font* cFont);
+
+ protected:
+ FX_BOOL m_bPrintChecksum;
+ int32_t m_iDataLenth;
+ FX_BOOL m_bCalcChecksum;
+ CFX_Font* m_pFont;
+ FX_FLOAT m_fFontSize;
+ int32_t m_iFontStyle;
+ FX_DWORD m_fontColor;
+ BC_TEXT_LOC m_locTextLoc;
+ int32_t m_iContentLen;
+ FX_BOOL m_bLeftPadding;
+ FX_BOOL m_bRightPadding;
+ CBC_CommonBitMatrix* m_output;
+ int32_t m_barWidth;
+ int32_t m_multiple;
+ FX_FLOAT m_outputHScale;
+ void CalcTextInfo(const CFX_ByteString& text,
+ FXTEXT_CHARPOS* charPos,
+ CFX_Font* cFont,
+ FX_FLOAT geWidth,
+ int32_t fontSize,
+ FX_FLOAT& charsLen);
+ virtual void ShowChars(const CFX_WideStringC& contents,
+ CFX_DIBitmap* pOutBitmap,
+ CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ int32_t barWidth,
+ int32_t multiple,
+ int32_t& e);
+ virtual void ShowBitmapChars(CFX_DIBitmap* pOutBitmap,
+ const CFX_ByteString str,
+ FX_FLOAT geWidth,
+ FXTEXT_CHARPOS* pCharPos,
+ FX_FLOAT locX,
+ FX_FLOAT locY,
+ int32_t barWidth);
+ virtual void ShowDeviceChars(CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ const CFX_ByteString str,
+ FX_FLOAT geWidth,
+ FXTEXT_CHARPOS* pCharPos,
+ FX_FLOAT locX,
+ FX_FLOAT locY,
+ int32_t barWidth);
+ int32_t AppendPattern(uint8_t* target,
+ int32_t pos,
+ const int32_t* pattern,
+ int32_t patternLength,
+ int32_t startColor,
+ int32_t& e);
+ FX_WCHAR Upper(FX_WCHAR ch);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp b/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp
index 7f7a69c1b7..ed12f676b4 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.cpp
@@ -26,181 +26,182 @@
#include "../oned/BC_OneDReader.h"
#include "../oned/BC_OnedCode39Reader.h"
#include "../oned/BC_OnedCodaBarReader.h"
-const FX_CHAR* CBC_OnedCodaBarReader::ALPHABET_STRING = "0123456789-$:/.+ABCDTN";
+const FX_CHAR* CBC_OnedCodaBarReader::ALPHABET_STRING =
+ "0123456789-$:/.+ABCDTN";
const int32_t CBC_OnedCodaBarReader::CHARACTER_ENCODINGS[22] = {
- 0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, 0x030, 0x048,
- 0x00c, 0x018, 0x045, 0x051, 0x054, 0x015, 0x01A, 0x029, 0x00B, 0x00E,
- 0x01A, 0x029
-};
+ 0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024,
+ 0x030, 0x048, 0x00c, 0x018, 0x045, 0x051, 0x054, 0x015,
+ 0x01A, 0x029, 0x00B, 0x00E, 0x01A, 0x029};
const int32_t CBC_OnedCodaBarReader::minCharacterLength = 3;
-const FX_CHAR CBC_OnedCodaBarReader::STARTEND_ENCODING[8] = {'E', '*', 'A', 'B', 'C', 'D', 'T', 'N'};
-CBC_OnedCodaBarReader::CBC_OnedCodaBarReader()
-{
-}
-CBC_OnedCodaBarReader::~CBC_OnedCodaBarReader()
-{
-}
-CFX_ByteString CBC_OnedCodaBarReader::DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e)
-{
- CFX_Int32Array *int32Ptr = FindAsteriskPattern(row, e);
+const FX_CHAR CBC_OnedCodaBarReader::STARTEND_ENCODING[8] = {
+ 'E', '*', 'A', 'B', 'C', 'D', 'T', 'N'};
+CBC_OnedCodaBarReader::CBC_OnedCodaBarReader() {}
+CBC_OnedCodaBarReader::~CBC_OnedCodaBarReader() {}
+CFX_ByteString CBC_OnedCodaBarReader::DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e) {
+ CFX_Int32Array* int32Ptr = FindAsteriskPattern(row, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ CBC_AutoPtr<CFX_Int32Array> start(int32Ptr);
+ (*start)[1] = 0;
+ int32_t nextStart = (*start)[1];
+ int32_t end = row->GetSize();
+ while (nextStart < end && !row->Get(nextStart)) {
+ nextStart++;
+ }
+ CFX_ByteString result;
+ CFX_Int32Array counters;
+ counters.SetSize(7);
+ FX_CHAR decodedChar;
+ int32_t lastStart;
+ do {
+ RecordPattern(row, nextStart, &counters, e);
BC_EXCEPTION_CHECK_ReturnValue(e, "");
- CBC_AutoPtr<CFX_Int32Array> start(int32Ptr);
- (*start)[1] = 0;
- int32_t nextStart = (*start)[1];
- int32_t end = row->GetSize();
- while (nextStart < end && !row->Get(nextStart)) {
- nextStart++;
- }
- CFX_ByteString result;
- CFX_Int32Array counters;
- counters.SetSize(7);
- FX_CHAR decodedChar;
- int32_t lastStart;
- do {
- RecordPattern(row, nextStart, &counters, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- decodedChar = ToNarrowWidePattern(&counters);
- if (decodedChar == '!') {
- e = BCExceptionNotFound;
- return "";
- }
- result += decodedChar;
- lastStart = nextStart;
- for (int32_t i = 0; i < counters.GetSize(); i++) {
- nextStart += counters[i];
- }
- while (nextStart < end && !row->Get(nextStart)) {
- nextStart++;
- }
- } while (nextStart < end);
- int32_t lastPatternSize = 0;
- for (int32_t j = 0; j < counters.GetSize(); j++) {
- lastPatternSize += counters[j];
+ decodedChar = ToNarrowWidePattern(&counters);
+ if (decodedChar == '!') {
+ e = BCExceptionNotFound;
+ return "";
}
- int32_t whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;
- if (nextStart != end && (whiteSpaceAfterEnd / 2 < lastPatternSize)) {
- e = BCExceptionNotFound;
- return "";
+ result += decodedChar;
+ lastStart = nextStart;
+ for (int32_t i = 0; i < counters.GetSize(); i++) {
+ nextStart += counters[i];
}
- if (result.GetLength() < 2) {
- e = BCExceptionNotFound;
- return "";
+ while (nextStart < end && !row->Get(nextStart)) {
+ nextStart++;
}
- FX_CHAR startchar = result[0];
- if (!ArrayContains(STARTEND_ENCODING, startchar)) {
- e = BCExceptionNotFound;
- return "";
+ } while (nextStart < end);
+ int32_t lastPatternSize = 0;
+ for (int32_t j = 0; j < counters.GetSize(); j++) {
+ lastPatternSize += counters[j];
+ }
+ int32_t whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;
+ if (nextStart != end && (whiteSpaceAfterEnd / 2 < lastPatternSize)) {
+ e = BCExceptionNotFound;
+ return "";
+ }
+ if (result.GetLength() < 2) {
+ e = BCExceptionNotFound;
+ return "";
+ }
+ FX_CHAR startchar = result[0];
+ if (!ArrayContains(STARTEND_ENCODING, startchar)) {
+ e = BCExceptionNotFound;
+ return "";
+ }
+ int32_t len = result.GetLength();
+ CFX_ByteString temp = result;
+ for (int32_t k = 1; k < result.GetLength(); k++) {
+ if (ArrayContains(STARTEND_ENCODING, result[k])) {
+ if ((k + 1) != result.GetLength()) {
+ result.Delete(1, k);
+ k = 1;
+ }
}
- int32_t len = result.GetLength();
- CFX_ByteString temp = result;
- for (int32_t k = 1; k < result.GetLength(); k++) {
- if (ArrayContains(STARTEND_ENCODING, result[k])) {
- if ((k + 1) != result.GetLength()) {
- result.Delete(1, k);
- k = 1;
- }
- }
+ }
+ if (result.GetLength() < 5) {
+ int32_t index = temp.Find(result.Mid(1, result.GetLength() - 1));
+ if (index == len - (result.GetLength() - 1)) {
+ e = BCExceptionNotFound;
+ return "";
}
- if (result.GetLength() < 5) {
- int32_t index = temp.Find(result.Mid(1, result.GetLength() - 1));
- if (index == len - (result.GetLength() - 1)) {
- e = BCExceptionNotFound;
- return "";
- }
+ }
+ if (result.GetLength() > minCharacterLength) {
+ result = result.Mid(1, result.GetLength() - 2);
+ } else {
+ e = BCExceptionNotFound;
+ return "";
+ }
+ return result;
+}
+CFX_Int32Array* CBC_OnedCodaBarReader::FindAsteriskPattern(
+ CBC_CommonBitArray* row,
+ int32_t& e) {
+ int32_t width = row->GetSize();
+ int32_t rowOffset = 0;
+ while (rowOffset < width) {
+ if (row->Get(rowOffset)) {
+ break;
}
- if (result.GetLength() > minCharacterLength) {
- result = result.Mid(1, result.GetLength() - 2);
+ rowOffset++;
+ }
+ int32_t counterPosition = 0;
+ CFX_Int32Array counters;
+ counters.SetSize(7);
+ int32_t patternStart = rowOffset;
+ FX_BOOL isWhite = FALSE;
+ int32_t patternLength = counters.GetSize();
+ for (int32_t i = rowOffset; i < width; i++) {
+ FX_BOOL pixel = row->Get(i);
+ if (pixel ^ isWhite) {
+ counters[counterPosition]++;
} else {
- e = BCExceptionNotFound;
- return "";
- }
- return result;
-}
-CFX_Int32Array *CBC_OnedCodaBarReader::FindAsteriskPattern(CBC_CommonBitArray *row, int32_t &e)
-{
- int32_t width = row->GetSize();
- int32_t rowOffset = 0;
- while (rowOffset < width) {
- if (row->Get(rowOffset)) {
- break;
+ if (counterPosition == patternLength - 1) {
+ if (ArrayContains(STARTEND_ENCODING, ToNarrowWidePattern(&counters))) {
+ FX_BOOL btemp3 =
+ row->IsRange(FX_MAX(0, patternStart - (i - patternStart) / 2),
+ patternStart, FALSE, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ if (btemp3) {
+ CFX_Int32Array* result = FX_NEW CFX_Int32Array();
+ result->SetSize(2);
+ (*result)[0] = patternStart;
+ (*result)[1] = i;
+ return result;
+ }
}
- rowOffset++;
- }
- int32_t counterPosition = 0;
- CFX_Int32Array counters;
- counters.SetSize(7);
- int32_t patternStart = rowOffset;
- FX_BOOL isWhite = FALSE;
- int32_t patternLength = counters.GetSize();
- for (int32_t i = rowOffset; i < width; i++) {
- FX_BOOL pixel = row->Get(i);
- if (pixel ^ isWhite) {
- counters[counterPosition]++;
- } else {
- if (counterPosition == patternLength - 1) {
- if (ArrayContains(STARTEND_ENCODING, ToNarrowWidePattern(&counters))) {
- FX_BOOL btemp3 = row->IsRange(FX_MAX(0, patternStart - (i - patternStart) / 2), patternStart, FALSE, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- if (btemp3) {
- CFX_Int32Array *result = FX_NEW CFX_Int32Array();
- result->SetSize(2);
- (*result)[0] = patternStart;
- (*result)[1] = i;
- return result;
- }
- }
- patternStart += counters[0] + counters[1];
- for (int32_t y = 2; y < patternLength; y++) {
- counters[y - 2] = counters[y];
- }
- counters[patternLength - 2] = 0;
- counters[patternLength - 1] = 0;
- counterPosition--;
- } else {
- counterPosition++;
- }
- counters[counterPosition] = 1;
- isWhite = !isWhite;
+ patternStart += counters[0] + counters[1];
+ for (int32_t y = 2; y < patternLength; y++) {
+ counters[y - 2] = counters[y];
}
+ counters[patternLength - 2] = 0;
+ counters[patternLength - 1] = 0;
+ counterPosition--;
+ } else {
+ counterPosition++;
+ }
+ counters[counterPosition] = 1;
+ isWhite = !isWhite;
}
- e = BCExceptionNotFound;
- return NULL;
+ }
+ e = BCExceptionNotFound;
+ return NULL;
}
-FX_BOOL CBC_OnedCodaBarReader::ArrayContains(const FX_CHAR array[], FX_CHAR key)
-{
- for(int32_t i = 0; i < 8; i++) {
- if(array[i] == key) {
- return TRUE;
- }
+FX_BOOL CBC_OnedCodaBarReader::ArrayContains(const FX_CHAR array[],
+ FX_CHAR key) {
+ for (int32_t i = 0; i < 8; i++) {
+ if (array[i] == key) {
+ return TRUE;
}
- return FALSE;
+ }
+ return FALSE;
}
-FX_CHAR CBC_OnedCodaBarReader::ToNarrowWidePattern(CFX_Int32Array *counter)
-{
- int32_t numCounters = counter->GetSize();
- if (numCounters < 1) {
- return '!';
- }
- int32_t averageCounter = 0;
- int32_t totalCounters = 0;
- for (int32_t i = 0; i < numCounters; i++) {
- totalCounters += (*counter)[i];
- }
- averageCounter = totalCounters / numCounters;
- int32_t pattern = 0;
- int32_t wideCounters = 0;
- for (int32_t j = 0; j < numCounters; j++) {
- if ((*counter)[j] > averageCounter) {
- pattern |= 1 << (numCounters - 1 - j);
- wideCounters++;
- }
+FX_CHAR CBC_OnedCodaBarReader::ToNarrowWidePattern(CFX_Int32Array* counter) {
+ int32_t numCounters = counter->GetSize();
+ if (numCounters < 1) {
+ return '!';
+ }
+ int32_t averageCounter = 0;
+ int32_t totalCounters = 0;
+ for (int32_t i = 0; i < numCounters; i++) {
+ totalCounters += (*counter)[i];
+ }
+ averageCounter = totalCounters / numCounters;
+ int32_t pattern = 0;
+ int32_t wideCounters = 0;
+ for (int32_t j = 0; j < numCounters; j++) {
+ if ((*counter)[j] > averageCounter) {
+ pattern |= 1 << (numCounters - 1 - j);
+ wideCounters++;
}
- if ((wideCounters == 2) || (wideCounters == 3)) {
- for (int32_t k = 0; k < 22; k++) {
- if (CHARACTER_ENCODINGS[k] == pattern) {
- return (ALPHABET_STRING)[k];
- }
- }
+ }
+ if ((wideCounters == 2) || (wideCounters == 3)) {
+ for (int32_t k = 0; k < 22; k++) {
+ if (CHARACTER_ENCODINGS[k] == pattern) {
+ return (ALPHABET_STRING)[k];
+ }
}
- return '!';
+ }
+ return '!';
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h b/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h
index dbd2559dc6..4aad306f35 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedCodaBarReader.h
@@ -9,22 +9,23 @@
class CBC_CommonBitArray;
class CBC_OneDReader;
class CBC_OnedCodaBarReader;
-class CBC_OnedCodaBarReader : public CBC_OneDReader
-{
-public:
- CBC_OnedCodaBarReader();
- virtual ~CBC_OnedCodaBarReader();
- CFX_ByteString DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e);
- CFX_Int32Array *FindAsteriskPattern(CBC_CommonBitArray *row, int32_t &e);
- FX_BOOL ArrayContains(const FX_CHAR array[], FX_CHAR key);
- FX_CHAR ToNarrowWidePattern(CFX_Int32Array *counter);
- static const FX_CHAR* ALPHABET_STRING;
+class CBC_OnedCodaBarReader : public CBC_OneDReader {
+ public:
+ CBC_OnedCodaBarReader();
+ virtual ~CBC_OnedCodaBarReader();
+ CFX_ByteString DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e);
+ CFX_Int32Array* FindAsteriskPattern(CBC_CommonBitArray* row, int32_t& e);
+ FX_BOOL ArrayContains(const FX_CHAR array[], FX_CHAR key);
+ FX_CHAR ToNarrowWidePattern(CFX_Int32Array* counter);
+ static const FX_CHAR* ALPHABET_STRING;
+ const static int32_t CHARACTER_ENCODINGS[22];
- const static int32_t CHARACTER_ENCODINGS[22];
+ const static int32_t minCharacterLength;
- const static int32_t minCharacterLength;
-
- const static FX_CHAR STARTEND_ENCODING[8];
+ const static FX_CHAR STARTEND_ENCODING[8];
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp b/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
index 584f7bf1d8..eef810ac44 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
@@ -29,194 +29,201 @@
#include "BC_OneDimWriter.h"
#include "BC_OnedCodaBarReader.h"
#include "BC_OnedCodaBarWriter.h"
-const FX_CHAR CBC_OnedCodaBarWriter::START_END_CHARS[] = {'A', 'B', 'C', 'D', 'T', 'N', '*', 'E', 'a', 'b', 'c', 'd', 't', 'n', 'e'};
-const FX_CHAR CBC_OnedCodaBarWriter::CONTENT_CHARS[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '$', '/', ':', '+', '.'};
-CBC_OnedCodaBarWriter::CBC_OnedCodaBarWriter()
-{
- m_chStart = 'A';
- m_chEnd = 'B';
- m_iWideNarrRatio = 2;
+const FX_CHAR CBC_OnedCodaBarWriter::START_END_CHARS[] = {
+ 'A', 'B', 'C', 'D', 'T', 'N', '*', 'E', 'a', 'b', 'c', 'd', 't', 'n', 'e'};
+const FX_CHAR CBC_OnedCodaBarWriter::CONTENT_CHARS[] = {
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', '-', '$', '/', ':', '+', '.'};
+CBC_OnedCodaBarWriter::CBC_OnedCodaBarWriter() {
+ m_chStart = 'A';
+ m_chEnd = 'B';
+ m_iWideNarrRatio = 2;
}
-CBC_OnedCodaBarWriter::~CBC_OnedCodaBarWriter()
-{
-}
-FX_BOOL CBC_OnedCodaBarWriter::SetStartChar(FX_CHAR start)
-{
- for (int32_t i = 0; i < sizeof(START_END_CHARS) / sizeof(FX_CHAR); i++) {
- if (START_END_CHARS[i] == start) {
- m_chStart = start;
- return TRUE;
- }
+CBC_OnedCodaBarWriter::~CBC_OnedCodaBarWriter() {}
+FX_BOOL CBC_OnedCodaBarWriter::SetStartChar(FX_CHAR start) {
+ for (int32_t i = 0; i < sizeof(START_END_CHARS) / sizeof(FX_CHAR); i++) {
+ if (START_END_CHARS[i] == start) {
+ m_chStart = start;
+ return TRUE;
}
- return FALSE;
+ }
+ return FALSE;
}
-FX_BOOL CBC_OnedCodaBarWriter::SetEndChar(FX_CHAR end)
-{
- for (int32_t i = 0; i < sizeof(START_END_CHARS) / sizeof(FX_CHAR); i++) {
- if (START_END_CHARS[i] == end) {
- m_chEnd = end;
- return TRUE;
- }
+FX_BOOL CBC_OnedCodaBarWriter::SetEndChar(FX_CHAR end) {
+ for (int32_t i = 0; i < sizeof(START_END_CHARS) / sizeof(FX_CHAR); i++) {
+ if (START_END_CHARS[i] == end) {
+ m_chEnd = end;
+ return TRUE;
}
+ }
+ return FALSE;
+}
+void CBC_OnedCodaBarWriter::SetDataLength(int32_t length) {
+ m_iDataLenth = length + 2;
+}
+FX_BOOL CBC_OnedCodaBarWriter::SetTextLocation(BC_TEXT_LOC location) {
+ if (location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) {
return FALSE;
+ }
+ m_locTextLoc = location;
+ return TRUE;
}
-void CBC_OnedCodaBarWriter::SetDataLength(int32_t length)
-{
- m_iDataLenth = length + 2;
+FX_BOOL CBC_OnedCodaBarWriter::SetWideNarrowRatio(int32_t ratio) {
+ if (ratio < 2 || ratio > 3) {
+ return FALSE;
+ }
+ m_iWideNarrRatio = ratio;
+ return TRUE;
}
-FX_BOOL CBC_OnedCodaBarWriter::SetTextLocation(BC_TEXT_LOC location)
-{
- if ( location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) {
- return FALSE;
+FX_BOOL CBC_OnedCodaBarWriter::FindChar(FX_WCHAR ch, FX_BOOL isContent) {
+ if (isContent) {
+ for (int32_t i = 0; i < sizeof(CONTENT_CHARS) / sizeof(FX_CHAR); i++) {
+ if (ch == (FX_WCHAR)CONTENT_CHARS[i]) {
+ return TRUE;
+ }
}
- m_locTextLoc = location;
- return TRUE;
-}
-FX_BOOL CBC_OnedCodaBarWriter::SetWideNarrowRatio(int32_t ratio)
-{
- if(ratio < 2 || ratio > 3) {
- return FALSE;
+ for (int32_t j = 0; j < sizeof(START_END_CHARS) / sizeof(FX_CHAR); j++) {
+ if (ch == (FX_WCHAR)START_END_CHARS[j]) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+ } else {
+ for (int32_t i = 0; i < sizeof(CONTENT_CHARS) / sizeof(FX_CHAR); i++) {
+ if (ch == (FX_WCHAR)CONTENT_CHARS[i]) {
+ return TRUE;
+ }
}
- m_iWideNarrRatio = ratio;
- return TRUE;
+ return FALSE;
+ }
}
-FX_BOOL CBC_OnedCodaBarWriter::FindChar(FX_WCHAR ch, FX_BOOL isContent)
-{
- if(isContent) {
- for(int32_t i = 0 ; i < sizeof(CONTENT_CHARS) / sizeof(FX_CHAR) ; i++) {
- if(ch == (FX_WCHAR)CONTENT_CHARS[i]) {
- return TRUE;
- }
- }
- for(int32_t j = 0 ; j < sizeof(START_END_CHARS) / sizeof(FX_CHAR) ; j++) {
- if(ch == (FX_WCHAR)START_END_CHARS[j]) {
- return TRUE;
- }
- }
- return FALSE;
+FX_BOOL CBC_OnedCodaBarWriter::CheckContentValidity(
+ const CFX_WideStringC& contents) {
+ FX_WCHAR ch;
+ int32_t index = 0;
+ for (index = 0; index < contents.GetLength(); index++) {
+ ch = contents.GetAt(index);
+ if (FindChar(ch, FALSE)) {
+ continue;
} else {
- for(int32_t i = 0 ; i < sizeof(CONTENT_CHARS) / sizeof(FX_CHAR) ; i++) {
- if(ch == (FX_WCHAR)CONTENT_CHARS[i]) {
- return TRUE;
- }
- }
- return FALSE;
+ return FALSE;
}
+ }
+ return TRUE;
}
-FX_BOOL CBC_OnedCodaBarWriter::CheckContentValidity(const CFX_WideStringC& contents)
-{
- FX_WCHAR ch;
- int32_t index = 0;
- for (index = 0; index < contents.GetLength(); index++) {
- ch = contents.GetAt(index);
- if (FindChar(ch, FALSE)) {
- continue;
- } else {
- return FALSE;
- }
+CFX_WideString CBC_OnedCodaBarWriter::FilterContents(
+ const CFX_WideStringC& contents) {
+ CFX_WideString filtercontents;
+ FX_WCHAR ch;
+ for (int32_t index = 0; index < contents.GetLength(); index++) {
+ ch = contents.GetAt(index);
+ if (ch > 175) {
+ index++;
+ continue;
}
- return TRUE;
-}
-CFX_WideString CBC_OnedCodaBarWriter::FilterContents(const CFX_WideStringC& contents)
-{
- CFX_WideString filtercontents;
- FX_WCHAR ch;
- for (int32_t index = 0; index < contents.GetLength(); index ++) {
- ch = contents.GetAt(index);
- if(ch > 175) {
- index++;
- continue;
- }
- if (FindChar(ch, TRUE)) {
- filtercontents += ch;
- } else {
- continue;
- }
+ if (FindChar(ch, TRUE)) {
+ filtercontents += ch;
+ } else {
+ continue;
}
- return filtercontents;
+ }
+ return filtercontents;
}
-uint8_t *CBC_OnedCodaBarWriter::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e)
-{
- uint8_t *ret = Encode(contents, format, outWidth, outHeight, 0 , e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedCodaBarWriter::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e) {
+ uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t *CBC_OnedCodaBarWriter::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e)
-{
- if(format != BCFORMAT_CODABAR) {
- e = BCExceptionOnlyEncodeCODEBAR;
- return NULL;
- }
- uint8_t *ret = CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedCodaBarWriter::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e) {
+ if (format != BCFORMAT_CODABAR) {
+ e = BCExceptionOnlyEncodeCODEBAR;
+ return NULL;
+ }
+ uint8_t* ret =
+ CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t* CBC_OnedCodaBarWriter::Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e)
-{
- CBC_OnedCodaBarReader CodaBarR;
- CFX_ByteString data = m_chStart + contents + m_chEnd;
- m_iContentLen = data.GetLength();
- uint8_t *result = FX_Alloc(uint8_t, m_iWideNarrRatio * 7 * data.GetLength());
- FX_CHAR ch;
- int32_t position = 0;
- for (int32_t index = 0; index < data.GetLength(); index++) {
- ch = data.GetAt(index);
- if (((ch >= 'a') && (ch <= 'z'))) {
- ch = ch - 32;
- }
- switch (ch) {
- case 'T':
- ch = 'A';
- break;
- case 'N':
- ch = 'B';
- break;
- case '*':
- ch = 'C';
- break;
- case 'E':
- ch = 'D';
- break;
- default:
- break;
- }
- int32_t code = 0;
- int32_t len = (int32_t)strlen(CodaBarR.ALPHABET_STRING);
- for (int32_t i = 0; i < len; i++) {
- if (ch == CodaBarR.ALPHABET_STRING[i]) {
- code = CodaBarR.CHARACTER_ENCODINGS[i];
- break;
- }
- }
- uint8_t color = 1;
- int32_t counter = 0;
- int32_t bit = 0;
- while (bit < 7) {
- result[position] = color;
- position++;
- if (((code >> (6 - bit)) & 1) == 0 || counter == m_iWideNarrRatio - 1) {
- color = !color;
- bit++;
- counter = 0;
- } else {
- counter++;
- }
- }
- if (index < data.GetLength() - 1) {
- result[position] = 0;
- position ++;
- }
+uint8_t* CBC_OnedCodaBarWriter::Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e) {
+ CBC_OnedCodaBarReader CodaBarR;
+ CFX_ByteString data = m_chStart + contents + m_chEnd;
+ m_iContentLen = data.GetLength();
+ uint8_t* result = FX_Alloc(uint8_t, m_iWideNarrRatio * 7 * data.GetLength());
+ FX_CHAR ch;
+ int32_t position = 0;
+ for (int32_t index = 0; index < data.GetLength(); index++) {
+ ch = data.GetAt(index);
+ if (((ch >= 'a') && (ch <= 'z'))) {
+ ch = ch - 32;
+ }
+ switch (ch) {
+ case 'T':
+ ch = 'A';
+ break;
+ case 'N':
+ ch = 'B';
+ break;
+ case '*':
+ ch = 'C';
+ break;
+ case 'E':
+ ch = 'D';
+ break;
+ default:
+ break;
+ }
+ int32_t code = 0;
+ int32_t len = (int32_t)strlen(CodaBarR.ALPHABET_STRING);
+ for (int32_t i = 0; i < len; i++) {
+ if (ch == CodaBarR.ALPHABET_STRING[i]) {
+ code = CodaBarR.CHARACTER_ENCODINGS[i];
+ break;
+ }
+ }
+ uint8_t color = 1;
+ int32_t counter = 0;
+ int32_t bit = 0;
+ while (bit < 7) {
+ result[position] = color;
+ position++;
+ if (((code >> (6 - bit)) & 1) == 0 || counter == m_iWideNarrRatio - 1) {
+ color = !color;
+ bit++;
+ counter = 0;
+ } else {
+ counter++;
+ }
+ }
+ if (index < data.GetLength() - 1) {
+ result[position] = 0;
+ position++;
}
- outLength = position;
- return result;
+ }
+ outLength = position;
+ return result;
}
-CFX_WideString CBC_OnedCodaBarWriter::encodedContents(const CFX_WideStringC& contents)
-{
- CFX_WideString strStart(m_chStart);
- CFX_WideString strEnd(m_chEnd);
- return strStart + contents + strEnd;
+CFX_WideString CBC_OnedCodaBarWriter::encodedContents(
+ const CFX_WideStringC& contents) {
+ CFX_WideString strStart(m_chStart);
+ CFX_WideString strEnd(m_chEnd);
+ return strStart + contents + strEnd;
}
-void CBC_OnedCodaBarWriter::RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e)
-{
- CBC_OneDimWriter::RenderResult(encodedContents(contents), code, codeLength, isDevice, e);
+void CBC_OnedCodaBarWriter::RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e) {
+ CBC_OneDimWriter::RenderResult(encodedContents(contents), code, codeLength,
+ isDevice, e);
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h b/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h
index 29912ccb8a..2660c0ba9d 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedCodaBarWriter.h
@@ -9,30 +9,44 @@
enum BC_TEXT_LOC;
class CBC_OneDimWriter;
class CBC_OnedCodaBarWriter;
-class CBC_OnedCodaBarWriter : public CBC_OneDimWriter
-{
-public:
- CBC_OnedCodaBarWriter();
- virtual ~CBC_OnedCodaBarWriter();
- uint8_t* Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e);
- uint8_t *Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e);
- uint8_t *Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e);
- CFX_WideString encodedContents(const CFX_WideStringC& contents);
- FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
- CFX_WideString FilterContents(const CFX_WideStringC& contents);
- FX_BOOL SetStartChar(FX_CHAR start);
- FX_BOOL SetEndChar(FX_CHAR end);
- void SetDataLength(int32_t length);
- FX_BOOL SetTextLocation(BC_TEXT_LOC location);
- FX_BOOL SetWideNarrowRatio(int32_t ratio);
- FX_BOOL FindChar(FX_WCHAR ch, FX_BOOL isContent);
-private:
- void RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e);
- const static FX_CHAR START_END_CHARS[];
- const static FX_CHAR CONTENT_CHARS[];
- FX_CHAR m_chStart;
- FX_CHAR m_chEnd;
- int32_t m_iWideNarrRatio;
+class CBC_OnedCodaBarWriter : public CBC_OneDimWriter {
+ public:
+ CBC_OnedCodaBarWriter();
+ virtual ~CBC_OnedCodaBarWriter();
+ uint8_t* Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e);
+ CFX_WideString encodedContents(const CFX_WideStringC& contents);
+ FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
+ CFX_WideString FilterContents(const CFX_WideStringC& contents);
+ FX_BOOL SetStartChar(FX_CHAR start);
+ FX_BOOL SetEndChar(FX_CHAR end);
+ void SetDataLength(int32_t length);
+ FX_BOOL SetTextLocation(BC_TEXT_LOC location);
+ FX_BOOL SetWideNarrowRatio(int32_t ratio);
+ FX_BOOL FindChar(FX_WCHAR ch, FX_BOOL isContent);
+ private:
+ void RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e);
+ const static FX_CHAR START_END_CHARS[];
+ const static FX_CHAR CONTENT_CHARS[];
+ FX_CHAR m_chStart;
+ FX_CHAR m_chEnd;
+ int32_t m_iWideNarrRatio;
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp b/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp
index d1f453345b..4cffe9d78f 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.cpp
@@ -25,117 +25,46 @@
#include "../common/BC_CommonBitArray.h"
#include "BC_OneDReader.h"
#include "BC_OnedCode128Reader.h"
-const int32_t CBC_OnedCode128Reader::CODE_PATTERNS[107][7] = {
- {2, 1, 2, 2, 2, 2, 0},
- {2, 2, 2, 1, 2, 2, 0},
- {2, 2, 2, 2, 2, 1, 0},
- {1, 2, 1, 2, 2, 3, 0},
- {1, 2, 1, 3, 2, 2, 0},
- {1, 3, 1, 2, 2, 2, 0},
- {1, 2, 2, 2, 1, 3, 0},
- {1, 2, 2, 3, 1, 2, 0},
- {1, 3, 2, 2, 1, 2, 0},
- {2, 2, 1, 2, 1, 3, 0},
- {2, 2, 1, 3, 1, 2, 0},
- {2, 3, 1, 2, 1, 2, 0},
- {1, 1, 2, 2, 3, 2, 0},
- {1, 2, 2, 1, 3, 2, 0},
- {1, 2, 2, 2, 3, 1, 0},
- {1, 1, 3, 2, 2, 2, 0},
- {1, 2, 3, 1, 2, 2, 0},
- {1, 2, 3, 2, 2, 1, 0},
- {2, 2, 3, 2, 1, 1, 0},
- {2, 2, 1, 1, 3, 2, 0},
- {2, 2, 1, 2, 3, 1, 0},
- {2, 1, 3, 2, 1, 2, 0},
- {2, 2, 3, 1, 1, 2, 0},
- {3, 1, 2, 1, 3, 1, 0},
- {3, 1, 1, 2, 2, 2, 0},
- {3, 2, 1, 1, 2, 2, 0},
- {3, 2, 1, 2, 2, 1, 0},
- {3, 1, 2, 2, 1, 2, 0},
- {3, 2, 2, 1, 1, 2, 0},
- {3, 2, 2, 2, 1, 1, 0},
- {2, 1, 2, 1, 2, 3, 0},
- {2, 1, 2, 3, 2, 1, 0},
- {2, 3, 2, 1, 2, 1, 0},
- {1, 1, 1, 3, 2, 3, 0},
- {1, 3, 1, 1, 2, 3, 0},
- {1, 3, 1, 3, 2, 1, 0},
- {1, 1, 2, 3, 1, 3, 0},
- {1, 3, 2, 1, 1, 3, 0},
- {1, 3, 2, 3, 1, 1, 0},
- {2, 1, 1, 3, 1, 3, 0},
- {2, 3, 1, 1, 1, 3, 0},
- {2, 3, 1, 3, 1, 1, 0},
- {1, 1, 2, 1, 3, 3, 0},
- {1, 1, 2, 3, 3, 1, 0},
- {1, 3, 2, 1, 3, 1, 0},
- {1, 1, 3, 1, 2, 3, 0},
- {1, 1, 3, 3, 2, 1, 0},
- {1, 3, 3, 1, 2, 1, 0},
- {3, 1, 3, 1, 2, 1, 0},
- {2, 1, 1, 3, 3, 1, 0},
- {2, 3, 1, 1, 3, 1, 0},
- {2, 1, 3, 1, 1, 3, 0},
- {2, 1, 3, 3, 1, 1, 0},
- {2, 1, 3, 1, 3, 1, 0},
- {3, 1, 1, 1, 2, 3, 0},
- {3, 1, 1, 3, 2, 1, 0},
- {3, 3, 1, 1, 2, 1, 0},
- {3, 1, 2, 1, 1, 3, 0},
- {3, 1, 2, 3, 1, 1, 0},
- {3, 3, 2, 1, 1, 1, 0},
- {3, 1, 4, 1, 1, 1, 0},
- {2, 2, 1, 4, 1, 1, 0},
- {4, 3, 1, 1, 1, 1, 0},
- {1, 1, 1, 2, 2, 4, 0},
- {1, 1, 1, 4, 2, 2, 0},
- {1, 2, 1, 1, 2, 4, 0},
- {1, 2, 1, 4, 2, 1, 0},
- {1, 4, 1, 1, 2, 2, 0},
- {1, 4, 1, 2, 2, 1, 0},
- {1, 1, 2, 2, 1, 4, 0},
- {1, 1, 2, 4, 1, 2, 0},
- {1, 2, 2, 1, 1, 4, 0},
- {1, 2, 2, 4, 1, 1, 0},
- {1, 4, 2, 1, 1, 2, 0},
- {1, 4, 2, 2, 1, 1, 0},
- {2, 4, 1, 2, 1, 1, 0},
- {2, 2, 1, 1, 1, 4, 0},
- {4, 1, 3, 1, 1, 1, 0},
- {2, 4, 1, 1, 1, 2, 0},
- {1, 3, 4, 1, 1, 1, 0},
- {1, 1, 1, 2, 4, 2, 0},
- {1, 2, 1, 1, 4, 2, 0},
- {1, 2, 1, 2, 4, 1, 0},
- {1, 1, 4, 2, 1, 2, 0},
- {1, 2, 4, 1, 1, 2, 0},
- {1, 2, 4, 2, 1, 1, 0},
- {4, 1, 1, 2, 1, 2, 0},
- {4, 2, 1, 1, 1, 2, 0},
- {4, 2, 1, 2, 1, 1, 0},
- {2, 1, 2, 1, 4, 1, 0},
- {2, 1, 4, 1, 2, 1, 0},
- {4, 1, 2, 1, 2, 1, 0},
- {1, 1, 1, 1, 4, 3, 0},
- {1, 1, 1, 3, 4, 1, 0},
- {1, 3, 1, 1, 4, 1, 0},
- {1, 1, 4, 1, 1, 3, 0},
- {1, 1, 4, 3, 1, 1, 0},
- {4, 1, 1, 1, 1, 3, 0},
- {4, 1, 1, 3, 1, 1, 0},
- {1, 1, 3, 1, 4, 1, 0},
- {1, 1, 4, 1, 3, 1, 0},
- {3, 1, 1, 1, 4, 1, 0},
- {4, 1, 1, 1, 3, 1, 0},
- {2, 1, 1, 4, 1, 2, 0},
- {2, 1, 1, 2, 1, 4, 0},
- {2, 1, 1, 2, 3, 2, 0},
- {2, 3, 3, 1, 1, 1, 2}
-};
-const int32_t CBC_OnedCode128Reader::MAX_AVG_VARIANCE = (int32_t) (256 * 0.25f);
-const int32_t CBC_OnedCode128Reader::MAX_INDIVIDUAL_VARIANCE = (int32_t) (256 * 0.7f);
+const int32_t CBC_OnedCode128Reader::CODE_PATTERNS[107][7] = {
+ {2, 1, 2, 2, 2, 2, 0}, {2, 2, 2, 1, 2, 2, 0}, {2, 2, 2, 2, 2, 1, 0},
+ {1, 2, 1, 2, 2, 3, 0}, {1, 2, 1, 3, 2, 2, 0}, {1, 3, 1, 2, 2, 2, 0},
+ {1, 2, 2, 2, 1, 3, 0}, {1, 2, 2, 3, 1, 2, 0}, {1, 3, 2, 2, 1, 2, 0},
+ {2, 2, 1, 2, 1, 3, 0}, {2, 2, 1, 3, 1, 2, 0}, {2, 3, 1, 2, 1, 2, 0},
+ {1, 1, 2, 2, 3, 2, 0}, {1, 2, 2, 1, 3, 2, 0}, {1, 2, 2, 2, 3, 1, 0},
+ {1, 1, 3, 2, 2, 2, 0}, {1, 2, 3, 1, 2, 2, 0}, {1, 2, 3, 2, 2, 1, 0},
+ {2, 2, 3, 2, 1, 1, 0}, {2, 2, 1, 1, 3, 2, 0}, {2, 2, 1, 2, 3, 1, 0},
+ {2, 1, 3, 2, 1, 2, 0}, {2, 2, 3, 1, 1, 2, 0}, {3, 1, 2, 1, 3, 1, 0},
+ {3, 1, 1, 2, 2, 2, 0}, {3, 2, 1, 1, 2, 2, 0}, {3, 2, 1, 2, 2, 1, 0},
+ {3, 1, 2, 2, 1, 2, 0}, {3, 2, 2, 1, 1, 2, 0}, {3, 2, 2, 2, 1, 1, 0},
+ {2, 1, 2, 1, 2, 3, 0}, {2, 1, 2, 3, 2, 1, 0}, {2, 3, 2, 1, 2, 1, 0},
+ {1, 1, 1, 3, 2, 3, 0}, {1, 3, 1, 1, 2, 3, 0}, {1, 3, 1, 3, 2, 1, 0},
+ {1, 1, 2, 3, 1, 3, 0}, {1, 3, 2, 1, 1, 3, 0}, {1, 3, 2, 3, 1, 1, 0},
+ {2, 1, 1, 3, 1, 3, 0}, {2, 3, 1, 1, 1, 3, 0}, {2, 3, 1, 3, 1, 1, 0},
+ {1, 1, 2, 1, 3, 3, 0}, {1, 1, 2, 3, 3, 1, 0}, {1, 3, 2, 1, 3, 1, 0},
+ {1, 1, 3, 1, 2, 3, 0}, {1, 1, 3, 3, 2, 1, 0}, {1, 3, 3, 1, 2, 1, 0},
+ {3, 1, 3, 1, 2, 1, 0}, {2, 1, 1, 3, 3, 1, 0}, {2, 3, 1, 1, 3, 1, 0},
+ {2, 1, 3, 1, 1, 3, 0}, {2, 1, 3, 3, 1, 1, 0}, {2, 1, 3, 1, 3, 1, 0},
+ {3, 1, 1, 1, 2, 3, 0}, {3, 1, 1, 3, 2, 1, 0}, {3, 3, 1, 1, 2, 1, 0},
+ {3, 1, 2, 1, 1, 3, 0}, {3, 1, 2, 3, 1, 1, 0}, {3, 3, 2, 1, 1, 1, 0},
+ {3, 1, 4, 1, 1, 1, 0}, {2, 2, 1, 4, 1, 1, 0}, {4, 3, 1, 1, 1, 1, 0},
+ {1, 1, 1, 2, 2, 4, 0}, {1, 1, 1, 4, 2, 2, 0}, {1, 2, 1, 1, 2, 4, 0},
+ {1, 2, 1, 4, 2, 1, 0}, {1, 4, 1, 1, 2, 2, 0}, {1, 4, 1, 2, 2, 1, 0},
+ {1, 1, 2, 2, 1, 4, 0}, {1, 1, 2, 4, 1, 2, 0}, {1, 2, 2, 1, 1, 4, 0},
+ {1, 2, 2, 4, 1, 1, 0}, {1, 4, 2, 1, 1, 2, 0}, {1, 4, 2, 2, 1, 1, 0},
+ {2, 4, 1, 2, 1, 1, 0}, {2, 2, 1, 1, 1, 4, 0}, {4, 1, 3, 1, 1, 1, 0},
+ {2, 4, 1, 1, 1, 2, 0}, {1, 3, 4, 1, 1, 1, 0}, {1, 1, 1, 2, 4, 2, 0},
+ {1, 2, 1, 1, 4, 2, 0}, {1, 2, 1, 2, 4, 1, 0}, {1, 1, 4, 2, 1, 2, 0},
+ {1, 2, 4, 1, 1, 2, 0}, {1, 2, 4, 2, 1, 1, 0}, {4, 1, 1, 2, 1, 2, 0},
+ {4, 2, 1, 1, 1, 2, 0}, {4, 2, 1, 2, 1, 1, 0}, {2, 1, 2, 1, 4, 1, 0},
+ {2, 1, 4, 1, 2, 1, 0}, {4, 1, 2, 1, 2, 1, 0}, {1, 1, 1, 1, 4, 3, 0},
+ {1, 1, 1, 3, 4, 1, 0}, {1, 3, 1, 1, 4, 1, 0}, {1, 1, 4, 1, 1, 3, 0},
+ {1, 1, 4, 3, 1, 1, 0}, {4, 1, 1, 1, 1, 3, 0}, {4, 1, 1, 3, 1, 1, 0},
+ {1, 1, 3, 1, 4, 1, 0}, {1, 1, 4, 1, 3, 1, 0}, {3, 1, 1, 1, 4, 1, 0},
+ {4, 1, 1, 1, 3, 1, 0}, {2, 1, 1, 4, 1, 2, 0}, {2, 1, 1, 2, 1, 4, 0},
+ {2, 1, 1, 2, 3, 2, 0}, {2, 3, 3, 1, 1, 1, 2}};
+const int32_t CBC_OnedCode128Reader::MAX_AVG_VARIANCE = (int32_t)(256 * 0.25f);
+const int32_t CBC_OnedCode128Reader::MAX_INDIVIDUAL_VARIANCE =
+ (int32_t)(256 * 0.7f);
const int32_t CBC_OnedCode128Reader::CODE_SHIFT = 98;
const int32_t CBC_OnedCode128Reader::CODE_CODE_C = 99;
const int32_t CBC_OnedCode128Reader::CODE_CODE_B = 100;
@@ -149,282 +78,289 @@ const int32_t CBC_OnedCode128Reader::CODE_START_A = 103;
const int32_t CBC_OnedCode128Reader::CODE_START_B = 104;
const int32_t CBC_OnedCode128Reader::CODE_START_C = 105;
const int32_t CBC_OnedCode128Reader::CODE_STOP = 106;
-CBC_OnedCode128Reader::CBC_OnedCode128Reader()
-{
-}
-CBC_OnedCode128Reader::~CBC_OnedCode128Reader()
-{
-}
-CFX_Int32Array *CBC_OnedCode128Reader::FindStartPattern(CBC_CommonBitArray *row, int32_t &e)
-{
- int32_t width = row->GetSize();
- int32_t rowOffset = 0;
- while (rowOffset < width) {
- if (row->Get(rowOffset)) {
- break;
- }
- rowOffset++;
+CBC_OnedCode128Reader::CBC_OnedCode128Reader() {}
+CBC_OnedCode128Reader::~CBC_OnedCode128Reader() {}
+CFX_Int32Array* CBC_OnedCode128Reader::FindStartPattern(CBC_CommonBitArray* row,
+ int32_t& e) {
+ int32_t width = row->GetSize();
+ int32_t rowOffset = 0;
+ while (rowOffset < width) {
+ if (row->Get(rowOffset)) {
+ break;
}
- int32_t counterPosition = 0;
- CFX_Int32Array counters;
- counters.SetSize(6);
- int32_t patternStart = rowOffset;
- FX_BOOL isWhite = FALSE;
- int32_t patternLength = counters.GetSize();
- for (int32_t i = rowOffset; i < width; i++) {
- FX_BOOL pixel = row->Get(i);
- if (pixel ^ isWhite) {
- counters[counterPosition]++;
- } else {
- if (counterPosition == patternLength - 1) {
- int32_t bestVariance = MAX_AVG_VARIANCE;
- int32_t bestMatch = -1;
- for (int32_t startCode = CODE_START_A; startCode <= CODE_START_C; startCode++) {
- int32_t variance = PatternMatchVariance(&counters, &CODE_PATTERNS[startCode][0], MAX_INDIVIDUAL_VARIANCE);
- if (variance < bestVariance) {
- bestVariance = variance;
- bestMatch = startCode;
- }
- }
- if (bestMatch >= 0) {
- FX_BOOL btemp2 = row->IsRange(FX_MAX(0, patternStart - (i - patternStart) / 2), patternStart, FALSE, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- if (btemp2) {
- CFX_Int32Array *result = FX_NEW CFX_Int32Array;
- result->SetSize(3);
- (*result)[0] = patternStart;
- (*result)[1] = i;
- (*result)[2] = bestMatch;
- return result;
- }
- }
- patternStart += counters[0] + counters[1];
- for (int32_t y = 2; y < patternLength; y++) {
- counters[y - 2] = counters[y];
- }
- counters[patternLength - 2] = 0;
- counters[patternLength - 1] = 0;
- counterPosition--;
- } else {
- counterPosition++;
- }
- counters[counterPosition] = 1;
- isWhite = !isWhite;
- }
- }
- e = BCExceptionNotFound;
- return NULL;
-}
-int32_t CBC_OnedCode128Reader::DecodeCode(CBC_CommonBitArray *row, CFX_Int32Array *counters, int32_t rowOffset, int32_t &e)
-{
- RecordPattern(row, rowOffset, counters, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- int32_t bestVariance = MAX_AVG_VARIANCE;
- int32_t bestMatch = -1;
- for (int32_t d = 0; d < 107; d++) {
- int32_t variance = PatternMatchVariance(counters, &CODE_PATTERNS[d][0], MAX_INDIVIDUAL_VARIANCE);
- if (variance < bestVariance) {
+ rowOffset++;
+ }
+ int32_t counterPosition = 0;
+ CFX_Int32Array counters;
+ counters.SetSize(6);
+ int32_t patternStart = rowOffset;
+ FX_BOOL isWhite = FALSE;
+ int32_t patternLength = counters.GetSize();
+ for (int32_t i = rowOffset; i < width; i++) {
+ FX_BOOL pixel = row->Get(i);
+ if (pixel ^ isWhite) {
+ counters[counterPosition]++;
+ } else {
+ if (counterPosition == patternLength - 1) {
+ int32_t bestVariance = MAX_AVG_VARIANCE;
+ int32_t bestMatch = -1;
+ for (int32_t startCode = CODE_START_A; startCode <= CODE_START_C;
+ startCode++) {
+ int32_t variance = PatternMatchVariance(
+ &counters, &CODE_PATTERNS[startCode][0], MAX_INDIVIDUAL_VARIANCE);
+ if (variance < bestVariance) {
bestVariance = variance;
- bestMatch = d;
+ bestMatch = startCode;
+ }
+ }
+ if (bestMatch >= 0) {
+ FX_BOOL btemp2 =
+ row->IsRange(FX_MAX(0, patternStart - (i - patternStart) / 2),
+ patternStart, FALSE, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ if (btemp2) {
+ CFX_Int32Array* result = FX_NEW CFX_Int32Array;
+ result->SetSize(3);
+ (*result)[0] = patternStart;
+ (*result)[1] = i;
+ (*result)[2] = bestMatch;
+ return result;
+ }
}
+ patternStart += counters[0] + counters[1];
+ for (int32_t y = 2; y < patternLength; y++) {
+ counters[y - 2] = counters[y];
+ }
+ counters[patternLength - 2] = 0;
+ counters[patternLength - 1] = 0;
+ counterPosition--;
+ } else {
+ counterPosition++;
+ }
+ counters[counterPosition] = 1;
+ isWhite = !isWhite;
}
- if (bestMatch >= 0) {
- return bestMatch;
- } else {
- e = BCExceptionNotFound;
- return 0;
+ }
+ e = BCExceptionNotFound;
+ return NULL;
+}
+int32_t CBC_OnedCode128Reader::DecodeCode(CBC_CommonBitArray* row,
+ CFX_Int32Array* counters,
+ int32_t rowOffset,
+ int32_t& e) {
+ RecordPattern(row, rowOffset, counters, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ int32_t bestVariance = MAX_AVG_VARIANCE;
+ int32_t bestMatch = -1;
+ for (int32_t d = 0; d < 107; d++) {
+ int32_t variance = PatternMatchVariance(counters, &CODE_PATTERNS[d][0],
+ MAX_INDIVIDUAL_VARIANCE);
+ if (variance < bestVariance) {
+ bestVariance = variance;
+ bestMatch = d;
}
+ }
+ if (bestMatch >= 0) {
+ return bestMatch;
+ } else {
+ e = BCExceptionNotFound;
return 0;
+ }
+ return 0;
}
-CFX_ByteString CBC_OnedCode128Reader::DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e)
-{
- CFX_Int32Array *startPatternInfo = FindStartPattern(row, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- int32_t startCode = (*startPatternInfo)[2];
- int32_t codeSet;
- switch (startCode) {
- case 103:
- codeSet = CODE_CODE_A;
- break;
- case 104:
- codeSet = CODE_CODE_B;
- break;
- case 105:
- codeSet = CODE_CODE_C;
- break;
- default:
- if(startPatternInfo != NULL) {
- startPatternInfo->RemoveAll();
- delete startPatternInfo;
- startPatternInfo = NULL;
- }
- e = BCExceptionFormatException;
- return "";
- }
- FX_BOOL done = FALSE;
- FX_BOOL isNextShifted = FALSE;
- CFX_ByteString result;
- int32_t lastStart = (*startPatternInfo)[0];
- int32_t nextStart = (*startPatternInfo)[1];
- if(startPatternInfo != NULL) {
+CFX_ByteString CBC_OnedCode128Reader::DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e) {
+ CFX_Int32Array* startPatternInfo = FindStartPattern(row, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ int32_t startCode = (*startPatternInfo)[2];
+ int32_t codeSet;
+ switch (startCode) {
+ case 103:
+ codeSet = CODE_CODE_A;
+ break;
+ case 104:
+ codeSet = CODE_CODE_B;
+ break;
+ case 105:
+ codeSet = CODE_CODE_C;
+ break;
+ default:
+ if (startPatternInfo != NULL) {
startPatternInfo->RemoveAll();
delete startPatternInfo;
startPatternInfo = NULL;
+ }
+ e = BCExceptionFormatException;
+ return "";
+ }
+ FX_BOOL done = FALSE;
+ FX_BOOL isNextShifted = FALSE;
+ CFX_ByteString result;
+ int32_t lastStart = (*startPatternInfo)[0];
+ int32_t nextStart = (*startPatternInfo)[1];
+ if (startPatternInfo != NULL) {
+ startPatternInfo->RemoveAll();
+ delete startPatternInfo;
+ startPatternInfo = NULL;
+ }
+ CFX_Int32Array counters;
+ counters.SetSize(6);
+ int32_t lastCode = 0;
+ int32_t code = 0;
+ int32_t checksumTotal = startCode;
+ int32_t multiplier = 0;
+ FX_BOOL lastCharacterWasPrintable = TRUE;
+ while (!done) {
+ FX_BOOL unshift = isNextShifted;
+ isNextShifted = FALSE;
+ lastCode = code;
+ code = DecodeCode(row, &counters, nextStart, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ if (code != CODE_STOP) {
+ lastCharacterWasPrintable = TRUE;
}
- CFX_Int32Array counters;
- counters.SetSize(6);
- int32_t lastCode = 0;
- int32_t code = 0;
- int32_t checksumTotal = startCode;
- int32_t multiplier = 0;
- FX_BOOL lastCharacterWasPrintable = TRUE;
- while (!done) {
- FX_BOOL unshift = isNextShifted;
- isNextShifted = FALSE;
- lastCode = code;
- code = DecodeCode(row, &counters, nextStart, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- if (code != CODE_STOP) {
- lastCharacterWasPrintable = TRUE;
- }
- if (code != CODE_STOP) {
- multiplier++;
- checksumTotal += multiplier * code;
- }
- lastStart = nextStart;
- for (int32_t i = 0; i < counters.GetSize(); i++) {
- nextStart += counters[i];
- }
- switch (code) {
- case 103:
- case 104:
- case 105:
- e = BCExceptionFormatException;
- return "";
- }
- switch (codeSet) {
+ if (code != CODE_STOP) {
+ multiplier++;
+ checksumTotal += multiplier * code;
+ }
+ lastStart = nextStart;
+ for (int32_t i = 0; i < counters.GetSize(); i++) {
+ nextStart += counters[i];
+ }
+ switch (code) {
+ case 103:
+ case 104:
+ case 105:
+ e = BCExceptionFormatException;
+ return "";
+ }
+ switch (codeSet) {
+ case 101:
+ if (code < 64) {
+ result += (FX_CHAR)(' ' + code);
+ } else if (code < 96) {
+ result += (FX_CHAR)(code - 64);
+ } else {
+ if (code != CODE_STOP) {
+ lastCharacterWasPrintable = FALSE;
+ }
+ switch (code) {
+ case 102:
+ case 97:
+ case 96:
case 101:
- if (code < 64) {
- result += (FX_CHAR) (' ' + code);
- } else if (code < 96) {
- result += (FX_CHAR) (code - 64);
- } else {
- if (code != CODE_STOP) {
- lastCharacterWasPrintable = FALSE;
- }
- switch (code) {
- case 102:
- case 97:
- case 96:
- case 101:
- break;
- case 98:
- isNextShifted = TRUE;
- codeSet = CODE_CODE_B;
- break;
- case 100:
- codeSet = CODE_CODE_B;
- break;
- case 99:
- codeSet = CODE_CODE_C;
- break;
- case 106:
- done = TRUE;
- break;
- }
- }
- break;
+ break;
+ case 98:
+ isNextShifted = TRUE;
+ codeSet = CODE_CODE_B;
+ break;
+ case 100:
+ codeSet = CODE_CODE_B;
+ break;
+ case 99:
+ codeSet = CODE_CODE_C;
+ break;
+ case 106:
+ done = TRUE;
+ break;
+ }
+ }
+ break;
+ case 100:
+ if (code < 96) {
+ result += (FX_CHAR)(' ' + code);
+ } else {
+ if (code != CODE_STOP) {
+ lastCharacterWasPrintable = FALSE;
+ }
+ switch (code) {
+ case 102:
+ case 97:
+ case 96:
case 100:
- if (code < 96) {
- result += (FX_CHAR) (' ' + code);
- } else {
- if (code != CODE_STOP) {
- lastCharacterWasPrintable = FALSE;
- }
- switch (code) {
- case 102:
- case 97:
- case 96:
- case 100:
- break;
- case 98:
- isNextShifted = TRUE;
- codeSet = CODE_CODE_A;
- break;
- case 101:
- codeSet = CODE_CODE_A;
- break;
- case 99:
- codeSet = CODE_CODE_C;
- break;
- case 106:
- done = TRUE;
- break;
- }
- }
- break;
+ break;
+ case 98:
+ isNextShifted = TRUE;
+ codeSet = CODE_CODE_A;
+ break;
+ case 101:
+ codeSet = CODE_CODE_A;
+ break;
case 99:
- if (code < 100) {
- if (code < 10) {
- result += '0';
- }
- FX_CHAR temp[128];
+ codeSet = CODE_CODE_C;
+ break;
+ case 106:
+ done = TRUE;
+ break;
+ }
+ }
+ break;
+ case 99:
+ if (code < 100) {
+ if (code < 10) {
+ result += '0';
+ }
+ FX_CHAR temp[128];
#if defined(_FX_WINAPI_PARTITION_APP_)
- sprintf_s(temp, 128, "%d", code);
+ sprintf_s(temp, 128, "%d", code);
#else
- sprintf(temp, "%d", code);
+ sprintf(temp, "%d", code);
#endif
- result += temp;
- } else {
- if (code != CODE_STOP) {
- lastCharacterWasPrintable = FALSE;
- }
- switch (code) {
- case 102:
- break;
- case 101:
- codeSet = CODE_CODE_A;
- break;
- case 100:
- codeSet = CODE_CODE_B;
- break;
- case 106:
- done = TRUE;
- break;
- }
- }
- break;
- }
- if (unshift) {
- codeSet = codeSet == CODE_CODE_A ? CODE_CODE_B : CODE_CODE_A;
- }
- }
- int32_t width = row->GetSize();
- while (nextStart < width && row->Get(nextStart)) {
- nextStart++;
- }
- FX_BOOL boolT1 = row->IsRange(nextStart, FX_MIN(width, nextStart + (nextStart - lastStart) / 2), FALSE, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- if (!boolT1) {
- e = BCExceptionNotFound;
- return "";
- }
- checksumTotal -= multiplier * lastCode;
- if (checksumTotal % 103 != lastCode) {
- e = BCExceptionChecksumException;
- return "";
- }
- int32_t resultLength = result.GetLength();
- if (resultLength > 0 && lastCharacterWasPrintable) {
- if (codeSet == CODE_CODE_C) {
- result = result.Mid(0, result.GetLength() - 2);
+ result += temp;
} else {
- result = result.Mid(0, result.GetLength() - 1);
+ if (code != CODE_STOP) {
+ lastCharacterWasPrintable = FALSE;
+ }
+ switch (code) {
+ case 102:
+ break;
+ case 101:
+ codeSet = CODE_CODE_A;
+ break;
+ case 100:
+ codeSet = CODE_CODE_B;
+ break;
+ case 106:
+ done = TRUE;
+ break;
+ }
}
+ break;
}
- if (result.GetLength() == 0) {
- e = BCExceptionFormatException;
- return "";
+ if (unshift) {
+ codeSet = codeSet == CODE_CODE_A ? CODE_CODE_B : CODE_CODE_A;
+ }
+ }
+ int32_t width = row->GetSize();
+ while (nextStart < width && row->Get(nextStart)) {
+ nextStart++;
+ }
+ FX_BOOL boolT1 = row->IsRange(
+ nextStart, FX_MIN(width, nextStart + (nextStart - lastStart) / 2), FALSE,
+ e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ if (!boolT1) {
+ e = BCExceptionNotFound;
+ return "";
+ }
+ checksumTotal -= multiplier * lastCode;
+ if (checksumTotal % 103 != lastCode) {
+ e = BCExceptionChecksumException;
+ return "";
+ }
+ int32_t resultLength = result.GetLength();
+ if (resultLength > 0 && lastCharacterWasPrintable) {
+ if (codeSet == CODE_CODE_C) {
+ result = result.Mid(0, result.GetLength() - 2);
+ } else {
+ result = result.Mid(0, result.GetLength() - 1);
}
- return result;
+ }
+ if (result.GetLength() == 0) {
+ e = BCExceptionFormatException;
+ return "";
+ }
+ return result;
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h b/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h
index 558b111c22..d946c0a040 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedCode128Reader.h
@@ -9,32 +9,38 @@
class CBC_OneDReader;
class CBC_CommonBitArray;
class CBC_OnedCoda128Reader;
-class CBC_OnedCode128Reader : public CBC_OneDReader
-{
-public:
- CBC_OnedCode128Reader();
- virtual ~CBC_OnedCode128Reader();
- virtual CFX_ByteString DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e);
- const static int32_t CODE_PATTERNS[107][7];
- const static int32_t MAX_AVG_VARIANCE;
- const static int32_t MAX_INDIVIDUAL_VARIANCE;
+class CBC_OnedCode128Reader : public CBC_OneDReader {
+ public:
+ CBC_OnedCode128Reader();
+ virtual ~CBC_OnedCode128Reader();
+ virtual CFX_ByteString DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e);
+ const static int32_t CODE_PATTERNS[107][7];
+ const static int32_t MAX_AVG_VARIANCE;
+ const static int32_t MAX_INDIVIDUAL_VARIANCE;
- const static int32_t CODE_SHIFT;
- const static int32_t CODE_CODE_C;
- const static int32_t CODE_CODE_B;
- const static int32_t CODE_CODE_A;
- const static int32_t CODE_FNC_1;
- const static int32_t CODE_FNC_2;
- const static int32_t CODE_FNC_3;
- const static int32_t CODE_FNC_4_A;
- const static int32_t CODE_FNC_4_B ;
+ const static int32_t CODE_SHIFT;
+ const static int32_t CODE_CODE_C;
+ const static int32_t CODE_CODE_B;
+ const static int32_t CODE_CODE_A;
+ const static int32_t CODE_FNC_1;
+ const static int32_t CODE_FNC_2;
+ const static int32_t CODE_FNC_3;
+ const static int32_t CODE_FNC_4_A;
+ const static int32_t CODE_FNC_4_B;
- const static int32_t CODE_START_A;
- const static int32_t CODE_START_B;
- const static int32_t CODE_START_C;
- const static int32_t CODE_STOP;
-private:
- CFX_Int32Array *FindStartPattern(CBC_CommonBitArray *row, int32_t &e);
- int32_t DecodeCode(CBC_CommonBitArray *row, CFX_Int32Array *counters, int32_t rowOffset, int32_t &e);
+ const static int32_t CODE_START_A;
+ const static int32_t CODE_START_B;
+ const static int32_t CODE_START_C;
+ const static int32_t CODE_STOP;
+
+ private:
+ CFX_Int32Array* FindStartPattern(CBC_CommonBitArray* row, int32_t& e);
+ int32_t DecodeCode(CBC_CommonBitArray* row,
+ CFX_Int32Array* counters,
+ int32_t rowOffset,
+ int32_t& e);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp b/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp
index a0447167be..2c30024dd1 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.cpp
@@ -32,199 +32,204 @@ const int32_t CBC_OnedCode128Writer::CODE_CODE_C = 99;
const int32_t CBC_OnedCode128Writer::CODE_START_B = 104;
const int32_t CBC_OnedCode128Writer::CODE_START_C = 105;
const int32_t CBC_OnedCode128Writer::CODE_STOP = 106;
-CBC_OnedCode128Writer::CBC_OnedCode128Writer()
-{
- m_codeFormat = BC_CODE128_B;
+CBC_OnedCode128Writer::CBC_OnedCode128Writer() {
+ m_codeFormat = BC_CODE128_B;
}
-CBC_OnedCode128Writer::CBC_OnedCode128Writer(BC_TYPE type)
-{
- m_codeFormat = type;
+CBC_OnedCode128Writer::CBC_OnedCode128Writer(BC_TYPE type) {
+ m_codeFormat = type;
}
-CBC_OnedCode128Writer::~CBC_OnedCode128Writer()
-{
+CBC_OnedCode128Writer::~CBC_OnedCode128Writer() {}
+BC_TYPE CBC_OnedCode128Writer::GetType() {
+ return m_codeFormat;
}
-BC_TYPE CBC_OnedCode128Writer::GetType()
-{
- return m_codeFormat;
-}
-FX_BOOL CBC_OnedCode128Writer::CheckContentValidity(const CFX_WideStringC& contents)
-{
- FX_BOOL ret = TRUE;
- int32_t position = 0;
- int32_t patternIndex = -1;
- if (m_codeFormat == BC_CODE128_B || m_codeFormat == BC_CODE128_C) {
- while (position < contents.GetLength()) {
- patternIndex = (int32_t)contents.GetAt(position);
- if (patternIndex >= 32 && patternIndex <= 126 && patternIndex != 34) {
- position++;
- continue;
- } else {
- ret = FALSE;
- break;
- }
- position ++;
- }
- } else {
+FX_BOOL CBC_OnedCode128Writer::CheckContentValidity(
+ const CFX_WideStringC& contents) {
+ FX_BOOL ret = TRUE;
+ int32_t position = 0;
+ int32_t patternIndex = -1;
+ if (m_codeFormat == BC_CODE128_B || m_codeFormat == BC_CODE128_C) {
+ while (position < contents.GetLength()) {
+ patternIndex = (int32_t)contents.GetAt(position);
+ if (patternIndex >= 32 && patternIndex <= 126 && patternIndex != 34) {
+ position++;
+ continue;
+ } else {
ret = FALSE;
+ break;
+ }
+ position++;
}
- return ret;
+ } else {
+ ret = FALSE;
+ }
+ return ret;
}
-CFX_WideString CBC_OnedCode128Writer::FilterContents(const CFX_WideStringC& contents)
-{
- CFX_WideString filterChineseChar;
- FX_WCHAR ch;
- for (int32_t i = 0; i < contents.GetLength(); i++) {
- ch = contents.GetAt(i);
- if(ch > 175) {
- i++;
- continue;
- }
- filterChineseChar += ch;
+CFX_WideString CBC_OnedCode128Writer::FilterContents(
+ const CFX_WideStringC& contents) {
+ CFX_WideString filterChineseChar;
+ FX_WCHAR ch;
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ ch = contents.GetAt(i);
+ if (ch > 175) {
+ i++;
+ continue;
}
- CFX_WideString filtercontents;
- if (m_codeFormat == BC_CODE128_B) {
- for (int32_t i = 0; i < filterChineseChar.GetLength(); i++) {
- ch = filterChineseChar.GetAt(i);
- if (ch >= 32 && ch <= 126) {
- filtercontents += ch;
- } else {
- continue;
- }
- }
- } else if (m_codeFormat == BC_CODE128_C) {
- for (int32_t i = 0; i < filterChineseChar.GetLength(); i++) {
- ch = filterChineseChar.GetAt(i);
- if (ch >= 32 && ch <= 106) {
- filtercontents += ch;
- } else {
- continue;
- }
- }
- } else {
- filtercontents = contents;
+ filterChineseChar += ch;
+ }
+ CFX_WideString filtercontents;
+ if (m_codeFormat == BC_CODE128_B) {
+ for (int32_t i = 0; i < filterChineseChar.GetLength(); i++) {
+ ch = filterChineseChar.GetAt(i);
+ if (ch >= 32 && ch <= 126) {
+ filtercontents += ch;
+ } else {
+ continue;
+ }
}
- return filtercontents;
-}
-FX_BOOL CBC_OnedCode128Writer::SetTextLocation(BC_TEXT_LOC location)
-{
- if ( location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) {
- return FALSE;
+ } else if (m_codeFormat == BC_CODE128_C) {
+ for (int32_t i = 0; i < filterChineseChar.GetLength(); i++) {
+ ch = filterChineseChar.GetAt(i);
+ if (ch >= 32 && ch <= 106) {
+ filtercontents += ch;
+ } else {
+ continue;
+ }
}
- m_locTextLoc = location;
- return TRUE;
+ } else {
+ filtercontents = contents;
+ }
+ return filtercontents;
}
-uint8_t *CBC_OnedCode128Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e)
-{
- if(format != BCFORMAT_CODE_128) {
- e = BCExceptionOnlyEncodeCODE_128;
- return NULL;
- }
- uint8_t *ret = CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+FX_BOOL CBC_OnedCode128Writer::SetTextLocation(BC_TEXT_LOC location) {
+ if (location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) {
+ return FALSE;
+ }
+ m_locTextLoc = location;
+ return TRUE;
}
-uint8_t *CBC_OnedCode128Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e)
-{
- uint8_t *ret = Encode(contents, format, outWidth, outHeight, 0, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedCode128Writer::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e) {
+ if (format != BCFORMAT_CODE_128) {
+ e = BCExceptionOnlyEncodeCODE_128;
+ return NULL;
+ }
+ uint8_t* ret =
+ CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-FX_BOOL CBC_OnedCode128Writer::IsDigits(const CFX_ByteString &contents, int32_t start, int32_t length)
-{
- int32_t end = start + length;
- for (int32_t i = start; i < end; i++) {
- if (contents[i] < '0' || contents[i] > '9') {
- return FALSE;
- }
- }
- return TRUE;
+uint8_t* CBC_OnedCode128Writer::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e) {
+ uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t *CBC_OnedCode128Writer::Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e)
-{
- int32_t length = contents.GetLength();
- if(contents.GetLength() < 1 || contents.GetLength() > 80) {
- e = BCExceptionContentsLengthShouldBetween1and80;
- return NULL;
+FX_BOOL CBC_OnedCode128Writer::IsDigits(const CFX_ByteString& contents,
+ int32_t start,
+ int32_t length) {
+ int32_t end = start + length;
+ for (int32_t i = start; i < end; i++) {
+ if (contents[i] < '0' || contents[i] > '9') {
+ return FALSE;
}
- CFX_PtrArray patterns;
- int32_t checkSum = 0;
- if (m_codeFormat == BC_CODE128_B) {
- checkSum = Encode128B(contents, patterns);
- } else if (m_codeFormat == BC_CODE128_C) {
- checkSum = Encode128C(contents, patterns);
- } else {
- e = BCExceptionFormatException;
- return NULL;
+ }
+ return TRUE;
+}
+uint8_t* CBC_OnedCode128Writer::Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e) {
+ int32_t length = contents.GetLength();
+ if (contents.GetLength() < 1 || contents.GetLength() > 80) {
+ e = BCExceptionContentsLengthShouldBetween1and80;
+ return NULL;
+ }
+ CFX_PtrArray patterns;
+ int32_t checkSum = 0;
+ if (m_codeFormat == BC_CODE128_B) {
+ checkSum = Encode128B(contents, patterns);
+ } else if (m_codeFormat == BC_CODE128_C) {
+ checkSum = Encode128C(contents, patterns);
+ } else {
+ e = BCExceptionFormatException;
+ return NULL;
+ }
+ checkSum %= 103;
+ patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[checkSum]);
+ patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_STOP]);
+ m_iContentLen = contents.GetLength() + 3;
+ int32_t codeWidth = 0;
+ for (int32_t k = 0; k < patterns.GetSize(); k++) {
+ int32_t* pattern = (int32_t*)patterns[k];
+ for (int32_t j = 0; j < 7; j++) {
+ codeWidth += pattern[j];
}
- checkSum %= 103;
- patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[checkSum]);
- patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_STOP]);
- m_iContentLen = contents.GetLength() + 3;
- int32_t codeWidth = 0;
- for(int32_t k = 0; k < patterns.GetSize(); k++) {
- int32_t *pattern = (int32_t*)patterns[k];
- for(int32_t j = 0; j < 7; j++) {
- codeWidth += pattern[j];
- }
+ }
+ outLength = codeWidth;
+ uint8_t* result = FX_Alloc(uint8_t, outLength);
+ int32_t pos = 0;
+ for (int32_t j = 0; j < patterns.GetSize(); j++) {
+ int32_t* pattern = (int32_t*)patterns[j];
+ pos += AppendPattern(result, pos, pattern, 7, 1, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
}
- outLength = codeWidth;
- uint8_t *result = FX_Alloc(uint8_t, outLength);
- int32_t pos = 0;
- for(int32_t j = 0; j < patterns.GetSize(); j++) {
- int32_t* pattern = (int32_t*)patterns[j];
- pos += AppendPattern(result, pos, pattern, 7, 1, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
+ }
+ return result;
+}
+int32_t CBC_OnedCode128Writer::Encode128B(const CFX_ByteString& contents,
+ CFX_PtrArray& patterns) {
+ int32_t checkSum = 0;
+ int32_t checkWeight = 1;
+ int32_t position = 0;
+ patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_START_B]);
+ checkSum += CODE_START_B * checkWeight;
+ while (position < contents.GetLength()) {
+ int32_t patternIndex = 0;
+ patternIndex = contents[position] - ' ';
+ position += 1;
+ patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[patternIndex]);
+ checkSum += patternIndex * checkWeight;
+ if (position != 0) {
+ checkWeight++;
}
- return result;
+ }
+ return checkSum;
}
-int32_t CBC_OnedCode128Writer::Encode128B(const CFX_ByteString &contents, CFX_PtrArray &patterns)
-{
- int32_t checkSum = 0;
- int32_t checkWeight = 1;
- int32_t position = 0;
- patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_START_B]);
- checkSum += CODE_START_B * checkWeight;
- while (position < contents.GetLength()) {
- int32_t patternIndex = 0;
- patternIndex = contents[position] - ' ';
+int32_t CBC_OnedCode128Writer::Encode128C(const CFX_ByteString& contents,
+ CFX_PtrArray& patterns) {
+ int32_t checkSum = 0;
+ int32_t checkWeight = 1;
+ int32_t position = 0;
+ patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_START_C]);
+ checkSum += CODE_START_C * checkWeight;
+ while (position < contents.GetLength()) {
+ int32_t patternIndex = 0;
+ FX_CHAR ch = contents.GetAt(position);
+ if (ch < '0' || ch > '9') {
+ patternIndex = (int32_t)ch;
+ position++;
+ } else {
+ patternIndex = FXSYS_atoi(contents.Mid(position, 2));
+ if (contents.GetAt(position + 1) < '0' ||
+ contents.GetAt(position + 1) > '9') {
position += 1;
- patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[patternIndex]);
- checkSum += patternIndex * checkWeight;
- if (position != 0) {
- checkWeight++;
- }
+ } else {
+ position += 2;
+ }
}
- return checkSum;
-}
-int32_t CBC_OnedCode128Writer::Encode128C(const CFX_ByteString &contents, CFX_PtrArray &patterns)
-{
- int32_t checkSum = 0;
- int32_t checkWeight = 1;
- int32_t position = 0;
- patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[CODE_START_C]);
- checkSum += CODE_START_C * checkWeight;
- while (position < contents.GetLength()) {
- int32_t patternIndex = 0;
- FX_CHAR ch = contents.GetAt(position);
- if (ch < '0' || ch > '9') {
- patternIndex = (int32_t)ch;
- position++;
- } else {
- patternIndex = FXSYS_atoi(contents.Mid(position, 2));
- if (contents.GetAt(position + 1) < '0' || contents.GetAt(position + 1) > '9') {
- position += 1;
- } else {
- position += 2;
- }
- }
- patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[patternIndex]);
- checkSum += patternIndex * checkWeight;
- if (position != 0) {
- checkWeight++;
- }
+ patterns.Add((int32_t*)CBC_OnedCode128Reader::CODE_PATTERNS[patternIndex]);
+ checkSum += patternIndex * checkWeight;
+ if (position != 0) {
+ checkWeight++;
}
- return checkSum;
+ }
+ return checkSum;
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h b/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h
index 8a89f266b2..94f782aaed 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedCode128Writer.h
@@ -8,30 +8,41 @@
#define _BC_ONEDCODA128WRITER_H_
class CBC_OneDimWriter;
class CBC_OnedCoda128Writer;
-class CBC_OnedCode128Writer : public CBC_OneDimWriter
-{
-public:
- CBC_OnedCode128Writer();
- CBC_OnedCode128Writer(BC_TYPE type);
- virtual ~CBC_OnedCode128Writer();
- uint8_t * Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e);
- uint8_t * Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t &e);
- uint8_t * Encode(const CFX_ByteString &contents, int32_t &outLength , int32_t &e);
- FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
- CFX_WideString FilterContents(const CFX_WideStringC& contents);
- FX_BOOL SetTextLocation(BC_TEXT_LOC location);
- BC_TYPE GetType();
-private:
- FX_BOOL IsDigits(const CFX_ByteString &contents, int32_t start, int32_t length);
- int32_t Encode128B(const CFX_ByteString &contents, CFX_PtrArray &patterns);
- int32_t Encode128C(const CFX_ByteString &contents, CFX_PtrArray &patterns);
- BC_TYPE m_codeFormat;
- const static int32_t CODE_START_B;
- const static int32_t CODE_START_C;
- const static int32_t CODE_CODE_B;
- const static int32_t CODE_CODE_C;
- const static int32_t CODE_STOP;
+class CBC_OnedCode128Writer : public CBC_OneDimWriter {
+ public:
+ CBC_OnedCode128Writer();
+ CBC_OnedCode128Writer(BC_TYPE type);
+ virtual ~CBC_OnedCode128Writer();
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e);
+ FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
+ CFX_WideString FilterContents(const CFX_WideStringC& contents);
+ FX_BOOL SetTextLocation(BC_TEXT_LOC location);
+ BC_TYPE GetType();
+
+ private:
+ FX_BOOL IsDigits(const CFX_ByteString& contents,
+ int32_t start,
+ int32_t length);
+ int32_t Encode128B(const CFX_ByteString& contents, CFX_PtrArray& patterns);
+ int32_t Encode128C(const CFX_ByteString& contents, CFX_PtrArray& patterns);
+ BC_TYPE m_codeFormat;
+ const static int32_t CODE_START_B;
+ const static int32_t CODE_START_C;
+ const static int32_t CODE_CODE_B;
+ const static int32_t CODE_CODE_C;
+ const static int32_t CODE_STOP;
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp b/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp
index a678338894..3678260033 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.cpp
@@ -25,269 +25,269 @@
#include "../common/BC_CommonBitArray.h"
#include "BC_OneDReader.h"
#include "BC_OnedCode39Reader.h"
-const FX_CHAR* CBC_OnedCode39Reader::ALPHABET_STRING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%";
-const FX_CHAR* CBC_OnedCode39Reader::CHECKSUM_STRING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
+const FX_CHAR* CBC_OnedCode39Reader::ALPHABET_STRING =
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%";
+const FX_CHAR* CBC_OnedCode39Reader::CHECKSUM_STRING =
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";
const int32_t CBC_OnedCode39Reader::CHARACTER_ENCODINGS[44] = {
- 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064,
- 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C,
- 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016,
- 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094,
- 0x0A8, 0x0A2, 0x08A, 0x02A
-};
+ 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124,
+ 0x064, 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C,
+ 0x04C, 0x01C, 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007,
+ 0x106, 0x046, 0x016, 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0,
+ 0x085, 0x184, 0x0C4, 0x094, 0x0A8, 0x0A2, 0x08A, 0x02A};
const int32_t CBC_OnedCode39Reader::ASTERISK_ENCODING = 0x094;
-CBC_OnedCode39Reader::CBC_OnedCode39Reader(): m_extendedMode(FALSE), m_usingCheckDigit(FALSE)
-{
+CBC_OnedCode39Reader::CBC_OnedCode39Reader()
+ : m_extendedMode(FALSE), m_usingCheckDigit(FALSE) {}
+CBC_OnedCode39Reader::CBC_OnedCode39Reader(FX_BOOL usingCheckDigit) {
+ m_usingCheckDigit = usingCheckDigit;
+ m_extendedMode = FALSE;
}
-CBC_OnedCode39Reader::CBC_OnedCode39Reader(FX_BOOL usingCheckDigit)
-{
- m_usingCheckDigit = usingCheckDigit;
- m_extendedMode = FALSE;
+CBC_OnedCode39Reader::CBC_OnedCode39Reader(FX_BOOL usingCheckDigit,
+ FX_BOOL extendedMode) {
+ m_extendedMode = extendedMode;
+ m_usingCheckDigit = usingCheckDigit;
}
-CBC_OnedCode39Reader::CBC_OnedCode39Reader(FX_BOOL usingCheckDigit, FX_BOOL extendedMode)
-{
- m_extendedMode = extendedMode;
- m_usingCheckDigit = usingCheckDigit;
-}
-CBC_OnedCode39Reader::~CBC_OnedCode39Reader()
-{
-}
-CFX_ByteString CBC_OnedCode39Reader::DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e)
-{
- CFX_Int32Array *start = FindAsteriskPattern(row, e);
+CBC_OnedCode39Reader::~CBC_OnedCode39Reader() {}
+CFX_ByteString CBC_OnedCode39Reader::DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e) {
+ CFX_Int32Array* start = FindAsteriskPattern(row, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ int32_t nextStart = (*start)[1];
+ if (start != NULL) {
+ delete start;
+ start = NULL;
+ }
+ int32_t end = row->GetSize();
+ while (nextStart < end && !row->Get(nextStart)) {
+ nextStart++;
+ }
+ CFX_ByteString result;
+ CFX_Int32Array counters;
+ counters.SetSize(9);
+ FX_CHAR decodedChar;
+ int32_t lastStart;
+ do {
+ RecordPattern(row, nextStart, &counters, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ int32_t pattern = ToNarrowWidePattern(&counters);
+ if (pattern < 0) {
+ e = BCExceptionNotFound;
+ return "";
+ }
+ decodedChar = PatternToChar(pattern, e);
BC_EXCEPTION_CHECK_ReturnValue(e, "");
- int32_t nextStart = (*start)[1];
- if(start != NULL) {
- delete start;
- start = NULL;
+ result += decodedChar;
+ lastStart = nextStart;
+ for (int32_t i = 0; i < counters.GetSize(); i++) {
+ nextStart += counters[i];
}
- int32_t end = row->GetSize();
while (nextStart < end && !row->Get(nextStart)) {
- nextStart++;
+ nextStart++;
}
- CFX_ByteString result;
- CFX_Int32Array counters;
- counters.SetSize(9);
- FX_CHAR decodedChar;
- int32_t lastStart;
- do {
- RecordPattern(row, nextStart, &counters, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- int32_t pattern = ToNarrowWidePattern(&counters);
- if (pattern < 0) {
- e = BCExceptionNotFound;
- return "";
- }
- decodedChar = PatternToChar(pattern, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- result += decodedChar;
- lastStart = nextStart;
- for (int32_t i = 0; i < counters.GetSize(); i++) {
- nextStart += counters[i];
+ } while (decodedChar != '*');
+ result = result.Mid(0, result.GetLength() - 1);
+ int32_t lastPatternSize = 0;
+ for (int32_t j = 0; j < counters.GetSize(); j++) {
+ lastPatternSize += counters[j];
+ }
+ int32_t whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;
+ if (m_usingCheckDigit) {
+ int32_t max = result.GetLength() - 1;
+ int32_t total = 0;
+ int32_t len = (int32_t)strlen(ALPHABET_STRING);
+ for (int32_t k = 0; k < max; k++) {
+ for (int32_t j = 0; j < len; j++)
+ if (ALPHABET_STRING[j] == result[k]) {
+ total += j;
}
- while (nextStart < end && !row->Get(nextStart)) {
- nextStart++;
- }
- } while (decodedChar != '*');
- result = result.Mid(0, result.GetLength() - 1);
- int32_t lastPatternSize = 0;
- for (int32_t j = 0; j < counters.GetSize(); j++) {
- lastPatternSize += counters[j];
}
- int32_t whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;
- if(m_usingCheckDigit) {
- int32_t max = result.GetLength() - 1;
- int32_t total = 0;
- int32_t len = (int32_t)strlen(ALPHABET_STRING);
- for (int32_t k = 0; k < max; k++) {
- for (int32_t j = 0; j < len; j++)
- if (ALPHABET_STRING[j] == result[k]) {
- total += j;
- }
- }
- if (result[max] != (ALPHABET_STRING)[total % 43]) {
- e = BCExceptionChecksumException;
- return "";
- }
- result = result.Mid(0, result.GetLength() - 1);
+ if (result[max] != (ALPHABET_STRING)[total % 43]) {
+ e = BCExceptionChecksumException;
+ return "";
}
- if (result.GetLength() == 0) {
- e = BCExceptionNotFound;
- return "";
+ result = result.Mid(0, result.GetLength() - 1);
+ }
+ if (result.GetLength() == 0) {
+ e = BCExceptionNotFound;
+ return "";
+ }
+ if (m_extendedMode) {
+ CFX_ByteString bytestr = DecodeExtended(result, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ return bytestr;
+ } else {
+ return result;
+ }
+}
+CFX_Int32Array* CBC_OnedCode39Reader::FindAsteriskPattern(
+ CBC_CommonBitArray* row,
+ int32_t& e) {
+ int32_t width = row->GetSize();
+ int32_t rowOffset = 0;
+ while (rowOffset < width) {
+ if (row->Get(rowOffset)) {
+ break;
}
- if(m_extendedMode) {
- CFX_ByteString bytestr = DecodeExtended(result, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- return bytestr;
+ rowOffset++;
+ }
+ int32_t counterPosition = 0;
+ CFX_Int32Array counters;
+ counters.SetSize(9);
+ int32_t patternStart = rowOffset;
+ FX_BOOL isWhite = FALSE;
+ int32_t patternLength = counters.GetSize();
+ for (int32_t i = rowOffset; i < width; i++) {
+ FX_BOOL pixel = row->Get(i);
+ if (pixel ^ isWhite) {
+ counters[counterPosition]++;
} else {
- return result;
- }
-}
-CFX_Int32Array *CBC_OnedCode39Reader::FindAsteriskPattern(CBC_CommonBitArray *row, int32_t &e)
-{
- int32_t width = row->GetSize();
- int32_t rowOffset = 0;
- while (rowOffset < width) {
- if (row->Get(rowOffset)) {
- break;
+ if (counterPosition == patternLength - 1) {
+ if (ToNarrowWidePattern(&counters) == ASTERISK_ENCODING) {
+ FX_BOOL bT1 =
+ row->IsRange(FX_MAX(0, patternStart - (i - patternStart) / 2),
+ patternStart, FALSE, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ if (bT1) {
+ CFX_Int32Array* result = FX_NEW CFX_Int32Array;
+ result->SetSize(2);
+ (*result)[0] = patternStart;
+ (*result)[1] = i;
+ return result;
+ }
}
- rowOffset++;
- }
- int32_t counterPosition = 0;
- CFX_Int32Array counters;
- counters.SetSize(9);
- int32_t patternStart = rowOffset;
- FX_BOOL isWhite = FALSE;
- int32_t patternLength = counters.GetSize();
- for (int32_t i = rowOffset; i < width; i++) {
- FX_BOOL pixel = row->Get(i);
- if (pixel ^ isWhite) {
- counters[counterPosition]++;
- } else {
- if (counterPosition == patternLength - 1) {
- if (ToNarrowWidePattern(&counters) == ASTERISK_ENCODING) {
- FX_BOOL bT1 = row->IsRange(FX_MAX(0, patternStart - (i - patternStart) / 2), patternStart, FALSE, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- if (bT1) {
- CFX_Int32Array *result = FX_NEW CFX_Int32Array;
- result->SetSize(2);
- (*result)[0] = patternStart;
- (*result)[1] = i;
- return result;
- }
- }
- patternStart += counters[0] + counters[1];
- for (int32_t y = 2; y < patternLength; y++) {
- counters[y - 2] = counters[y];
- }
- counters[patternLength - 2] = 0;
- counters[patternLength - 1] = 0;
- counterPosition--;
- } else {
- counterPosition++;
- }
- counters[counterPosition] = 1;
- isWhite = !isWhite;
+ patternStart += counters[0] + counters[1];
+ for (int32_t y = 2; y < patternLength; y++) {
+ counters[y - 2] = counters[y];
}
+ counters[patternLength - 2] = 0;
+ counters[patternLength - 1] = 0;
+ counterPosition--;
+ } else {
+ counterPosition++;
+ }
+ counters[counterPosition] = 1;
+ isWhite = !isWhite;
}
- e = BCExceptionNotFound;
- return NULL;
+ }
+ e = BCExceptionNotFound;
+ return NULL;
}
-int32_t CBC_OnedCode39Reader::ToNarrowWidePattern(CFX_Int32Array *counters)
-{
- int32_t numCounters = counters->GetSize();
- int32_t maxNarrowCounter = 0;
- int32_t wideCounters;
- do {
+int32_t CBC_OnedCode39Reader::ToNarrowWidePattern(CFX_Int32Array* counters) {
+ int32_t numCounters = counters->GetSize();
+ int32_t maxNarrowCounter = 0;
+ int32_t wideCounters;
+ do {
#undef max
- int32_t minCounter = FXSYS_IntMax;
- for (int32_t i = 0; i < numCounters; i++) {
- int32_t counter = (*counters)[i];
- if (counter < minCounter && counter > maxNarrowCounter) {
- minCounter = counter;
- }
- }
- maxNarrowCounter = minCounter;
- wideCounters = 0;
- int32_t totalWideCountersWidth = 0;
- int32_t pattern = 0;
- for (int32_t j = 0; j < numCounters; j++) {
- int32_t counter = (*counters)[j];
- if ((*counters)[j] > maxNarrowCounter) {
- pattern |= 1 << (numCounters - 1 - j);
- wideCounters++;
- totalWideCountersWidth += counter;
- }
- }
- if (wideCounters == 3) {
- for (int32_t k = 0; k < numCounters && wideCounters > 0; k++) {
- int32_t counter = (*counters)[k];
- if ((*counters)[k] > maxNarrowCounter) {
- wideCounters--;
- if ((counter << 1) >= totalWideCountersWidth) {
- return -1;
- }
- }
- }
- return pattern;
+ int32_t minCounter = FXSYS_IntMax;
+ for (int32_t i = 0; i < numCounters; i++) {
+ int32_t counter = (*counters)[i];
+ if (counter < minCounter && counter > maxNarrowCounter) {
+ minCounter = counter;
+ }
+ }
+ maxNarrowCounter = minCounter;
+ wideCounters = 0;
+ int32_t totalWideCountersWidth = 0;
+ int32_t pattern = 0;
+ for (int32_t j = 0; j < numCounters; j++) {
+ int32_t counter = (*counters)[j];
+ if ((*counters)[j] > maxNarrowCounter) {
+ pattern |= 1 << (numCounters - 1 - j);
+ wideCounters++;
+ totalWideCountersWidth += counter;
+ }
+ }
+ if (wideCounters == 3) {
+ for (int32_t k = 0; k < numCounters && wideCounters > 0; k++) {
+ int32_t counter = (*counters)[k];
+ if ((*counters)[k] > maxNarrowCounter) {
+ wideCounters--;
+ if ((counter << 1) >= totalWideCountersWidth) {
+ return -1;
+ }
}
- } while (wideCounters > 3);
- return -1;
+ }
+ return pattern;
+ }
+ } while (wideCounters > 3);
+ return -1;
}
-FX_CHAR CBC_OnedCode39Reader::PatternToChar(int32_t pattern, int32_t &e)
-{
- for (int32_t i = 0; i < 44; i++) {
- if (CHARACTER_ENCODINGS[i] == pattern) {
- return (ALPHABET_STRING)[i];
- }
+FX_CHAR CBC_OnedCode39Reader::PatternToChar(int32_t pattern, int32_t& e) {
+ for (int32_t i = 0; i < 44; i++) {
+ if (CHARACTER_ENCODINGS[i] == pattern) {
+ return (ALPHABET_STRING)[i];
}
- e = BCExceptionNotFound;
- return 0;
+ }
+ e = BCExceptionNotFound;
+ return 0;
}
-CFX_ByteString CBC_OnedCode39Reader::DecodeExtended(CFX_ByteString &encoded, int32_t &e)
-{
- int32_t length = encoded.GetLength();
- CFX_ByteString decoded;
- FX_CHAR c, next;
- for(int32_t i = 0; i < length; i++) {
- c = encoded[i];
- if(c == '+' || c == '$' || c == '%' || c == '/') {
- next = encoded[i + 1];
- FX_CHAR decodedChar = '\0';
- switch (c) {
- case '+':
- if (next >= 'A' && next <= 'Z') {
- decodedChar = (FX_CHAR) (next + 32);
- } else {
- e = BCExceptionFormatException;
- return "";
- }
- break;
- case '$':
- if (next >= 'A' && next <= 'Z') {
- decodedChar = (FX_CHAR) (next - 64);
- } else {
- e = BCExceptionFormatException;
- return "";
- }
- break;
- case '%':
- if (next >= 'A' && next <= 'E') {
- decodedChar = (FX_CHAR) (next - 38);
- } else if (next >= 'F' && next <= 'J') {
- decodedChar = (FX_CHAR) (next - 11);
- } else if (next >= 'K' && next <= 'O' && next != 'M' && next != 'N') {
- decodedChar = (FX_CHAR) (next + 16);
- } else if (next >= 'P' && next <= 'S') {
- decodedChar = (FX_CHAR) (next + 43);
- } else if (next == 'U') {
- decodedChar = (FX_CHAR) 0;
- } else if (next == 'V') {
- decodedChar = (FX_CHAR) 64;
- } else if (next == 'W') {
- decodedChar = (FX_CHAR) 96;
- } else if (next == 'T' || next == 'X' || next == 'Y' || next == 'Z') {
- decodedChar = (FX_CHAR) 127;
- } else {
- e = BCExceptionFormatException;
- return "";
- }
- break;
- case '/':
- if (next >= 'A' && next <= 'O') {
- decodedChar = (FX_CHAR) (next - 32);
- } else if (next == 'Z') {
- decodedChar = ':';
- } else {
- e = BCExceptionFormatException;
- return "";
- }
- break;
- }
- decoded += decodedChar;
- i++;
- } else {
- decoded += c;
- }
+CFX_ByteString CBC_OnedCode39Reader::DecodeExtended(CFX_ByteString& encoded,
+ int32_t& e) {
+ int32_t length = encoded.GetLength();
+ CFX_ByteString decoded;
+ FX_CHAR c, next;
+ for (int32_t i = 0; i < length; i++) {
+ c = encoded[i];
+ if (c == '+' || c == '$' || c == '%' || c == '/') {
+ next = encoded[i + 1];
+ FX_CHAR decodedChar = '\0';
+ switch (c) {
+ case '+':
+ if (next >= 'A' && next <= 'Z') {
+ decodedChar = (FX_CHAR)(next + 32);
+ } else {
+ e = BCExceptionFormatException;
+ return "";
+ }
+ break;
+ case '$':
+ if (next >= 'A' && next <= 'Z') {
+ decodedChar = (FX_CHAR)(next - 64);
+ } else {
+ e = BCExceptionFormatException;
+ return "";
+ }
+ break;
+ case '%':
+ if (next >= 'A' && next <= 'E') {
+ decodedChar = (FX_CHAR)(next - 38);
+ } else if (next >= 'F' && next <= 'J') {
+ decodedChar = (FX_CHAR)(next - 11);
+ } else if (next >= 'K' && next <= 'O' && next != 'M' && next != 'N') {
+ decodedChar = (FX_CHAR)(next + 16);
+ } else if (next >= 'P' && next <= 'S') {
+ decodedChar = (FX_CHAR)(next + 43);
+ } else if (next == 'U') {
+ decodedChar = (FX_CHAR)0;
+ } else if (next == 'V') {
+ decodedChar = (FX_CHAR)64;
+ } else if (next == 'W') {
+ decodedChar = (FX_CHAR)96;
+ } else if (next == 'T' || next == 'X' || next == 'Y' || next == 'Z') {
+ decodedChar = (FX_CHAR)127;
+ } else {
+ e = BCExceptionFormatException;
+ return "";
+ }
+ break;
+ case '/':
+ if (next >= 'A' && next <= 'O') {
+ decodedChar = (FX_CHAR)(next - 32);
+ } else if (next == 'Z') {
+ decodedChar = ':';
+ } else {
+ e = BCExceptionFormatException;
+ return "";
+ }
+ break;
+ }
+ decoded += decodedChar;
+ i++;
+ } else {
+ decoded += c;
}
- return decoded;
+ }
+ return decoded;
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h b/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h
index fa1e2e2dd6..a7bc63dc83 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedCode39Reader.h
@@ -9,24 +9,27 @@
class CBC_OneDReader;
class CBC_CommonBitArray;
class CBC_OnedCoda39Reader;
-class CBC_OnedCode39Reader : public CBC_OneDReader
-{
-public:
- static const FX_CHAR* ALPHABET_STRING;
- static const FX_CHAR* CHECKSUM_STRING;
- const static int32_t CHARACTER_ENCODINGS[44];
- const static int32_t ASTERISK_ENCODING;
- CBC_OnedCode39Reader();
- CBC_OnedCode39Reader(FX_BOOL usingCheckDigit);
- CBC_OnedCode39Reader(FX_BOOL usingCheckDigit, FX_BOOL extendedMode);
- virtual ~CBC_OnedCode39Reader();
- CFX_ByteString DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e);
-private:
- FX_BOOL m_usingCheckDigit;
- FX_BOOL m_extendedMode;
- CFX_Int32Array *FindAsteriskPattern(CBC_CommonBitArray *row, int32_t &e);
- int32_t ToNarrowWidePattern(CFX_Int32Array *counters);
- FX_CHAR PatternToChar(int32_t pattern, int32_t &e);
- CFX_ByteString DecodeExtended(CFX_ByteString &encoded, int32_t &e);
+class CBC_OnedCode39Reader : public CBC_OneDReader {
+ public:
+ static const FX_CHAR* ALPHABET_STRING;
+ static const FX_CHAR* CHECKSUM_STRING;
+ const static int32_t CHARACTER_ENCODINGS[44];
+ const static int32_t ASTERISK_ENCODING;
+ CBC_OnedCode39Reader();
+ CBC_OnedCode39Reader(FX_BOOL usingCheckDigit);
+ CBC_OnedCode39Reader(FX_BOOL usingCheckDigit, FX_BOOL extendedMode);
+ virtual ~CBC_OnedCode39Reader();
+ CFX_ByteString DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e);
+
+ private:
+ FX_BOOL m_usingCheckDigit;
+ FX_BOOL m_extendedMode;
+ CFX_Int32Array* FindAsteriskPattern(CBC_CommonBitArray* row, int32_t& e);
+ int32_t ToNarrowWidePattern(CFX_Int32Array* counters);
+ FX_CHAR PatternToChar(int32_t pattern, int32_t& e);
+ CFX_ByteString DecodeExtended(CFX_ByteString& encoded, int32_t& e);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp b/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp
index 0d02d1ee86..cd01d93b8a 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.cpp
@@ -28,324 +28,337 @@
#include "BC_OneDimWriter.h"
#include "BC_OnedCode39Reader.h"
#include "BC_OnedCode39Writer.h"
-CBC_OnedCode39Writer::CBC_OnedCode39Writer()
-{
- m_extendedMode = FALSE;
- m_iWideNarrRatio = 3;
+CBC_OnedCode39Writer::CBC_OnedCode39Writer() {
+ m_extendedMode = FALSE;
+ m_iWideNarrRatio = 3;
}
-CBC_OnedCode39Writer::CBC_OnedCode39Writer(FX_BOOL extendedMode)
-{
- m_iWideNarrRatio = 3;
- m_extendedMode = extendedMode;
+CBC_OnedCode39Writer::CBC_OnedCode39Writer(FX_BOOL extendedMode) {
+ m_iWideNarrRatio = 3;
+ m_extendedMode = extendedMode;
}
-CBC_OnedCode39Writer::~CBC_OnedCode39Writer()
-{
-}
-FX_BOOL CBC_OnedCode39Writer::CheckContentValidity(const CFX_WideStringC& contents)
-{
- if (m_extendedMode) {
- return CheckExtendedContentValidity(contents);
- }
- for(int32_t i = 0; i < contents.GetLength(); i++) {
- FX_WCHAR ch = contents.GetAt(i);
- if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') || (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z')
- || ch == (FX_WCHAR)'-' || ch == (FX_WCHAR)'.' || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*'
- || ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/' || ch == (FX_WCHAR)'+' || ch == (FX_WCHAR)'%') {
- continue;
- }
- return FALSE;
+CBC_OnedCode39Writer::~CBC_OnedCode39Writer() {}
+FX_BOOL CBC_OnedCode39Writer::CheckContentValidity(
+ const CFX_WideStringC& contents) {
+ if (m_extendedMode) {
+ return CheckExtendedContentValidity(contents);
+ }
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ FX_WCHAR ch = contents.GetAt(i);
+ if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') ||
+ (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z') || ch == (FX_WCHAR)'-' ||
+ ch == (FX_WCHAR)'.' || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*' ||
+ ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/' || ch == (FX_WCHAR)'+' ||
+ ch == (FX_WCHAR)'%') {
+ continue;
}
- return TRUE;
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CBC_OnedCode39Writer::CheckExtendedContentValidity(const CFX_WideStringC& contents)
-{
- for(int32_t i = 0; i < contents.GetLength(); i++) {
- FX_WCHAR ch = contents.GetAt(i);
- if (ch > 127) {
- return FALSE;
- }
+FX_BOOL CBC_OnedCode39Writer::CheckExtendedContentValidity(
+ const CFX_WideStringC& contents) {
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ FX_WCHAR ch = contents.GetAt(i);
+ if (ch > 127) {
+ return FALSE;
}
- return TRUE;
+ }
+ return TRUE;
}
-CFX_WideString CBC_OnedCode39Writer::FilterContents(const CFX_WideStringC& contents)
-{
- if (m_extendedMode) {
- return FilterExtendedContents(contents);
+CFX_WideString CBC_OnedCode39Writer::FilterContents(
+ const CFX_WideStringC& contents) {
+ if (m_extendedMode) {
+ return FilterExtendedContents(contents);
+ }
+ CFX_WideString filtercontents;
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ FX_WCHAR ch = contents.GetAt(i);
+ if (ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1)) {
+ continue;
}
- CFX_WideString filtercontents;
- for(int32_t i = 0; i < contents.GetLength(); i++) {
- FX_WCHAR ch = contents.GetAt(i);
- if ( ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1) ) {
- continue;
- }
- if(ch > 175) {
- i++;
- continue;
- } else {
- ch = Upper(ch);
- }
- if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') || (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z')
- || ch == (FX_WCHAR)'-' || ch == (FX_WCHAR)'.' || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*'
- || ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/' || ch == (FX_WCHAR)'+' || ch == (FX_WCHAR)'%') {
- filtercontents += ch;
- }
+ if (ch > 175) {
+ i++;
+ continue;
+ } else {
+ ch = Upper(ch);
}
- return filtercontents;
-}
-CFX_WideString CBC_OnedCode39Writer::FilterExtendedContents(const CFX_WideStringC& contents)
-{
- CFX_WideString filtercontents;
- for(int32_t i = 0; i < contents.GetLength(); i++) {
- FX_WCHAR ch = contents.GetAt(i);
- if ( ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1) ) {
- continue;
- }
- if(ch > 175) {
- i++;
- continue;
- }
- if (ch > 127 && ch < 176) {
- continue;
- }
- if (ch == 0) {
- filtercontents += '%';
- filtercontents += 'U';
- } else if(ch >= 1 && ch <= 26) {
- filtercontents += '$';
- filtercontents += (ch + 64);
- } else if (ch >= 27 && ch <= 31) {
- filtercontents += '%';
- filtercontents += (ch + 38);
- } else if (ch >= 33 && ch <= 47 && ch != 45 && ch != 46) {
- filtercontents += '/';
- filtercontents += (ch + 32);
- } else if (ch == 58) {
- filtercontents += '/';
- filtercontents += 'Z';
- } else if (ch >= 59 && ch <= 63) {
- filtercontents += '%';
- filtercontents += ch + 11;
- } else if (ch == 64) {
- filtercontents += '%';
- filtercontents += 'V';
- } else if (ch >= 91 && ch <= 95) {
- filtercontents += '%';
- filtercontents += ch - 16;
- } else if (ch == 96) {
- filtercontents += '%';
- filtercontents += 'W';
- } else if (ch >= 97 && ch <= 122) {
- filtercontents += '+';
- filtercontents += ch - 32;
- } else if (ch >= 123 && ch <= 126) {
- filtercontents += '%';
- filtercontents += ch - 43;
- } else if (ch == 127) {
- filtercontents += '%';
- filtercontents += 'T';
- } else {
- filtercontents += ch;
- }
+ if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') ||
+ (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z') || ch == (FX_WCHAR)'-' ||
+ ch == (FX_WCHAR)'.' || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*' ||
+ ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/' || ch == (FX_WCHAR)'+' ||
+ ch == (FX_WCHAR)'%') {
+ filtercontents += ch;
}
- return filtercontents;
+ }
+ return filtercontents;
}
-CFX_WideString CBC_OnedCode39Writer::RenderTextContents(const CFX_WideStringC& contents)
-{
- if (m_extendedMode) {
- return RenderExtendedTextContents(contents);
+CFX_WideString CBC_OnedCode39Writer::FilterExtendedContents(
+ const CFX_WideStringC& contents) {
+ CFX_WideString filtercontents;
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ FX_WCHAR ch = contents.GetAt(i);
+ if (ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1)) {
+ continue;
}
- CFX_WideString renderContents;
- for(int32_t i = 0; i < contents.GetLength(); i++) {
- FX_WCHAR ch = contents.GetAt(i);
- if ( ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1) ) {
- continue;
- }
- if(ch > 175) {
- i++;
- continue;
- }
- if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') || (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z')
- || (ch >= (FX_WCHAR)'a' && ch <= (FX_WCHAR)'z') || ch == (FX_WCHAR)'-' || ch == (FX_WCHAR)'.'
- || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*' || ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/'
- || ch == (FX_WCHAR)'+' || ch == (FX_WCHAR)'%') {
- renderContents += ch;
- }
+ if (ch > 175) {
+ i++;
+ continue;
}
- return renderContents;
-}
-CFX_WideString CBC_OnedCode39Writer::RenderExtendedTextContents(const CFX_WideStringC& contents)
-{
- CFX_WideString renderContents;
- for(int32_t i = 0; i < contents.GetLength(); i++) {
- FX_WCHAR ch = contents.GetAt(i);
- if ( ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1) ) {
- continue;
- }
- if(ch > 175) {
- i++;
- continue;
- }
- if (ch > 127 && ch < 176) {
- continue;
- }
- renderContents += ch;
+ if (ch > 127 && ch < 176) {
+ continue;
}
- return renderContents;
-}
-FX_BOOL CBC_OnedCode39Writer::SetTextLocation(BC_TEXT_LOC location)
-{
- if ( location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) {
- return FALSE;
+ if (ch == 0) {
+ filtercontents += '%';
+ filtercontents += 'U';
+ } else if (ch >= 1 && ch <= 26) {
+ filtercontents += '$';
+ filtercontents += (ch + 64);
+ } else if (ch >= 27 && ch <= 31) {
+ filtercontents += '%';
+ filtercontents += (ch + 38);
+ } else if (ch >= 33 && ch <= 47 && ch != 45 && ch != 46) {
+ filtercontents += '/';
+ filtercontents += (ch + 32);
+ } else if (ch == 58) {
+ filtercontents += '/';
+ filtercontents += 'Z';
+ } else if (ch >= 59 && ch <= 63) {
+ filtercontents += '%';
+ filtercontents += ch + 11;
+ } else if (ch == 64) {
+ filtercontents += '%';
+ filtercontents += 'V';
+ } else if (ch >= 91 && ch <= 95) {
+ filtercontents += '%';
+ filtercontents += ch - 16;
+ } else if (ch == 96) {
+ filtercontents += '%';
+ filtercontents += 'W';
+ } else if (ch >= 97 && ch <= 122) {
+ filtercontents += '+';
+ filtercontents += ch - 32;
+ } else if (ch >= 123 && ch <= 126) {
+ filtercontents += '%';
+ filtercontents += ch - 43;
+ } else if (ch == 127) {
+ filtercontents += '%';
+ filtercontents += 'T';
+ } else {
+ filtercontents += ch;
}
- m_locTextLoc = location;
- return TRUE;
+ }
+ return filtercontents;
}
-FX_BOOL CBC_OnedCode39Writer::SetWideNarrowRatio(int32_t ratio)
-{
- if ( ratio < 2 || ratio > 3) {
- return FALSE;
+CFX_WideString CBC_OnedCode39Writer::RenderTextContents(
+ const CFX_WideStringC& contents) {
+ if (m_extendedMode) {
+ return RenderExtendedTextContents(contents);
+ }
+ CFX_WideString renderContents;
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ FX_WCHAR ch = contents.GetAt(i);
+ if (ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1)) {
+ continue;
}
- m_iWideNarrRatio = ratio;
- return TRUE;
-}
-uint8_t *CBC_OnedCode39Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e)
-{
- uint8_t *ret = Encode(contents, format, outWidth, outHeight, 0 , e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
-}
-uint8_t *CBC_OnedCode39Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e)
-{
- if(format != BCFORMAT_CODE_39) {
- e = BCExceptionOnlyEncodeCODE_39;
- return NULL;
+ if (ch > 175) {
+ i++;
+ continue;
}
- uint8_t *ret = CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
-}
-void CBC_OnedCode39Writer::ToIntArray(int32_t a, int32_t *toReturn)
-{
- for(int32_t i = 0; i < 9; i++) {
- toReturn[i] = (a & (1 << i) ) == 0 ? 1 : m_iWideNarrRatio;
+ if ((ch >= (FX_WCHAR)'0' && ch <= (FX_WCHAR)'9') ||
+ (ch >= (FX_WCHAR)'A' && ch <= (FX_WCHAR)'Z') ||
+ (ch >= (FX_WCHAR)'a' && ch <= (FX_WCHAR)'z') || ch == (FX_WCHAR)'-' ||
+ ch == (FX_WCHAR)'.' || ch == (FX_WCHAR)' ' || ch == (FX_WCHAR)'*' ||
+ ch == (FX_WCHAR)'$' || ch == (FX_WCHAR)'/' || ch == (FX_WCHAR)'+' ||
+ ch == (FX_WCHAR)'%') {
+ renderContents += ch;
}
+ }
+ return renderContents;
}
-FX_CHAR CBC_OnedCode39Writer::CalcCheckSum(const CFX_ByteString &contents, int32_t &e)
-{
- int32_t length = contents.GetLength();
- if (length > 80) {
- e = BCExceptionContentsLengthShouldBetween1and80;
- return '*';
- }
- int32_t checksum = 0;
- int32_t len = (int32_t)strlen(CBC_OnedCode39Reader::ALPHABET_STRING);
- for(int32_t i = 0; i < contents.GetLength(); i++) {
- int32_t j = 0;
- for (; j < len; j++) {
- if (CBC_OnedCode39Reader::ALPHABET_STRING[j] == contents[i]) {
- if(contents[i] != '*') {
- checksum += j;
- break;
- } else {
- break;
- }
- }
- }
- if (j >= len) {
- e = BCExceptionUnSupportedString;
- return '*';
- }
+CFX_WideString CBC_OnedCode39Writer::RenderExtendedTextContents(
+ const CFX_WideStringC& contents) {
+ CFX_WideString renderContents;
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ FX_WCHAR ch = contents.GetAt(i);
+ if (ch == (FX_WCHAR)'*' && (i == 0 || i == contents.GetLength() - 1)) {
+ continue;
}
- checksum = checksum % 43;
- return CBC_OnedCode39Reader::CHECKSUM_STRING[checksum];
-}
-uint8_t *CBC_OnedCode39Writer::Encode(const CFX_ByteString &contents, int32_t &outlength , int32_t &e)
-{
- FX_CHAR checksum = CalcCheckSum(contents, e);
- if (checksum == '*') {
- return NULL;
+ if (ch > 175) {
+ i++;
+ continue;
}
- int32_t widths[9] = {0};
- int32_t wideStrideNum = 3;
- int32_t narrStrideNum = 9 - wideStrideNum;
- CFX_ByteString encodedContents = contents;
- if ( m_bCalcChecksum ) {
- encodedContents += checksum;
+ if (ch > 127 && ch < 176) {
+ continue;
}
- m_iContentLen = encodedContents.GetLength();
- int32_t codeWidth = (wideStrideNum * m_iWideNarrRatio + narrStrideNum) * 2 + 1 + m_iContentLen;
- int32_t len = (int32_t)strlen(CBC_OnedCode39Reader::ALPHABET_STRING);
- for (int32_t j = 0; j < m_iContentLen; j++) {
- for (int32_t i = 0; i < len; i++) {
- if (CBC_OnedCode39Reader::ALPHABET_STRING[i] == encodedContents[j]) {
- ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[i], widths);
- for(int32_t k = 0; k < 9; k++) {
- codeWidth += widths[k];
- }
- }
+ renderContents += ch;
+ }
+ return renderContents;
+}
+FX_BOOL CBC_OnedCode39Writer::SetTextLocation(BC_TEXT_LOC location) {
+ if (location < BC_TEXT_LOC_NONE || location > BC_TEXT_LOC_BELOWEMBED) {
+ return FALSE;
+ }
+ m_locTextLoc = location;
+ return TRUE;
+}
+FX_BOOL CBC_OnedCode39Writer::SetWideNarrowRatio(int32_t ratio) {
+ if (ratio < 2 || ratio > 3) {
+ return FALSE;
+ }
+ m_iWideNarrRatio = ratio;
+ return TRUE;
+}
+uint8_t* CBC_OnedCode39Writer::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e) {
+ uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
+}
+uint8_t* CBC_OnedCode39Writer::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e) {
+ if (format != BCFORMAT_CODE_39) {
+ e = BCExceptionOnlyEncodeCODE_39;
+ return NULL;
+ }
+ uint8_t* ret =
+ CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
+}
+void CBC_OnedCode39Writer::ToIntArray(int32_t a, int32_t* toReturn) {
+ for (int32_t i = 0; i < 9; i++) {
+ toReturn[i] = (a & (1 << i)) == 0 ? 1 : m_iWideNarrRatio;
+ }
+}
+FX_CHAR CBC_OnedCode39Writer::CalcCheckSum(const CFX_ByteString& contents,
+ int32_t& e) {
+ int32_t length = contents.GetLength();
+ if (length > 80) {
+ e = BCExceptionContentsLengthShouldBetween1and80;
+ return '*';
+ }
+ int32_t checksum = 0;
+ int32_t len = (int32_t)strlen(CBC_OnedCode39Reader::ALPHABET_STRING);
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ int32_t j = 0;
+ for (; j < len; j++) {
+ if (CBC_OnedCode39Reader::ALPHABET_STRING[j] == contents[i]) {
+ if (contents[i] != '*') {
+ checksum += j;
+ break;
+ } else {
+ break;
}
+ }
}
- outlength = codeWidth;
- uint8_t *result = FX_Alloc(uint8_t, codeWidth);
- ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[39], widths);
- int32_t pos = AppendPattern(result, 0, widths, 9, 1 , e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
- int32_t narrowWhite[] = {1};
- pos += AppendPattern(result, pos, narrowWhite, 1, 0, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
+ if (j >= len) {
+ e = BCExceptionUnSupportedString;
+ return '*';
}
- for(int32_t l = m_iContentLen - 1; l >= 0; l--) {
- for (int32_t i = 0; i < len; i++) {
- if (CBC_OnedCode39Reader::ALPHABET_STRING[i] == encodedContents[l]) {
- ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[i], widths);
- pos += AppendPattern(result, pos, widths, 9, 1, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
- }
+ }
+ checksum = checksum % 43;
+ return CBC_OnedCode39Reader::CHECKSUM_STRING[checksum];
+}
+uint8_t* CBC_OnedCode39Writer::Encode(const CFX_ByteString& contents,
+ int32_t& outlength,
+ int32_t& e) {
+ FX_CHAR checksum = CalcCheckSum(contents, e);
+ if (checksum == '*') {
+ return NULL;
+ }
+ int32_t widths[9] = {0};
+ int32_t wideStrideNum = 3;
+ int32_t narrStrideNum = 9 - wideStrideNum;
+ CFX_ByteString encodedContents = contents;
+ if (m_bCalcChecksum) {
+ encodedContents += checksum;
+ }
+ m_iContentLen = encodedContents.GetLength();
+ int32_t codeWidth = (wideStrideNum * m_iWideNarrRatio + narrStrideNum) * 2 +
+ 1 + m_iContentLen;
+ int32_t len = (int32_t)strlen(CBC_OnedCode39Reader::ALPHABET_STRING);
+ for (int32_t j = 0; j < m_iContentLen; j++) {
+ for (int32_t i = 0; i < len; i++) {
+ if (CBC_OnedCode39Reader::ALPHABET_STRING[i] == encodedContents[j]) {
+ ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[i], widths);
+ for (int32_t k = 0; k < 9; k++) {
+ codeWidth += widths[k];
}
- pos += AppendPattern(result, pos, narrowWhite, 1, 0, e);
+ }
+ }
+ }
+ outlength = codeWidth;
+ uint8_t* result = FX_Alloc(uint8_t, codeWidth);
+ ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[39], widths);
+ int32_t pos = AppendPattern(result, 0, widths, 9, 1, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ int32_t narrowWhite[] = {1};
+ pos += AppendPattern(result, pos, narrowWhite, 1, 0, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ for (int32_t l = m_iContentLen - 1; l >= 0; l--) {
+ for (int32_t i = 0; i < len; i++) {
+ if (CBC_OnedCode39Reader::ALPHABET_STRING[i] == encodedContents[l]) {
+ ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[i], widths);
+ pos += AppendPattern(result, pos, widths, 9, 1, e);
if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
+ FX_Free(result);
+ return NULL;
}
+ }
}
- ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[39], widths);
- pos += AppendPattern(result, pos, widths, 9, 1, e);
+ pos += AppendPattern(result, pos, narrowWhite, 1, 0, e);
if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
+ FX_Free(result);
+ return NULL;
}
- for (int32_t i = 0; i < codeWidth / 2; i++) {
- result[i] ^= result[codeWidth - 1 - i];
- result[codeWidth - 1 - i] ^= result[i];
- result[i] ^= result[codeWidth - 1 - i];
- }
- return result;
+ }
+ ToIntArray(CBC_OnedCode39Reader::CHARACTER_ENCODINGS[39], widths);
+ pos += AppendPattern(result, pos, widths, 9, 1, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ for (int32_t i = 0; i < codeWidth / 2; i++) {
+ result[i] ^= result[codeWidth - 1 - i];
+ result[codeWidth - 1 - i] ^= result[i];
+ result[i] ^= result[codeWidth - 1 - i];
+ }
+ return result;
}
-CFX_WideString CBC_OnedCode39Writer::encodedContents(const CFX_WideStringC& contents, int32_t &e)
-{
- CFX_WideString encodedContents = contents;
- if (m_bCalcChecksum && m_bPrintChecksum) {
- CFX_WideString checksumContent = FilterContents(contents);
- CFX_ByteString str = checksumContent.UTF8Encode();
- FX_CHAR checksum;
- checksum = CalcCheckSum(str, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L""));
- str += checksum;
- encodedContents += checksum;
- }
- return encodedContents;
+CFX_WideString CBC_OnedCode39Writer::encodedContents(
+ const CFX_WideStringC& contents,
+ int32_t& e) {
+ CFX_WideString encodedContents = contents;
+ if (m_bCalcChecksum && m_bPrintChecksum) {
+ CFX_WideString checksumContent = FilterContents(contents);
+ CFX_ByteString str = checksumContent.UTF8Encode();
+ FX_CHAR checksum;
+ checksum = CalcCheckSum(str, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, FX_WSTRC(L""));
+ str += checksum;
+ encodedContents += checksum;
+ }
+ return encodedContents;
}
-void CBC_OnedCode39Writer::RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e)
-{
- CFX_WideString encodedCon = encodedContents(contents, e);
- BC_EXCEPTION_CHECK_ReturnVoid(e);
- CBC_OneDimWriter::RenderResult(encodedCon, code, codeLength, isDevice, e);
+void CBC_OnedCode39Writer::RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e) {
+ CFX_WideString encodedCon = encodedContents(contents, e);
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
+ CBC_OneDimWriter::RenderResult(encodedCon, code, codeLength, isDevice, e);
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h b/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h
index 679d4f6ae7..3508ec8d24 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedCode39Writer.h
@@ -9,29 +9,44 @@
enum BC_TEXT_LOC;
class CBC_OneDimWriter;
class CBC_OnedCoda39Writer;
-class CBC_OnedCode39Writer : public CBC_OneDimWriter
-{
-public:
- CBC_OnedCode39Writer();
- CBC_OnedCode39Writer(FX_BOOL extendedMode);
- virtual ~CBC_OnedCode39Writer();
- uint8_t *Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e);
- uint8_t *Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e);
- uint8_t *Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e);
- void RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e);
- CFX_WideString encodedContents(const CFX_WideStringC& contents, int32_t &e);
- FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
- FX_BOOL CheckExtendedContentValidity(const CFX_WideStringC& contents);
- CFX_WideString FilterContents(const CFX_WideStringC& contents);
- CFX_WideString FilterExtendedContents(const CFX_WideStringC& contents);
- CFX_WideString RenderTextContents(const CFX_WideStringC& contents);
- CFX_WideString RenderExtendedTextContents(const CFX_WideStringC& contents);
- FX_BOOL SetTextLocation(BC_TEXT_LOC loction);
- FX_BOOL SetWideNarrowRatio(int32_t ratio);
-private:
- void ToIntArray(int32_t a, int32_t *toReturn);
- FX_CHAR CalcCheckSum(const CFX_ByteString &contents, int32_t &e);
- int32_t m_iWideNarrRatio;
- FX_BOOL m_extendedMode;
+class CBC_OnedCode39Writer : public CBC_OneDimWriter {
+ public:
+ CBC_OnedCode39Writer();
+ CBC_OnedCode39Writer(FX_BOOL extendedMode);
+ virtual ~CBC_OnedCode39Writer();
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e);
+ void RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e);
+ CFX_WideString encodedContents(const CFX_WideStringC& contents, int32_t& e);
+ FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
+ FX_BOOL CheckExtendedContentValidity(const CFX_WideStringC& contents);
+ CFX_WideString FilterContents(const CFX_WideStringC& contents);
+ CFX_WideString FilterExtendedContents(const CFX_WideStringC& contents);
+ CFX_WideString RenderTextContents(const CFX_WideStringC& contents);
+ CFX_WideString RenderExtendedTextContents(const CFX_WideStringC& contents);
+ FX_BOOL SetTextLocation(BC_TEXT_LOC loction);
+ FX_BOOL SetWideNarrowRatio(int32_t ratio);
+
+ private:
+ void ToIntArray(int32_t a, int32_t* toReturn);
+ FX_CHAR CalcCheckSum(const CFX_ByteString& contents, int32_t& e);
+ int32_t m_iWideNarrRatio;
+ FX_BOOL m_extendedMode;
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp b/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp
index 288aace861..74c4cd9826 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.cpp
@@ -27,68 +27,71 @@
#include "BC_OneDimReader.h"
#include "BC_OnedEAN13Reader.h"
const int32_t CBC_OnedEAN13Reader::FIRST_DIGIT_ENCODINGS[10] = {
- 0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A
-};
-CBC_OnedEAN13Reader::CBC_OnedEAN13Reader()
-{
-}
-CBC_OnedEAN13Reader::~CBC_OnedEAN13Reader()
-{
-}
-void CBC_OnedEAN13Reader::DetermineFirstDigit(CFX_ByteString &result, int32_t lgPatternFound, int32_t &e)
-{
- for (int32_t d = 0; d < 10; d++) {
- if (lgPatternFound == FIRST_DIGIT_ENCODINGS[d]) {
- result.Insert(0, (FX_CHAR) ('0' + d));
- return;
- }
+ 0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A};
+CBC_OnedEAN13Reader::CBC_OnedEAN13Reader() {}
+CBC_OnedEAN13Reader::~CBC_OnedEAN13Reader() {}
+void CBC_OnedEAN13Reader::DetermineFirstDigit(CFX_ByteString& result,
+ int32_t lgPatternFound,
+ int32_t& e) {
+ for (int32_t d = 0; d < 10; d++) {
+ if (lgPatternFound == FIRST_DIGIT_ENCODINGS[d]) {
+ result.Insert(0, (FX_CHAR)('0' + d));
+ return;
}
- e = BCExceptionNotFound;
- BC_EXCEPTION_CHECK_ReturnVoid(e);
+ }
+ e = BCExceptionNotFound;
+ BC_EXCEPTION_CHECK_ReturnVoid(e);
}
-int32_t CBC_OnedEAN13Reader::DecodeMiddle(CBC_CommonBitArray *row, CFX_Int32Array *startRange, CFX_ByteString &resultString, int32_t &e)
-{
- CFX_Int32Array counters;
- counters.Add(0);
- counters.Add(0);
- counters.Add(0);
- counters.Add(0);
- int32_t end = row->GetSize();
- int32_t rowOffset = (*startRange)[1];
- int32_t lgPatternFound = 0;
- for (int32_t x = 0; x < 6 && rowOffset < end; x++) {
- int32_t bestMatch = DecodeDigit(row, &counters, rowOffset, &(CBC_OneDimReader::L_AND_G_PATTERNS[0][0]), 20, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- resultString += (FX_CHAR) ('0' + bestMatch % 10);
- for (int32_t i = 0; i < counters.GetSize(); i++) {
- rowOffset += counters[i];
- }
- if (bestMatch >= 10) {
- lgPatternFound |= 1 << (5 - x);
- }
- }
- DetermineFirstDigit(resultString, lgPatternFound, e);
+int32_t CBC_OnedEAN13Reader::DecodeMiddle(CBC_CommonBitArray* row,
+ CFX_Int32Array* startRange,
+ CFX_ByteString& resultString,
+ int32_t& e) {
+ CFX_Int32Array counters;
+ counters.Add(0);
+ counters.Add(0);
+ counters.Add(0);
+ counters.Add(0);
+ int32_t end = row->GetSize();
+ int32_t rowOffset = (*startRange)[1];
+ int32_t lgPatternFound = 0;
+ for (int32_t x = 0; x < 6 && rowOffset < end; x++) {
+ int32_t bestMatch =
+ DecodeDigit(row, &counters, rowOffset,
+ &(CBC_OneDimReader::L_AND_G_PATTERNS[0][0]), 20, e);
BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- CFX_Int32Array result;
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[0]);
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[1]);
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[2]);
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[3]);
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[4]);
- CFX_Int32Array *middleRange = FindGuardPattern(row, rowOffset, TRUE, &result, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- rowOffset = (*middleRange)[1];
- if(middleRange != NULL) {
- delete middleRange;
- middleRange = NULL;
+ resultString += (FX_CHAR)('0' + bestMatch % 10);
+ for (int32_t i = 0; i < counters.GetSize(); i++) {
+ rowOffset += counters[i];
+ }
+ if (bestMatch >= 10) {
+ lgPatternFound |= 1 << (5 - x);
}
- for (int32_t Y = 0; Y < 6 && rowOffset < end; Y++) {
- int32_t bestMatch = DecodeDigit(row, &counters, rowOffset, &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- resultString += (FX_CHAR) ('0' + bestMatch);
- for (int32_t k = 0; k < counters.GetSize(); k++) {
- rowOffset += counters[k];
- }
+ }
+ DetermineFirstDigit(resultString, lgPatternFound, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ CFX_Int32Array result;
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[0]);
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[1]);
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[2]);
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[3]);
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[4]);
+ CFX_Int32Array* middleRange =
+ FindGuardPattern(row, rowOffset, TRUE, &result, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ rowOffset = (*middleRange)[1];
+ if (middleRange != NULL) {
+ delete middleRange;
+ middleRange = NULL;
+ }
+ for (int32_t Y = 0; Y < 6 && rowOffset < end; Y++) {
+ int32_t bestMatch =
+ DecodeDigit(row, &counters, rowOffset,
+ &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ resultString += (FX_CHAR)('0' + bestMatch);
+ for (int32_t k = 0; k < counters.GetSize(); k++) {
+ rowOffset += counters[k];
}
- return rowOffset;
+ }
+ return rowOffset;
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h b/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h
index 7c31fd4f20..6240a68893 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedEAN13Reader.h
@@ -9,16 +9,22 @@
class CBC_OneDimReader;
class CBC_CommonBitArray;
class CBC_OnedEAN13Reader;
-class CBC_OnedEAN13Reader : public CBC_OneDimReader
-{
-public:
- const static int32_t FIRST_DIGIT_ENCODINGS[10];
- CBC_OnedEAN13Reader();
- virtual ~CBC_OnedEAN13Reader();
-private:
- void DetermineFirstDigit(CFX_ByteString &result, int32_t lgPatternFound, int32_t &e);
-protected:
- int32_t DecodeMiddle(CBC_CommonBitArray *row, CFX_Int32Array *startRange, CFX_ByteString &resultString, int32_t &e);
- friend class CBC_OnedUPCAReader;
+class CBC_OnedEAN13Reader : public CBC_OneDimReader {
+ public:
+ const static int32_t FIRST_DIGIT_ENCODINGS[10];
+ CBC_OnedEAN13Reader();
+ virtual ~CBC_OnedEAN13Reader();
+
+ private:
+ void DetermineFirstDigit(CFX_ByteString& result,
+ int32_t lgPatternFound,
+ int32_t& e);
+
+ protected:
+ int32_t DecodeMiddle(CBC_CommonBitArray* row,
+ CFX_Int32Array* startRange,
+ CFX_ByteString& resultString,
+ int32_t& e);
+ friend class CBC_OnedUPCAReader;
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index 7753d1eabb..d4f90a570f 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -28,267 +28,280 @@
#include "BC_OneDimWriter.h"
#include "BC_OnedEAN13Reader.h"
#include "BC_OnedEAN13Writer.h"
-CBC_OnedEAN13Writer::CBC_OnedEAN13Writer()
-{
- m_bLeftPadding = TRUE;
- m_codeWidth = 3 +
- (7 * 6) +
- 5 +
- (7 * 6) +
- 3;
+CBC_OnedEAN13Writer::CBC_OnedEAN13Writer() {
+ m_bLeftPadding = TRUE;
+ m_codeWidth = 3 + (7 * 6) + 5 + (7 * 6) + 3;
}
-CBC_OnedEAN13Writer::~CBC_OnedEAN13Writer()
-{
-}
-FX_BOOL CBC_OnedEAN13Writer::CheckContentValidity(const CFX_WideStringC& contents)
-{
- for (int32_t i = 0; i < contents.GetLength(); i++) {
- if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') {
- continue;
- } else {
- return FALSE;
- }
+CBC_OnedEAN13Writer::~CBC_OnedEAN13Writer() {}
+FX_BOOL CBC_OnedEAN13Writer::CheckContentValidity(
+ const CFX_WideStringC& contents) {
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') {
+ continue;
+ } else {
+ return FALSE;
}
- return TRUE;
+ }
+ return TRUE;
}
-CFX_WideString CBC_OnedEAN13Writer::FilterContents(const CFX_WideStringC& contents)
-{
- CFX_WideString filtercontents;
- FX_WCHAR ch;
- for (int32_t i = 0; i < contents.GetLength(); i++) {
- ch = contents.GetAt(i);
- if(ch > 175) {
- i++;
- continue;
- }
- if (ch >= '0' && ch <= '9') {
- filtercontents += ch;
- }
+CFX_WideString CBC_OnedEAN13Writer::FilterContents(
+ const CFX_WideStringC& contents) {
+ CFX_WideString filtercontents;
+ FX_WCHAR ch;
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ ch = contents.GetAt(i);
+ if (ch > 175) {
+ i++;
+ continue;
+ }
+ if (ch >= '0' && ch <= '9') {
+ filtercontents += ch;
}
- return filtercontents;
+ }
+ return filtercontents;
}
-int32_t CBC_OnedEAN13Writer::CalcChecksum(const CFX_ByteString &contents)
-{
- int32_t odd = 0;
- int32_t even = 0;
- int32_t j = 1;
- for(int32_t i = contents.GetLength() - 1; i >= 0; i--) {
- if(j % 2) {
- odd += FXSYS_atoi(contents.Mid(i, 1));
- } else {
- even += FXSYS_atoi(contents.Mid(i, 1));
- }
- j++;
+int32_t CBC_OnedEAN13Writer::CalcChecksum(const CFX_ByteString& contents) {
+ int32_t odd = 0;
+ int32_t even = 0;
+ int32_t j = 1;
+ for (int32_t i = contents.GetLength() - 1; i >= 0; i--) {
+ if (j % 2) {
+ odd += FXSYS_atoi(contents.Mid(i, 1));
+ } else {
+ even += FXSYS_atoi(contents.Mid(i, 1));
}
- int32_t checksum = (odd * 3 + even) % 10;
- checksum = (10 - checksum) % 10;
- return (checksum);
+ j++;
+ }
+ int32_t checksum = (odd * 3 + even) % 10;
+ checksum = (10 - checksum) % 10;
+ return (checksum);
}
-uint8_t *CBC_OnedEAN13Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e)
-{
- uint8_t *ret = Encode(contents, format, outWidth, outHeight, 0, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedEAN13Writer::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e) {
+ uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t *CBC_OnedEAN13Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e)
-{
- if(format != BCFORMAT_EAN_13) {
- e = BCExceptionOnlyEncodeEAN_13;
- }
- uint8_t *ret = CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedEAN13Writer::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e) {
+ if (format != BCFORMAT_EAN_13) {
+ e = BCExceptionOnlyEncodeEAN_13;
+ }
+ uint8_t* ret =
+ CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t *CBC_OnedEAN13Writer::Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e)
-{
- if (contents.GetLength() != 13) {
- e = BCExceptionDigitLengthShould13;
- return NULL;
+uint8_t* CBC_OnedEAN13Writer::Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e) {
+ if (contents.GetLength() != 13) {
+ e = BCExceptionDigitLengthShould13;
+ return NULL;
+ }
+ m_iDataLenth = 13;
+ int32_t firstDigit = FXSYS_atoi(contents.Mid(0, 1));
+ int32_t parities = CBC_OnedEAN13Reader::FIRST_DIGIT_ENCODINGS[firstDigit];
+ outLength = m_codeWidth;
+ uint8_t* result = FX_Alloc(uint8_t, m_codeWidth);
+ int32_t pos = 0;
+ pos +=
+ AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ int32_t i = 0;
+ for (i = 1; i <= 6; i++) {
+ int32_t digit = FXSYS_atoi(contents.Mid(i, 1));
+ if ((parities >> (6 - i) & 1) == 1) {
+ digit += 10;
}
- m_iDataLenth = 13;
- int32_t firstDigit = FXSYS_atoi(contents.Mid(0, 1));
- int32_t parities = CBC_OnedEAN13Reader::FIRST_DIGIT_ENCODINGS[firstDigit];
- outLength = m_codeWidth;
- uint8_t *result = FX_Alloc(uint8_t, m_codeWidth);
- int32_t pos = 0;
- pos += AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e);
+ pos += AppendPattern(result, pos, CBC_OneDimReader::L_AND_G_PATTERNS[digit],
+ 4, 0, e);
if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
- int32_t i = 0;
- for ( i = 1; i <= 6; i++) {
- int32_t digit = FXSYS_atoi(contents.Mid(i, 1));
- if ((parities >> (6 - i) & 1) == 1) {
- digit += 10;
- }
- pos += AppendPattern(result, pos, CBC_OneDimReader::L_AND_G_PATTERNS[digit], 4, 0, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
- }
- pos += AppendPattern(result, pos, CBC_OneDimReader::MIDDLE_PATTERN, 5, 0, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
- for (i = 7; i <= 12; i++) {
- int32_t digit = FXSYS_atoi(contents.Mid(i, 1));
- pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 1, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
+ FX_Free(result);
+ return NULL;
}
- pos += AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e);
+ }
+ pos += AppendPattern(result, pos, CBC_OneDimReader::MIDDLE_PATTERN, 5, 0, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ for (i = 7; i <= 12; i++) {
+ int32_t digit = FXSYS_atoi(contents.Mid(i, 1));
+ pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 1,
+ e);
if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
+ FX_Free(result);
+ return NULL;
}
- return result;
+ }
+ pos +=
+ AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ return result;
}
-void CBC_OnedEAN13Writer::ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice* device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e)
-{
- if (device == NULL && pOutBitmap == NULL) {
- e = BCExceptionIllegalArgument;
- return;
+void CBC_OnedEAN13Writer::ShowChars(const CFX_WideStringC& contents,
+ CFX_DIBitmap* pOutBitmap,
+ CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ int32_t barWidth,
+ int32_t multiple,
+ int32_t& e) {
+ if (device == NULL && pOutBitmap == NULL) {
+ e = BCExceptionIllegalArgument;
+ return;
+ }
+ int32_t leftPadding = 7 * multiple;
+ int32_t leftPosition = 3 * multiple + leftPadding;
+ CFX_ByteString str = FX_UTF8Encode(contents);
+ int32_t iLen = str.GetLength();
+ FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen);
+ if (!pCharPos) {
+ return;
+ }
+ FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen);
+ CFX_FxgeDevice geBitmap;
+ if (pOutBitmap != NULL) {
+ geBitmap.Attach(pOutBitmap);
+ }
+ int32_t iFontSize = (int32_t)fabs(m_fFontSize);
+ int32_t iTextHeight = iFontSize + 1;
+ CFX_ByteString tempStr = str.Mid(1, 6);
+ int32_t strWidth = multiple * 42;
+ if (pOutBitmap == NULL) {
+ CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
+ CFX_FloatRect rect(
+ (FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
+ matr.Concat(*matrix);
+ matr.TransformRect(rect);
+ FX_RECT re = rect.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ CFX_FloatRect rect1(
+ (FX_FLOAT)(leftPosition + 47 * multiple),
+ (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)(leftPosition + 47 * multiple + strWidth - 0.5),
+ (FX_FLOAT)m_Height);
+ CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
+ matr1.Concat(*matrix);
+ matr1.TransformRect(rect1);
+ re = rect1.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ int32_t strWidth1 = multiple * 7;
+ CFX_Matrix matr2(m_outputHScale, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
+ CFX_FloatRect rect2(0.0f, (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)strWidth1 - 0.5f, (FX_FLOAT)m_Height);
+ matr2.Concat(*matrix);
+ matr2.TransformRect(rect2);
+ re = rect2.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ }
+ FX_FLOAT blank = 0.0;
+ FX_FLOAT charsWidth = 0;
+ iLen = tempStr.GetLength();
+ if (pOutBitmap == NULL) {
+ strWidth = (int32_t)(strWidth * m_outputHScale);
+ }
+ CalcTextInfo(tempStr, pCharPos + 1, m_pFont, (FX_FLOAT)strWidth, iFontSize,
+ blank);
+ CFX_AffineMatrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
+ CFX_FxgeDevice ge;
+ if (pOutBitmap != NULL) {
+ ge.Create(strWidth, iTextHeight, FXDIB_Argb);
+ FX_RECT rect(0, 0, strWidth, iTextHeight);
+ ge.FillRect(&rect, m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos + 1, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0, (FX_FLOAT)leftPosition * m_outputHScale,
+ (FX_FLOAT)(m_Height - iTextHeight) + iFontSize);
+ if (matrix != NULL) {
+ affine_matrix1.Concat(*matrix);
}
- int32_t leftPadding = 7 * multiple;
- int32_t leftPosition = 3 * multiple + leftPadding;
- CFX_ByteString str = FX_UTF8Encode(contents);
- int32_t iLen = str.GetLength();
- FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen);
- if (!pCharPos) {
- return;
+ device->DrawNormalText(
+ iLen, pCharPos + 1, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ tempStr = str.Mid(7, 6);
+ iLen = tempStr.GetLength();
+ charsWidth = 0.0f;
+ CalcTextInfo(tempStr, pCharPos + 7, m_pFont, (FX_FLOAT)strWidth, iFontSize,
+ blank);
+ if (pOutBitmap != NULL) {
+ FX_RECT rect1(0, 0, strWidth, iTextHeight);
+ ge.FillRect(&rect1, m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos + 7, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 47 * multiple,
+ m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0,
+ (FX_FLOAT)(leftPosition + 47 * multiple) * m_outputHScale,
+ (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
+ if (matrix != NULL) {
+ affine_matrix1.Concat(*matrix);
}
- FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen);
- CFX_FxgeDevice geBitmap;
- if (pOutBitmap != NULL) {
- geBitmap.Attach(pOutBitmap);
- }
- int32_t iFontSize = (int32_t)fabs(m_fFontSize);
- int32_t iTextHeight = iFontSize + 1;
- CFX_ByteString tempStr = str.Mid(1, 6);
- int32_t strWidth = multiple * 42;
- if (pOutBitmap == NULL) {
- CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
- CFX_FloatRect rect((FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
- matr.Concat(*matrix);
- matr.TransformRect(rect);
- FX_RECT re = rect.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- CFX_FloatRect rect1((FX_FLOAT)(leftPosition + 47 * multiple), (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)(leftPosition + 47 * multiple + strWidth - 0.5), (FX_FLOAT)m_Height);
- CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
- matr1.Concat(*matrix);
- matr1.TransformRect(rect1);
- re = rect1.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- int32_t strWidth1 = multiple * 7;
- CFX_Matrix matr2(m_outputHScale, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
- CFX_FloatRect rect2(0.0f, (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)strWidth1 - 0.5f, (FX_FLOAT)m_Height);
- matr2.Concat(*matrix);
- matr2.TransformRect(rect2);
- re = rect2.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- }
- FX_FLOAT blank = 0.0;
- FX_FLOAT charsWidth = 0;
- iLen = tempStr.GetLength();
- if (pOutBitmap == NULL) {
- strWidth = (int32_t)(strWidth * m_outputHScale);
- }
- CalcTextInfo(tempStr, pCharPos + 1, m_pFont, (FX_FLOAT)strWidth, iFontSize, blank);
- CFX_AffineMatrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
- CFX_FxgeDevice ge;
- if (pOutBitmap != NULL) {
- ge.Create(strWidth, iTextHeight, FXDIB_Argb);
- FX_RECT rect(0, 0, strWidth, iTextHeight);
- ge.FillRect(&rect, m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos + 1,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)leftPosition * m_outputHScale, (FX_FLOAT)(m_Height - iTextHeight) + iFontSize);
- if (matrix != NULL) {
- affine_matrix1.Concat(*matrix);
- }
- device->DrawNormalText(iLen,
- pCharPos + 1,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
- }
- tempStr = str.Mid(7, 6);
- iLen = tempStr.GetLength();
- charsWidth = 0.0f;
- CalcTextInfo(tempStr, pCharPos + 7, m_pFont, (FX_FLOAT)strWidth, iFontSize, blank);
- if(pOutBitmap != NULL) {
- FX_RECT rect1(0, 0, strWidth, iTextHeight);
- ge.FillRect(&rect1, m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos + 7,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 47 * multiple, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)(leftPosition + 47 * multiple) * m_outputHScale, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
- if (matrix != NULL) {
- affine_matrix1.Concat(*matrix);
- }
- device->DrawNormalText(iLen,
- pCharPos + 7,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
- }
- tempStr = str.Mid(0, 1);
- iLen = tempStr.GetLength();
- strWidth = multiple * 7;
- if (pOutBitmap == NULL) {
- strWidth = (int32_t)(strWidth * m_outputHScale);
- }
- CalcTextInfo(tempStr, pCharPos, m_pFont, (FX_FLOAT)strWidth, iFontSize, blank);
- if(pOutBitmap != NULL) {
- delete ge.GetBitmap();
- ge.Create(strWidth, iTextHeight, FXDIB_Argb);
- ge.GetBitmap()->Clear(m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), 0, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
- if (matrix != NULL) {
- affine_matrix1.Concat(*matrix);
- }
- device->DrawNormalText(iLen,
- pCharPos,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
+ device->DrawNormalText(
+ iLen, pCharPos + 7, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ tempStr = str.Mid(0, 1);
+ iLen = tempStr.GetLength();
+ strWidth = multiple * 7;
+ if (pOutBitmap == NULL) {
+ strWidth = (int32_t)(strWidth * m_outputHScale);
+ }
+ CalcTextInfo(tempStr, pCharPos, m_pFont, (FX_FLOAT)strWidth, iFontSize,
+ blank);
+ if (pOutBitmap != NULL) {
+ delete ge.GetBitmap();
+ ge.Create(strWidth, iTextHeight, FXDIB_Argb);
+ ge.GetBitmap()->Clear(m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), 0, m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0, 0.0,
+ (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
+ if (matrix != NULL) {
+ affine_matrix1.Concat(*matrix);
}
- FX_Free(pCharPos);
+ device->DrawNormalText(
+ iLen, pCharPos, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ FX_Free(pCharPos);
}
-void CBC_OnedEAN13Writer::RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e)
-{
- CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e);
+void CBC_OnedEAN13Writer::RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e) {
+ CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e);
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h b/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h
index 357db75ead..110862dc6f 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedEAN13Writer.h
@@ -8,24 +8,44 @@
#define _BC_ONEDEAN13WRITER_H_
class CBC_OneDimWriter;
class CBC_OnedEAN13Writer;
-class CBC_OnedEAN13Writer : public CBC_OneDimWriter
-{
-private:
- int32_t m_codeWidth;
-public:
- CBC_OnedEAN13Writer();
- virtual ~CBC_OnedEAN13Writer();
+class CBC_OnedEAN13Writer : public CBC_OneDimWriter {
+ private:
+ int32_t m_codeWidth;
- uint8_t* Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t &e);
- uint8_t* Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e);
- uint8_t* Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e);
- void RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e);
- FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
- CFX_WideString FilterContents(const CFX_WideStringC& contents);
- int32_t CalcChecksum(const CFX_ByteString &contents);
-protected:
- void ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice* device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e);
+ public:
+ CBC_OnedEAN13Writer();
+ virtual ~CBC_OnedEAN13Writer();
+
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e);
+ void RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e);
+ FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
+ CFX_WideString FilterContents(const CFX_WideStringC& contents);
+ int32_t CalcChecksum(const CFX_ByteString& contents);
+
+ protected:
+ void ShowChars(const CFX_WideStringC& contents,
+ CFX_DIBitmap* pOutBitmap,
+ CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ int32_t barWidth,
+ int32_t multiple,
+ int32_t& e);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp b/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp
index 4b5de72939..d860bbe9e7 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.cpp
@@ -26,56 +26,59 @@
#include "BC_OneDReader.h"
#include "BC_OneDimReader.h"
#include "BC_OnedEAN8Reader.h"
-CBC_OnedEAN8Reader::CBC_OnedEAN8Reader()
-{
-}
-CBC_OnedEAN8Reader::~CBC_OnedEAN8Reader()
-{
-}
-int32_t CBC_OnedEAN8Reader::DecodeMiddle(CBC_CommonBitArray *row, CFX_Int32Array *startRange, CFX_ByteString &resultResult, int32_t &e)
-{
- CFX_Int32Array counters;
- counters.Add(0);
- counters.Add(0);
- counters.Add(0);
- counters.Add(0);
- int32_t end = row->GetSize();
- int32_t rowOffset = (*startRange)[1];
- int32_t rowOffsetLeft = rowOffset;
- for (int32_t x = 0; x < 4 && rowOffset < end; x++) {
- int32_t bestMatch = DecodeDigit(row, &counters, rowOffset, &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- resultResult += (FX_CHAR) ('0' + bestMatch);
- for (int32_t i = 0; i < counters.GetSize(); i++) {
- rowOffset += counters[i];
- }
- }
- int32_t RowOffsetLen = (rowOffset - rowOffsetLeft) / 4;
- CFX_Int32Array result;
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[0]);
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[1]);
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[2]);
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[3]);
- result.Add(CBC_OneDimReader::MIDDLE_PATTERN[4]);
- CFX_Int32Array *middleRange = FindGuardPattern(row, rowOffset, TRUE, &result, e);
+CBC_OnedEAN8Reader::CBC_OnedEAN8Reader() {}
+CBC_OnedEAN8Reader::~CBC_OnedEAN8Reader() {}
+int32_t CBC_OnedEAN8Reader::DecodeMiddle(CBC_CommonBitArray* row,
+ CFX_Int32Array* startRange,
+ CFX_ByteString& resultResult,
+ int32_t& e) {
+ CFX_Int32Array counters;
+ counters.Add(0);
+ counters.Add(0);
+ counters.Add(0);
+ counters.Add(0);
+ int32_t end = row->GetSize();
+ int32_t rowOffset = (*startRange)[1];
+ int32_t rowOffsetLeft = rowOffset;
+ for (int32_t x = 0; x < 4 && rowOffset < end; x++) {
+ int32_t bestMatch =
+ DecodeDigit(row, &counters, rowOffset,
+ &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e);
BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- int32_t rowOffsetMid = rowOffset;
- rowOffset = (*middleRange)[1];
- if((rowOffset - rowOffsetMid) > RowOffsetLen) {
- e = BCExceptionNotFound;
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ resultResult += (FX_CHAR)('0' + bestMatch);
+ for (int32_t i = 0; i < counters.GetSize(); i++) {
+ rowOffset += counters[i];
}
- if(middleRange != NULL) {
- delete middleRange;
- middleRange = NULL;
- }
- for (int32_t y = 0; y < 4 && rowOffset < end; y++) {
- int32_t bestMatch = DecodeDigit(row, & counters, rowOffset, &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- resultResult += (FX_CHAR) ('0' + bestMatch);
- for (int32_t i = 0; i < counters.GetSize(); i++) {
- rowOffset += counters[i];
- }
+ }
+ int32_t RowOffsetLen = (rowOffset - rowOffsetLeft) / 4;
+ CFX_Int32Array result;
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[0]);
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[1]);
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[2]);
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[3]);
+ result.Add(CBC_OneDimReader::MIDDLE_PATTERN[4]);
+ CFX_Int32Array* middleRange =
+ FindGuardPattern(row, rowOffset, TRUE, &result, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ int32_t rowOffsetMid = rowOffset;
+ rowOffset = (*middleRange)[1];
+ if ((rowOffset - rowOffsetMid) > RowOffsetLen) {
+ e = BCExceptionNotFound;
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ }
+ if (middleRange != NULL) {
+ delete middleRange;
+ middleRange = NULL;
+ }
+ for (int32_t y = 0; y < 4 && rowOffset < end; y++) {
+ int32_t bestMatch =
+ DecodeDigit(row, &counters, rowOffset,
+ &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ resultResult += (FX_CHAR)('0' + bestMatch);
+ for (int32_t i = 0; i < counters.GetSize(); i++) {
+ rowOffset += counters[i];
}
- return rowOffset;
+ }
+ return rowOffset;
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h b/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h
index f2aa93c8ea..66d6109cec 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedEAN8Reader.h
@@ -9,12 +9,15 @@
class CBC_OneDimReader;
class CBC_CommonBitArray;
class CBC_OnedEAN8Reader;
-class CBC_OnedEAN8Reader : public CBC_OneDimReader
-{
-public:
- CBC_OnedEAN8Reader();
- virtual ~CBC_OnedEAN8Reader();
-protected:
- int32_t DecodeMiddle(CBC_CommonBitArray*, CFX_Int32Array *startRange, CFX_ByteString &result, int32_t &e);
+class CBC_OnedEAN8Reader : public CBC_OneDimReader {
+ public:
+ CBC_OnedEAN8Reader();
+ virtual ~CBC_OnedEAN8Reader();
+
+ protected:
+ int32_t DecodeMiddle(CBC_CommonBitArray*,
+ CFX_Int32Array* startRange,
+ CFX_ByteString& result,
+ int32_t& e);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index a247a0670b..0c551ccc6b 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -28,234 +28,246 @@
#include "BC_OneDimWriter.h"
#include "BC_OneDimReader.h"
#include "BC_OnedEAN8Writer.h"
-CBC_OnedEAN8Writer::CBC_OnedEAN8Writer()
-{
- m_iDataLenth = 8;
- m_codeWidth = 3 +
- (7 * 4) +
- 5 +
- (7 * 4) +
- 3;
+CBC_OnedEAN8Writer::CBC_OnedEAN8Writer() {
+ m_iDataLenth = 8;
+ m_codeWidth = 3 + (7 * 4) + 5 + (7 * 4) + 3;
}
-CBC_OnedEAN8Writer::~CBC_OnedEAN8Writer()
-{
+CBC_OnedEAN8Writer::~CBC_OnedEAN8Writer() {}
+void CBC_OnedEAN8Writer::SetDataLength(int32_t length) {
+ m_iDataLenth = 8;
}
-void CBC_OnedEAN8Writer::SetDataLength(int32_t length)
-{
- m_iDataLenth = 8;
+FX_BOOL CBC_OnedEAN8Writer::SetTextLocation(BC_TEXT_LOC location) {
+ if (location == BC_TEXT_LOC_BELOWEMBED) {
+ m_locTextLoc = location;
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CBC_OnedEAN8Writer::SetTextLocation(BC_TEXT_LOC location)
-{
- if ( location == BC_TEXT_LOC_BELOWEMBED) {
- m_locTextLoc = location;
- return TRUE;
+FX_BOOL CBC_OnedEAN8Writer::CheckContentValidity(
+ const CFX_WideStringC& contents) {
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') {
+ continue;
+ } else {
+ return FALSE;
}
- return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CBC_OnedEAN8Writer::CheckContentValidity(const CFX_WideStringC& contents)
-{
- for (int32_t i = 0; i < contents.GetLength(); i++) {
- if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') {
- continue;
- } else {
- return FALSE;
- }
+CFX_WideString CBC_OnedEAN8Writer::FilterContents(
+ const CFX_WideStringC& contents) {
+ CFX_WideString filtercontents;
+ FX_WCHAR ch;
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ ch = contents.GetAt(i);
+ if (ch > 175) {
+ i++;
+ continue;
}
- return TRUE;
-}
-CFX_WideString CBC_OnedEAN8Writer::FilterContents(const CFX_WideStringC& contents)
-{
- CFX_WideString filtercontents;
- FX_WCHAR ch;
- for (int32_t i = 0; i < contents.GetLength(); i++) {
- ch = contents.GetAt(i);
- if(ch > 175) {
- i++;
- continue;
- }
- if (ch >= '0' && ch <= '9') {
- filtercontents += ch;
- }
+ if (ch >= '0' && ch <= '9') {
+ filtercontents += ch;
}
- return filtercontents;
+ }
+ return filtercontents;
}
-int32_t CBC_OnedEAN8Writer::CalcChecksum(const CFX_ByteString &contents)
-{
- int32_t odd = 0;
- int32_t even = 0;
- int32_t j = 1;
- for(int32_t i = contents.GetLength() - 1; i >= 0; i--) {
- if(j % 2) {
- odd += FXSYS_atoi(contents.Mid(i, 1));
- } else {
- even += FXSYS_atoi(contents.Mid(i, 1));
- }
- j++;
+int32_t CBC_OnedEAN8Writer::CalcChecksum(const CFX_ByteString& contents) {
+ int32_t odd = 0;
+ int32_t even = 0;
+ int32_t j = 1;
+ for (int32_t i = contents.GetLength() - 1; i >= 0; i--) {
+ if (j % 2) {
+ odd += FXSYS_atoi(contents.Mid(i, 1));
+ } else {
+ even += FXSYS_atoi(contents.Mid(i, 1));
}
- int32_t checksum = (odd * 3 + even) % 10;
- checksum = (10 - checksum) % 10;
- return (checksum);
+ j++;
+ }
+ int32_t checksum = (odd * 3 + even) % 10;
+ checksum = (10 - checksum) % 10;
+ return (checksum);
}
-uint8_t *CBC_OnedEAN8Writer::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight , int32_t &e)
-{
- uint8_t *ret = Encode(contents, format, outWidth, outHeight, 0, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedEAN8Writer::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e) {
+ uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t *CBC_OnedEAN8Writer::Encode(const CFX_ByteString &contents, BCFORMAT format,
- int32_t &outWidth, int32_t &outHeight, int32_t hints , int32_t &e)
-{
- if (format != BCFORMAT_EAN_8) {
- e = BCExceptionOnlyEncodeEAN_8;
- return NULL;
- }
- uint8_t *ret = CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedEAN8Writer::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e) {
+ if (format != BCFORMAT_EAN_8) {
+ e = BCExceptionOnlyEncodeEAN_8;
+ return NULL;
+ }
+ uint8_t* ret =
+ CBC_OneDimWriter::Encode(contents, format, outWidth, outHeight, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t *CBC_OnedEAN8Writer::Encode(const CFX_ByteString &contents, int32_t &outLength , int32_t &e)
-{
- if (contents.GetLength() != 8) {
- e = BCExceptionDigitLengthMustBe8;
- return NULL;
- }
- outLength = m_codeWidth;
- uint8_t *result = FX_Alloc(uint8_t, m_codeWidth);
- int32_t pos = 0;
- pos += AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e);
+uint8_t* CBC_OnedEAN8Writer::Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e) {
+ if (contents.GetLength() != 8) {
+ e = BCExceptionDigitLengthMustBe8;
+ return NULL;
+ }
+ outLength = m_codeWidth;
+ uint8_t* result = FX_Alloc(uint8_t, m_codeWidth);
+ int32_t pos = 0;
+ pos +=
+ AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ int32_t i = 0;
+ for (i = 0; i <= 3; i++) {
+ int32_t digit = FXSYS_atoi(contents.Mid(i, 1));
+ pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 0,
+ e);
if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
- int32_t i = 0;
- for (i = 0; i <= 3; i++) {
- int32_t digit = FXSYS_atoi(contents.Mid(i, 1));
- pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 0, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
+ FX_Free(result);
+ return NULL;
}
- pos += AppendPattern(result, pos, CBC_OneDimReader::MIDDLE_PATTERN, 5, 0, e);
+ }
+ pos += AppendPattern(result, pos, CBC_OneDimReader::MIDDLE_PATTERN, 5, 0, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ for (i = 4; i <= 7; i++) {
+ int32_t digit = FXSYS_atoi(contents.Mid(i, 1));
+ pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 1,
+ e);
if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
+ FX_Free(result);
+ return NULL;
}
- for (i = 4; i <= 7; i++) {
- int32_t digit = FXSYS_atoi(contents.Mid(i, 1));
- pos += AppendPattern(result, pos, CBC_OneDimReader::L_PATTERNS[digit], 4, 1, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
- }
- pos += AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e);
- if (e != BCExceptionNO) {
- FX_Free (result);
- return NULL;
- }
- return result;
+ }
+ pos +=
+ AppendPattern(result, pos, CBC_OneDimReader::START_END_PATTERN, 3, 1, e);
+ if (e != BCExceptionNO) {
+ FX_Free(result);
+ return NULL;
+ }
+ return result;
}
-void CBC_OnedEAN8Writer::ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice* device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e)
-{
- if (device == NULL && pOutBitmap == NULL) {
- e = BCExceptionIllegalArgument;
- return;
- }
- int32_t leftPosition = 3 * multiple;
- CFX_ByteString str = FX_UTF8Encode(contents);
- int32_t iLength = str.GetLength();
- FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLength);
- if (!pCharPos) {
- return;
- }
- FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLength);
- CFX_ByteString tempStr = str.Mid(0, 4);
- int32_t iLen = tempStr.GetLength();
- int32_t strWidth = 7 * multiple * 4;
- FX_FLOAT blank = 0.0;
- CFX_FxgeDevice geBitmap;
- if (pOutBitmap != NULL) {
- geBitmap.Attach(pOutBitmap);
- }
- FX_FLOAT charsWidth = 0;
- int32_t iFontSize = (int32_t)fabs(m_fFontSize);
- int32_t iTextHeight = iFontSize + 1;
- if (pOutBitmap == NULL) {
- CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
- CFX_FloatRect rect((FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
- matr.Concat(*matrix);
- matr.TransformRect(rect);
- FX_RECT re = rect.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
- CFX_FloatRect rect1((FX_FLOAT)(leftPosition + 33 * multiple), (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)(leftPosition + 33 * multiple + strWidth - 0.5), (FX_FLOAT)m_Height);
- matr1.Concat(*matrix);
- matr1.TransformRect(rect1);
- re = rect1.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- }
- if (pOutBitmap == NULL) {
- strWidth = (int32_t)(strWidth * m_outputHScale);
- }
- CalcTextInfo(tempStr, pCharPos, m_pFont, (FX_FLOAT)strWidth, iFontSize, blank);
- CFX_AffineMatrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
- CFX_FxgeDevice ge;
- if (pOutBitmap != NULL) {
- delete ge.GetBitmap();
- ge.Create(strWidth, iTextHeight, FXDIB_Argb);
- ge.GetBitmap()->Clear(m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)leftPosition * m_outputHScale, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
- affine_matrix1.Concat(*matrix);
- FX_BOOL ret = device->DrawNormalText(iLen,
- pCharPos,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
- }
- tempStr = str.Mid(4, 4);
- iLen = tempStr.GetLength();
- charsWidth = 0.0f;
- CalcTextInfo(tempStr, pCharPos + 4, m_pFont, (FX_FLOAT)strWidth, iFontSize, blank);
- if (pOutBitmap != NULL) {
- delete ge.GetBitmap();
- ge.Create(strWidth, iTextHeight, FXDIB_Argb);
- ge.GetBitmap()->Clear(m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos + 4,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 33 * multiple, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)(leftPosition + 33 * multiple) * m_outputHScale, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
- if (matrix != NULL) {
- affine_matrix1.Concat(*matrix);
- }
- FX_BOOL ret = device->DrawNormalText(iLen,
- pCharPos + 4,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
+void CBC_OnedEAN8Writer::ShowChars(const CFX_WideStringC& contents,
+ CFX_DIBitmap* pOutBitmap,
+ CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ int32_t barWidth,
+ int32_t multiple,
+ int32_t& e) {
+ if (device == NULL && pOutBitmap == NULL) {
+ e = BCExceptionIllegalArgument;
+ return;
+ }
+ int32_t leftPosition = 3 * multiple;
+ CFX_ByteString str = FX_UTF8Encode(contents);
+ int32_t iLength = str.GetLength();
+ FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLength);
+ if (!pCharPos) {
+ return;
+ }
+ FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLength);
+ CFX_ByteString tempStr = str.Mid(0, 4);
+ int32_t iLen = tempStr.GetLength();
+ int32_t strWidth = 7 * multiple * 4;
+ FX_FLOAT blank = 0.0;
+ CFX_FxgeDevice geBitmap;
+ if (pOutBitmap != NULL) {
+ geBitmap.Attach(pOutBitmap);
+ }
+ FX_FLOAT charsWidth = 0;
+ int32_t iFontSize = (int32_t)fabs(m_fFontSize);
+ int32_t iTextHeight = iFontSize + 1;
+ if (pOutBitmap == NULL) {
+ CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
+ CFX_FloatRect rect(
+ (FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
+ matr.Concat(*matrix);
+ matr.TransformRect(rect);
+ FX_RECT re = rect.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
+ CFX_FloatRect rect1(
+ (FX_FLOAT)(leftPosition + 33 * multiple),
+ (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)(leftPosition + 33 * multiple + strWidth - 0.5),
+ (FX_FLOAT)m_Height);
+ matr1.Concat(*matrix);
+ matr1.TransformRect(rect1);
+ re = rect1.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ }
+ if (pOutBitmap == NULL) {
+ strWidth = (int32_t)(strWidth * m_outputHScale);
+ }
+ CalcTextInfo(tempStr, pCharPos, m_pFont, (FX_FLOAT)strWidth, iFontSize,
+ blank);
+ CFX_AffineMatrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
+ CFX_FxgeDevice ge;
+ if (pOutBitmap != NULL) {
+ delete ge.GetBitmap();
+ ge.Create(strWidth, iTextHeight, FXDIB_Argb);
+ ge.GetBitmap()->Clear(m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0, (FX_FLOAT)leftPosition * m_outputHScale,
+ (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
+ affine_matrix1.Concat(*matrix);
+ FX_BOOL ret = device->DrawNormalText(
+ iLen, pCharPos, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ tempStr = str.Mid(4, 4);
+ iLen = tempStr.GetLength();
+ charsWidth = 0.0f;
+ CalcTextInfo(tempStr, pCharPos + 4, m_pFont, (FX_FLOAT)strWidth, iFontSize,
+ blank);
+ if (pOutBitmap != NULL) {
+ delete ge.GetBitmap();
+ ge.Create(strWidth, iTextHeight, FXDIB_Argb);
+ ge.GetBitmap()->Clear(m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos + 4, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 33 * multiple,
+ m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0,
+ (FX_FLOAT)(leftPosition + 33 * multiple) * m_outputHScale,
+ (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
+ if (matrix != NULL) {
+ affine_matrix1.Concat(*matrix);
}
- FX_Free(pCharPos);
+ FX_BOOL ret = device->DrawNormalText(
+ iLen, pCharPos + 4, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ FX_Free(pCharPos);
}
-void CBC_OnedEAN8Writer::RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e)
-{
- CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e);
+void CBC_OnedEAN8Writer::RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e) {
+ CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e);
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h b/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h
index 9f7149fc4f..d3d1c8aa53 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedEAN8Writer.h
@@ -9,24 +9,45 @@
enum BC_TEXT_LOC;
class CBC_OneDimWriter;
class CBC_OnedEAN8Writer;
-class CBC_OnedEAN8Writer : public CBC_OneDimWriter
-{
-private:
- int32_t m_codeWidth;
-public:
- CBC_OnedEAN8Writer();
- virtual ~CBC_OnedEAN8Writer();
- uint8_t * Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight , int32_t &e);
- uint8_t * Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints , int32_t &e);
- uint8_t * Encode(const CFX_ByteString &contents, int32_t &outLength, int32_t &e);
- void RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e);
- FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
- CFX_WideString FilterContents(const CFX_WideStringC& contents);
- void SetDataLength(int32_t length);
- FX_BOOL SetTextLocation(BC_TEXT_LOC location);
- int32_t CalcChecksum(const CFX_ByteString &contents);
-protected:
+class CBC_OnedEAN8Writer : public CBC_OneDimWriter {
+ private:
+ int32_t m_codeWidth;
- void ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice* device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e);
+ public:
+ CBC_OnedEAN8Writer();
+ virtual ~CBC_OnedEAN8Writer();
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ int32_t& outLength,
+ int32_t& e);
+ void RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e);
+ FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
+ CFX_WideString FilterContents(const CFX_WideStringC& contents);
+ void SetDataLength(int32_t length);
+ FX_BOOL SetTextLocation(BC_TEXT_LOC location);
+ int32_t CalcChecksum(const CFX_ByteString& contents);
+
+ protected:
+ void ShowChars(const CFX_WideStringC& contents,
+ CFX_DIBitmap* pOutBitmap,
+ CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ int32_t barWidth,
+ int32_t multiple,
+ int32_t& e);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp b/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp
index 0156ba4af7..fd427eae64 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.cpp
@@ -20,74 +20,79 @@
* limitations under the License.
*/
-
#include "../barcode.h"
#include "../BC_Reader.h"
#include "BC_OneDReader.h"
#include "BC_OneDimReader.h"
#include "BC_OnedEAN13Reader.h"
#include "BC_OnedUPCAReader.h"
-CBC_OnedUPCAReader::CBC_OnedUPCAReader()
-{
- m_ean13Reader = NULL;
+CBC_OnedUPCAReader::CBC_OnedUPCAReader() {
+ m_ean13Reader = NULL;
}
-void CBC_OnedUPCAReader::Init()
-{
- m_ean13Reader = FX_NEW CBC_OnedEAN13Reader;
+void CBC_OnedUPCAReader::Init() {
+ m_ean13Reader = FX_NEW CBC_OnedEAN13Reader;
}
-CBC_OnedUPCAReader::~CBC_OnedUPCAReader()
-{
- if(m_ean13Reader != NULL) {
- delete m_ean13Reader;
- }
- m_ean13Reader = NULL;
+CBC_OnedUPCAReader::~CBC_OnedUPCAReader() {
+ if (m_ean13Reader != NULL) {
+ delete m_ean13Reader;
+ }
+ m_ean13Reader = NULL;
}
-CFX_ByteString CBC_OnedUPCAReader::DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e)
-{
- CFX_ByteString bytestring = m_ean13Reader->DecodeRow(rowNumber, row, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- CFX_ByteString temp = MaybeReturnResult(bytestring, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- return temp;
+CFX_ByteString CBC_OnedUPCAReader::DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e) {
+ CFX_ByteString bytestring =
+ m_ean13Reader->DecodeRow(rowNumber, row, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ CFX_ByteString temp = MaybeReturnResult(bytestring, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ return temp;
}
-CFX_ByteString CBC_OnedUPCAReader::DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, CFX_Int32Array *startGuardRange, int32_t hints, int32_t &e)
-{
- CFX_ByteString bytestring = m_ean13Reader->DecodeRow(rowNumber, row, startGuardRange, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- CFX_ByteString temp = MaybeReturnResult(bytestring, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- return temp;
+CFX_ByteString CBC_OnedUPCAReader::DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ CFX_Int32Array* startGuardRange,
+ int32_t hints,
+ int32_t& e) {
+ CFX_ByteString bytestring =
+ m_ean13Reader->DecodeRow(rowNumber, row, startGuardRange, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ CFX_ByteString temp = MaybeReturnResult(bytestring, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ return temp;
}
-CFX_ByteString CBC_OnedUPCAReader::Decode(CBC_BinaryBitmap *image, int32_t &e)
-{
- CFX_ByteString bytestring = m_ean13Reader->Decode(image, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- CFX_ByteString temp = MaybeReturnResult(bytestring, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- return temp;
+CFX_ByteString CBC_OnedUPCAReader::Decode(CBC_BinaryBitmap* image, int32_t& e) {
+ CFX_ByteString bytestring = m_ean13Reader->Decode(image, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ CFX_ByteString temp = MaybeReturnResult(bytestring, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ return temp;
}
-CFX_ByteString CBC_OnedUPCAReader::Decode(CBC_BinaryBitmap *image, int32_t hints, int32_t &e)
-{
- CFX_ByteString bytestring = m_ean13Reader->Decode(image, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- CFX_ByteString temp = MaybeReturnResult(bytestring, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, "");
- return temp;
+CFX_ByteString CBC_OnedUPCAReader::Decode(CBC_BinaryBitmap* image,
+ int32_t hints,
+ int32_t& e) {
+ CFX_ByteString bytestring = m_ean13Reader->Decode(image, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ CFX_ByteString temp = MaybeReturnResult(bytestring, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, "");
+ return temp;
}
-int32_t CBC_OnedUPCAReader::DecodeMiddle(CBC_CommonBitArray *row, CFX_Int32Array *startRange, CFX_ByteString &resultString, int32_t &e)
-{
- int32_t temp = m_ean13Reader->DecodeMiddle(row, startRange, resultString, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, 0);
- return temp;
+int32_t CBC_OnedUPCAReader::DecodeMiddle(CBC_CommonBitArray* row,
+ CFX_Int32Array* startRange,
+ CFX_ByteString& resultString,
+ int32_t& e) {
+ int32_t temp = m_ean13Reader->DecodeMiddle(row, startRange, resultString, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, 0);
+ return temp;
}
-CFX_ByteString CBC_OnedUPCAReader::MaybeReturnResult(CFX_ByteString &result, int32_t &e)
-{
- if(result[0] == '0') {
- result.Delete(0);
- return result;
- } else {
- e = BCExceptionFormatException;
- return "";
- }
+CFX_ByteString CBC_OnedUPCAReader::MaybeReturnResult(CFX_ByteString& result,
+ int32_t& e) {
+ if (result[0] == '0') {
+ result.Delete(0);
+ return result;
+ } else {
+ e = BCExceptionFormatException;
return "";
+ }
+ return "";
}
diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h b/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h
index c1eccb57d1..249b820bff 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedUPCAReader.h
@@ -11,20 +11,31 @@ class CBC_CommonBitArray;
class CBC_OneDimReader;
class CBC_OnedEAN13Reader;
class CBC_OnedUPCAReader;
-class CBC_OnedUPCAReader : public CBC_OneDimReader
-{
-private:
- CBC_OnedEAN13Reader *m_ean13Reader;
-public:
- CBC_OnedUPCAReader();
- virtual ~CBC_OnedUPCAReader();
- CFX_ByteString DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, int32_t hints, int32_t &e);
- CFX_ByteString DecodeRow(int32_t rowNumber, CBC_CommonBitArray *row, CFX_Int32Array *startGuardRange, int32_t hints, int32_t &e);
- CFX_ByteString Decode(CBC_BinaryBitmap *image, int32_t &e);
- CFX_ByteString Decode(CBC_BinaryBitmap *image, int32_t hints, int32_t &e);
- virtual void Init();
-protected:
- int32_t DecodeMiddle(CBC_CommonBitArray *row, CFX_Int32Array *startRange, CFX_ByteString &resultString, int32_t &e);
- CFX_ByteString MaybeReturnResult(CFX_ByteString &result, int32_t &e);
+class CBC_OnedUPCAReader : public CBC_OneDimReader {
+ private:
+ CBC_OnedEAN13Reader* m_ean13Reader;
+
+ public:
+ CBC_OnedUPCAReader();
+ virtual ~CBC_OnedUPCAReader();
+ CFX_ByteString DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ int32_t hints,
+ int32_t& e);
+ CFX_ByteString DecodeRow(int32_t rowNumber,
+ CBC_CommonBitArray* row,
+ CFX_Int32Array* startGuardRange,
+ int32_t hints,
+ int32_t& e);
+ CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t& e);
+ CFX_ByteString Decode(CBC_BinaryBitmap* image, int32_t hints, int32_t& e);
+ virtual void Init();
+
+ protected:
+ int32_t DecodeMiddle(CBC_CommonBitArray* row,
+ CFX_Int32Array* startRange,
+ CFX_ByteString& resultString,
+ int32_t& e);
+ CFX_ByteString MaybeReturnResult(CFX_ByteString& result, int32_t& e);
};
#endif
diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index 366dc9c67f..66c7c2a798 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -25,261 +25,270 @@
#include "BC_OneDimWriter.h"
#include "BC_OnedEAN13Writer.h"
#include "BC_OnedUPCAWriter.h"
-CBC_OnedUPCAWriter::CBC_OnedUPCAWriter()
-{
- m_subWriter = NULL;
- m_bLeftPadding = TRUE;
- m_bRightPadding = TRUE;
+CBC_OnedUPCAWriter::CBC_OnedUPCAWriter() {
+ m_subWriter = NULL;
+ m_bLeftPadding = TRUE;
+ m_bRightPadding = TRUE;
}
-void CBC_OnedUPCAWriter::Init()
-{
- m_subWriter = FX_NEW CBC_OnedEAN13Writer;
+void CBC_OnedUPCAWriter::Init() {
+ m_subWriter = FX_NEW CBC_OnedEAN13Writer;
}
-CBC_OnedUPCAWriter::~CBC_OnedUPCAWriter()
-{
- if(m_subWriter != NULL) {
- delete m_subWriter;
- }
- m_subWriter = NULL;
+CBC_OnedUPCAWriter::~CBC_OnedUPCAWriter() {
+ if (m_subWriter != NULL) {
+ delete m_subWriter;
+ }
+ m_subWriter = NULL;
}
-FX_BOOL CBC_OnedUPCAWriter::CheckContentValidity(const CFX_WideStringC& contents)
-{
- int32_t i = 0;
- for (i = 0; i < contents.GetLength(); i++) {
- if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') {
- continue;
- } else {
- return FALSE;
- }
+FX_BOOL CBC_OnedUPCAWriter::CheckContentValidity(
+ const CFX_WideStringC& contents) {
+ int32_t i = 0;
+ for (i = 0; i < contents.GetLength(); i++) {
+ if (contents.GetAt(i) >= '0' && contents.GetAt(i) <= '9') {
+ continue;
+ } else {
+ return FALSE;
}
- return TRUE;
+ }
+ return TRUE;
}
-CFX_WideString CBC_OnedUPCAWriter::FilterContents(const CFX_WideStringC& contents)
-{
- CFX_WideString filtercontents;
- FX_WCHAR ch;
- for (int32_t i = 0; i < contents.GetLength(); i++) {
- ch = contents.GetAt(i);
- if(ch > 175) {
- i++;
- continue;
- }
- if (ch >= '0' && ch <= '9') {
- filtercontents += ch;
- }
+CFX_WideString CBC_OnedUPCAWriter::FilterContents(
+ const CFX_WideStringC& contents) {
+ CFX_WideString filtercontents;
+ FX_WCHAR ch;
+ for (int32_t i = 0; i < contents.GetLength(); i++) {
+ ch = contents.GetAt(i);
+ if (ch > 175) {
+ i++;
+ continue;
}
- return filtercontents;
+ if (ch >= '0' && ch <= '9') {
+ filtercontents += ch;
+ }
+ }
+ return filtercontents;
}
-int32_t CBC_OnedUPCAWriter::CalcChecksum(const CFX_ByteString &contents)
-{
- int32_t odd = 0;
- int32_t even = 0;
- int32_t j = 1;
- for(int32_t i = contents.GetLength() - 1; i >= 0; i--) {
- if(j % 2) {
- odd += FXSYS_atoi(contents.Mid(i, 1));
- } else {
- even += FXSYS_atoi(contents.Mid(i, 1));
- }
- j++;
+int32_t CBC_OnedUPCAWriter::CalcChecksum(const CFX_ByteString& contents) {
+ int32_t odd = 0;
+ int32_t even = 0;
+ int32_t j = 1;
+ for (int32_t i = contents.GetLength() - 1; i >= 0; i--) {
+ if (j % 2) {
+ odd += FXSYS_atoi(contents.Mid(i, 1));
+ } else {
+ even += FXSYS_atoi(contents.Mid(i, 1));
}
- int32_t checksum = (odd * 3 + even) % 10;
- checksum = (10 - checksum) % 10;
- return (checksum);
+ j++;
+ }
+ int32_t checksum = (odd * 3 + even) % 10;
+ checksum = (10 - checksum) % 10;
+ return (checksum);
}
-uint8_t *CBC_OnedUPCAWriter::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e)
-{
- uint8_t *ret = Encode(contents, format, outWidth, outHeight, 0, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedUPCAWriter::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e) {
+ uint8_t* ret = Encode(contents, format, outWidth, outHeight, 0, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-uint8_t *CBC_OnedUPCAWriter::Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e)
-{
- if (format != BCFORMAT_UPC_A) {
- e = BCExceptionOnlyEncodeUPC_A;
- return NULL;
- }
- CFX_ByteString toEAN13String = '0' + contents;
- m_iDataLenth = 13;
- uint8_t *ret = m_subWriter->Encode(toEAN13String, BCFORMAT_EAN_13, outWidth, outHeight, hints, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
- return ret;
+uint8_t* CBC_OnedUPCAWriter::Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e) {
+ if (format != BCFORMAT_UPC_A) {
+ e = BCExceptionOnlyEncodeUPC_A;
+ return NULL;
+ }
+ CFX_ByteString toEAN13String = '0' + contents;
+ m_iDataLenth = 13;
+ uint8_t* ret = m_subWriter->Encode(toEAN13String, BCFORMAT_EAN_13, outWidth,
+ outHeight, hints, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ return ret;
}
-void CBC_OnedUPCAWriter::ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice* device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e)
-{
- if (device == NULL && pOutBitmap == NULL) {
- e = BCExceptionIllegalArgument;
- return;
- }
- int32_t leftPadding = 7 * multiple;
- int32_t leftPosition = 10 * multiple + leftPadding;
- CFX_ByteString str = FX_UTF8Encode(contents);
- int32_t iLen = str.GetLength();
- FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen);
- if (!pCharPos) {
- return;
- }
- FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen);
- CFX_ByteString tempStr = str.Mid(1, 5);
- FX_FLOAT strWidth = (FX_FLOAT)35 * multiple;
- FX_FLOAT blank = 0.0;
- CFX_FxgeDevice geBitmap;
- if (pOutBitmap != NULL) {
- geBitmap.Attach(pOutBitmap);
- }
- FX_FLOAT charsWidth = 0;
- iLen = tempStr.GetLength();
- int32_t iFontSize = (int32_t)fabs(m_fFontSize);
- int32_t iTextHeight = iFontSize + 1;
- if (pOutBitmap == NULL) {
- CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
- CFX_FloatRect rect((FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
- matr.Concat(*matrix);
- matr.TransformRect(rect);
- FX_RECT re = rect.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
- CFX_FloatRect rect1((FX_FLOAT)(leftPosition + 40 * multiple), (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)((leftPosition + 40 * multiple) + strWidth - 0.5), (FX_FLOAT)m_Height);
- matr1.Concat(*matrix);
- matr1.TransformRect(rect1);
- re = rect1.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- FX_FLOAT strWidth1 = (FX_FLOAT)multiple * 7;
- CFX_Matrix matr2(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
- CFX_FloatRect rect2(0.0, (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)strWidth1 - 1, (FX_FLOAT)m_Height);
- matr2.Concat(*matrix);
- matr2.TransformRect(rect2);
- re = rect2.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
- CFX_Matrix matr3(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
- CFX_FloatRect rect3((FX_FLOAT)(leftPosition + 85 * multiple), (FX_FLOAT)(m_Height - iTextHeight), (FX_FLOAT)((leftPosition + 85 * multiple) + strWidth1 - 0.5), (FX_FLOAT)m_Height);
- matr3.Concat(*matrix);
- matr3.TransformRect(rect3);
- re = rect3.GetOutterRect();
- device->FillRect(&re, m_backgroundColor);
+void CBC_OnedUPCAWriter::ShowChars(const CFX_WideStringC& contents,
+ CFX_DIBitmap* pOutBitmap,
+ CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ int32_t barWidth,
+ int32_t multiple,
+ int32_t& e) {
+ if (device == NULL && pOutBitmap == NULL) {
+ e = BCExceptionIllegalArgument;
+ return;
+ }
+ int32_t leftPadding = 7 * multiple;
+ int32_t leftPosition = 10 * multiple + leftPadding;
+ CFX_ByteString str = FX_UTF8Encode(contents);
+ int32_t iLen = str.GetLength();
+ FXTEXT_CHARPOS* pCharPos = FX_Alloc(FXTEXT_CHARPOS, iLen);
+ if (!pCharPos) {
+ return;
+ }
+ FXSYS_memset(pCharPos, 0, sizeof(FXTEXT_CHARPOS) * iLen);
+ CFX_ByteString tempStr = str.Mid(1, 5);
+ FX_FLOAT strWidth = (FX_FLOAT)35 * multiple;
+ FX_FLOAT blank = 0.0;
+ CFX_FxgeDevice geBitmap;
+ if (pOutBitmap != NULL) {
+ geBitmap.Attach(pOutBitmap);
+ }
+ FX_FLOAT charsWidth = 0;
+ iLen = tempStr.GetLength();
+ int32_t iFontSize = (int32_t)fabs(m_fFontSize);
+ int32_t iTextHeight = iFontSize + 1;
+ if (pOutBitmap == NULL) {
+ CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
+ CFX_FloatRect rect(
+ (FX_FLOAT)leftPosition, (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)(leftPosition + strWidth - 0.5), (FX_FLOAT)m_Height);
+ matr.Concat(*matrix);
+ matr.TransformRect(rect);
+ FX_RECT re = rect.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ CFX_Matrix matr1(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
+ CFX_FloatRect rect1(
+ (FX_FLOAT)(leftPosition + 40 * multiple),
+ (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)((leftPosition + 40 * multiple) + strWidth - 0.5),
+ (FX_FLOAT)m_Height);
+ matr1.Concat(*matrix);
+ matr1.TransformRect(rect1);
+ re = rect1.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ FX_FLOAT strWidth1 = (FX_FLOAT)multiple * 7;
+ CFX_Matrix matr2(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
+ CFX_FloatRect rect2(0.0, (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)strWidth1 - 1, (FX_FLOAT)m_Height);
+ matr2.Concat(*matrix);
+ matr2.TransformRect(rect2);
+ re = rect2.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ CFX_Matrix matr3(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
+ CFX_FloatRect rect3(
+ (FX_FLOAT)(leftPosition + 85 * multiple),
+ (FX_FLOAT)(m_Height - iTextHeight),
+ (FX_FLOAT)((leftPosition + 85 * multiple) + strWidth1 - 0.5),
+ (FX_FLOAT)m_Height);
+ matr3.Concat(*matrix);
+ matr3.TransformRect(rect3);
+ re = rect3.GetOutterRect();
+ device->FillRect(&re, m_backgroundColor);
+ }
+ if (pOutBitmap == NULL) {
+ strWidth = strWidth * m_outputHScale;
+ }
+ CalcTextInfo(tempStr, pCharPos + 1, m_pFont, strWidth, iFontSize, blank);
+ CFX_AffineMatrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
+ CFX_FxgeDevice ge;
+ if (pOutBitmap != NULL) {
+ ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
+ ge.GetBitmap()->Clear(m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos + 1, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0, (FX_FLOAT)leftPosition * m_outputHScale,
+ (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
+ if (matrix != NULL) {
+ affine_matrix1.Concat(*matrix);
}
- if (pOutBitmap == NULL) {
- strWidth = strWidth * m_outputHScale;
+ device->DrawNormalText(
+ iLen, pCharPos + 1, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ tempStr = str.Mid(6, 5);
+ iLen = tempStr.GetLength();
+ charsWidth = 0.0f;
+ CalcTextInfo(tempStr, pCharPos + 6, m_pFont, strWidth, iFontSize, blank);
+ if (pOutBitmap != NULL) {
+ FX_RECT rect2(0, 0, (int)strWidth, iTextHeight);
+ ge.FillRect(&rect2, m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos + 6, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 40 * multiple,
+ m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0,
+ (FX_FLOAT)(leftPosition + 40 * multiple) * m_outputHScale,
+ (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
+ if (matrix != NULL) {
+ affine_matrix1.Concat(*matrix);
}
- CalcTextInfo(tempStr, pCharPos + 1, m_pFont, strWidth, iFontSize, blank);
- CFX_AffineMatrix affine_matrix(1.0, 0.0, 0.0, -1.0, 0.0, (FX_FLOAT)iFontSize);
- CFX_FxgeDevice ge;
- if(pOutBitmap != NULL) {
- ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
- ge.GetBitmap()->Clear(m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos + 1,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), leftPosition, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)leftPosition * m_outputHScale, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
- if (matrix != NULL) {
- affine_matrix1.Concat(*matrix);
- }
- device->DrawNormalText(iLen,
- pCharPos + 1,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
- }
- tempStr = str.Mid(6, 5);
- iLen = tempStr.GetLength();
- charsWidth = 0.0f;
- CalcTextInfo(tempStr, pCharPos + 6, m_pFont, strWidth, iFontSize, blank);
- if(pOutBitmap != NULL) {
- FX_RECT rect2(0, 0, (int)strWidth, iTextHeight);
- ge.FillRect(&rect2, m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos + 6,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 40 * multiple, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)(leftPosition + 40 * multiple) * m_outputHScale, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
- if (matrix != NULL) {
- affine_matrix1.Concat(*matrix);
- }
- device->DrawNormalText(iLen,
- pCharPos + 6,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
- }
- tempStr = str.Mid(0, 1);
- iLen = tempStr.GetLength();
- strWidth = (FX_FLOAT)multiple * 7;
- if (pOutBitmap == NULL) {
- strWidth = strWidth * m_outputHScale;
+ device->DrawNormalText(
+ iLen, pCharPos + 6, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ tempStr = str.Mid(0, 1);
+ iLen = tempStr.GetLength();
+ strWidth = (FX_FLOAT)multiple * 7;
+ if (pOutBitmap == NULL) {
+ strWidth = strWidth * m_outputHScale;
+ }
+ CalcTextInfo(tempStr, pCharPos, m_pFont, strWidth, iFontSize, blank);
+ if (pOutBitmap != NULL) {
+ delete ge.GetBitmap();
+ ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
+ ge.GetBitmap()->Clear(m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), 0, m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0, 0, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
+ if (matrix != NULL) {
+ affine_matrix1.Concat(*matrix);
}
- CalcTextInfo(tempStr, pCharPos, m_pFont, strWidth, iFontSize, blank);
- if(pOutBitmap != NULL) {
- delete ge.GetBitmap();
- ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
- ge.GetBitmap()->Clear(m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), 0, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, 0, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
- if (matrix != NULL) {
- affine_matrix1.Concat(*matrix);
- }
- device->DrawNormalText(iLen,
- pCharPos,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
- }
- tempStr = str.Mid(11, 1);
- iLen = tempStr.GetLength();
- CalcTextInfo(tempStr, pCharPos + 11, m_pFont, strWidth, iFontSize, blank);
- if (pOutBitmap != NULL) {
- delete ge.GetBitmap();
- ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
- ge.GetBitmap()->Clear(m_backgroundColor);
- ge.DrawNormalText(iLen,
- pCharPos + 11,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix,
- m_fontColor, FXTEXT_CLEARTYPE);
- geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 85 * multiple, m_Height - iTextHeight);
- } else {
- CFX_AffineMatrix affine_matrix1(1.0, 0.0, 0.0, -1.0, (FX_FLOAT)(leftPosition + 85 * multiple) * m_outputHScale, (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
- if (matrix != NULL) {
- affine_matrix1.Concat(*matrix);
- }
- device->DrawNormalText(iLen,
- pCharPos + 11,
- m_pFont,
- CFX_GEModule::Get()->GetFontCache(),
- (FX_FLOAT)iFontSize ,
- (CFX_AffineMatrix *) &affine_matrix1,
- m_fontColor, FXTEXT_CLEARTYPE);
+ device->DrawNormalText(
+ iLen, pCharPos, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ tempStr = str.Mid(11, 1);
+ iLen = tempStr.GetLength();
+ CalcTextInfo(tempStr, pCharPos + 11, m_pFont, strWidth, iFontSize, blank);
+ if (pOutBitmap != NULL) {
+ delete ge.GetBitmap();
+ ge.Create((int)strWidth, iTextHeight, FXDIB_Argb);
+ ge.GetBitmap()->Clear(m_backgroundColor);
+ ge.DrawNormalText(iLen, pCharPos + 11, m_pFont,
+ CFX_GEModule::Get()->GetFontCache(), (FX_FLOAT)iFontSize,
+ (CFX_AffineMatrix*)&affine_matrix, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ geBitmap.SetDIBits(ge.GetBitmap(), leftPosition + 85 * multiple,
+ m_Height - iTextHeight);
+ } else {
+ CFX_AffineMatrix affine_matrix1(
+ 1.0, 0.0, 0.0, -1.0,
+ (FX_FLOAT)(leftPosition + 85 * multiple) * m_outputHScale,
+ (FX_FLOAT)(m_Height - iTextHeight + iFontSize));
+ if (matrix != NULL) {
+ affine_matrix1.Concat(*matrix);
}
- FX_Free(pCharPos);
+ device->DrawNormalText(
+ iLen, pCharPos + 11, m_pFont, CFX_GEModule::Get()->GetFontCache(),
+ (FX_FLOAT)iFontSize, (CFX_AffineMatrix*)&affine_matrix1, m_fontColor,
+ FXTEXT_CLEARTYPE);
+ }
+ FX_Free(pCharPos);
}
-void CBC_OnedUPCAWriter::RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e)
-{
- CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e);
+void CBC_OnedUPCAWriter::RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e) {
+ CBC_OneDimWriter::RenderResult(contents, code, codeLength, isDevice, e);
}
-
diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h b/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h
index 7ba3b961fb..886164cb3c 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h
@@ -9,23 +9,41 @@
class CBC_Writer;
class CBC_OnedEAN13Writer;
class CBC_OnedUPCAWriter;
-class CBC_OnedUPCAWriter : public CBC_OneDimWriter
-{
-private:
- CBC_OnedEAN13Writer *m_subWriter;
-public:
- CBC_OnedUPCAWriter();
- virtual ~CBC_OnedUPCAWriter();
- virtual void Init();
- uint8_t* Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t &e);
- uint8_t* Encode(const CFX_ByteString &contents, BCFORMAT format, int32_t &outWidth, int32_t &outHeight, int32_t hints, int32_t &e);
- void RenderResult(const CFX_WideStringC& contents, uint8_t* code, int32_t codeLength, FX_BOOL isDevice, int32_t &e);
- FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
- CFX_WideString FilterContents(const CFX_WideStringC& contents);
- int32_t CalcChecksum(const CFX_ByteString &contents);
+class CBC_OnedUPCAWriter : public CBC_OneDimWriter {
+ private:
+ CBC_OnedEAN13Writer* m_subWriter;
-protected:
+ public:
+ CBC_OnedUPCAWriter();
+ virtual ~CBC_OnedUPCAWriter();
+ virtual void Init();
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t& e);
+ uint8_t* Encode(const CFX_ByteString& contents,
+ BCFORMAT format,
+ int32_t& outWidth,
+ int32_t& outHeight,
+ int32_t hints,
+ int32_t& e);
+ void RenderResult(const CFX_WideStringC& contents,
+ uint8_t* code,
+ int32_t codeLength,
+ FX_BOOL isDevice,
+ int32_t& e);
+ FX_BOOL CheckContentValidity(const CFX_WideStringC& contents);
+ CFX_WideString FilterContents(const CFX_WideStringC& contents);
+ int32_t CalcChecksum(const CFX_ByteString& contents);
- void ShowChars(const CFX_WideStringC& contents, CFX_DIBitmap *pOutBitmap, CFX_RenderDevice* device, const CFX_Matrix* matrix, int32_t barWidth, int32_t multiple, int32_t &e);
+ protected:
+ void ShowChars(const CFX_WideStringC& contents,
+ CFX_DIBitmap* pOutBitmap,
+ CFX_RenderDevice* device,
+ const CFX_Matrix* matrix,
+ int32_t barWidth,
+ int32_t multiple,
+ int32_t& e);
};
#endif