<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I have been assuming that the general algorithm for evaluating segmentation rules is this:<div class=""><br class=""></div><div class="">1. At the current pointer in the subject string</div><div class="">2. Evaluate rules in order until a rule “passes” (ie matches)</div><div class="">3. If the rule matches, break or don’t break depending on the operator of the rule (one of “×÷”) and then move the string pointer forward</div><div class="">4. If the rule does not match, try the next rule</div><div class="">5. If no rule matches, apply the default rule of "Any ÷ Any" which will always match and break and then advance the string pointer</div><div class="">6. Repeat until the end of the string</div><div class=""><br class=""></div><div class="">However when applying this approach to the sentence break rules in the root locale for the string “One. Two.” the following is resolved:</div><div class=""><br class=""></div><div class="">The string pointer is here: “. Two.” Apply the following sentence break rules (partial)</div><div class=""><br class=""></div><div class=""><div class=""><!-- Break after sentence terminators, but include closing punctuation, trailing spaces, and any paragraph separator. [See note below.] Include closing punctuation, trailing spaces, and (optionally) a paragraph separator. --></div><div class=""><rule id="9"> $SATerm $Close* × ( $Close | $Sp | $ParaSep ) </rule></div><div class=""><!-- Note the fix to $Sp*, $Sep? --></div><div class=""><rule id="10"> $SATerm $Close* $Sp* × ( $Sp | $ParaSep ) </rule></div><div class=""><rule id="11"> $SATerm $Close* $Sp* $ParaSep? ÷ </rule></div></div><div class=""><br class=""></div><div class="">Rule 9 will match:</div><div class=""> "<font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">$SATerm $Close*" matches the “.”</span></font></div><div class=""><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class=""> </span></font><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0);" class=""> "</span><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class="">( $Close | $Sp | $ParaSep )" matches the “ Two.”</span></font></div><div class=""><font color="#000000" class=""><span style="caret-color: rgb(0, 0, 0);" class=""><br class=""></span></font></div><div class=""><font color="#000000" class="">Since it matches, and is a `no break` match then rule processing finishes and the string pointer is advanced. Therefore there is never a sentence break. Removing rule 9 results in rule processing to get to Rule 11 which matches and then breaks as expected.</font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><font color="#000000" class="">Am I incorrectly understanding the flow of rule evaluation?</font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><font color="#000000" class="">Thanks for the help as always,</font></div><div class=""><font color="#000000" class=""><br class=""></font></div><div class=""><font color="#000000" class="">—Kip</font></div><div class=""><font color="#000000" class=""><br class=""></font></div></body></html>