From e4437076de622611f08c7273a91f26975c3c64e8 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Wed, 9 Oct 2024 16:57:34 +0200 Subject: [PATCH 01/27] =?UTF-8?q?Remap=20rules,=20but=20I=20don=E2=80=99t?= =?UTF-8?q?=20want=20to=20restructure=20LineBreakTest=20et=20al.=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/unicode/tools/Segmenter.java | 68 +++++++++++++------ .../java/org/unicode/tools/TestSegments.java | 4 +- .../java/org/unicode/test/TestSegment.java | 6 +- 3 files changed, 54 insertions(+), 24 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index f630b199e..2c34981e2 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -42,7 +42,7 @@ import org.unicode.text.UCD.Default; import org.unicode.text.UCD.ToolUnicodePropertySource; import org.unicode.text.utility.Settings; -import org.unicode.tools.Segmenter.Rule.Breaks; +import org.unicode.tools.Segmenter.RegexRule.Breaks; /** Ordered list of rules, with variables resolved before building. Use Builder to make. */ public class Segmenter { @@ -170,16 +170,16 @@ public boolean breaksAt(CharSequence text, int position) { breakRule = NOBREAK_SUPPLEMENTARY; return false; } - for (int i = 0; i < rules.size(); ++i) { - Rule rule = rules.get(i); + for (int i = 0; i < regexRules.size(); ++i) { + RegexRule rule = regexRules.get(i); if (DEBUG_AT_RULE_CONTAINING != null && rule.toString().contains(DEBUG_AT_RULE_CONTAINING)) { System.out.println(" !#$@543 Debug"); } Breaks result = rule.matches(text, position); - if (result != Rule.Breaks.UNKNOWN_BREAK) { + if (result != RegexRule.Breaks.UNKNOWN_BREAK) { breakRule = orders.get(i).doubleValue(); - return result == Rule.Breaks.BREAK; + return result == RegexRule.Breaks.BREAK; } } breakRule = BREAK_ANY; @@ -197,15 +197,15 @@ public int getRuleStatusVec(int[] ruleStatus) { * @param order * @param rule */ - public void add(double order, Rule rule) { + public void add(double order, RegexRule rule) { orders.add(new Double(order)); - rules.add(rule); + regexRules.add(rule); } - public Rule get(double order) { + public RegexRule get(double order) { int loc = orders.indexOf(new Double(order)); if (loc < 0) return null; - return rules.get(loc); + return regexRules.get(loc); } /** @@ -224,15 +224,44 @@ public String toString() { public String toString(boolean showResolved) { String result = ""; - for (int i = 0; i < rules.size(); ++i) { + for (int i = 0; i < regexRules.size(); ++i) { if (i != 0) result += Utility.LINE_SEPARATOR; - result += orders.get(i) + ")\t" + rules.get(i).toString(showResolved); + result += orders.get(i) + ")\t" + regexRules.get(i).toString(showResolved); } return result; } + + /** A « treat as » rule. */ + public static class RemapRule { + + public void apply(String text, List indexConcordance) { + final var result = new StringBuilder(); + final var newConcordance = new ArrayList(indexConcordance.size()); + int lastEnd = 0; + while (matcher.find()) { + int i = lastEnd; + for (; i < matcher.start(); ++i) { + newConcordance.add(indexConcordance.get(i)); + } + lastEnd = matcher.end(); + matcher.appendReplacement(result, replacement); + while (newConcordance.size() < result.length()) { + if (i >= matcher.end()) { + throw new IllegalArgumentException("Lengthening remap rule: " + matcher.group()); + } + newConcordance.add(indexConcordance.get(i++)); + } + } + matcher.appendTail(result); + } + + private Matcher matcher; + private String replacement; + } + /** A rule that determines the status of an offset. */ - public static class Rule { + public static class RegexRule { /** Status of a breaking rule */ public enum Breaks { UNKNOWN_BREAK, @@ -246,7 +275,7 @@ public enum Breaks { * @param after pattern for the text before the offset. All variables must be resolved. * @param line */ - public Rule(String before, Breaks result, String after, String line) { + public RegexRule(String before, Breaks result, String after, String line) { breaks = result; before = ".*(" + before + ")"; String parsing = null; @@ -475,14 +504,14 @@ public boolean addLine(String line) { } line = line.substring(relationPosition + 1).trim(); relationPosition = line.indexOf('\u00F7'); - Breaks breaks = Segmenter.Rule.Breaks.BREAK; + Breaks breaks = Segmenter.RegexRule.Breaks.BREAK; if (relationPosition < 0) { relationPosition = line.indexOf('\u00D7'); if (relationPosition < 0) { throw new IllegalArgumentException( "Couldn't find =, \u00F7, or \u00D7 on line: " + line); } - breaks = Segmenter.Rule.Breaks.NO_BREAK; + breaks = Segmenter.RegexRule.Breaks.NO_BREAK; } addRule( order, @@ -646,7 +675,7 @@ Builder addRule(Double order, String before, Breaks breaks, String after, String } rules.put( order, - new Segmenter.Rule( + new Segmenter.RegexRule( replaceVariables(before), breaks, replaceVariables(after), line)); return this; } @@ -671,9 +700,9 @@ public Segmenter make() { // longest first, to // make substitution // easy - private Map rules = new TreeMap(); + private Map rules = new TreeMap(); - public Map getProcessedRules() { + public Map getProcessedRules() { return rules; } @@ -813,7 +842,8 @@ public Map getOriginalVariables() { // ============== Internals ================ - private List rules = new ArrayList(1); + private List remapRules = new ArrayList(1); + private List regexRules = new ArrayList(1); private List orders = new ArrayList(1); private double breakRule; diff --git a/unicodetools/src/main/java/org/unicode/tools/TestSegments.java b/unicodetools/src/main/java/org/unicode/tools/TestSegments.java index e748ff9c6..191263e68 100644 --- a/unicodetools/src/main/java/org/unicode/tools/TestSegments.java +++ b/unicodetools/src/main/java/org/unicode/tools/TestSegments.java @@ -22,7 +22,7 @@ import org.unicode.jsp.ICUPropertyFactory; import org.unicode.props.RandomStringGenerator; import org.unicode.props.UnicodeProperty; -import org.unicode.tools.Segmenter.Rule.Breaks; +import org.unicode.tools.Segmenter.RegexRule.Breaks; /** * Quick class for testing proposed syntax for Segments. TODO doesn't yet handle supplementaries. It @@ -133,7 +133,7 @@ public static void main(String[] args) throws IOException { } private static void debugRule(Segmenter.Builder rb) { - Segmenter.Rule rule = rb.make().get(16.01); + Segmenter.RegexRule rule = rb.make().get(16.01); String oldAL = (String) rb.getVariables().get("$oldAL"); UnicodeSet oldALSet = new UnicodeSet(oldAL); String testStr = "\uA80D/\u0745\u2026"; diff --git a/unicodetools/src/test/java/org/unicode/test/TestSegment.java b/unicodetools/src/test/java/org/unicode/test/TestSegment.java index baf52f539..2cfae0478 100644 --- a/unicodetools/src/test/java/org/unicode/test/TestSegment.java +++ b/unicodetools/src/test/java/org/unicode/test/TestSegment.java @@ -31,7 +31,7 @@ import org.unicode.text.utility.Utility; import org.unicode.tools.Segmenter; import org.unicode.tools.Segmenter.Builder; -import org.unicode.tools.Segmenter.Rule; +import org.unicode.tools.Segmenter.RegexRule; public class TestSegment { @@ -398,8 +398,8 @@ private static void checkExemplars() { } private static void getExemplarStrings(UnicodeMap exemplars, Builder segmenter) { - Map srules = segmenter.getProcessedRules(); - for (Entry entry : srules.entrySet()) { + Map srules = segmenter.getProcessedRules(); + for (Entry entry : srules.entrySet()) { System.out.println(entry.getKey() + "\t\t" + entry.getValue()); } } From c455a8a4524751145601c70a98e77efc59d16503 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Wed, 9 Oct 2024 17:36:57 +0200 Subject: [PATCH 02/27] Remove SegmenterCldr.txt --- .../org/unicode/tools/SegmenterCldr.txt | 529 ------------------ 1 file changed, 529 deletions(-) delete mode 100644 unicodetools/src/main/resources/org/unicode/tools/SegmenterCldr.txt diff --git a/unicodetools/src/main/resources/org/unicode/tools/SegmenterCldr.txt b/unicodetools/src/main/resources/org/unicode/tools/SegmenterCldr.txt deleted file mode 100644 index 5a2f4c8bf..000000000 --- a/unicodetools/src/main/resources/org/unicode/tools/SegmenterCldr.txt +++ /dev/null @@ -1,529 +0,0 @@ -@GraphemeClusterBreak -## double ## at the start of a line doesn't show up -## use Segmenter.Target.FOR_CLDR to select SegmenterCldr.txt - -# VARIABLES - -$CR=\p{Grapheme_Cluster_Break=CR} -$LF=\p{Grapheme_Cluster_Break=LF} -$Control=\p{Grapheme_Cluster_Break=Control} -$Extend=\p{Grapheme_Cluster_Break=Extend} -$ZWJ=\p{Grapheme_Cluster_Break=ZWJ} -$RI=\p{Grapheme_Cluster_Break=Regional_Indicator} -$Prepend=\p{Grapheme_Cluster_Break=Prepend} -$SpacingMark=\p{Grapheme_Cluster_Break=SpacingMark} -$L=\p{Grapheme_Cluster_Break=L} -$V=\p{Grapheme_Cluster_Break=V} -$T=\p{Grapheme_Cluster_Break=T} -$LV=\p{Grapheme_Cluster_Break=LV} -$LVT=\p{Grapheme_Cluster_Break=LVT} -# Note: The following may overlap with the above -# Note: ConjunctLinkingScripts is not used anymore, instead that list exists in the derivation of Indic_Conjunct_Break. -# It is kept here so that the diff of the generated test cases compared to the Unicode 15.1 β is minimal. -# TODO(egg): Consider removing in Unicode 16.0. -$ConjunctLinkingScripts=[\p{Gujr}\p{sc=Telu}\p{sc=Mlym}\p{sc=Orya}\p{sc=Beng}\p{sc=Deva}] -$ConjunctLinker=\p{Indic_Conjunct_Break=Linker} -$LinkingConsonant=\p{Indic_Conjunct_Break=Consonant} -## $E_Base=\p{Grapheme_Cluster_Break=E_Base} -## $E_Modifier=\p{Grapheme_Cluster_Break=E_Modifier} -$ExtPict=\p{Extended_Pictographic} -$ExtCccZwj=[\p{Indic_Conjunct_Break=Linker}\p{Indic_Conjunct_Break=Extend}] -## $EBG=\p{Grapheme_Cluster_Break=E_Base_GAZ} -## $Glue_After_Zwj=\p{Grapheme_Cluster_Break=Glue_After_Zwj} - -# RULES - -# Break at the start and end of text, unless the text is empty. -# Do not break between a CR and LF. Otherwise, break before and after controls. -3) $CR × $LF -4) ( $Control | $CR | $LF ) ÷ -5) ÷ ( $Control | $CR | $LF ) -# Do not break Hangul syllable sequences. -6) $L × ( $L | $V | $LV | $LVT ) -7) ( $LV | $V ) × ( $V | $T ) -8) ( $LVT | $T) × $T -## Do not break before extending characters or ZWJ. -## 9) × ($Extend | $ZWJ | $ConjunctLinker) -9) × ($Extend | $ZWJ) -# Only for extended grapheme clusters: Do not break before SpacingMarks, or after Prepend characters. -9.1) × $SpacingMark -9.2) $Prepend × -9.3) $LinkingConsonant $ExtCccZwj* $ConjunctLinker $ExtCccZwj* × $LinkingConsonant -## Do not break within emoji modifier sequences or emoji zwj sequences. -## 10) $E_Base $Extend* × $E_Modifier -11) $ExtPict $Extend* $ZWJ × $ExtPict -# Do not break within emoji flag sequences. That is, do not break between regional indicator (RI) symbols if there is an odd number of RI characters before the break point. -12) ^ ($RI $RI)* $RI × $RI -13) [^$RI] ($RI $RI)* $RI × $RI -# Otherwise, break everywhere. - -@LineBreak - -# VARIABLES - -$AI=\p{Line_Break=Ambiguous} -$AK=\p{Line_Break=Aksara} -$AL=\p{Line_Break=Alphabetic} -$AP=\p{Line_Break=Aksara_Prebase} -$AS=\p{Line_Break=Aksara_Start} -$B2=\p{Line_Break=Break_Both} -$BA=\p{Line_Break=Break_After} -$BB=\p{Line_Break=Break_Before} -$BK=\p{Line_Break=Mandatory_Break} -$CB=\p{Line_Break=Contingent_Break} -$CL=\p{Line_Break=Close_Punctuation} -$CP=\p{Line_Break=CP} -$CM1=\p{Line_Break=Combining_Mark} -$CR=\p{Line_Break=Carriage_Return} -$EX=\p{Line_Break=Exclamation} -$GL=\p{Line_Break=Glue} -$H2=\p{Line_Break=H2} -$H3=\p{Line_Break=H3} -$HL=\p{Line_Break=HL} -$HY=\p{Line_Break=Hyphen} -$ID=\p{Line_Break=Ideographic} -$IN=\p{Line_Break=Inseparable} -$IS=\p{Line_Break=Infix_Numeric} -$JL=\p{Line_Break=JL} -$JT=\p{Line_Break=JT} -$JV=\p{Line_Break=JV} -$LF=\p{Line_Break=Line_Feed} -$NL=\p{Line_Break=Next_Line} -$NS=\p{Line_Break=Nonstarter} -$NU=\p{Line_Break=Numeric} -$OP=\p{Line_Break=Open_Punctuation} -$PO=\p{Line_Break=Postfix_Numeric} -$PR=\p{Line_Break=Prefix_Numeric} -$QU=\p{Line_Break=Quotation} -$SA=\p{Line_Break=Complex_Context} -$SG=\p{Line_Break=Surrogate} -$SP=\p{Line_Break=Space} -$SY=\p{Line_Break=Break_Symbols} -$VF=\p{Line_Break=Virama_Final} -$VI=\p{Line_Break=Virama} -$WJ=\p{Line_Break=Word_Joiner} -$XX=\p{Line_Break=Unknown} -$ZW=\p{Line_Break=ZWSpace} -$CJ=\p{Line_Break=Conditional_Japanese_Starter} -$RI=\p{Line_Break=Regional_Indicator} -$EB=\p{Line_Break=E_Base} -$EM=\p{Line_Break=E_Modifier} -$ZWJ_O=\p{Line_Break=ZWJ} -$ZWJ=\p{Line_Break=ZWJ} - -$QU_Pi=($QU_Pi $X) -$QU_Pf=($QU_Pf $X) - -$DottedCircle = ◌ - -$CP30=[$CP-[\p{ea=F}\p{ea=W}\p{ea=H}]] -$OP30=[$OP-[\p{ea=F}\p{ea=W}\p{ea=H}]] - -$ExtPictUnassigned=[\p{Extended_Pictographic}&\p{gc=Cn}] - -# Some rules refer to the start and end of text. We could just use a literal ^ for sot, but naming -# it as in the spec makes it easier to compare. The parser will eat (and choke on) $, so we play a -# stupid trick instead. -$sot=^ -$eot=(?!.) - -# SPECIAL EXTENSIONS - -$CM=[$CM1 $ZWJ] -# LB 1 Assign a line breaking class to each code point of the input. -# Resolve AI, CB, SA, SG, and XX into other line breaking classes depending on criteria outside the scope of this algorithm. -# NOTE: CB is ok to fall through, but must handle others here. -## show $AL -$AL=[$AI $AL $SG $XX $SA] -$NS=[$NS $CJ] -## show $AL -## $oldAL=$AL // for debugging -# WARNING: Fixes for Rule 9 -# Treat X (CM|ZWJ* as if it were X. -# Where X is any line break class except SP, BK, CR, LF, NL or ZW. -$X=$CM* - -# MACROS - -$Spec1_=[$SP $BK $CR $LF $NL $ZW] -$Spec2_=[^ $SP $BK $CR $LF $NL $ZW] -$Spec3a_=[^ $SP $BA $HY $CM] -$Spec3b_=[^ $BA $HY $CM] -$Spec4_=[^ $NU $CM] -$Spec5_=[$BK $CB $CR $LF $NL $SP $ZW] - -# SPECIAL EXTENSIONS - -$AI=($AI $X) -$AK=($AK $X) -$AL=($AL $X) -$AP=($AP $X) -$AS=($AS $X) -$B2=($B2 $X) -$BA=($BA $X) -$BB=($BB $X) -$CB=($CB $X) -$CL=($CL $X) -$CP=($CP $X) -$CM=($CM $X) -## $CM=($CM $X) -$EX=($EX $X) -$GL=($GL $X) -$H2=($H2 $X) -$H3=($H3 $X) -$HL=($HL $X) -$HY=($HY $X) -$ID=($ID $X) -$IN=($IN $X) -$IS=($IS $X) -$JL=($JL $X) -$JT=($JT $X) -$JV=($JV $X) -$NS=($NS $X) -$NU=($NU $X) -$OP=($OP $X) -$PO=($PO $X) -$PR=($PR $X) -$QU=($QU $X) -$SA=($SA $X) -$SG=($SG $X) -$SY=($SY $X) -$VF=($VF $X) -$VI=($VI $X) -$WJ=($WJ $X) -$XX=($XX $X) -$RI=($RI $X) -$EB=($EB $X) -$EM=($EM $X) -$ZWJ=($ZWJ $X) - -$QU_Pi=($QU_Pi $X) -$QU_Pf=($QU_Pi $X) - -$DottedCircle=($DottedCircle $X) - -$CP30=($CP30 $X) -$OP30=($OP30 $X) - -# OUT OF ORDER ON PURPOSE - -# LB 10 Treat any remaining combining mark as AL. -$AL=($AL | ^ $CM | (?<=$Spec1_) $CM) - -# RULES - -# LB 4 Always break after hard line breaks (but never between CR and LF). -4) $BK ÷ -# LB 5 Treat CR followed by LF, as well as CR, LF and NL as hard line breaks. -5.01) $CR × $LF -5.02) $CR ÷ -5.03) $LF ÷ -5.04) $NL ÷ -# LB 6 Do not break before hard line breaks. -6) × ( $BK | $CR | $LF | $NL ) -# LB 7 Do not break before spaces or zero-width space. -7.01) × $SP -7.02) × $ZW -# LB 8 Break before any character following a zero-width space, even if one or more spaces intervene. -8) $ZW $SP* ÷ -# LB 8a Don't break between ZWJ and IDs (for use in Emoji ZWJ sequences) -8.1) $ZWJ_O × -# LB 9 Do not break a combining character sequence; treat it as if it has the LB class of the base character -# in all of the following rules. (Where X is any line break class except SP, BK, CR, LF, NL or ZW.) -9) $Spec2_ × $CM -##WARNING: this is done by modifying the variable values for all but SP.... That is, $AL is really ($AI $CM*)! -## LB 11 Do not break before or after WORD JOINER and related characters. -11.01) × $WJ -11.02) $WJ × -# LB 12 Do not break after NBSP and related characters. -## 12.01) [^$SP] × $GL -12) $GL × -12.1) $Spec3a_ × $GL -12.2) $Spec3b_ $CM+ × $GL -12.3) ^ $CM+ × $GL -# LB 13 Do not break before \u2018]\u2019 or \u2018!\u2019 or \u2018;\u2019 or \u2018/\u2019, even after spaces. -# Using customization 7. -13.01) × $EX -13.02) $Spec4_ × ($CL | $CP | $IS | $SY) -13.03) $Spec4_ $CM+ × ($CL | $CP | $IS | $SY) -13.04) ^ $CM+ × ($CL | $CP | $IS | $SY) -## 13.03) $Spec4_ × $IS -## 13.04) $Spec4_ × $SY -#LB 14 Do not break after \u2018[\u2019, even after spaces. -14) $OP $SP* × -# LB 15a Do not break after an unresolved initial punctuation that lies at the start of the line, -# after a space, after opening punctuation, or after an unresolved quotation mark, even after -# spaces. -15.11) ( $sot | $BK | $CR | $LF | $NL | $OP | $QU | $GL | $SP | $ZW ) $QU_Pi $SP* × -# LB 15b Do not break before an unresolved final punctuation that lies at the end of the line, before -# a space, before a prohibited break, or before an unresolved quotation mark, even before spaces. -15.21) × $QU_Pf ( $SP | $GL | $WJ | $CL | $QU | $CP | $EX | $IS | $SY | $BK | $CR | $LF | $NL | $ZW | $eot ) -# LB 16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces. -16) ($CL | $CP) $SP* × $NS -# LB 17 Do not break within \u2018\u2014\u2014\u2019, even with intervening spaces. -17) $B2 $SP* × $B2 -# LB 18 Break after spaces. -18) $SP ÷ -# LB 19 Do not break before or after \u2018\"\u2019. -19.01) × $QU -19.02) $QU × -# LB 20 Break before and after unresolved CB. -20.01) ÷ $CB -20.02) $CB ÷ -# LB 20.9 Don't break between Hyphens and Letters when there is a break preceding the hyphen. -# Originally added as a Finnish tailoring, now promoted to default CLDR behavior. -# Must be before LB 21. Note: this is not default UAX #14 behaviour. See ICU issue ICU-8151. -# (Unlike in ICU, here we just check a limited set of known breaks, ignoring some cases like LB 14). -20.09) $Spec5_ $HY × $AL -# LB 21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana and other non-starters, or after acute accents. -21.01) × $BA -21.02) × $HY -21.03) × $NS -21.04) $BB × -# LB 21a Don't break after Hebrew + Hyphen. -21.1) $HL ($HY | $BA) × -# LB 21b Don’t break between Solidus and Hebrew letters. -21.2) $SY × $HL -# LB 22 Do not break before ellipses. -## show $AL -22) × $IN -# LB 23 Do not break between digits and letters. -## 23.01) ($ID | $EB | $EM) × $PO -23.02) ($AL | $HL) × $NU -23.03) $NU × ($AL | $HL) -# LB 24 Do not break between prefix and letters or ideographs. -23.12) $PR × ($ID | $EB | $EM) -23.13) ($ID | $EB | $EM) × $PO -# LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix. -24.02) ($PR | $PO) × ($AL | $HL) -24.03) ($AL | $HL) × ($PR | $PO) -# Using customization 7 -# LB Alternative: ( PR | PO) ? ( OP | HY ) ? NU (NU | SY | IS) * (CL | CP) ? ( PR | PO) ? -# Insert × every place it could go. However, make sure that at least one thing is concrete, otherwise would cause $NU to not break before or after -25.01) ($PR | $PO) × ( $OP | $HY )? $NU -25.02) ( $OP | $HY ) × $NU -25.03) $NU × ($NU | $SY | $IS) -25.04) $NU ($NU | $SY | $IS)* × ($NU | $SY | $IS | $CL | $CP) -25.05) $NU ($NU | $SY | $IS)* ($CL | $CP)? × ($PO | $PR) -#LB 26 Do not break a Korean syllable. -26.01) $JL × $JL | $JV | $H2 | $H3 -26.02) $JV | $H2 × $JV | $JT -26.03) $JT | $H3 × $JT -# LB 27 Treat a Korean Syllable Block the same as ID. -27.01) $JL | $JV | $JT | $H2 | $H3 × $PO -27.02) $PR × $JL | $JV | $JT | $H2 | $H3 -# LB 28 Do not break between alphabetics (\"at\"). -28) ($AL | $HL) × ($AL | $HL) -# LB28a Do not break inside the orthographic syllables of Brahmic scripts. -28.11) $AP × ($AK | $DottedCircle | $AS) -28.12) ($AK | $DottedCircle | $AS) × ($VF | $VI) -28.13) ($AK | $DottedCircle | $AS) $VI × ($AK | $DottedCircle) -28.14) ($AK | $DottedCircle | $AS) × ($AK | $DottedCircle | $AS) $VF -# LB 29 Do not break between numeric punctuation and alphabetics (\"e.g.\"). -29) $IS × ($AL | $HL) -# LB 30 Do not break between letters, numbers or ordinary symbols and opening or closing punctuation. -30.01) ($AL | $HL | $NU) × $OP30 -30.02) $CP30 × ($AL | $HL | $NU) -# LB 30a Break between two Regional Indicators if and only if there is an even number of them before the point being considered. -30.11) $sot ($RI $RI)* $RI × $RI -30.12) [^$RI] ($RI $RI)* $RI × $RI -30.13) $RI ÷ $RI -# LB 30b Do not break between an emoji base (or potential emoji) and an emoji modifier. -30.21) $EB × $EM -30.22) $ExtPictUnassigned × $EM - -@SentenceBreak - -# VARIABLES - -$CR=\p{Sentence_Break=CR} -$LF=\p{Sentence_Break=LF} -$Extend=\p{Sentence_Break=Extend} -$Format=\p{Sentence_Break=Format} -$Sep=\p{Sentence_Break=Sep} -$Sp=\p{Sentence_Break=Sp} -$Lower=\p{Sentence_Break=Lower} -$Upper=\p{Sentence_Break=Upper} -$OLetter=\p{Sentence_Break=OLetter} -$Numeric=\p{Sentence_Break=Numeric} -$ATerm=\p{Sentence_Break=ATerm} -$STerm=\p{Sentence_Break=STerm} -$Close=\p{Sentence_Break=Close} -$SContinue=\p{Sentence_Break=SContinue} -$Any=. - -# SPECIAL EXTENSIONS - -## subtract Format from Control, since we don't want to break before/after -## $Control=[$Control-$Format] -## Expresses the negation in rule 8; can't do this with normal regex, but works with UnicodeSet, which is all we need. -## $NotStuff=[^$OLetter $Upper $Lower $Sep] -## # $ATerm and $Sterm are temporary, to match ICU until UTC decides. - -# WARNING: For Rule 5, now add format and extend to everything but Sep, Format, and Extend - -$FE=[$Format $Extend] -$NotPreLower_=[^ $OLetter $Upper $Lower $Sep $CR $LF $STerm $ATerm] -## $NotSep_=[^ $Sep $CR $LF] -## $FE=$Extend* $Format* -$Sp=($Sp $FE*) -$Lower=($Lower $FE*) -$Upper=($Upper $FE*) -$OLetter=($OLetter $FE*) -$Numeric=($Numeric $FE*) -$ATerm=($ATerm $FE*) -$STerm=($STerm $FE*) -$Close=($Close $FE*) -$SContinue=($SContinue $FE*) - -# MACROS - -$ParaSep = ($Sep | $CR | $LF) -$SATerm = ($STerm | $ATerm) - -# RULES - -# Break at the start and end of text, unless the text is empty. -# Do not break within CRLF. -3) $CR × $LF -# Break after paragraph separators. -4) $ParaSep ÷ -## 3.4) ( $Control | $CR | $LF ) ÷ -## 3.5) ÷ ( $Control | $CR | $LF ) -# Ignore Format and Extend characters, except after sot, ParaSep, and within CRLF. (See Section 6.2, Replacing Ignore Rules.) This also has the effect of: Any × (Format | Extend) -# WARNING: Implemented as don't break before format (except after linebreaks), -# AND add format and extend in all variables definitions that appear after this point! -## 3.91) [^$Control | $CR | $LF] × $Extend -5) × [$Format $Extend] -# Do not break after full stop in certain contexts. [See note below.] -# Do not break after ambiguous terminators like period, if immediately followed by a number or lowercase letter, -# is between uppercase letters, or if the first following letter (optionally after certain punctuation) is lowercase. -# For example, a period may be an abbreviation or numeric period, and not mark the end of a sentence. -6) $ATerm × $Numeric -7) ($Upper | $Lower) $ATerm × $Upper -8) $ATerm $Close* $Sp* × $NotPreLower_* $Lower -8.1) $SATerm $Close* $Sp* × ($SContinue | $SATerm) -# Break after sentence terminators, but include closing punctuation, trailing spaces, and any paragraph separator. [See note below.] Include closing punctuation, trailing spaces, and (optionally) a paragraph separator. -9) $SATerm $Close* × ( $Close | $Sp | $ParaSep ) -# Note the fix to $Sp*, $Sep? -10) $SATerm $Close* $Sp* × ( $Sp | $ParaSep ) -11) $SATerm $Close* $Sp* $ParaSep? ÷ -#Otherwise, do not break -998) × $Any - -@WordBreak - -# VARIABLES - -$CR=\p{Word_Break=CR} -$LF=\p{Word_Break=LF} -$Newline=\p{Word_Break=Newline} -## $Control=\p{Word_Break=Control} -$Extend=\p{Word_Break=Extend} -## $NEWLINE=[$CR $LF \u0085 \u000B \u000C \u2028 \u2029] -## $Sep=\p{Sentence_Break=Sep} -# Now normal variables -$Format=[\p{Word_Break=Format}] -$Katakana=\p{Word_Break=Katakana} -$ALetter=\p{Word_Break=ALetter} -$MidLetter=\p{Word_Break=MidLetter} -$MidNum=\p{Word_Break=MidNum} -$MidNumLet=\p{Word_Break=MidNumLet} -$Numeric=\p{Word_Break=Numeric} -$ExtendNumLet=\p{Word_Break=ExtendNumLet} -$RI=\p{Word_Break=Regional_Indicator} -$Hebrew_Letter=\p{Word_Break=Hebrew_Letter} -$Double_Quote=\p{Word_Break=Double_Quote} -$Single_Quote=\p{Word_Break=Single_Quote} -## $E_Base=\p{Word_Break=E_Base} -## $E_Modifier=\p{Word_Break=E_Modifier} -$ZWJ=\p{Word_Break=ZWJ} -# Note: The following may overlap with the above -$ExtPict=\p{Extended_Pictographic} -## $EBG=\p{Word_Break=E_Base_GAZ} -## $Glue_After_Zwj=\p{Word_Break=Glue_After_Zwj} -$WSegSpace=\p{Word_Break=WSegSpace} - -# MACROS - -$AHLetter=($ALetter | $Hebrew_Letter) -$MidNumLetQ=($MidNumLet | $Single_Quote) -## WARNING: For Rule 4: Fixes for GC, Format -## # Subtract Format from Control, since we don't want to break before/after -## $Control=[$Control-$Format] - -# SPECIAL EXTENSIONS - -# Add format and extend to everything -$FE=[$Format $Extend $ZWJ] - -$NotBreak_=[^ $Newline $CR $LF ] -## $FE= ($Extend | $Format)* -$Katakana=($Katakana $FE*) -$ALetter=($ALetter $FE*) -$MidLetter=($MidLetter $FE*) -$MidNum=($MidNum $FE*) -$MidNumLet=($MidNumLet $FE*) -$Numeric=($Numeric $FE*) -$ExtendNumLet=($ExtendNumLet $FE*) -$RI=($RI $FE*) -$Hebrew_Letter=($Hebrew_Letter $FE*) -$Double_Quote=($Double_Quote $FE*) -$Single_Quote=($Single_Quote $FE*) -## $E_Base=($E_Base $FE*) -## $E_Modifier=($E_Modifier $FE*) -## $ZWJ=($ZWJ $FE*) # don't do this one! -## $Glue_After_Zwj=($Glue_After_Zwj $FE*) -## $EBG=($EBG $FE*) -$AHLetter=($AHLetter $FE*) -$MidNumLetQ=($MidNumLetQ $FE*) - -# RULES - -# Break at the start and end of text, unless the text is empty. -# Do not break within CRLF. -3) $CR × $LF -# Otherwise break before and after Newlines (including CR and LF) -3.1) ($Newline | $CR | $LF) ÷ -3.2) ÷ ($Newline | $CR | $LF) -# Do not break within emoji zwj sequences. -3.3) $ZWJ × $ExtPict -3.4) $WSegSpace × $WSegSpace -## 3.4) ( $Control | $CR | $LF ) ÷ -## 3.5) ÷ ( $Control | $CR | $LF ) -## 3.9) × $Extend -## 3.91) [^$Control | $CR | $LF] × $Extend -# Ignore Format and Extend characters, except after sot, CR, LF, and Newline. (See Section 6.2, Replacing Ignore Rules.) This also has the effect of: Any × (Format | Extend) -# WARNING: Implemented as don't break before format (except after linebreaks), -# AND add format and extend in all variables definitions that appear after this point! -## 4) × [$Format $Extend] -4) $NotBreak_ × [$Format $Extend $ZWJ] - -# VANILLA RULES - -# Do not break between most letters. -5) $AHLetter × $AHLetter -# Do not break letters across certain punctuation. -6) $AHLetter × ($MidLetter | $MidNumLetQ) $AHLetter -7) $AHLetter ($MidLetter | $MidNumLetQ) × $AHLetter -7.1) $Hebrew_Letter × $Single_Quote -7.2) $Hebrew_Letter × $Double_Quote $Hebrew_Letter -7.3) $Hebrew_Letter $Double_Quote × $Hebrew_Letter -# Do not break within sequences of digits, or digits adjacent to letters (“3a”, or “A3”). -8) $Numeric × $Numeric -9) $AHLetter × $Numeric -10) $Numeric × $AHLetter -# Do not break within sequences, such as “3.2” or “3,456.789”. -11) $Numeric ($MidNum | $MidNumLetQ) × $Numeric -12) $Numeric × ($MidNum | $MidNumLetQ) $Numeric -# Do not break between Katakana. -13) $Katakana × $Katakana -# Do not break from extenders. -13.1) ($AHLetter | $Numeric | $Katakana | $ExtendNumLet) × $ExtendNumLet -13.2) $ExtendNumLet × ($AHLetter | $Numeric | $Katakana) -## Do not break within emoji modifier sequences. -## 14) $E_Base × $E_Modifier -# Do not break within emoji flag sequences. That is, do not break between regional indicator (RI) symbols if there is an odd number of RI characters before the break point. -15) ^ ($RI $RI)* $RI × $RI -16) [^$RI] ($RI $RI)* $RI × $RI -# Otherwise, break everywhere (including around ideographs). From 71b6c88f65a3f50d140d4d969bbb25a03ba2f930 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Wed, 9 Oct 2024 17:58:14 +0200 Subject: [PATCH 03/27] Drop comments in the default --- .../src/main/resources/org/unicode/tools/SegmenterDefault.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt index a57c184fa..e7e6193bd 100644 --- a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt +++ b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt @@ -1,6 +1,5 @@ @GraphemeClusterBreak ## double ## at the start of a line doesn't show up -## use Segmenter.Target.FOR_CLDR to select SegmenterCldr.txt # VARIABLES @@ -157,7 +156,6 @@ $Spec2_=[^ $SP $BK $CR $LF $NL $ZW] $Spec3a_=[^ $SP $BA $HY $CM] $Spec3b_=[^ $BA $HY $CM] $Spec4_=[^ $NU $CM] -##CLDR: $Spec5_=[$BK $CB $CR $LF $NL $SP $ZW] # SPECIAL EXTENSIONS From 2db096a64f6f096ed2631c20b4aa5c6103593021 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Wed, 9 Oct 2024 18:20:36 +0200 Subject: [PATCH 04/27] A hopeful syntax --- .../org/unicode/tools/SegmenterDefault.txt | 79 +------------------ 1 file changed, 2 insertions(+), 77 deletions(-) diff --git a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt index e7e6193bd..28a8f2e11 100644 --- a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt +++ b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt @@ -142,86 +142,11 @@ $CM=[$CM1 $ZWJ] ## show $AL $AL=[$AI $AL $SG $XX $SA] $NS=[$NS $CJ] -## show $AL -## $oldAL=$AL // for debugging -# WARNING: Fixes for Rule 9 -# Treat X (CM|ZWJ* as if it were X. -# Where X is any line break class except SP, BK, CR, LF, NL or ZW. -$X=$CM* # MACROS -$Spec1_=[$SP $BK $CR $LF $NL $ZW] -$Spec2_=[^ $SP $BK $CR $LF $NL $ZW] $Spec3a_=[^ $SP $BA $HY $CM] $Spec3b_=[^ $BA $HY $CM] -$Spec4_=[^ $NU $CM] - -# SPECIAL EXTENSIONS - -$AI=($AI $X) -$AK=($AK $X) -$AL=($AL $X) -$AP=($AP $X) -$AS=($AS $X) -$B2=($B2 $X) -$BA=($BA $X) -$BB=($BB $X) -$CB=($CB $X) -$CL=($CL $X) -$CP=($CP $X) -$CM=($CM $X) -## $CM=($CM $X) -$EX=($EX $X) -$GL=($GL $X) -$H2=($H2 $X) -$H3=($H3 $X) -$HL=($HL $X) -$HY=($HY $X) -$ID=($ID $X) -$IN=($IN $X) -$IS=($IS $X) -$JL=($JL $X) -$JT=($JT $X) -$JV=($JV $X) -$NS=($NS $X) -$NU=($NU $X) -$OP=($OP $X) -$PO=($PO $X) -$PR=($PR $X) -$QU=($QU $X) -$SA=($SA $X) -$SG=($SG $X) -$SY=($SY $X) -$VF=($VF $X) -$VI=($VI $X) -$WJ=($WJ $X) -$XX=($XX $X) -$RI=($RI $X) -$EB=($EB $X) -$EM=($EM $X) -$ZWJ=($ZWJ $X) - -$QU_Pi=($QU_Pi $X) -$QU_Pf=($QU_Pf $X) - -$QUmPi=($QUmPi $X) -$QUmPf=($QUmPf $X) - -$NotEastAsian=( $NotEastAsian | [$NotEastAsian - $Spec1_] $X) -$NonEastAsianBA=(NonEastAsianBA $X) - -$DottedCircle=($DottedCircle $X) -$Hyphen=($Hyphen $X) - -$CP30=($CP30 $X) -$OP30=($OP30 $X) - -# OUT OF ORDER ON PURPOSE - -# LB 10 Treat any remaining combining mark as AL and non-$EastAsian. -$AL=($AL | ^ $CM | (?<=$Spec1_) $CM) -$NotEastAsian=( $NotEastAsian | ^ $CM | (?<=$Spec1_) $CM ) # RULES @@ -243,8 +168,8 @@ $NotEastAsian=( $NotEastAsian | ^ $CM | (?<=$Spec1_) $CM ) 8.1) $ZWJ_O × # LB 9 Do not break a combining character sequence; treat it as if it has the LB class of the base character # in all of the following rules. (Where X is any line break class except SP, BK, CR, LF, NL or ZW.) -9) $Spec2_ × $CM -##WARNING: this is done by modifying the variable values for all but SP.... That is, $AL is really ($AI $CM*)! +9) ([^$SP $BK $CR $LF $NL $ZW]) [$CM $ZWJ] → $1 +10) [$CM $ZWJ] → A ## LB 11 Do not break before or after WORD JOINER and related characters. 11.01) × $WJ 11.02) $WJ × From 06288cc8845e5b49927e70fcb32a8d8cb235f5dc Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Wed, 9 Oct 2024 18:46:33 +0200 Subject: [PATCH 05/27] This should still be more tractable than the alternative --- .../src/main/java/org/unicode/tools/Segmenter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 2c34981e2..6b9acc38f 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -234,11 +234,16 @@ public String toString(boolean showResolved) { /** A « treat as » rule. */ public static class RemapRule { + + public RemapRule(String leftHandSide, String replacement) { + pattern = Pattern.compile(leftHandSide, REGEX_FLAGS); + } public void apply(String text, List indexConcordance) { final var result = new StringBuilder(); final var newConcordance = new ArrayList(indexConcordance.size()); int lastEnd = 0; + final var matcher = pattern.matcher(text); while (matcher.find()) { int i = lastEnd; for (; i < matcher.start(); ++i) { @@ -256,7 +261,7 @@ public void apply(String text, List indexConcordance) { matcher.appendTail(result); } - private Matcher matcher; + private Pattern pattern; private String replacement; } From 42b9c8c8a16baa0be95ba0001a6327dd142632ac Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Wed, 9 Oct 2024 18:57:15 +0200 Subject: [PATCH 06/27] =?UTF-8?q?Life=20doesn=E2=80=99t=20commute?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/unicode/tools/Segmenter.java | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 6b9acc38f..9da15d68b 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -35,6 +35,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; + +import javax.swing.text.Segment; + import org.unicode.cldr.draft.FileUtilities; import org.unicode.cldr.util.RegexUtilities; import org.unicode.cldr.util.TransliteratorUtilities; @@ -42,7 +45,7 @@ import org.unicode.text.UCD.Default; import org.unicode.text.UCD.ToolUnicodePropertySource; import org.unicode.text.utility.Settings; -import org.unicode.tools.Segmenter.RegexRule.Breaks; +import org.unicode.tools.Segmenter.SegmentationRule.Breaks; /** Ordered list of rules, with variables resolved before building. Use Builder to make. */ public class Segmenter { @@ -170,16 +173,16 @@ public boolean breaksAt(CharSequence text, int position) { breakRule = NOBREAK_SUPPLEMENTARY; return false; } - for (int i = 0; i < regexRules.size(); ++i) { - RegexRule rule = regexRules.get(i); + for (int i = 0; i < rules.size(); ++i) { + SegmentationRule rule = rules.get(i); if (DEBUG_AT_RULE_CONTAINING != null && rule.toString().contains(DEBUG_AT_RULE_CONTAINING)) { System.out.println(" !#$@543 Debug"); } Breaks result = rule.matches(text, position); - if (result != RegexRule.Breaks.UNKNOWN_BREAK) { + if (result != SegmentationRule.Breaks.UNKNOWN_BREAK) { breakRule = orders.get(i).doubleValue(); - return result == RegexRule.Breaks.BREAK; + return result == SegmentationRule.Breaks.BREAK; } } breakRule = BREAK_ANY; @@ -197,15 +200,15 @@ public int getRuleStatusVec(int[] ruleStatus) { * @param order * @param rule */ - public void add(double order, RegexRule rule) { + public void add(double order, SegmentationRule rule) { orders.add(new Double(order)); - regexRules.add(rule); + rules.add(rule); } - public RegexRule get(double order) { + public SegmentationRule get(double order) { int loc = orders.indexOf(new Double(order)); if (loc < 0) return null; - return regexRules.get(loc); + return rules.get(loc); } /** @@ -224,16 +227,25 @@ public String toString() { public String toString(boolean showResolved) { String result = ""; - for (int i = 0; i < regexRules.size(); ++i) { + for (int i = 0; i < rules.size(); ++i) { if (i != 0) result += Utility.LINE_SEPARATOR; - result += orders.get(i) + ")\t" + regexRules.get(i).toString(showResolved); + result += orders.get(i) + ")\t" + rules.get(i).toString(showResolved); } return result; } + public static class SegmentationRule { + /** Status of a breaking rule */ + public enum Breaks { + UNKNOWN_BREAK, + BREAK, + NO_BREAK + }; + } + /** A « treat as » rule. */ - public static class RemapRule { + public static class RemapRule extends SegmentationRule { public RemapRule(String leftHandSide, String replacement) { pattern = Pattern.compile(leftHandSide, REGEX_FLAGS); @@ -266,14 +278,7 @@ public void apply(String text, List indexConcordance) { } /** A rule that determines the status of an offset. */ - public static class RegexRule { - /** Status of a breaking rule */ - public enum Breaks { - UNKNOWN_BREAK, - BREAK, - NO_BREAK - }; - + public static class RegexRule extends SegmentationRule { /** * @param before pattern for the text after the offset. All variables must be resolved. * @param result the break status to return when the rule is invoked @@ -847,8 +852,7 @@ public Map getOriginalVariables() { // ============== Internals ================ - private List remapRules = new ArrayList(1); - private List regexRules = new ArrayList(1); + private List rules = new ArrayList(1); private List orders = new ArrayList(1); private double breakRule; From 058e4df0cd181ef893bfc08a2d0aa5f20d9aec64 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Thu, 10 Oct 2024 02:29:02 +0200 Subject: [PATCH 07/27] =?UTF-8?q?Don=E2=80=99t=20generate=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/unicode/text/UCD/GenerateBreakTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java index 5d2bc8373..ff506b4ee 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java @@ -81,8 +81,6 @@ public static void main(String[] args) throws IOException { new GenerateWordBreakTest(ucd, Segmenter.Target.FOR_UCD).run(); new GenerateLineBreakTest(ucd, Segmenter.Target.FOR_UCD).run(); new GenerateSentenceBreakTest(ucd, Segmenter.Target.FOR_UCD).run(); - - new GenerateGraphemeBreakTest(ucd, Segmenter.Target.FOR_CLDR).run(); } GenerateBreakTest(UCD ucd, Segmenter seg) { From 309083836b0d1df76938229d59d2b6c850d907f1 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Thu, 10 Oct 2024 02:29:02 +0200 Subject: [PATCH 08/27] =?UTF-8?q?Don=E2=80=99t=20generate=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/unicode/text/UCD/GenerateBreakTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java index 5d2bc8373..ff506b4ee 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java @@ -81,8 +81,6 @@ public static void main(String[] args) throws IOException { new GenerateWordBreakTest(ucd, Segmenter.Target.FOR_UCD).run(); new GenerateLineBreakTest(ucd, Segmenter.Target.FOR_UCD).run(); new GenerateSentenceBreakTest(ucd, Segmenter.Target.FOR_UCD).run(); - - new GenerateGraphemeBreakTest(ucd, Segmenter.Target.FOR_CLDR).run(); } GenerateBreakTest(UCD ucd, Segmenter seg) { From 20600998e472be4969ed775534a55fc2ed26834e Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Thu, 10 Oct 2024 02:47:18 +0200 Subject: [PATCH 09/27] =?UTF-8?q?Really=20don=E2=80=99t=20generate=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/org/unicode/text/UCD/MakeUnicodeFiles.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/unicodetools/src/main/resources/org/unicode/text/UCD/MakeUnicodeFiles.txt b/unicodetools/src/main/resources/org/unicode/text/UCD/MakeUnicodeFiles.txt index 3a3b5d608..357d1bf6d 100644 --- a/unicodetools/src/main/resources/org/unicode/text/UCD/MakeUnicodeFiles.txt +++ b/unicodetools/src/main/resources/org/unicode/text/UCD/MakeUnicodeFiles.txt @@ -92,9 +92,6 @@ Property: SPECIAL File: auxiliary/SentenceBreakTest Property: SPECIAL -File: cldr/GraphemeBreakTest-cldr -Property: SPECIAL - File: extra/BidiPairedBracketType Property: BidiPairedBracketType Format: valueList skipUnassigned=None From 7f66e09e4588134fe9224c0dffe92ead885454ad Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Thu, 10 Oct 2024 02:48:57 +0200 Subject: [PATCH 10/27] =?UTF-8?q?Don=E2=80=99t=20pretend=20we=20can=20gene?= =?UTF-8?q?rate=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/unicode/text/UCD/MakeUnicodeFiles.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/MakeUnicodeFiles.java b/unicodetools/src/main/java/org/unicode/text/UCD/MakeUnicodeFiles.java index 0c14d0f2d..7fea779e6 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/MakeUnicodeFiles.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/MakeUnicodeFiles.java @@ -599,11 +599,6 @@ public static void generateFile(String filename) throws IOException { Default.ucd(), Segmenter.Target.FOR_UCD) .run(); break; - case "GraphemeBreakTest-cldr": - new GenerateBreakTest.GenerateGraphemeBreakTest( - Default.ucd(), Segmenter.Target.FOR_CLDR) - .run(); - break; case "DerivedName": case "DerivedLabel": generateDerivedName(filename); From 40f296e1dd0d81288ddff61b8696d578238a67e0 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Thu, 10 Oct 2024 15:46:32 +0200 Subject: [PATCH 11/27] If we cannot deal with lengthening we cannot deal with shortening --- unicodetools/src/main/java/org/unicode/tools/Segmenter.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 9da15d68b..bd24f94d2 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -264,10 +264,7 @@ public void apply(String text, List indexConcordance) { lastEnd = matcher.end(); matcher.appendReplacement(result, replacement); while (newConcordance.size() < result.length()) { - if (i >= matcher.end()) { - throw new IllegalArgumentException("Lengthening remap rule: " + matcher.group()); - } - newConcordance.add(indexConcordance.get(i++)); + newConcordance.add(indexConcordance.get(i)); } } matcher.appendTail(result); From e0d34b339998ce4e788ac4f5fae937905907cd4b Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Thu, 10 Oct 2024 18:26:51 +0200 Subject: [PATCH 12/27] meow --- .../java/org/unicode/tools/Segmenter.java | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index bd24f94d2..f64abe425 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -32,6 +32,9 @@ import java.util.Map; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; @@ -251,23 +254,46 @@ public RemapRule(String leftHandSide, String replacement) { pattern = Pattern.compile(leftHandSide, REGEX_FLAGS); } - public void apply(String text, List indexConcordance) { + // TODO words + // invariants: + // indexInRemapped[0] == 0 + // indexInRemapped[initialString.size()] == remappedString.size() + public void apply(String remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap) { final var result = new StringBuilder(); - final var newConcordance = new ArrayList(indexConcordance.size()); - int lastEnd = 0; - final var matcher = pattern.matcher(text); + int i = 0; + int offset = 0; + final var matcher = pattern.matcher(remappedString); while (matcher.find()) { - int i = lastEnd; - for (; i < matcher.start(); ++i) { - newConcordance.add(indexConcordance.get(i)); + for (;; ++i) { + if (indexInRemapped[i] == null) { + continue; + } + if (indexInRemapped[i] > matcher.start()) { + break; + } + indexInRemapped[i] += offset; + } + for (;; ++i) { + if (indexInRemapped[i] == null) { + continue; + } + if (indexInRemapped[i] == matcher.end()) { + break; + } + resolvedBreaks[i] = Breaks.NO_BREAK; + indexInRemapped[i] = null; } - lastEnd = matcher.end(); matcher.appendReplacement(result, replacement); - while (newConcordance.size() < result.length()) { - newConcordance.add(indexConcordance.get(i)); + offset += result.length() - indexInRemapped[i]; + } + for (; i < indexInRemapped.length; ++i) { + if (indexInRemapped[i] == null) { + continue; } + indexInRemapped[i] += offset; } matcher.appendTail(result); + remap.accept(result.toString()); } private Pattern pattern; From 7015c681e598ed0279e2ce97b8a42270a75704ed Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Thu, 10 Oct 2024 18:57:39 +0200 Subject: [PATCH 13/27] abstract --- .../java/org/unicode/tools/Segmenter.java | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index f64abe425..59e151562 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -238,13 +238,32 @@ public String toString(boolean showResolved) { } - public static class SegmentationRule { + public static abstract class SegmentationRule { /** Status of a breaking rule */ public enum Breaks { UNKNOWN_BREAK, BREAK, NO_BREAK }; + + /** + * Applies this rule throughout the text. + * @param remappedString The text, with any preceding remappings applied. + * @param indexInRemapped An array whose size is one greater than the original string. + * Associates indices in the original string to indices in remappedString. + * indexInRemapped[0] == 0, and indexInRemapped[indexInRemapped.size() - 1] == remappedString.size(). + * Whenever indexInRemapped[i] == null, + * resolvedBreaks[i] == NO_BREAK: this corresponds to positions + * inside a string which has been replaced by a remap rule. + * Remap rules may update this mapping. + * @param resolvedBreaks An array whose size is one greater than the original string, indicating resolved breaks in the string. + * Values that are UNKNOWN_BREAK are updated if the rule applies to their position. + * @param remap A string consumer, called by remap rules with the value of remappedString to be passed to subsequent rules. + * The indices in indexInRemapped are updated consistently. + */ + public abstract void apply(String remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap); + /** Same as above, but only returns the resolution at the current position. */ + public abstract Breaks applyAt(int position, String remappedString, Integer[] indexInRemapped, Consumer remap); } /** A « treat as » rule. */ @@ -253,11 +272,7 @@ public static class RemapRule extends SegmentationRule { public RemapRule(String leftHandSide, String replacement) { pattern = Pattern.compile(leftHandSide, REGEX_FLAGS); } - - // TODO words - // invariants: - // indexInRemapped[0] == 0 - // indexInRemapped[initialString.size()] == remappedString.size() + public void apply(String remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap) { final var result = new StringBuilder(); int i = 0; @@ -280,6 +295,9 @@ public void apply(String remappedString, Integer[] indexInRemapped, Breaks[] res if (indexInRemapped[i] == matcher.end()) { break; } + if (resolvedBreaks[i] == Breaks.BREAK) { + throw new IllegalArgumentException("Replacement rule at remapped indices " + matcher.start() + " sqq. spans a break: " + remappedString); + } resolvedBreaks[i] = Breaks.NO_BREAK; indexInRemapped[i] = null; } @@ -298,6 +316,13 @@ public void apply(String remappedString, Integer[] indexInRemapped, Breaks[] res private Pattern pattern; private String replacement; + @Override + public Breaks applyAt(int position, String remappedString, Integer[] indexInRemapped, + Consumer remap) { + var resolvedBreaks = new Breaks[indexInRemapped.length]; + apply(remappedString, indexInRemapped, resolvedBreaks, remap); + return resolvedBreaks[position]; + } } /** A rule that determines the status of an offset. */ From 16c162dd268256f50cc5ef64870a468aaa099b42 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Fri, 11 Oct 2024 19:24:08 +0200 Subject: [PATCH 14/27] Could it be working??? --- .../java/org/unicode/tools/Segmenter.java | 50 +++++++++++-------- .../java/org/unicode/tools/TestSegments.java | 5 +- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 59e151562..81e3144cd 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -176,13 +176,22 @@ public boolean breaksAt(CharSequence text, int position) { breakRule = NOBREAK_SUPPLEMENTARY; return false; } + StringBuilder remapped = new StringBuilder(text.toString()); + Consumer remap = (s) -> { + remapped.setLength(0); + remapped.append(s);} + ; + Integer[] indexInRemapped = new Integer[text.length() + 1]; + for (int i = 0; i < indexInRemapped.length; ++i) { + indexInRemapped[i] = i; + } for (int i = 0; i < rules.size(); ++i) { SegmentationRule rule = rules.get(i); if (DEBUG_AT_RULE_CONTAINING != null && rule.toString().contains(DEBUG_AT_RULE_CONTAINING)) { System.out.println(" !#$@543 Debug"); } - Breaks result = rule.matches(text, position); + Breaks result = rule.applyAt(position, remapped, indexInRemapped, remap); if (result != SegmentationRule.Breaks.UNKNOWN_BREAK) { breakRule = orders.get(i).doubleValue(); return result == SegmentationRule.Breaks.BREAK; @@ -232,7 +241,7 @@ public String toString(boolean showResolved) { String result = ""; for (int i = 0; i < rules.size(); ++i) { if (i != 0) result += Utility.LINE_SEPARATOR; - result += orders.get(i) + ")\t" + rules.get(i).toString(showResolved); + result += orders.get(i) + ")\tTODO";// + rules.get(i).toString(showResolved); } return result; } @@ -258,12 +267,12 @@ public enum Breaks { * Remap rules may update this mapping. * @param resolvedBreaks An array whose size is one greater than the original string, indicating resolved breaks in the string. * Values that are UNKNOWN_BREAK are updated if the rule applies to their position. - * @param remap A string consumer, called by remap rules with the value of remappedString to be passed to subsequent rules. + * @param remap Called by remap rules with the value of remappedString to be passed to subsequent rules. * The indices in indexInRemapped are updated consistently. */ - public abstract void apply(String remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap); + public abstract void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap); /** Same as above, but only returns the resolution at the current position. */ - public abstract Breaks applyAt(int position, String remappedString, Integer[] indexInRemapped, Consumer remap); + public abstract Breaks applyAt(int position, CharSequence remappedString, Integer[] indexInRemapped, Consumer remap); } /** A « treat as » rule. */ @@ -273,7 +282,7 @@ public RemapRule(String leftHandSide, String replacement) { pattern = Pattern.compile(leftHandSide, REGEX_FLAGS); } - public void apply(String remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap) { + public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap) { final var result = new StringBuilder(); int i = 0; int offset = 0; @@ -317,8 +326,8 @@ public void apply(String remappedString, Integer[] indexInRemapped, Breaks[] res private Pattern pattern; private String replacement; @Override - public Breaks applyAt(int position, String remappedString, Integer[] indexInRemapped, - Consumer remap) { + public Breaks applyAt(int position, CharSequence remappedString, Integer[] indexInRemapped, + Consumer remap) { var resolvedBreaks = new Breaks[indexInRemapped.length]; apply(remappedString, indexInRemapped, resolvedBreaks, remap); return resolvedBreaks[position]; @@ -366,19 +375,20 @@ public RegexRule(String before, Breaks result, String after, String line) { // COMMENTS allows whitespace } - // Matcher numberMatcher = PatternCache.get("[0-9]+").matcher(""); + public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap) { + for (int i = 0; i < indexInRemapped.length; ++i) { + if (resolvedBreaks[i] == Breaks.UNKNOWN_BREAK) { + resolvedBreaks[i] = applyAt(i, remappedString, indexInRemapped, remap); + } + } + } - /** - * Match the rule against text, at a position - * - * @param text - * @param position - * @return break status - */ - public Breaks matches(CharSequence text, int position) { - if (!matchAfter(matchSucceeding, text, position)) return Breaks.UNKNOWN_BREAK; - if (!matchBefore(matchPrevious, text, position)) return Breaks.UNKNOWN_BREAK; - return breaks; + public Breaks applyAt(int position, CharSequence remappedString, Integer[] indexInRemapped, Consumer remap) { + if (matchAfter(matchSucceeding, remappedString, indexInRemapped[position]) && + matchBefore(matchPrevious, remappedString, indexInRemapped[position])) { + return breaks; + } + return Breaks.UNKNOWN_BREAK; } /** Debugging aid */ diff --git a/unicodetools/src/main/java/org/unicode/tools/TestSegments.java b/unicodetools/src/main/java/org/unicode/tools/TestSegments.java index 191263e68..ead5331b7 100644 --- a/unicodetools/src/main/java/org/unicode/tools/TestSegments.java +++ b/unicodetools/src/main/java/org/unicode/tools/TestSegments.java @@ -22,7 +22,6 @@ import org.unicode.jsp.ICUPropertyFactory; import org.unicode.props.RandomStringGenerator; import org.unicode.props.UnicodeProperty; -import org.unicode.tools.Segmenter.RegexRule.Breaks; /** * Quick class for testing proposed syntax for Segments. TODO doesn't yet handle supplementaries. It @@ -133,7 +132,7 @@ public static void main(String[] args) throws IOException { } private static void debugRule(Segmenter.Builder rb) { - Segmenter.RegexRule rule = rb.make().get(16.01); + Segmenter.SegmentationRule rule = rb.make().get(16.01); String oldAL = (String) rb.getVariables().get("$oldAL"); UnicodeSet oldALSet = new UnicodeSet(oldAL); String testStr = "\uA80D/\u0745\u2026"; @@ -142,7 +141,7 @@ private static void debugRule(Segmenter.Builder rb) { System.out.println( k + ": " + inside + com.ibm.icu.impl.Utility.escape("" + testStr.charAt(k))); } - Breaks m = rule.matches(testStr, 3); + rule.applyAt(3, testStr, new Integer[] {0, 1, 2, 3}, null); } private static void doCompare(UnicodeProperty.Factory factory, Segmenter rl, String line) { From db4ae3cb022d9060bd97c7d9c5786ce9d6204eed Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Fri, 11 Oct 2024 19:43:50 +0200 Subject: [PATCH 15/27] first cut of parsing remap rules --- .../java/org/unicode/tools/Segmenter.java | 55 +++++++++++++++++-- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 81e3144cd..664cd13c2 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -571,6 +571,15 @@ public boolean addLine(String line) { throw new IllegalArgumentException("Rule must be of form '1)...': <" + line + ">"); } line = line.substring(relationPosition + 1).trim(); + relationPosition = line.indexOf('→'); + if (relationPosition >= 0) { + addRemapRule( + order, + line.substring(0, relationPosition).trim(), + line.substring(relationPosition + 1).trim(), + line); + return true; + } relationPosition = line.indexOf('\u00F7'); Breaks breaks = Segmenter.RegexRule.Breaks.BREAK; if (relationPosition < 0) { @@ -581,7 +590,7 @@ public boolean addLine(String line) { } breaks = Segmenter.RegexRule.Breaks.NO_BREAK; } - addRule( + addRegexRule( order, line.substring(0, relationPosition).trim(), breaks, @@ -688,6 +697,44 @@ public static UnicodeMap composeWith( return target; } + + Builder addRemapRule(Double order, String before, String after, String line) { + line = whiteSpace.reset(line).replaceAll(" "); + if (lastComments.size() != 0) { + double increment = 0.0001; + double temp = order.doubleValue() - increment * lastComments.size(); + for (int i = 0; i < lastComments.size(); ++i) { + Double position = new Double(temp); + if (xmlRules.containsKey(position)) { + System.out.println("WARNING: Overriding rule " + position); + } + xmlRules.put(position, lastComments.get(i)); + temp += increment; + } + lastComments.clear(); + } + if (htmlRules.containsKey(order) + || xmlRules.containsKey(order) + || rules.containsKey(order)) { + throw new IllegalArgumentException("Duplicate numbers for rules: " + order); + } + htmlRules.put(order, TransliteratorUtilities.toHTML.transliterate(line)); + xmlRules.put( + order, + " " + + TransliteratorUtilities.toXML.transliterate(line) + + " "); + rules.put( + order, + new Segmenter.RemapRule( + replaceVariables(before), after)); + return this; + } + /** * Add a numbered rule, already broken into the parts before and after. * @@ -698,7 +745,7 @@ public static UnicodeMap composeWith( * @param line * @return */ - Builder addRule(Double order, String before, Breaks breaks, String after, String line) { + Builder addRegexRule(Double order, String before, Breaks breaks, String after, String line) { // if (brokenIdentifierMatcher.reset(line).find()) { // int start = brokenIdentifierMatcher.start(); // int end = brokenIdentifierMatcher.end(); @@ -768,9 +815,9 @@ public Segmenter make() { // longest first, to // make substitution // easy - private Map rules = new TreeMap(); + private Map rules = new TreeMap(); - public Map getProcessedRules() { + public Map getProcessedRules() { return rules; } From 21bd40afaeba2ac61fd469a984b675a68124d54a Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Fri, 11 Oct 2024 20:02:56 +0200 Subject: [PATCH 16/27] Now it parses correctly but does not work. Progress! --- .../src/main/java/org/unicode/text/UCD/GenerateBreakTest.java | 3 +++ unicodetools/src/main/java/org/unicode/tools/Segmenter.java | 1 + 2 files changed, 4 insertions(+) diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java index ff506b4ee..261dc243f 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java @@ -926,6 +926,9 @@ public void generateTable(PrintWriter out) { if (breakPoint < 0) { breakPoint = ruleBody.indexOf('÷'); } + if (breakPoint < 0) { + breakPoint = ruleBody.indexOf('→'); + } out.println( "" + linkAndAnchor("r" + ruleNumber, ruleNumber) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 664cd13c2..d64af4814 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -280,6 +280,7 @@ public static class RemapRule extends SegmentationRule { public RemapRule(String leftHandSide, String replacement) { pattern = Pattern.compile(leftHandSide, REGEX_FLAGS); + this.replacement = replacement; } public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap) { From 485354d15c0fdcdff0a4c42f69dad606b4a6f3ec Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Fri, 11 Oct 2024 20:50:46 +0200 Subject: [PATCH 17/27] Much better --- .../src/main/java/org/unicode/tools/Segmenter.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index d64af4814..8aaa60adb 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -312,7 +312,7 @@ public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks indexInRemapped[i] = null; } matcher.appendReplacement(result, replacement); - offset += result.length() - indexInRemapped[i]; + offset = result.length() - indexInRemapped[i]; } for (; i < indexInRemapped.length; ++i) { if (indexInRemapped[i] == null) { @@ -321,7 +321,15 @@ public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks indexInRemapped[i] += offset; } matcher.appendTail(result); - remap.accept(result.toString()); + if (indexInRemapped[indexInRemapped.length - 1] != result.length()) { + StringBuilder meow = new StringBuilder(); + for (var j : indexInRemapped) { + meow.append(j == null ? "null" : j.toString()); + meow.append(","); + } + throw new IllegalArgumentException("Inconsistent indexInRemapped " + meow + " for new remapped string " + result); + } + remap.accept(result); } private Pattern pattern; @@ -331,7 +339,7 @@ public Breaks applyAt(int position, CharSequence remappedString, Integer[] index Consumer remap) { var resolvedBreaks = new Breaks[indexInRemapped.length]; apply(remappedString, indexInRemapped, resolvedBreaks, remap); - return resolvedBreaks[position]; + return resolvedBreaks[position] == null ? Breaks.UNKNOWN_BREAK : resolvedBreaks[position]; } } From 7852352921d4b6fb31328134850b69ae5dfcec91 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Fri, 11 Oct 2024 20:59:46 +0200 Subject: [PATCH 18/27] *, which apparently makes it work --- .../src/main/resources/org/unicode/tools/SegmenterDefault.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt index 28a8f2e11..1d5a11519 100644 --- a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt +++ b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt @@ -168,7 +168,7 @@ $Spec3b_=[^ $BA $HY $CM] 8.1) $ZWJ_O × # LB 9 Do not break a combining character sequence; treat it as if it has the LB class of the base character # in all of the following rules. (Where X is any line break class except SP, BK, CR, LF, NL or ZW.) -9) ([^$SP $BK $CR $LF $NL $ZW]) [$CM $ZWJ] → $1 +9) ([^$SP $BK $CR $LF $NL $ZW]) [$CM $ZWJ]* → $1 10) [$CM $ZWJ] → A ## LB 11 Do not break before or after WORD JOINER and related characters. 11.01) × $WJ From 419dea4dd6af201e4035fe77130741e7cabb1532 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Fri, 11 Oct 2024 21:06:19 +0200 Subject: [PATCH 19/27] Regenerate --- .../data/ucd/dev/auxiliary/LineBreakTest.html | 15 +- .../data/ucd/dev/auxiliary/LineBreakTest.txt | 274 +++++++++--------- .../org/unicode/tools/SegmenterDefault.txt | 7 +- 3 files changed, 146 insertions(+), 150 deletions(-) diff --git a/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html b/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html index 4cfb8f6d9..b8170e225 100644 --- a/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html +++ b/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html @@ -7,7 +7,7 @@

Line_Break Chart

Unicode Version: 17.0.0

-

Date: 2024-09-12, 14:11:46 GMT

+

Date: 2024-10-11, 19:04:31 GMT

This page illustrates the application of the Line_Break specification. The material here is informative, not normative.

The first chart shows where breaks would appear between different sample characters or strings. The sample characters are chosen mechanically to represent the different properties used by the specification.

Each cell shows the break-status for the position between the character(s) in its row header and the character(s) in its column header. The × symbol indicates no break, while the ÷ symbol indicated a break. The cells with × are also shaded to make it easier to scan the table. For example, in the cell at the intersection of the row headed by “CR” and the column headed by “LF”, there is a × symbol, indicating that there is no break between CR and LF.

Some column headers may be composed, reflecting “treat as” or “ignore” rules.

If your browser handles titles (tooltips), then hovering the mouse over the row header will show a sample character of that type. Hovering over a column header will show the sample character, plus its abbreviated general category and script. Hovering over the intersected cells shows the rule number that produces the break-status. For example, hovering over the cell at the intersection of H3 and JT shows ×, with the rule 26.03. Checking below the table, rule 26.03 is “JT | H3 × JT”, which is the one that applies to that case. Note that a rule is invoked only when no lower-numbered rules have applied.

@@ -67,9 +67,9 @@

Table

BA_NotEastAsian_NonEastAsianBA_Hyphen××××÷÷÷÷×÷×÷÷÷÷÷××××××÷÷×××÷××÷×÷×÷÷÷÷÷÷÷÷×÷××÷÷÷÷×××÷×××××××××× CP_NotEastAsian_CP30×××××÷÷÷×÷×÷÷÷÷÷××××××÷÷××××××××÷××÷÷÷÷÷÷÷×÷××÷÷÷÷×××÷×××××××××× OP_NotEastAsian_OP30×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× -CM1_NotEastAsian_CM×××××÷÷÷×÷×÷××÷÷××××××××××××××××÷××÷÷÷÷÷÷÷×÷××÷÷÷÷×××××××××××××× +CM1_NotEastAsian_CM×××××÷÷÷×÷×÷××÷÷××××××××××××××××÷××÷÷÷÷÷÷÷×÷××÷÷÷÷×××××××××××××× ZWJ_O_ZWJ_NotEastAsian_CM×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× -CM1_CM×××××÷÷÷×÷×÷××÷÷××××××××××××××××÷××÷÷÷÷÷÷÷×÷××÷÷÷÷×××××××××××××× +CM1_CM×××××÷÷÷×÷×÷××÷÷××××××××××××××××÷××÷÷÷÷÷÷÷×÷××÷÷÷÷×××××××××××××× AL_NotEastAsian_AL×××××÷÷÷×÷×÷××÷÷××××××××××××××××÷××÷÷÷÷÷÷÷×÷××÷÷÷÷×××××××××××××× AI_NotEastAsian_AL×××××÷÷÷×÷×÷××÷÷××××××××××××××××÷××÷÷÷÷÷÷÷×÷××÷÷÷÷×××××××××××××× XX_NotEastAsian_AL×××××÷÷÷×÷×÷××÷÷××××××××××××××××÷××÷÷÷÷÷÷÷×÷××÷÷÷÷×××××××××××××× @@ -93,13 +93,12 @@

Rules

7.02× ZW 8.0ZW SP* ÷ 8.1ZWJ_O × -9.0[^ SP BK CR LF NL ZW] × CM +9.0([^SP BK CR LF NL ZW]) [CM ZWJ]* → 1 +10.0[CM ZWJ] → A 11.01× WJ 11.02WJ × 12.0GL × -12.1[^ SP BA HY CM] × GL -12.2[^ BA HY CM] CM+ × GL -12.3^ CM+ × GL +12.1[^ SP BA HY] × GL 13.01× EX 13.02× CL 13.03× CP @@ -229,7 +228,7 @@

Sample Strings

11      -◌̈   +◌̈       diff --git a/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.txt b/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.txt index 472c419c5..cc03bb2fb 100644 --- a/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.txt +++ b/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.txt @@ -1,5 +1,5 @@ -# LineBreakTest-16.0.0.txt -# Date: 2024-07-05, 00:45:20 GMT +# LineBreakTest-17.0.0.txt +# Date: 2024-10-11, 18:57:27 GMT # © 2024 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use and license, see https://www.unicode.org/terms_of_use.html @@ -40,7 +40,7 @@ × 23E9 × 0308 × 0020 × FE15 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 23E9 × 16FE4 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 23E9 × 0020 ÷ 16FE4 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 23E9 × 0308 × 16FE4 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 23E9 × 0308 × 16FE4 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 23E9 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 23E9 ÷ AC00 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 23E9 × 0020 ÷ AC00 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -144,11 +144,11 @@ × 23E9 × 0308 × 0020 × 0085 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 23E9 × 00A0 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 23E9 × 0020 ÷ 00A0 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 23E9 × 0308 × 00A0 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 23E9 × 0308 × 00A0 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 23E9 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 23E9 × 00AB ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 23E9 × 0020 ÷ 00AB ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 23E9 × 0308 × 00AB ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 23E9 × 0308 × 00AB ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 23E9 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 23E9 ÷ 00B4 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 23E9 × 0020 ÷ 00B4 ÷ # × [0.3] BLACK RIGHT-POINTING DOUBLE TRIANGLE (AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -404,7 +404,7 @@ × 3000 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] IDEOGRAPHIC SPACE (BA) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 3000 × 00AB ÷ # × [0.3] IDEOGRAPHIC SPACE (BA) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3000 × 0020 ÷ 00AB ÷ # × [0.3] IDEOGRAPHIC SPACE (BA) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 3000 × 0308 × 00AB ÷ # × [0.3] IDEOGRAPHIC SPACE (BA) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 3000 × 0308 × 00AB ÷ # × [0.3] IDEOGRAPHIC SPACE (BA) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3000 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] IDEOGRAPHIC SPACE (BA) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3000 ÷ 00B4 ÷ # × [0.3] IDEOGRAPHIC SPACE (BA) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 3000 × 0020 ÷ 00B4 ÷ # × [0.3] IDEOGRAPHIC SPACE (BA) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -552,7 +552,7 @@ × 232A × 0308 × 0020 × FE15 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 232A × 16FE4 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 232A × 0020 ÷ 16FE4 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 232A × 0308 × 16FE4 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 232A × 0308 × 16FE4 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 232A × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 232A ÷ AC00 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 232A × 0020 ÷ AC00 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -656,11 +656,11 @@ × 232A × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 232A × 00A0 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 232A × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 232A × 0308 × 00A0 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 232A × 0308 × 00A0 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 232A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 232A × 00AB ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 232A × 0020 ÷ 00AB ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 232A × 0308 × 00AB ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 232A × 0308 × 00AB ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 232A × 0308 × 0020 ÷ 00AB ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 232A ÷ 00B4 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 232A × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT-POINTING ANGLE BRACKET (CL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -808,7 +808,7 @@ × FE15 × 0308 × 0020 × FE15 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × FE15 × 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE15 × 0020 ÷ 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× FE15 × 0308 × 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× FE15 × 0308 × 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE15 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE15 ÷ AC00 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × FE15 × 0020 ÷ AC00 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -912,11 +912,11 @@ × FE15 × 0308 × 0020 × 0085 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × FE15 × 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE15 × 0020 ÷ 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× FE15 × 0308 × 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× FE15 × 0308 × 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE15 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE15 × 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE15 × 0020 ÷ 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× FE15 × 0308 × 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× FE15 × 0308 × 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE15 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE15 ÷ 00B4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × FE15 × 0020 ÷ 00B4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -1320,7 +1320,7 @@ × AC00 × 0308 × 0020 × FE15 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × AC00 × 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × AC00 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× AC00 × 0308 × 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× AC00 × 0308 × 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × AC00 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × AC00 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × AC00 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -1424,11 +1424,11 @@ × AC00 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × AC00 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × AC00 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× AC00 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× AC00 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × AC00 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × AC00 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × AC00 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× AC00 × 0308 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× AC00 × 0308 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × AC00 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × AC00 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × AC00 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -1576,7 +1576,7 @@ × AC01 × 0308 × 0020 × FE15 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × AC01 × 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × AC01 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× AC01 × 0308 × 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× AC01 × 0308 × 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × AC01 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × AC01 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × AC01 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -1680,11 +1680,11 @@ × AC01 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × AC01 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × AC01 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× AC01 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× AC01 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × AC01 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × AC01 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × AC01 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× AC01 × 0308 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× AC01 × 0308 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × AC01 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × AC01 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × AC01 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -1832,7 +1832,7 @@ × 231A × 0308 × 0020 × FE15 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 231A × 16FE4 ÷ # × [0.3] WATCH (ID) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 231A × 0020 ÷ 16FE4 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 231A × 0308 × 16FE4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 231A × 0308 × 16FE4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 231A × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 231A ÷ AC00 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 231A × 0020 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -1936,11 +1936,11 @@ × 231A × 0308 × 0020 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 231A × 00A0 ÷ # × [0.3] WATCH (ID) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 231A × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 231A × 0308 × 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 231A × 0308 × 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 231A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 231A × 00AB ÷ # × [0.3] WATCH (ID) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 231A × 0020 ÷ 00AB ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 231A × 0308 × 00AB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 231A × 0308 × 00AB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 231A × 0308 × 0020 ÷ 00AB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 231A ÷ 00B4 ÷ # × [0.3] WATCH (ID) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 231A × 0020 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -2088,7 +2088,7 @@ × FE19 × 0308 × 0020 × FE15 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × FE19 × 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE19 × 0020 ÷ 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× FE19 × 0308 × 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× FE19 × 0308 × 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE19 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE19 ÷ AC00 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × FE19 × 0020 ÷ AC00 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -2192,11 +2192,11 @@ × FE19 × 0308 × 0020 × 0085 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × FE19 × 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE19 × 0020 ÷ 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× FE19 × 0308 × 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× FE19 × 0308 × 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE19 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE19 × 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE19 × 0020 ÷ 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× FE19 × 0308 × 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× FE19 × 0308 × 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE19 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE19 ÷ 00B4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × FE19 × 0020 ÷ 00B4 ÷ # × [0.3] PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS (IN) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -2344,7 +2344,7 @@ × 1100 × 0308 × 0020 × FE15 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1100 × 16FE4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1100 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1100 × 0308 × 16FE4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1100 × 0308 × 16FE4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1100 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1100 × AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1100 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -2448,11 +2448,11 @@ × 1100 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1100 × 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1100 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1100 × 0308 × 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1100 × 0308 × 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1100 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1100 × 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1100 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 1100 × 0308 × 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 1100 × 0308 × 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1100 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1100 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 1100 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -2600,7 +2600,7 @@ × 3005 × 0308 × 0020 × FE15 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 3005 × 16FE4 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 3005 × 0020 ÷ 16FE4 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 3005 × 0308 × 16FE4 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 3005 × 0308 × 16FE4 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 3005 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 3005 ÷ AC00 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 3005 × 0020 ÷ AC00 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -2704,11 +2704,11 @@ × 3005 × 0308 × 0020 × 0085 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 3005 × 00A0 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 3005 × 0020 ÷ 00A0 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 3005 × 0308 × 00A0 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 3005 × 0308 × 00A0 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 3005 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 3005 × 00AB ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3005 × 0020 ÷ 00AB ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 3005 × 0308 × 00AB ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 3005 × 0308 × 00AB ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3005 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3005 ÷ 00B4 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 3005 × 0020 ÷ 00B4 ÷ # × [0.3] IDEOGRAPHIC ITERATION MARK (NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -2856,7 +2856,7 @@ × 2329 × 0308 × 0020 × FE15 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 2329 × 16FE4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2329 × 0020 × 16FE4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP_NotEastAsian) × [14.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 2329 × 0308 × 16FE4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 2329 × 0308 × 16FE4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2329 × 0308 × 0020 × 16FE4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [14.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2329 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 2329 × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP_NotEastAsian) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -2960,7 +2960,7 @@ × 2329 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 2329 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2329 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP_NotEastAsian) × [14.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 2329 × 0308 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 2329 × 0308 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2329 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [14.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2329 × 00AB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 2329 × 0020 × 00AB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP_NotEastAsian) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -3112,7 +3112,7 @@ × FE6A × 0308 × 0020 × FE15 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × FE6A × 16FE4 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE6A × 0020 ÷ 16FE4 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× FE6A × 0308 × 16FE4 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× FE6A × 0308 × 16FE4 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE6A × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FE6A ÷ AC00 ÷ # × [0.3] SMALL PERCENT SIGN (PO) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × FE6A × 0020 ÷ AC00 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -3216,11 +3216,11 @@ × FE6A × 0308 × 0020 × 0085 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × FE6A × 00A0 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE6A × 0020 ÷ 00A0 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× FE6A × 0308 × 00A0 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× FE6A × 0308 × 00A0 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE6A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FE6A × 00AB ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE6A × 0020 ÷ 00AB ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× FE6A × 0308 × 00AB ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× FE6A × 0308 × 00AB ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE6A × 0308 × 0020 ÷ 00AB ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FE6A ÷ 00B4 ÷ # × [0.3] SMALL PERCENT SIGN (PO) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × FE6A × 0020 ÷ 00B4 ÷ # × [0.3] SMALL PERCENT SIGN (PO) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -3368,7 +3368,7 @@ × 20A9 × 0308 × 0020 × FE15 ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 20A9 × 16FE4 ÷ # × [0.3] WON SIGN (PR) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 20A9 × 0020 ÷ 16FE4 ÷ # × [0.3] WON SIGN (PR) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 20A9 × 0308 × 16FE4 ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 20A9 × 0308 × 16FE4 ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 20A9 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 20A9 × AC00 ÷ # × [0.3] WON SIGN (PR) × [27.02] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 20A9 × 0020 ÷ AC00 ÷ # × [0.3] WON SIGN (PR) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -3472,11 +3472,11 @@ × 20A9 × 0308 × 0020 × 0085 ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 20A9 × 00A0 ÷ # × [0.3] WON SIGN (PR) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 20A9 × 0020 ÷ 00A0 ÷ # × [0.3] WON SIGN (PR) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 20A9 × 0308 × 00A0 ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 20A9 × 0308 × 00A0 ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 20A9 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 20A9 × 00AB ÷ # × [0.3] WON SIGN (PR) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 20A9 × 0020 ÷ 00AB ÷ # × [0.3] WON SIGN (PR) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 20A9 × 0308 × 00AB ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 20A9 × 0308 × 00AB ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 20A9 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] WON SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 20A9 ÷ 00B4 ÷ # × [0.3] WON SIGN (PR) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 20A9 × 0020 ÷ 00B4 ÷ # × [0.3] WON SIGN (PR) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -3624,7 +3624,7 @@ × 270A × 0308 × 0020 × FE15 ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 270A × 16FE4 ÷ # × [0.3] RAISED FIST (EB) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 270A × 0020 ÷ 16FE4 ÷ # × [0.3] RAISED FIST (EB) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 270A × 0308 × 16FE4 ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 270A × 0308 × 16FE4 ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 270A × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 270A ÷ AC00 ÷ # × [0.3] RAISED FIST (EB) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 270A × 0020 ÷ AC00 ÷ # × [0.3] RAISED FIST (EB) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -3728,11 +3728,11 @@ × 270A × 0308 × 0020 × 0085 ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 270A × 00A0 ÷ # × [0.3] RAISED FIST (EB) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 270A × 0020 ÷ 00A0 ÷ # × [0.3] RAISED FIST (EB) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 270A × 0308 × 00A0 ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 270A × 0308 × 00A0 ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 270A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 270A × 00AB ÷ # × [0.3] RAISED FIST (EB) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 270A × 0020 ÷ 00AB ÷ # × [0.3] RAISED FIST (EB) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 270A × 0308 × 00AB ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 270A × 0308 × 00AB ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 270A × 0308 × 0020 ÷ 00AB ÷ # × [0.3] RAISED FIST (EB) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 270A ÷ 00B4 ÷ # × [0.3] RAISED FIST (EB) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 270A × 0020 ÷ 00B4 ÷ # × [0.3] RAISED FIST (EB) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -3880,7 +3880,7 @@ × 1F3FB × 0308 × 0020 × FE15 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1F3FB × 16FE4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1F3FB × 0020 ÷ 16FE4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1F3FB × 0308 × 16FE4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1F3FB × 0308 × 16FE4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1F3FB × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1F3FB ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1F3FB × 0020 ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -3984,11 +3984,11 @@ × 1F3FB × 0308 × 0020 × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1F3FB × 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1F3FB × 0020 ÷ 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1F3FB × 0308 × 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1F3FB × 0308 × 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1F3FB × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1F3FB × 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1F3FB × 0020 ÷ 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 1F3FB × 0308 × 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 1F3FB × 0308 × 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1F3FB × 0308 × 0020 ÷ 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1F3FB ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 1F3FB × 0020 ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -4136,7 +4136,7 @@ × 000A ÷ 0308 × 0020 × FE15 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 000A ÷ 16FE4 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000A ÷ 0020 ÷ 16FE4 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 000A ÷ 0308 × 16FE4 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 000A ÷ 0308 × 16FE4 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000A ÷ 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000A ÷ AC00 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 000A ÷ 0020 ÷ AC00 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -4240,7 +4240,7 @@ × 000A ÷ 0308 × 0020 × 0085 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 000A ÷ 00A0 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000A ÷ 0020 ÷ 00A0 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 000A ÷ 0308 × 00A0 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 000A ÷ 0308 × 00A0 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000A ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000A ÷ 00AB ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 000A ÷ 0020 ÷ 00AB ÷ # × [0.3] (LF_NotEastAsian) ÷ [5.03] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -4392,7 +4392,7 @@ × 000B ÷ 0308 × 0020 × FE15 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 000B ÷ 16FE4 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000B ÷ 0020 ÷ 16FE4 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 000B ÷ 0308 × 16FE4 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 000B ÷ 0308 × 16FE4 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000B ÷ 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000B ÷ AC00 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 000B ÷ 0020 ÷ AC00 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -4496,7 +4496,7 @@ × 000B ÷ 0308 × 0020 × 0085 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 000B ÷ 00A0 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000B ÷ 0020 ÷ 00A0 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 000B ÷ 0308 × 00A0 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 000B ÷ 0308 × 00A0 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000B ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000B ÷ 00AB ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 000B ÷ 0020 ÷ 00AB ÷ # × [0.3] (BK_NotEastAsian) ÷ [4.0] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -4648,7 +4648,7 @@ × 000D ÷ 0308 × 0020 × FE15 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 000D ÷ 16FE4 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000D ÷ 0020 ÷ 16FE4 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 000D ÷ 0308 × 16FE4 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 000D ÷ 0308 × 16FE4 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000D ÷ 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 000D ÷ AC00 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 000D ÷ 0020 ÷ AC00 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -4752,7 +4752,7 @@ × 000D ÷ 0308 × 0020 × 0085 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 000D ÷ 00A0 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000D ÷ 0020 ÷ 00A0 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 000D ÷ 0308 × 00A0 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 000D ÷ 0308 × 00A0 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000D ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 000D ÷ 00AB ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 000D ÷ 0020 ÷ 00AB ÷ # × [0.3] (CR_NotEastAsian) ÷ [5.02] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -4904,7 +4904,7 @@ × 0020 ÷ 0308 × 0020 × FE15 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0020 ÷ 16FE4 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0020 × 0020 ÷ 16FE4 ÷ # × [0.3] SPACE (SP_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0020 ÷ 0308 × 16FE4 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0020 ÷ 0308 × 16FE4 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0020 ÷ 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0020 × 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -5008,7 +5008,7 @@ × 0020 ÷ 0308 × 0020 × 0085 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0020 × 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0020 ÷ 0308 × 00A0 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0020 ÷ 0308 × 00A0 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0020 ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0020 ÷ 00AB ÷ # × [0.3] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0020 × 0020 ÷ 00AB ÷ # × [0.3] SPACE (SP_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -5160,7 +5160,7 @@ × 0021 × 0308 × 0020 × FE15 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0021 × 16FE4 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0021 × 0020 ÷ 16FE4 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0021 × 0308 × 16FE4 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0021 × 0308 × 16FE4 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0021 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0021 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0021 × 0020 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -5264,7 +5264,7 @@ × 0021 × 0308 × 0020 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0021 × 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0021 × 0020 ÷ 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0021 × 0308 × 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0021 × 0308 × 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0021 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0021 × 00AB ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0021 × 0020 ÷ 00AB ÷ # × [0.3] EXCLAMATION MARK (EX_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -5416,7 +5416,7 @@ × 0022 × 0308 × 0020 × FE15 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0022 × 16FE4 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0022 × 0020 ÷ 16FE4 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0022 × 0308 × 16FE4 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0022 × 0308 × 16FE4 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0022 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0022 × AC00 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [19.02] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0022 × 0020 ÷ AC00 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -5520,7 +5520,7 @@ × 0022 × 0308 × 0020 × 0085 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0022 × 00A0 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0022 × 0020 ÷ 00A0 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0022 × 0308 × 00A0 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0022 × 0308 × 00A0 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0022 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0022 × 00AB ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [19.02] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0022 × 0020 ÷ 00AB ÷ # × [0.3] QUOTATION MARK (QU_QUmPi_QUmPf_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -5672,7 +5672,7 @@ × 0024 × 0308 × 0020 × FE15 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0024 × 16FE4 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0024 × 0020 ÷ 16FE4 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0024 × 0308 × 16FE4 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0024 × 0308 × 16FE4 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0024 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0024 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [27.02] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0024 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -5776,7 +5776,7 @@ × 0024 × 0308 × 0020 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0024 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0024 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0024 × 0308 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0024 × 0308 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0024 × 00AB ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0024 × 0020 ÷ 00AB ÷ # × [0.3] DOLLAR SIGN (PR_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -5928,7 +5928,7 @@ × 0025 × 0308 × 0020 × FE15 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0025 × 16FE4 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0025 × 0020 ÷ 16FE4 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0025 × 0308 × 16FE4 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0025 × 0308 × 16FE4 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0025 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0025 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0025 × 0020 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -6032,7 +6032,7 @@ × 0025 × 0308 × 0020 × 0085 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0025 × 00A0 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0025 × 0020 ÷ 00A0 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0025 × 0308 × 00A0 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0025 × 0308 × 00A0 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0025 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0025 × 00AB ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0025 × 0020 ÷ 00AB ÷ # × [0.3] PERCENT SIGN (PO_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -6184,7 +6184,7 @@ × 002C × 0308 × 0020 × FE15 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 002C × 16FE4 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 002C × 0020 ÷ 16FE4 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 002C × 0308 × 16FE4 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 002C × 0308 × 16FE4 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 002C × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 002C ÷ AC00 ÷ # × [0.3] COMMA (IS_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 002C × 0020 ÷ AC00 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -6288,7 +6288,7 @@ × 002C × 0308 × 0020 × 0085 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 002C × 00A0 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 002C × 0020 ÷ 00A0 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 002C × 0308 × 00A0 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 002C × 0308 × 00A0 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 002C × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] COMMA (IS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 002C × 00AB ÷ # × [0.3] COMMA (IS_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 002C × 0020 ÷ 00AB ÷ # × [0.3] COMMA (IS_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -6696,7 +6696,7 @@ × 002F × 0308 × 0020 × FE15 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 002F × 16FE4 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 002F × 0020 ÷ 16FE4 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 002F × 0308 × 16FE4 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 002F × 0308 × 16FE4 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 002F × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 002F ÷ AC00 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 002F × 0020 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -6800,7 +6800,7 @@ × 002F × 0308 × 0020 × 0085 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 002F × 00A0 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 002F × 0020 ÷ 00A0 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 002F × 0308 × 00A0 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 002F × 0308 × 00A0 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 002F × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 002F × 00AB ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 002F × 0020 ÷ 00AB ÷ # × [0.3] SOLIDUS (SY_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -6952,7 +6952,7 @@ × 0030 × 0308 × 0020 × FE15 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0030 × 16FE4 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0030 × 0020 ÷ 16FE4 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0030 × 0308 × 16FE4 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0030 × 0308 × 16FE4 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0030 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0030 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0030 × 0020 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -7056,7 +7056,7 @@ × 0030 × 0308 × 0020 × 0085 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0030 × 00A0 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0030 × 0020 ÷ 00A0 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0030 × 0308 × 00A0 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0030 × 0308 × 00A0 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0030 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0030 × 00AB ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0030 × 0020 ÷ 00AB ÷ # × [0.3] DIGIT ZERO (NU_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -7208,7 +7208,7 @@ × 007D × 0308 × 0020 × FE15 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 007D × 16FE4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 007D × 0020 ÷ 16FE4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 007D × 0308 × 16FE4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 007D × 0308 × 16FE4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 007D × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 007D ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 007D × 0020 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -7312,7 +7312,7 @@ × 007D × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 007D × 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 007D × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 007D × 0308 × 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 007D × 0308 × 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 007D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 007D × 00AB ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 007D × 0020 ÷ 00AB ÷ # × [0.3] RIGHT CURLY BRACKET (CL_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -7464,7 +7464,7 @@ × 0085 ÷ 0308 × 0020 × FE15 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0085 ÷ 16FE4 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0085 ÷ 0020 ÷ 16FE4 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0085 ÷ 0308 × 16FE4 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0085 ÷ 0308 × 16FE4 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0085 ÷ 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0085 ÷ AC00 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0085 ÷ 0020 ÷ AC00 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -7568,7 +7568,7 @@ × 0085 ÷ 0308 × 0020 × 0085 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0085 ÷ 00A0 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0085 ÷ 0020 ÷ 00A0 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0085 ÷ 0308 × 00A0 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0085 ÷ 0308 × 00A0 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0085 ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0085 ÷ 00AB ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0085 ÷ 0020 ÷ 00AB ÷ # × [0.3] (NL_NotEastAsian) ÷ [5.04] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -7976,7 +7976,7 @@ × 00AB × 0308 × 0020 × FE15 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 00AB × 16FE4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00AB × 0020 × 16FE4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) × [15.11] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 00AB × 0308 × 16FE4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 00AB × 0308 × 16FE4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00AB × 0308 × 0020 × 16FE4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [15.11] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00AB × AC00 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [15.11] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 00AB × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) × [15.11] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -8080,7 +8080,7 @@ × 00AB × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 00AB × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00AB × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) × [15.11] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 00AB × 0308 × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 00AB × 0308 × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00AB × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [15.11] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00AB × 00AB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [15.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 00AB × 0020 × 00AB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) × [15.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -8232,7 +8232,7 @@ × 00B4 × 0308 × 0020 × FE15 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 00B4 × 16FE4 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00B4 × 0020 ÷ 16FE4 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 00B4 × 0308 × 16FE4 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 00B4 × 0308 × 16FE4 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00B4 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00B4 × AC00 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [21.04] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 00B4 × 0020 ÷ AC00 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -8336,7 +8336,7 @@ × 00B4 × 0308 × 0020 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 00B4 × 00A0 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00B4 × 0020 ÷ 00A0 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 00B4 × 0308 × 00A0 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 00B4 × 0308 × 00A0 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00B4 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00B4 × 00AB ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 00B4 × 0020 ÷ 00AB ÷ # × [0.3] ACUTE ACCENT (BB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -8488,7 +8488,7 @@ × 00BB × 0308 × 0020 × FE15 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 00BB × 16FE4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00BB × 0020 ÷ 16FE4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 00BB × 0308 × 16FE4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 00BB × 0308 × 16FE4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00BB × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00BB × AC00 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [19.13] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 00BB × 0020 ÷ AC00 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -8592,7 +8592,7 @@ × 00BB × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 00BB × 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00BB × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 00BB × 0308 × 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 00BB × 0308 × 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00BB × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00BB × 00AB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 00BB × 0020 ÷ 00AB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf_QUmPi_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -8744,7 +8744,7 @@ × 05D0 × 0308 × 0020 × FE15 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 05D0 × 16FE4 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 05D0 × 0020 ÷ 16FE4 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 05D0 × 0308 × 16FE4 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 05D0 × 0308 × 16FE4 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 05D0 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 05D0 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 05D0 × 0020 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -8848,7 +8848,7 @@ × 05D0 × 0308 × 0020 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 05D0 × 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 05D0 × 0020 ÷ 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 05D0 × 0308 × 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 05D0 × 0308 × 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 05D0 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 05D0 × 00AB ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 05D0 × 0020 ÷ 00AB ÷ # × [0.3] HEBREW LETTER ALEF (HL_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -9000,7 +9000,7 @@ × 1160 × 0308 × 0020 × FE15 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1160 × 16FE4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1160 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1160 × 0308 × 16FE4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1160 × 0308 × 16FE4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1160 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1160 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1160 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -9104,7 +9104,7 @@ × 1160 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1160 × 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1160 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1160 × 0308 × 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1160 × 0308 × 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1160 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1160 × 00AB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1160 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -9256,7 +9256,7 @@ × 11A8 × 0308 × 0020 × FE15 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 11A8 × 16FE4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 11A8 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 11A8 × 0308 × 16FE4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 11A8 × 0308 × 16FE4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 11A8 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 11A8 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 11A8 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -9360,7 +9360,7 @@ × 11A8 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 11A8 × 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 11A8 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 11A8 × 0308 × 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 11A8 × 0308 × 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 11A8 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 11A8 × 00AB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 11A8 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -9512,7 +9512,7 @@ × 1B05 × 0308 × 0020 × FE15 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1B05 × 16FE4 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B05 × 0020 ÷ 16FE4 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1B05 × 0308 × 16FE4 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1B05 × 0308 × 16FE4 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B05 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B05 ÷ AC00 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1B05 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -9616,7 +9616,7 @@ × 1B05 × 0308 × 0020 × 0085 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1B05 × 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B05 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1B05 × 0308 × 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1B05 × 0308 × 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B05 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B05 × 00AB ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1B05 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE LETTER AKARA (AK_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -9768,7 +9768,7 @@ × 1B44 × 0308 × 0020 × FE15 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1B44 × 16FE4 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B44 × 0020 ÷ 16FE4 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1B44 × 0308 × 16FE4 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1B44 × 0308 × 16FE4 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B44 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B44 ÷ AC00 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1B44 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -9872,7 +9872,7 @@ × 1B44 × 0308 × 0020 × 0085 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1B44 × 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B44 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1B44 × 0308 × 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1B44 × 0308 × 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B44 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B44 × 00AB ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1B44 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE ADEG ADEG (VI_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -10024,7 +10024,7 @@ × 1B50 × 0308 × 0020 × FE15 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1B50 × 16FE4 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B50 × 0020 ÷ 16FE4 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1B50 × 0308 × 16FE4 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1B50 × 0308 × 16FE4 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B50 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B50 ÷ AC00 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1B50 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -10128,7 +10128,7 @@ × 1B50 × 0308 × 0020 × 0085 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1B50 × 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B50 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1B50 × 0308 × 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1B50 × 0308 × 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B50 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B50 × 00AB ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1B50 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE DIGIT ZERO (AS_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -10280,7 +10280,7 @@ × 1B5C × 0308 × 0020 × FE15 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1B5C × 16FE4 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B5C × 0020 ÷ 16FE4 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1B5C × 0308 × 16FE4 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1B5C × 0308 × 16FE4 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B5C × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1B5C ÷ AC00 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1B5C × 0020 ÷ AC00 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -10384,7 +10384,7 @@ × 1B5C × 0308 × 0020 × 0085 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1B5C × 00A0 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B5C × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1B5C × 0308 × 00A0 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1B5C × 0308 × 00A0 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B5C × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1B5C × 00AB ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1B5C × 0020 ÷ 00AB ÷ # × [0.3] BALINESE WINDU (ID_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -10536,7 +10536,7 @@ × 1BF2 × 0308 × 0020 × FE15 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1BF2 × 16FE4 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1BF2 × 0020 ÷ 16FE4 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1BF2 × 0308 × 16FE4 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1BF2 × 0308 × 16FE4 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1BF2 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1BF2 ÷ AC00 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1BF2 × 0020 ÷ AC00 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -10640,7 +10640,7 @@ × 1BF2 × 0308 × 0020 × 0085 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1BF2 × 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1BF2 × 0020 ÷ 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1BF2 × 0308 × 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1BF2 × 0308 × 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1BF2 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1BF2 × 00AB ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1BF2 × 0020 ÷ 00AB ÷ # × [0.3] BATAK PANGOLAT (VF_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -10792,7 +10792,7 @@ × 200B ÷ 0308 × 0020 × FE15 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 200B ÷ 16FE4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 200B × 0020 ÷ 16FE4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [8.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 200B ÷ 0308 × 16FE4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 200B ÷ 0308 × 16FE4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 200B ÷ 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 200B ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 200B × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [8.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -10896,7 +10896,7 @@ × 200B ÷ 0308 × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 200B ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 200B × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [8.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 200B ÷ 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 200B ÷ 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 200B ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 200B ÷ 00AB ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) ÷ [8.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 200B × 0020 ÷ 00AB ÷ # × [0.3] ZERO WIDTH SPACE (ZW_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [8.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -11048,7 +11048,7 @@ × 2014 × 0308 × 0020 × FE15 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 2014 × 16FE4 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2014 × 0020 ÷ 16FE4 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 2014 × 0308 × 16FE4 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 2014 × 0308 × 16FE4 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2014 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2014 ÷ AC00 ÷ # × [0.3] EM DASH (B2_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 2014 × 0020 ÷ AC00 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -11152,7 +11152,7 @@ × 2014 × 0308 × 0020 × 0085 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 2014 × 00A0 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2014 × 0020 ÷ 00A0 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 2014 × 0308 × 00A0 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 2014 × 0308 × 00A0 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2014 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2014 × 00AB ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 2014 × 0020 ÷ 00AB ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -11304,7 +11304,7 @@ × 2024 × 0308 × 0020 × FE15 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 2024 × 16FE4 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2024 × 0020 ÷ 16FE4 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 2024 × 0308 × 16FE4 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 2024 × 0308 × 16FE4 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2024 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2024 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 2024 × 0020 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -11408,7 +11408,7 @@ × 2024 × 0308 × 0020 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 2024 × 00A0 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2024 × 0020 ÷ 00A0 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 2024 × 0308 × 00A0 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 2024 × 0308 × 00A0 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2024 × 00AB ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 2024 × 0020 ÷ 00AB ÷ # × [0.3] ONE DOT LEADER (IN_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -11816,7 +11816,7 @@ × 261D × 0308 × 0020 × FE15 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 261D × 16FE4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 261D × 0020 ÷ 16FE4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 261D × 0308 × 16FE4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 261D × 0308 × 16FE4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 261D × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 261D ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 261D × 0020 ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -11920,7 +11920,7 @@ × 261D × 0308 × 0020 × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 261D × 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 261D × 0020 ÷ 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 261D × 0308 × 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 261D × 0308 × 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 261D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 261D × 00AB ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 261D × 0020 ÷ 00AB ÷ # × [0.3] WHITE UP POINTING INDEX (EB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -12072,7 +12072,7 @@ × FFFC × 0308 × 0020 × FE15 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × FFFC × 16FE4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FFFC × 0020 ÷ 16FE4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× FFFC × 0308 × 16FE4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× FFFC × 0308 × 16FE4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FFFC × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × FFFC ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) ÷ [20.02] HANGUL SYLLABLE GA (H2) ÷ [0.3] × FFFC × 0020 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -12176,7 +12176,7 @@ × FFFC × 0308 × 0020 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × FFFC × 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FFFC × 0020 ÷ 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× FFFC × 0308 × 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× FFFC × 0308 × 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FFFC × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × FFFC × 00AB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × FFFC × 0020 ÷ 00AB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -12328,7 +12328,7 @@ × 11003 × 0308 × 0020 × FE15 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 11003 × 16FE4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 11003 × 0020 ÷ 16FE4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 11003 × 0308 × 16FE4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 11003 × 0308 × 16FE4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 11003 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 11003 ÷ AC00 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 11003 × 0020 ÷ AC00 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -12432,7 +12432,7 @@ × 11003 × 0308 × 0020 × 0085 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 11003 × 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 11003 × 0020 ÷ 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 11003 × 0308 × 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 11003 × 0308 × 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 11003 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 11003 × 00AB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 11003 × 0020 ÷ 00AB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -12584,7 +12584,7 @@ × 1F1E6 × 0308 × 0020 × FE15 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 1F1E6 × 16FE4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1F1E6 × 0020 ÷ 16FE4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 1F1E6 × 0308 × 16FE4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 1F1E6 × 0308 × 16FE4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1F1E6 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 1F1E6 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 1F1E6 × 0020 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -12688,7 +12688,7 @@ × 1F1E6 × 0308 × 0020 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 1F1E6 × 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1F1E6 × 0020 ÷ 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 1F1E6 × 0308 × 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 1F1E6 × 0308 × 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1F1E6 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 1F1E6 × 00AB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 1F1E6 × 0020 ÷ 00AB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI_NotEastAsian) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -13352,7 +13352,7 @@ × 0029 × 0308 × 0020 × FE15 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0029 × 16FE4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0029 × 0020 ÷ 16FE4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0029 × 0308 × 16FE4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0029 × 0308 × 16FE4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0029 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0029 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0029 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -13456,7 +13456,7 @@ × 0029 × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0029 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0029 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0029 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0029 × 00AB ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0029 × 0020 ÷ 00AB ÷ # × [0.3] RIGHT PARENTHESIS (CP_NotEastAsian_CP30) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -13608,7 +13608,7 @@ × 0028 × 0308 × 0020 × FE15 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0028 × 16FE4 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0028 × 0020 × 16FE4 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [7.01] SPACE (SP_NotEastAsian) × [14.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0028 × 0308 × 16FE4 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0028 × 0308 × 16FE4 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0028 × 0308 × 0020 × 16FE4 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [14.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0028 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0028 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [7.01] SPACE (SP_NotEastAsian) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -13712,7 +13712,7 @@ × 0028 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0028 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0028 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [7.01] SPACE (SP_NotEastAsian) × [14.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0028 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [14.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0028 × 00AB ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0028 × 0020 × 00AB ÷ # × [0.3] LEFT PARENTHESIS (OP_NotEastAsian_OP30) × [7.01] SPACE (SP_NotEastAsian) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -13862,9 +13862,9 @@ × 0001 × 0020 × FE15 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0001 × 0308 × FE15 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0001 × 0308 × 0020 × FE15 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] -× 0001 × 16FE4 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [12.3] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0001 × 16FE4 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0001 × 0020 ÷ 16FE4 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0001 × 0308 × 16FE4 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.3] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0001 × 0308 × 16FE4 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0001 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0001 ÷ AC00 ÷ # × [0.3] (CM1_NotEastAsian_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0001 × 0020 ÷ AC00 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -13966,9 +13966,9 @@ × 0001 × 0020 × 0085 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0001 × 0308 × 0085 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0001 × 0308 × 0020 × 0085 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] -× 0001 × 00A0 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [12.3] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0001 × 00A0 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0001 × 0020 ÷ 00A0 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0001 × 0308 × 00A0 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.3] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0001 × 0308 × 00A0 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0001 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] (CM1_NotEastAsian_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0001 × 00AB ÷ # × [0.3] (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0001 × 0020 ÷ 00AB ÷ # × [0.3] (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -14120,7 +14120,7 @@ × 200D × 0308 × 0020 × FE15 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 200D × 16FE4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 200D × 0020 ÷ 16FE4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 200D × 0308 × 16FE4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.3] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 200D × 0308 × 16FE4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 200D × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 200D × AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 200D × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -14224,7 +14224,7 @@ × 200D × 0308 × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 200D × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 200D × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 200D × 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.3] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 200D × 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 200D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 200D × 00AB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 200D × 0020 ÷ 00AB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -14374,9 +14374,9 @@ × 302A × 0020 × FE15 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 302A × 0308 × FE15 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 302A × 0308 × 0020 × FE15 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] -× 302A × 16FE4 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [12.3] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 302A × 16FE4 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 302A × 0020 ÷ 16FE4 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 302A × 0308 × 16FE4 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.3] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 302A × 0308 × 16FE4 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 302A × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 302A ÷ AC00 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 302A × 0020 ÷ AC00 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -14478,9 +14478,9 @@ × 302A × 0020 × 0085 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 302A × 0308 × 0085 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 302A × 0308 × 0020 × 0085 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] -× 302A × 00A0 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [12.3] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 302A × 00A0 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 302A × 0020 ÷ 00A0 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 302A × 0308 × 00A0 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.3] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 302A × 0308 × 00A0 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 302A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 302A × 00AB ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 302A × 0020 ÷ 00AB ÷ # × [0.3] IDEOGRAPHIC LEVEL TONE MARK (CM1_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -14632,7 +14632,7 @@ × 0023 × 0308 × 0020 × FE15 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0023 × 16FE4 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0023 × 0020 ÷ 16FE4 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0023 × 0308 × 16FE4 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0023 × 0308 × 16FE4 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0023 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0023 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0023 × 0020 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -14736,7 +14736,7 @@ × 0023 × 0308 × 0020 × 0085 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0023 × 00A0 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0023 × 0020 ÷ 00A0 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0023 × 0308 × 00A0 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0023 × 0308 × 00A0 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0023 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0023 × 00AB ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0023 × 0020 ÷ 00AB ÷ # × [0.3] NUMBER SIGN (AL_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -14888,7 +14888,7 @@ × 00A7 × 0308 × 0020 × FE15 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 00A7 × 16FE4 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00A7 × 0020 ÷ 16FE4 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 00A7 × 0308 × 16FE4 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 00A7 × 0308 × 16FE4 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00A7 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 00A7 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 00A7 × 0020 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -14992,7 +14992,7 @@ × 00A7 × 0308 × 0020 × 0085 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 00A7 × 00A0 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00A7 × 0020 ÷ 00A0 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 00A7 × 0308 × 00A0 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 00A7 × 0308 × 00A0 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00A7 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 00A7 × 00AB ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 00A7 × 0020 ÷ 00AB ÷ # × [0.3] SECTION SIGN (AI_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -15144,7 +15144,7 @@ × 50005 × 0308 × 0020 × FE15 ÷ # × [0.3] (XX_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 50005 × 16FE4 ÷ # × [0.3] (XX_NotEastAsian_AL) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 50005 × 0020 ÷ 16FE4 ÷ # × [0.3] (XX_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 50005 × 0308 × 16FE4 ÷ # × [0.3] (XX_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 50005 × 0308 × 16FE4 ÷ # × [0.3] (XX_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 50005 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] (XX_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 50005 ÷ AC00 ÷ # × [0.3] (XX_NotEastAsian_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 50005 × 0020 ÷ AC00 ÷ # × [0.3] (XX_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -15248,7 +15248,7 @@ × 50005 × 0308 × 0020 × 0085 ÷ # × [0.3] (XX_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 50005 × 00A0 ÷ # × [0.3] (XX_NotEastAsian_AL) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 50005 × 0020 ÷ 00A0 ÷ # × [0.3] (XX_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 50005 × 0308 × 00A0 ÷ # × [0.3] (XX_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 50005 × 0308 × 00A0 ÷ # × [0.3] (XX_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 50005 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] (XX_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 50005 × 00AB ÷ # × [0.3] (XX_NotEastAsian_AL) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 50005 × 0020 ÷ 00AB ÷ # × [0.3] (XX_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -15400,7 +15400,7 @@ × 0E01 × 0308 × 0020 × FE15 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 0E01 × 16FE4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0E01 × 0020 ÷ 16FE4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 0E01 × 0308 × 16FE4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 0E01 × 0308 × 16FE4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0E01 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 0E01 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0E01 × 0020 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -15504,7 +15504,7 @@ × 0E01 × 0308 × 0020 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 0E01 × 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0E01 × 0020 ÷ 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 0E01 × 0308 × 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 0E01 × 0308 × 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0E01 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 0E01 × 00AB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 0E01 × 0020 ÷ 00AB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_NotEastAsian_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -15656,7 +15656,7 @@ × 2757 × 0308 × 0020 × FE15 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 2757 × 16FE4 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2757 × 0020 ÷ 16FE4 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 2757 × 0308 × 16FE4 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 2757 × 0308 × 16FE4 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2757 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 2757 ÷ AC00 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 2757 × 0020 ÷ AC00 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -15760,11 +15760,11 @@ × 2757 × 0308 × 0020 × 0085 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 2757 × 00A0 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2757 × 0020 ÷ 00A0 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 2757 × 0308 × 00A0 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 2757 × 0308 × 00A0 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2757 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 2757 × 00AB ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 2757 × 0020 ÷ 00AB ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 2757 × 0308 × 00AB ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 2757 × 0308 × 00AB ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 2757 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 2757 ÷ 00B4 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 2757 × 0020 ÷ 00B4 ÷ # × [0.3] HEAVY EXCLAMATION MARK SYMBOL (AI_AL) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -15912,7 +15912,7 @@ × 17D6 × 0308 × 0020 × FE15 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 17D6 × 16FE4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 17D6 × 0020 ÷ 16FE4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 17D6 × 0308 × 16FE4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 17D6 × 0308 × 16FE4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 17D6 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 17D6 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 17D6 × 0020 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -16016,7 +16016,7 @@ × 17D6 × 0308 × 0020 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 17D6 × 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 17D6 × 0020 ÷ 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 17D6 × 0308 × 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 17D6 × 0308 × 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 17D6 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 17D6 × 00AB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 17D6 × 0020 ÷ 00AB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS_NotEastAsian_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] @@ -16168,7 +16168,7 @@ × 3041 × 0308 × 0020 × FE15 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [13.01] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK (EX) ÷ [0.3] × 3041 × 16FE4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 3041 × 0020 ÷ 16FE4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] -× 3041 × 0308 × 16FE4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] +× 3041 × 0308 × 16FE4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 3041 × 0308 × 0020 ÷ 16FE4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] KHITAN SMALL SCRIPT FILLER (GL) ÷ [0.3] × 3041 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 3041 × 0020 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] @@ -16272,11 +16272,11 @@ × 3041 × 0308 × 0020 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) × [6.0] (NL_NotEastAsian) ÷ [0.3] × 3041 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 3041 × 0020 ÷ 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] -× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 3041 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 3041 × 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3041 × 0020 ÷ 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] -× 3041 × 0308 × 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] +× 3041 × 0308 × 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [19.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3041 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi_QUmPf_NotEastAsian) ÷ [0.3] × 3041 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] × 3041 × 0020 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP_NotEastAsian) ÷ [18.0] ACUTE ACCENT (BB_NotEastAsian) ÷ [0.3] @@ -16416,7 +16416,7 @@ × 200D × 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] WHITE UP POINTING INDEX (EB_NotEastAsian) ÷ [0.3] × 3041 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [11.01] WORD JOINER (WJ_NotEastAsian) ÷ [0.3] × 2060 × 3041 ÷ # × [0.3] WORD JOINER (WJ_NotEastAsian) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3] -× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.2] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] +× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_NotEastAsian_CM) × [12.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 200D × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] NO-BREAK SPACE (GL_NotEastAsian) ÷ [0.3] × 200D × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_NotEastAsian_CM) × [8.1] SOLIDUS (SY_NotEastAsian) ÷ [0.3] × 2014 × 2014 ÷ # × [0.3] EM DASH (B2_NotEastAsian) × [17.0] EM DASH (B2_NotEastAsian) ÷ [0.3] diff --git a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt index 1d5a11519..d494d3107 100644 --- a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt +++ b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt @@ -145,8 +145,7 @@ $NS=[$NS $CJ] # MACROS -$Spec3a_=[^ $SP $BA $HY $CM] -$Spec3b_=[^ $BA $HY $CM] +$Spec3a_=[^ $SP $BA $HY] # RULES @@ -174,11 +173,9 @@ $Spec3b_=[^ $BA $HY $CM] 11.01) × $WJ 11.02) $WJ × # LB 12 Do not break after NBSP and related characters. -## 12.01) [^$SP] × $GL 12) $GL × +# LB 12a Do not break before NBSP and related characters, except after spaces and hyphens. 12.1) $Spec3a_ × $GL -12.2) $Spec3b_ $CM+ × $GL -12.3) ^ $CM+ × $GL # LB 13 Do not break before \u2018]\u2019 or \u2018!\u2019 or \u2018;\u2019 or \u2018/\u2019, even after spaces. 13.01) × $EX 13.02) × $CL From b4229efde7dd7db05fc1336c05333afc340c90fc Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 14 Oct 2024 13:56:22 +0200 Subject: [PATCH 20/27] spotless --- .../java/org/unicode/tools/Segmenter.java | 118 +++++++++++------- 1 file changed, 73 insertions(+), 45 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 8aaa60adb..d2dfe20f0 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -33,14 +33,9 @@ import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Supplier; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; - -import javax.swing.text.Segment; - import org.unicode.cldr.draft.FileUtilities; import org.unicode.cldr.util.RegexUtilities; import org.unicode.cldr.util.TransliteratorUtilities; @@ -177,10 +172,11 @@ public boolean breaksAt(CharSequence text, int position) { return false; } StringBuilder remapped = new StringBuilder(text.toString()); - Consumer remap = (s) -> { - remapped.setLength(0); - remapped.append(s);} - ; + Consumer remap = + (s) -> { + remapped.setLength(0); + remapped.append(s); + }; Integer[] indexInRemapped = new Integer[text.length() + 1]; for (int i = 0; i < indexInRemapped.length; ++i) { indexInRemapped[i] = i; @@ -241,13 +237,12 @@ public String toString(boolean showResolved) { String result = ""; for (int i = 0; i < rules.size(); ++i) { if (i != 0) result += Utility.LINE_SEPARATOR; - result += orders.get(i) + ")\tTODO";// + rules.get(i).toString(showResolved); + result += orders.get(i) + ")\tTODO"; // + rules.get(i).toString(showResolved); } return result; } - - public static abstract class SegmentationRule { + public abstract static class SegmentationRule { /** Status of a breaking rule */ public enum Breaks { UNKNOWN_BREAK, @@ -257,39 +252,53 @@ public enum Breaks { /** * Applies this rule throughout the text. + * * @param remappedString The text, with any preceding remappings applied. * @param indexInRemapped An array whose size is one greater than the original string. - * Associates indices in the original string to indices in remappedString. - * indexInRemapped[0] == 0, and indexInRemapped[indexInRemapped.size() - 1] == remappedString.size(). - * Whenever indexInRemapped[i] == null, - * resolvedBreaks[i] == NO_BREAK: this corresponds to positions - * inside a string which has been replaced by a remap rule. - * Remap rules may update this mapping. - * @param resolvedBreaks An array whose size is one greater than the original string, indicating resolved breaks in the string. - * Values that are UNKNOWN_BREAK are updated if the rule applies to their position. - * @param remap Called by remap rules with the value of remappedString to be passed to subsequent rules. - * The indices in indexInRemapped are updated consistently. + * Associates indices in the original string to indices in remappedString. + * indexInRemapped[0] == 0, and indexInRemapped[indexInRemapped.size() - 1] == + * remappedString.size(). Whenever indexInRemapped[i] == null, resolvedBreaks[i] == + * NO_BREAK: this corresponds to positions inside a string which has been replaced by a + * remap rule. Remap rules may update this mapping. + * @param resolvedBreaks An array whose size is one greater than the original string, + * indicating resolved breaks in the string. Values that are UNKNOWN_BREAK are updated + * if the rule applies to their position. + * @param remap Called by remap rules with the value of remappedString to be passed to + * subsequent rules. The indices in indexInRemapped are updated consistently. */ - public abstract void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap); - /** Same as above, but only returns the resolution at the current position. */ - public abstract Breaks applyAt(int position, CharSequence remappedString, Integer[] indexInRemapped, Consumer remap); + public abstract void apply( + CharSequence remappedString, + Integer[] indexInRemapped, + Breaks[] resolvedBreaks, + Consumer remap); + + /** Same as above, but only returns the resolution at the current position. */ + public abstract Breaks applyAt( + int position, + CharSequence remappedString, + Integer[] indexInRemapped, + Consumer remap); } /** A « treat as » rule. */ public static class RemapRule extends SegmentationRule { - + public RemapRule(String leftHandSide, String replacement) { pattern = Pattern.compile(leftHandSide, REGEX_FLAGS); this.replacement = replacement; } - - public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap) { + + public void apply( + CharSequence remappedString, + Integer[] indexInRemapped, + Breaks[] resolvedBreaks, + Consumer remap) { final var result = new StringBuilder(); int i = 0; int offset = 0; final var matcher = pattern.matcher(remappedString); while (matcher.find()) { - for (;; ++i) { + for (; ; ++i) { if (indexInRemapped[i] == null) { continue; } @@ -298,7 +307,7 @@ public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks } indexInRemapped[i] += offset; } - for (;; ++i) { + for (; ; ++i) { if (indexInRemapped[i] == null) { continue; } @@ -306,7 +315,11 @@ public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks break; } if (resolvedBreaks[i] == Breaks.BREAK) { - throw new IllegalArgumentException("Replacement rule at remapped indices " + matcher.start() + " sqq. spans a break: " + remappedString); + throw new IllegalArgumentException( + "Replacement rule at remapped indices " + + matcher.start() + + " sqq. spans a break: " + + remappedString); } resolvedBreaks[i] = Breaks.NO_BREAK; indexInRemapped[i] = null; @@ -323,23 +336,33 @@ public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks matcher.appendTail(result); if (indexInRemapped[indexInRemapped.length - 1] != result.length()) { StringBuilder meow = new StringBuilder(); - for (var j : indexInRemapped) { + for (var j : indexInRemapped) { meow.append(j == null ? "null" : j.toString()); meow.append(","); } - throw new IllegalArgumentException("Inconsistent indexInRemapped " + meow + " for new remapped string " + result); + throw new IllegalArgumentException( + "Inconsistent indexInRemapped " + + meow + + " for new remapped string " + + result); } remap.accept(result); } private Pattern pattern; private String replacement; + @Override - public Breaks applyAt(int position, CharSequence remappedString, Integer[] indexInRemapped, + public Breaks applyAt( + int position, + CharSequence remappedString, + Integer[] indexInRemapped, Consumer remap) { var resolvedBreaks = new Breaks[indexInRemapped.length]; apply(remappedString, indexInRemapped, resolvedBreaks, remap); - return resolvedBreaks[position] == null ? Breaks.UNKNOWN_BREAK : resolvedBreaks[position]; + return resolvedBreaks[position] == null + ? Breaks.UNKNOWN_BREAK + : resolvedBreaks[position]; } } @@ -384,7 +407,11 @@ public RegexRule(String before, Breaks result, String after, String line) { // COMMENTS allows whitespace } - public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks[] resolvedBreaks, Consumer remap) { + public void apply( + CharSequence remappedString, + Integer[] indexInRemapped, + Breaks[] resolvedBreaks, + Consumer remap) { for (int i = 0; i < indexInRemapped.length; ++i) { if (resolvedBreaks[i] == Breaks.UNKNOWN_BREAK) { resolvedBreaks[i] = applyAt(i, remappedString, indexInRemapped, remap); @@ -392,9 +419,13 @@ public void apply(CharSequence remappedString, Integer[] indexInRemapped, Breaks } } - public Breaks applyAt(int position, CharSequence remappedString, Integer[] indexInRemapped, Consumer remap) { - if (matchAfter(matchSucceeding, remappedString, indexInRemapped[position]) && - matchBefore(matchPrevious, remappedString, indexInRemapped[position])) { + public Breaks applyAt( + int position, + CharSequence remappedString, + Integer[] indexInRemapped, + Consumer remap) { + if (matchAfter(matchSucceeding, remappedString, indexInRemapped[position]) + && matchBefore(matchPrevious, remappedString, indexInRemapped[position])) { return breaks; } return Breaks.UNKNOWN_BREAK; @@ -706,7 +737,6 @@ public static UnicodeMap composeWith( return target; } - Builder addRemapRule(Double order, String before, String after, String line) { line = whiteSpace.reset(line).replaceAll(" "); if (lastComments.size() != 0) { @@ -737,10 +767,7 @@ Builder addRemapRule(Double order, String before, String after, String line) { + "> " + TransliteratorUtilities.toXML.transliterate(line) + "
"); - rules.put( - order, - new Segmenter.RemapRule( - replaceVariables(before), after)); + rules.put(order, new Segmenter.RemapRule(replaceVariables(before), after)); return this; } @@ -754,7 +781,8 @@ Builder addRemapRule(Double order, String before, String after, String line) { * @param line * @return */ - Builder addRegexRule(Double order, String before, Breaks breaks, String after, String line) { + Builder addRegexRule( + Double order, String before, Breaks breaks, String after, String line) { // if (brokenIdentifierMatcher.reset(line).find()) { // int start = brokenIdentifierMatcher.start(); // int end = brokenIdentifierMatcher.end(); From f0442802cf835dc860acdb8c00518f135ed8bf76 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 14 Oct 2024 14:08:44 +0200 Subject: [PATCH 21/27] Update documentation --- unicodetools/data/ucd/dev/auxiliary/GraphemeBreakTest.html | 4 ++-- unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html | 4 ++-- unicodetools/data/ucd/dev/auxiliary/SentenceBreakTest.html | 4 ++-- unicodetools/data/ucd/dev/auxiliary/WordBreakTest.html | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/unicodetools/data/ucd/dev/auxiliary/GraphemeBreakTest.html b/unicodetools/data/ucd/dev/auxiliary/GraphemeBreakTest.html index 405d0078c..5b6026ef5 100644 --- a/unicodetools/data/ucd/dev/auxiliary/GraphemeBreakTest.html +++ b/unicodetools/data/ucd/dev/auxiliary/GraphemeBreakTest.html @@ -7,7 +7,7 @@

Grapheme_Cluster_Break Chart

Unicode Version: 17.0.0

-

Date: 2024-09-12, 14:11:44 GMT

+

Date: 2024-10-14, 12:06:04 GMT

This page illustrates the application of the Grapheme_Cluster_Break specification. The material here is informative, not normative.

The first chart shows where breaks would appear between different sample characters or strings. The sample characters are chosen mechanically to represent the different properties used by the specification.

Each cell shows the break-status for the position between the character(s) in its row header and the character(s) in its column header. The × symbol indicates no break, while the ÷ symbol indicated a break. The cells with × are also shaded to make it easier to scan the table. For example, in the cell at the intersection of the row headed by “CR” and the column headed by “LF”, there is a × symbol, indicating that there is no break between CR and LF.

After the heavy blue line in the table are additional rows, either with different sample characters or for sequences. Some column headers may be composed, reflecting “treat as” or “ignore” rules.

If your browser handles titles (tooltips), then hovering the mouse over the row header will show a sample character of that type. Hovering over a column header will show the sample character, plus its abbreviated general category and script. Hovering over the intersected cells shows the rule number that produces the break-status. For example, hovering over the cell at the intersection of LVT and T shows ×, with the rule 8.0. Checking below the table, rule 8.0 is “( LVT | T) × T”, which is the one that applies to that case. Note that a rule is invoked only when no lower-numbered rules have applied.

@@ -39,7 +39,7 @@

Table

Other÷÷÷÷×÷÷×÷÷÷÷÷×÷÷÷÷××××

Rules

-

This section shows the rules. They are mechanically modified for programmatic generation of the tables and test code, and thus do not match the UAX rules precisely. In particular:

  1. The rules are cast into a form that is more like regular expressions.
  2. The rules “sot ÷”, “÷ eot”, and “÷ Any” are added mechanically, and have artificial numbers.
  3. The rules are given decimal numbers using tenths, and are written without prefix. For example, rule GB9a is given the number 9.1.
  4. Any “treat as” or “ignore” rules are handled as discussed in UAX #29, and thus reflected in a transformation of the rules usually not visible here. In addition, final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.
  5. In some cases, the numbering and form of a rule is changed due to “treat as” rules.

For the original rules, see UAX #29.

+

This section shows the rules. They are mechanically modified for programmatic generation of the tables and test code, and thus do not match the UAX rules precisely. In particular:

  1. The rules are cast into a form that is more like regular expressions.
  2. The rules “sot ÷”, “÷ eot”, and “÷ Any” are added mechanically, and have artificial numbers.
  3. The rules are given decimal numbers using tenths, and are written without prefix. For example, rule GB9a is given the number 9.1.
  4. Final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.

For the original rules, see UAX #29.

diff --git a/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html b/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html index b8170e225..6bb715cdf 100644 --- a/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html +++ b/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html @@ -7,7 +7,7 @@

Line_Break Chart

Unicode Version: 17.0.0

-

Date: 2024-10-11, 19:04:31 GMT

+

Date: 2024-10-14, 12:06:07 GMT

This page illustrates the application of the Line_Break specification. The material here is informative, not normative.

The first chart shows where breaks would appear between different sample characters or strings. The sample characters are chosen mechanically to represent the different properties used by the specification.

Each cell shows the break-status for the position between the character(s) in its row header and the character(s) in its column header. The × symbol indicates no break, while the ÷ symbol indicated a break. The cells with × are also shaded to make it easier to scan the table. For example, in the cell at the intersection of the row headed by “CR” and the column headed by “LF”, there is a × symbol, indicating that there is no break between CR and LF.

Some column headers may be composed, reflecting “treat as” or “ignore” rules.

If your browser handles titles (tooltips), then hovering the mouse over the row header will show a sample character of that type. Hovering over a column header will show the sample character, plus its abbreviated general category and script. Hovering over the intersected cells shows the rule number that produces the break-status. For example, hovering over the cell at the intersection of H3 and JT shows ×, with the rule 26.03. Checking below the table, rule 26.03 is “JT | H3 × JT”, which is the one that applies to that case. Note that a rule is invoked only when no lower-numbered rules have applied.

@@ -79,7 +79,7 @@

Table

0.2sot ÷
0.3÷ eot
CJ_NS÷××××÷÷÷×÷×÷÷÷÷÷××××××÷÷×××÷××××÷×÷÷÷÷÷÷÷÷×÷××÷÷÷÷×××÷×××÷÷÷÷÷××

Rules

-

This section shows the rules. They are mechanically modified for programmatic generation of the tables and test code, and thus do not match the UAX rules precisely. In particular:

  1. The rules are cast into a form that is more like regular expressions.
  2. The rules “sot ×”, “÷ eot”, and “÷ Any” are added mechanically, and have artificial numbers.
  3. The rules are given decimal numbers using tenths, and are written without prefix. For example, rule LB21a is given the number 21.1.
  4. Any “treat as” or “ignore” rules are handled as discussed in UAX #14, and thus reflected in a transformation of the rules usually not visible here. Where it does show up, an extra variable like CM+ may appear, and the rule may be recast. In addition, final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.
  5. Where a rule has multiple parts (lines), each one is numbered using hundredths, such as 21.01) × BA, 21.02) × HY, ... In some cases, the numbering and form of a rule is changed due to “treat as” rules.

For the original rules, see UAX #14.

+

This section shows the rules. They are mechanically modified for programmatic generation of the tables and test code, and thus do not match the UAX rules precisely. In particular:

  1. The rules are cast into a form that is more like regular expressions.
  2. The rules “sot ×”, “÷ eot”, and “÷ Any” are added mechanically, and have artificial numbers.
  3. The rules are given decimal numbers using tenths, and are written without prefix. For example, rule LB21a is given the number 21.1.
  4. Final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.
  5. Where a rule has multiple parts (lines), each one is numbered using hundredths, such as 21.01) × BA, 21.02) × HY, ...

For the original rules, see UAX #14.

diff --git a/unicodetools/data/ucd/dev/auxiliary/SentenceBreakTest.html b/unicodetools/data/ucd/dev/auxiliary/SentenceBreakTest.html index a698e956c..a851a3035 100644 --- a/unicodetools/data/ucd/dev/auxiliary/SentenceBreakTest.html +++ b/unicodetools/data/ucd/dev/auxiliary/SentenceBreakTest.html @@ -7,7 +7,7 @@

Sentence_Break Chart

Unicode Version: 17.0.0

-

Date: 2024-09-12, 14:12:16 GMT

+

Date: 2024-10-14, 12:07:04 GMT

This page illustrates the application of the Sentence_Break specification. The material here is informative, not normative.

The first chart shows where breaks would appear between different sample characters or strings. The sample characters are chosen mechanically to represent the different properties used by the specification.

Each cell shows the break-status for the position between the character(s) in its row header and the character(s) in its column header. The × symbol indicates no break, while the ÷ symbol indicated a break. The cells with × are also shaded to make it easier to scan the table. For example, in the cell at the intersection of the row headed by “CR” and the column headed by “LF”, there is a × symbol, indicating that there is no break between CR and LF.

Some column headers may be composed, reflecting “treat as” or “ignore” rules.

If your browser handles titles (tooltips), then hovering the mouse over the row header will show a sample character of that type. Hovering over a column header will show the sample character, plus its abbreviated general category and script. Hovering over the intersected cells shows the rule number that produces the break-status. For example, hovering over the cell at the intersection of ATerm and Close shows ×, with the rule 9.0. Checking below the table, rule 9.0 is “SATerm Close* × ( Close | Sp | ParaSep )”, which is the one that applies to that case. Note that a rule is invoked only when no lower-numbered rules have applied.

@@ -30,7 +30,7 @@

Table

0.2sot ×
0.3÷ eot
Extend_FE×××××××××××××××

Rules

-

This section shows the rules. They are mechanically modified for programmatic generation of the tables and test code, and thus do not match the UAX rules precisely. In particular:

  1. The rules are cast into a form that is more like regular expressions.
  2. The rules “sot ÷”, “÷ eot”, and “÷ Any” are added mechanically, and have artificial numbers.
  3. The rules are given decimal numbers using tenths, and are written without prefix. For example, rule SB8a is given the number 8.1.
  4. Any “treat as” or “ignore” rules are handled as discussed in UAX #29, and thus reflected in a transformation of the rules usually not visible here. In addition, final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.
  5. In some cases, the numbering and form of a rule is changed due to “treat as” rules.

For the original rules and the macro values they use, see UAX #29.

+

This section shows the rules. They are mechanically modified for programmatic generation of the tables and test code, and thus do not match the UAX rules precisely. In particular:

  1. The rules are cast into a form that is more like regular expressions.
  2. The rules “sot ÷”, “÷ eot”, and “÷ Any” are added mechanically, and have artificial numbers.
  3. The rules are given decimal numbers using tenths, and are written without prefix. For example, rule SB8a is given the number 8.1.
  4. Final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.

For the original rules and the macro values they use, see UAX #29.

diff --git a/unicodetools/data/ucd/dev/auxiliary/WordBreakTest.html b/unicodetools/data/ucd/dev/auxiliary/WordBreakTest.html index 52a647c4a..6c25af5cf 100644 --- a/unicodetools/data/ucd/dev/auxiliary/WordBreakTest.html +++ b/unicodetools/data/ucd/dev/auxiliary/WordBreakTest.html @@ -7,7 +7,7 @@

Word_Break Chart

Unicode Version: 17.0.0

-

Date: 2024-09-12, 14:12:18 GMT

+

Date: 2024-10-14, 12:07:11 GMT

This page illustrates the application of the Word_Break specification. The material here is informative, not normative.

The first chart shows where breaks would appear between different sample characters or strings. The sample characters are chosen mechanically to represent the different properties used by the specification.

Each cell shows the break-status for the position between the character(s) in its row header and the character(s) in its column header. The × symbol indicates no break, while the ÷ symbol indicated a break. The cells with × are also shaded to make it easier to scan the table. For example, in the cell at the intersection of the row headed by “CR” and the column headed by “LF”, there is a × symbol, indicating that there is no break between CR and LF.

After the heavy blue line in the table are additional rows, either with different sample characters or for sequences, such as “ALetter MidLetter”. Some column headers may be composed, reflecting “treat as” or “ignore” rules.

If your browser handles titles (tooltips), then hovering the mouse over the row header will show a sample character of that type. Hovering over a column header will show the sample character, plus its abbreviated general category and script. Hovering over the intersected cells shows the rule number that produces the break-status. For example, hovering over the cell at the intersection of ExtendNumLet and ALetter shows ×, with the rule 13.2. Checking below the table, rule 13.2 is “ExtendNumLet × (AHLetter | Numeric | Katakana)”, which is the one that applies to that case. Note that a rule is invoked only when no lower-numbered rules have applied.

@@ -45,7 +45,7 @@

Table

0.2sot ÷
0.3÷ eot
Numeric MidNumLet Format_FE÷÷÷÷÷÷÷÷÷×÷÷÷÷÷÷÷×××

Rules

-

This section shows the rules. They are mechanically modified for programmatic generation of the tables and test code, and thus do not match the UAX rules precisely. In particular:

  1. The rules are cast into a form that is more like regular expressions.
  2. The rules “sot ÷”, “÷ eot”, and “÷ Any” are added mechanically, and have artificial numbers.
  3. The rules are given decimal numbers using tenths, and are written without prefix. For example, rule WB13a is given the number 13.1.
  4. Any “treat as” or “ignore” rules are handled as discussed in UAX #29, and thus reflected in a transformation of the rules usually not visible here. In addition, final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.
  5. In some cases, the numbering and form of a rule is changed due to “treat as” rules.

For the original rules and the macro values they use, see UAX #29.

+

This section shows the rules. They are mechanically modified for programmatic generation of the tables and test code, and thus do not match the UAX rules precisely. In particular:

  1. The rules are cast into a form that is more like regular expressions.
  2. The rules “sot ÷”, “÷ eot”, and “÷ Any” are added mechanically, and have artificial numbers.
  3. The rules are given decimal numbers using tenths, and are written without prefix. For example, rule WB13a is given the number 13.1.
  4. Final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.

For the original rules and the macro values they use, see UAX #29.

From 8318bcb214cb389536bfe6689a3bb59cc5c3aec8 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 14 Oct 2024 14:08:57 +0200 Subject: [PATCH 22/27] also the code that generates it --- .../org/unicode/text/UCD/GenerateBreakTest.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java index 261dc243f..2340d71f8 100644 --- a/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java +++ b/unicodetools/src/main/java/org/unicode/text/UCD/GenerateBreakTest.java @@ -855,23 +855,14 @@ public void generateTable(PrintWriter out) { } out.print( "." - + "
  • Any “treat as” or “ignore” rules are handled as discussed in UAX #" - + (fileName.equals("Line") ? "14" : "29") - + ", and thus reflected in a transformation of the rules usually not visible here. "); - if (fileName.equals("Line")) { - out.print( - "Where it does show up, an extra variable like CM+ may appear, and the rule may be recast. "); - } - out.print( - "In addition, final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.
  • "); + + "
  • Final rules like “Any ÷ Any” may be recast as the equivalent expression “÷ Any”.
  • "); if (fileName.equals("Line")) { out.print( "Where a rule has multiple parts (lines), each one is numbered using hundredths, " + "such as 21.01) × BA, 21.02) × HY, ... "); } out.println( - "In some cases, the numbering and form of a rule is changed due to “treat as” rules.
  • " - + "" + "" + "

    For the original rules" + (fileName.equals("Word") || fileName.equals("Sentence") ? " and the macro values they use" From 899beec8c0d11254d145e94de908541c3aced11b Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 14 Oct 2024 14:29:02 +0200 Subject: [PATCH 23/27] X --- unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html | 6 +++--- .../resources/org/unicode/tools/SegmenterDefault.txt | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html b/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html index 6bb715cdf..3b2899e64 100644 --- a/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html +++ b/unicodetools/data/ucd/dev/auxiliary/LineBreakTest.html @@ -7,7 +7,7 @@

    Line_Break Chart

    Unicode Version: 17.0.0

    -

    Date: 2024-10-14, 12:06:07 GMT

    +

    Date: 2024-10-14, 12:25:22 GMT

    This page illustrates the application of the Line_Break specification. The material here is informative, not normative.

    The first chart shows where breaks would appear between different sample characters or strings. The sample characters are chosen mechanically to represent the different properties used by the specification.

    Each cell shows the break-status for the position between the character(s) in its row header and the character(s) in its column header. The × symbol indicates no break, while the ÷ symbol indicated a break. The cells with × are also shaded to make it easier to scan the table. For example, in the cell at the intersection of the row headed by “CR” and the column headed by “LF”, there is a × symbol, indicating that there is no break between CR and LF.

    Some column headers may be composed, reflecting “treat as” or “ignore” rules.

    If your browser handles titles (tooltips), then hovering the mouse over the row header will show a sample character of that type. Hovering over a column header will show the sample character, plus its abbreviated general category and script. Hovering over the intersected cells shows the rule number that produces the break-status. For example, hovering over the cell at the intersection of H3 and JT shows ×, with the rule 26.03. Checking below the table, rule 26.03 is “JT | H3 × JT”, which is the one that applies to that case. Note that a rule is invoked only when no lower-numbered rules have applied.

    @@ -93,8 +93,8 @@

    Rules

    - - + + diff --git a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt index d494d3107..eb9b2b132 100644 --- a/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt +++ b/unicodetools/src/main/resources/org/unicode/tools/SegmenterDefault.txt @@ -165,10 +165,11 @@ $Spec3a_=[^ $SP $BA $HY] 8) $ZW $SP* ÷ # LB 8a Don't break between ZWJ and IDs (for use in Emoji ZWJ sequences) 8.1) $ZWJ_O × -# LB 9 Do not break a combining character sequence; treat it as if it has the LB class of the base character -# in all of the following rules. (Where X is any line break class except SP, BK, CR, LF, NL or ZW.) -9) ([^$SP $BK $CR $LF $NL $ZW]) [$CM $ZWJ]* → $1 -10) [$CM $ZWJ] → A +# LB 9 Do not break a combining character sequence; treat it as if it has the line breaking class +# of the base character in all of the following rules. Treat ZWJ as if it were CM. +9) (?[^$BK $CR $LF $NL $SP $ZW]) ( $CM | $ZWJ )* → ${X} +# LB10 Treat any remaining combining mark or ZWJ as AL. +10) ( $CM | $ZWJ ) → A ## LB 11 Do not break before or after WORD JOINER and related characters. 11.01) × $WJ 11.02) $WJ × From c90b12eac448e290cb448477ee430ada4ec60aaa Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 14 Oct 2024 14:33:30 +0200 Subject: [PATCH 24/27] meow --- .../src/main/java/org/unicode/tools/Segmenter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index d2dfe20f0..5c22b819c 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -335,14 +335,14 @@ public void apply( } matcher.appendTail(result); if (indexInRemapped[indexInRemapped.length - 1] != result.length()) { - StringBuilder meow = new StringBuilder(); + StringBuilder indices = new StringBuilder(); for (var j : indexInRemapped) { - meow.append(j == null ? "null" : j.toString()); - meow.append(","); + indices.append(j == null ? "null" : j.toString()); + indices.append(","); } throw new IllegalArgumentException( "Inconsistent indexInRemapped " - + meow + + indices + " for new remapped string " + result); } From 0704fa111adb91dd9f73c5cd6bcf365e6b5cf140 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 14 Oct 2024 14:55:54 +0200 Subject: [PATCH 25/27] loose ends --- .../java/org/unicode/tools/Segmenter.java | 28 +++++++++++++------ .../java/org/unicode/test/TestSegment.java | 6 ++-- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 5c22b819c..5f9c841c7 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -237,7 +237,7 @@ public String toString(boolean showResolved) { String result = ""; for (int i = 0; i < rules.size(); ++i) { if (i != 0) result += Utility.LINE_SEPARATOR; - result += orders.get(i) + ")\tTODO"; // + rules.get(i).toString(showResolved); + result += orders.get(i) + ")\t"+ rules.get(i).toString(showResolved); } return result; } @@ -272,22 +272,30 @@ public abstract void apply( Breaks[] resolvedBreaks, Consumer remap); + protected abstract String toString(boolean showResolved); + /** Same as above, but only returns the resolution at the current position. */ public abstract Breaks applyAt( int position, CharSequence remappedString, Integer[] indexInRemapped, Consumer remap); + + public String toString() { + return toString(false); + } } /** A « treat as » rule. */ public static class RemapRule extends SegmentationRule { - public RemapRule(String leftHandSide, String replacement) { + public RemapRule(String leftHandSide, String replacement, String line) { pattern = Pattern.compile(leftHandSide, REGEX_FLAGS); this.replacement = replacement; + name = line; } + @Override public void apply( CharSequence remappedString, Integer[] indexInRemapped, @@ -351,6 +359,7 @@ public void apply( private Pattern pattern; private String replacement; + private String name; @Override public Breaks applyAt( @@ -364,6 +373,11 @@ public Breaks applyAt( ? Breaks.UNKNOWN_BREAK : resolvedBreaks[position]; } + + @Override + protected String toString(boolean showResolved) { + return name; + } } /** A rule that determines the status of an offset. */ @@ -407,6 +421,7 @@ public RegexRule(String before, Breaks result, String after, String line) { // COMMENTS allows whitespace } + @Override public void apply( CharSequence remappedString, Integer[] indexInRemapped, @@ -419,6 +434,7 @@ public void apply( } } + @Override public Breaks applyAt( int position, CharSequence remappedString, @@ -431,11 +447,7 @@ && matchBefore(matchPrevious, remappedString, indexInRemapped[position])) { return Breaks.UNKNOWN_BREAK; } - /** Debugging aid */ - public String toString() { - return toString(false); - } - + @Override public String toString(boolean showResolved) { String result = name; if (showResolved) result += ": " + resolved; @@ -767,7 +779,7 @@ Builder addRemapRule(Double order, String before, String after, String line) { + "> " + TransliteratorUtilities.toXML.transliterate(line) + " "); - rules.put(order, new Segmenter.RemapRule(replaceVariables(before), after)); + rules.put(order, new Segmenter.RemapRule(replaceVariables(before), after, line)); return this; } diff --git a/unicodetools/src/test/java/org/unicode/test/TestSegment.java b/unicodetools/src/test/java/org/unicode/test/TestSegment.java index 2cfae0478..719f3cf14 100644 --- a/unicodetools/src/test/java/org/unicode/test/TestSegment.java +++ b/unicodetools/src/test/java/org/unicode/test/TestSegment.java @@ -31,7 +31,7 @@ import org.unicode.text.utility.Utility; import org.unicode.tools.Segmenter; import org.unicode.tools.Segmenter.Builder; -import org.unicode.tools.Segmenter.RegexRule; +import org.unicode.tools.Segmenter.SegmentationRule; public class TestSegment { @@ -398,8 +398,8 @@ private static void checkExemplars() { } private static void getExemplarStrings(UnicodeMap exemplars, Builder segmenter) { - Map srules = segmenter.getProcessedRules(); - for (Entry entry : srules.entrySet()) { + Map srules = segmenter.getProcessedRules(); + for (Entry entry : srules.entrySet()) { System.out.println(entry.getKey() + "\t\t" + entry.getValue()); } } From 2e716a83a3d7910eea4d09b0776dbcb915b4d393 Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 14 Oct 2024 15:03:04 +0200 Subject: [PATCH 26/27] spotless --- unicodetools/src/main/java/org/unicode/tools/Segmenter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 5f9c841c7..80873d43c 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -237,7 +237,7 @@ public String toString(boolean showResolved) { String result = ""; for (int i = 0; i < rules.size(); ++i) { if (i != 0) result += Utility.LINE_SEPARATOR; - result += orders.get(i) + ")\t"+ rules.get(i).toString(showResolved); + result += orders.get(i) + ")\t" + rules.get(i).toString(showResolved); } return result; } From 966fb32a85557d6cb05eac9b8787e7c42c15b0bd Mon Sep 17 00:00:00 2001 From: Robin Leroy Date: Mon, 14 Oct 2024 17:00:26 +0200 Subject: [PATCH 27/27] Welcome to the year 2004 --- .../java/org/unicode/tools/Segmenter.java | 33 +++++++------------ 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java index 80873d43c..994a79e7d 100644 --- a/unicodetools/src/main/java/org/unicode/tools/Segmenter.java +++ b/unicodetools/src/main/java/org/unicode/tools/Segmenter.java @@ -393,8 +393,8 @@ public RegexRule(String before, Breaks result, String after, String line) { before = ".*(" + before + ")"; String parsing = null; try { - matchPrevious = Pattern.compile(parsing = before, REGEX_FLAGS).matcher(""); - matchSucceeding = Pattern.compile(parsing = after, REGEX_FLAGS).matcher(""); + this.before = Pattern.compile(parsing = before, REGEX_FLAGS); + this.after = Pattern.compile(parsing = after, REGEX_FLAGS); } catch (PatternSyntaxException e) { // Format: Unclosed character class near index 927 int index = e.getIndex(); @@ -440,8 +440,12 @@ public Breaks applyAt( CharSequence remappedString, Integer[] indexInRemapped, Consumer remap) { - if (matchAfter(matchSucceeding, remappedString, indexInRemapped[position]) - && matchBefore(matchPrevious, remappedString, indexInRemapped[position])) { + if (after.matcher(remappedString) + .region(indexInRemapped[position], remappedString.length()) + .lookingAt() + && before.matcher(remappedString) + .region(0, indexInRemapped[position]) + .matches()) { return breaks; } return Breaks.UNKNOWN_BREAK; @@ -455,29 +459,16 @@ public String toString(boolean showResolved) { } // ============== Internals ================ - // in Java 5, this can be more efficient, and use a single regex - // of the form "(?<= before) after". MUST then have transparent bounds - private Matcher matchPrevious; - private Matcher matchSucceeding; + // We cannot use a single regex of the form "(?<= before) after" because + // (RI RI)* RI × RI would require unbounded lookbehind. + private Pattern before; + private Pattern after; private String name; private String resolved; private Breaks breaks; } - /** utility, since we are using Java 1.4 */ - static boolean matchAfter(Matcher matcher, CharSequence text, int position) { - return matcher.reset(text.subSequence(position, text.length())).lookingAt(); - } - - /** - * utility, since we are using Java 1.4 depends on the pattern having been built with .* not - * very efficient, works for testing and the best we can do. - */ - static boolean matchBefore(Matcher matcher, CharSequence text, int position) { - return matcher.reset(text.subSequence(0, position)).matches(); - } - /** Separate the builder for clarity */ /** Sort the longest strings first. Used for variable lists. */
    0.2sot ÷
    0.3÷ eot
    7.02× ZW
    8.0ZW SP* ÷
    8.1ZWJ_O ×
    9.0([^SP BK CR LF NL ZW]) [CM ZWJ]* 1
    10.0[CM ZWJ] A
    9.0(?<X>[^SP BK CR LF NL ZW]) ( CM | ZWJ )* {X}
    10.0( CM | ZWJ ) A
    11.01× WJ
    11.02WJ ×
    12.0GL ×