OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 // Original code is licensed as follows: | 6 // Original code is licensed as follows: |
7 /* | 7 /* |
8 * Copyright 2006-2007 Jeremias Maerki. | 8 * Copyright 2006-2007 Jeremias Maerki. |
9 * | 9 * |
10 * Licensed under the Apache License, Version 2.0 (the "License"); | 10 * Licensed under the Apache License, Version 2.0 (the "License"); |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "BC_SymbolInfo.h" | 27 #include "BC_SymbolInfo.h" |
28 #include "BC_EncoderContext.h" | 28 #include "BC_EncoderContext.h" |
29 #include "BC_HighLevelEncoder.h" | 29 #include "BC_HighLevelEncoder.h" |
30 #include "BC_Base256Encoder.h" | 30 #include "BC_Base256Encoder.h" |
31 CBC_Base256Encoder::CBC_Base256Encoder() | 31 CBC_Base256Encoder::CBC_Base256Encoder() |
32 { | 32 { |
33 } | 33 } |
34 CBC_Base256Encoder::~CBC_Base256Encoder() | 34 CBC_Base256Encoder::~CBC_Base256Encoder() |
35 { | 35 { |
36 } | 36 } |
37 FX_INT32 CBC_Base256Encoder::getEncodingMode() | 37 int32_t CBC_Base256Encoder::getEncodingMode() |
38 { | 38 { |
39 return BASE256_ENCODATION; | 39 return BASE256_ENCODATION; |
40 } | 40 } |
41 void CBC_Base256Encoder::Encode(CBC_EncoderContext &context, FX_INT32 &e) | 41 void CBC_Base256Encoder::Encode(CBC_EncoderContext &context, int32_t &e) |
42 { | 42 { |
43 CFX_WideString buffer; | 43 CFX_WideString buffer; |
44 buffer += (FX_WCHAR)'\0'; | 44 buffer += (FX_WCHAR)'\0'; |
45 while (context.hasMoreCharacters()) { | 45 while (context.hasMoreCharacters()) { |
46 FX_WCHAR c = context.getCurrentChar(); | 46 FX_WCHAR c = context.getCurrentChar(); |
47 buffer += c; | 47 buffer += c; |
48 context.m_pos++; | 48 context.m_pos++; |
49 FX_INT32 newMode = CBC_HighLevelEncoder::lookAheadTest(context.m_msg, co
ntext.m_pos, getEncodingMode()); | 49 int32_t newMode = CBC_HighLevelEncoder::lookAheadTest(context.m_msg, con
text.m_pos, getEncodingMode()); |
50 if (newMode != getEncodingMode()) { | 50 if (newMode != getEncodingMode()) { |
51 context.signalEncoderChange(newMode); | 51 context.signalEncoderChange(newMode); |
52 break; | 52 break; |
53 } | 53 } |
54 } | 54 } |
55 FX_INT32 dataCount = buffer.GetLength() - 1; | 55 int32_t dataCount = buffer.GetLength() - 1; |
56 FX_CHAR buf[128]; | 56 FX_CHAR buf[128]; |
57 #if defined(_FX_WINAPI_PARTITION_APP_) | 57 #if defined(_FX_WINAPI_PARTITION_APP_) |
58 memset(buf, 0, sizeof(FX_CHAR) * 128); | 58 memset(buf, 0, sizeof(FX_CHAR) * 128); |
59 _itoa_s(dataCount, buf, 128, 10); | 59 _itoa_s(dataCount, buf, 128, 10); |
60 #else | 60 #else |
61 FXSYS_itoa(dataCount, buf, 10); | 61 FXSYS_itoa(dataCount, buf, 10); |
62 #endif | 62 #endif |
63 buffer.SetAt(0, FX_WCHAR(*buf) - '0'); | 63 buffer.SetAt(0, FX_WCHAR(*buf) - '0'); |
64 FX_INT32 lengthFieldSize = 1; | 64 int32_t lengthFieldSize = 1; |
65 FX_INT32 currentSize = context.getCodewordCount() + dataCount + lengthFieldS
ize; | 65 int32_t currentSize = context.getCodewordCount() + dataCount + lengthFieldSi
ze; |
66 context.updateSymbolInfo(currentSize, e); | 66 context.updateSymbolInfo(currentSize, e); |
67 if (e != BCExceptionNO) { | 67 if (e != BCExceptionNO) { |
68 return; | 68 return; |
69 } | 69 } |
70 FX_BOOL mustPad = (context.m_symbolInfo->m_dataCapacity - currentSize) > 0; | 70 FX_BOOL mustPad = (context.m_symbolInfo->m_dataCapacity - currentSize) > 0; |
71 if (context.hasMoreCharacters() || mustPad) { | 71 if (context.hasMoreCharacters() || mustPad) { |
72 if (dataCount <= 249) { | 72 if (dataCount <= 249) { |
73 buffer.SetAt(0, (FX_WCHAR) dataCount); | 73 buffer.SetAt(0, (FX_WCHAR) dataCount); |
74 } else if (dataCount > 249 && dataCount <= 1555) { | 74 } else if (dataCount > 249 && dataCount <= 1555) { |
75 buffer.SetAt(0, (FX_WCHAR) ((dataCount / 250) + 249)); | 75 buffer.SetAt(0, (FX_WCHAR) ((dataCount / 250) + 249)); |
76 buffer.Insert(1, (FX_WCHAR) (dataCount % 250)); | 76 buffer.Insert(1, (FX_WCHAR) (dataCount % 250)); |
77 } else { | 77 } else { |
78 e = BCExceptionIllegalStateMessageLengthInvalid; | 78 e = BCExceptionIllegalStateMessageLengthInvalid; |
79 return; | 79 return; |
80 } | 80 } |
81 } | 81 } |
82 for (FX_INT32 i = 0, c = buffer.GetLength(); i < c; i++) { | 82 for (int32_t i = 0, c = buffer.GetLength(); i < c; i++) { |
83 context.writeCodeword(randomize255State(buffer.GetAt(i), context.getCode
wordCount() + 1)); | 83 context.writeCodeword(randomize255State(buffer.GetAt(i), context.getCode
wordCount() + 1)); |
84 } | 84 } |
85 } | 85 } |
86 FX_WCHAR CBC_Base256Encoder::randomize255State(FX_WCHAR ch, FX_INT32 codewordPos
ition) | 86 FX_WCHAR CBC_Base256Encoder::randomize255State(FX_WCHAR ch, int32_t codewordPosi
tion) |
87 { | 87 { |
88 FX_INT32 pseudoRandom = ((149 * codewordPosition) % 255) + 1; | 88 int32_t pseudoRandom = ((149 * codewordPosition) % 255) + 1; |
89 FX_INT32 tempVariable = ch + pseudoRandom; | 89 int32_t tempVariable = ch + pseudoRandom; |
90 if (tempVariable <= 255) { | 90 if (tempVariable <= 255) { |
91 return (FX_WCHAR) tempVariable; | 91 return (FX_WCHAR) tempVariable; |
92 } else { | 92 } else { |
93 return (FX_WCHAR) (tempVariable - 256); | 93 return (FX_WCHAR) (tempVariable - 256); |
94 } | 94 } |
95 } | 95 } |
OLD | NEW |