xref: /MusicPlayer2/scintilla/src/DBCS.cxx (revision 8af74909132ed5e696cb05b6689ae4baf14c1c96)
1*8af74909SZhong Yang // Scintilla source code edit control
2*8af74909SZhong Yang /** @file DBCS.cxx
3*8af74909SZhong Yang  ** Functions to handle DBCS double byte encodings like Shift-JIS.
4*8af74909SZhong Yang  **/
5*8af74909SZhong Yang // Copyright 2017 by Neil Hodgson <[email protected]>
6*8af74909SZhong Yang // The License.txt file describes the conditions under which this software may be distributed.
7*8af74909SZhong Yang 
8*8af74909SZhong Yang #include "DBCS.h"
9*8af74909SZhong Yang 
10*8af74909SZhong Yang using namespace Scintilla;
11*8af74909SZhong Yang 
12*8af74909SZhong Yang namespace Scintilla {
13*8af74909SZhong Yang 
DBCSIsLeadByte(int codePage,char ch)14*8af74909SZhong Yang bool DBCSIsLeadByte(int codePage, char ch) noexcept {
15*8af74909SZhong Yang 	// Byte ranges found in Wikipedia articles with relevant search strings in each case
16*8af74909SZhong Yang 	const unsigned char uch = ch;
17*8af74909SZhong Yang 	switch (codePage) {
18*8af74909SZhong Yang 	case 932:
19*8af74909SZhong Yang 		// Shift_jis
20*8af74909SZhong Yang 		return ((uch >= 0x81) && (uch <= 0x9F)) ||
21*8af74909SZhong Yang 			((uch >= 0xE0) && (uch <= 0xFC));
22*8af74909SZhong Yang 		// Lead bytes F0 to FC may be a Microsoft addition.
23*8af74909SZhong Yang 	case 936:
24*8af74909SZhong Yang 		// GBK
25*8af74909SZhong Yang 		return (uch >= 0x81) && (uch <= 0xFE);
26*8af74909SZhong Yang 	case 949:
27*8af74909SZhong Yang 		// Korean Wansung KS C-5601-1987
28*8af74909SZhong Yang 		return (uch >= 0x81) && (uch <= 0xFE);
29*8af74909SZhong Yang 	case 950:
30*8af74909SZhong Yang 		// Big5
31*8af74909SZhong Yang 		return (uch >= 0x81) && (uch <= 0xFE);
32*8af74909SZhong Yang 	case 1361:
33*8af74909SZhong Yang 		// Korean Johab KS C-5601-1992
34*8af74909SZhong Yang 		return
35*8af74909SZhong Yang 			((uch >= 0x84) && (uch <= 0xD3)) ||
36*8af74909SZhong Yang 			((uch >= 0xD8) && (uch <= 0xDE)) ||
37*8af74909SZhong Yang 			((uch >= 0xE0) && (uch <= 0xF9));
38*8af74909SZhong Yang 	}
39*8af74909SZhong Yang 	return false;
40*8af74909SZhong Yang }
41*8af74909SZhong Yang 
42*8af74909SZhong Yang }
43