# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2002-2016  International Business Machines Corporation and
# others. All Rights Reserved.
#
#  file:  line_loose.txt
#
#         Line Breaking Rules
#         Implement default line breaking as defined by
#         Unicode Standard Annex #14 Revision 42 for Unicode 12.0
#         http://www.unicode.org/reports/tr14/, with the following modification:
#
#         Boundaries between hyphens and following letters are suppressed when
#         there is a boundary preceding the hyphen. See rule 20.9
#
#         This tailors the line break behavior to correspond to CSS
#         line-break=loose (BCP47 -u-lb-loose) as defined for languages other than
#         Chinese & Japanese.
#         It sets characters of class CJ to behave like ID.
#         In addition, it allows breaks:
#         * before iteration marks 3005, 303B, 309D, 309E, 30FD, 30FE (all NS)
#         * between characters of LineBreak class IN

#
#  Character Classes defined by TR 14.
#

!!chain;
!!quoted_literals_only;

$AI = [:LineBreak =  Ambiguous:];
$AL = [:LineBreak =  Alphabetic:];
$BA = [:LineBreak =  Break_After:];
$HH = [\u2010];     # \u2010 is HYPHEN, default line break is BA.
$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 = [:LineBreak =  EB:];
$EM = [:LineBreak =  EM:];
$EX = [:LineBreak =  Exclamation:];
$GL = [:LineBreak =  Glue:];
$HL = [:LineBreak =  Hebrew_Letter:];
$HY = [:LineBreak =  Hyphen:];
$H2 = [:LineBreak =  H2:];
$H3 = [:LineBreak =  H3:];
# CSS Loose tailoring: CJ resolves to ID
$ID = [[:LineBreak =  Ideographic:] $CJ];
$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 = [\u3005 \u303B \u309D \u309E \u30FD \u30FE];
$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:];
$ZWJ = [:LineBreak = ZWJ:];

# By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly
#         list it in the numerous rules that use CM.
# By LB1, SA characters with general categor of Mn or Mc also resolve to CM.

$CM = [[:LineBreak = Combining_Mark:] $ZWJ [$SA & [[:Mn:][:Mc:]]]];
$CMX = [[$CM] - [$ZWJ]];

#   Dictionary character set, for triggering language-based break engines. Currently
#   limited to LineBreak=Complex_Context (SA).

$dictionary = [$SA];

#
#  Rule LB1.  By default, treat AI  (characters with ambiguous east Asian width),
#                               SA  (Dictionary chars, excluding Mn and Mc)
#                               SG  (Unpaired Surrogates)
#                               XX  (Unknown, unassigned)
#                         as $AL  (Alphabetic)
#
$ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]];


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

#
# CAN_CM  is the set of characters that may combine with CM combining chars.
#         Note that Linebreak UAX 14's concept of a combining char and the rules
#         for what they can combine with are _very_ different from the rest of Unicode.
#
#         Note that $CM itself is left out of this set.  If CM is needed as a base
#         it must be listed separately in the rule.
#
$CAN_CM  = [^$SP $BK $CR $LF $NL $ZW $CM];       # Bases that can   take CMs
$CANT_CM = [ $SP $BK $CR $LF $NL $ZW $CM];       # Bases that can't take CMs

#
# AL_FOLLOW  set of chars that can unconditionally follow an AL
#            Needed in rules where stand-alone $CM s are treated as AL.
#
$AL_FOLLOW      = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus];


#
#  Rule LB 4, 5    Mandatory (Hard) breaks.
#
$LB4Breaks    = [$BK $CR $LF $NL];
$LB4NonBreaks = [^$BK $CR $LF $NL $CM];
$CR $LF {100};

#
#  LB 6    Do not break before hard line breaks.
#
$LB4NonBreaks?  $LB4Breaks {100};    # LB 5  do not break before hard breaks.
$CAN_CM $CM*    $LB4Breaks {100};
^$CM+           $LB4Breaks {100};

