Я бы начал с создания работоспособной версии rpmbuild
:
unrpm
, rpm2cpio
и т.д. configure
опции, что и в %configure
части spec-файла. rpmbuild
для сборки из ее исходного-RPM. После этого вы должны быть готовы к сборке пакетов на Fedora13.
Локаль действительно сложная. Цель состоит в том, чтобы получить что-то, что "кажется нормальным" для нетехнических пользователей. (Технические специалисты могут использовать LANG = C
, чтобы получить это теплое нечеткое ощущение.) Техническое определение - это стандартный документ Unicode , и я попытался выделить здесь кое-что из этого. Исправления приняты.
Мне интересно прочитать, что локаль - это свойство пользователя, обрабатывающего данные, а не самих данных. В техническом документе дается несколько подробностей, чтобы прояснить это со ссылкой на то, что порядок сортировки для немецкого пользователя отличается от порядка сортировки для шведского пользователя, даже если символы, используемые в примерах строк, совпадают.
Локали en_GB и en_US настроены так, чтобы игнорировать символ -
. Очень упрощенные правила сортировки этих локалей по возрастанию:
xyzA
всегда после xyz
-
) игнорируется, если не сравнивается с другой пунктуацией 0
.. 9
[Aa]
.. [Zz]
(en_GB и en_US действительно не имеют акцентов) Применение этих правил к рассматриваемым наборам данных:
a_1 a_10 a_11 a_12
Это эквивалентно a1
a10
a11
a12
, и, учитывая правило № 2, мы получаем, что a1
должен быть перед a10
и a11
. Все, кроме a1
, имеет одинаковое количество буквенно-цифровых символов, поэтому их можно сравнивать последовательно. Это дает нам a_1
a_10
a_11
a_12
.
a_10-18 a_11-18 a_1-18 a_12-18
Применяются те же правила, за исключением того, что также применяется пункт 3 (мы игнорируем пунктуацию). Это означает, что мы можем рассматривать значения как a_1018
a_1118
a_118
a_1218
, и, следуя правилам №2 и №4, мы получаем порядок a_10-18
а_11-18
а_1-18
а_12-18
.
Взяв наш последний пример из комментариев
a_10 a_10- a_100 a_101 a_10-18 a_102
Применяются правила №3, а затем №2, №4. Поэтому мы удаляем (игнорируем) символы -
, давая нам a_10
a_10
a_100
a_101
a_1018
a_102
, а остаток сортируем по общий префикс подстроки, а затем по порядку символов.
(Мне непонятно, получим ли мы a_10
, а затем a_10-
в силу длины, или просто потому, что так получилось. Я испытываю искушение чтобы предложить последнее, но я хотел бы, чтобы кто-нибудь это подтвердил.)
В лексикографическом порядке a_1
предшествует любой другой строке, начинающейся с a_1
. Поскольку цифры расположены в числовом порядке в любой приемлемой локали, из этого следует, что в любой разумной локали, a_1
< a_10
< a_11
< a_12
].
Если вы добавите общий суффикс к этим строкам, порядок может измениться, потому что этот общий суффикс может быть отсортирован где-то посередине. Во втором примере четыре строки начинаются с общего префикса a_1
и с соответствующих суффиксов 0-18
, 1-18
, -18
и 2-18
. В локали C строки сравниваются на строгой лексикографической основе; -
идет перед цифрами, поэтому сначала идет -18
: a_10-18
< a_11-18
< a_1-18
< а_12-18
. Но в большинстве других мест сложнее. В частности, знаки препинания игнорируются, за исключением крайних случаев. Итак, чтобы сравнить строки
a_10-18
< a_11-18
< a_1-18
< a_12-18
, сначала вы сравниваете строки без пунктуации a1018
, a1118
a118
a1218
; порядок второй цифры 0
< 1
< 1
< 2
, а для двух средних строк порядок третьей цифра 1
< 8
.Если вы добавите строку, которая отличается только знаками препинания, то разные знаки препинания будут определять способ сортировки, например a_10-18
< a_1-118
< a_11-18
< a_12-18
Объяснение в моем ответе упрощено. Может быть больше двух проходов, чтобы справиться с такими вещами, как пунктуация.В Руководстве пользователя ICU есть довольно подробное объяснение (но даже оно не учитывает всех тонкостей, связанных с сортировкой таких вещей, как указатели книг).