- #UCA_版本
-
如果给定UCA的修订号(以前称为“跟踪版本”),则会在排序时模拟该修订的行为。如果省略UCA_版本()
使用。
支持以下修订。默认值为43。
UCA Unicode标准DUCET(@版本)-------------------------------------------------------8 3.1 3.0.1(3.0.1d9)9 3.1及勘误表3 3.1.111 4.0.014 4.1.016 5.0.018 5.1.020 5.2.022 6.0.024 6.1.026 6.2.028 6.3.030 7.0.032 8.0.034 9.0.036 10.0.038 11.0.040 12.0.041 12.1.043 13.0.0
*参见下文长期合同
具有UCA_版本
22和24。
*非字符(例如U+FFFF)不会被忽略,并且可以被覆盖,因为UCA_版本
22
*超出范围的代码点(大于U+10FFFF)不会被忽略,并且可以被覆盖,因为UCA_版本
22
*完全可忽略的字符被忽略,并且不会中断与UCA_版本
9和11。
*变量和一些行为改变后可忽略项的处理UCA_版本
9
*被视为中日韩统一表意文字的字符(参见。覆盖CJK
)取决于UCA_版本
.
*许多韩国人被派往UCA_版本
20,这将影响hangul_终端
.
- #候补
-
--参见UTS#10第8版3.2.2替代权重
为了向后兼容,候补
(旧名称)可以用作的别名变量
.
- #向后的
-
--参见3.4后向重音,UTS#10。
向后=>$levelNumber或\@levelNumbers
重量顺序相反;例如,法语中的第二级(发音顺序)。如果省略(或$levelNumber($level编号)
是未定义
或\@级别编号
是[]
),在所有级别进行转发。
- #进入
-
--见5裁剪;9.1 Allkeys文件格式,UTS#10。
如果排序规则元素表中通过桌子
,将覆盖到排序规则元素的映射。如果不存在,则会另外定义映射。
entry=><<'entry',#用于DUCET v4.0.0(allkeys-4.0.0.txt)0063 0068 ; [0E6A.0020.0002.0063]#ch0043 0068 ; [0E6A.0020.0007.0043]#通道0043 0048 ; [0E6A.0020.0008.0043]#CH(中国)006C 006C;[0F4C.0020.0002.006C]#ll号004C 006C;[0F4C.0020.0007.004C]#升004C 004C;[0F4C.0020.0008.004C]#LL号00F1;[0F7B.0020.0002.000F1]#n-波浪线006E 0303;[0F7B.0020.0002.000F1]#n-波浪线00D1;[0F7B.0020.0008.00D1]#N波浪线004E 0303;[0F7B.0020.0008.00D1]#N波浪线入口entry=><<'entry',#用于DUCET v4.0.0(allkeys-4.0.0.txt)00E6;[0E33.0020.0002.00E6][.0E8B.0020.0002.00 E6]#ae结扎为<a><e>00C6;[0E33.0020.0008.00C6][.0E8B.0020.0008.0C6]#AE结扎为<A><E>入口
注:UCA文件格式中的代码点(之前';'
)必须是Unicode代码点(定义为十六进制),但不是本机代码点。所以0063
必须始终表示U+0063号机组
,但不是的字符“\x63”
.
权重可能因排序规则元素表而异。因此,确保中定义的重量进入
将与通过加载的collation元素表中的一致桌子
.
在DUCET v4.0.0中C类
是0E60型
和的D类
是0E6D型
。因此设置主权重中国
到0E6安
(作为介于0E60型
和0电子6天
)使订购成为C<CH<D
。确切地说,DUSET已经有一些字符介于C类
和D类
:小资本C
(U+1D04型
)带主要重量0E64年
,c形钩/c形钩
(U+0188/U+0187
)带有0E65型
,以及c形卷曲
(U+0255号机组
)带有0E69年
.然后是主要重量0E6安
对于中国
制造中国
订购双方:c形卷曲
和D类
.
- #hangul_终端
-
--见7.1.4拖尾重量,UTS#10。
如果给定一个真值(非零,但应为正数),则它将作为终止符主权重添加到每个标准朝鲜文音节的末尾。终止器的次要权重和任何更高权重都设置为零。如果值为false或hangul_终端
键不存在,将不执行终止符权重的插入。
朝鲜文音节的边界是根据Jamo在Unicode标准和韩国语音节类型.txt.
实施说明:(1) 对于扩展映射(映射到排序规则元素序列的Unicode字符),不会在排序规则元素之间添加终止符,即使那里存在朝鲜文音节边界。终止符的添加限制在最后一个排序规则元素的下一个位置。
(2) 不相连的朝鲜文字字母(兼容Jamo、半宽Jamo和括起来的字母)不会自动以终止符主权重终止。这些字符可能需要在排序规则元素表中预先包含终止符。
- #最高FFFF
-
--参见2.4定制的非字符权重,UTS#35(LDML)第5部分:排序。
如果参数为true,U+FFFF(单位+FFFF)
具有最高的初级重量。当布尔值为$coll->ge($str,“abc”)
和$coll->le($str,“abc\x{FFFF}”)
是真的,预计美元str
以开头“abc”
或其他主要等效物。$str(美元)
可能是“abcd”
,“abc012”
,但不应包括U+FFFF(单位+FFFF)
例如“”abc\x“{FFFF}xyz"
.
$coll->le($str,“abc\x{FFFF}”)
工作方式类似$coll->lt($str,“abd”)
差不多,但后者有一个问题,你应该知道哪个字母在旁边c(c)
。对于某种语言,其中中国
作为下一个字母,“abch”
大于“abc\x{FFFF}”
,但小于“阿布德”
.
注:这相当于(条目=>“FFFF;[.FFFE.0020.005.FFFF]”)
。任何其他字符U+FFFF(单位+FFFF)
可以通过以下方式定制进入
.
- #完全相同的
-
--见A.3确定性比较,UTS#10。
默认情况下,权重相等的字符串应该相等,即使它们的代码点不相等。忽略完全可忽略的字符。
如果参数为true,则使用最终的断连级别。如果通过以下规定的所有水平进行比较后未发现重量差异水平
,将与代码点进行比较。对于打破平局的比较,排序键附加了原始字符串的代码点。不能忽略完全可忽略的字符。
如果预处理
和/或归一化
应用时,使用后面字符串的代码点(默认情况下为NFD)。
- #ignoreChar(忽略字符)
-
- #忽略名称
-
--见3.6可变权重,UTS#10。
使表中的条目完全不可忽略;也就是说,所有级别的权重都为零。
通过ignoreChar(忽略字符)
,任何字符匹配qr/$ignoreChar/
将被忽略。通过ignoreName(签名)
,其名称(在桌子
文件作为注释)匹配qr/$ignoreName/
将被忽略。
例如,当“a”和“E”可忽略时,“element”等于“lart”(或“lmnt”)。
- #忽略级别2
-
--参见5.1参数化裁剪,UTS#10。
默认情况下,区分大小写的比较(即级别3差异)不会忽略重音符号(即级别2差异)。
如果参数为true,则忽略重音符号(和其他可忽略的主要字符),即使考虑了大小写。
注释:水平
应为3或更大。
- #平假名之前的片假名
-
--见7.2 UTS#10三级重量表。
默认情况下,平假名位于片假名之前。如果参数为true,则相反。
注释:此参数简单地假设任何平假名/片假名区分都必须出现在级别3中,并且它们在级别3的权重必须与7.3.1 UTS#10中提到的权重相同。如果定义了违反此要求的排序规则元素,则此参数无效。
- #水平
-
--见4.3表格排序键,UTS#10。
设置最大液位。任何高于指定级别的级别都将被忽略。
级别1:字母顺序第二级:音调顺序第3级:案例排序第4级:断线(例如,当变量“移位”时)例如,级别=>2,
如果省略,最大值为第四个。
注:DUCET包括第4级0xFFFF以上的重量。但该模块仅使用0xFFFF内的权重。什么时候?变量
为“空白”或“不可忽略”(除了“移位”和“移位边缘”),则级别4可能不可靠。
另请参见完全相同的
.
- #长期合同
-
--见3.8.2 DUCET的井型,4.2生产阵列,UTS#10。
如果参数为true,那么对于包含三个或更多字符的压缩(这里昵称为“长压缩”),将处理初始子字符串。例如,即使没有AB作为收缩,也会检测到收缩ABC,其中a是起始符,B和C是非起始符(具有非零组合字符类的字符)。
违约:通常为假。如果UCA_版本
为22或24,并且长期合同
未在中指定新建()
,则隐式设置true值。这是通过Unicode 6.0.0和6.1.0一致性测试的一种解决方法。
更改()
把手长期合同
仅显式地。如果长期合同
未在中指定更改()
尽管如此UCA_版本
被改变,长期合同
不会更改。
限制:扫描非启动程序是单向的(无回溯)。如果找到AB,但没有找到ABC,则可能找不到第一个字符为A,第二个字符不是B的其他长缩写。
低于(规范化=>undef)
,将跳过不连续收缩的检测步骤。
注:步骤S2.1.1至S2.1.3中未考虑DUCET中的以下收缩,因为它们是不连续的。
0FB2 0F71 0F80(西藏VOWEL标志语音RR)0FB3 0F71 0F80(西藏VOWEL标志语音LL)
例如西藏VOWEL标志语音RR
具有组合瓷砖覆盖层
(U+0344号机组
)是0FB2 0344 0F71 0F80
在NFD中。在这种情况下0FB2 0F80型
(西藏VOWEL标志语音R
)检测到,而不是0FB2 0F71 0F80
.已插入0344
制造0FB2 0F71 0F80
不连续且缺乏收缩0FB2 0F71型
禁止0平方英尺2 0平方英尺71 0平方英尺80
不会被检测到。
- #最小FFFE
-
--见1.1.1 U+FFFE,UTS#35(LDML)第5部分:校对。
如果参数为true,U+FFFE
具有最小的主要重量。两者的比较“$a1\x{FFFE}$a2”
和“$b1\x{FFFE}$b2”
第一次比较1美元
和1美元
在级别1,然后2美元
和b2美元
1级,如下所示。
“ab\x{FFFE}一个"“”Ab\x“{FFFE}一个"“ab\x{自由现金流}c"“”Ab\x“{自由现金流}c"“ab\x{FFFE}xyz"“”abc\x“{FFFE}定义"“”abc\x“{自由现金流}xYz"“抄送\x{FFFE}xyz"“”abcX\x“{FFFE}定义"“”abcx\x“{FFFE}xyz"“”b\x“{自由现金流}aaa"“”bbb\x“{FFFE}一个"
注意:这相当于(条目=>“FFFE;[.0001.0020.0005.FFFE]”)
。任何其他字符U+FFFE
可以通过以下方式定制进入
.
- #归一化
-
--见4.1标准化,UTS#10。
如果指定,则在准备排序键之前对字符串进行规范化(在预处理之后执行规范化)。
表单名称Unicode::Normalize::Normalize()
接受将作为$normalization_form
可接受的名称包括“NFD”
,“NFC”
,“NFKD”
,以及“NFKC”
。请参阅Unicode::Normalize::Normalize()
以获取详细信息。如果省略,“NFD”
使用。
归一化
在以下时间之后执行预处理
(如有定义)。
此外,特殊值,未定义
和“预规范化”
,可以使用,尽管它们与Unicode::Normalize::Normalize()
.
如果未定义
(不是字符串“undef”(未定义)
)作为该键的值显式传递,则不执行任何规范化(如果不需要任何规范化,这可能会使裁剪更容易)。低于(规范化=>undef)
,只解决了连续收缩;例如,即使A型环
(和A形环
)在之后订购Z
,A-cedilla-ring公司
将主要等于A类
在这一点上,(规范化=>undef,预处理=>sub{NFD(shift)})
不是相当于(归一化=>“NFD”)
.
在以下情况下(标准化=>“预标准化”)
,不执行任何标准化,但执行带有组合字符的不连续收缩。因此(规范化=>“预规范化”,预处理=>子{NFD(移位)})
是相当于(归一化=>“NFD”)
。如果源字符串经过精细预规范化,(标准化=>“预标准化”)
可以节省正常化的时间。
除了(规范化=>undef)
,Unicode::规范化是必需的(另请参见CAVEAT公司).
- #覆盖CJK
-
--参见7.1派生排序元素,UTS#10。
默认情况下,中日韩统一表意字符是按Unicode码位顺序排序的,但中日韩联合表意字符块中的字符数小于中日韩通用表意字符扩展A等中的字符。
在中日韩统一汉字块中:如果UCA_Version为8、9或11,则为U+4E00..U+9FA5。如果UCA_Version为14或16,则为U+4E00..U+9FBB。如果UCA_Version为18,则为U+4E00..U+9FC3。如果UCA_Version为20或22,则为U+4E00..U+9FCB。如果UCA_Version为24至30,则为U+4E00..U+9FCC。如果UCA_Version为32或34,则为U+4E00..U+9FD5。如果UCA_Version为36,则为U+4E00..U+9FEA。如果UCA_Version为38、40或41,则为U+4E00..U+9FEF。如果UCA_Version为43,则为U+4E00..U+9FFC。在中日韩统一汉字扩展块中:如果UCA_Version为8到41,则分机A(U+3400..U+4DB5)。如果UCA_Version为43,则分机A(U+3400..U+4DBF)。如果UCA_Version为8到41,分机B(U+2000..U+2A6D6)。如果UCA_Version为43,则分机B(U+2000..U+2A6DD)。如果UCA_Version为20或更高版本,则扩展C(U+2A700..U+2B734)。如果UCA_Version为22或更高版本,则分机D(U+2B740..U+2B81D)。如果UCA_Version为32或更高版本,则扩展E(U+2B820.U+2CEA1)。如果UCA_Version为36或更高版本,则分机F(U+2CEB0..U+2EBE0)。如果UCA_Version为43,分机G(U+3000..U+3134A)。
通过超越CJK
,可以覆盖CJK统一表意文字(包括扩展)的排序。
例如,中日韩统一的表意文字,采用JIS码位顺序。
overrideCJK=>子{我的$u=班次;#获取Unicode代码点my$b=包('n',$u);#至UTF-16BEmy$s=您的unicode转换器($b);#转换my$n=打开包装('n',$s);#将sji转换为short[$n,0x20,0x2,$u];#返回collation元素},
返回值可以是上面所示的第一到第四个权重的数组。返回值可以是一个整数,作为主要权重,如下所示。如果未定义
返回时,将使用默认的派生排序规则元素。
overrideCJK=>子{我的$u=班次;#获取Unicode代码点my$b=包('n',$u);#至UTF-16BEmy$s=您的unicode转换器($b);#转换my$n=打开包装('n',$s);#将sji转换为short返回$n;#返回主重量},
返回值可以是包含零个或多个arrayref、整数或未定义
.
例如,忽略所有中日韩统一的表意文字。
overrideCJK=>sub{()},#CODEREF返回空列表#其中->eq(“Pe\x{4E00}旋转“,”Perl“)为真#因为U+4E00是中日韩统一的表意文字,是可以忽略的。
如果值为假(包括不设防的
)通过,覆盖CJK
没有效果。$Collator->更改(覆盖CJK=>0)
重置旧的。
但中日韩统一表意文字的权重分配桌子
或进入
仍然有效。如果未定义
显式传递为该键的值,则CJK统一表意字符的权重被视为未定义。然而,当UCA_版本
> 8,(overrideCJK=>undef)
没有特殊含义。
注:除此之外,还有12个兼容CJK的象形文字(U+FA0E(U+FA0E)
,U+FA0F(U+FA0F)
,U+FA11型
,U+FA13型
,U+FA14型
,U+FA1F型
,U+FA21型
,U+FA23型
,U+FA24型
,U+FA27型
,U+FA28型
,U+FA29型
)也被视为中日韩统一的表意文字。但它们不能通过覆盖CJK
当你使用DUCET时,因为表中包含了它们的重量。桌子
或进入
优先于超越CJK
.
- #覆盖朝鲜文
-
--参见7.1派生排序规则元素,UTS#10。
默认情况下,朝鲜文音节分解为朝鲜文Jamo,即使(规范化=>undef)
但是朝鲜文音节的映射可能会被覆盖。
此参数的工作原理如下覆盖CJK
,请参阅此处的示例。
如果要覆盖朝鲜文音节的映射,NFD和NFKD是不合适的,因为NFD和NFKD会在覆盖之前分解朝鲜文音节。FCD可以根据情况分解朝鲜文音节。
如果值为假(但不是未定义
)通过,覆盖朝鲜文
没有效果。$Collator->更改(覆盖朝鲜文=>0)
重置旧的。
如果未定义
作为该键的值显式传递,则朝鲜文音节的权重将被视为未定义,而不会分解为朝鲜文Jamo。但朝鲜文音节的重音定义桌子
或进入
仍然有效。
- #覆盖输出
-
--参见7.1.1处理格式错误的代码单元序列,UTS#10。
Perl似乎允许超出范围的值(大于0x10FFFF)。默认情况下,超出范围的值替换为U+FFFD系统
(替换字符)UCA_版本
>=22,或忽略UCA_版本
<= 20.
什么时候?UCA_版本
>=22,则可以覆盖超出范围值的权重。虽然桌子
或进入
可用于它们,超出范围的值太多。
覆盖输出
可以在算法上执行它。此参数的工作原理如下覆盖CJK
,请参阅此处的示例。
例如,忽略所有超出范围的值。
overrideOut=>sub{()},#CODEREF返回空列表
如果值为假(包括未定义
)通过,覆盖输出
没有效果。$Collator->更改(overrideOut=>0)
重置旧的。
关于U+FFFD的注释:
UCA建议,出于安全原因,不应忽略超出范围的值。说吧,“”类型\x“{110000}转"
不应等于“perl”
然而,U+FFFD系统
被错误地映射到Unicode 6.0.0到6.2.0的DUCET中的变量排序规则元素,这意味着当变量
不是不可忽视
.
的映射U+FFFD系统
在Unicode 6.3.0中进行了更正。看见http://www.unicode.org/reports/tr10/tr10-28.html#Trailing_Weights(7.1.4拖曳重量)。这样的修正由此重现。
overrideOut=>sub{0xFFFD},#CODEREF返回一个非常大的整数
由于Unicode 6.3.0,此解决方法是不必要的。
- #预处理
-
--见5.4预处理,UTS#10。
如果指定,coderef用于在形成排序键之前预处理每个字符串。
例如,删除英语文章,例如“a”或“the”。然后,“笔”在“铅笔”之前。
预处理=>子{my$str=移位;$str=~s/\b(?:an?|the)\s+//gi;返回$str;},
预处理
在之前执行归一化
(如有定义)。
例如,使用传统编码(如shift-jis)解码字符串:
$sjis_collator=Unicode::整理->新建(预处理=>\&your_shiftjis_to_unicode编码器,);@结果=$sjis_collator->排序(@shiftjis_strings);
注:从coderef返回的字符串将根据Perl的Unicode支持进行解释。请参见过月球酰胺,珍珠岩,新月形的,珍珠棉,utf8接口.
- #重新安排
-
--见3.5重新安排,UTS#10。
未按逻辑顺序编码并重新排列的字符。如果UCA_版本
等于或小于11,默认值为:
重排=>[0x0E40..0x0E44,0x0EC0..0x0EC4],
如果要禁止任何重排,请传递未定义
或[]
(空列表的引用)作为此键的值。
如果UCA_版本
等于或大于14,默认值为[]
(即无重新安排)。
根据UCA版本9,不应使用此参数;但目前尚未发出警告。
- #重写
-
如果指定,则使用coderef重写中的行桌子
或进入
。coderef将获取每一行,然后应根据UCA文件格式返回一个重写的行。如果coderef返回空行,则将跳过该行。
例如,将任何主可忽略字符转换为第三可忽略字符:
重写=>子{my$line=班次;$line=~s/\[\.0000\..{4}\..{4]\./[.000.0000.000./g;return$line;返回$line;},
此示例显示了重写权重。重写
允许影响代码点、权重和名称。
注释:桌子
可以使用其他表文件;在每次读取未修改的表时,准备一次修改过的表比重写行效率更高。
- #抑制
-
--见3.12特殊用途命令,UTS#35(LDML)第5部分:排序。
以指定字符开头的缩写被抑制,即使这些缩写是在桌子
.
俄语和一些使用西里尔字母的语言的示例:
抑制=>[0x0400..0x0417,0x041A..0x0437,0x043A..0x045F],
其中0x0400代表U+0400
,CYRILLIC大写字母IE WITH GRAVE。
注释:通过签订合同进入
不会被抑制。
- #桌子
-
--请参阅3.8默认Unicode排序元素表UTS#10。
如果需要,可以使用其他排序规则元素表。
表文件应位于Unicode/逐份打印上的目录@INC公司
。如果文件名为美食.txt,表文件搜索为Unicode/逐份打印/Foo.txt在里面@INC公司
.
默认情况下,所有键.txt(作为DUCET的文件名)。如果要准备自己的表文件,请使用除所有键.txt最好避免名称空间冲突。
注释:使用XSUB时,DUCET是在构建此模块时编译的,可以节省运行时的时间。明确的说法(表=>'allkeys.txt')
,或使用其他表,或使用ignoreChar(忽略字符)
,ignoreName(签名)
,undefChar码
,undefName(未定义名称)
或重写
将阻止此模块使用编译的DUCET。
如果未定义
作为该键的值显式传递,不读取任何文件(但可以通过定义排序规则元素进入
).
定义不带任何表文件的排序规则元素表的典型方法:
$onlyABC=Unicode::排序->新建(table=>未定义,entry=><<“条目”,0061 ; [01011.0020.0002.0061]#拉丁文小写字母A0041 ; [0101.00020.0008.0041]#拉丁文大写字母A0062 ; [0102.0020.002.0002.0062]#拉丁文小写字母B0042 ; [0102.0020.008.00042]#拉丁文大写字母B0063 ; [0103.0020.002.00063]#拉丁文小写字母C0043 ; [0103.0020.008.0043]#拉丁文大写字母C条目);
如果ignoreName(签名)
或undefName(未定义名称)
则应将字符名指定为注释(如下#
)在每条线上。
- #undefChar码
-
- #undefName(未定义名称)
-
--见6.3.3减少曲目,UTS#10。
取消定义排序规则元素,就像它在桌子
。这会减小表格的大小。如果要排序的字符串中出现未分配的字符,排序键将从其代码点作为单字符排序元素生成,因为它大于任何其他分配的排序元素(按未分配字符中的代码点顺序)。但是,最好忽略您不熟悉并且可能从未使用过的字符。
通过undefChar码
,任何字符匹配qr/$undefChar/
将是未定义的。通过undefName(未定义名称)
,其名称(在桌子
文件作为注释)匹配qr/$undefName(qr/$undefName)/
将是未定义的。
例如,超过BMP字符的排序规则权重不存储在对象中:
undefChar=>qr/[^\0-\x{fffd}]/,
- #上排在下排之前
-
--见6.6案例比较,UTS#10。
默认情况下,小写在大写之前。如果参数为true,则相反。
注释:此参数简单地假设所有小写/大写区分必须出现在级别3中,并且它们在级别3的权重必须与7.3.1 UTS#10中提到的权重相同。如果您定义的排序规则元素与此要求不同,则此参数无法有效工作。
- #变量
-
--见3.6可变权重,UTS#10。
此键允许可变排序规则元素的可变权重,这些元素在表中用ASTERISK标记(注意:许多标点符号和符号在所有键.txt).
variable=>“blanked”、“non-ignorable”、“shifted”或“shift-trimmed”。
这些名称不区分大小写。默认情况下(如果省略规范),采用“移位”。
“空白”变量元素在1到3级可忽略;在第四级考虑。“不可忽略”变量元素不会重置为可忽略。“移位”变量元素在1到3级可忽略他们的4级重量被旧的1级重量取代。非可变元素的4级权重为0xFFFF。“Shift-Trimmed”与“shifted”相同,但所有FFFF均为4级已修剪。