commit d5059639cb934c965cb752bfe46fb845c5adbce8
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Sun Apr 6 17:45:03 2025 +0200

    Revert "Process base symbols after other dictionaries"
    
    This reverts commit f9622994cbd43ce67f992f87337fbb0174792a21.
    
    This was dropping the properties of the common NVDA symbols, such as
    
    ? sentence ending       question        all     always
    
    which are not specified in all translated files, they assume that the
    base file always provide them.
    
    (cherry picked from commit feff809182f2bade36da1e610fc6bc02c167988e)

commit 8a1eb8a334ef378be50cbc581a6dd393ec3dfd01
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Sun Apr 6 17:53:20 2025 +0200

    Do not add symbols from base/symbols.dic when they are not in <locale>/symbols.dic
    
    E.g. ⇄ is in base/symbols.dic, but not in fr/symbols.dic, so we do not
    want to take the definition from base/symbols.dic, and let emojis.dic
    provide a definition.
    
    This is the same goal as f9622994cbd43ce67f992f87337fbb0174792a21, but
    without losing base/symbols.dic providing symbol default properties.
    
    (cherry picked from commit 7cd788acede8604d77f433c393510175ddf8eb43)

---
 config/speechd.conf              |    1 
 locale/Makefile.am               |    2 
 locale/base/symbols-fallback.dic |  626 ---------------------------------------
 locale/base/symbols.dic          |  626 +++++++++++++++++++++++++++++++++++++++
 src/server/symbols.c             |   22 -
 5 files changed, 639 insertions(+), 638 deletions(-)

--- a/config/speechd.conf
+++ b/config/speechd.conf
@@ -174,7 +174,6 @@ SymbolsPreprocFile "symbols.dic"
 SymbolsPreprocFile "emojis.dic"
 SymbolsPreprocFile "orca.dic"
 SymbolsPreprocFile "orca-chars.dic"
-SymbolsPreprocFile "symbols-fallback.dic"
 
 # The DefaultCapLetRecognition: if set to "spell", capital letters
 # should be spelled (e.g. "capital b"), if set to "icon",
--- a/locale/Makefile.am
+++ b/locale/Makefile.am
@@ -19,7 +19,7 @@
 
 nobase_localedata_DATA = \
 	base/font-variants.dic \
-	base/symbols-fallback.dic \
+	base/symbols.dic \
 	\
 	af/emojis.dic \
 	am/emojis.dic \
--- a/src/server/symbols.c
+++ b/src/server/symbols.c
@@ -855,7 +855,7 @@ static SpeechSymbolProcessor *speech_sym
 			SpeechSymbol *sym;
 
 			sym = g_hash_table_lookup(ssp->symbols, key);
-			if (!sym) {
+			if (!sym && syms != ssbase) {
 				/* This is a new simple symbol.
 				 * (All complex symbols have already been added.) */
 				sym = speech_symbol_new();
@@ -879,15 +879,17 @@ static SpeechSymbolProcessor *speech_sym
 					multi_chars_list = g_slist_prepend(multi_chars_list, sym->identifier);
 				}
 			}
-			/* If fields weren't explicitly specified, inherit the value from later sources. */
-			if (sym->replacement == NULL)
-				sym->replacement = g_strdup(source_sym->replacement);
-			if (sym->level == SYMLVL_INVALID)
-				sym->level = source_sym->level;
-			if (sym->preserve == SYMPRES_INVALID)
-				sym->preserve = source_sym->preserve;
-			if (sym->display_name == NULL)
-				sym->display_name = g_strdup(source_sym->display_name);
+			if (sym) {
+				/* If fields weren't explicitly specified, inherit the value from later sources. */
+				if (sym->replacement == NULL)
+					sym->replacement = g_strdup(source_sym->replacement);
+				if (sym->level == SYMLVL_INVALID)
+					sym->level = source_sym->level;
+				if (sym->preserve == SYMPRES_INVALID)
+					sym->preserve = source_sym->preserve;
+				if (sym->display_name == NULL)
+					sym->display_name = g_strdup(source_sym->display_name);
+			}
 		}
 	}
 
