// Token: 0x06000B92 RID: 2962 RVA: 0x00069774 File Offset: 0x00067974 public override ValidationResult GetRunLength(byte[] dataIn, int offsetIn, int lengthIn, Escape escape, out int usedIn, out int usedOut) { usedIn = 0; usedOut = 0; bool flag = false; bool flag2 = false; int i = offsetIn; int num = 0; int num2 = 0; int limit = this.CalculateLoopCountLimit(lengthIn); byte b = 0; if (escape.IsValidEscapeSequence) { if (!this.IsEscapeSequenceHandled(escape)) { throw new InvalidOperationException(string.Format("unhandled escape sequence: {0}", escape.Sequence)); } i += escape.BytesInCurrentBuffer; this.runBeganWithEscape = true; this.isKana = false; this.leftoverByte = 0; } while (i < offsetIn + lengthIn) { this.CheckLoopCount(ref num2, limit); uint num3; uint num4; int num5; if (this.leftoverByte != 0 && i == offsetIn) { num3 = (uint)this.leftoverByte; num4 = (uint)dataIn[i]; num5 = 1; b = this.leftoverByte; this.leftoverByte = 0; } else if (i + 2 <= offsetIn + lengthIn) { num3 = (uint)dataIn[i]; num4 = (uint)dataIn[i + 1]; num5 = 2; } else { num3 = (uint)dataIn[i]; if (num3 == 27U || (!this.runBeganWithEscape && (num3 == 14U || num3 == 15U)) || num3 == 0U) { flag2 = true; break; } if (this.isKana && num3 != 14U && num3 != 15U) { i++; num++; break; } break; } if (num3 == 27U) { flag2 = true; break; } if (num3 == 0U) { flag2 = true; break; } if (num4 == 27U) { if (num3 == 14U || num3 == 15U) { if (this.runBeganWithEscape) { i++; } } else { i++; if (this.isKana) { num++; } } flag2 = true; break; } if (num4 == 0U) { if (num3 == 14U || num3 == 15U) { if (this.runBeganWithEscape) { i++; } } else { i++; if (this.isKana) { num++; } } flag2 = true; break; } if (!this.runBeganWithEscape) { if (num3 == 14U || num3 == 15U || num4 == 14U || num4 == 15U) { flag2 = true; break; } } else if (num3 == 14U) { this.isKana = true; i += num5; if (num4 != 14U && num4 != 15U) { num++; continue; } continue; } else { if (num3 == 15U) { this.isKana = false; i += num5 - 1; continue; } if (num4 == 14U) { i += num5; num++; this.isKana = true; continue; } if (num4 == 15U) { this.isKana = false; i += num5; num++; continue; } } if (num3 >= 128U) { flag = true; if (!this.runBeganWithEscape) { break; } if (this.isRunContainsIbmExtension == JisX0208PairClass.Unrecognized) { JisX0208PairClass jisX0208PairClass = this.ClassifyPair(num3, num4); if (jisX0208PairClass == JisX0208PairClass.IbmExtension) { this.isRunContainsIbmExtension = JisX0208PairClass.IbmExtension; } } } i += num5; num += 2; } if (!flag2 && i + 1 == offsetIn + lengthIn) { i++; } usedIn = i - offsetIn; usedOut = num; if (b != 0) { this.leftoverByte = b; } if (!flag || this.runBeganWithEscape) { return(ValidationResult.Valid); } return(ValidationResult.Invalid); }
public override ValidationResult GetRunLength(byte[] dataIn, int offsetIn, int lengthIn, Escape escape, out int usedIn, out int usedOut) { usedIn = 0; usedOut = 0; var flag1 = false; var flag2 = false; var index = offsetIn; var num1 = 0; var count = 0; var limit = this.CalculateLoopCountLimit(lengthIn); byte num2 = 0; if (escape.IsValidEscapeSequence) { if (!this.IsEscapeSequenceHandled(escape)) throw new System.InvalidOperationException(string.Format("unhandled escape sequence: {0}", escape.Sequence)); index += escape.BytesInCurrentBuffer; runBeganWithEscape = true; isKana = false; leftoverByte = 0; } while (index < offsetIn + lengthIn) { this.CheckLoopCount(ref count, limit); uint high; uint low; int num3; if (leftoverByte != 0 && index == offsetIn) { high = leftoverByte; low = dataIn[index]; num3 = 1; num2 = leftoverByte; leftoverByte = 0; } else if (index + 2 <= offsetIn + lengthIn) { high = dataIn[index]; low = dataIn[index + 1]; num3 = 2; } else { uint num4 = dataIn[index]; if ((int) num4 == 27 || !runBeganWithEscape && ((int) num4 == 14 || (int) num4 == 15) || (int) num4 == 0) { flag2 = true; break; } if (isKana && (int) num4 != 14 && (int) num4 != 15) { ++index; ++num1; } break; } if ((int) high == 27) { flag2 = true; break; } if ((int) high == 0) { flag2 = true; break; } if ((int) low == 27) { if ((int) high == 14 || (int) high == 15) { if (runBeganWithEscape) ++index; } else { ++index; if (isKana) ++num1; } flag2 = true; break; } if ((int) low == 0) { if ((int) high == 14 || (int) high == 15) { if (runBeganWithEscape) ++index; } else { ++index; if (isKana) ++num1; } flag2 = true; break; } if (!runBeganWithEscape) { if ((int) high == 14 || (int) high == 15 || ((int) low == 14 || (int) low == 15)) { flag2 = true; break; } } else { if ((int) high == 14) { isKana = true; index += num3; if ((int) low != 14 && (int) low != 15) ++num1; continue; } if ((int) high == 15) { isKana = false; index += num3 - 1; continue; } if ((int) low == 14) { index += num3; ++num1; isKana = true; continue; } if ((int) low == 15) { isKana = false; index += num3; ++num1; continue; } } if (high >= 128U) { flag1 = true; if (runBeganWithEscape) { if (isRunContainsIbmExtension == JisX0208PairClass.Unrecognized && this.ClassifyPair(high, low) == JisX0208PairClass.IbmExtension) isRunContainsIbmExtension = JisX0208PairClass.IbmExtension; } else break; } index += num3; num1 += 2; } if (!flag2 && index + 1 == offsetIn + lengthIn) ++index; usedIn = index - offsetIn; usedOut = num1; if (num2 != 0) leftoverByte = num2; return !flag1 || runBeganWithEscape ? ValidationResult.Valid : ValidationResult.Invalid; }
public override void Reset() { isKana = false; leftoverByte = 0; runBeganWithEscape = false; isRunContainsIbmExtension = JisX0208PairClass.Unrecognized; }
public override void ConvertToCp932(byte[] dataIn, int offsetIn, int lengthIn, byte[] dataOut, int offsetOut, int lengthOut, bool flush, Escape escape, out int usedIn, out int usedOut, out bool complete) { usedIn = 0; usedOut = 0; complete = false; var flag = false; var index1 = offsetIn; var index2 = offsetOut; var num1 = 0; var count = 0; var limit = this.CalculateLoopCountLimit(lengthIn); if (escape.IsValidEscapeSequence) { if (!this.IsEscapeSequenceHandled(escape)) throw new System.InvalidOperationException(string.Format("unhandled escape sequence: {0}", escape.Sequence)); index1 += escape.BytesInCurrentBuffer; isKana = false; leftoverByte = 0; } while (index1 < offsetIn + lengthIn) { this.CheckLoopCount(ref count, limit); uint num2; uint num3; int num4; int num5; if (leftoverByte != 0) { if (index1 != offsetIn) throw new System.InvalidOperationException(string.Format("DecodeJisX0208_1983ToCp932.ConvertToCp932: leftover byte processed at offset {0}, should have been {1}", index1, offsetIn)); num2 = leftoverByte; num3 = dataIn[index1]; num4 = 1; leftoverByte = 0; } else if (index1 + 2 <= offsetIn + lengthIn) { num2 = dataIn[index1]; num3 = dataIn[index1 + 1]; num4 = 2; } else { uint current = dataIn[index1]; if ((int) current == 27 || !runBeganWithEscape && ((int) current == 14 || (int) current == 15) || (int) current == 0) { flag = true; break; } if (isKana && (int) current != 14 && (int) current != 15) { var numArray = dataOut; var index3 = index2; var num6 = 1; num5 = index3 + num6; int num7 = this.DecodeKana(current); numArray[index3] = (byte) num7; ++num1; ++index1; } break; } if ((int) num2 == 27) { runBeganWithEscape = false; flag = true; break; } if ((int) num2 == 0) { flag = true; break; } if ((int) num3 == 27) { runBeganWithEscape = false; flag = true; ++index1; if (isKana && (int) num2 != 14) { if ((int) num2 == 15) { isKana = false; break; } var numArray = dataOut; var index3 = index2; var num6 = 1; num5 = index3 + num6; int num7 = this.DecodeKana(num2); numArray[index3] = (byte) num7; ++num1; } break; } if ((int) num3 == 0) { flag = true; ++index1; if (isKana && (int) num2 != 14) { if ((int) num2 == 15) { isKana = false; break; } var numArray = dataOut; var index3 = index2; var num6 = 1; num5 = index3 + num6; int num7 = this.DecodeKana(num2); numArray[index3] = (byte) num7; ++num1; } break; } if (!runBeganWithEscape) { if ((int) num2 == 14 || (int) num2 == 15 || ((int) num3 == 14 || (int) num3 == 15)) { flag = true; break; } } else if ((int) num2 == 14) { isKana = true; index1 += num4; switch (num3) { case 14U: continue; case 15U: isKana = false; continue; default: dataOut[index2++] = this.DecodeKana(num3); ++num1; continue; } } else { if ((int) num2 == 15) { isKana = false; index1 += num4 - 1; continue; } if ((int) num3 == 14) { index1 += num4; dataOut[index2] = isKana ? this.DecodeKana(num2) : (byte) 165; ++index2; ++num1; isKana = true; continue; } if ((int) num3 == 15) { dataOut[index2] = isKana ? this.DecodeKana(num2) : (byte) 165; index1 += num4; ++num1; ++index2; isKana = false; continue; } } if (index2 + 2 <= offsetOut + lengthOut) { if (isKana) { dataOut[index2] = this.DecodeKana(num2); dataOut[index2 + 1] = this.DecodeKana(num3); } else if (num2 >= 128U) { switch (this.ClassifyPair(num2, num3)) { case JisX0208PairClass.Unrecognized: case JisX0208PairClass.Cp932: dataOut[index2] = (byte) num2; dataOut[index2 + 1] = (byte) num3; break; case JisX0208PairClass.IbmExtension: isRunContainsIbmExtension = JisX0208PairClass.IbmExtension; byte highOut; byte lowOut; this.MapIbmExtensionToCp932(num2, num3, out highOut, out lowOut); dataOut[index2] = highOut; dataOut[index2 + 1] = lowOut; break; case JisX0208PairClass.IbmExtension | JisX0208PairClass.Cp932: if (isRunContainsIbmExtension != JisX0208PairClass.IbmExtension) goto case JisX0208PairClass.Unrecognized; goto case JisX0208PairClass.IbmExtension; default: throw new System.InvalidOperationException("unrecognized pair class, update DecodeJisX0208_1983.DecodeToCp932"); } } else { var num6 = ((int) num2 & 1) != 1 ? num3 + 125U : num3 + 31U; if (num6 >= (uint) sbyte.MaxValue) ++num6; var num7 = (num2 - 33U >> 1) + 129U; if (num7 > 159U) num7 += 64U; dataOut[index2] = (byte) num7; dataOut[index2 + 1] = (byte) num6; } index1 += num4; index2 += 2; num1 += 2; } else break; } if (!flag && index1 + 1 == offsetIn + lengthIn) leftoverByte = dataIn[index1++]; usedIn = index1 - offsetIn; usedOut = num1; complete = index1 == offsetIn + lengthIn; }