﻿# Copyright (c) 2016  International Business Machines Corporation and # others. All Rights Reserved.
#
#  file:  line_normal_cj.txt
#
# Reference Line Break rules for intltest rbbi/RBBIMonkeyTest
#
# Note: Rule syntax and the monkey test itself are still a work in progress.
#       They are expected to change with review and the addition of support for rule tailoring.
#
#         Line Breaking Rules
#         Implement default line breaking as defined by 
#         Unicode Standard Annex #14 Revision 34 for Unicode 8.0
#         http://www.unicode.org/reports/tr14/
#         tailored as noted in 2nd paragraph below..
#
#         TODO:  Rule LB 8 remains as it was in Unicode 5.2
#         This is only because of a limitation of ICU break engine implementation,
#         not because the older behavior is desirable.
#
#         This tailors the line break behavior to correspond to CSS
#         line-break=normal (BCP47 -u-lb-normal) as defined for Chinese & Japanese.
#         It sets characters of class CJ to behave like ID.
#         In addition, it allows breaks:
#         * before hyphens 2010 & 2013 (both BA) and 301C, 30A0 (both NS)

type = line;
locale = ja@lb=normal;

AI = [:LineBreak =  Ambiguous:];
AL = [[:LineBreak =  Alphabetic:]-[\u2764]];
BAX = [\u2010 \u2013];
BA = [[:LineBreak =  Break_After:] - BAX];
BB = [:LineBreak =  Break_Before:];
BK = [:LineBreak =  Mandatory_Break:];
B2 = [:LineBreak =  Break_Both:];
CB = [:LineBreak =  Contingent_Break:];
CJ = [:LineBreak =  Conditional_Japanese_Starter:];
CL = [:LineBreak =  Close_Punctuation:];
CM = [:LineBreak =  Combining_Mark:];
CP = [:LineBreak =  Close_Parenthesis:];
CR = [:LineBreak =  Carriage_Return:];

EB = [\u261D\u26F9\u270A-\u270D\U0001F385\U0001F3C3-\U0001F3C4\U0001F3CA-\U0001F3CB\U0001F442-\U0001F443\U0001F446-\U0001F450\U0001F466-\U0001F469\U0001F46E\U0001F470-\U0001F478\U0001F47C\U0001F481-\U0001F483\U0001F485-\U0001F487\U0001F4AA\U0001F575\U0001F590\U0001F595-\U0001F596\U0001F645-\U0001F647\U0001F64B-\U0001F64F\U0001F6A3\U0001F6B4-\U0001F6B6\U0001F6C0\U0001F918];
EM = [\U0001F3FB-\U0001F3FF];

EX = [:LineBreak =  Exclamation:];
GL = [:LineBreak =  Glue:];
HL = [:LineBreak =  Hebrew_Letter:];
HY = [:LineBreak =  Hyphen:];
H2 = [:LineBreak =  H2:];
H3 = [:LineBreak =  H3:];
ID = [[:LineBreak =  Ideographic:] CJ [\u2764]];
IN = [:LineBreak =  Inseperable:];
IS = [:LineBreak =  Infix_Numeric:];
JL = [:LineBreak =  JL:];
JV = [:LineBreak =  JV:];
JT = [:LineBreak =  JT:];
LF = [:LineBreak =  Line_Feed:];
NL = [:LineBreak =  Next_Line:];
NSX = [\u301C \u30A0];
NS = [[:LineBreak =  Nonstarter:] - NSX];
NU = [:LineBreak =  Numeric:];
OP = [:LineBreak =  Open_Punctuation:];
PO = [:LineBreak =  Postfix_Numeric:];
PR = [:LineBreak =  Prefix_Numeric:];
QU = [:LineBreak =  Quotation:];
RI = [:LineBreak =  Regional_Indicator:];
SA = [:LineBreak =  Complex_Context:];
SG = [:LineBreak =  Surrogate:];
SP = [:LineBreak =  Space:];
SY = [:LineBreak =  Break_Symbols:];
WJ = [:LineBreak =  Word_Joiner:];
XX = [:LineBreak =  Unknown:];
ZW = [:LineBreak =  ZWSpace:];
ZJ = [\u200D];

# TODO: adjustment to sets needed only until Unicode properties are updated for Emoji.
ID   = [ID - EB];
AL   = [AL - EM];

dictionary = [:LineBreak = Complex_Context:];

# Redfine AL. LB1.  TODO: refine according to latest UAX.
AL = [ AL AI SA SG XX ];

LB4:        BK ÷;
LB5:        CR LF;
LB5.1:      CR ÷;
LB5.2:      LF ÷;
LB5.3:      NL ÷;

LB6:        . (BK | CR | LF | NL);
LB6.1:      [^BK CR LF NL SP ZW] CM* (BK | CR | LF | NL);

# Rules LB14 - LB17.
# Moved before LB7, because they can match a longer sequence that would also match LB7,
# for example, the sequence "OP CM SP AL" matches LB14 while the prefix of it,
#                           "while only the prefix "OP CM SP" matches LB7.1
LB14:        OP CM* SP* .;
LB15:        QU CM* SP* OP;

