diff --git a/src/xpdev/unicode.c b/src/xpdev/unicode.c
index e1e8861294a8204a89588fd79fadfe57ad47f0f9..26254fc2ba7663763e8897d3a82ed56d596a3072 100644
--- a/src/xpdev/unicode.c
+++ b/src/xpdev/unicode.c
@@ -319,15 +319,68 @@ size_t unicode_width(enum unicode_codepoint u)
 		case UNICODE_VARIATION_SELECTOR_16:
 		case UNICODE_ZERO_WIDTH_NO_BREAK_SPACE:
 			return 0;
+		// Exceptions to the ranges (blocks/sub-blocks) in the default case
+		case UNICODE_CIRCLED_NUMBER_TEN_ON_BLACK_SQUARE:
+		case UNICODE_CIRCLED_NUMBER_TWENTY_ON_BLACK_SQUARE:
+		case UNICODE_CIRCLED_NUMBER_THIRTY_ON_BLACK_SQUARE:
+		case UNICODE_CIRCLED_NUMBER_FORTY_ON_BLACK_SQUARE:
+		case UNICODE_CIRCLED_NUMBER_FIFTY_ON_BLACK_SQUARE:
+		case UNICODE_CIRCLED_NUMBER_SIXTY_ON_BLACK_SQUARE:
+		case UNICODE_CIRCLED_NUMBER_SEVENTY_ON_BLACK_SQUARE:
+		case UNICODE_CIRCLED_NUMBER_EIGHTY_ON_BLACK_SQUARE:
+		case UNICODE_HOT_PEPPER:
+		case UNICODE_FORK_AND_KNIFE_WITH_PLATE:
+			return 1;
+		case UNICODE_MAHJONG_TILE_RED_DRAGON:
+		case UNICODE_PLAYING_CARD_BLACK_JOKER:
+		case UNICODE_NEGATIVE_SQUARED_AB:
+		case UNICODE_HEAVY_EQUAL_SIGN:
+			return 2;
+		// Ranges
 		default:
-			if(    (u >= UNICODE_BLOCK_CJK_RADICALS_SUPPLEMENT_BEGIN		&& u <= UNICIDE_BLOCK_YI_RADICALS_END)
+			if(    (u >= UNICODE_SUBBLOCK_YIJING_HEXAGRAM_BEGIN				&& u <= UNICODE_SUBBLOCK_YIJING_HEXAGRAM_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS1_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS1_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS2_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS2_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS3_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS3_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS4_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS4_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS5_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS5_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS6_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS6_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS7_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS7_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS8_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS8_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS9_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS9_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS10_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS10_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS11_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS11_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS12_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS12_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS13_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS13_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS14_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS14_END)
+				|| (u >= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS15_BEGIN			&& u <= UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS15_END)
+				)
+				return 1;
+			if(    (u >= UNICODE_SUBBLOCK_FULLWIDTH_MISC_SYMBOLS_BEGIN		&& u <= UNICODE_SUBBLOCK_FULLWIDTH_MISC_SYMBOLS_END)
+				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_HANGUL_BEGIN			&& u <= UNICODE_SUBBLOCK_FULLWIDTH_HANGUL_END)
+				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_CHARS_BEGIN				&& u <= UNICODE_SUBBLOCK_FULLWIDTH_CHARS_END)
+				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_SYMBOLS_BEGIN			&& u <= UNICODE_SUBBLOCK_FULLWIDTH_SYMBOLS_END)
+				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_KHITAN_BEGIN			&& u <= UNICODE_SUBBLOCK_FULLWIDTH_KHITAN_END)
+				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_ENCLOSED_ALPHANUM_BEGIN && u <= UNICODE_SUBBLOCK_FULLWIDTH_ENCLOSED_ALPHANUM_END)
+				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_REG_INDICATOR_SYM_BEGIN && u <= UNICODE_SUBBLOCK_FULLWIDTH_REG_INDICATOR_SYM_END)
+				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_ENC_IDEOG_SUPP_BEGIN	&& u <= UNICODE_SUBBLOCK_FULLWIDTH_ENC_IDEOG_SUPP_END)
+				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_GEOM_SHAPES_EXT_BEGIN	&& u <= UNICODE_SUBBLOCK_FULLWIDTH_GEOM_SHAPES_EXT_END)
+				|| (u >= UNICODE_BLOCK_CJK_RADICALS_SUPPLEMENT_BEGIN		&& u <= UNICIDE_BLOCK_YI_RADICALS_END)
+				|| (u >= UNICIDE_BLOCK_HANGUL_JAMO_EXTENDED_A_BEGIN			&& u <= UNICIDE_BLOCK_HANGUL_JAMO_EXTENDED_A_END)
 				|| (u >= UNICIDE_BLOCK_HANGUL_SYLLABLES_BEGIN				&& u <= UNICIDE_BLOCK_HANGUL_SYLLABLES_END)
 				|| (u >= UNICODE_BLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_BEGIN	&& u <= UNICODE_BLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_END)
 				|| (u >= UNICODE_BLOCK_VERTICAL_FORMS_BEGIN					&& u <= UNICODE_BLOCK_VERTICAL_FORMS_END)
 				|| (u >= UNICODE_BLOCK_CJK_COMPATIBILITY_FORMS_BEGIN		&& u <= UNICODE_BLOCK_CJK_COMPATIBILITY_FORMS_END)
 				|| (u >= UNICODE_BLOCK_SMALL_FORM_VARIANTS_BEGIN			&& u <= UNICODE_BLOCK_SMALL_FORM_VARIANTS_END)
