Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetBytesCP50225KR()

unsafe int System.Text.ISO2022Encoding.GetBytesCP50225KR ( char * chars,
int charCount,
byte * bytes,
int byteCount,
ISO2022Encoder encoder )
inlineprivate

Definition at line 438 of file ISO2022Encoding.cs.

439 {
440 EncodingByteBuffer encodingByteBuffer = new EncodingByteBuffer(this, encoder, bytes, byteCount, chars, charCount);
441 ISO2022Modes iSO2022Modes = ISO2022Modes.ModeASCII;
442 ISO2022Modes iSO2022Modes2 = ISO2022Modes.ModeASCII;
443 if (encoder != null)
444 {
445 char charLeftOver = encoder.charLeftOver;
446 iSO2022Modes = encoder.currentMode;
447 iSO2022Modes2 = encoder.shiftInOutMode;
448 if (charLeftOver > '\0')
449 {
450 encodingByteBuffer.Fallback(charLeftOver);
451 }
452 }
453 while (encodingByteBuffer.MoreData)
454 {
455 char nextChar = encodingByteBuffer.GetNextChar();
456 ushort num = mapUnicodeToBytes[(int)nextChar];
457 byte b = (byte)(num >> 8);
458 byte b2 = (byte)(num & 0xFFu);
459 if (b != 0)
460 {
461 if (iSO2022Modes2 != ISO2022Modes.ModeKR)
462 {
463 if (!encodingByteBuffer.AddByte((byte)27, (byte)36, (byte)41, (byte)67))
464 {
465 break;
466 }
467 iSO2022Modes2 = ISO2022Modes.ModeKR;
468 }
469 if (iSO2022Modes != ISO2022Modes.ModeKR)
470 {
471 if (!encodingByteBuffer.AddByte(14))
472 {
473 break;
474 }
475 iSO2022Modes = ISO2022Modes.ModeKR;
476 }
477 if (!encodingByteBuffer.AddByte(b, b2))
478 {
479 break;
480 }
481 }
482 else if (num != 0 || nextChar == '\0')
483 {
484 if (iSO2022Modes != ISO2022Modes.ModeASCII)
485 {
486 if (!encodingByteBuffer.AddByte(15))
487 {
488 break;
489 }
490 iSO2022Modes = ISO2022Modes.ModeASCII;
491 }
492 if (!encodingByteBuffer.AddByte(b2))
493 {
494 break;
495 }
496 }
497 else
498 {
499 encodingByteBuffer.Fallback(nextChar);
500 }
501 }
502 if (iSO2022Modes != ISO2022Modes.ModeASCII && (encoder == null || encoder.MustFlush))
503 {
504 if (encodingByteBuffer.AddByte(15))
505 {
506 iSO2022Modes = ISO2022Modes.ModeASCII;
507 }
508 else
509 {
510 encodingByteBuffer.GetNextChar();
511 }
512 }
513 if (bytes != null && encoder != null)
514 {
515 if (!encodingByteBuffer.fallbackBufferHelper.bUsedEncoder)
516 {
517 encoder.charLeftOver = '\0';
518 }
519 encoder.currentMode = iSO2022Modes;
520 if (!encoder.MustFlush || encoder.charLeftOver != 0)
521 {
522 encoder.shiftInOutMode = iSO2022Modes2;
523 }
524 else
525 {
526 encoder.shiftInOutMode = ISO2022Modes.ModeASCII;
527 }
528 encoder.m_charsUsed = encodingByteBuffer.CharsUsed;
529 }
530 return encodingByteBuffer.Count;
531 }

References System.Text.Encoding.EncodingByteBuffer.AddByte(), System.byteCount, System.bytes, System.charCount, System.Text.EncoderNLS.charLeftOver, System.chars, System.Text.Encoding.EncodingByteBuffer.CharsUsed, System.Text.Encoding.EncodingByteBuffer.Count, System.Text.ISO2022Encoding.ISO2022Encoder.currentMode, System.Text.Encoding.EncodingByteBuffer.GetNextChar(), System.Text.DBCSCodePageEncoding.mapUnicodeToBytes, System.Text.Encoding.EncodingByteBuffer.MoreData, System.Text.EncoderNLS.MustFlush, and System.Text.ISO2022Encoding.ISO2022Encoder.shiftInOutMode.

Referenced by System.Text.ISO2022Encoding.GetBytes().