# LB 7         x SP
#              x ZW
$LB4NonBreaks [$SP $ZW];
$CAN_CM $CM*  [$SP $ZW];
^$CM+         [$SP $ZW];

#
# LB 8         Break after zero width space
#              ZW SP* ÷
#
$LB8Breaks    = [$LB4Breaks $ZW];
$LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]];
$ZW $SP* / [^$SP $ZW $LB4Breaks];

# LB 8a        ZWJ x            Do not break Emoji ZWJ sequences.
#
$ZWJ [^$CM];

# LB 9     Combining marks.      X   $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL
#                                $CM not covered by the above needs to behave like $AL
#                                See definition of $CAN_CM.

$CAN_CM $CM+;                   #  Stick together any combining sequences that don't match other rules.
^$CM+;

#
# LB 11  Do not break before or after WORD JOINER & related characters.
#
$CAN_CM $CM*  $WJ;
$LB8NonBreaks $WJ;
^$CM+         $WJ;

$WJ $CM* .;

#
# LB 12  Do not break after NBSP and related characters.
#         GL  x
#
$GL $CM* .;

#
# LB 12a  Do not break before NBSP and related characters ...
#            [^SP BA HY] x GL
#
[[$LB8NonBreaks] - [$SP $BA $HY]] $CM* $GL;
^$CM+ $GL;




# LB 13   Don't break before ']' or '!' or or '/', even after spaces.
#
$LB8NonBreaks $CL;
$CAN_CM $CM*  $CL;
^$CM+         $CL;              # by rule 10, stand-alone CM behaves as AL

$LB8NonBreaks $CP;
$CAN_CM $CM*  $CP;
^$CM+         $CP;              # by rule 10, stand-alone CM behaves as AL

$LB8NonBreaks $EX;
$CAN_CM $CM*  $EX;
^$CM+         $EX;              # by rule 10, stand-alone CM behaves as AL

$LB8NonBreaks $SY;
$CAN_CM $CM*  $SY;
^$CM+         $SY;              # by rule 10, stand-alone CM behaves as AL


#
# LB 14  Do not break after OP, even after spaces
#        Note subtle interaction with "SP IS /" rules in LB14a.
#        This rule consumes the SP, chaining happens on the IS, effectivley overriding the  SP IS rules,
#        which is the desired behavior.
#
$OP $CM* $SP* .;

$OP $CM* $SP+ $CM+ $AL_FOLLOW?;    # by rule 10, stand-alone CM behaves as AL
                                   # by rule 8, CM following a SP is stand-alone.


# LB 14a Force a break before start of a number with a leading decimal pt, e.g. " .23"
#        Note: would be simpler to express as "$SP / $IS $CM* $NU;", but ICU rules have limitations.
#        See issue ICU-20303


$CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL];
$SP $IS           / [^ $CanFollowIS $NU $CM];
$SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM];

#
# LB 14b Do not break before numeric separators (IS), even after spaces.

[$LB8NonBreaks - $SP] $IS;
$SP $IS $CM* [$CanFollowIS {eof}];
$SP $IS $CM* $ZWJ [^$CM $NU];

$CAN_CM $CM*  $IS;
^$CM+         $IS;              # by rule 10, stand-alone CM behaves as AL


# LB 15
$QU $CM* $SP* $OP;

# LB 16
# 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
($CL | $CP) $CM* $SP* $NS;

# LB 17
$B2 $CM* $SP* $B2;

#
# LB 18  Break after spaces.
#
$LB18NonBreaks = [$LB8NonBreaks - [$SP]];
$LB18Breaks    = [$LB8Breaks $SP];


# LB 19
#         x QU
$LB18NonBreaks $CM* $QU;
^$CM+               $QU;

#         QU  x
$QU $CM* .;

# LB 20
#        <break>  $CB
#        $CB   <break>
#
$LB20NonBreaks = [$LB18NonBreaks - $CB];

