/// <summary> /// Get character data /// </summary> /// <param name="charOrdinal">Character ordinal</param> /// <param name="data">Buffer to be sliced and filled with character data</param> /// <param name="useDefaultChar">Use default character if not found</param> /// <returns>True if data could be retrieved</returns> public bool GetCharData(int charOrdinal, ref Span <int> data, bool useDefaultChar = true) { if (data.Length < Height || GlyphMapper is null) { return(false); } if (!GlyphMapper.TryGetValue(charOrdinal, out int index)) { if (useDefaultChar) { if (!GlyphMapper.TryGetValue(DefaultChar, out index)) { return(false); } } } if (GlyphUshortData is null) { return(false); } for (int i = 0; i < Height; i++) { data[i] = GlyphUshortData[index + i]; } return(true); }
/// <summary> /// Get character data or data for default character /// </summary> /// <param name="character">Character whose data needs to be retrieved</param> /// <param name="charData">Character data</param> public void GetCharData(char character, out ReadOnlySpan <ushort> charData) { if (GlyphMapper is object && (GlyphMapper.TryGetValue((int)character, out int index) || GlyphMapper.TryGetValue((int)DefaultChar, out index))) { charData = GlyphUshortData.AsSpan().Slice(index, Height); } throw new InvalidDataException("Couldn't get the glyph data"); }