--- a/locale/base/symbols-fallback.dic
+++ /dev/null
@@ -1,626 +0,0 @@
-﻿# This file was automatically generated by make import-symbols
-# DO NOT MODIFY IT!
-# See locale/README.md to know how to import dictionaries
-
-# A part of NonVisual Desktop Access (NVDA)
-# Copyright (c) 2011-2023 NVDA Contributors
-# This file is covered by the GNU General Public License.
-
-complexSymbols:
-# identifier	regexp
-# Sentence endings.
-. sentence ending	(?<=[^\s.])\.(?=[\"'”’)\s]|$)
-! sentence ending	(?<=[^\s!])\!(?=[\"'”’)\s]|$)
-? sentence ending	(?<=[^\s?])\?(?=[\"'”’)\s]|$)
-# Phrase endings.
-; phrase ending	(?<=[^\s;]);(?=\s|$)
-: phrase ending	(?<=[^\s:]):(?=\s|$)
-# Others
-decimal point	(?<![^\d -])\.(?=\d)
-in-word '	(?<=[^\W_])['’]
-negative number	(?<!\w)[-−]{1}(?=[$£€¥.]?\d)
-
-symbols:
-# identifier	replacement[[	level][	preserve]][	# display name]
-
-# Complex symbols
-. sentence ending	dot	all	always
-! sentence ending	bang	all	always
-? sentence ending	question	all	always
-; phrase ending	semi	most	always
-: phrase ending	colon	most	always
-decimal point		none	always
-in-word '	tick	all	norep
-negative number	minus	none	norep
-
-# Whitespace
-\0	blank	char	# null
-\t	tab
-\n	line feed	char
-\f	page break	none
-\r	carriage return	char
- 	space	char
- 	space	char	# no-break space
-
-# Standard punctuation/symbols
-!	bang	all
-"	quote	most
-\#	number	some
-$	dollar	all	norep
-£	pound	all	norep
-€	euro	all	norep
-¢	cents	all	norep
-¥	yen	all	norep
-₹	rupee	some	norep
-ƒ	florin	all	norep
-¤	currency sign	all	norep
-%	percent	some
-‰	per mille	some
-&	and	some
-'	tick	all
-(	left paren	most	always
-)	right paren	most	always
-*	star	some
-,	comma	all	always
-、	ideographic comma	all	always
-،	arabic comma	all	always
--	dash	most	always
-.	dot	some
-/	slash	some
-:	colon	most	norep
-;	semi	most
-؛	arabic semicolon	most
-?	question	all
-؟	arabic question mark	all
-@	at	some
-[	left bracket	most
-]	right bracket	most
-\\	backslash	most
-^	caret	most
-_	line	most
-`	graav	most
-{	left brace	most
-}	right brace	most
-|	bar	most
-¦	broken bar	most
-~	tilda	most
-¡	inverted exclamation point	some
-¿	inverted question mark	some
-·	middle dot	most
-‚	single low quote	most
-„	double low quote	most
-′	prime	some
-″	double prime	some
-‴	triple prime	some
-
-# Other characters
-•	bullet	some
-…	dot dot dot	all	always
-...	dot dot dot	all	always
-“	left quote	most
-”	right quote	most
-‘	left tick	most
-’	right tick	most
-–	en dash	most	always
-—	em dash	most	always
-­	soft hyphen	most
-⁃	hyphen bullet	none
-●	circle	most
-○	white circle	most
-¨	diaeresis	most
-¯	macron	most
-´	acute	most
-¸	cedilla	most
-‎	left to right mark	char
-‏	right to left mark	char
-¶	paragraph marker	most
-■	black square	some
-▪	black square	some
-◾	black square	some
-□	white square	some
-◦	white bullet	some
-⇨	right white arrow	some
-➔	right-pointing arrow	some
-➢	right arrowhead	some
-❖	black diamond minus white X	some
-♣	black club	some
-♦	black diamond	some
-◆	black diamond	some
-§	section	all
-°	degrees	some
-«	double left pointing angle bracket	most	always
-»	double right pointing angle bracket	most	always
-µ	micro	some
-⁰	superscript 0	some
-¹	superscript 1	some
-²	superscript 2	some
-³	superscript 3	some
-⁴	superscript 4	some
-⁵	superscript 5	some
-⁶	superscript 6	some
-⁷	superscript 7	some
-⁸	superscript 8	some
-⁹	superscript 9	some
-⁺	superscript plus	some
-⁼	superscript equals	some
-⁽	superscript left paren	some
-⁾	superscript right paren	some
-ⁿ	superscript n	some
-₀	subscript 0	some
-₁	subscript 1	some
-₂	subscript 2	some
-₃	subscript 3	some
-₄	subscript 4	some
-₅	subscript 5	some
-₆	subscript 6	some
-₇	subscript 7	some
-₈	subscript 8	some
-₉	subscript 9	some
-₊	subscript plus	some
-₋	subscript minus	some
-₌	subscript equals	some
-₍	subscript left paren	some
-₎	subscript right paren	some
-®	registered	some
-™	trademark	some
-©	copyright	some
-℠	ServiceMark	some
-←	left arrow	some
-↑	up arrow	some
-→	right arrow	some
-↓	down arrow	some
-✓	check	some
-✔	check	some
-🡺	right arrow	some
-†	dagger	some
-‡	double dagger	some
-‣	triangular bullet	none
-✗	x-shaped bullet	none
-⊕	circled plus	none
-⊖	circled minus	none
-⇄	right arrow over left arrow	none
-⇒	double right arrow	none
-
-#Arithmetic operators
-+	plus	some
-−	minus	some
-×	times	some
-⋅	times	some
-⨯	times	none
-∕	divided by	some
-⁄	divided by	some
-÷	divide by	some
-∓	minus or plus	some
-±	plus or Minus	some
-
-#Set operations
-∖	set minus	none
-⊍	set union	none
-𝒫	power set of the set	none
-𝔓	power set of the set	none
-℘	power set of the set	none
-∁	complement of the set	none
-
-#Set relations and set constructions
-∅	empty set	none
-⊂	subset of	none
-⊄	not a subset of	none
-⊃	superset of	none
-⊅	not a superset of	none
-⊆	subset of or equal to	none
-⊈	neither a subset of nor equal to	none
-⊇	superset of or equal to	none
-⊉	neither a superset of nor equal to	none
-⊌	multiset	none
-
-#Equality signs
-=	equals	some
-≃	asymptotically equal to	none
-≄	not asymptotically equal to	none
-≅	approximately equal to	none
-≆	approximately but not actually equal to	none
-≈	almost Equal to	none
-≌	all equal to	none
-≍	equivalent to	none
-≭	not equivalent to	none
-≎	geometrically equivalent to	none
-≑	geometrically equal to	none
-≚	equiangular to	none
-≬	between	none
-≠	not equal to	none
-≡	identical to	none
-≣	strictly identical to	none
-≢	not identical to	none
-∼	similar to	none
-≙	estimates	none
-≟	questioned equal to	none
-
-#comparison signs
-<	less	some
->	greater	some
-≤	less- than or equal to	none
-≦	less- than or equal to	none
-≪	much smaller than	none
-≥	greater-than or equal to	none
-≧	greater-than or equal to	none
-≫	much bigger than	none
-≶	less than or greater than	none
-≷	greater than or less than	none
-≮	not less than	none
-≯	not greater than	none
-
-#Functions
-⁻	inverse	some
-∘	ring Operator	none
-∂	partial derivative	none
-∇	gradient of	none
-
-#Geometry and linear Algebra
-⃗	vector between	none
-△	triangle	none
-▭	rectangle	none
-∟	right angle	none
-∠	angle	none
-∥	parallel to	none
-∦	not parallel to	none
-⊥	perpendicular to	none
-⟂	ortogonal to	none
-‖	norm of vector	none
-̂	normalizes	none
-∿	sine wave	none
-∡	measured Angle	none
-∢	spherical Angle	none
-
-#Logical operators
-∀	for all	none
-∃	there exists	none
-∄	there does not exist	none
-⇏	does not imply	none
-⇐	is implied by	none
-
-#Other mathematical Operators
-∈	element of	none
-∉	not an element of	none
-∊	small element of	none
-∋	contains as member	none
-∌	does not contain as member	none
-∍	small contains as member	none
-∎	end of proof	none
-∏	n-ary product	none
-∐	n-ary coproduct	none
-∑	n-ary summation	none
-√	square root	none
-∛	cube root	none
-∜	fourth root	none
-∝	proportional to	none
-∞	infinity	none
-∧	and	none
-∨	or	none
-¬	not	none
-∩	intersection	none
-∪	union	none
-∫	integral	none
-∬	double Integral	none
-∭	triple Integral	none
-∮	contour Integral	none
-∯	surface Integral	none
-∰	volume Integral	none
-∱	clockwise Integral	none
-∲	clockwise contour Integral	none
-∳	anticlockwise Contour Integral	none
-∴	therefore	none
-∵	because	none
-∶	ratio	none
-∷	proportion	none
-∹	excess	none
-∺	geometric proportion	none
-≀	wreath product	none
-≏	difference between	none
-≐	approaches the limit	none
-∙	bullet Operator	none
-∣	divides	none
-∤	does not divide	none
-≔	colon equals	none
-≕	equals colon	none
-≺	precedes	none
-≻	succeeds	none
-⊀	does not precede	none
-⊁	does not succeed	none
-
-# Vulgar Fractions U+2150 to U+215E
-¼	one quarter	none
-½	one half	none
-¾	three quarters	none
-⅐	one seventh	none
-⅑	one ninth	none
-⅒	one tenth	none
-⅓	one third	none
-⅔	two thirds	none
-⅕	one fifth	none
-⅖	two fifths	none
-⅗	three fifths	none
-⅘	four fifths	none
-⅙	one sixth	none
-⅚	five sixths	none
-⅛	one eighth	none
-⅜	three eights	none
-⅝	five eighths	none
-⅞	seven eighths	none
-
-#Number sets
-𝔸	algebraic numbers	none
-ℂ	complex numbers	none
-ℑ	imaginary part of complex number	none
-ℍ	quaternions	none
-ℕ	natural numbers	none
-𝕁	nonnegative (whole) numbers	none
-ℚ	rational numbers	none
-ℝ	real numbers	none
-ℜ	real part of complex number	none
-ℤ	integers	none
-ℵ	aleph number	none
-ℶ	beth number	none
-
-# Miscellaneous Technical
-⌘	mac Command key	none
-⌥	mac Option key	none
-
-## 6-dot cell
-### note: the character on the next line is U+2800 (braille space), not U+0020 (ASCII space)
-⠀	space
-⠁	braille 1
-⠂	braille 2
-⠃	braille 1 2
-⠄	braille 3
-⠅	braille 1 3
-⠆	braille 2 3
-⠇	braille 1 2 3
-⠈	braille 4
-⠉	braille 1 4
-⠊	braille 2 4
-⠋	braille 1 2 4
-⠌	braille 3 4
-⠍	braille 1 3 4
-⠎	braille 2 3 4
-⠏	braille 1 2 3 4
-⠐	braille 5
-⠑	braille 1 5
-⠒	braille 2 5
-⠓	braille 1 2 5
-⠔	braille 3 5
-⠕	braille 1 3 5
-⠖	braille 2 3 5
-⠗	braille 1 2 3 5
-⠘	braille 4 5
-⠙	braille 1 4 5
-⠚	braille 2 4 5
-⠛	braille 1 2 4 5
-⠜	braille 3 4 5
-⠝	braille 1 3 4 5
-⠞	braille 2 3 4 5
-⠟	braille 1 2 3 4 5
-⠠	braille 6
-⠡	braille 1 6
-⠢	braille 2 6
-⠣	braille 1 2 6
-⠤	braille 3 6
-⠥	braille 1 3 6
-⠦	braille 2 3 6
-⠧	braille 1 2 3 6
-⠨	braille 4 6
-⠩	braille 1 4 6
-⠪	braille 2 4 6
-⠫	braille 1 2 4 6
-⠬	braille 3 4 6
-⠭	braille 1 3 4 6
-⠮	braille 2 3 4 6
-⠯	braille 1 2 3 4 6
-⠰	braille 5 6
-⠱	braille 1 5 6
-⠲	braille 2 5 6
-⠳	braille 1 2 5 6
-⠴	braille 3 5 6
-⠵	braille 1 3 5 6
-⠶	braille 2 3 5 6
-⠷	braille 1 2 3 5 6
-⠸	braille 4 5 6
-⠹	braille 1 4 5 6
-⠺	braille 2 4 5 6
-⠻	braille 1 2 4 5 6
-⠼	braille 3 4 5 6
-⠽	braille 1 3 4 5 6
-⠾	braille 2 3 4 5 6
-⠿	braille 1 2 3 4 5 6
-## 8-braille cell
-⡀	braille 7
-⡁	braille 1 7
-⡂	braille 2 7
-⡃	braille 1 2 7
-⡄	braille 3 7
-⡅	braille 1 3 7
-⡆	braille 2 3 7
-⡇	braille 1 2 3 7
-⡈	braille 4 7
-⡉	braille 1 4 7
-⡊	braille 2 4 7
-⡋	braille 1 2 4 7
-⡌	braille 3 4 7
-⡍	braille 1 3 4 7
-⡎	braille 2 3 4 7
-⡏	braille 1 2 3 4 7
-⡐	braille 5 7
-⡑	braille 1 5 7
-⡒	braille 2 5 7
-⡓	braille 1 2 5 7
-⡔	braille 3 5 7
-⡕	braille 1 3 5 7
-⡖	braille 2 3 5 7
-⡗	braille 1 2 3 5 7
-⡘	braille 4 5 7
-⡙	braille 1 4 5 7
-⡚	braille 2 4 5 7
-⡛	braille 1 2 4 5 7
-⡜	braille 3 4 5 7
-⡝	braille 1 3 4 5 7
-⡞	braille 2 3 4 5 7
-⡟	braille 1 2 3 4 5 7
-⡠	braille 6 7
-⡡	braille 1 6 7
-⡢	braille 2 6 7
-⡣	braille 1 2 6 7
-⡤	braille 3 6 7
-⡥	braille 1 3 6 7
-⡦	braille 2 3 6 7
-⡧	braille 1 2 3 6 7
-⡨	braille 4 6 7
-⡩	braille 1 4 6 7
-⡪	braille 2 4 6 7
-⡫	braille 1 2 4 6 7
-⡬	braille 3 4 6 7
-⡭	braille 1 3 4 6 7
-⡮	braille 2 3 4 6 7
-⡯	braille 1 2 3 4 6 7
-⡰	braille 5 6 7
-⡱	braille 1 5 6 7
-⡲	braille 2 5 6 7
-⡳	braille 1 2 5 6 7
-⡴	braille 3 5 6 7
-⡵	braille 1 3 5 6 7
-⡶	braille 2 3 5 6 7
-⡷	braille 1 2 3 5 6 7
-⡸	braille 1 2 3 7
-⡹	braille 1 4 5 6 7
-⡺	braille 2 4 5 6 7
-⡻	braille 1 2 4 5 6 7
-⡼	braille 3 4 5 6 7
-⡽	braille 1 3 4 5 6 7
-⡾	braille 2 3 4 5 6 7
-⡿	braille 1 2 3 4 5 6 7
-⢀	braille 8
-⢁	braille 1 8
-⢂	braille 2 8
-⢃	braille 1 2 8
-⢄	braille 3 8
-⢅	braille 1 3 8
-⢆	braille 2 3 8
-⢇	braille 1 2 3 8
-⢈	braille 4 8
-⢉	braille 1 4 8
-⢊	braille 2 4 8
-⢋	braille 1 2 4 8
-⢌	braille 3 4 8
-⢍	braille 1 3 4 8
-⢎	braille 2 3 4 8
-⢏	braille 1 2 3 4 8
-⢐	braille 5 8
-⢑	braille 1 5 8
-⢒	braille 2 5 8
-⢓	braille 1 2 5 8
-⢔	braille 3 5 8
-⢕	braille 1 3 5 8
-⢖	braille 2 3 5 8
-⢗	braille 1 2 3 5 8
-⢘	braille 4 5 8
-⢙	braille 1 4 5 8
-⢚	braille 2 4 5 8
-⢛	braille 1 2 4 5 8
-⢜	braille 3 4 5 8
-⢝	braille 1 3 4 5 8
-⢞	braille 2 3 4 5 8
-⢟	braille 1 2 3 4 5 8
-⢠	braille 6 8
-⢡	braille 1 6 8
-⢢	braille 2 6 8
-⢣	braille 1 2 6 8
-⢤	braille 3 6 8
-⢥	braille 1 3 6 8
-⢦	braille 2 3 6 8
-⢧	braille 1 2 3 6 8
-⢨	braille 4 6 8
-⢩	braille 1 4 6 8
-⢪	braille 2 4 6 8
-⢫	braille 1 2 4 6 8
-⢬	braille 3 4 6 8
-⢭	braille 1 3 4 6 8
-⢮	braille 2 3 4 6 8
-⢯	braille 1 2 3 4 6 8
-⢰	braille 5 6 8
-⢱	braille 1 5 6 8
-⢲	braille 2 5 6 8
-⢳	braille 1 2 5 6 8
-⢴	braille 3 5 6 8
-⢵	braille 1 3 5 6 8
-⢶	braille 2 3 5 6 8
-⢷	braille 1 2 3 5 6 8
-⢸	braille 1 2 3 8
-⢹	braille 1 4 5 6 8
-⢺	braille 2 4 5 6 8
-⢻	braille 1 2 4 5 6 8
-⢼	braille 3 4 5 6 8
-⢽	braille 1 3 4 5 6 8
-⢾	braille 2 3 4 5 6 8
-⢿	braille 1 2 3 4 5 6 8
-⣀	braille 7 8
-⣁	braille 1 7 8
-⣂	braille 2 7 8
-⣃	braille 1 2 7 8
-⣄	braille 3 7 8
-⣅	braille 1 3 7 8
-⣆	braille 2 3 7 8
-⣇	braille 1 2 3 7 8
-⣈	braille 4 7 8
-⣉	braille 1 4 7 8
-⣊	braille 2 4 7 8
-⣋	braille 1 2 4 7 8
-⣌	braille 3 4 7 8
-⣍	braille 1 3 4 7 8
-⣎	braille 2 3 4 7 8
-⣏	braille 1 2 3 4 7 8
-⣐	braille 5 7 8
-⣑	braille 1 5 7 8
-⣒	braille 2 5 7 8
-⣓	braille 1 2 5 7 8
-⣔	braille 3 5 7 8
-⣕	braille 1 3 5 7 8
-⣖	braille 2 3 5 7 8
-⣗	braille 1 2 3 5 7 8
-⣘	braille 4 5 7 8
-⣙	braille 1 4 5 7 8
-⣚	braille 2 4 5 7 8
-⣛	braille 1 2 4 5 7 8
-⣜	braille 3 4 5 7 8
-⣝	braille 1 3 4 5 7 8
-⣞	braille 2 3 4 5 7 8
-⣟	braille 1 2 3 4 5 7 8
-⣠	braille 6 7 8
-⣡	braille 1 6 7 8
-⣢	braille 2 6 7 8
-⣣	braille 1 2 6 7 8
-⣤	braille 3 6 7 8
-⣥	braille 1 3 6 7 8
-⣦	braille 2 3 6 7 8
-⣧	braille 1 2 3 6 7 8
-⣨	braille 4 6 7 8
-⣩	braille 1 4 6 7 8
-⣪	braille 2 4 6 7 8
-⣫	braille 1 2 4 6 7 8
-⣬	braille 3 4 6 7 8
-⣭	braille 1 3 4 6 7 8
-⣮	braille 2 3 4 6 7 8
-⣯	braille 1 2 3 4 6 7 8
-⣰	braille 5 6 7 8
-⣱	braille 1 5 6 7 8
-⣲	braille 2 5 6 7 8
-⣳	braille 1 2 5 6 7 8
-⣴	braille 3 5 6 7 8
-⣵	braille 1 3 5 6 7 8
-⣶	braille 2 3 5 6 7 8
-⣷	braille 1 2 3 5 6 7 8
-⣸	braille 1 2 3 7 8
-⣹	braille 1 4 5 6 7 8
-⣺	braille 2 4 5 6 7 8
-⣻	braille 1 2 4 5 6 7 8
-⣼	braille 3 4 5 6 7 8
-⣽	braille 1 3 4 5 6 7 8
-⣾	braille 2 3 4 5 6 7 8
-⣿	braille 1 2 3 4 5 6 7 8
--- /dev/null
+++ b/locale/base/symbols.dic
@@ -0,0 +1,626 @@
+﻿# This file was automatically generated by make import-symbols
+# DO NOT MODIFY IT!
+# See locale/README.md to know how to import dictionaries
+
+# A part of NonVisual Desktop Access (NVDA)
+# Copyright (c) 2011-2023 NVDA Contributors
+# This file is covered by the GNU General Public License.
+
+complexSymbols:
+# identifier	regexp
+# Sentence endings.
+. sentence ending	(?<=[^\s.])\.(?=[\"'”’)\s]|$)
+! sentence ending	(?<=[^\s!])\!(?=[\"'”’)\s]|$)
+? sentence ending	(?<=[^\s?])\?(?=[\"'”’)\s]|$)
+# Phrase endings.
+; phrase ending	(?<=[^\s;]);(?=\s|$)
+: phrase ending	(?<=[^\s:]):(?=\s|$)
+# Others
+decimal point	(?<![^\d -])\.(?=\d)
+in-word '	(?<=[^\W_])['’]
+negative number	(?<!\w)[-−]{1}(?=[$£€¥.]?\d)
+
+symbols:
+# identifier	replacement[[	level][	preserve]][	# display name]
+
+# Complex symbols
+. sentence ending	dot	all	always
+! sentence ending	bang	all	always
+? sentence ending	question	all	always
+; phrase ending	semi	most	always
+: phrase ending	colon	most	always
+decimal point		none	always
+in-word '	tick	all	norep
+negative number	minus	none	norep
+
+# Whitespace
+\0	blank	char	# null
+\t	tab
+\n	line feed	char
+\f	page break	none
+\r	carriage return	char
+ 	space	char
+ 	space	char	# no-break space
+
+# Standard punctuation/symbols
+!	bang	all
+"	quote	most
+\#	number	some
+$	dollar	all	norep
+£	pound	all	norep
+€	euro	all	norep
+¢	cents	all	norep
+¥	yen	all	norep
+₹	rupee	some	norep
+ƒ	florin	all	norep
+¤	currency sign	all	norep
+%	percent	some
+‰	per mille	some
+&	and	some
+'	tick	all
+(	left paren	most	always
+)	right paren	most	always
+*	star	some
+,	comma	all	always
+、	ideographic comma	all	always
+،	arabic comma	all	always
+-	dash	most	always
+.	dot	some
+/	slash	some
+:	colon	most	norep
+;	semi	most
+؛	arabic semicolon	most
+?	question	all
+؟	arabic question mark	all
+@	at	some
+[	left bracket	most
+]	right bracket	most
+\\	backslash	most
+^	caret	most
+_	line	most
+`	graav	most
+{	left brace	most
+}	right brace	most
+|	bar	most
+¦	broken bar	most
+~	tilda	most
+¡	inverted exclamation point	some
+¿	inverted question mark	some
+·	middle dot	most
+‚	single low quote	most
+„	double low quote	most
+′	prime	some
+″	double prime	some
+‴	triple prime	some
+
+# Other characters
+•	bullet	some
+…	dot dot dot	all	always
+...	dot dot dot	all	always
+“	left quote	most
+”	right quote	most
+‘	left tick	most
+’	right tick	most
+–	en dash	most	always
+—	em dash	most	always
+­	soft hyphen	most
+⁃	hyphen bullet	none
+●	circle	most
+○	white circle	most
+¨	diaeresis	most
+¯	macron	most
+´	acute	most
+¸	cedilla	most
+‎	left to right mark	char
+‏	right to left mark	char
+¶	paragraph marker	most
+■	black square	some
+▪	black square	some
+◾	black square	some
+□	white square	some
+◦	white bullet	some
+⇨	right white arrow	some
+➔	right-pointing arrow	some
+➢	right arrowhead	some
+❖	black diamond minus white X	some
+♣	black club	some
+♦	black diamond	some
+◆	black diamond	some
+§	section	all
+°	degrees	some
+«	double left pointing angle bracket	most	always
+»	double right pointing angle bracket	most	always
+µ	micro	some
+⁰	superscript 0	some
+¹	superscript 1	some
+²	superscript 2	some
+³	superscript 3	some
+⁴	superscript 4	some
+⁵	superscript 5	some
+⁶	superscript 6	some
+⁷	superscript 7	some
+⁸	superscript 8	some
+⁹	superscript 9	some
+⁺	superscript plus	some
+⁼	superscript equals	some
+⁽	superscript left paren	some
+⁾	superscript right paren	some
+ⁿ	superscript n	some
+₀	subscript 0	some
+₁	subscript 1	some
+₂	subscript 2	some
+₃	subscript 3	some
+₄	subscript 4	some
+₅	subscript 5	some
+₆	subscript 6	some
+₇	subscript 7	some
+₈	subscript 8	some
+₉	subscript 9	some
+₊	subscript plus	some
+₋	subscript minus	some
+₌	subscript equals	some
+₍	subscript left paren	some
+₎	subscript right paren	some
+®	registered	some
+™	trademark	some
+©	copyright	some
+℠	ServiceMark	some
+←	left arrow	some
+↑	up arrow	some
+→	right arrow	some
+↓	down arrow	some
+✓	check	some
+✔	check	some
+🡺	right arrow	some
+†	dagger	some
+‡	double dagger	some
+‣	triangular bullet	none
+✗	x-shaped bullet	none
+⊕	circled plus	none
+⊖	circled minus	none
+⇄	right arrow over left arrow	none
+⇒	double right arrow	none
+
+#Arithmetic operators
++	plus	some
+−	minus	some
+×	times	some
+⋅	times	some
+⨯	times	none
+∕	divided by	some
+⁄	divided by	some
+÷	divide by	some
+∓	minus or plus	some
+±	plus or Minus	some
+
+#Set operations
+∖	set minus	none
+⊍	set union	none
+𝒫	power set of the set	none
+𝔓	power set of the set	none
+℘	power set of the set	none
+∁	complement of the set	none
+
+#Set relations and set constructions
+∅	empty set	none
+⊂	subset of	none
+⊄	not a subset of	none
+⊃	superset of	none
+⊅	not a superset of	none
+⊆	subset of or equal to	none
+⊈	neither a subset of nor equal to	none
+⊇	superset of or equal to	none
+⊉	neither a superset of nor equal to	none
+⊌	multiset	none
+
+#Equality signs
+=	equals	some
+≃	asymptotically equal to	none
+≄	not asymptotically equal to	none
+≅	approximately equal to	none
+≆	approximately but not actually equal to	none
+≈	almost Equal to	none
+≌	all equal to	none
+≍	equivalent to	none
+≭	not equivalent to	none
+≎	geometrically equivalent to	none
+≑	geometrically equal to	none
+≚	equiangular to	none
+≬	between	none
+≠	not equal to	none
+≡	identical to	none
+≣	strictly identical to	none
+≢	not identical to	none
+∼	similar to	none
+≙	estimates	none
+≟	questioned equal to	none
+
+#comparison signs
+<	less	some
+>	greater	some
+≤	less- than or equal to	none
+≦	less- than or equal to	none
+≪	much smaller than	none
+≥	greater-than or equal to	none
+≧	greater-than or equal to	none
+≫	much bigger than	none
+≶	less than or greater than	none
+≷	greater than or less than	none
+≮	not less than	none
+≯	not greater than	none
+
+#Functions
+⁻	inverse	some
+∘	ring Operator	none
+∂	partial derivative	none
+∇	gradient of	none
+
+#Geometry and linear Algebra
+⃗	vector between	none
+△	triangle	none
+▭	rectangle	none
+∟	right angle	none
+∠	angle	none
+∥	parallel to	none
+∦	not parallel to	none
+⊥	perpendicular to	none
+⟂	ortogonal to	none
+‖	norm of vector	none
+̂	normalizes	none
+∿	sine wave	none
+∡	measured Angle	none
+∢	spherical Angle	none
+
+#Logical operators
+∀	for all	none
+∃	there exists	none
+∄	there does not exist	none
+⇏	does not imply	none
+⇐	is implied by	none
+
+#Other mathematical Operators
+∈	element of	none
+∉	not an element of	none
+∊	small element of	none
+∋	contains as member	none
+∌	does not contain as member	none
+∍	small contains as member	none
+∎	end of proof	none
+∏	n-ary product	none
+∐	n-ary coproduct	none
+∑	n-ary summation	none
+√	square root	none
+∛	cube root	none
+∜	fourth root	none
+∝	proportional to	none
+∞	infinity	none
+∧	and	none
+∨	or	none
+¬	not	none
+∩	intersection	none
+∪	union	none
+∫	integral	none
+∬	double Integral	none
+∭	triple Integral	none
+∮	contour Integral	none
+∯	surface Integral	none
+∰	volume Integral	none
+∱	clockwise Integral	none
+∲	clockwise contour Integral	none
+∳	anticlockwise Contour Integral	none
+∴	therefore	none
+∵	because	none
+∶	ratio	none
+∷	proportion	none
+∹	excess	none
+∺	geometric proportion	none
+≀	wreath product	none
+≏	difference between	none
+≐	approaches the limit	none
+∙	bullet Operator	none
+∣	divides	none
+∤	does not divide	none
+≔	colon equals	none
+≕	equals colon	none
+≺	precedes	none
+≻	succeeds	none
+⊀	does not precede	none
+⊁	does not succeed	none
+
+# Vulgar Fractions U+2150 to U+215E
+¼	one quarter	none
+½	one half	none
+¾	three quarters	none
+⅐	one seventh	none
+⅑	one ninth	none
+⅒	one tenth	none
+⅓	one third	none
+⅔	two thirds	none
+⅕	one fifth	none
+⅖	two fifths	none
+⅗	three fifths	none
+⅘	four fifths	none
+⅙	one sixth	none
+⅚	five sixths	none
+⅛	one eighth	none
+⅜	three eights	none
+⅝	five eighths	none
+⅞	seven eighths	none
+
+#Number sets
+𝔸	algebraic numbers	none
+ℂ	complex numbers	none
+ℑ	imaginary part of complex number	none
+ℍ	quaternions	none
+ℕ	natural numbers	none
+𝕁	nonnegative (whole) numbers	none
+ℚ	rational numbers	none
+ℝ	real numbers	none
+ℜ	real part of complex number	none
+ℤ	integers	none
+ℵ	aleph number	none
+ℶ	beth number	none
+
+# Miscellaneous Technical
+⌘	mac Command key	none
+⌥	mac Option key	none
+
+## 6-dot cell
+### note: the character on the next line is U+2800 (braille space), not U+0020 (ASCII space)
+⠀	space
+⠁	braille 1
+⠂	braille 2
+⠃	braille 1 2
+⠄	braille 3
+⠅	braille 1 3
+⠆	braille 2 3
+⠇	braille 1 2 3
+⠈	braille 4
+⠉	braille 1 4
+⠊	braille 2 4
+⠋	braille 1 2 4
+⠌	braille 3 4
+⠍	braille 1 3 4
+⠎	braille 2 3 4
+⠏	braille 1 2 3 4
+⠐	braille 5
+⠑	braille 1 5
+⠒	braille 2 5
+⠓	braille 1 2 5
+⠔	braille 3 5
+⠕	braille 1 3 5
+⠖	braille 2 3 5
+⠗	braille 1 2 3 5
+⠘	braille 4 5
+⠙	braille 1 4 5
+⠚	braille 2 4 5
+⠛	braille 1 2 4 5
+⠜	braille 3 4 5
+⠝	braille 1 3 4 5
+⠞	braille 2 3 4 5
+⠟	braille 1 2 3 4 5
+⠠	braille 6
+⠡	braille 1 6
+⠢	braille 2 6
+⠣	braille 1 2 6
+⠤	braille 3 6
+⠥	braille 1 3 6
+⠦	braille 2 3 6
+⠧	braille 1 2 3 6
+⠨	braille 4 6
+⠩	braille 1 4 6
+⠪	braille 2 4 6
+⠫	braille 1 2 4 6
+⠬	braille 3 4 6
+⠭	braille 1 3 4 6
+⠮	braille 2 3 4 6
+⠯	braille 1 2 3 4 6
+⠰	braille 5 6
+⠱	braille 1 5 6
+⠲	braille 2 5 6
+⠳	braille 1 2 5 6
+⠴	braille 3 5 6
+⠵	braille 1 3 5 6
+⠶	braille 2 3 5 6
+⠷	braille 1 2 3 5 6
+⠸	braille 4 5 6
+⠹	braille 1 4 5 6
+⠺	braille 2 4 5 6
+⠻	braille 1 2 4 5 6
+⠼	braille 3 4 5 6
+⠽	braille 1 3 4 5 6
+⠾	braille 2 3 4 5 6
+⠿	braille 1 2 3 4 5 6
+## 8-braille cell
+⡀	braille 7
+⡁	braille 1 7
+⡂	braille 2 7
+⡃	braille 1 2 7
+⡄	braille 3 7
+⡅	braille 1 3 7
+⡆	braille 2 3 7
+⡇	braille 1 2 3 7
+⡈	braille 4 7
+⡉	braille 1 4 7
+⡊	braille 2 4 7
+⡋	braille 1 2 4 7
+⡌	braille 3 4 7
+⡍	braille 1 3 4 7
+⡎	braille 2 3 4 7
+⡏	braille 1 2 3 4 7
+⡐	braille 5 7
+⡑	braille 1 5 7
+⡒	braille 2 5 7
+⡓	braille 1 2 5 7
+⡔	braille 3 5 7
+⡕	braille 1 3 5 7
+⡖	braille 2 3 5 7
+⡗	braille 1 2 3 5 7
+⡘	braille 4 5 7
+⡙	braille 1 4 5 7
+⡚	braille 2 4 5 7
+⡛	braille 1 2 4 5 7
+⡜	braille 3 4 5 7
+⡝	braille 1 3 4 5 7
+⡞	braille 2 3 4 5 7
+⡟	braille 1 2 3 4 5 7
+⡠	braille 6 7
+⡡	braille 1 6 7
+⡢	braille 2 6 7
+⡣	braille 1 2 6 7
+⡤	braille 3 6 7
+⡥	braille 1 3 6 7
+⡦	braille 2 3 6 7
+⡧	braille 1 2 3 6 7
+⡨	braille 4 6 7
+⡩	braille 1 4 6 7
+⡪	braille 2 4 6 7
+⡫	braille 1 2 4 6 7
+⡬	braille 3 4 6 7
+⡭	braille 1 3 4 6 7
+⡮	braille 2 3 4 6 7
+⡯	braille 1 2 3 4 6 7
+⡰	braille 5 6 7
+⡱	braille 1 5 6 7
+⡲	braille 2 5 6 7
+⡳	braille 1 2 5 6 7
+⡴	braille 3 5 6 7
+⡵	braille 1 3 5 6 7
+⡶	braille 2 3 5 6 7
+⡷	braille 1 2 3 5 6 7
+⡸	braille 1 2 3 7
+⡹	braille 1 4 5 6 7
+⡺	braille 2 4 5 6 7
+⡻	braille 1 2 4 5 6 7
+⡼	braille 3 4 5 6 7
+⡽	braille 1 3 4 5 6 7
+⡾	braille 2 3 4 5 6 7
+⡿	braille 1 2 3 4 5 6 7
+⢀	braille 8
+⢁	braille 1 8
+⢂	braille 2 8
+⢃	braille 1 2 8
+⢄	braille 3 8
+⢅	braille 1 3 8
+⢆	braille 2 3 8
+⢇	braille 1 2 3 8
+⢈	braille 4 8
+⢉	braille 1 4 8
+⢊	braille 2 4 8
+⢋	braille 1 2 4 8
+⢌	braille 3 4 8
+⢍	braille 1 3 4 8
+⢎	braille 2 3 4 8
+⢏	braille 1 2 3 4 8
+⢐	braille 5 8
+⢑	braille 1 5 8
+⢒	braille 2 5 8
+⢓	braille 1 2 5 8
+⢔	braille 3 5 8
+⢕	braille 1 3 5 8
+⢖	braille 2 3 5 8
+⢗	braille 1 2 3 5 8
+⢘	braille 4 5 8
+⢙	braille 1 4 5 8
+⢚	braille 2 4 5 8
+⢛	braille 1 2 4 5 8
+⢜	braille 3 4 5 8
+⢝	braille 1 3 4 5 8
+⢞	braille 2 3 4 5 8
+⢟	braille 1 2 3 4 5 8
+⢠	braille 6 8
+⢡	braille 1 6 8
+⢢	braille 2 6 8
+⢣	braille 1 2 6 8
+⢤	braille 3 6 8
+⢥	braille 1 3 6 8
+⢦	braille 2 3 6 8
+⢧	braille 1 2 3 6 8
+⢨	braille 4 6 8
+⢩	braille 1 4 6 8
+⢪	braille 2 4 6 8
+⢫	braille 1 2 4 6 8
+⢬	braille 3 4 6 8
+⢭	braille 1 3 4 6 8
+⢮	braille 2 3 4 6 8
+⢯	braille 1 2 3 4 6 8
+⢰	braille 5 6 8
+⢱	braille 1 5 6 8
+⢲	braille 2 5 6 8
+⢳	braille 1 2 5 6 8
+⢴	braille 3 5 6 8
+⢵	braille 1 3 5 6 8
+⢶	braille 2 3 5 6 8
+⢷	braille 1 2 3 5 6 8
+⢸	braille 1 2 3 8
+⢹	braille 1 4 5 6 8
+⢺	braille 2 4 5 6 8
+⢻	braille 1 2 4 5 6 8
+⢼	braille 3 4 5 6 8
+⢽	braille 1 3 4 5 6 8
+⢾	braille 2 3 4 5 6 8
+⢿	braille 1 2 3 4 5 6 8
+⣀	braille 7 8
+⣁	braille 1 7 8
+⣂	braille 2 7 8
+⣃	braille 1 2 7 8
+⣄	braille 3 7 8
+⣅	braille 1 3 7 8
+⣆	braille 2 3 7 8
+⣇	braille 1 2 3 7 8
+⣈	braille 4 7 8
+⣉	braille 1 4 7 8
+⣊	braille 2 4 7 8
+⣋	braille 1 2 4 7 8
+⣌	braille 3 4 7 8
+⣍	braille 1 3 4 7 8
+⣎	braille 2 3 4 7 8
+⣏	braille 1 2 3 4 7 8
+⣐	braille 5 7 8
+⣑	braille 1 5 7 8
+⣒	braille 2 5 7 8
+⣓	braille 1 2 5 7 8
+⣔	braille 3 5 7 8
+⣕	braille 1 3 5 7 8
+⣖	braille 2 3 5 7 8
+⣗	braille 1 2 3 5 7 8
+⣘	braille 4 5 7 8
+⣙	braille 1 4 5 7 8
+⣚	braille 2 4 5 7 8
+⣛	braille 1 2 4 5 7 8
+⣜	braille 3 4 5 7 8
+⣝	braille 1 3 4 5 7 8
+⣞	braille 2 3 4 5 7 8
+⣟	braille 1 2 3 4 5 7 8
+⣠	braille 6 7 8
+⣡	braille 1 6 7 8
+⣢	braille 2 6 7 8
+⣣	braille 1 2 6 7 8
+⣤	braille 3 6 7 8
+⣥	braille 1 3 6 7 8
+⣦	braille 2 3 6 7 8
+⣧	braille 1 2 3 6 7 8
+⣨	braille 4 6 7 8
+⣩	braille 1 4 6 7 8
+⣪	braille 2 4 6 7 8
+⣫	braille 1 2 4 6 7 8
+⣬	braille 3 4 6 7 8
+⣭	braille 1 3 4 6 7 8
+⣮	braille 2 3 4 6 7 8
+⣯	braille 1 2 3 4 6 7 8
+⣰	braille 5 6 7 8
+⣱	braille 1 5 6 7 8
+⣲	braille 2 5 6 7 8
+⣳	braille 1 2 5 6 7 8
+⣴	braille 3 5 6 7 8
+⣵	braille 1 3 5 6 7 8
+⣶	braille 2 3 5 6 7 8
+⣷	braille 1 2 3 5 6 7 8
+⣸	braille 1 2 3 7 8
+⣹	braille 1 4 5 6 7 8
+⣺	braille 2 4 5 6 7 8
+⣻	braille 1 2 4 5 6 7 8
+⣼	braille 3 4 5 6 7 8
+⣽	braille 1 3 4 5 6 7 8
+⣾	braille 2 3 4 5 6 7 8
+⣿	braille 1 2 3 4 5 6 7 8
