1# Copyright (c) 2002-2014, International Business Machines Corporation and
2# others. All Rights Reserved.
3#
4#  Title Casing Break Rules
5#
6
7
8$CaseIgnorable   = [[:Mn:][:Me:][:Cf:][:Lm:][:Sk:] \u0027 \u00AD \u2019];
9$Cased           = [[:Upper_Case:][:Lower_Case:][:Lt:]  - $CaseIgnorable];
10$NotCased        = [[^ $Cased] - $CaseIgnorable];
11
12!!forward;
13
14#  If the iterator begins on a CaseIgnorable, advance it past it/them.
15#  This can occur at the start-of-text, or after application of the
16#  safe-reverse rule.
17
18($CaseIgnorable | $NotCased)*;
19
20#   Normal exact forward rule: beginning at the start of a word
21#         (at a cased character), advance through the word and through
22#         the uncased characters following the word.
23
24$Cased ($Cased | $CaseIgnorable)* ($NotCased | $CaseIgnorable)*;
25
26
27#  Reverse Rules
28!!reverse;
29
30#  Normal Rule, will work nearly universally, so long as there is a
31#    start-of-word preceding the current iteration position.
32
33($NotCased | $CaseIgnorable)* ($Cased | $CaseIgnorable)* $Cased;
34
35#  Short rule, will be effective only when moving to the start of text,
36#    with no word (cased character) preceding the current iteration position.
37
38($NotCased | $CaseIgnorable)*;
39
40!!safe_reverse;
41
42# Safe Reverse: the exact forward rule must not start in the middle
43#  of a word, so the safe reverse skips over any Cased characters,
44#  leaving it just before the start of a word.
45
46($Cased | $CaseIgnorable)*;
47
48!!safe_forward;
49
50# Safe Forward, nothing needs to be done, the exact Reverse rules will
51#   always find valid boundaries from any starting position.
52#   Still, some rule is needed, so '.', a one character movement.
53.;
54