# Do not break between closing punctuation and $NS, even with intervening spaces
# But DO allow a break between closing punctuation and $NSX, don't include it here
LB16:        (CL | CP)CM* SP* NS;
LB17:        B2 CM* SP* B2;

LB7.1:      [^ZW SP] CM* [SP ZW];
LB7.2:      [ZW SP] [SP ZW];

# LB8, ICU differs from UAX-14,
#    ICU:    ZW ÷;
#    UAX 14: ZW SP* ÷;
LB8:        ZW ÷;

# LB8a, from Emoji proposal L2/16-011R3
#      ZWJ x ID
LB8a:       ZJ (ID | EB | EM);


# LB9:  X CM -> X
# LB10: Unattached CM -> AL

#LB11:       × WJ;
#            WJ ×

LB11.1:      [^BK CR LF NL SP ZW] CM* WJ;
LB11.2:      SP WJ;
LB11.3:      WJ CM* [^CM];

LB12:        GL CM* [^CM];

LB12a:       [^SP BA BAX HY] CM* GL;

# LB 13 ICU Tailoring, matches tailoring exmaple 8 from UAX 14.
#
#   LB13.1   [^SP] CM* [CL CP EX IS SY]    # original UAX 14 rule.
#   LB13.2   SP    CM* [CL CP EX IS SY]

LB13.1: [^NU SP] CM* [CL CP IS SY];
LB13.2: [^SP] CM* EX;
LB13.2: SP [CL CP EX IS SY];


# LB 14-17 are moved above LB 7.

LB18:        SP ÷;

LB19:        . CM* QU;
LB19.1:      QU CM* [^CM];

# LB 20   Break before and after CB.
#         Interaction with LB8a:  ZJ x ID is tricky because CM includes ZJ.
#                                 ZJ acts like a CM to the left, combining with CB.
#                                 ZJ acts independently to the right, no break from ID by LB8a.
LB20:        . CM* ÷ CB;
LB20.1a:     CB CM* ZJ (ID | EB | EM);
LB20.1b:      CB CM* ÷;

# Note: Rule 21a must come before 21 to prevent 21.1 from matching HL BA, then
#       not picking up the continuing match after the BA from 21a.
# TODO: For CJ tailorings (with BAX) does this rule want to include BAX? If so,
#       should "HL BAX" not break when followed by a CB? Thats what the current
#       rules do, which is why "[^CM CB]?" includes the ?.
LB21a:       HL CM* (HY | BA | BAX) CM* [^CM CB]?;

# DO allow breaks here before $BAXcm and $NSXcm, so don't include them
LB21.1:      . CM* [BA HY NS];
LB21.2:      BB CM* [^CM CB];

LB21b:       SY CM* HL;

LB22.1:        (AL | HL | CM) CM* IN;   # The CM is from LB10, treat an unattached CM as AL.
LB22.2:       EX CM* IN;
LB22.3:       (ID | EB | EM) CM* IN;
LB22.4:       IN CM* IN;
LB22.5:       NU CM* IN;

LB23.1:      (ID | EB | EM) CM* PO;
LB23.2:      (AL | HL | CM) CM* NU;
LB23.3:      NU CM* (AL | HL);

LB24.1:      PR CM* (ID | EB | EM);
LB24.2:      PR CM* (AL | HL);
LB24.3:      PO CM* (AL | HL);

# Numbers. Equivalent to Tailoring example 8 from UAx 14.
LB25:        ((PR | PO)CM*)? ((OP | HY)CM*)? NU (CM*(NU | SY | IS))* (CM*(CL | CP))? (CM*(PR | PO))?;

LB26.1:      JL CM* (JL | JV | H2 | H3);
LB26.2:      (JV | H2) CM* (JV | JT);
LB26.3:      (JT | H3) CM* JT;

LB27.1:      (JL | JV | JT | H2 | H3) CM* IN;
LB27.2:      (JL | JV | JT | H2 | H3) CM* PO;
LB27.3:      PR CM* (JL | JV | JT | H2 | H3);

# LB28 Do not break between Alphabetics.
#      Unattached (leading) CM treated as AL.
LB28:        (AL | HL | CM)CM* (AL | HL);

LB29:        IS CM* (AL | HL);

# LB30  is adjusted for unattached leading CM being treated as AL.
LB30.1:      (AL | CM | HL | NU) CM* OP;
LB30.2:      CP CM* (AL | HL | NU);

# LB31  keep pairs of RI together.
LB30a.1:     RI CM* RI CM* [BK CR LF NL SP ZW WJ GL CL CP EX IS SY QU BA HY NS];
LB30a.2:     RI CM* RI CM* ZJ (ID | EB | EM);
LB30a.3:     RI CM* RI CM* ÷;

# LB30b Do not break between Emoji Base and Emoji Modifier
LB30b:       EB CM* EM;

# LB31 Break Everywhere Else.
#      Include combining marks
LB31.1:        . CM* ZJ (ID | EB | EM);
LB31.2:        . CM* ÷;
