#
# Copyright (C) 2002-2016, International Business Machines Corporation 
# and others. All Rights Reserved.
#
# file:  word_POSIX.txt
#
# ICU Word Break Rules, POSIX locale.
#      See Unicode Standard Annex #29.
#      These rules are based on UAX #29 Revision 28 (draft 7) for Unicode Version 9.0
#
# Note:  Updates to word.txt will usually need to be merged into
#        word_POSIX.txt also.

##############################################################################
#
#  Character class definitions from TR 29
#
##############################################################################

!!chain;


#
#  Character Class Definitions.
#

$CR                 = [\p{Word_Break = CR}];
$LF                 = [\p{Word_Break = LF}];
$Newline            = [\p{Word_Break = Newline} ];
$Extend             = [\p{Word_Break = Extend}];
$ZWJ                = [\p{Word_Break = ZWJ}];
$Regional_Indicator = [\p{Word_Break = Regional_Indicator}];
$Format             = [\p{Word_Break = Format}];
$Katakana           = [\p{Word_Break = Katakana}];
$Hebrew_Letter      = [\p{Word_Break = Hebrew_Letter}];
$ALetter            = [\p{Word_Break = ALetter}];
$Single_Quote       = [\p{Word_Break = Single_Quote}];
$Double_Quote       = [\p{Word_Break = Double_Quote}];
$MidNumLet          = [\p{Word_Break = MidNumLet} - [.]];
$MidLetter          = [\p{Word_Break = MidLetter} - [\:]];
$MidNum             = [\p{Word_Break = MidNum} [.]];
$Numeric            = [\p{Word_Break = Numeric}];
$ExtendNumLet       = [\p{Word_Break = ExtendNumLet}];
$E_Base             = [\p{Word_Break = EB}];
$E_Modifier         = [\p{Word_Break = EM}];
$GAZ                = [\p{Word_Break = GAZ}];
$EBG                = [\p{Word_Break = EBG}];

$Han                = [:Han:];
$Hiragana           = [:Hiragana:];


#   Dictionary character set, for triggering language-based break engines. Currently
#   limited to LineBreak=Complex_Context. Note that this set only works in Unicode
#   5.0 or later as the definition of Complex_Context was corrected to include all
#   characters requiring dictionary break.

$Control        = [\p{Grapheme_Cluster_Break = Control}]; 
$HangulSyllable = [\uac00-\ud7a3];
$ComplexContext = [:LineBreak = Complex_Context:];
$KanaKanji      = [$Han $Hiragana $Katakana];
$dictionaryCJK  = [$KanaKanji $HangulSyllable];
$dictionary     = [$ComplexContext $dictionaryCJK];

# leave CJK scripts out of ALetterPlus
$ALetterPlus  = [$ALetter-$dictionaryCJK [$ComplexContext-$Extend-$Control]];


#
#  Rules 4    Ignore Format and Extend characters, 
#             except when they appear at the beginning of a region of text.
#
# TODO: check if handling of katakana in dictionary makes rules incorrect/void
$KatakanaEx           = $Katakana           ($Extend |  $Format | $ZWJ)*;
$Hebrew_LetterEx      = $Hebrew_Letter      ($Extend |  $Format | $ZWJ)*;
$ALetterEx            = $ALetterPlus        ($Extend |  $Format | $ZWJ)*;
$Single_QuoteEx       = $Single_Quote       ($Extend |  $Format | $ZWJ)*;
$Double_QuoteEx       = $Double_Quote       ($Extend |  $Format | $ZWJ)*;
$MidNumLetEx          = $MidNumLet          ($Extend |  $Format | $ZWJ)*;
$MidLetterEx          = $MidLetter          ($Extend |  $Format | $ZWJ)*;
$MidNumEx             = $MidNum             ($Extend |  $Format | $ZWJ)*;
$NumericEx            = $Numeric            ($Extend |  $Format | $ZWJ)*;
$ExtendNumLetEx       = $ExtendNumLet       ($Extend |  $Format | $ZWJ)*;
$Regional_IndicatorEx = $Regional_Indicator ($Extend |  $Format | $ZWJ)*;

$Ideographic    = [\p{Ideographic}];
$HiraganaEx     = $Hiragana     ($Extend |  $Format | $ZWJ)*;
$IdeographicEx  = $Ideographic  ($Extend |  $Format | $ZWJ)*;

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

