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:
parent
9b1abf119e
commit
b6ef243cf4
1 changed files with 10 additions and 2 deletions
|
@ -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');
|
||||
|
|
Loading…
Reference in a new issue