コード例 #1
0
        public MapBuild(UcdLoader loader)
        {
            _loader = loader;
            loader.EnsureDataLoaded();
            var iocMap = _iocMap = new Dictionary <int, int>();

            foreach (var line in File.ReadLines(@"../../bin/OrdinalIgnoreCase.txt"))
            {
                var s = line.Split(new[] { ' ' }, 3);
                if (int.TryParse(s[0], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int from) &&
                    int.TryParse(s[1], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int to))
                {
                    iocMap.Add(from, to);
                }
            }
        }
コード例 #2
0
ファイル: TestCompEq.cs プロジェクト: panost/ecl.Unicode
        public TestCompEq(UcdLoader loader)
        {
            _loader = loader;
            List <string> list      = new List <string>();
            List <int>    listPoint = new List <int>();

            foreach (var point in loader.GetCodePoints())
            {
                if (point.CodeValue == 0 ||
                    (point.CodeValue >= 0xD800 && point.CodeValue <= 0xDFFF))
                {
                    continue;
                }
                list.Add(point.ToString());
                listPoint.Add(point.CodeValue);
            }
            _allStrings = list.ToArray();
            _allPoints  = listPoint.ToArray();
        }
コード例 #3
0
        public ScannerMapBuilder(UcdLoader loader)
        {
            _loader = loader;

            foreach (UcdBlock block in loader.Blocks)
            {
                switch (block.Block)
                {
                case Block.HighSurrogates:
                case Block.HighPrivateUseSurrogates:
                case Block.LowSurrogates:
                case Block.PrivateUseArea:
                case Block.SupplementaryPrivateUseAreaA:
                case Block.SupplementaryPrivateUseAreaB:
                    continue;
                }
                _list.Clear();
                foreach (UnicodeEntry entry in loader.GetCodePoints(block))
                {
                    CodeEntry code;
                    code.CodePoint = entry.CodeValue;
                    switch (entry.Category)
                    {
                    case UnicodeCharacterType.LetterUppercase:
                    case UnicodeCharacterType.LetterLowercase:
                    case UnicodeCharacterType.LetterTitlecase:
                    case UnicodeCharacterType.LetterModifier:
                    case UnicodeCharacterType.LetterOther:
                        break;

                    default:
                        continue;
                    }

                    if (entry.DecomposingLength > 0)
                    {
                        int val = GetDecomposed(entry.CodeValue, true);
                    }
                }
            }
        }
コード例 #4
0
        public HashCodeTest(UcdLoader loader)
        {
            _loader = loader;
            List <string> list       = new List <string>();
            List <int>    listPoint  = new List <int>();
            List <int[]>  listPoints = new List <int[]>();
            StringBuilder b          = new StringBuilder();
            int           len        = 0;

            foreach (var point in loader.GetCodePoints())
            {
                if (point.CodeValue == 0)
                {
                    continue;
                }
                point.AppendCharTo(b);
                listPoint.Add(point.CodeValue);
                len++;
                if (len == 10)
                {
                    len = 0;
                    list.Add(b.ToString());
                    listPoints.Add(listPoint.ToArray());
                    b.Clear();
                    listPoint.Clear();
                }
            }

            if (b.Length > 0)
            {
                list.Add(b.ToString());
                listPoints.Add(listPoint.ToArray());
            }

            _allStrings = list.ToArray();
            _allPoints  = listPoints.ToArray();
        }
コード例 #5
0
 public ScannerMapBuilder(UcdLoader loader)
 {
     _loader = loader;
 }
コード例 #6
0
        public TableBuilder(UcdLoader loader)
        {
            _loader = loader;
            var list = new List <CodeEntry>();
            //foreach ( var entry in loader.GetCodePoints() ) {
            //    all[ entry.CodeValue ] = entry.ToString();
            //}
            var blocks      = new List <BlockEntry>();
            var decomposing = new List <int>();
            var builder     = new StringBuilder();

            string GetDecomposed(int codePoint, bool cascade)
            {
                decomposing.Clear();
                loader.AddDecomposing(codePoint, decomposing, cascade);
                if (decomposing.Count <= 1)
                {
                    // accept only multi-code point decombosions
                    return(null);
                }
                builder.Clear();
                foreach (int code in decomposing)
                {
                    var entry = loader[code];
                    if (entry.CodeValue == 0)
                    {
                        return(null);
                    }
                    entry.AppendCharTo(builder);
                }
                return(builder.ToString());
            }

            foreach (UcdBlock block in loader.Blocks)
            {
                switch (block.Block)
                {
                case Block.HighSurrogates:
                case Block.HighPrivateUseSurrogates:
                case Block.LowSurrogates:
                case Block.PrivateUseArea:
                case Block.SupplementaryPrivateUseAreaA:
                case Block.SupplementaryPrivateUseAreaB:
                    continue;
                }
                list.Clear();
                foreach (UnicodeEntry entry in loader.GetCodePoints(block))
                {
                    list.Add(new CodeEntry(entry.CodeValue, entry.ToString()));
                    if (entry.DecomposingLength > 0)
                    {
                        string decomp = GetDecomposed(entry.CodeValue, true);
                        if (decomp != null)
                        {
                            list.Add(new CodeEntry(entry.CodeValue, decomp, 2));
                            string decomp2 = GetDecomposed(entry.CodeValue, false);
                            if (decomp2 != null && decomp2 != decomp)
                            {
                                list.Add(new CodeEntry(entry.CodeValue, decomp2, 1));
                            }
                        }
                    }
                }

                blocks.Add(new BlockEntry()
                {
                    Block   = block,
                    Entries = list.ToArray()
                });
            }

            _allBlocks = blocks.ToArray();
        }