293 {
294 GB18030Decoder gB18030Decoder = (GB18030Decoder)baseDecoder;
296 short num = -1;
297 short num2 = -1;
298 short num3 = -1;
299 short num4 = -1;
300 if (gB18030Decoder != null && gB18030Decoder.bLeftOver1 != -1)
301 {
302 num = gB18030Decoder.bLeftOver1;
303 num2 = gB18030Decoder.bLeftOver2;
304 num3 = gB18030Decoder.bLeftOver3;
305 num4 = gB18030Decoder.bLeftOver4;
306 while (num != -1)
307 {
309 {
310 if (num <= 127)
311 {
312 if (!encodingCharBuffer.AddChar((char)num))
313 {
314 break;
315 }
316 }
317 else if (!encodingCharBuffer.Fallback((byte)num))
318 {
319 break;
320 }
321 num = num2;
322 num2 = num3;
323 num3 = num4;
324 num4 = -1;
325 continue;
326 }
328 {
329 if (!encodingCharBuffer.MoreData)
330 {
331 if (gB18030Decoder.MustFlush)
332 {
333 break;
334 }
336 {
337 gB18030Decoder.bLeftOver1 = num;
338 gB18030Decoder.bLeftOver2 = num2;
339 gB18030Decoder.bLeftOver3 = num3;
340 gB18030Decoder.bLeftOver4 = num4;
341 }
342 gB18030Decoder.m_bytesUsed = encodingCharBuffer.BytesUsed;
343 return encodingCharBuffer.Count;
344 }
345 if (num2 == -1)
346 {
347 num2 = encodingCharBuffer.GetNextByte();
348 }
349 else if (num3 == -1)
350 {
351 num3 = encodingCharBuffer.GetNextByte();
352 }
353 else
354 {
355 num4 = encodingCharBuffer.GetNextByte();
356 }
357 }
359 {
360 int num5 = num << 8;
361 num5 |= (byte)num2;
363 {
364 break;
365 }
366 num = -1;
367 num2 = -1;
368 }
370 {
372 if (fourBytesOffset <= 39419)
373 {
375 {
376 break;
377 }
378 }
379 else if (fourBytesOffset >= 189000 && fourBytesOffset <= 1237575)
380 {
381 fourBytesOffset -= 189000;
382 if (!encodingCharBuffer.AddChar((char)(55296 + fourBytesOffset / 1024), (char)(56320 + fourBytesOffset % 1024), 4))
383 {
384 break;
385 }
386 }
387 else if (!encodingCharBuffer.Fallback((byte)num, (byte)num2, (byte)num3, (byte)num4))
388 {
389 break;
390 }
391 num = -1;
392 num2 = -1;
393 num3 = -1;
394 num4 = -1;
395 }
396 else
397 {
398 if (!encodingCharBuffer.Fallback((byte)num))
399 {
400 break;
401 }
402 num = num2;
403 num2 = num3;
404 num3 = num4;
405 num4 = -1;
406 }
407 }
408 }
409 while (encodingCharBuffer.MoreData)
410 {
411 byte nextByte = encodingCharBuffer.GetNextByte();
412 if (nextByte <= 127)
413 {
414 if (!encodingCharBuffer.AddChar((char)nextByte))
415 {
416 break;
417 }
418 }
420 {
421 if (encodingCharBuffer.MoreData)
422 {
423 byte nextByte2 = encodingCharBuffer.GetNextByte();
425 {
426 int num6 = nextByte << 8;
427 num6 |= nextByte2;
429 {
430 break;
431 }
432 }
434 {
435 if (encodingCharBuffer.EvenMoreData(2))
436 {
437 byte nextByte3 = encodingCharBuffer.GetNextByte();
438 byte nextByte4 = encodingCharBuffer.GetNextByte();
440 {
442 if (fourBytesOffset2 <= 39419)
443 {
445 {
446 break;
447 }
448 }
449 else if (fourBytesOffset2 >= 189000 && fourBytesOffset2 <= 1237575)
450 {
451 fourBytesOffset2 -= 189000;
452 if (!encodingCharBuffer.AddChar((char)(55296 + fourBytesOffset2 / 1024), (char)(56320 + fourBytesOffset2 % 1024), 4))
453 {
454 break;
455 }
456 }
457 else if (!encodingCharBuffer.Fallback(nextByte, nextByte2, nextByte3, nextByte4))
458 {
459 break;
460 }
461 }
462 else
463 {
464 encodingCharBuffer.AdjustBytes(-3);
465 if (!encodingCharBuffer.Fallback(nextByte))
466 {
467 break;
468 }
469 }
470 continue;
471 }
472 if (gB18030Decoder != null && !gB18030Decoder.MustFlush)
473 {
475 {
476 num = nextByte;
477 num2 = nextByte2;
478 num3 = (
short)((!encodingCharBuffer.MoreData) ? (-1) : encodingCharBuffer.GetNextByte());
479 num4 = -1;
480 }
481 break;
482 }
483 if (!encodingCharBuffer.Fallback(nextByte, nextByte2))
484 {
485 break;
486 }
487 }
488 else
489 {
490 encodingCharBuffer.AdjustBytes(-1);
491 if (!encodingCharBuffer.Fallback(nextByte))
492 {
493 break;
494 }
495 }
496 continue;
497 }
498 if (gB18030Decoder != null && !gB18030Decoder.MustFlush)
499 {
501 {
502 num = nextByte;
503 num2 = -1;
504 num3 = -1;
505 num4 = -1;
506 }
507 break;
508 }
509 if (!encodingCharBuffer.Fallback(nextByte))
510 {
511 break;
512 }
513 }
514 else if (!encodingCharBuffer.Fallback(nextByte))
515 {
516 break;
517 }
518 }
519 if (gB18030Decoder != null)
520 {
522 {
523 gB18030Decoder.bLeftOver1 = num;
524 gB18030Decoder.bLeftOver2 = num2;
525 gB18030Decoder.bLeftOver3 = num3;
526 gB18030Decoder.bLeftOver4 = num4;
527 }
528 gB18030Decoder.m_bytesUsed = encodingCharBuffer.BytesUsed;
529 }
530 return encodingCharBuffer.Count;
531 }
unsafe char * mapBytesToUnicode
int GetFourBytesOffset(short offset1, short offset2, short offset3, short offset4)
bool IsGBLeadByte(short ch)
bool IsGBTwoByteTrailing(short ch)
unsafe char * map4BytesToUnicode
bool IsGBFourByteTrailing(short ch)