﻿#
# Copyright (c) 2016, International Business Machines Corporation and others. All Rights Reserved.

# file: line.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.


type = line;
locale = en;


AI = [:LineBreak =  Ambiguous:];
AL = [[:LineBreak =  Alphabetic:]-[\u2764]];
BA = [:LineBreak =  Break_After:];
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:][\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:];
NS = [[:LineBreak =  Nonstarter:] CJ];
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;
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 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.
LB21a:       HL CM* (HY | BA) CM* [^CM CB];

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* ÷;
