Text rendering hates you

(faultlore.com)

52 points | by andsoitis 6 days ago

8 comments

  • tankenmate 11 minutes ago
    Hmm I use Firefox and the rendering I see in Firefox looks nothing like the render the author gets in Firefox; in fact the text rendering I get looks very similar to the "Chrome" rendering. Obviously this must depend on the libraries linked during the build process.
  • Karliss 49 minutes ago
    Few more additional ones, more about editing than just rendering:

    The style change mid ligature has a related problem. While it might be reasonable not to support style change in the middle of ligature, you still want to select individual letters within ligatures like "ff", "ffi" and "fl". The problem just like with color change is that neither the text shaper nor program rendering text knows where each individual letter within ligature glyph is positioned. Font simply lacks this information.

    From what I have seen most programs which support it use similar approximation as what Firefox uses for coloring - split the ligature into equal parts. Works good enough for something like "fi", "fl" not so much for some of ligatures within programming fonts that combine >= into ≥.

    There are even worse edge cases in scripts for other languages. There are ligatures which look roughly like the 2 characters which formed it side by side but in reverse order. There are also some ligatures in CJK fonts which combine 4 characters in a square.

    Backspace erases characters at finer granularity than it's possible to select them.

    With regards to LTR/RTL selection weirdness I recently discovered that some editors display small flag on the cursor displaying current position direction when it's in mixed direction text.

  • gnabgib 6 days ago
    (2019) Popular in:

    2023 (290 points, 119 comments) https://news.ycombinator.com/item?id=36478892

    2022 (399 points, 154 comments) https://news.ycombinator.com/item?id=30330144

    2019 (542 points, 170 comments) https://news.ycombinator.com/item?id=21105625

  • jesse__ 2 hours ago
    The ligatures part of this article gets me every time I re-read it. I think reading this article may have been the first time I realized that even large, well-funded projects are still done by people who are just regular humans, and sometimes settle for something that's good enough.
  • xg15 58 minutes ago
    > Don’t ask about the code which line-breaks partial ligatures though.

    Wondered about this. All the circular dependencies sound like you could feasibly get some style/layout combinations that lead to self-contradictory situations.

    E.g. consider a ligature that's wider than the characters' individual glyphs. If the ligature is at the end of the box, it could trigger a line break. But that line break would also break up the ligature and cause the characters to be rendered as individual glyphs, reducing their width - which would undo the line break. But without the line break, the ligature would reconnect, increase the width and restore the line break, etc etc...

  • thot_experiment 1 hour ago
    I've tried to ask this before in various contexts and I've never been able to find an answer but maybe commenters on a post like this would know.

    I like the way that the CJK fonts render without anti-aliasing on windows. I want to know why and how to cause windows to render a non-cjk font of my choosing in this aliased style. I am not opposed to hex-editing or otherwise modifying the font if that's necessary. I've never been able to find information bout the mechanism or how it's triggered.

    • Permik 1 hour ago
      Just disable ClearType and all your text will be uniform :)
  • socalgal2 59 minutes ago
    And the companion article: https://lord.io/text-editing-hates-you-too/

    (posted in other other threads too)

  • casey2 36 minutes ago
    The real takeaway from the article is that you can rathole forever on ill-defined problems. Decide upfront whether you care about actual humans and their usecases or hypothetical humans and their hypothetical usecases.