CFCharacterSet
является бесплатной связью с аналогом Cocoa Foundation NSCharacterSet
и может быть соединена с соответствующим типом значения Swift CharacterSet
:
let charset = CTFontCopyCharacterSet(ctFont) as CharacterSet
Тогда подход из NSArray из NSCharacterSet можно использовать для перечисления всех скалярных значений Unicode этого набора символов (включая точки, отличные от BMP, т.е. скалярные значения Unicode, превышающие U + FFFF).
CTFontGetGlyphsForCharacters()
ожидает, что символы не-BMP являются суррогатной парой, то есть массивом кодовых единиц UTF-16.
Если сложить все вместе, функция будет выглядеть так:
func createUnicodeFontMap(ctFont: CTFont) -> [CGGlyph : UnicodeScalar] {
let charset = CTFontCopyCharacterSet(ctFont) as CharacterSet
var glyphToUnicode = [CGGlyph : UnicodeScalar]() // Start with empty map.
// Enumerate all Unicode scalar values from the character set:
for plane: UInt8 in 0...16 where charset.hasMember(inPlane: plane) {
for unicode in UTF32Char(plane) << 16 ..< UTF32Char(plane + 1) << 16 {
if let uniChar = UnicodeScalar(unicode), charset.contains(uniChar) {
// Get glyph for this `uniChar` ...
let utf16 = Array(uniChar.utf16)
var glyphs = [CGGlyph](repeating: 0, count: utf16.count)
if CTFontGetGlyphsForCharacters(ctFont, utf16, &glyphs, utf16.count) {
// ... and add it to the map.
glyphToUnicode[glyphs[0]] = uniChar
}
}
}
}
return glyphToUnicode
}
Мои ls по умолчанию сортируются по имени. Что вы видите?
man ls
заявляет:
Вывести информацию о ФАЙЛАХ (текущий каталог по умолчанию). Сортировка записей в алфавитном порядке, если не указаны ни -cftuvSUX, ни --sort.
:
Для чего-то простого вы можете объединить ls с sort . Просто список имен файлов:
ls -1 | sort
Чтобы отсортировать их в обратном порядке:
ls -1 | sort -r
На странице руководства (для bash ls):
Сортировка записей в алфавитном порядке, если нет ни -cftuSUX, ни --sort.
ВНИМАНИЕ: "a" появляется ПОСЛЕ "Z":
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa .txt