Hi Eljay,

2009/6/23 John (Eljay) Love-Jensen:
>
>> As far as I can tell (from searching around) HFS+ always uses
>> normalization form D (NFD) for filenames.
>
> HFS+ uses a variant of NFD for filenames.  (The HFS+ variant predates
> standardizatoin of NFD.)  This requirement is enforced by the OS.
>
> http://developer.apple.com/technotes/tn/tn1150.html
> http://developer.apple.com/technotes/tn/tn1150table.html
> http://developer.apple.com/qa/qa2001/qa1235.html
> http://www.unicode.org/reports/tr15/

Thanks for clarifying that (and for the links!).

> Windows uses NFC for filenames.  I'm not sure if the Linux world settled on
> NFC or NFK.

I read that Windows uses NFKC.  Have you got a reference for the claim
that NFC is used?

>> So as a workaround for the issue the OP had I now normalize filenames
>> to compatibility form C (NFKC) before passing the filename on to Vim
>> and this takes care of the OP's problem.
>
> NFC or NFKC?  Those are different normalizations.
>
> Windows NTFS file system uses NFC.  But it isn't enforced by the OS, yet.

I did mean the compatibility form NFKC since I read somewhere that
NTFS uses NFKC, but I did not research that very carefully.


>> However, as I see it this really is a legitimate issue in Vim itself
>> in that it does not handle NFD properly (the example above should
>> always render as one glyph, not three as it does now if NFD is used).
>> Either Vim should ensure that all buffers are normalized to composed
>> form NFC/NFKC or it needs to be made "NFD aware".
>
> I agree with your assessment.
>
>> Does anybody on the vim_multibyte list (this mail goes to vim_mac as
>> well) have any comments on this?
>
> The relevant Mac OS X routine APIs are:
>
> CFURLRef url =
> CFURLCreateWithFileSystemPath(
>  kCFAllocatorDefault,
>  cfstringFullPath,
>  kCFURLPOSIXPathStyle,
>  false));
>
> char bufferUTF8[32768*4]; // Worst case scenario.
> // As per Apple documentation, paths can be "up to 30,000 UTF-16
> // encoding units long", with each component being up to 255 UTF-16
> // encoding units long.  Too bad there isn't an API to specify the
> // exact buffer size /a priori/.
>
> Boolean success =
> CFURLGetFileSystemRepresentation(
>  url,
>  true,
>  &bufferUTF8[0],
>  sizeof bufferUTF8);

Thanks.  NSString has a method called fileSystemRepresentation which
I'm guessing does the same thing(?).  I used the NSString method
precomposedStringWithCompatibilityMapping to convert to NFKC.

Björn

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_mac" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Reply via email to