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