Ticket #6227: terminal-6227.patch

File terminal-6227.patch, 1.9 KB (added by h.z, 14 years ago)

fix for these 2 issues, tested under UTF-8/GBK conversions

  • BasicTerminalBuffer.cpp

    diff -Naur terminal.orig/BasicTerminalBuffer.cpp terminal/BasicTerminalBuffer.cpp
    old new  
    558558//(int)c.ByteCount(), c.bytes, c.bytes[0], attributes);
    559559    if ((int32)width == FULL_WIDTH)
    560560        attributes |= A_WIDTH;
     561    else if (c.IsFullWidth())
     562    {
     563        attributes |= A_WIDTH;
     564        width = 2;
     565    }
    561566
    562567    if (fSoftWrappedCursor || fCursor.x + (int32)width > fWidth)
    563568        _SoftBreakLine();
  • TermParse.cpp

    diff -Naur terminal.orig/TermParse.cpp terminal/TermParse.cpp
    old new  
    376376                parsestate = groundtable;
    377377                currentEncoding = fBuffer->Encoding();
    378378            }
    379 
    380379    //debug_printf("TermParse: char: '%c' (%d), parse state: %d\n", c, c, parsestate[c]);
    381             switch (parsestate[c]) {
     380            int parsestatus = parsestate[c];
     381            if(currentEncoding == B_GBK_CONVERSION)
     382            {
     383                if ((c > 0xA1 && c < 0xA9)
     384                    || (c>0xB0 && c< 0xF7)
     385                    || (c>0x81 && c< 0xA0)
     386                    || (c>0xAA && c< 0xFE)
     387                    || (c>0xA8 && c< 0xA9))
     388                    parsestatus = CASE_PRINT_GR;
     389            }
     390            switch (parsestatus) {
    382391                case CASE_PRINT:
    383392                    fBuffer->InsertChar((char)c, fAttr);
    384393                    break;
     
    425434                    }
    426435
    427436                    srcLen = strlen(cbuf);
     437                    dstLen = 4;
    428438                    if (currentEncoding != B_JIS_CONVERSION) {
    429439                        convert_to_utf8(currentEncoding, cbuf, &srcLen,
    430440                            dstbuf, &dstLen, &dummyState, '?');
  • UTF8Char.h

    diff -Naur terminal.orig/UTF8Char.h terminal/UTF8Char.h
    old new  
    5757
    5858    bool IsFullWidth() const
    5959    {
    60         // TODO: Implement!
    61         return false;
     60        return ((unsigned char)bytes[0] > 0xe0);
    6261    }
    6362
    6463    bool IsSpace() const