[sword-devel] indexed search discrepancy

Matthew Talbert ransom1982 at gmail.com
Fri Aug 28 15:38:16 MST 2009


TCHAR is even more ambigous than wchar-t. if UNICODE is defined then
TCHAR is wchar-t. otherwise, it is plain char. I'm away form my
computer but clucene is definitely converting to utf16 or utf32
depending on platform. so i think it is always proper unicode. one way
or another, the field needs to be converted to a wchar-t containing
utf 16/32

On 8/28/09, Troy A. Griffitts <scribe at crosswire.org> wrote:
> Thanks again Matthew.  Writing quick for lack of time right now.
>
> In general, we avoid the use of wchar_t because it is define differently
> on different systems, making its intended use (as a unicode character)
> holder at best essentially useless for anything other than UTF-16, and
> at least confusing and ambiguous.
>
> I could probably look this up, but since you know where everything is in
> clucene by now...
>
> What EXACTLY is TCHAR defined as (i.e. what is sizeof(TCHAR))?  Same on
> all platforms?
>
> What does lucene_utf8towc return? TCHAR? wchar_t?
>
> What I'm trying to determine is:
>
> Is clucene expecting UTF-16
> (which can represent 15 bits of unicode glyph space in 2 bytes,
> reserving the upper bit as a multicode indicator, and if set then moves
> to 4+ bytes after 15 bits)?
>
> ... or is clucene just saying 16 bits of unicode glyph space is good
> enough for government work; we're not gonna worry about the rest?
>
> From the pros in the definition of the method you gave, it sounds like
> knowing the sizeof the return value for lucene_utf8towc might tell us
> the answer.
>
> Thanks again for doing the legwork.
>
> 	-Troy.
>
>
>
>
> Matthew Talbert wrote:
>>>> We have methods to convert to both UTF-16 and UTF-32 in our engine,
>>>> which don't need a fixed length buffer, so I would like to replace:
>>>>
>>>> lucene_utf8towcs(wcharBuffer, content, MAX_CONV_SIZE);
>>>>
>>>> with a call to our code, if we can nail down exactly what clucene wants
>>>> in the resultant wcharBuffer
>>
>> lucene_utf8towcs calls lucene_utf8towc for every character; the
>> comment on the function is this:
>>
>> /**
>>  * lucene_utf8towc:
>>  * @p: a pointer to Unicode character encoded as UTF-8
>>  *
>>  * Converts a sequence of bytes encoded as UTF-8 to a Unicode character.
>>  * If @p does not point to a valid UTF-8 encoded character, results are
>>  * undefined. If you are not sure that the bytes are complete
>>  * valid Unicode characters, you should use lucene_utf8towc_validated()
>>  * instead.
>>  *
>>  * Return value: the resulting character
>>  **/
>>
>> The call to doc->Add actually expects a TCHAR, so if your utf8 to
>> utf16 conversion can produce a TCHAR, then that's all that would be
>> necessary I think.
>>
>> Matthew
>>
>> _______________________________________________
>> sword-devel mailing list: sword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/sword-devel
>> Instructions to unsubscribe/change your settings at above page
>
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>



More information about the sword-devel mailing list