summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>2020-11-03 20:54:53 -0500
committerJaakko Keränen <jaakko.keranen@iki.fi>2020-11-04 17:09:41 +0200
commiteda5c2dc976f2d02cee5c8dc2feaa2d824d40c79 (patch)
tree1f2ce7d33f515e92adebb770c91d263d9ac21a08
parent9e555a0ba9e3b5b9234d42f38f68eabaa750c08c (diff)
ui: Fix line wrapping of emoticons
While we do want to have special handling of punctuation to help wrap pathologically-long-hyphenated-words-that-go-on-for-kilometers, we don't want to wrap emoticons, so let's adjust the logic to account for this. While we're at it, clean up and add a comment explaining the logic for the benefit of future readers. Fixes rendering of a recent post on CAPCOM at certain window sizes => gemini://rosenzweig.io/lagrange/Before.png Before the change => gemini://rosenzweig.io/lagrange/After.png After the change Notice the wrapping of the ":D" in the second paragraph. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
-rw-r--r--src/ui/text.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/ui/text.c b/src/ui/text.c
index 2ceadb75..f998688a 100644
--- a/src/ui/text.c
+++ b/src/ui/text.c
@@ -586,11 +586,22 @@ static enum iFontId fontId_Text_(const iFont *font) {
586 return font - text_.fonts; 586 return font - text_.fonts;
587} 587}
588 588
589iLocalDef iBool isWrapBoundary_(iChar a, iChar b) { 589/* Line wrapping boundaries are determined by looking at a character and the
590 if (b == '/' || b == '-' || b == ',' || b == ';' || b == ':' || b == '.') { 590 * last character processed. We want to wrap at natural word boundaries where
591 * possible, so normally we wrap at a space followed a non-space character. As
592 * an exception, we also wrap after punctuation used to break up words, so we
593 * can wrap text like foo/bar/baz-abc-def.xyz at any puncation boundaries,
594 * without wrapping on other punctuation used for expressive purposes like
595 * emoticons :-) */
596
597iLocalDef iBool isWrapBoundary_(iChar prevC, iChar c) {
598 if (isSpace_Char(prevC))
599 return iFalse;
600
601 if (c == '/' || c == '-' || c == ',' || c == ';' || c == ':' || c == '.')
591 return iTrue; 602 return iTrue;
592 } 603
593 return !isSpace_Char(a) && isSpace_Char(b); 604 return isSpace_Char(c);
594} 605}
595 606
596iLocalDef iBool isMeasuring_(enum iRunMode mode) { 607iLocalDef iBool isMeasuring_(enum iRunMode mode) {