-				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_CHARS_BEGIN				&& u <= UNICODE_SUBBLOCK_FULLWIDTH_CHARS_END)
-				|| (u >= UNICODE_SUBBLOCK_FULLWIDTH_SYMBOLS_BEGIN			&& u <= UNICODE_SUBBLOCK_FULLWIDTH_SYMBOLS_END)
+				|| (u >= UNICODE_BLOCK_TANGUT_BEGIN							&& u <= UNICODE_BLOCK_TANGUT_END)
+				|| (u >= UNICODE_BLOCK_TANGUT_COMPONENTS_BEGIN				&& u <= UNICODE_BLOCK_TANGUT_COMPONENTS_END)
+				|| (u >= UNICODE_BLOCK_KANA_SUPPLEMENT_BEGIN				&& u <= UNICODE_BLOCK_KANA_SUPPLEMENT_END)
+				|| (u >= UNICODE_BLOCK_KANA_EXTENDED_A_BEGIN				&& u <= UNICODE_BLOCK_KANA_EXTENDED_A_END)
+				|| (u >= UNICODE_BLOCK_NUSHU_BEGIN							&& u <= UNICODE_BLOCK_NUSHU_END)
+				|| (u >= UNICODE_BLOCK_EMOTICONS_BEGIN						&& u <= UNICODE_BLOCK_EMOTICONS_END)
+				|| (u >= UNICODE_BLOCK_MISC_SYMBOLS_AND_PICTOGRAPHS_BEGIN	&& u <= UNICODE_BLOCK_MISC_SYMBOLS_AND_PICTOGRAPHS_END)
+				|| (u >= UNICODE_BLOCK_SUPP_SYMBOLS_AND_PICTOGRAPHS_BEGIN	&& u <= UNICODE_BLOCK_SUPP_SYMBOLS_AND_PICTOGRAPHS_END)
+				|| (u >= UNICODE_BLOCK_EXTA_SYMBOLS_AND_PICTOGRAPHS_BEGIN	&& u <= UNICODE_BLOCK_EXTA_SYMBOLS_AND_PICTOGRAPHS_END)
 				)
 				return 2;
 			return 1;
