<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/83dbd57fff9fda16afc3ea29adda5aeb7ea23225">https://github.com/macports/macports-ports/commit/83dbd57fff9fda16afc3ea29adda5aeb7ea23225</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 83dbd57fff9fda16afc3ea29adda5aeb7ea23225
</span>Author: Dennis Camera <dennis.camera@riiengineering.ch>
AuthorDate: Sun Jan 14 20:25:57 2024 +0100

<span style='display:block; white-space:pre;color:#404040;'>    libreoffice: add patch for ICU 74
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Source:
</span><span style='display:block; white-space:pre;color:#404040;'>    https://gerrit.libreoffice.org/c/core/+/158749
</span>---
 office/libreoffice/Portfile           |    3 +
 office/libreoffice/files/6a2b1d9.diff | 1077 +++++++++++++++++++++++++++++++++
 2 files changed, 1080 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/office/libreoffice/Portfile b/office/libreoffice/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 22cbec2ce5b..14a4d8b91ad 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/office/libreoffice/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/office/libreoffice/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,6 +48,9 @@ distfiles           ${main_distfile}:main \
</span>                     skia-m111-a31e897fb3dcbc96b2b40999751611d029bf5404.tar.xz:skia \
                     nss-3.90-with-nspr-4.35.tar.gz:nss
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+patch.pre_args      -p1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   6a2b1d9.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> checksums           ${name}-${version}.tar.xz \
                     rmd160  dff03f1a5280abeda7179014e54b30d98fb75250 \
                     sha256  13fea7b8f24c776313b9e08628aa590390bea45064be73bc70ee7b1b70aa6a1e \
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/office/libreoffice/files/6a2b1d9.diff b/office/libreoffice/files/6a2b1d9.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..169db393954
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/office/libreoffice/files/6a2b1d9.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,1077 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Based on: https://gerrit.libreoffice.org/c/core/+/158749
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Modified to be applied on LibreOffice 7.6.4.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/configure.ac b/configure.ac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e41223f..ff72549 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -34568,2 +34568,2 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-ICU_MAJOR=73
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-ICU_MINOR=2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ICU_MAJOR=74
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ICU_MINOR=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/download.lst b/download.lst
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 60ac664..faccfc7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/download.lst
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/download.lst
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -312,10 +312,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # three static lines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # so that git cherry-pick
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # will not run into conflicts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-ICU_SHA256SUM := 818a80712ed3caacd9b652305e01afc7fa167e6f2e94996da44b90c2ab604ce1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-ICU_TARBALL := icu4c-73_2-src.tgz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-ICU_DATA_SHA256SUM := ca1ee076163b438461e484421a7679fc33a64cd0a54f9d4b401893fa1eb42701
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-ICU_DATA_TARBALL := icu4c-73_2-data.zip
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ICU_SHA256SUM := 86ce8e60681972e60e4dcb2490c697463fcec60dd400a5f9bffba26d0b52b8d0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ICU_TARBALL := icu4c-74_1-src.tgz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ICU_DATA_SHA256SUM := 67d5ab39c5187e1dd0fed60a3fe52794dce9784b4c045cb85e19f5d317fd783f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ICU_DATA_TARBALL := icu4c-74_1-data.zip
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # three static lines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # so that git cherry-pick
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # will not run into conflicts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/external/icu/icu4c-khmerbreakengine.patch.1 b/external/icu/icu4c-khmerbreakengine.patch.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6059140..db8ac50 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/external/icu/icu4c-khmerbreakengine.patch.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/external/icu/icu4c-khmerbreakengine.patch.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -796,7 +796,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+              if (wordCount < limit) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  if (values != nullptr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      values[wordCount] = bt.getValue();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ diff -ur icu.org/source/common/dictionarydata.h icu/source/common/dictionarydata.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --- icu.org/source/common/dictionarydata.h        2023-06-14 06:23:55.000000000 +0900
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ +++ icu/source/common/dictionarydata.h    2023-06-26 17:43:53.097724900 +0900
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/i18npool/source/breakiterator/data/line.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/i18npool/source/breakiterator/data/line.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,177 +1,112 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Copyright (c) 2002-2006  International Business Machines Corporation and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Copyright (C) 2016 and later: Unicode, Inc. and others.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# License & terms of use: http://www.unicode.org/copyright.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Copyright (c) 2002-2016  International Business Machines Corporation and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # others. All Rights Reserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  file:  line.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #         Line Breaking Rules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#         Implement default line breaking as defined by Unicode Standard Annex #14 version 5.0.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#         http://www.unicode.org/reports/tr14/
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         Implement default line breaking as defined by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         Unicode Standard Annex #14 (https://www.unicode.org/reports/tr14/)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         for Unicode 14.0, with the following modification:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         Boundaries between hyphens and following letters are suppressed when
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         there is a boundary preceding the hyphen. See rule 20.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         This corresponds to CSS line-break=strict (BCP47 -u-lb-strict).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         It sets characters of class CJ to behave like NS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  Character Classes defined by TR 14.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ !!chain;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-!!LBCMNoChain;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-!!lookAheadHardBreak;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  !!lookAheadHardBreak    Described here because it is (as yet) undocumented elsewhere
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                          and only used for the line break rules.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           It is used in the implementation of the incredibly annoying rule LB 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           which says to treat any combining mark that is not attached to a base
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           character as if it were of class AL  (alphabetic).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           The problem occurs in the reverse rules.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           Consider a sequence like, with correct breaks as shown
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#               LF  ID  CM  AL  AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                  ^       ^       ^
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           Then consider the sequence without the initial ID (ideographic)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                 LF  CM  AL  AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                    ^           ^
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           Our CM, which in the first example was attached to the ideograph,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           is now unattached, becomes an alpha, and joins in with the other
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           alphas.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           When iterating forwards, these sequences do not present any problems
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           When iterating backwards, we need to look ahead when encountering
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           a CM to see whether it attaches to something further on or not.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           (Look-ahead in a reverse rule is looking towards the start)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           If the CM is unattached, we need to force a break.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           !!lookAheadHardBreak forces the run time state machine to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           stop immediately when a look ahead rule ( '/' operator) matches,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           and set the match position to that of the look-ahead operator,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           no matter what other rules may be in play at the time.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           See rule LB 19 for an example.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++!!quoted_literals_only;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $AI = [:LineBreak =  Ambiguous:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$DG = \u00B0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$AL = [[:LineBreak =  Alphabetic:] $DG];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$AK = [:LineBreak =  Aksara:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$AL = [:LineBreak =  Alphabetic:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$AP = [:LineBreak =  Aksara_Prebase:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$AS = [:LineBreak =  Aksara_Start:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $BA = [:LineBreak =  Break_After:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$HH = [\u2010];     # \u2010 is HYPHEN, default line break is BA.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $BB = [:LineBreak =  Break_Before:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $BK = [:LineBreak =  Mandatory_Break:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $B2 = [:LineBreak =  Break_Both:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CB = [:LineBreak =  Contingent_Break:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CJ = [:LineBreak =  Conditional_Japanese_Starter:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CL = [:LineBreak =  Close_Punctuation:] ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM = [:LineBreak =  Combining_Mark:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CL = [:LineBreak =  Close_Punctuation:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# $CM = [:LineBreak =  Combining_Mark:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CP = [:LineBreak =  Close_Parenthesis:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CR = [:LineBreak =  Carriage_Return:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$EB = [:LineBreak =  EB:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$EM = [:LineBreak =  EM:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $EX = [:LineBreak =  Exclamation:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $GL = [:LineBreak =  Glue:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $HL = [:LineBreak =  Hebrew_Letter:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $HY = [:LineBreak =  Hyphen:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $H2 = [:LineBreak =  H2:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $H3 = [:LineBreak =  H3:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$ID = [[:LineBreak =  Ideographic:] - [\ufe30]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IN = [:LineBreak =  Inseparable:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IS = [[:LineBreak =  Infix_Numeric:] [\ufe30]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$ID = [:LineBreak =  Ideographic:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$IN = [:LineBreak =  Inseperable:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$IS = [:LineBreak =  Infix_Numeric:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $JL = [:LineBreak =  JL:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $JV = [:LineBreak =  JV:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $JT = [:LineBreak =  JT:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LF = [:LineBreak =  Line_Feed:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $NL = [:LineBreak =  Next_Line:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# NS includes CJ for CSS strict line breaking.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $NS = [[:LineBreak =  Nonstarter:] $CJ];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $NU = [:LineBreak =  Numeric:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$OP = [[:LineBreak =  Open_Punctuation:] - $DG];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$OP = [:LineBreak =  Open_Punctuation:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $PO = [:LineBreak =  Postfix_Numeric:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$BS = \u005C;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$PR = [[:LineBreak =  Prefix_Numeric:] - $BS];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$PR = [:LineBreak =  Prefix_Numeric:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $QU = [:LineBreak =  Quotation:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$RI = [:LineBreak =  Regional_Indicator:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $SA = [:LineBreak =  Complex_Context:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $SG = [:LineBreak =  Surrogate:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $SP = [:LineBreak =  Space:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SY = [[:LineBreak =  Break_Symbols:] $BS];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$SY = [:LineBreak =  Break_Symbols:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$VF = [:LineBreak =  Virama_Final:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$VI = [:LineBreak =  Virama:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $WJ = [:LineBreak =  Word_Joiner:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $XX = [:LineBreak =  Unknown:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $ZW = [:LineBreak =  ZWSpace:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$ZWJ = [:LineBreak = ZWJ:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# OP30 and CP30 are variants of OP and CP that appear in-line in rule LB30 from UAX 14,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# without a formal name. Because ICU rules require multiple uses of the expressions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# give them a single definition with a name
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$OP30 = [$OP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CP30 = [$CP - [\p{ea=F}\p{ea=W}\p{ea=H}]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$ExtPictUnassigned = [\p{Extended_Pictographic} & \p{Cn}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# By LB9, a ZWJ also behaves as a CM. Including it in the definition of CM avoids having to explicitly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         list it in the numerous rules that use CM.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# By LB1, SA characters with general categor of Mn or Mc also resolve to CM.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CM = [[:LineBreak = Combining_Mark:] $ZWJ [$SA & [[:Mn:][:Mc:]]]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CMX = [[$CM] - [$ZWJ]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #   Dictionary character set, for triggering language-based break engines. Currently
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   limited to LineBreak=Complex_Context. Note that this set only works in Unicode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   5.0 or later as the definition of Complex_Context was corrected to include all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   characters requiring dictionary break.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   limited to LineBreak=Complex_Context (SA).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$dictionary = [:LineBreak = Complex_Context:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$dictionary = [$SA];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  Rule LB1.  By default, treat AI  (characters with ambiguous east Asian width),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                               SA  (South East Asian: Thai, Lao, Khmer)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#                               SA  (Dictionary chars, excluding Mn and Mc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #                               SG  (Unpaired Surrogates)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #                               XX  (Unknown, unassigned)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #                         as $AL  (Alphabetic)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$ALPlus = [$AL $AI $SA $SG $XX];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$ALPlus = [$AL $AI $SG $XX [$SA-[[:Mn:][:Mc:]]]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  Combining Marks.   X $CM*  behaves as if it were X.  Rule LB6.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$ALcm = $ALPlus $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$BAcm = $BA $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$BBcm = $BB $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$B2cm = $B2 $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CLcm = $CL $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$EXcm = $EX $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$GLcm = $GL $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$HLcm = $HL $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$HYcm = $HY $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$H2cm = $H2 $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$H3cm = $H3 $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IDcm = $ID $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$INcm = $IN $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IScm = $IS $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$JLcm = $JL $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$JVcm = $JV $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$JTcm = $JT $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$NScm = $NS $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$NUcm = $NU $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$OPcm = $OP $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$POcm = $PO $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$PRcm = $PR $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$QUcm = $QU $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SYcm = $SY $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$WJcm = $WJ $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ## -------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-!!forward;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  Each class of character can stand by itself as an unbroken token, with trailing combining stuff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$ALPlus $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$BA $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$BB $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$B2 $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CL $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$EX $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$GL $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$HL $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$HY $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$H2 $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$H3 $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$ID $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IN $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IS $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$JL $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$JV $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$JT $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$NS $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$NU $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$OP $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$PO $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$PR $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$QU $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SY $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$WJ $CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # CAN_CM  is the set of characters that may combine with CM combining chars.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #         Note that Linebreak UAX 14's concept of a combining char and the rules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -186,19 +121,15 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # AL_FOLLOW  set of chars that can unconditionally follow an AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #            Needed in rules where stand-alone $CM s are treated as AL.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#            Chaining is disabled with CM because it causes other failures,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#            so for this one case we need to manually list out longer sequences.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$AL_FOLLOW_NOCM = [$BK $CR $LF $NL $ZW $SP];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$AL_FOLLOW_CM   = [$CL $EX $HL $IS $SY $WJ $GL $QU $BA $HY $NS $IN $NU $ALPlus $OP];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$AL_FOLLOW      = [$AL_FOLLOW_NOCM $AL_FOLLOW_CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$AL_FOLLOW      = [$BK $CR $LF $NL $ZW $SP $CL $CP $EX $HL $IS $SY $WJ $GL $OP30 $QU $BA $HY $NS $IN $NU $PR $PO $ALPlus];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #  Rule LB 4, 5    Mandatory (Hard) breaks.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB4Breaks    = [$BK $CR $LF $NL];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LB4NonBreaks = [^$BK $CR $LF $NL];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB4NonBreaks = [^$BK $CR $LF $NL $CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CR $LF {100};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -206,91 +137,134 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB4NonBreaks?  $LB4Breaks {100};    # LB 5  do not break before hard breaks.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CAN_CM $CM*    $LB4Breaks {100};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+            $LB4Breaks {100};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+           $LB4Breaks {100};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 7         x SP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #              x ZW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB4NonBreaks [$SP $ZW];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CAN_CM $CM*  [$SP $ZW];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+          [$SP $ZW];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+         [$SP $ZW];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 8         Break after zero width space
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#              ZW SP* รท
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB8Breaks    = [$LB4Breaks $ZW];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB8NonBreaks = [[$LB4NonBreaks] - [$ZW]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$ZW $SP* / [^$SP $ZW $LB4Breaks];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 8a        ZWJ x            Do not break Emoji ZWJ sequences.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$ZWJ [^$CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 9     Combining marks.      X   $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                                $CM not covered by the above needs to behave like $AL   
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 9     Combining marks.      X   $CM needs to behave like X, where X is not $SP, $BK $CR $LF $NL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#                                $CM not covered by the above needs to behave like $AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #                                See definition of $CAN_CM.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CAN_CM $CM+;                   #  Stick together any combining sequences that don't match other rules.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 11  Do not break before or after WORD JOINER & related characters.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CAN_CM $CM*  $WJcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LB8NonBreaks $WJcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+          $WJcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CAN_CM $CM*  $WJ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB8NonBreaks $WJ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+         $WJ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$WJcm [^$CAN_CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$WJcm $CAN_CM $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$WJ $CM* .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 12  Do not break before or after NBSP and related characters.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#         (!SP) x GL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[$LB8NonBreaks-$SP] $CM* $GLcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+               $GLcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 12  Do not break after NBSP and related characters.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #         GL  x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$GLcm ($LB8Breaks | $SP);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$GLcm [$LB8NonBreaks-$SP] $CM*;     # Don't let a combining mark go onto $CR, $BK, etc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                              #  TODO:  I don't think we need this rule.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                              #         All but $CM will chain off of preceding rule.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                              #         $GLcm will pick up the CM case by itself.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$GL $CM* .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 13   Don't break before ']' or '!' or ';' or '/', even after spaces.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 12a  Do not break before NBSP and related characters ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#            [^SP BA HY] x GL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[[$LB8NonBreaks] - [$SP $BA $HY]] $CM* $GL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+ $GL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 13   Don't break before ']' or '!' or '/', even after spaces.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB8NonBreaks $CL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CAN_CM $CM*  $CL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+          $CL;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+         $CL;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB8NonBreaks $CP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CAN_CM $CM*  $CP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+         $CP;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB8NonBreaks $EX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CAN_CM $CM*  $EX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+          $EX;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LB8NonBreaks $IS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CAN_CM $CM*  $IS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+          $IS;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+         $EX;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB8NonBreaks $SY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CAN_CM $CM*  $SY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+          $SY;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+         $SY;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 14  Do not break after OP, even after spaced
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 14  Do not break after OP, even after spaces
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#        Note subtle interaction with "SP IS /" rules in LB14a.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#        This rule consumes the SP, chaining happens on the IS, effectivley overriding the  SP IS rules,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#        which is the desired behavior.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$OPcm $SP* $CAN_CM $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$OPcm $SP* $CANT_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$OP $CM* $SP* .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$OPcm $SP+ $CM+ $AL_FOLLOW?;    # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$OP $CM* $SP+ $CM+ $AL_FOLLOW?;    # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                   # by rule 8, CM following a SP is stand-alone.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# $QUcm $SP* $OPcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 15a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($OP $CM* $SP+ | [$OP $QU $GL] $CM*) ([\p{Pi} & $QU] $CM* $SP*)+ .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($OP $CM* $SP+ | [$OP $QU $GL] $CM*) ([\p{Pi} & $QU] $CM* $SP*)+ $SP $CM+ $AL_FOLLOW?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^([\p{Pi} & $QU] $CM* $SP*)+ .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^([\p{Pi} & $QU] $CM* $SP*)+ $SP $CM+ $AL_FOLLOW?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 15b
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB8NonBreaks [\p{Pf} & $QU] $CM* [$SP $GL $WJ $CL $QU $CP $EX $IS $SY $BK $CR $LF $NL $ZW {eof}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CAN_CM $CM*  [\p{Pf} & $QU] $CM* [$SP $GL $WJ $CL $QU $CP $EX $IS $SY $BK $CR $LF $NL $ZW {eof}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+  [\p{Pf} & $QU] $CM* [$SP $GL $WJ $CL $QU $CP $EX $IS $SY $BK $CR $LF $NL $ZW {eof}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Messy interaction: manually chain between LB 15b and LB 15a on Pf Pi.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB8NonBreaks [\p{Pf} & $QU] $CM* ([\p{Pi} & $QU] $CM* $SP*)+ .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB8NonBreaks [\p{Pf} & $QU] $CM* ([\p{Pi} & $QU] $CM* $SP*)+ $SP $CM+ $AL_FOLLOW?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CAN_CM $CM*  [\p{Pf} & $QU] $CM* ([\p{Pi} & $QU] $CM* $SP*)+ .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CAN_CM $CM*  [\p{Pf} & $QU] $CM* ([\p{Pi} & $QU] $CM* $SP*)+ $SP $CM+ $AL_FOLLOW?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+  [\p{Pf} & $QU] $CM* ([\p{Pi} & $QU] $CM* $SP*)+ .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+  [\p{Pf} & $QU] $CM* ([\p{Pi} & $QU] $CM* $SP*)+ $SP $CM+ $AL_FOLLOW?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 15c Force a break before start of a number with a leading decimal pt, e.g. " .23"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#        Note: would be simpler to express as "$SP / $IS $CM* $NU;", but ICU rules have limitations.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#        See issue ICU-20303
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CanFollowIS = [$BK $CR $LF $NL $SP $ZW $WJ $GL $CL $CP $EX $IS $SY $QU $BA $HY $NS $ALPlus $HL $IN];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$SP $IS           / [^ $CanFollowIS $NU $CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$SP $IS $CM* $CMX / [^ $CanFollowIS $NU $CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 15d Do not break before numeric separators (IS), even after spaces.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[$LB8NonBreaks - $SP] $IS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$SP $IS $CM* [$CanFollowIS {eof}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$SP $IS $CM* $ZWJ [^$CM $NU];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CAN_CM $CM*  $IS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+         $IS;              # by rule 10, stand-alone CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CLcm $SP* $NScm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($CL | $CP) $CM* $SP* $NS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 17
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$B2cm $SP* $B2cm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$B2 $CM* $SP* $B2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 18  Break after spaces.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -301,347 +275,115 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 19
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #         x QU
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LB18NonBreaks $CM* $QUcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+                $QUcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB18NonBreaks $CM* $QU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+               $QU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #         QU  x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$QUcm .?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$QUcm $LB18NonBreaks $CM*;    # Don't let a combining mark go onto $CR, $BK, etc.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                              #  TODO:  I don't think this rule is needed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$QU $CM* .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #        <break>  $CB
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #        $CB   <break>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LB20NonBreaks = [$LB18NonBreaks - $CB];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 20.09    Don't break between Hyphens and Letters when there is a break preceding the hyphen.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#             Originally added as a Finnish tailoring, now promoted to default ICU behavior.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#             Note: this is not default UAX-14 behaviour. See issue ICU-8151.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^($HY | $HH) $CM* $ALPlus;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 21        x   (BA | HY | NS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #           BB x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LB20NonBreaks $CM* ($BAcm | $HYcm | $NScm); 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB20NonBreaks $CM* ($BA | $HY | $NS);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$BBcm [^$CB];                                  #  $BB  x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$BBcm $LB20NonBreaks $CM*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+ ($BA | $HY | $NS);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$BB $CM* [^$CB];                                  #  $BB  x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$BB $CM* $LB20NonBreaks;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 21a Don't break after Hebrew + Hyphen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #   HL (HY | BA) x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$HLcm ($HYcm | $BAcm) [^$CB]?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$HL $CM* ($HY | $BA) $CM* [^$CB]?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 22
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($ALcm | $HLcm) $INcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+     $INcm;     #  by rule 10, any otherwise unattached CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IDcm    $INcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$INcm    $INcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$NUcm    $INcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 21b (forward) Don't break between SY and HL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# (break between HL and SY already disallowed by LB 13 above)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$SY $CM* $HL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 22  Do not break before ellipses
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LB20NonBreaks $CM*    $IN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+ $IN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# $LB 23
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IDcm  $POcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$ALcm  $NUcm;       # includes $LB19
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$HLcm  $NUcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+   $NUcm;       # Rule 10, any otherwise unattached CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$NUcm  $ALcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$NUcm  $HLcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 23
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($ALPlus | $HL) $CM* $NU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+  $NU;       # Rule 10, any otherwise unattached CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$NU $CM* ($ALPlus | $HL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 23a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$PR $CM* ($ID | $EB | $EM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($ID | $EB | $EM) $CM*  $PO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 24
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$PRcm $IDcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$ALcm $PRcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$PRcm ($ALcm | $HLcm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$POcm ($ALcm | $HLcm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($PR | $PO) $CM* ($ALPlus | $HL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($ALPlus | $HL) $CM* ($PR | $PO);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+ ($PR | $PO);       # Rule 10, any otherwise unattached CM behaves as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 25   Numbers.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($PRcm | $POcm)? ($OPcm)? $NUcm ($NUcm | $SYcm | $IScm)* $CLcm? ($PRcm | $POcm)?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++(($PR | $PO) $CM*)? (($OP | $HY) $CM*)? ($IS $CM*)? $NU ($CM* ($NU | $SY | $IS))*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ($CM* ($CL | $CP))? ($CM* ($PR | $PO))?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 26  Do not break a Korean syllable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$JLcm ($JLcm | $JVcm | $H2cm | $H3cm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($JVcm | $H2cm) ($JVcm | $JTcm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($JTcm | $H3cm) $JTcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$JL $CM* ($JL | $JV | $H2 | $H3);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($JV | $H2) $CM* ($JV | $JT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($JT | $H3) $CM* $JT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 27  Treat korean Syllable Block the same as ID  (don't break it)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $INcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($JLcm | $JVcm | $JTcm | $H2cm | $H3cm) $POcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$PRcm ($JLcm | $JVcm | $JTcm | $H2cm | $H3cm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($JL | $JV | $JT | $H2 | $H3) $CM* $PO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$PR $CM* ($JL | $JV | $JT | $H2 | $H3);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 28   Do not break between alphabetics
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($ALcm | $HLcm) ($ALcm | $HLcm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ ($ALcm | $HLcm);      # The $CM+ is from rule 10, an unattached CM is treated as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($ALPlus | $HL) $CM* ($ALPlus | $HL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+ ($ALPlus | $HL);      # The $CM+ is from rule 10, an unattached CM is treated as AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#LB 28a  Do not break Orthographic syllables
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($AP $CM*)? ($AS | $AK | [โ—Œ] ) ($CM* $VI $CM* ($AK | [โ—Œ] ))* ($CM* $VI | (($CM* ($AS | $AK | [โ—Œ] ) )? $CM* $VF))?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 29
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IScm ($ALcm | $NUcm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Rule 30   Do not break between letters, numbers or ordinary symbols
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#           and opening or closing punctuation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($ALcm | $HLcm | $NUcm) $OPcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $OPcm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CLcm ($ALcm | $HLcm | $NUcm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  Reverse Rules.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-## -------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-!!reverse;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $ALPlus;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $BA;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $BB;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $B2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $CL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $EX;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $GL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $HL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $HY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $H2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $H3;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $ID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $IN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $IS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $JL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $JV;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $JT;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $NS;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $NU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $OP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $PO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $PR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $QU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $SY;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $WJ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  Sequences of the form  (shown forwards)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#      [CANT_CM]  <break>  [CM]  [whatever]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  The CM needs to behave as an AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$AL_FOLLOW $CM+ / (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          [$BK $CR $LF $NL $ZW {eof}] |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          $SP+ $CM+ $SP |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          $SP+ $CM* ([^$OP $CM $SP] | [$AL {eof}]));   # if LB 14 will match, need to suppress this break.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                               #  LB14 says    OP SP* x .        
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                               #    becomes    OP SP* x AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                               #    becomes    OP SP* x CM+ AL_FOLLOW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                               #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                               # Further note:  the $AL in [$AL {eof}] is only to work around
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                               #                a rule compiler bug which complains about
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                                               #                empty sets otherwise.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  Sequences of the form  (shown forwards)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#      [CANT_CM]  <break> [CM]  <break>  [PR]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  The CM needs to behave as an AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  This rule is concerned about getting the second of the two <breaks> in place.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[$PR   ] / $CM+ [$BK $CR $LF $NL $ZW $SP {eof}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 4, 5, 5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LB4Breaks [$LB4NonBreaks-$CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LB4Breaks $CM+ $CAN_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LF $CR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 7         x SP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#              x ZW
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[$SP $ZW] [$LB4NonBreaks-$CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[$SP $ZW] $CM+ $CAN_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 8 Break after zero width space
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 9,10  Combining marks.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#    X   $CM needs to behave like X, where X is not $SP or controls.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#    $CM not covered by the above needs to behave like $AL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Stick together any combining sequences that don't match other rules.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $CAN_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $WJ $CM* $CAN_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $WJ      [$LB8NonBreaks-$CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-     $CANT_CM $CM* $WJ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $CAN_CM  $CM* $WJ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#         x GL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $GL $CM* [$LB8NonBreaks-$CM-$SP];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#     GL  x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CANT_CM $CM* $GL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $CAN_CM $CM* $GL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CL $CM+ $CAN_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$EX $CM+ $CAN_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IS $CM+ $CAN_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SY $CM+ $CAN_CM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CL [$LB8NonBreaks-$CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$EX [$LB8NonBreaks-$CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$IS [$LB8NonBreaks-$CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SY [$LB8NonBreaks-$CM];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Rule 13 & 14 taken together for an edge case.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   Match this, shown forward
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#     OP SP+  ($CM+ behaving as $AL) (CL | EX | IS | IY)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   This really wants to chain at the $CM+ (which is acting as an $AL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   except for $CM chaining being disabled.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[$CL $EX $IS $SY] $CM+ $SP+ $CM* $OP;  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 14    OP SP* x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $CAN_CM    $SP* $CM* $OP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-     $CANT_CM   $SP* $CM* $OP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$AL_FOLLOW? $CM+  $SP $SP* $CM* $OP;     #  by LB 10, behaves like $AL_FOLLOW? $AL $SP* $CM* $OP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-     
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-     $AL_FOLLOW_NOCM $CM+ $SP+ $CM* $OP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $AL_FOLLOW_CM   $CM+ $SP+ $CM* $OP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SY $CM $SP+ $OP;   # TODO:  Experiment.  Remove.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 15
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# $CM* $OP $SP* $CM* $QU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 16
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $NS $SP* $CM* $CL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 17
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $B2 $SP* $CM* $B2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 18  break after spaces
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#        Nothing explicit needed here.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 19
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $QU $CM* $CAN_CM;                                #   . x QU
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $QU      $LB18NonBreaks;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $CAN_CM  $CM* $QU;                               #   QU x .
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-     $CANT_CM $CM* $QU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-     
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  LB 20  Break before and after CB.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#         nothing needed here.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 21
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($BA | $HY | $NS) $CM* [$LB20NonBreaks-$CM];     #  . x (BA | HY | NS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* [$LB20NonBreaks-$CM] $CM* $BB;                   #  BB x .
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[^$CB] $CM* $BB;                                      # 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB21a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[^$CB] $CM* ($HY | $BA) $CM* $HL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 22
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $IN $CM* ($ALPlus | $HL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $IN $CM* $ID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $IN $CM* $IN;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $IN $CM* $NU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 23
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $PO $CM* $ID;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $NU $CM* ($ALPlus | $HL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($ALPlus | $HL) $CM* $NU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 24
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $ID $CM* $PR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $PR $CM* $ALPlus;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($ALPlus | $HL) $CM* $PR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($ALPlus | $HL) $CM* $PO;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $ALPlus $CM* ($IS | $SY | $HY)+ / $SP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $NU+ $CM* $HY+ / $SP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 25
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($CM* ($PR | $PO))? ($CM* $CL)? ($CM* ($NU | $IS | $SY))* $CM* $NU ($CM* ($OP))? ($CM* ($PR | $PO))?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 26
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($H3 | $H2 | $JV | $JL) $CM* $JL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($JT | $JV) $CM* ($H2 | $JV);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $JT $CM* ($H3 | $JT);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 27
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $IN $CM* ($H3 | $H2 | $JT | $JV | $JL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $PO $CM* ($H3 | $H2 | $JT | $JV | $JL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($H3 | $H2 | $JT | $JV | $JL) $CM* $PR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 28
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($ALPlus | $HL) $CM* ($ALPlus | $HL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 29
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($NU | $ALPlus) $CM* $IS+ [^$SP];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$IS $CM* ($ALPlus | $HL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # LB 30
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* $OP $CM* ($ALPlus | $HL | $NU);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($ALPlus | $HL | $NU) $CM* ($CL | $SY)+ [^$SP];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($ALPlus | $HL | $NU) $CM* $OP30;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++^$CM+ $OP30;         # The $CM+ is from rule 10, an unattached CM is treated as AL.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CP30 $CM* ($ALPlus | $HL | $NU);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 30a  Do not break between regional indicators. Break after pairs of them.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#         Tricky interaction with LB8a: ZWJ x .   together with ZWJ acting like a CM.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$RI $CM* $RI                 / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$RI $CM* $RI $CM* [$CM-$ZWJ] / [[^$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $CM]];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$RI $CM* $RI $CM* [$BK $CR $LF $NL $SP $ZW $WJ $CL $CP $EX $IS $SY $GL $QU $BA $HY $NS $IN $ZWJ {eof}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# note: the preceding rule includes {eof} rather than having the last [set] term qualified with '?'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#       because of the chain-out behavior difference. The rule must chain out only from the [set characters],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#       not from the preceding $RI or $CM, which it would be able to do if the set were optional.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-## -------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB30b Do not break between an emoji base (or potential emoji) and an emoji modifier.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$EB $CM* $EM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$ExtPictUnassigned $CM* $EM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-!!safe_reverse;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ [^$CM $BK $CR $LF $NL $ZW $SP];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM+ $SP / .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SP+ $CM* $OP;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SP+ $CM* $QU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SP+ $CM* $CL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SP+ $CM* $B2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 21
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CM* ($HY | $BA) $CM* $HL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# LB 18
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($CM* ($IS | $SY))+ $CM* $NU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CL $CM* ($NU | $IS | $SY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# For dictionary-based break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$dictionary $dictionary;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-## -------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-!!safe_forward;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Skip forward over all character classes that are involved in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   rules containing patterns with possibly more than one char
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   of context.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  It might be slightly more efficient to have specific rules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  instead of one generic one, but only if we could
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  turn off rule chaining.  We don't want to move more
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  than necessary.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[$CM $OP $QU $CL $B2 $PR $HY $BA $SP $dictionary]+ [^$CM $OP $QU $CL $B2 $PR $HY $BA $dictionary];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$dictionary $dictionary;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# LB 31 Break everywhere else.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#       Match a single code point if no other rule applies.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++.;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/i18npool/source/breakiterator/data/sent.txt b/i18npool/source/breakiterator/data/sent.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7fada89..eb1224e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/i18npool/source/breakiterator/data/sent.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/i18npool/source/breakiterator/data/sent.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,43 +1,40 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Copyright (C) 2016 and later: Unicode, Inc. and others.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# License & terms of use: http://www.unicode.org/copyright.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   Copyright (C) 2002-2006, International Business Machines Corporation and others.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   Copyright (C) 2002-2015, International Business Machines Corporation and others.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #       All Rights Reserved.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #   file:  sent.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #   ICU Sentence Break Rules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #      See Unicode Standard Annex #29.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#      These rules are based on SA 29 version 5.0.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#      Includes post 5.0 changes to treat Japanese half width voicing marks
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#        as Grapheme Extend.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#      These rules are based on UAX #29 Revision 34 for Unicode Version 12.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$VoiceMarks   = [\uff9e\uff9f];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$Thai         = [:Script = Thai:];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++!!quoted_literals_only;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Character categories as defined in TR 29
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$CR        = [\p{Sentence_Break = CR}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$LF        = [\p{Sentence_Break = LF}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$Extend    = [\p{Sentence_Break = Extend}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $Sep       = [\p{Sentence_Break = Sep}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $Format    = [\p{Sentence_Break = Format}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $Sp        = [\p{Sentence_Break = Sp}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $Lower     = [\p{Sentence_Break = Lower}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $Upper     = [\p{Sentence_Break = Upper}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$OLetter   = [\p{Sentence_Break = OLetter}-$VoiceMarks];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$OLetter   = [\p{Sentence_Break = OLetter}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $Numeric   = [\p{Sentence_Break = Numeric}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $ATerm     = [\p{Sentence_Break = ATerm}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$SContinue = [\p{Sentence_Break = SContinue}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $STerm     = [\p{Sentence_Break = STerm}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $Close     = [\p{Sentence_Break = Close}];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Define extended forms of the character classes,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   incorporate grapheme cluster + format chars.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#   Rules 4 and 5.  
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CR         = \u000d;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LF         = \u000a;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$Extend     = [[:Grapheme_Extend = TRUE:]$VoiceMarks];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   incorporate trailing Extend or Format chars.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#   Rules 4 and 5.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $SpEx       = $Sp      ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $LowerEx    = $Lower   ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -45,6 +42,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $OLetterEx  = $OLetter ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $NumericEx  = $Numeric ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $ATermEx    = $ATerm   ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$SContinueEx= $SContinue ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $STermEx    = $STerm   ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CloseEx    = $Close   ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -52,77 +50,34 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ## -------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ !!chain;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-!!forward;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Rule 3 - break after separators.  Keep CR/LF together.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $CR $LF;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LettersEx = [$OLetter $Upper $Lower $Numeric $Close $STerm] ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$LettersEx* $Thai $LettersEx* ($ATermEx | $SpEx)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Rule 4 - Break after $Sep.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Rule 5 - Ignore $Format and $Extend
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[^$Sep]? ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[^$Sep $CR $LF]? ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Rule 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $ATermEx $NumericEx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Rule 7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$UpperEx $ATermEx $UpperEx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($UpperEx | $LowerEx) $ATermEx $UpperEx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #Rule 8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  Note:  follows errata for Unicode 5.0 boundary rules.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$NotLettersEx = [^$OLetter $Upper $Lower $Sep $ATerm $STerm] ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++$NotLettersEx = [^$OLetter $Upper $Lower $Sep $CR $LF $ATerm $STerm] ($Extend | $Format)*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $ATermEx $CloseEx* $SpEx* $NotLettersEx* $Lower;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Rule 8a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($STermEx | $ATermEx) $CloseEx* $SpEx* ($STermEx | $ATermEx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($STermEx | $ATermEx) $CloseEx* $SpEx* ($SContinueEx | $STermEx | $ATermEx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #Rule 9, 10, 11
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-($STermEx | $ATermEx) $CloseEx* $SpEx* $Sep?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++($STermEx | $ATermEx) $CloseEx* $SpEx* ($Sep | $CR | $LF)?;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#Rule 12
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[[^$STerm $ATerm $Close $Sp $Sep $Format $Extend $Thai]{bof}] ($Extend | $Format | $Close | $Sp)* [^$Thai];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[[^$STerm $ATerm $Close $Sp $Sep $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* ([$Sep{eof}] | $CR $LF){100};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-## -------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-!!reverse;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$SpEx_R       = ($Extend | $Format)* $Sp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$ATermEx_R    = ($Extend | $Format)* $ATerm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$STermEx_R    = ($Extend | $Format)* $STerm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-$CloseEx_R    = ($Extend | $Format)* $Close;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#  Reverse rules.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#     For now, use the old style inexact reverse rules, which are easier
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#     to write, but less efficient.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#     TODO:  exact reverse rules.  It appears that exact reverse rules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#            may require improving support for look-ahead breaks in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#            builder.  Needs more investigation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-[{bof}] (.? | $LF $CR) [^$Sep]* [$Sep {eof}] ($SpEx_R* $CloseEx_R* ($STermEx_R | $ATermEx_R))*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#.*;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Explanation for this rule:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#    It needs to back over
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#        The $Sep at which we probably begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#        All of the non $Sep chars leading to the preceding $Sep
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#        The preceding $Sep, which will be the second one that the rule matches.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#        Any immediately preceding STerm or ATerm sequences.  We need to see these
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#              to get the correct rule status when moving forwards again.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#        
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# [{bof}]           inhibit rule chaining.  Without this, rule would loop on itself and match
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                   the entire string.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# (.? | $LF $CR)    Match one $Sep instance.  Use .? rather than $Sep because position might be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                   at the beginning of the string at this point, and we don't want to fail.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#                   Can only use {eof} once, and it is used later.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#Rule 998
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[[^$STerm $ATerm $Close $Sp $Sep $LF $CR $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++[[^$STerm $ATerm $Close $Sp $Sep $LF $CR $Format $Extend]{bof}] ($Extend | $Format | $Close | $Sp)* ([$Sep $LF $CR {eof}] | $CR $LF){100};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/include/svx/strings.hrc b/include/svx/strings.hrc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8dc2aa0..b294bdf 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/include/svx/strings.hrc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/include/svx/strings.hrc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1800,6 +1800,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define RID_SUBSETSTR_KAKTOVIK_NUMERALS                     NC_("RID_SUBSETMAP", "Kaktovik Numerals")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define RID_SUBSETSTR_KAWI                                  NC_("RID_SUBSETMAP", "Kawi")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define RID_SUBSETSTR_NAG_MUNDARI                           NC_("RID_SUBSETMAP", "Nag Mundari")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I    NC_("RID_SUBSETMAP", "CJK Unified Ideographs Extension I")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define RID_SVXSTR_FRAMEDIR_LTR                             NC_("RID_SVXSTR_FRAMEDIR_LTR", "Left-to-right (LTR)")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define RID_SVXSTR_FRAMEDIR_RTL                             NC_("RID_SVXSTR_FRAMEDIR_RTL", "Right-to-left (RTL)")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/svx/source/dialog/charmap.cxx b/svx/source/dialog/charmap.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index dcb1205..a5c84a7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/svx/source/dialog/charmap.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/svx/source/dialog/charmap.cxx
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1924,6 +1924,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     aAllSubsets.emplace_back( 0x1E4D0, 0x1E4FF, SvxResId(RID_SUBSETSTR_NAG_MUNDARI) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if (U_ICU_VERSION_MAJOR_NUM >= 74)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    aAllSubsets.emplace_back( 0x2EBF0, 0x2EE5F, SvxResId(RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_I) );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if OSL_DEBUG_LEVEL > 0 && !defined NDEBUG
</span></pre><pre style='margin:0'>

</pre>