Ejemplo n.º 1
0
        /// <summary>
        /// Sort character ranges and merge overlapping ranges.
        /// </summary>
        private void NormalizeCharacterRanges()
        {
            if (CharacterRanges.Count == 0)
            {
                return;
            }

            CharacterRanges.Sort((rl, rr) => rl.Start - rr.Start);
            var prevRange = CharacterRanges[CharacterRanges.Count - 1];

            for (var i = CharacterRanges.Count - 2; i >= 0; i--)
            {
                var range = CharacterRanges[i];
                if (prevRange.Start <= range.End - 1)
                {
                    prevRange = new Range <int>(prevRange.Start, range.End > prevRange.End ? range.End : prevRange.End);
                    CharacterRanges.RemoveAt(i + 1);
                }
                else
                {
                    CharacterRanges[i] = prevRange;
                    prevRange          = range;
                }
            }

            CharacterRanges[0] = prevRange;
        }
Ejemplo n.º 2
0
        public int GetCharRange(IReadOnlyList <CharacterRange> ranges)
        {
            for (var i = 0; i <= CharacterRanges.Count - ranges.Count; i++)
            {
                if (RangeMatchesRange(i, ranges))
                {
                    return(i);
                }
            }

            var result = CharacterRanges.Count;

            CharacterRanges.AddRange(ranges.Select(range => new CharRange(range.Min, range.Max)));

            return(result);
        }
Ejemplo n.º 3
0
        public int GetCharRange(CharacterRange range)
        {
            for (var i = 0; i < CharacterRanges.Count; i++)
            {
                var exisingRange = CharacterRanges[i];
                if (exisingRange.Min == range.Min && exisingRange.Max == range.Max)
                {
                    return(i);
                }
            }

            var result = CharacterRanges.Count;

            CharacterRanges.Add(new CharRange(range.Min, range.Max));

            return(result);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Total number of characters.
 /// </summary>
 public int GetCharacterCount() => CharacterRanges.Sum(r => r.End - r.Start + 1);
Ejemplo n.º 5
0
 /// <summary>
 /// Add the given character ranges to this <see cref="FontAtlasEntry"/>.
 /// Ranges are merged when they overlap.
 /// </summary>
 /// <param name="ranges">The character ranges to add.</param>
 public void AddCharacterRanges(IEnumerable <Range <int> > ranges)
 {
     CharacterRanges.AddRange(ranges);
     NormalizeCharacterRanges();
 }