#
# Copyright (C) 2002-2006, International Business Machines Corporation 
# and others. All Rights Reserved.
#
# file:  word_ja.txt
#
# ICU Word Break Rules
#      See Unicode Standard Annex #29.
#      These rules are based on Unicode Version 5.0 0
#        Includes post Unicode 5.0 change to treat Japanese half width voicing marks
#        as Extend
#
# Note:  Updates to word.txt will usually need to be merged into
#        word_POSIX.txt and word_ja.txt also.

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

!!chain;


#
#  Character Class Definitions.
#

$VoiceMarks   = [\uff9e\uff9f];
$Format       = [\p{Word_Break = Format}];
$Katakana     = [\p{Word_Break = Katakana}-$VoiceMarks];
$ALetter      = [\p{Word_Break = ALetter}];
$MidLetter    = [\p{Word_Break = MidLetter}];
$MidNum       = [\p{Word_Break = MidNum}];
$Numeric      = [\p{Word_Break = Numeric}];
$ExtendNumLet = [\p{Word_Break = ExtendNumLet}];


$CR             = \u000d;
$LF             = \u000a;
$Extend         = [\p{Grapheme_Cluster_Break = Extend}$VoiceMarks];
$Control        = [\p{Grapheme_Cluster_Break = Control}];

#   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.

$dictionary   = [:LineBreak = Complex_Context:];
$ALetterPlus  = [$ALetter [$dictionary-$Extend-$Control]];


#
#  Rules 3    Grapheme Clusters behave like their first char.
#  Rule  4    Ignore trailing Format characters  (Also see note in TR 29)
#
$KatakanaEx     = $Katakana     ($Extend |  $Format)*;
$ALetterEx      = $ALetterPlus  ($Extend |  $Format)*;
$MidLetterEx    = $MidLetter    ($Extend |  $Format)*;
$MidNumEx       = $MidNum       ($Extend |  $Format)*;
$NumericEx      = $Numeric      ($Extend |  $Format)*;
$ExtendNumLetEx = $ExtendNumLet ($Extend |  $Format)*;

$Hiragana       = [:Hiragana:];
$Ideographic    = [:IDEOGRAPHIC:];
$HiraganaEx     = $Hiragana     ($Extend |  $Format)*;
$IdeographicEx  = $Ideographic  ($Extend |  $Format)*;

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

!!forward;


# Rule 3 - CR x LF
#          see character breaks.

$CR $LF  ($Extend | $Format)*;

# 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).
.? ($Extend |  $Format)+;


$NumericEx {100};
$ALetterEx {200};
$KatakanaEx {300};
$HiraganaEx {300};
$IdeographicEx {400};

# rule 5

$ALetterEx $ALetterEx {200};

# rule 6 and 7
$ALetterEx $MidLetterEx $ALetterEx {200};

# rule 8

$NumericEx $NumericEx {100};

# rule 9

$ALetterEx $Format* $NumericEx {200};

# rule 10

$NumericEx $ALetterEx {200};

# rule 11 and 12 

$NumericEx $MidNumEx $NumericEx {100};

# rule 13

$KatakanaEx  $KatakanaEx {300};
$HiraganaEx    $HiraganaEx {300};
$IdeographicEx $IdeographicEx {400};

# rule 13a/b

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

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


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

!!reverse;

$BackALetterEx     = ($Format | $Extend)* $ALetterPlus;
$BackNumericEx     = ($Format | $Extend)* $Numeric;
$BackMidNumEx      = ($Format | $Extend)* $MidNum;
$BackMidLetterEx   = ($Format | $Extend)* $MidLetter;
$BackKatakanaEx    = ($Format | $Extend)* $Katakana;
$BackHiraganaEx    = ($Format | $Extend)* $Hiragana;
$BackIdeographicEx = ($Format | $Extend)* $Ideographic;
$BackExtendNumLetEx= ($Format | $Extend)* $ExtendNumLet;

# rule 3
($Format | $Extend)* $LF $CR;

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

# rule 5

$BackALetterEx $BackALetterEx;

# rule 6 and 7

$BackALetterEx $BackMidLetterEx $BackALetterEx;


# rule 8

$BackNumericEx $BackNumericEx;

# rule 9

$BackNumericEx $BackALetterEx;

# rule 10

$BackALetterEx $BackNumericEx;

# rule 11 and 12

$BackNumericEx $BackMidNumEx $BackNumericEx;

# rule 13

$BackKatakanaEx $BackKatakanaEx;
$BackHiraganaEx $BackHiraganaEx;
$BackIdeographicEx $BackIdeographicEx;

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

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

!!safe_reverse;

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

# rule 6
$MidLetter $BackALetterEx;

# rule 11
$MidNum $BackNumericEx;

# For dictionary-based break
$dictionary $dictionary;

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

!!safe_forward;

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

# rule 6
$MidLetterEx $ALetterEx;

# rule 11
$MidNumEx $NumericEx;

# For dictionary-based break
$dictionary $dictionary;