# LB 20.09    Don't break between Hyphens and Letters when there is a break preceding the hyphen.
#             Originally added as a Finnish tailoring, now promoted to default ICU behavior.
#             Note: this is not default UAX-14 behaviour. See issue ICU-8151.
#
^($HY | $HH) $CM* $ALPlus;

# LB 21        x   (BA | HY | NS)
#           BB x
#
# DO allow breaks here before NSX, so don't include it
$LB20NonBreaks $CM* ($BA | $HY | $NS);


^$CM+ ($BA | $HY | $NS);

$BB $CM* [^$CB];                                  #  $BB  x
$BB $CM* $LB20NonBreaks;

# LB 21a Don't break after Hebrew + Hyphen
#   HL (HY | BA) x
#
$HL $CM* ($HY | $BA) $CM* [^$CB]?;

# LB 21b (forward) Don't break between SY and HL
# (break between HL and SY already disallowed by LB 13 above)
$SY $CM* $HL;

# LB 22
($ALPlus | $HL) $CM* $IN;
^$CM+    $IN;     #  by rule 10, any otherwise unattached CM behaves as AL
$EX $CM*    $IN;
($ID | $EB | $EM) $CM*  $IN;
# $IN $CM*    $IN;  # delete this rule for CSS loose
$NU $CM*    $IN;


# $LB 23
#
($ALPlus | $HL) $CM* $NU;
^$CM+  $NU;       # Rule 10, any otherwise unattached CM behaves as AL
$NU $CM* ($ALPlus | $HL);

# LB 23a
#
$PR $CM* ($ID | $EB | $EM);
($ID | $EB | $EM) $CM*  $PO;


#
# LB 24
#
($PR | $PO) $CM* ($ALPlus | $HL);
($ALPlus | $HL) $CM* ($PR | $PO);
^$CM+ ($PR | $PO);       # Rule 10, any otherwise unattached CM behaves as AL

#
# LB 25   Numbers.
#
(($PR | $PO) $CM*)? (($OP | $HY) $CM*)? ($IS $CM*)? $NU ($CM* ($NU | $SY | $IS))*
    ($CM* ($CL | $CP))? ($CM* ($PR | $PO))?;

# LB 26  Do not break a Korean syllable
#
$JL $CM* ($JL | $JV | $H2 | $H3);
($JV | $H2) $CM* ($JV | $JT);
($JT | $H3) $CM* $JT;

# LB 27  Treat korean Syllable Block the same as ID  (don't break it)
($JL | $JV | $JT | $H2 | $H3) $CM* $IN;
($JL | $JV | $JT | $H2 | $H3) $CM* $PO;
$PR $CM* ($JL | $JV | $JT | $H2 | $H3);


# LB 28   Do not break between alphabetics
#
($ALPlus | $HL) $CM* ($ALPlus | $HL);
^$CM+ ($ALPlus | $HL);      # The $CM+ is from rule 10, an unattached CM is treated as AL

# LB 29
$IS $CM* ($ALPlus | $HL);

# LB 30
($ALPlus | $HL | $NU) $CM* $OP;
^$CM+ $OP;         # The $CM+ is from rule 10, an unattached CM is treated as AL.
$CP $CM* ($ALPlus | $HL | $NU);

# LB 30a  Do not break between regional indicators. Break after pairs of them.
#         Tricky interaction with LB8a: ZWJ x .   together with ZWJ acting like a CM.
$RI $CM* $RI                 / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]];
$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $CM]];
$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $ZWJ {eof}];
# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?'
#       because of the chain-out behavior difference. The rule must chain out only from the [set characters],
#       not from the preceding $RI or $CM, which it would be able to do if the set were optional.

# LB 30b Do not break between an Emoji Base and an Emoji Modifier
$EB $CM* $EM;

# LB 31 Break everywhere else.
#       Match a single code point if no other rule applies.
.;
