ตัดคำบน Firefox ด้วย Carbon API

หลังจากที่มั่วมาได้สักพักก็พอหาท่า ตัดคำบน Firefox ด้วย Carbon API ไม่ได้ใช้ ATSUI แต่ว่าใช้ Core service เลย. ที่จะ post ให้ดูนี่มันอาจจะช้า สกปรก หรือแม้แต่ผิด. แต่มันก็เริ่มจะทำ line breaking ได้ละ🙂.

#include "nsComplexBreaker.h"
#include <Carbon/Carbon.h>
#include <stdio.h>

void
NS_GetComplexLineBreaks(const PRUnichar* aText, PRUint32 aLength,
PRPackedBool* aBreakBefore)
{
  OSStatus status = noErr;
  NS_ASSERTION(aText, "aText shouldn't be null");
  TextBreakLocatorRef breakLocator;
  UniCharArrayOffset position;

  status = UCCreateTextBreakLocator(NULL, 0, kUCTextBreakWordMask,
                                    &breakLocator);
  UniChar *buf = new UniChar[aLength];
  for(UniCharArrayOffset i = 0; i < aLength; ++i)
  {
    printf("@@@ i=%lu ch=0x%X\n", i, aText[i]);
    buf[i] = aText[i];
  }

  if(status == noErr)
  {
     UniCharArrayOffset offset;
     for(position = 0; position < aLength;)
    {
       UCTextBreakOptions opt = (position == 0 ? kUCTextBreakLeadingEdgeMask : 0);
       UCFindTextBreak(breakLocator,
                   kUCTextBreakWordMask,
                   opt,
                   (const UniChar *)buf,
                   aLength,
                   position,
                   &offset);
                   aBreakBefore[offset] = PR_TRUE;
                   position = offset + 1;
                   printf("!!! position %lu\n", position);
    }
    UCDisposeTextBreakLocator(&breakLocator);
  }
  delete[] buf;
}

intl/lwbrk/src/nsCarbonBreaker.cpp.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s