!!forward;


# Rule 3 - CR x LF
#
$CR $LF;

# Rule 3c   ZWJ x GAZ.  Preceeds WB4, so no intervening Extend chars allowed.
#
$ZWJ ($GAZ | $EBG);


# Rule 4 - ignore Format and Extend characters, except when they appear at the beginning
#          of a region of Text.   The rule here comes into play when the start of text
#          begins with a group of Format chars, or with a "word" consisting of a single
#          char that is not in any of the listed word break categories followed by
#          format char(s), or is not a CJK dictionary character.
[^$CR $LF $Newline]? ($Extend |  $Format | $ZWJ)+;

$NumericEx {100};
$ALetterEx {200};
$HangulSyllable {200};
$Hebrew_LetterEx{200};
$KatakanaEx {400};       # note:  these status values override those from rule 5
$HiraganaEx {400};       #        by virtue of being numerically larger.
$IdeographicEx {400};    #

$E_Base ($Extend | $Format | $ZWJ)*;
$E_Modifier ($Extend | $Format | $ZWJ)*;
$GAZ ($Extend | $Format | $ZWJ)*;

#
# rule 5
#    Do not break between most letters.
#
($ALetterEx | $Hebrew_LetterEx)  ($ALetterEx | $Hebrew_LetterEx) {200};

# rule 6 and 7
($ALetterEx | $Hebrew_LetterEx) ($MidLetterEx | $MidNumLetEx | $Single_QuoteEx) ($ALetterEx | $Hebrew_LetterEx) {200};

# rule 7a
$Hebrew_LetterEx $Single_QuoteEx {200};

# rule 7b and 7c
$Hebrew_LetterEx $Double_QuoteEx $Hebrew_LetterEx {200};

# rule 8

$NumericEx $NumericEx {100};

# rule 9

($ALetterEx | $Hebrew_LetterEx) $NumericEx {200};

# rule 10

$NumericEx ($ALetterEx | $Hebrew_LetterEx) {200};

# rule 11 and 12 

$NumericEx ($MidNumEx | $MidNumLetEx | $Single_QuoteEx) $NumericEx {100};

# rule 13
# to be consistent with $KanaKanji $KanaKanhi, changed
# from 300 to 400.
# See also TestRuleStatus in intltest/rbbiapts.cpp
$KatakanaEx  $KatakanaEx {400};

# rule 13a/b

$ALetterEx       $ExtendNumLetEx {200};    #  (13a)
$Hebrew_LetterEx $ExtendNumLetEx {200};    #  (13a)
$NumericEx       $ExtendNumLetEx {100};    #  (13a)
$KatakanaEx      $ExtendNumLetEx {400};    #  (13a)
$ExtendNumLetEx  $ExtendNumLetEx {200};    #  (13a)

$ExtendNumLetEx  $ALetterEx      {200};    #  (13b)
$ExtendNumLetEx  $Hebrew_Letter  {200};    #  (13b)
$ExtendNumLetEx  $NumericEx      {100};    #  (13b)
$ExtendNumLetEx  $KatakanaEx     {400};    #  (13b)

# rule 14
#    Do not break within emoji modifier sequences

($E_Base | $EBG) ($Format | $Extend | $ZWJ)* $E_Modifier;

# rules 15 - 17
#    Pairs of Regional Indicators stay together.
#    With rule chaining disabled by ^, this rule will match exactly two of them.
#    No other rule begins with a Regional_Indicator, so chaining cannot extend the match.
#
^$Regional_IndicatorEx $Regional_IndicatorEx;

# special handling for CJK characters: chain for later dictionary segmentation
$HangulSyllable $HangulSyllable {200};
$KanaKanji $KanaKanji {400}; # different rule status if both kana and kanji found 


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

!!reverse;

