#
# 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 Version 4.1 draft, dated 2004-11-11
#

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

!!chain;

$Katakana  = [[:Script = KATAKANA:]
			  [:name = VERTICAL KANA REPEAT MARK:]
			  [:name = VERTICAL KANA REPEAT WITH VOICED SOUND MARK:]
			  [:name = VERTICAL KANA REPEAT MARK UPPER HALF:]
			  [:name = VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF:]
			  [:name = VERTICAL KANA REPEAT MARK LOWER HALF:]
			  [:name = KATAKANA-HIRAGANA VOICED SOUND MARK:]
			  [:name = KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK:]
			  [:name = KATAKANA-HIRAGANA DOUBLE HYPHEN:]
			  [:name = KATAKANA-HIRAGANA PROLONGED SOUND MARK:]
			  [:name = HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK:]
			  [:name = HALFWIDTH KATAKANA VOICED SOUND MARK:]
			  [:name = HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK:]];


$ALetter   = [[:Alphabetic:] [:name= HEBREW PUNCTUATION GERESH:]
						   - [:Ideographic:]
						   - $Katakana
						   - [:Script = Hiragana:]
						   - [:Script = Lao:]
						   - [:Grapheme_Extend = TRUE:]];
						   
$MidLetter = [[:name = APOSTROPHE:] [:name = MIDDLE DOT:]
			  [:name = HEBREW PUNCTUATION GERSHAYIM:]
			  [:name = RIGHT SINGLE QUOTATION MARK:]
			  [:name = HYPHENATION POINT:]
			  [:name = COLON:]];

			
$MidNum    = [[:LineBreak = Infix_Numeric:] - [:name = COLON:]];
$Numeric   = [[:Nd:][:name = ARABIC DECIMAL SEPARATOR:][:name = ARABIC THOUSANDS SEPARATOR:]];
$ExtendNumLet = [[:Connector_Punctuation:] 
			- [:name = KATAKANA MIDDLE DOT:]
			- [:name = HALFWIDTH KATAKANA MIDDLE DOT:]];
			
			

#
#  Character Class Definitions.
#    The names are those from TR29.
#

$CR             = \u000d;
$LF             = \u000a;
$Extend         = [[:Grapheme_Extend = TRUE:]];
$Control        = [[:Zl:] [:Zp:] [:Cc:] [:Cf:] - $Extend];
$Format         = [[:Cf:] - $Extend];
$Hiragana       = [:Hiragana:];
$Ideographic    = [:IDEOGRAPHIC:];

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

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

!!forward;


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

$CR $LF;
[^$Control] $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];

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