When reading a U16 font name from the SFNTNameTable, a name entry
with platformID == 1 (Macintosh) and platformSpecificID
(aka encodingID) == 0 (Roman) is read as Mac Roman and converted
to U16.
This patch refactors the matchers created in CreateCanonicalU16Matchers
to return name encoding type instead of a boolean. The encoding
type can then be used to call the appropriate decoding function.
CreateCanonicalU16Matchers is also changed so that it doesn't
enqueue unnecessary matchers on OS X. On OS X, if the nametable
record's platformID field is PLATFORM_ID, IsUTF16Encoding() will
always return false so matchers requiring both of those conditions
will never match.
There are several other platformSpecificID's in Mac SFNTameTables
such as Japanese, Traditional Chinese, and Korean. Fonts with names
in those encodings won't have their names properly encoded, but
that should be OK as SFNTData::GetUniqueKey falls back to another
scheme for hashing fonts if the GetU16FullName call fails.
Tests on El Capitan and Sierra revealed Mac's use Microsoft/Unicode
SFNTNameTable names as well as Mac/Roman.
MozReview-Commit-ID: F8fyDVDwHs7
--HG--
extra : transplant_source : %F6%3F%5B%E9y%FD%93%8C%26s%D1n%FC%AEYp%5C%3D%A6j