$BackHebrew_LetterEx      = ($Format | $Extend | $ZWJ)* $Hebrew_Letter;
$BackALetterEx            = ($Format | $Extend | $ZWJ)* $ALetterPlus;
$BackSingle_QuoteEx       = ($Format | $Extend | $ZWJ)* $Single_Quote;
$BackDouble_QuoteEx       = ($Format | $Extend | $ZWJ)* $Double_Quote;
$BackMidNumLetEx          = ($Format | $Extend | $ZWJ)* $MidNumLet;
$BackNumericEx            = ($Format | $Extend | $ZWJ)* $Numeric;
$BackMidNumEx             = ($Format | $Extend | $ZWJ)* $MidNum;
$BackMidLetterEx          = ($Format | $Extend | $ZWJ)* $MidLetter;
$BackKatakanaEx           = ($Format | $Extend | $ZWJ)* $Katakana;
$BackHiraganaEx           = ($Format | $Extend | $ZWJ)* $Hiragana;
$BackExtendNumLetEx       = ($Format | $Extend | $ZWJ)* $ExtendNumLet;
$BackRegional_IndicatorEx = ($Format | $Extend | $ZWJ)* $Regional_Indicator;

# rule 3
$LF $CR;

# Rule 3c   ZWJ x GAZ.  Preceeds WB4, so no intervening Extend chars allowed.
#
($GAZ | $EBG) $ZWJ;

# rule 4
($Format | $Extend | $ZWJ)*  [^$CR $LF $Newline]?;

# rule 5

($BackALetterEx | $BackHebrew_LetterEx) ($BackALetterEx | $BackHebrew_LetterEx);

# rule 6 and 7

($BackALetterEx | $BackHebrew_LetterEx) ($BackMidLetterEx | $BackMidNumLetEx | $BackSingle_QuoteEx) ($BackALetterEx | $BackHebrew_LetterEx);

# rule 7a
$BackSingle_QuoteEx $BackHebrew_LetterEx;

# Rule 7b and 7c
$BackHebrew_LetterEx $BackDouble_QuoteEx $BackHebrew_LetterEx;

# rule 8

$BackNumericEx $BackNumericEx;

# rule 9

$BackNumericEx ($BackALetterEx | $BackHebrew_LetterEx);

# rule 10

($BackALetterEx | $BackHebrew_LetterEx) $BackNumericEx;

# rule 11 and 12

$BackNumericEx ($BackMidNumEx | $BackMidNumLetEx | $BackSingle_QuoteEx) $BackNumericEx;

# rule 13

$BackKatakanaEx $BackKatakanaEx;

# rules 13 a/b
#
$BackExtendNumLetEx ($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $BackKatakanaEx | $BackExtendNumLetEx);
($BackALetterEx | $BackHebrew_LetterEx | $BackNumericEx | $BackKatakanaEx) $BackExtendNumLetEx; 

# special handling for CJK characters: chain for later dictionary segmentation
$HangulSyllable $HangulSyllable;
$KanaKanji $KanaKanji; #different rule status if both kanji and kana found

# rule 14

$E_Modifier ($Format | $Extend | $ZWJ)* ($E_Base | $EBG);

# rule 15 - 17
#    Pairs of Regional Indicators stay together.

^$BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* 
        ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}];
^$BackRegional_IndicatorEx $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* 
        ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}];

($GAZ | $EBG) $ZWJ $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* 
        ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}];
($GAZ | $EBG) $ZWJ $BackRegional_IndicatorEx $BackRegional_IndicatorEx / ($BackRegional_IndicatorEx $BackRegional_IndicatorEx)* 
        ($Format | $Extend | $ZWJ)* [[^$Regional_Indicator $Format $Extend $ZWJ] {eof}];



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

!!safe_reverse;

# rule 3
($Extend | $Format | $ZWJ)+ .?;

# rule 6
($MidLetter | $MidNumLet | $Single_Quote) ($BackALetterEx | $BackHebrew_LetterEx);

# rule 7b
$Double_Quote $BackHebrew_LetterEx;


# rule 11
($MidNum | $MidNumLet | $Single_Quote) $BackNumericEx;

# rule 13c
$BackRegional_IndicatorEx*;

# For dictionary-based break
$dictionary $dictionary;

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

!!safe_forward;

# rule 4
($Extend | $Format | $ZWJ)+ .?;

# rule 6
($MidLetterEx | $MidNumLetEx | $Single_QuoteEx) ($ALetterEx | $Hebrew_LetterEx);

# rule 7b
$Double_QuoteEx $Hebrew_LetterEx;

# rule 11
($MidNumEx | $MidNumLetEx | $Single_QuoteEx) $NumericEx;

# rule 13c
$Regional_IndicatorEx*;

# For dictionary-based break
$dictionary $dictionary;
