On Thu, 9 Nov 2000, Vlad Harchev wrote:

> On Thu, 9 Nov 2000, Belcon Zhao wrote:
> 
>  Hello Belcon,
> 
>  It seems I found a solution to the problem. It's my silly bug in RTF
> exporter. I'm very sorry for it. (Though I don't have CJK locale to test
> solution). In ie_exp_RTF_listenerWriteDoc.cpp, in function 
> s_RTF_ListenerWriteDoc::_outputData there are following strings:
>                                 if (c>0x007f) {
>                                         m_pie->_rtf_keyword("uc",0);
>                                         signed short si = *((signed short *)c);
>                                         m_pie->_rtf_keyword("u",si);
> 
>                                 } else {
>                                         *pBuf++ = (UT_Byte)c;
>                                 };
>  They should be changed to:
>                                 if (c>0x007f) {
>                                       FlushBuffer();
>                                         m_pie->_rtf_keyword("uc",0);
>                                         signed short si = *((signed short*)c);
>                                         m_pie->_rtf_keyword("u",si);
> 
>                                 } else {
>                                         *pBuf++ = (UT_Byte)c;
>                                 };
> I.e. FlushBuffer(); inserted. 
> Please report whether this solves the problem.
>  If yes, then it seems AW is fully CJK-aware. 

 Ups, my file was screwed up - that piece is absent in CVS (and it's OK -
don't commit that branch.)
 Current file has
                       m_wctomb.wctomb_or_fallback(mbbuf,mblen,*pData++);
                       for(int i=0;i<mblen;++i) {
                               unsigned char c = mbbuf[i];
                               if ( c > 0x007f)
                                       m_pie->_rtf_nonascii_hex2(c);
                               else
                                       *pBuf++ = c;

                       };
 Should be changed to
                       m_wctomb.wctomb_or_fallback(mbbuf,mblen,*pData++);
                       for(int i=0;i<mblen;++i) {
                               unsigned char c = mbbuf[i];
                               if ( c > 0x007f) {
                                       FlushBuffer();   
                                       m_pie->_rtf_nonascii_hex2(c);
                               } else
                                       *pBuf++ = c;
                       };

 I.e. FlushBuffer(); inserted again.

 I'm sorry for confusion.

 Best regards,
  -Vlad




Reply via email to