#
# Copyright (C) 2002-2005, 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 4.1 
#
# 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.
#

$Format       = [\p{Word_Break = Format}];
$Katakana     = [\p{Word_Break = Katakana}];
$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}];
$Control        = [\p{Grapheme_Cluster_Break = Control}];

$KatakanaEx     = $Katakana    $Extend*;
$ALetterEx      = $ALetter     $Extend*;
$MidLetterEx    = $MidLetter   $Extend*;
$MidNumEx       = $MidNum      $Extend*;
$NumericEx      = $Numeric     $Extend*;
$ExtendNumLetEx = $ExtendNumLet $Extend*;

$Hiragana       = [:Hiragana:];
$Ideographic    = [:IDEOGRAPHIC:];
$HiraganaEx     = $Hiragana    $Extend*;
$IdeographicEx  = $Ideographic $Extend*;

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

!!forward;


# Rule 3 - don't break grapheme clusters.
#          see character breaks.

$CR $LF;
[^$Control $CR $LF] $Extend+;
$NumericEx {100};
$ALetterEx {200};
$KatakanaEx {300};
$HiraganaEx {300};
$IdeographicEx {400};

# rule 5

$ALetterEx $Format* $ALetterEx {200};

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

# rule 8

$NumericEx $Format* $NumericEx {100};

# rule 9

$ALetterEx $Format* $NumericEx {200};

# rule 10

$NumericEx $Format* $ALetterEx {200};

# rule 11 and 12 

$NumericEx $Format* $MidNumEx $Format* $NumericEx {100};

# rule 13

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

# rule 13a/b

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

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


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

!!reverse;

$BackALetterEx     = $Extend* $ALetter;
$BackNumericEx     = $Extend* $Numeric;
$BackMidNumEx      = $Extend* $MidNum;
$BackMidLetterEx   = $Extend* $MidLetter;
$BackKatakanaEx    = $Extend* $Katakana;
$BackHiraganaEx    = $Extend* $Hiragana;
$BackIdeographicEx = $Extend* $Ideographic;
$BackExtendNumLetEx= $Extend* $ExtendNumLet;

$LF $CR;

# see character breaks

$Extend* [^$Control $CR $LF];

# rule 5

$BackALetterEx $Format* $BackALetterEx;

# rule 6 and 7

$BackALetterEx $Format* $BackMidLetterEx $Format* $BackALetterEx;


# rule 8

$BackNumericEx $Format* $BackNumericEx;

# rule 9

$BackNumericEx  $Format* $BackALetterEx;

# rule 10

$BackALetterEx $Format* $BackNumericEx;

# rule 11 and 12

$BackNumericEx $Format* $BackMidNumEx $Format* $BackNumericEx;

# rule 13

$BackKatakanaEx $Format* $BackKatakanaEx;
$BackHiraganaEx $Format* $BackHiraganaEx;
$BackIdeographicEx $Format* $BackIdeographicEx;

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

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

!!safe_reverse;

# rule 3
$Extend+ [^$Extend];
$Extend+;               # comes into play when buffer _begins_ with an $Extend+.

# rule 4
$Format+ $BackALetterEx;
$Format+ $BackNumericEx;
$Format+ $BackMidLetterEx;
$Format+ $BackMidNumEx;
$Format+ $BackKatakanaEx;
$Format+ $BackHiraganaEx;
$Format+ $BackIdeographicEx;
$Format+ $BackExtendNumLetEx;


# rule 6
$MidLetter $Format* $BackALetterEx;

# rule 11
$MidNum $Format* $BackNumericEx;

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

!!safe_forward;

# rule 3
$Extend+;

# rule 4
$Extend* $Format+ $ALetterEx;
$Extend* $Format+ $NumericEx;
$Extend* $Format+ $MidLetterEx;
$Extend* $Format+ $MidNumEx;
$Extend* $Format+ $KatakanaEx;
$Extend* $Format+ $HiraganaEx;
$Extend* $Format+ $IdeographicEx;
$Extend* $Format+ $ExtendNumLetEx;

$Extend+ $Format* $ALetterEx;
$Extend+ $Format* $NumericEx;
$Extend+ $Format* $MidLetterEx;
$Extend+ $Format* $MidNumEx;
$Extend+ $Format* $KatakanaEx;
$Extend+ $Format* $HiraganaEx;
$Extend+ $Format* $IdeographicEx;
$Extend+ $Format* $ExtendNumLetEx;

# rule 6
$MidLetterEx $Format* $ALetterEx;

# rule 11
$MidNumEx $Format* $NumericEx;

