1
0
Fork 0
mirror of https://github.com/Ellpeck/MLEM.git synced 2024-11-26 06:28:35 +01:00

GenericFont support for zero-width spaces

This commit is contained in:
Ell 2020-12-31 17:22:51 +01:00
parent 9b1abf119e
commit b6ef243cf4

View file

@ -21,6 +21,11 @@ namespace MLEM.Font {
/// Whereas a regular <see cref="SpriteFont"/> would have to explicitly support this character for width calculations, generic fonts implicitly support it in <see cref="MeasureString"/>.
/// </summary>
public const char Nbsp = '\u00A0';
/// <summary>
/// This field holds the unicode representation of a zero-width space.
/// Whereas a regular <see cref="SpriteFont"/> would have to explicitly support this character for width calculations and string splitting, generic fonts implicitly support it in <see cref="MeasureString"/> and <see cref="SplitString"/>.
/// </summary>
public const char Zwsp = '\u8203';
/// <summary>
/// The bold version of this font.
@ -108,6 +113,9 @@ namespace MLEM.Font {
case Nbsp:
xOffset += this.MeasureChar(' ').X;
break;
case Zwsp:
// don't add width for a zero-width space
break;
default:
xOffset += this.MeasureChar(c).X;
break;
@ -154,7 +162,7 @@ namespace MLEM.Font {
/// <summary>
/// Splits a string to a given maximum width, adding newline characters between each line.
/// Also splits long words.
/// Also splits long words and supports zero-width spaces.
/// </summary>
/// <param name="text">The text to split into multiple lines</param>
/// <param name="width">The maximum width that each line should have</param>
@ -164,7 +172,7 @@ namespace MLEM.Font {
var total = new StringBuilder();
foreach (var line in text.Split('\n')) {
var curr = new StringBuilder();
foreach (var word in line.Split(' ')) {
foreach (var word in line.Split(' ', Zwsp)) {
if (this.MeasureString(word).X * scale >= width) {
if (curr.Length > 0) {
total.Append(curr).Append('\n');