#
#   Copyright (C) 2002-2015, International Business Machines Corporation and others.
#       All Rights Reserved.
#
#   file:  sent.txt
#
#   ICU Sentence Break Rules
#      See Unicode Standard Annex #29.
#      These rules are based on UAX #29 Revision 26 for Unicode Version 8.0
#


#
# Character categories as defined in TR 29
#
$CR        = [\p{Sentence_Break = CR}];
$LF        = [\p{Sentence_Break = LF}];
$Extend    = [\p{Sentence_Break = Extend}];
$Sep       = [\p{Sentence_Break = Sep}];
$Format    = [\p{Sentence_Break = Format}];
$Sp        = [\p{Sentence_Break = Sp}];
$Lower     = [\p{Sentence_Break = Lower}];
$Upper     = [\p{Sentence_Break = Upper}];
$OLetter   = [\p{Sentence_Break = OLetter}];
$Numeric   = [\p{Sentence_Break = Numeric}];
$ATerm     = [\p{Sentence_Break = ATerm}];
$SContinue = [\p{Sentence_Break = SContinue}];
$STerm     = [\p{Sentence_Break = STerm}];
$Close     = [\p{Sentence_Break = Close}];

#
# Define extended forms of the character classes,
#   incorporate trailing Extend or Format chars.
#   Rules 4 and 5.  

$SpEx       = $Sp      ($Extend | $Format)*;
$LowerEx    = $Lower   ($Extend | $Format)*;
$UpperEx    = $Upper   ($Extend | $Format)*;
$OLetterEx  = $OLetter ($Extend | $Format)*;
$NumericEx  = $Numeric ($Extend | $Format)*;
$ATermEx    = $ATerm   ($Extend | $Format)*;
$SContinueEx= $SContinue ($Extend | $Format)*;
$STermEx    = $STerm   ($Extend | $Format)*;
$CloseEx    = $Close   ($Extend | $Format)*;


## -------------------------------------------------

!!chain;
!!forward;

# Rule 3 - break after separators.  Keep CR/LF together.
#
$CR $LF;


# Rule 4 - Break after $Sep.
# Rule 5 - Ignore $Format and $Extend
#
[^$Sep $CR $LF]? ($Extend | $Format)*;


# Rule 6
$ATermEx $NumericEx;

# Rule 7
($UpperEx | $LowerEx) $ATermEx $UpperEx;

#Rule 8
$NotLettersEx = [^$OLetter $Upper $Lower $Sep $CR $LF $ATerm $STerm] ($Extend | $Format)*;
$ATermEx $CloseEx* $SpEx* $NotLettersEx* $Lower;

# Rule 8a
($STermEx | $ATermEx) $CloseEx* $SpEx* ($SContinueEx | $STermEx | $ATermEx);

#Rule 9, 10, 11
($STermEx | $ATermEx) $CloseEx* $SpEx* ($Sep | $CR | $LF)?;

#Rule 12
[[^$STerm $ATerm $Close $Sp $Sep $LF $CR $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* .;
[[^$STerm $ATerm $Close $Sp $Sep $LF $CR $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* ([$Sep $LF $CR {eof}] | $CR $LF){100};

## -------------------------------------------------

!!reverse;

$SpEx_R       = ($Extend | $Format)* $Sp;
$ATermEx_R    = ($Extend | $Format)* $ATerm;
$STermEx_R    = ($Extend | $Format)* $STerm;
$CloseEx_R    = ($Extend | $Format)* $Close;

#
#  Reverse rules.
#     For now, use the old style inexact reverse rules, which are easier
#     to write, but less efficient.
#     TODO:  exact reverse rules.  It appears that exact reverse rules
#            may require improving support for look-ahead breaks in the
#            builder.  Needs more investigation.
#

[{bof}] (.? | $LF $CR) [^$Sep $CR $LF]* [$Sep $CR $LF {eof}] ($SpEx_R* $CloseEx_R* ($STermEx_R | $ATermEx_R))*;
#.*;

# Explanation for this rule:
#
#    It needs to back over
#        The $Sep at which we probably begin
#        All of the non $Sep chars leading to the preceding $Sep
#        The preceding $Sep, which will be the second one that the rule matches.
#        Any immediately preceding STerm or ATerm sequences.  We need to see these
#              to get the correct rule status when moving forwards again.
#        
# [{bof}]           inhibit rule chaining.  Without this, rule would loop on itself and match
#                   the entire string.
#
# (.? | $LF $CR)    Match one $Sep instance.  Use .? rather than $Sep because position might be
#                   at the beginning of the string at this point, and we don't want to fail.
#                   Can only use {eof} once, and it is used later.
#
