Exemple #1
0
        private CaseFoldingEntry[] GetCaseFolding()
        {
            List <CaseFoldingEntry> list = new List <CaseFoldingEntry>();
            List <string>           segs = new List <string>();
            List <int> codeList          = new List <int>();

            using (LineReader reader = OpenLineReader("CaseFolding.txt")) {
                foreach (var count in reader.GetLines(segs, 3))
                {
                    var entry = new CaseFoldingEntry();
                    if (!TryParseHex(segs[0], out entry.Code))
                    {
                        continue;
                    }
                    var status = segs[1].Trim();
                    if (status.Length != 1)
                    {
                        continue;
                    }
                    switch (status[0])
                    {
                    case 'C':
                        entry.Status = CaseFoldingStatus.Common;
                        break;

                    case 'F':
                        entry.Status = CaseFoldingStatus.Full;
                        break;

                    case 'S':
                        entry.Status = CaseFoldingStatus.Simple;
                        break;

                    case 'T':
                        entry.Status = CaseFoldingStatus.Special;
                        break;

                    default:
                        continue;
                    }
                    if (TryParseHex(codeList, segs[2], out entry.Mapping))
                    {
                        list.Add(entry);
                    }
                }
            }
            list.Sort();
            return(list.ToArray());
        }
Exemple #2
0
        public int GetFoldingCharacter(int codeValue)
        {
            int idx = CaseFoldings.BinaryFind(codeValue);

            idx = CaseFoldings.GetRange(codeValue, out int stop);
            if (idx >= 0)
            {
                for (int i = idx; i <= stop; i++)
                {
                    ref CaseFoldingEntry ptr = ref _caseFoldings[i];
                    if (ptr.Mapping.Count == 1 &&
                        ptr.Status == CaseFoldingStatus.Common ||
                        ptr.Status == CaseFoldingStatus.Simple)
                    {
                        return(ptr.Mapping.First);
                    }
                }
            }