diff --git a/src/xpdev/unicode_defs.h b/src/xpdev/unicode_defs.h
index 75c278ac7384456aebe6c0103db759cfea384eb7..087ab7a50ec481c747195202d22efc5033833743 100644
--- a/src/xpdev/unicode_defs.h
+++ b/src/xpdev/unicode_defs.h
@@ -625,6 +625,15 @@ enum unicode_codepoint {
 
 	UNICODE_KATAKANA_LETTER_TU = 0x30C4,
 
+	UNICODE_CIRCLED_NUMBER_TEN_ON_BLACK_SQUARE = 0x3248,
+	UNICODE_CIRCLED_NUMBER_TWENTY_ON_BLACK_SQUARE = 0x3249,
+	UNICODE_CIRCLED_NUMBER_THIRTY_ON_BLACK_SQUARE = 0x324A,
+	UNICODE_CIRCLED_NUMBER_FORTY_ON_BLACK_SQUARE = 0x324B,
+	UNICODE_CIRCLED_NUMBER_FIFTY_ON_BLACK_SQUARE = 0x324C,
+	UNICODE_CIRCLED_NUMBER_SIXTY_ON_BLACK_SQUARE = 0x324D,
+	UNICODE_CIRCLED_NUMBER_SEVENTY_ON_BLACK_SQUARE = 0x324E,
+	UNICODE_CIRCLED_NUMBER_EIGHTY_ON_BLACK_SQUARE = 0x324F,
+
 	UNICODE_VARIATION_SELECTOR_1 = 0xFE00,
 	UNICODE_VARIATION_SELECTOR_2 = 0xFE01,
 	UNICODE_VARIATION_SELECTOR_3 = 0xFE02,
@@ -680,6 +689,13 @@ enum unicode_codepoint {
 
 	UNICODE_REPLACEMENT_CHARACTER = 0xFFFD,
 
+	UNICODE_MAHJONG_TILE_RED_DRAGON = 0x1F004,
+	UNICODE_PLAYING_CARD_BLACK_JOKER = 0x1F0CF,
+	UNICODE_NEGATIVE_SQUARED_AB = 0x1F18E,
+	UNICODE_HOT_PEPPER = 0x1F336,
+	UNICODE_FORK_AND_KNIFE_WITH_PLATE = 0x1F37D,
+	UNICODE_HEAVY_EQUAL_SIGN = 0x1F7F0,
+
 	UNICODE_MAX = 0x10FFFF,
 	UNICODE_LIMIT
 };
@@ -715,6 +731,8 @@ enum unicode_codepoint {
 #define UNICODE_BLOCK_KATAKANA_PHONETIC_EXTENSIONS_END			0x31FF	// Fullwidth
 #define UNICIDE_BLOCK_YI_RADICALS_BEGIN							0xA490	// Fullwidth	
 #define UNICIDE_BLOCK_YI_RADICALS_END							0xA4CF	// Fullwidth
+#define UNICIDE_BLOCK_HANGUL_JAMO_EXTENDED_A_BEGIN				0xA960	// Fullwidth
+#define UNICIDE_BLOCK_HANGUL_JAMO_EXTENDED_A_END				0xA97F	// Fullwidth
 #define UNICIDE_BLOCK_HANGUL_SYLLABLES_BEGIN					0xAC00	// Fullwidth
 #define UNICIDE_BLOCK_HANGUL_SYLLABLES_END						0xD7AF	// Fullwidth
 #define UNICODE_BLOCK_SURROGATE_BEGIN							0xD800
@@ -729,13 +747,79 @@ enum unicode_codepoint {
 #define UNICODE_BLOCK_SMALL_FORM_VARIANTS_END					0xFE6F
 #define UNICODE_BLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS_BEGIN		0xFF00
 #define UNICODE_BLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS_END			0xFFEF
+#define UNICODE_BLOCK_TANGUT_BEGIN								0x17000	// Fullwidth
+#define UNICODE_BLOCK_TANGUT_END								0x187FF	// Fullwidth
+#define UNICODE_BLOCK_TANGUT_COMPONENTS_BEGIN					0x18800	// Fullwidth
+#define UNICODE_BLOCK_TANGUT_COMPONENTS_END						0x18AFF	// Fullwidth
+#define UNICODE_BLOCK_KHITAN_SMALL_SCRIPT_BEGIN					0x18B00 // Fullwidth
+#define UNICODE_BLOCK_KHITAN_SMALL_SCRIPT_END					0x18CFF // Fullwidth
+#define UNICODE_BLOCK_KANA_SUPPLEMENT_BEGIN						0x1B000	// Fullwidth
+#define UNICODE_BLOCK_KANA_SUPPLEMENT_END						0x1B0FF	// Fullwidth
+#define UNICODE_BLOCK_KANA_EXTENDED_A_BEGIN						0x1B100	// Fullwidth
+#define UNICODE_BLOCK_KANA_EXTENDED_A_END						0x1B12F	// Fullwidth
+#define UNICODE_BLOCK_NUSHU_BEGIN								0x1B170	// Fullwidth
+#define UNICODE_BLOCK_NUSHU_END									0x1B2FF	// Fullwidth
+#define UNICODE_BLOCK_ENCLOSED_IDEOG_SUPPLEMENT_BEGIN			0x1F200	// Fullwidth
+#define UNICODE_BLOCK_ENCLOSED_IDEOG_SUPPLEMENT_END				0x1F2FF	// Fullwidth
+#define UNICODE_BLOCK_MISC_SYMBOLS_AND_PICTOGRAPHS_BEGIN		0x1F300	// Fullwidth
+#define UNICODE_BLOCK_MISC_SYMBOLS_AND_PICTOGRAPHS_END			0x1F5FF	// Fullwidth
+#define UNICODE_BLOCK_EMOTICONS_BEGIN							0x1F600
+#define UNICODE_BLOCK_EMOTICONS_END								0x1F6FF
+#define UNICODE_BLOCK_SUPP_SYMBOLS_AND_PICTOGRAPHS_BEGIN		0x1F900	// Fullwidth
+#define UNICODE_BLOCK_SUPP_SYMBOLS_AND_PICTOGRAPHS_END			0x1F9FF	// Fullwidth
+#define UNICODE_BLOCK_EXTA_SYMBOLS_AND_PICTOGRAPHS_BEGIN		0x1FA70	// Fullwidth
+#define UNICODE_BLOCK_EXTA_SYMBOLS_AND_PICTOGRAPHS_END			0x1FAFF	// Fullwidth
 
 // Sub-Blocks
 #define UNICODE_SUBBLOCK_FULLWIDTH_HANGUL_BEGIN					0x1100
 #define UNICODE_SUBBLOCK_FULLWIDTH_HANGUL_END					0x115F
+#define UNICODE_SUBBLOCK_FULLWIDTH_MISC_SYMBOLS_BEGIN			0x2648
+#define UNICODE_SUBBLOCK_FULLWIDTH_MISC_SYMBOLS_END				0x2653
+#define UNICODE_SUBBLOCK_YIJING_HEXAGRAM_BEGIN					0x4DC0
+#define UNICODE_SUBBLOCK_YIJING_HEXAGRAM_END					0x4DFF
 #define UNICODE_SUBBLOCK_FULLWIDTH_CHARS_BEGIN					0xFF01
 #define UNICODE_SUBBLOCK_FULLWIDTH_CHARS_END					0xFF60
 #define UNICODE_SUBBLOCK_FULLWIDTH_SYMBOLS_BEGIN				0xFFE0
 #define UNICODE_SUBBLOCK_FULLWIDTH_SYMBOLS_END					0xFFE6
+#define UNICODE_SUBBLOCK_FULLWIDTH_KHITAN_BEGIN					0x18B00
+#define UNICODE_SUBBLOCK_FULLWIDTH_KHITAN_END					0x18CD5
+#define UNICODE_SUBBLOCK_FULLWIDTH_ENCLOSED_ALPHANUM_BEGIN		0x1F191
+#define UNICODE_SUBBLOCK_FULLWIDTH_ENCLOSED_ALPHANUM_END		0x1F19A
+#define UNICODE_SUBBLOCK_FULLWIDTH_REG_INDICATOR_SYM_BEGIN		0x1F1E6
+#define UNICODE_SUBBLOCK_FULLWIDTH_REG_INDICATOR_SYM_END		0x1F1FF
+#define UNICODE_SUBBLOCK_FULLWIDTH_ENC_IDEOG_SUPP_BEGIN			0x1F200
+#define UNICODE_SUBBLOCK_FULLWIDTH_ENC_IDEOG_SUPP_END			0x1F265
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS1_BEGIN				0x1F321
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS1_END					0x1F32C
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS2_BEGIN				0x1F394
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS2_END					0x1F39F
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS3_BEGIN				0x1F3CB
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS3_END					0x1F3CE
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS4_BEGIN				0x1F3D4
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS4_END					0x1F3DF
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS5_BEGIN				0x1F3F1
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS5_END					0x1F3F3
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS6_BEGIN				0x1F3F5
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS6_END					0x1F3F7
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS7_BEGIN				0x1F53E
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS7_END					0x1F54A
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS8_BEGIN				0x1F568
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS8_END					0x1F579
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS9_BEGIN				0x1F57B
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS9_END					0x1F594
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS10_BEGIN				0x1F597
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS10_END				0x1F5A3
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS11_BEGIN				0x1F5A5
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS11_END				0x1F5FA
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS12_BEGIN				0x1F650
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS12_END				0x1F67F
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS13_BEGIN				0x1F6C6
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS13_END				0x1F6CB
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS14_BEGIN				0x1F6CD
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS14_END				0x1F6CF
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS15_BEGIN				0x1F6E0
+#define UNICODE_SUBBLOCK_HALFWIDTH_SYMBOLS15_END				0x1F6EA
+#define UNICODE_SUBBLOCK_FULLWIDTH_GEOM_SHAPES_EXT_BEGIN		0x1F7E0
+#define UNICODE_SUBBLOCK_FULLWIDTH_GEOM_SHAPES_EXT_END			0x1F7EB
 
 #endif // Don't add anything after this line