# Copyright (c) 2002-2014, International Business Machines Corporation and
# others. All Rights Reserved.
#
# Title Casing Break Rules
#
$CaseIgnorable = [[:Mn:][:Me:][:Cf:][:Lm:][:Sk:] \u0027 \u00AD \u2019];
$Cased = [[:Upper_Case:][:Lower_Case:][:Lt:] - $CaseIgnorable];
$NotCased = [[^ $Cased] - $CaseIgnorable];
!!forward;
# If the iterator begins on a CaseIgnorable, advance it past it/them.
# This can occur at the start-of-text, or after application of the
# safe-reverse rule.
($CaseIgnorable | $NotCased)*;
# Normal exact forward rule: beginning at the start of a word
# (at a cased character), advance through the word and through
# the uncased characters following the word.
$Cased ($Cased | $CaseIgnorable)* ($NotCased | $CaseIgnorable)*;
# Reverse Rules
!!reverse;
# Normal Rule, will work nearly universally, so long as there is a
# start-of-word preceding the current iteration position.
($NotCased | $CaseIgnorable)* ($Cased | $CaseIgnorable)* $Cased;
# Short rule, will be effective only when moving to the start of text,
# with no word (cased character) preceding the current iteration position.
($NotCased | $CaseIgnorable)*;
!!safe_reverse;
# Safe Reverse: the exact forward rule must not start in the middle
# of a word, so the safe reverse skips over any Cased characters,
# leaving it just before the start of a word.
($Cased | $CaseIgnorable)*;
!!safe_forward;
# Safe Forward, nothing needs to be done, the exact Reverse rules will
# always find valid boundaries from any starting position.
# Still, some rule is needed, so '.', a one character movement.
.;